Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change Zeitraum to Zeitspanne, fix tests, change zeitspanne datetime to date and time #745

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
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
1 change: 0 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,3 @@ Andere nennenswerte BO4E Implementierungen
* `PHP <https://github.com/conuti-gmbh/bo4e-php/>`_ (und `Schemas <https://github.com/conuti-gmbh/bo4e-schema>`_)

.. _`BO4E website`: https://www.bo4e.de/dokumentation
.. _`Contribution Guide`: CONTRIBUTING.md
2 changes: 0 additions & 2 deletions src/bo4e/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@
"VerwendungszweckProMarktrolle",
"Zaehlwerk",
"Zaehlzeitregister",
"Zeitraum",
"Zeitreihenwert",
"Zeitspanne",
"Zustaendigkeit",
Expand Down Expand Up @@ -293,7 +292,6 @@
from .com.verwendungszweckpromarktrolle import VerwendungszweckProMarktrolle
from .com.zaehlwerk import Zaehlwerk
from .com.zaehlzeitregister import Zaehlzeitregister
from .com.zeitraum import Zeitraum
from .com.zeitreihenwert import Zeitreihenwert
from .com.zeitspanne import Zeitspanne
from .com.zustaendigkeit import Zustaendigkeit
Expand Down
20 changes: 9 additions & 11 deletions src/bo4e/bo/ausschreibung.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

if TYPE_CHECKING:
from ..com.ausschreibungslos import Ausschreibungslos
from ..com.zeitraum import Zeitraum
from ..com.zeitspanne import Zeitspanne
from ..enum.ausschreibungsportal import Ausschreibungsportal
from ..enum.ausschreibungsstatus import Ausschreibungsstatus
from ..enum.ausschreibungstyp import Ausschreibungstyp
Expand Down Expand Up @@ -52,16 +52,14 @@ class Ausschreibung(Geschaeftsobjekt):
Mit diesem Objekt können Geschäftspartner übertragen werden.
Sowohl Unternehmen, als auch Privatpersonen können Geschäftspartner sein
"""
abgabefrist: Optional["Zeitraum"] = None
"""
Diese Komponente wird zur Abbildung von Zeiträumen in Form von Dauern oder der Angabe von Start und Ende verwendet.
Es muss daher entweder eine Dauer oder ein Zeitraum in Form von Start und Ende angegeben sein
"""
bindefrist: Optional["Zeitraum"] = None
"""
Diese Komponente wird zur Abbildung von Zeiträumen in Form von Dauern oder der Angabe von Start und Ende verwendet.
Es muss daher entweder eine Dauer oder ein Zeitraum in Form von Start und Ende angegeben sein
"""
abgabefrist: Optional["Zeitspanne"] = None
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@snsttr Hier sollten wir nochmal weiterdiskutieren wie eine sinnvolle Abbildung aussieeht. Evtl. Abgabefrist als Zeitpunkt und Bindefrist als Zeitmenge, oder Zeitspanne?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wie gehen wir damit um, wenn Felder sowohl eine Zeitspanne als eine Zeitmenge beinhalten könnten, also so wie die alte COM Zeitraum?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mögliche Lösung: Zeitraum doch noch drinlassen, als deprectaed markeiren, aber für manche Fälle noch drinlassen, wenn es wirklcih beides sein kann.
Alternativ: Felder duplizieren: abgabefristdauer, abgeabfristdatum

Copy link
Collaborator

@lord-haffi lord-haffi Jun 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wie gehen wir damit um, wenn Felder sowohl eine Zeitspanne als eine Zeitmenge beinhalten könnten, also so wie die alte COM Zeitraum?

Optional["Zeitspanne | Zeitmenge"]? Dafür gibt's doch den Union-type :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stimmt, in einer Diskussion mit Konstantin kam allerdings die Frage auf, ob das so eine gute Idee ist, da es nicht in allen Sprachen ein Pendant zum Union-type gibt.
Da es ja an mehreren Stellen Fristen gibt, kam mir noch die Idee ein COM Frist zu erstellen, was dann beide Optionen beinhaltet. Was denkt ihr? @lord-haffi @snsttr @hf-kklein @hf-krechan @hf-aschloegl

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Naja, in den JSON-Schemas wird der Any-Of type definiert, was genau der Union-type in Python ist. Wie die einzelnen Sprachen das Pattern dann umsetzen, ist ein Problem des Code-Generators imo. Bzw. desjenigen, der das dann implementiert. Da die Typen auch disjunkt sind, sehe ich da zumindest in der Theorie auch kein Problem, da nen Union draus zu machen.
@hf-kklein Was ist deine Meinung dazu?

# """
# Todo: Sinnigen Docstring schreiben
# """
bindefrist: Optional["Zeitspanne"] = None
# """
# Todo: Sinnigen Docstring schreiben
# """
#: Die einzelnen Lose, aus denen sich die Ausschreibung zusammensetzt
lose: Optional[list["Ausschreibungslos"]] = None

Expand Down
6 changes: 3 additions & 3 deletions src/bo4e/bo/fremdkosten.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
if TYPE_CHECKING:
from ..com.betrag import Betrag
from ..com.fremdkostenblock import Fremdkostenblock
from ..com.zeitraum import Zeitraum
from ..com.zeitspanne import Zeitspanne


# pylint: disable=too-few-public-methods
Expand All @@ -36,8 +36,8 @@ class Fremdkosten(Geschaeftsobjekt):
"""

typ: Annotated[Optional["Typ"], Field(alias="_typ")] = Typ.FREMDKOSTEN
#: Für diesen Zeitraum wurden die Kosten ermittelt
gueltigkeit: Optional["Zeitraum"] = None
#: Für diese Zeitspanne wurden die Kosten ermittelt
gueltigkeit: Optional["Zeitspanne"] = None
#: Die Gesamtsumme über alle Kostenblöcke und -positionen
summe_kosten: Optional["Betrag"] = None
#: In Kostenblöcken werden Kostenpositionen zusammengefasst. Beispiele: Netzkosten, Umlagen, Steuern etc
Expand Down
6 changes: 3 additions & 3 deletions src/bo4e/bo/kosten.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
if TYPE_CHECKING:
from ..com.betrag import Betrag
from ..com.kostenblock import Kostenblock
from ..com.zeitraum import Zeitraum
from ..com.zeitspanne import Zeitspanne
from ..enum.kostenklasse import Kostenklasse


Expand All @@ -39,8 +39,8 @@ class Kosten(Geschaeftsobjekt):
typ: Annotated[Optional["Typ"], Field(alias="_typ")] = Typ.KOSTEN
#: Klasse der Kosten, beispielsweise Fremdkosten
kostenklasse: Optional["Kostenklasse"] = None
#: Für diesen Zeitraum wurden die Kosten ermittelt
gueltigkeit: Optional["Zeitraum"] = None
#: Für diese Zeitspanne wurden die Kosten ermittelt
gueltigkeit: Optional["Zeitspanne"] = None
#: In Kostenblöcken werden Kostenpositionen zusammengefasst. Beispiele: Netzkosten, Umlagen, Steuern etc
kostenbloecke: Optional[list["Kostenblock"]] = None

Expand Down
6 changes: 3 additions & 3 deletions src/bo4e/bo/preisblatt.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

if TYPE_CHECKING:
from ..com.preisposition import Preisposition
from ..com.zeitraum import Zeitraum
from ..com.zeitspanne import Zeitspanne
from ..enum.preisstatus import Preisstatus
from ..enum.sparte import Sparte
from .marktteilnehmer import Marktteilnehmer
Expand Down Expand Up @@ -47,8 +47,8 @@ class Preisblatt(Geschaeftsobjekt):
sparte: Optional["Sparte"] = None
#: Merkmal, das anzeigt, ob es sich um vorläufige oder endgültige Preise handelt
preisstatus: Optional["Preisstatus"] = None
#: Der Zeitraum für den der Preis festgelegt ist
gueltigkeit: Optional["Zeitraum"] = None
#: Die Zeitspanne, für die der Preis festgelegt ist
gueltigkeit: Optional["Zeitspanne"] = None
#: Die einzelnen Positionen, die mit dem Preisblatt abgerechnet werden können. Z.B. Arbeitspreis, Grundpreis etc
preispositionen: Optional[list["Preisposition"]] = None
#: Der Netzbetreiber, der die Preise veröffentlicht hat
Expand Down
6 changes: 3 additions & 3 deletions src/bo4e/bo/rechnung.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from ..com.betrag import Betrag
from ..com.rechnungsposition import Rechnungsposition
from ..com.steuerbetrag import Steuerbetrag
from ..com.zeitraum import Zeitraum
from ..com.zeitspanne import Zeitspanne
from ..enum.netznutzungrechnungsart import NetznutzungRechnungsart
from ..enum.netznutzungrechnungstyp import NetznutzungRechnungstyp
from ..enum.rechnungsstatus import Rechnungsstatus
Expand Down Expand Up @@ -57,8 +57,8 @@ class Rechnung(Geschaeftsobjekt):
faelligkeitsdatum: Optional[pydantic.AwareDatetime] = None
#: Ein kontextbezogender Rechnungstyp, z.B. Netznutzungsrechnung
rechnungstyp: Optional["Rechnungstyp"] = None
#: Der Zeitraum der zugrunde liegenden Lieferung zur Rechnung
rechnungsperiode: Optional["Zeitraum"] = None
#: Die Zeitspanne der zugrunde liegenden Lieferung zur Rechnung
rechnungsperiode: Optional["Zeitspanne"] = None
#: Der Aussteller der Rechnung, die Rollencodenummer kennt man über den im Geschäftspartner verlinkten Marktteilnehmer
rechnungsersteller: Optional["Geschaeftspartner"] = None
#: Der Aussteller der Rechnung, die Rollencodenummer kennt man über den im Geschäftspartner verlinkten Marktteilnehmer
Expand Down
6 changes: 3 additions & 3 deletions src/bo4e/bo/tarifinfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
if TYPE_CHECKING:
from ..com.energiemix import Energiemix
from ..com.vertragskonditionen import Vertragskonditionen
from ..com.zeitraum import Zeitraum
from ..com.zeitspanne import Zeitspanne
from ..enum.kundentyp import Kundentyp
from ..enum.registeranzahl import Registeranzahl
from ..enum.sparte import Sparte
Expand Down Expand Up @@ -64,8 +64,8 @@ class Tarifinfo(Geschaeftsobjekt):
#: Freitext
bemerkung: Optional[str] = None

#: Angabe, in welchem Zeitraum der Tarif gültig ist
zeitliche_gueltigkeit: Optional["Zeitraum"] = None
#: Angabe, in welcher Zeitspanne der Tarif gültig ist
zeitliche_gueltigkeit: Optional["Zeitspanne"] = None
#: Der Energiemix, der für diesen Tarif gilt
energiemix: Optional["Energiemix"] = None
#: Mindestlaufzeiten und Kündigungsfristen zusammengefasst
Expand Down
4 changes: 2 additions & 2 deletions src/bo4e/com/angebotsteil.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from .angebotsposition import Angebotsposition
from .betrag import Betrag
from .menge import Menge
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods
# pylint: disable=no-name-in-module
Expand Down Expand Up @@ -52,4 +52,4 @@ class Angebotsteil(COM):
#: Summe der Jahresenergiekosten aller in diesem Angebotsteil enthaltenen Lieferstellen
gesamtkostenangebotsteil: Optional["Betrag"] = None
#: Hier kann der Belieferungszeitraum angegeben werden, für den dieser Angebotsteil gilt
lieferzeitraum: Optional["Zeitraum"] = None
lieferzeitraum: Optional["Zeitspanne"] = None
6 changes: 3 additions & 3 deletions src/bo4e/com/aufabschlag.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from ..enum.aufabschlagsziel import AufAbschlagsziel
from ..enum.waehrungseinheit import Waehrungseinheit
from .preisstaffel import Preisstaffel
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods, too-many-instance-attributes

Expand Down Expand Up @@ -49,5 +49,5 @@ class AufAbschlag(COM):
(Nur im Falle absoluter Aufschlagstypen). """
#: Internetseite, auf der die Informationen zum Auf-/Abschlag veröffentlicht sind.
website: Optional[str] = None
#: Internetseite, auf der die Informationen zum Auf-/Abschlag veröffentlicht sind.
gueltigkeitszeitraum: Optional["Zeitraum"] = None
#: Zeitspanne, in der die Vereinbarung gültig ist.
gueltigkeitszeitraum: Optional["Zeitspanne"] = None
4 changes: 2 additions & 2 deletions src/bo4e/com/aufabschlagregional.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from .preisgarantie import Preisgarantie
from .tarifeinschraenkung import Tarifeinschraenkung
from .vertragskonditionen import Vertragskonditionen
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods, too-many-instance-attributes
# pylint: disable=no-name-in-module
Expand Down Expand Up @@ -64,7 +64,7 @@ class AufAbschlagRegional(COM):
#: Durch die Anwendung des Auf/Abschlags kann eine Änderung des Tarifnamens auftreten.
tarifnamensaenderungen: Optional[str] = None
#: Zeitraum, in dem der Abschlag zur Anwendung kommen kann
gueltigkeitszeitraum: Optional["Zeitraum"] = None
gueltigkeitszeitraum: Optional["Zeitspanne"] = None
energiemixaenderung: Optional["Energiemix"] = None
""" Der Energiemix kann sich durch einen AufAbschlag ändern (z.B. zwei Cent Aufschlag für Ökostrom:
Sollte dies der Fall sein, wird hier die neue Zusammensetzung des Energiemix angegeben."""
Expand Down
4 changes: 2 additions & 2 deletions src/bo4e/com/ausschreibungsdetail.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from ..enum.zaehlertyp import Zaehlertyp
from .adresse import Adresse
from .menge import Menge
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods, too-many-instance-attributes

Expand Down Expand Up @@ -40,7 +40,7 @@ class Ausschreibungsdetail(COM):
#: Die Adresse an der die Marktlokation sich befindet
marktlokationsadresse: Optional["Adresse"] = None
#: Angefragter Zeitraum für die ausgeschriebene Belieferung
lieferzeitraum: Optional["Zeitraum"] = None
lieferzeitraum: Optional["Zeitspanne"] = None

#: Bezeichnung des zuständigen Netzbetreibers, z.B. 'Stromnetz Hamburg GmbH'
netzbetreiber: Optional[str] = None
Expand Down
11 changes: 6 additions & 5 deletions src/bo4e/com/ausschreibungslos.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from ..enum.vertragsform import Vertragsform
from .ausschreibungsdetail import Ausschreibungsdetail
from .menge import Menge
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne


@postprocess_docstring
Expand Down Expand Up @@ -55,7 +55,7 @@ class Ausschreibungslos(COM):
lieferstellen: Optional[list["Ausschreibungsdetail"]] = None

#: Zeitraum, für den die in diesem Los enthaltenen Lieferstellen beliefert werden sollen
lieferzeitraum: Optional["Zeitraum"] = None
lieferzeitraum: Optional["Zeitspanne"] = None

#: Bemerkung des Kunden zum Los
bemerkung: Optional[str] = None
Expand All @@ -66,13 +66,14 @@ class Ausschreibungslos(COM):
#: Maximalmenge Toleranzband (kWh, %)
wunsch_maximalmenge: Optional["Menge"] = None

wiederholungsintervall: Optional["Zeitraum"] = None
wiederholungsintervall: Optional["Zeitspanne"] = None
"""
In welchem Intervall die Angebotsabgabe wiederholt werden darf.
Angabe nur gesetzt für die 2. Phase bei öffentlich-rechtlichen Ausschreibungen
"""
#: Was bedeutet das hier genau? Wär das dann eher eine Menge?

#: Kundenwunsch zur Kündigungsfrist in der Ausschreibung
wunsch_kuendingungsfrist: Optional["Zeitraum"] = None
wunsch_kuendingungsfrist: Optional["Zeitspanne"] = None
#: Kundenwunsch zum Zahlungsziel in der Ausschreibung
wunsch_zahlungsziel: Optional["Zeitraum"] = None
wunsch_zahlungsziel: Optional["Zeitspanne"] = None
8 changes: 4 additions & 4 deletions src/bo4e/com/preisgarantie.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

if TYPE_CHECKING:
from ..enum.preisgarantietyp import Preisgarantietyp
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods

Expand All @@ -31,9 +31,9 @@ class Preisgarantie(COM):

#: Festlegung, auf welche Preisbestandteile die Garantie gewährt wird.
preisgarantietyp: Optional["Preisgarantietyp"] = None
zeitliche_gueltigkeit: Optional["Zeitraum"] = None
""" Zeitraum, bis zu dem die Preisgarantie gilt, z.B. bis zu einem absolutem / fixem Datum
oder als Laufzeit in Monaten. """
zeitliche_gueltigkeit: Optional["Zeitspanne"] = None
""" Zeitspanne, in der die Preisgarantie gilt, z.B. bis zu einem absoluten / fixen Datum
oder als Laufzeit mit Startdatum und Enddatum. """

# optionale attributes
#: Freitext zur Beschreibung der Preisgarantie.
Expand Down
4 changes: 2 additions & 2 deletions src/bo4e/com/regionaleraufabschlag.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from .regionalepreisstaffel import RegionalePreisstaffel
from .tarifeinschraenkung import Tarifeinschraenkung
from .vertragskonditionen import Vertragskonditionen
from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods, too-many-instance-attributes
# pylint: disable=no-name-in-module
Expand Down Expand Up @@ -71,7 +71,7 @@ class RegionalerAufAbschlag(COM):
tarifnamensaenderungen: Optional[str] = None

#: Zeitraum, in dem der Abschlag zur Anwendung kommen kann
gueltigkeitszeitraum: Optional["Zeitraum"] = None
gueltigkeitszeitraum: Optional["Zeitspanne"] = None

energiemixaenderung: Optional["Energiemix"] = None
"""
Expand Down
4 changes: 2 additions & 2 deletions src/bo4e/com/verbrauch.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ class Verbrauch(COM):
#: Gibt die Einheit zum jeweiligen Wert an
einheit: Optional["Mengeneinheit"] = None

#: Inklusiver Beginn des Zeitraumes, für den der Verbrauch angegeben wird
#: Inklusiver Beginn der Zeitspanne, für den der Verbrauch angegeben wird
startdatum: Optional[pydantic.AwareDatetime] = None
#: Exklusives Ende des Zeitraumes, für den der Verbrauch angegeben wird
#: Exklusives Ende der Zeitspanne, für den der Verbrauch angegeben wird
enddatum: Optional[pydantic.AwareDatetime] = None
#: Messwertstatus includes the plausibility of the value
messwertstatus: Optional["Messwertstatus"] = None
11 changes: 6 additions & 5 deletions src/bo4e/com/vertragskonditionen.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

if TYPE_CHECKING:

from .zeitraum import Zeitraum
from .zeitspanne import Zeitspanne

# pylint: disable=too-few-public-methods

Expand All @@ -35,10 +35,11 @@ class Vertragskonditionen(COM):
#: Anzahl der vereinbarten Abschläge pro Jahr, z.B. 12
anzahl_abschlaege: Optional[Decimal] = None
#: Über diesen Zeitraum läuft der Vertrag
vertragslaufzeit: Optional["Zeitraum"] = None
vertragslaufzeit: Optional["Zeitspanne"] = None
#: Innerhalb dieser Frist kann der Vertrag gekündigt werden
kuendigungsfrist: Optional["Zeitraum"] = None
kuendigungsfrist: Optional["Zeitspanne"] = None
#: Falls der Vertrag nicht gekündigt wird, verlängert er sich automatisch um die hier angegebene Zeit
vertragsverlaengerung: Optional["Zeitraum"] = None
vertragsverlaengerung: Optional["Zeitspanne"] = None
#: In diesen Zyklen werden Abschläge gestellt. Alternativ kann auch die Anzahl in den Konditionen angeben werden.
abschlagszyklus: Optional["Zeitraum"] = None
abschlagszyklus: Optional["Zeitspanne"] = None
#: Todo: auch hier passt ja Zeitspanne nicht wirklich, Zeitraum auch nicht, vielleicht Menge? tbd
44 changes: 0 additions & 44 deletions src/bo4e/com/zeitraum.py

This file was deleted.

2 changes: 1 addition & 1 deletion src/bo4e/com/zeitreihenwert.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
@postprocess_docstring
class Zeitreihenwert(COM):
"""
Abbildung eines Zeitreihenwertes bestehend aus Zeitraum, Wert und Statusinformationen.
Abbildung eines Zeitreihenwertes bestehend aus Zeitspanne, Wert und Statusinformationen.

.. raw:: html

Expand Down
Loading
Loading