Source code for bo4e.bo.rechnung

"""
Contains Rechnung class
and corresponding marshmallow schema for de-/serialization
"""

from typing import TYPE_CHECKING, Annotated, Literal, Optional

import pydantic
from pydantic import Field

from ..enum.typ import Typ
from ..utils import postprocess_docstring
from .geschaeftsobjekt import Geschaeftsobjekt

if TYPE_CHECKING:
    from ..com.betrag import Betrag
    from ..com.rechnungsposition import Rechnungsposition
    from ..com.steuerbetrag import Steuerbetrag
    from ..com.zeitraum import Zeitraum
    from ..enum.netznutzungrechnungsart import NetznutzungRechnungsart
    from ..enum.netznutzungrechnungstyp import NetznutzungRechnungstyp
    from ..enum.rechnungsstatus import Rechnungsstatus
    from ..enum.rechnungstyp import Rechnungstyp
    from ..enum.sparte import Sparte
    from .geschaeftspartner import Geschaeftspartner
    from .marktlokation import Marktlokation
    from .messlokation import Messlokation

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


[docs] @postprocess_docstring class Rechnung(Geschaeftsobjekt): """ Modell für die Abbildung von Rechnungen und Netznutzungsrechnungen im Kontext der Energiewirtschaft; .. raw:: html <object data="../_static/images/bo4e/bo/Rechnung.svg" type="image/svg+xml"></object> .. HINT:: `Rechnung JSON Schema <https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/BO4E/BO4E-Schemas/{__gh_version__}/src/bo4e_schemas/bo/Rechnung.json>`_ """ typ: Annotated[Literal[Typ.RECHNUNG], Field(alias="_typ")] = Typ.RECHNUNG ist_storno: Optional[bool] = None """ Kennzeichnung, ob es sich um eine Stornorechnung handelt; im Falle "true" findet sich im Attribut "originalrechnungsnummer" die Nummer der Originalrechnung. """ #: Eine im Verwendungskontext eindeutige Nummer für die Rechnung rechnungsnummer: Optional[str] = None #: Ausstellungsdatum der Rechnung rechnungsdatum: Optional[pydantic.AwareDatetime] = None #: Zu diesem Datum ist die Zahlung fällig 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 #: 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 rechnungsempfaenger: Optional["Geschaeftspartner"] = None #: Die Summe der Nettobeträge der Rechnungsteile gesamtnetto: Optional["Betrag"] = None #: Die Summe der Steuerbeträge der Rechnungsteile gesamtsteuer: Optional["Betrag"] = None #: Die Summe aus Netto- und Steuerbetrag gesamtbrutto: Optional["Betrag"] = None #: Der zu zahlende Betrag, der sich aus (gesamtbrutto - vorausbezahlt - rabattBrutto) ergibt zu_zahlen: Optional["Betrag"] = None #: Die Rechnungspositionen rechnungspositionen: Optional[list["Rechnungsposition"]] = None #: Bezeichnung für die vorliegende Rechnung rechnungstitel: Optional[str] = None #: Status der Rechnung zur Kennzeichnung des Bearbeitungsstandes rechnungsstatus: Optional["Rechnungsstatus"] = None #: Im Falle einer Stornorechnung (storno = true) steht hier die Rechnungsnummer der stornierten Rechnung original_rechnungsnummer: Optional[str] = None #: Die Summe evtl. vorausgezahlter Beträge, z.B. Abschläge. Angabe als Bruttowert vorausgezahlt: Optional["Betrag"] = None #: Gesamtrabatt auf den Bruttobetrag rabatt_brutto: Optional["Betrag"] = None steuerbetraege: Optional[list["Steuerbetrag"]] = None """ Eine Liste mit Steuerbeträgen pro Steuerkennzeichen/Steuersatz; die Summe dieser Beträge ergibt den Wert für gesamtsteuer. """ #: Sparte (Strom, Gas ...) für die die Rechnung ausgestellt ist sparte: Optional["Sparte"] = None #: Aus der INVOIC entnommen, befüllt wenn es sich um eine Netznutzungsrechnung handelt netznutzungrechnungsart: Optional["NetznutzungRechnungsart"] = None #: Aus der INVOIC entnommen, befüllt wenn es sich um eine Netznutzungsrechnung handelt netznutzungrechnungstyp: Optional["NetznutzungRechnungstyp"] = None #: Kennzeichen, ob es sich um ein Original (true) oder eine Kopie handelt (false) ist_original: Optional[bool] = None #: Kennzeichen, ob es sich um eine simulierte Rechnung, z.B. zur Rechnungsprüfung handelt ist_simuliert: Optional[bool] = None #: Marktlokation, auf die sich die Rechnung bezieht marktlokation: Optional["Marktlokation"] = None #: Messlokation, auf die sich die Rechnung bezieht messlokation: Optional["Messlokation"] = None