"""
BO4E-Python - Python implementation of the BO4E standard

BO4E-Python is a Python implementation of the BO4E standard. BO4E is a standard for the exchange of
business objects in the energy industry. BO4E-Python is an open-source software released under the Apache-2.0
license.

The BO4E version can be queried using `bo4e.__version__`.
"""

__all__ = [
    "Abwicklungsmodell",
    "Angebot",
    "Ausschreibung",
    "Bilanzierung",
    "Buendelvertrag",
    "Energiemenge",
    "Fremdkosten",
    "Geraet",
    "Geschaeftsobjekt",
    "Geschaeftspartner",
    "Kosten",
    "Lastgang",
    "Lokationszuordnung",
    "Marktlokation",
    "Marktteilnehmer",
    "Messlokation",
    "Netzlokation",
    "Person",
    "Preisblatt",
    "PreisblattDienstleistung",
    "PreisblattHardware",
    "PreisblattKonzessionsabgabe",
    "PreisblattMessung",
    "PreisblattNetznutzung",
    "Rechnung",
    "Region",
    "Regionaltarif",
    "Standorteigenschaften",
    "SteuerbareRessource",
    "Tarif",
    "Tarifinfo",
    "Tarifkosten",
    "Tarifpreisblatt",
    "TechnischeRessource",
    "Vertrag",
    "Zaehler",
    "Zeitreihe",
    "Adresse",
    "Angebotsposition",
    "Angebotsteil",
    "Angebotsvariante",
    "AufAbschlag",
    "AufAbschlagProOrt",
    "AufAbschlagRegional",
    "AufAbschlagstaffelProOrt",
    "Ausschreibungsdetail",
    "Ausschreibungslos",
    "Betrag",
    "COM",
    "Dienstleistung",
    "Energieherkunft",
    "Energiemix",
    "Fremdkostenblock",
    "Fremdkostenposition",
    "Geokoordinaten",
    "Katasteradresse",
    "Kontaktweg",
    "Konzessionsabgabe",
    "Kostenblock",
    "Kostenposition",
    "KriteriumWert",
    "Lastprofil",
    "MarktgebietInfo",
    "Menge",
    "PositionsAufAbschlag",
    "Preis",
    "Preisgarantie",
    "Preisposition",
    "Preisstaffel",
    "Rechnungsposition",
    "RegionaleGueltigkeit",
    "RegionalePreisgarantie",
    "RegionalePreisstaffel",
    "RegionalerAufAbschlag",
    "RegionaleTarifpreisposition",
    "Regionskriterium",
    "Sigmoidparameter",
    "StandorteigenschaftenGas",
    "StandorteigenschaftenStrom",
    "Steuerbetrag",
    "Tagesparameter",
    "Tarifberechnungsparameter",
    "Tarifeinschraenkung",
    "Tarifpreis",
    "Tarifpreisposition",
    "TarifpreispositionProOrt",
    "TarifpreisstaffelProOrt",
    "Unterschrift",
    "Verbrauch",
    "Vertragskonditionen",
    "Vertragsteil",
    "VerwendungszweckProMarktrolle",
    "Zaehlwerk",
    "Zaehlzeitregister",
    "Zeitraum",
    "Zeitreihenwert",
    "Zustaendigkeit",
    "AbgabeArt",
    "Aggregationsverantwortung",
    "Angebotsstatus",
    "Anrede",
    "ArithmetischeOperation",
    "ArtikelId",
    "AufAbschlagstyp",
    "AufAbschlagsziel",
    "Ausschreibungsportal",
    "Ausschreibungsstatus",
    "Ausschreibungstyp",
    "BDEWArtikelnummer",
    "Befestigungsart",
    "Bemessungsgroesse",
    "Bilanzierungsmethode",
    "Dienstleistungstyp",
    "EMobilitaetsart",
    "Energierichtung",
    "Erzeugungsart",
    "Fallgruppenzuordnung",
    "Gasqualitaet",
    "Gebiettyp",
    "Geraeteklasse",
    "Geraetetyp",
    "Geschaeftspartnerrolle",
    "Gueltigkeitstyp",
    "Kalkulationsmethode",
    "Konfigurationsprodukt",
    "Kontaktart",
    "Kostenklasse",
    "Kundengruppe",
    "KundengruppeKA",
    "Kundentyp",
    "Landescode",
    "Leistungstyp",
    "Lokationstyp",
    "Marktrolle",
    "Medium",
    "Mengeneinheit",
    "Mengenoperator",
    "Messart",
    "Messgroesse",
    "Messpreistyp",
    "Messwerterfassung",
    "Messwertstatus",
    "Messwertstatuszusatz",
    "Netzebene",
    "NetznutzungRechnungsart",
    "NetznutzungRechnungstyp",
    "Oekolabel",
    "Oekozertifikat",
    "Organisationstyp",
    "Preisgarantietyp",
    "Preismodell",
    "Preisstatus",
    "Preistyp",
    "Profilart",
    "Profiltyp",
    "Profilverfahren",
    "Prognosegrundlage",
    "Rechnungslegung",
    "Rechnungsstatus",
    "Rechnungstyp",
    "Regionskriteriumtyp",
    "Registeranzahl",
    "Rollencodetyp",
    "Sparte",
    "Speicherart",
    "SteuerkanalLeistungsbeschreibung",
    "Steuerkennzeichen",
    "StrEnum",
    "Tarifkalkulationsmethode",
    "Tarifmerkmal",
    "Tarifregionskriterium",
    "Tariftyp",
    "Tarifzeit",
    "TechnischeRessourceNutzung",
    "TechnischeRessourceVerbrauchsart",
    "Themengebiet",
    "Titel",
    "BoTyp",
    "ComTyp",
    "Verbrauchsart",
    "Vertragsart",
    "Vertragsform",
    "Vertragsstatus",
    "Verwendungszweck",
    "Voraussetzungen",
    "WahlrechtPrognosegrundlage",
    "Waehrungscode",
    "Waehrungseinheit",
    "Waermenutzung",
    "Zaehlerauspraegung",
    "Zaehlergroesse",
    "Zaehlertyp",
    "ZaehlertypSpezifikation",
    "Zeitreihentyp",
    "ZusatzAttribut",
    "__version__",
    "__gh_version__",
]

from pydantic import BaseModel as _PydanticBaseModel

# Import BOs
from .bo.angebot import Angebot
from .bo.ausschreibung import Ausschreibung
from .bo.bilanzierung import Bilanzierung
from .bo.buendelvertrag import Buendelvertrag
from .bo.energiemenge import Energiemenge
from .bo.fremdkosten import Fremdkosten
from .bo.geraet import Geraet
from .bo.geschaeftsobjekt import Geschaeftsobjekt
from .bo.geschaeftspartner import Geschaeftspartner
from .bo.kosten import Kosten
from .bo.lastgang import Lastgang
from .bo.lokationszuordnung import Lokationszuordnung
from .bo.marktlokation import Marktlokation
from .bo.marktteilnehmer import Marktteilnehmer
from .bo.messlokation import Messlokation
from .bo.netzlokation import Netzlokation
from .bo.person import Person
from .bo.preisblatt import Preisblatt
from .bo.preisblattdienstleistung import PreisblattDienstleistung
from .bo.preisblatthardware import PreisblattHardware
from .bo.preisblattkonzessionsabgabe import PreisblattKonzessionsabgabe
from .bo.preisblattmessung import PreisblattMessung
from .bo.preisblattnetznutzung import PreisblattNetznutzung
from .bo.rechnung import Rechnung
from .bo.region import Region
from .bo.regionaltarif import Regionaltarif
from .bo.standorteigenschaften import Standorteigenschaften
from .bo.steuerbareressource import SteuerbareRessource
from .bo.tarif import Tarif
from .bo.tarifinfo import Tarifinfo
from .bo.tarifkosten import Tarifkosten
from .bo.tarifpreisblatt import Tarifpreisblatt
from .bo.technischeressource import TechnischeRessource
from .bo.vertrag import Vertrag
from .bo.zaehler import Zaehler
from .bo.zeitreihe import Zeitreihe

# Import COMs
from .com.adresse import Adresse
from .com.angebotsposition import Angebotsposition
from .com.angebotsteil import Angebotsteil
from .com.angebotsvariante import Angebotsvariante
from .com.aufabschlag import AufAbschlag
from .com.aufabschlagproort import AufAbschlagProOrt
from .com.aufabschlagregional import AufAbschlagRegional
from .com.aufabschlagstaffelproort import AufAbschlagstaffelProOrt
from .com.ausschreibungsdetail import Ausschreibungsdetail
from .com.ausschreibungslos import Ausschreibungslos
from .com.betrag import Betrag
from .com.com import COM
from .com.dienstleistung import Dienstleistung
from .com.energieherkunft import Energieherkunft
from .com.energiemix import Energiemix
from .com.fremdkostenblock import Fremdkostenblock
from .com.fremdkostenposition import Fremdkostenposition
from .com.geokoordinaten import Geokoordinaten
from .com.katasteradresse import Katasteradresse
from .com.konfigurationsprodukt import Konfigurationsprodukt
from .com.kontaktweg import Kontaktweg
from .com.konzessionsabgabe import Konzessionsabgabe
from .com.kostenblock import Kostenblock
from .com.kostenposition import Kostenposition
from .com.kriteriumwert import KriteriumWert
from .com.lastprofil import Lastprofil
from .com.marktgebietinfo import MarktgebietInfo
from .com.menge import Menge
from .com.positionsaufabschlag import PositionsAufAbschlag
from .com.preis import Preis
from .com.preisgarantie import Preisgarantie
from .com.preisposition import Preisposition
from .com.preisstaffel import Preisstaffel
from .com.rechnungsposition import Rechnungsposition
from .com.regionalegueltigkeit import RegionaleGueltigkeit
from .com.regionalepreisgarantie import RegionalePreisgarantie
from .com.regionalepreisstaffel import RegionalePreisstaffel
from .com.regionaleraufabschlag import RegionalerAufAbschlag
from .com.regionaletarifpreisposition import RegionaleTarifpreisposition
from .com.regionskriterium import Regionskriterium
from .com.sigmoidparameter import Sigmoidparameter
from .com.standorteigenschaftengas import StandorteigenschaftenGas
from .com.standorteigenschaftenstrom import StandorteigenschaftenStrom
from .com.steuerbetrag import Steuerbetrag
from .com.tagesparameter import Tagesparameter
from .com.tarifberechnungsparameter import Tarifberechnungsparameter
from .com.tarifeinschraenkung import Tarifeinschraenkung
from .com.tarifpreis import Tarifpreis
from .com.tarifpreisposition import Tarifpreisposition
from .com.tarifpreispositionproort import TarifpreispositionProOrt
from .com.tarifpreisstaffelproort import TarifpreisstaffelProOrt
from .com.unterschrift import Unterschrift
from .com.verbrauch import Verbrauch
from .com.vertragskonditionen import Vertragskonditionen
from .com.vertragsteil import Vertragsteil
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.zustaendigkeit import Zustaendigkeit

# Import Enums
from .enum.abgabeart import AbgabeArt
from .enum.abwicklungsmodell import Abwicklungsmodell
from .enum.aggregationsverantwortung import Aggregationsverantwortung
from .enum.angebotsstatus import Angebotsstatus
from .enum.anrede import Anrede
from .enum.arithmetische_operation import ArithmetischeOperation
from .enum.artikelid import ArtikelId
from .enum.aufabschlagstyp import AufAbschlagstyp
from .enum.aufabschlagsziel import AufAbschlagsziel
from .enum.ausschreibungsportal import Ausschreibungsportal
from .enum.ausschreibungsstatus import Ausschreibungsstatus
from .enum.ausschreibungstyp import Ausschreibungstyp
from .enum.bdewartikelnummer import BDEWArtikelnummer
from .enum.befestigungsart import Befestigungsart
from .enum.bemessungsgroesse import Bemessungsgroesse
from .enum.bilanzierungsmethode import Bilanzierungsmethode
from .enum.botyp import BoTyp
from .enum.comtyp import ComTyp
from .enum.dienstleistungstyp import Dienstleistungstyp
from .enum.emobilitaetsart import EMobilitaetsart
from .enum.energierichtung import Energierichtung
from .enum.erzeugungsart import Erzeugungsart
from .enum.fallgruppenzuordnung import Fallgruppenzuordnung
from .enum.gasqualitaet import Gasqualitaet
from .enum.gebiettyp import Gebiettyp
from .enum.geraeteklasse import Geraeteklasse
from .enum.geraetetyp import Geraetetyp
from .enum.geschaeftspartnerrolle import Geschaeftspartnerrolle
from .enum.gueltigkeitstyp import Gueltigkeitstyp
from .enum.kalkulationsmethode import Kalkulationsmethode
from .enum.kontaktart import Kontaktart
from .enum.kostenklasse import Kostenklasse
from .enum.kundengruppe import Kundengruppe
from .enum.kundengruppeka import KundengruppeKA
from .enum.kundentyp import Kundentyp
from .enum.landescode import Landescode
from .enum.leistungstyp import Leistungstyp
from .enum.lokationstyp import Lokationstyp
from .enum.marktrolle import Marktrolle
from .enum.medium import Medium
from .enum.mengeneinheit import Mengeneinheit
from .enum.mengenoperator import Mengenoperator
from .enum.messart import Messart
from .enum.messgroesse import Messgroesse
from .enum.messpreistyp import Messpreistyp
from .enum.messwerterfassung import Messwerterfassung
from .enum.messwertstatus import Messwertstatus
from .enum.messwertstatuszusatz import Messwertstatuszusatz
from .enum.netzebene import Netzebene
from .enum.netznutzungrechnungsart import NetznutzungRechnungsart
from .enum.netznutzungrechnungstyp import NetznutzungRechnungstyp
from .enum.oekolabel import Oekolabel
from .enum.oekozertifikat import Oekozertifikat
from .enum.organisationstyp import Organisationstyp
from .enum.preisgarantietyp import Preisgarantietyp
from .enum.preismodell import Preismodell
from .enum.preisstatus import Preisstatus
from .enum.preistyp import Preistyp
from .enum.profilart import Profilart
from .enum.profiltyp import Profiltyp
from .enum.profilverfahren import Profilverfahren
from .enum.prognosegrundlage import Prognosegrundlage
from .enum.rechnungslegung import Rechnungslegung
from .enum.rechnungsstatus import Rechnungsstatus
from .enum.rechnungstyp import Rechnungstyp
from .enum.regionskriteriumtyp import Regionskriteriumtyp
from .enum.registeranzahl import Registeranzahl
from .enum.rollencodetyp import Rollencodetyp
from .enum.sparte import Sparte
from .enum.speicherart import Speicherart
from .enum.steuerkanalleistungsbeschreibung import SteuerkanalLeistungsbeschreibung
from .enum.steuerkennzeichen import Steuerkennzeichen
from .enum.strenum import StrEnum
from .enum.tarifkalkulationsmethode import Tarifkalkulationsmethode
from .enum.tarifmerkmal import Tarifmerkmal
from .enum.tarifregionskriterium import Tarifregionskriterium
from .enum.tariftyp import Tariftyp
from .enum.tarifzeit import Tarifzeit
from .enum.technischeressourcenutzung import TechnischeRessourceNutzung
from .enum.technischeressourceverbrauchsart import TechnischeRessourceVerbrauchsart
from .enum.themengebiet import Themengebiet
from .enum.titel import Titel
from .enum.verbrauchsart import Verbrauchsart
from .enum.vertragsart import Vertragsart
from .enum.vertragsform import Vertragsform
from .enum.vertragsstatus import Vertragsstatus
from .enum.verwendungszweck import Verwendungszweck
from .enum.voraussetzungen import Voraussetzungen
from .enum.waehrungscode import Waehrungscode
from .enum.waehrungseinheit import Waehrungseinheit
from .enum.waermenutzung import Waermenutzung
from .enum.wahlrechtprognosegrundlage import WahlrechtPrognosegrundlage
from .enum.zaehlerauspraegung import Zaehlerauspraegung
from .enum.zaehlergroesse import Zaehlergroesse
from .enum.zaehlertyp import Zaehlertyp
from .enum.zaehlertypspezifikation import ZaehlertypSpezifikation
from .enum.zeitreihentyp import Zeitreihentyp
from .version import __gh_version__, __version__
from .zusatzattribut import ZusatzAttribut

# Resolve all ForwardReferences. This design prevents circular import errors.
for cls_name in __all__:
    cls = globals().get(cls_name, None)
    if cls is None or not isinstance(cls, type) or not issubclass(cls, _PydanticBaseModel):
        continue
    cls.model_rebuild(force=True)
