Skip to content
Open
Show file tree
Hide file tree
Changes from 12 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
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
Comment thread
lord-haffi marked this conversation as resolved.
Outdated


@postprocess_docstring
class Tarifzeiten(Geschaeftsobjekt):
"""
Abbildung von Tarifzeiten, wann welche Preise gelten oder unter welchen Bedingungen.
"""
Comment thread
lord-haffi marked this conversation as resolved.

typ: Annotated[Optional[Literal[BoTyp.TARIFZEITEN]], Field(alias="_typ")] = BoTyp.TARIFZEITEN
"""Typ des Geschäftsobjekts – default 'TARIFZEITEN'"""
Comment thread
lord-haffi marked this conversation as resolved.
Outdated

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.
"""
Comment thread
lord-haffi marked this conversation as resolved.
typ: Annotated[
Optional[Literal[ComTyp.TARIFZEITENZEITSCHEIBE]], Field(alias="_typ")] = ComTyp.TARIFZEITENZEITSCHEIBE
"""Typ dieser Zeitscheibe - Default 'TARIFZEITENZEITSCHEIBE'"""
Comment thread
lord-haffi marked this conversation as resolved.
Outdated

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