diff --git a/src/bo4e/__init__.py b/src/bo4e/__init__.py index 90a761826..5fb9533d7 100644 --- a/src/bo4e/__init__.py +++ b/src/bo4e/__init__.py @@ -14,6 +14,7 @@ "Ausschreibung", "Bilanzierung", "Buendelvertrag", + "Einspeisung", "Energiemenge", "Fremdkosten", "Geraet", @@ -204,6 +205,8 @@ "ZaehlertypSpezifikation", "Zeitreihentyp", "ZusatzAttribut", + "EEGVermarktungsform", + "FernsteuerbarkeitStatus", "__version__", "__gh_version__", ] @@ -215,6 +218,7 @@ from .bo.ausschreibung import Ausschreibung from .bo.bilanzierung import Bilanzierung from .bo.buendelvertrag import Buendelvertrag +from .bo.einspeisung import Einspeisung from .bo.energiemenge import Energiemenge from .bo.fremdkosten import Fremdkosten from .bo.geraet import Geraet @@ -332,10 +336,12 @@ from .enum.botyp import BoTyp from .enum.comtyp import ComTyp from .enum.dienstleistungstyp import Dienstleistungstyp +from .enum.eeg_vermarktungsform import EEGVermarktungsform from .enum.emobilitaetsart import EMobilitaetsart from .enum.energierichtung import Energierichtung from .enum.erzeugungsart import Erzeugungsart from .enum.fallgruppenzuordnung import Fallgruppenzuordnung +from .enum.fernsteuerbarkeit_status import FernsteuerbarkeitStatus from .enum.gasqualitaet import Gasqualitaet from .enum.gebiettyp import Gebiettyp from .enum.geraeteklasse import Geraeteklasse diff --git a/src/bo4e/bo/einspeisung.py b/src/bo4e/bo/einspeisung.py new file mode 100644 index 000000000..0dd61917d --- /dev/null +++ b/src/bo4e/bo/einspeisung.py @@ -0,0 +1,41 @@ +""" +Contains Einspeisung class and corresponding marshmallow schema for de-/serialization +""" + +# pylint: disable=too-few-public-methods +# pylint: disable=no-name-in-module +from typing import Optional + +from ..enum.eeg_vermarktungsform import EEGVermarktungsform +from ..enum.fernsteuerbarkeit_status import FernsteuerbarkeitStatus +from ..enum.geschaeftspartnerrolle import Geschaeftspartnerrolle +from ..enum.landescode import Landescode +from ..utils import postprocess_docstring +from .geschaeftsobjekt import Geschaeftsobjekt + + +@postprocess_docstring +class Einspeisung(Geschaeftsobjekt): + """ + Abbildung der Einspeisung. + + .. raw:: html + + + + .. HINT:: + `Einspeisung JSON Schema `_ + + """ + + marktlokations_id: Optional[str] = None + + tranche_id: Optional[str] = None + + verguetungsempfaenger: Optional[Geschaeftspartnerrolle] = None + + eeg_vermarktungsform: Optional[EEGVermarktungsform] = None + + landescode: Optional[Landescode] = None + + fernsteuerbarkeit_status: Optional[FernsteuerbarkeitStatus] = None diff --git a/src/bo4e/enum/eeg_vermarktungsform.py b/src/bo4e/enum/eeg_vermarktungsform.py new file mode 100644 index 000000000..57c629f80 --- /dev/null +++ b/src/bo4e/enum/eeg_vermarktungsform.py @@ -0,0 +1,21 @@ +# pylint:disable=missing-module-docstring + +from bo4e.enum.strenum import StrEnum + + +class EEGVermarktungsform(StrEnum): + """ + Diese Enum repräsentiert die Vermarktungsformen nach dem EEG. + """ + + AUSFALLVERGUETUNG = "AUSFALLVERGUETUNG" + # Ausfallvergütung für den Fall, dass andere Vermarktungsmethoden nicht verfügbar sind + + MARKTPRAEMIE = "MARKTPRAEMIE" + # Marktprämie für die geförderte Direktvermarktung + + SONSTIGE = "SONSTIGE" + # Sonstige Vermarktungsformen ohne gesetzliche Vergütung + + KWKG_VERGUETUNG = "KWKG_VERGUETUNG" + # Vergütung nach dem Kraft-Wärme-Kopplungsgesetz (KWKG) diff --git a/src/bo4e/enum/fernsteuerbarkeit_status.py b/src/bo4e/enum/fernsteuerbarkeit_status.py new file mode 100644 index 000000000..061c96227 --- /dev/null +++ b/src/bo4e/enum/fernsteuerbarkeit_status.py @@ -0,0 +1,19 @@ +# pylint:disable=missing-module-docstring + +from bo4e.enum.strenum import StrEnum + + +class FernsteuerbarkeitStatus(StrEnum): + """ + Enum zur Abbildung des Status der Fernsteuerbarkeit + + Marktlokation ist technisch fernsteuerbar. Der NB bestätigt mit der Anmeldung einer erzeugenden Marktlokation zur + Direktvermarktung, dass die Marktlokation mit einer Fernsteuerung ausgestattet ist, aber dem NB keine Information + darüber vorliegt, dass der LF die Marktlokation fernsteuern kann. Die Voraussetzung zur Zahlung der + Managementprämie für fernsteuerbare Marktlokation ist nicht gegeben. + """ + + NICHT_FERNSTEUERBAR = "NICHT_FERNSTEUERBAR" #: nicht fernsteuerbar + TECHNISCH_FERNSTEUERBAR = "TECHNISCH_FERNSTEUERBAR" #: technisch fernsteuerbar + LIEFERANT_FERNSTEUERBAR = "LIEFERANT_FERNSTEUERBAR" #: lieferantenseitig fernsteuerbar + # diff --git a/tests/test_einspeisung.py b/tests/test_einspeisung.py new file mode 100644 index 000000000..3c1b20974 --- /dev/null +++ b/tests/test_einspeisung.py @@ -0,0 +1,31 @@ +import pytest + +from bo4e import Geschaeftspartnerrolle, Landescode +from bo4e.bo.einspeisung import Einspeisung +from bo4e.enum.eeg_vermarktungsform import EEGVermarktungsform +from bo4e.enum.fernsteuerbarkeit_status import FernsteuerbarkeitStatus +from tests.serialization_helper import assert_serialization_roundtrip + + +class TestEinspeisung: + @pytest.mark.parametrize( + "einspeisung", + [ + pytest.param( + Einspeisung( + marktlokations_id="teststring", + tranche_id="teststring", + verguetungsempfaenger=Geschaeftspartnerrolle.LIEFERANT, + eeg_vermarktungsform=EEGVermarktungsform.KWKG_VERGUETUNG, + landescode=Landescode.DE, # type:ignore[attr-defined] + fernsteuerbarkeit_status=FernsteuerbarkeitStatus.NICHT_FERNSTEUERBAR, + ), + id="all attributes at first level", + ), + ], + ) + def test_serialization_roundtrip(self, einspeisung: Einspeisung) -> None: + """ + Test de-/serialisation of Einspeisung + """ + assert_serialization_roundtrip(einspeisung)