Skip to content

Commit

Permalink
Extend EdifactFormatVersion Enum with Values for 2024 + 2025 (#354)
Browse files Browse the repository at this point in the history
* Extend `EdifactFormatVersion` Enum with Values for 2024 + 2025

* rewrite, thanks pylint ;)

https://chat.openai.com/share/20b87615-7024-47f2-8044-f4947bec185b
  • Loading branch information
hf-kklein authored Jan 21, 2024
1 parent 0fce1b7 commit dbe75fd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 14 deletions.
41 changes: 28 additions & 13 deletions src/maus/edifact.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ class EdifactFormatVersion(str, Enum):
FV2304 = "FV2304" #: valid from 2023-04-01 onwards
FV2310 = "FV2310" #: valid from 2023-10-01 onwards
FV2404 = "FV2404" #: valid from 2024-04-01 onwards
FV2410 = "FV2410" #: valid from 2024-10-01 onwards
FV2504 = "FV2504" #: valid from 2025-01-01 onwards
FV2510 = "FV2510" #: valid from 2025-10-01 onwards
# whenever you add another value here, please also make sure to add its key date to get_edifact_format_version below

def __str__(self):
Expand All @@ -83,19 +86,31 @@ def __str__(self):

def get_edifact_format_version(key_date: datetime.datetime) -> EdifactFormatVersion:
"""
:return: the edifact format version that is valid on the specified key date
"""
if key_date < datetime.datetime(2021, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc):
return EdifactFormatVersion.FV2104
if key_date < datetime.datetime(2022, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc):
return EdifactFormatVersion.FV2110
if key_date < datetime.datetime(2023, 3, 31, 22, 0, 0, 0, tzinfo=datetime.timezone.utc):
return EdifactFormatVersion.FV2210
if key_date < datetime.datetime(2023, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc):
return EdifactFormatVersion.FV2304
if key_date < datetime.datetime(2024, 3, 31, 22, 0, 0, 0, tzinfo=datetime.timezone.utc):
return EdifactFormatVersion.FV2310
return EdifactFormatVersion.FV2404
Retrieves the appropriate Edifact format version applicable for the given key date.
This function determines the correct Edifact format version by comparing the provided key date
against a series of predefined datetime thresholds. Each threshold corresponds to a specific
version of the Edifact format.
:param key_date: The date for which the Edifact format version is to be determined.
:return: The Edifact format version valid for the specified key date.
"""
format_version_thresholds = [
(datetime.datetime(2021, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2104),
(datetime.datetime(2022, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2110),
(datetime.datetime(2023, 3, 31, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2210),
(datetime.datetime(2023, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2304),
(datetime.datetime(2024, 3, 31, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2310),
(datetime.datetime(2024, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2404),
(datetime.datetime(2025, 3, 31, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2410),
(datetime.datetime(2025, 9, 30, 22, 0, 0, 0, tzinfo=datetime.timezone.utc), EdifactFormatVersion.FV2504),
]

for threshold_date, version in format_version_thresholds:
if key_date < threshold_date:
return version

return EdifactFormatVersion.FV2510


def get_current_edifact_format_version() -> EdifactFormatVersion:
Expand Down
10 changes: 9 additions & 1 deletion tests/unit_tests/test_edifact_enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,16 @@ def test_pruefi_to_format(self, expectation_tuple: Tuple[str, EdifactFormat]):
pytest.param(datetime(2021, 10, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2110),
pytest.param(datetime(2022, 7, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2110),
pytest.param(datetime(2022, 10, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2210),
pytest.param(datetime(2022, 10, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2210),
pytest.param(datetime(2023, 12, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2310),
pytest.param(datetime(2024, 1, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2310),
pytest.param(datetime(2024, 4, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2404),
pytest.param(datetime(2024, 9, 30, 21, 59, 59, tzinfo=timezone.utc), EdifactFormatVersion.FV2404),
pytest.param(datetime(2024, 9, 30, 22, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2410),
pytest.param(datetime(2025, 3, 31, 22, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2504),
pytest.param(datetime(2025, 9, 30, 22, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2510),
pytest.param(
datetime(2050, 10, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2404
datetime(2050, 10, 1, 0, 0, 0, tzinfo=timezone.utc), EdifactFormatVersion.FV2510
), # or what ever is the latest version
],
)
Expand Down

0 comments on commit dbe75fd

Please sign in to comment.