Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
eab1bca
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 15, 2025
5752465
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 17, 2025
370e6c0
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 22, 2025
814abbf
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 22, 2025
bfce41d
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 22, 2025
5b5ca65
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 22, 2025
49c404d
Merge branch 'main' into tarifzeiten_modul3
enet-Rossier Apr 23, 2025
144bc0a
WIP: Änderungen an verschiedenen Datein zur Implementierung von Tarif…
enet-Rossier Apr 29, 2025
ba2bd5d
WIP: Tarifstufen entfernt und durch Str ersetzt
enet-Rossier May 5, 2025
c81f475
Merge remote-tracking branch 'upstream/main'
enet-Rossier May 6, 2025
932c888
Merge branch 'main' into main
DeltaDaniel Nov 11, 2025
f986787
Merge branch 'main' into main
DeltaDaniel Nov 11, 2025
20141af
Linting
Nov 12, 2025
7f19913
Merge branch 'main' into main
XaMa928 Nov 12, 2025
3c084cd
Linting
Nov 12, 2025
26fc402
Merge branch 'main' into main
XaMa928 Nov 12, 2025
d906faf
Testfix: serialization_roundtrip nur mit Toplevel Attributen
Nov 12, 2025
53f32fb
Testfix?
Nov 12, 2025
5a60968
Testfix? imports aus bo4e ohne subdirectory
Nov 12, 2025
5b2f1f3
imports homogenisiert
Nov 12, 2025
bb40dbd
Umbau auf TYPE_CHECKING imports
Nov 12, 2025
b97a1d9
__init__.py ergänzt
Nov 12, 2025
2e7456c
rename Tarifzeit to Tarifzeitstufe to prevent ambigious naming
Nov 12, 2025
bb462f9
fix test after renaming
Nov 12, 2025
4701fa6
Fix Linting
Nov 12, 2025
02182ed
#989 added UML and removed duplication in docs
Dec 2, 2025
a44f683
Merge branch 'main' into main
XaMa928 Dec 2, 2025
5666cb7
#989 Doc Linting
Dec 3, 2025
949f18f
#989 Doc Linting
Dec 3, 2025
8c07c7e
#989 Doc Linting
Dec 3, 2025
f03f598
#989 Doc Linting
Dec 3, 2025
04be10c
Merge branch 'main' into main
enet-Rossier Dec 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/bo4e/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
"Tarifinfo",
"Tarifkosten",
"Tarifpreisblatt",
"Tarifzeiten",
"TechnischeRessource",
"Vertrag",
"Zaehler",
Expand Down Expand Up @@ -97,6 +98,8 @@
"Tarifpreisposition",
"TarifpreispositionProOrt",
"TarifpreisstaffelProOrt",
"TarifzeitenZeitscheibe",
"Tarifzeitstufe",
"Unterschrift",
"Vertragskonditionen",
"Vertragsteil",
Expand Down Expand Up @@ -241,6 +244,7 @@
from .bo.tarifinfo import Tarifinfo
from .bo.tarifkosten import Tarifkosten
from .bo.tarifpreisblatt import Tarifpreisblatt
from .bo.tarifzeiten import Tarifzeiten
from .bo.technischeressource import TechnischeRessource
from .bo.vertrag import Vertrag
from .bo.zaehler import Zaehler
Expand Down Expand Up @@ -299,6 +303,8 @@
from .com.tarifpreisposition import Tarifpreisposition
from .com.tarifpreispositionproort import TarifpreispositionProOrt
from .com.tarifpreisstaffelproort import TarifpreisstaffelProOrt
from .com.tarifzeitenzeitscheibe import TarifzeitenZeitscheibe
from .com.tarifzeitstufe import Tarifzeitstufe
from .com.unterschrift import Unterschrift
from .com.vertragskonditionen import Vertragskonditionen
from .com.vertragsteil import Vertragsteil
Expand Down
38 changes: 38 additions & 0 deletions src/bo4e/bo/tarifzeiten.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""
Contains Tarifzeiten class
"""

from typing import TYPE_CHECKING, Annotated, Literal, Optional

from pydantic import Field

from ..enum.botyp import BoTyp
from ..utils import postprocess_docstring
from .geschaeftsobjekt import Geschaeftsobjekt

if TYPE_CHECKING:
from ..bo.marktteilnehmer import Marktteilnehmer
from ..com.tarifzeitenzeitscheibe import TarifzeitenZeitscheibe


@postprocess_docstring
class Tarifzeiten(Geschaeftsobjekt):
"""
Abbildung von Tarifzeiten, wann welche Preise gelten oder unter welchen Bedingungen.

.. raw:: html

<object data="../_static/images/bo4e/bo/Tarifzeiten.svg" type="image/svg+xml"></object>

.. HINT::
`Tarifzeiten JSON Schema <https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/BO4E/BO4E-Schemas/{__gh_version__}/src/bo4e_schemas/bo/Tarifzeiten.json>`_

"""

typ: Annotated[Optional[Literal[BoTyp.TARIFZEITEN]], Field(alias="_typ")] = BoTyp.TARIFZEITEN

marktteilnehmer: Optional["Marktteilnehmer"] = None
"""Optionaler Verweis auf den Anbieter / Marktpartner"""

zeitscheiben: Optional[list["TarifzeitenZeitscheibe"]] = None
"""Liste von Zeitabschnitten, die tarifliche Regelungen enthalten"""
40 changes: 40 additions & 0 deletions src/bo4e/com/tarifzeitenzeitscheibe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"""
Contains TarifzeitenZeitscheibe class
"""

from typing import TYPE_CHECKING, Annotated, Literal, Optional

from pydantic import Field

from ..enum.comtyp import ComTyp
from ..utils import postprocess_docstring
from .com import COM

if TYPE_CHECKING:
from ..com.tarifzeitstufe import Tarifzeitstufe
from ..com.zeitraum import Zeitraum


@postprocess_docstring
class TarifzeitenZeitscheibe(COM):
"""
Eine Zeitscheibe innerhalb der Tarifzeiten mit zugehöriger Gültigkeit und Tarifzeitabschnitten.

.. raw:: html

<object data="../_static/images/bo4e/com/TarifzeitenZeitscheibe.svg" type="image/svg+xml"></object>

.. HINT::
`TarifzeitenZeitscheibe JSON Schema <https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/BO4E/BO4E-Schemas/{__gh_version__}/src/bo4e_schemas/com/TarifzeitenZeitscheibe.json>`_

"""

typ: Annotated[Optional[Literal[ComTyp.TARIFZEITENZEITSCHEIBE]], Field(alias="_typ")] = (
ComTyp.TARIFZEITENZEITSCHEIBE
)

gueltigkeit: Optional["Zeitraum"] = None
"""Zeitraum, in dem diese Zeitscheibe gültig ist"""

tarifzeiten: Optional[list["Tarifzeitstufe"]] = None
"""Liste von Tarifzeitenstufen, z. B. NT, HT oder weitere Zeitmodelle"""
37 changes: 37 additions & 0 deletions src/bo4e/com/tarifzeitstufe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""
Contains Tarifzeitstufe class
"""

from typing import TYPE_CHECKING, Annotated, Literal, Optional

from pydantic import Field

from ..enum.comtyp import ComTyp
from ..utils import postprocess_docstring
from .com import COM

if TYPE_CHECKING:
from ..com.zeitraum import Zeitraum


@postprocess_docstring
class Tarifzeitstufe(COM):
"""
Tarifzeitstufe mit Zuordnung zu einem Zeitraum und einer optionalen Tarifstufe.

.. raw:: html

<object data="../_static/images/bo4e/com/Tarifzeitstufe.svg" type="image/svg+xml"></object>

.. HINT::
`Tarifzeitstufe JSON Schema <https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/BO4E/BO4E-Schemas/{__gh_version__}/src/bo4e_schemas/com/Tarifzeitstufe.json>`_

"""

typ: Annotated[Optional[Literal[ComTyp.TARIFZEITSTUFE]], Field(alias="_typ")] = ComTyp.TARIFZEITSTUFE

zeitraum: Optional["Zeitraum"] = None
"""Gültigkeitszeitraum der Tarifzeitstufe"""

tarifstufe: Optional[str] = None
"""Optional: Angabe der Tarifstufe, z. B. HT, NT, ST"""
1 change: 1 addition & 0 deletions src/bo4e/enum/botyp.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class BoTyp(StrEnum):
TARIFINFO = "TARIFINFO"
TARIFKOSTEN = "TARIFKOSTEN"
TARIFPREISBLATT = "TARIFPREISBLATT"
TARIFZEITEN = "TARIFZEITEN"
VERTRAG = "VERTRAG"
ZAEHLER = "ZAEHLER"
ZEITREIHE = "ZEITREIHE"
Expand Down
2 changes: 2 additions & 0 deletions src/bo4e/enum/comtyp.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ class ComTyp(StrEnum):
TARIFPREISPOSITION = "TARIFPREISPOSITION"
TARIFPREISPOSITIONPROORT = "TARIFPREISPOSITIONPROORT"
TARIFPREISSTAFFELPROORT = "TARIFPREISSTAFFELPROORT"
TARIFZEITENZEITSCHEIBE = "TARIFZEITENZEITSCHEIBE"
TARIFZEITSTUFE = "TARIFZEITSTUFE"
UNTERSCHRIFT = "UNTERSCHRIFT"
VERTRAGSKONDITIONEN = "VERTRAGSKONDITIONEN"
VERTRAGSTEIL = "VERTRAGSTEIL"
Expand Down
26 changes: 26 additions & 0 deletions tests/test_tarifzeiten.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from datetime import date

import pytest

from bo4e import Marktteilnehmer, Tarifzeiten, TarifzeitenZeitscheibe
from tests.serialization_helper import assert_serialization_roundtrip


class TestTarifzeiten:
@pytest.mark.parametrize(
"tarifzeiten",
[
pytest.param(
Tarifzeiten(
marktteilnehmer=Marktteilnehmer(),
zeitscheiben=[TarifzeitenZeitscheibe()],
),
id="all attributes at first level",
),
],
)
def test_serialization_roundtrip(self, tarifzeiten: Tarifzeiten) -> None:
"""
Test de-/serialisation of Tarifzeit.
"""
assert_serialization_roundtrip(tarifzeiten)
26 changes: 26 additions & 0 deletions tests/test_tarifzeitenzeitscheibe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from datetime import date

import pytest

from bo4e import TarifzeitenZeitscheibe, Tarifzeitstufe, Zeitraum
from tests.serialization_helper import assert_serialization_roundtrip


class TestTarifzeitenZeitscheibe:
@pytest.mark.parametrize(
"tarifzeitenzeitscheibe",
[
pytest.param(
TarifzeitenZeitscheibe(
gueltigkeit=Zeitraum(),
tarifzeiten=[Tarifzeitstufe()],
),
id="all attributes at first level",
),
],
)
def test_serialization_roundtrip(self, tarifzeitenzeitscheibe: TarifzeitenZeitscheibe) -> None:
"""
Test de-/serialisation of TarifzeitenZeitscheibe.
"""
assert_serialization_roundtrip(tarifzeitenzeitscheibe)
26 changes: 26 additions & 0 deletions tests/test_tarifzeitstufe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from datetime import date

import pytest

from bo4e import Tarifzeitstufe, Zeitraum
from tests.serialization_helper import assert_serialization_roundtrip


class TestTarifzeitstufe:
@pytest.mark.parametrize(
"tarifzeitstufe",
[
pytest.param(
Tarifzeitstufe(
zeitraum=Zeitraum(),
tarifstufe="HT",
),
id="all attributes at first level",
)
],
)
def test_serialization_roundtrip(self, tarifzeitstufe: Tarifzeitstufe) -> None:
"""
Test de-/serialisation of Tarifzeitstufe.
"""
assert_serialization_roundtrip(tarifzeitstufe)
Loading