diff --git a/src/bo4e/__init__.py b/src/bo4e/__init__.py
index bf331c295..10d89cfc4 100644
--- a/src/bo4e/__init__.py
+++ b/src/bo4e/__init__.py
@@ -42,6 +42,7 @@
"Tarifinfo",
"Tarifkosten",
"Tarifpreisblatt",
+ "Tarifzeiten",
"TechnischeRessource",
"Vertrag",
"Zaehler",
@@ -97,6 +98,8 @@
"Tarifpreisposition",
"TarifpreispositionProOrt",
"TarifpreisstaffelProOrt",
+ "TarifzeitenZeitscheibe",
+ "Tarifzeitstufe",
"Unterschrift",
"Vertragskonditionen",
"Vertragsteil",
@@ -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
@@ -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
diff --git a/src/bo4e/bo/tarifzeiten.py b/src/bo4e/bo/tarifzeiten.py
new file mode 100644
index 000000000..795c59abc
--- /dev/null
+++ b/src/bo4e/bo/tarifzeiten.py
@@ -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
+
+
+
+ .. HINT::
+ `Tarifzeiten JSON Schema `_
+
+ """
+
+ 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"""
diff --git a/src/bo4e/com/tarifzeitenzeitscheibe.py b/src/bo4e/com/tarifzeitenzeitscheibe.py
new file mode 100644
index 000000000..1d6771caa
--- /dev/null
+++ b/src/bo4e/com/tarifzeitenzeitscheibe.py
@@ -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
+
+
+
+ .. HINT::
+ `TarifzeitenZeitscheibe JSON Schema `_
+
+ """
+
+ 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"""
diff --git a/src/bo4e/com/tarifzeitstufe.py b/src/bo4e/com/tarifzeitstufe.py
new file mode 100644
index 000000000..343a7b0c6
--- /dev/null
+++ b/src/bo4e/com/tarifzeitstufe.py
@@ -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
+
+
+
+ .. HINT::
+ `Tarifzeitstufe JSON Schema `_
+
+ """
+
+ 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"""
diff --git a/src/bo4e/enum/botyp.py b/src/bo4e/enum/botyp.py
index 846f1bd5d..beae1aa88 100644
--- a/src/bo4e/enum/botyp.py
+++ b/src/bo4e/enum/botyp.py
@@ -48,6 +48,7 @@ class BoTyp(StrEnum):
TARIFINFO = "TARIFINFO"
TARIFKOSTEN = "TARIFKOSTEN"
TARIFPREISBLATT = "TARIFPREISBLATT"
+ TARIFZEITEN = "TARIFZEITEN"
VERTRAG = "VERTRAG"
ZAEHLER = "ZAEHLER"
ZEITREIHE = "ZEITREIHE"
diff --git a/src/bo4e/enum/comtyp.py b/src/bo4e/enum/comtyp.py
index 3b0cef55c..f152cd87f 100644
--- a/src/bo4e/enum/comtyp.py
+++ b/src/bo4e/enum/comtyp.py
@@ -62,6 +62,8 @@ class ComTyp(StrEnum):
TARIFPREISPOSITION = "TARIFPREISPOSITION"
TARIFPREISPOSITIONPROORT = "TARIFPREISPOSITIONPROORT"
TARIFPREISSTAFFELPROORT = "TARIFPREISSTAFFELPROORT"
+ TARIFZEITENZEITSCHEIBE = "TARIFZEITENZEITSCHEIBE"
+ TARIFZEITSTUFE = "TARIFZEITSTUFE"
UNTERSCHRIFT = "UNTERSCHRIFT"
VERTRAGSKONDITIONEN = "VERTRAGSKONDITIONEN"
VERTRAGSTEIL = "VERTRAGSTEIL"
diff --git a/tests/test_tarifzeiten.py b/tests/test_tarifzeiten.py
new file mode 100644
index 000000000..5ae8210d0
--- /dev/null
+++ b/tests/test_tarifzeiten.py
@@ -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)
diff --git a/tests/test_tarifzeitenzeitscheibe.py b/tests/test_tarifzeitenzeitscheibe.py
new file mode 100644
index 000000000..594ec9dbc
--- /dev/null
+++ b/tests/test_tarifzeitenzeitscheibe.py
@@ -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)
diff --git a/tests/test_tarifzeitstufe.py b/tests/test_tarifzeitstufe.py
new file mode 100644
index 000000000..e43fe2f35
--- /dev/null
+++ b/tests/test_tarifzeitstufe.py
@@ -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)