Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions src/bo4e/bo/geschaeftsobjekt.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
from decimal import Decimal
from typing import Annotated, Optional


from humps.main import camelize

# pylint: disable=no-name-in-module
from pydantic import BaseModel, ConfigDict, Field

from bo4e.version import __version__
from bo4e.zusatzattribut import ZusatzAttribut
from ..enum.botyp import BoTyp

from ..utils import postprocess_docstring

Expand Down Expand Up @@ -36,6 +38,7 @@ class Geschaeftsobjekt(BaseModel): # pragma: no cover
Version der BO-Struktur aka "fachliche Versionierung"
"""

typ: Annotated[Optional[BoTyp], Field(alias="_typ")] = BoTyp.GESCHAEFTSOBJEKT
zusatz_attribute: Optional[list["ZusatzAttribut"]] = None
# zusatz_attribute is a list of ZusatzAttribut objects which are used to store additional information

Expand Down
29 changes: 29 additions & 0 deletions src/bo4e/bo/tarifzeiten.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""
Contains Tarifzeiten class
"""

from typing import List, Optional, Annotated, Literal
from pydantic import Field

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

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.
"""

typ: Annotated[Optional[Literal[BoTyp.TARIFZEITEN]], Field(alias="_typ")] = BoTyp.TARIFZEITEN
"""Typ des Geschäftsobjekts – default 'TARIFZEITEN'"""

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

zeitscheiben: Optional[List["TarifzeitenZeitscheibe"]] = None
"""Liste von Zeitabschnitten, die tarifliche Regelungen enthalten"""
4 changes: 2 additions & 2 deletions src/bo4e/com/preisposition.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
from ..enum.comtyp import ComTyp
from ..utils import postprocess_docstring
from .com import COM
from ..enum.tarifzeit import Tarifzeit

if TYPE_CHECKING:
from ..enum.bdewartikelnummer import BDEWArtikelnummer
from ..enum.bemessungsgroesse import Bemessungsgroesse
from ..enum.kalkulationsmethode import Kalkulationsmethode
from ..enum.leistungstyp import Leistungstyp
from ..enum.mengeneinheit import Mengeneinheit
from ..enum.tarifzeit import Tarifzeit
from ..enum.waehrungseinheit import Waehrungseinheit
from .preisstaffel import Preisstaffel

Expand Down Expand Up @@ -60,7 +60,7 @@ class Preisposition(COM):
Die Zeit(dauer) auf die sich der Preis bezieht.
Z.B. ein Jahr für einen Leistungspreis der in €/kW/Jahr ausgegeben wird
"""
tarifzeit: Optional["Tarifzeit"] = None
tarifzeit: Optional[Tarifzeit] = None
"""Festlegung, für welche Tarifzeit der Preis hier festgelegt ist"""
bdew_artikelnummer: Optional["BDEWArtikelnummer"] = None
"""
Expand Down
26 changes: 26 additions & 0 deletions src/bo4e/com/tarifzeit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""
Contains Tarifzeit class
"""

from typing import Optional, Annotated, Literal
from pydantic import Field

from .. import COM, ComTyp
from ..utils import postprocess_docstring
from ..com.zeitraum import Zeitraum


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

typ: Annotated[Optional[Literal[ComTyp.TARIFZEIT]], Field(alias="_typ")] = ComTyp.TARIFZEIT
"""Typ der Tarifzeit – default 'TARIFZEIT'"""

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

tarifstufe: Optional[str] = None
"""Optional: Angabe der Tarifstufe, z. B. HT, NT, ST"""
28 changes: 28 additions & 0 deletions src/bo4e/com/tarifzeitenzeitscheibe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""
Contains TarifzeitenZeitscheibe class
"""

from typing import Optional, List, Annotated, Literal
from pydantic import Field

from .. import COM, ComTyp
from ..utils import postprocess_docstring

from ..com.zeitraum import Zeitraum
from ..com.tarifzeit import Tarifzeit


@postprocess_docstring
class TarifzeitenZeitscheibe(COM):
"""
Eine Zeitscheibe innerhalb der Tarifzeiten mit zugehöriger Gültigkeit und Tarifzeitabschnitten.
"""
typ: Annotated[
Optional[Literal[ComTyp.TARIFZEITENZEITSCHEIBE]], Field(alias="_typ")] = ComTyp.TARIFZEITENZEITSCHEIBE
"""Typ dieser Zeitscheibe - Default 'TARIFZEITENZEITSCHEIBE'"""

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

tarifzeiten: Optional[List[Tarifzeit]] = None
"""Liste von Tarifzeiten, z. B. NT, HT oder weitere Zeitmodelle"""
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 @@ -61,6 +61,8 @@ class ComTyp(StrEnum):
TARIFPREISPOSITION = "TARIFPREISPOSITION"
TARIFPREISPOSITIONPROORT = "TARIFPREISPOSITIONPROORT"
TARIFPREISSTAFFELPROORT = "TARIFPREISSTAFFELPROORT"
TARIFZEIT = "TARIFZEIT"
TARIFZEITENZEITSCHEIBE = "TARIFZEITENZEITSCHEIBE"
UNTERSCHRIFT = "UNTERSCHRIFT"
VERBRAUCH = "VERBRAUCH"
VERTRAGSKONDITIONEN = "VERTRAGSKONDITIONEN"
Expand Down
4 changes: 2 additions & 2 deletions tests/test_preisposition.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import pytest

from bo4e.enum.tarifzeit import Tarifzeit

from bo4e import (
BDEWArtikelnummer,
Bemessungsgroesse,
Expand All @@ -10,12 +12,10 @@
Mengeneinheit,
Preisposition,
Preisstaffel,
Tarifzeit,
Waehrungseinheit,
)
from tests.serialization_helper import assert_serialization_roundtrip


class TestPreisposition:
@pytest.mark.parametrize(
"preisposition",
Expand Down
28 changes: 28 additions & 0 deletions tests/test_tarifzeit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import pytest

from datetime import date
from bo4e import Zeitraum
from bo4e.com.tarifzeit import Tarifzeit
from tests.serialization_helper import assert_serialization_roundtrip


class TestTarifzeit:
@pytest.mark.parametrize(
"tarifzeit",
[
pytest.param(
Tarifzeit(
zeitraum=Zeitraum(
startdatum=date(2025, 1, 1),
enddatum=date(2025, 1, 31),
),
tarifstufe="HT",
)
)
]
)
def test_serialization_roundtrip(self, tarifzeit: Tarifzeit) -> None:
"""
Test de-/serialisation of Tarifzeit.
"""
assert_serialization_roundtrip(tarifzeit)
40 changes: 40 additions & 0 deletions tests/test_tarifzeiten.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from datetime import date

import pytest

from bo4e import Marktteilnehmer, Zeitraum
from bo4e.bo.tarifzeiten import Tarifzeiten
from bo4e.com.tarifzeit import Tarifzeit
from bo4e.com.tarifzeitenzeitscheibe import TarifzeitenZeitscheibe
from tests.serialization_helper import assert_serialization_roundtrip


class TestTarifzeiten:
@pytest.mark.parametrize(
"tarifzeiten",
[
pytest.param(
Tarifzeiten(
marktteilnehmer=Marktteilnehmer(),
zeitscheiben=[TarifzeitenZeitscheibe(
gueltigkeit=Zeitraum(
startdatum=date(2025, 1, 1),
enddatum=date(2025, 1, 31),
),
tarifzeiten=[Tarifzeit(
zeitraum=Zeitraum(
startdatum=date(2025, 1, 1),
enddatum=date(2025, 1, 31),
),
tarifstufe="HT",
)])]
)
)

]
)
def test_serialization_roundtrip(self, tarifzeiten: Tarifzeiten) -> None:
"""
Test de-/serialisation of Tarifzeit.
"""
assert_serialization_roundtrip(tarifzeiten)
38 changes: 38 additions & 0 deletions tests/test_tarifzeitenzeitscheibe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from datetime import date

import pytest

from bo4e import Zeitraum
from bo4e.com.tarifzeit import Tarifzeit
from bo4e.com.tarifzeitenzeitscheibe import TarifzeitenZeitscheibe
from tests.serialization_helper import assert_serialization_roundtrip


class TestTarifzeitenZeitscheibe:
@pytest.mark.parametrize(
"zeitscheibe",
[
pytest.param(
TarifzeitenZeitscheibe(
gueltigkeit=Zeitraum(
startdatum=date(2025, 1, 1),
enddatum=date(2025, 1, 31),
),
tarifzeiten=[
Tarifzeit(
zeitraum=Zeitraum(
startdatum=date(2025, 1, 1),
enddatum=date(2025, 1, 31),
),
tarifstufe="HT",
)
],
)
)
]
)
def test_serialization_roundtrip(self, zeitscheibe: TarifzeitenZeitscheibe) -> None:
"""
Test de-/serialisation of TarifzeitenZeitscheibe.
"""
assert_serialization_roundtrip(zeitscheibe)
Loading