Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0d1048c
Model new `BO Region`
lord-haffi Nov 10, 2025
dfca261
Rename ComTyp
lord-haffi Nov 10, 2025
c39961a
Fix type hints
lord-haffi Nov 10, 2025
06e8a8e
Model new `COM Regionszeitscheibe`
lord-haffi Nov 10, 2025
a0ff42f
Merge branch 'main' into tarif
lord-haffi Nov 12, 2025
eb39475
Add new `BO Zaehlzeitdefinition`
lord-haffi Nov 12, 2025
6663a3c
Add `ENUM Preisreferenz`
lord-haffi Nov 14, 2025
065061e
Add `COM EinheitsPreisposition`
lord-haffi Nov 14, 2025
1afd030
Add `COM ZeitvariablePreisposition`
lord-haffi Nov 14, 2025
27f6c02
Add `COM LastvariablePreisposition`
lord-haffi Nov 14, 2025
ba8a440
Add `COM RelativePreisposition`
lord-haffi Nov 18, 2025
bc57d35
Add `COM Tarifpreiszeitscheibe`
lord-haffi Nov 18, 2025
e523f3d
Add `COM Regionspreis`
lord-haffi Nov 18, 2025
fb3224a
Add `COM DynamischePreisposition`
lord-haffi Nov 25, 2025
a1b0b15
Rework `BO Tarif`
lord-haffi Nov 25, 2025
332c7f0
Fix init
lord-haffi Nov 26, 2025
44d66d4
Remove `COM TarifpreispositionProOrt`
lord-haffi Nov 26, 2025
5d64cae
Remove `COM TarifpreisstaffelProOrt`
lord-haffi Nov 26, 2025
4cdf840
Remove `BO Regionaltarif`
lord-haffi Nov 26, 2025
92b69c5
Remove `COM RegionalePreisgarantie`
lord-haffi Nov 26, 2025
4312edb
Remove `COM RegionalerAufAbschlag`
lord-haffi Nov 26, 2025
c1f03bd
Remove `COM RegionaleTarifpreisposition`
lord-haffi Nov 26, 2025
21e2148
Remove `COM RegionalePreisstaffel`
lord-haffi Nov 26, 2025
e758d8b
Remove `COM RegionaleGueltigkeit`
lord-haffi Nov 26, 2025
61d5afb
Remove `COM KriteriumWert`
lord-haffi Nov 26, 2025
3b24265
Remove `ENUM Tarifregionskriterium`
lord-haffi Nov 26, 2025
6768eb7
Remove `COM Gueltigkeitstyp`
lord-haffi Nov 26, 2025
ed29c74
Remove `COM AufAbschlagRegional`
lord-haffi Nov 26, 2025
72fc7a1
Remove `COM AufAbschlagProOrt`
lord-haffi Nov 26, 2025
4f9b9f2
Remove `COM AufAbschlagstaffelProOrt`
lord-haffi Nov 26, 2025
bb00261
Remove `COM PositionsAufAbschlag`
lord-haffi Nov 26, 2025
f766642
Remove tests
lord-haffi Nov 26, 2025
82a1a97
Add new models to __init__
lord-haffi Nov 26, 2025
88ce8bc
Fix type hint in `Regionsoperation`
lord-haffi Nov 26, 2025
9c1882c
Add little function to detect unconnected COMs and ENUMs
lord-haffi Nov 26, 2025
f90e9dd
Merge branch 'main' into tarif
lord-haffi Dec 19, 2025
14d52b5
Merge remote-tracking branch 'origin/main' into tarif
lord-haffi Dec 27, 2025
751f536
🔥Remove TODO comment for `COM Preisstaffel.artikel_id`
lord-haffi Dec 27, 2025
cfba9dd
Drop `COM DynamischePreisposition`
lord-haffi Dec 27, 2025
2aa5008
Leave out `COM Vertriebskanal` for future workshops
lord-haffi Dec 27, 2025
7a880c7
Write doc string for `BO Tarif.energiemix`
lord-haffi Dec 27, 2025
91c3465
Readd `BO Tarif.tarifeinschraenkung`
lord-haffi Dec 27, 2025
5c2450e
Fix doc creation
lord-haffi Jan 13, 2026
f46782c
Fix tests
lord-haffi Jan 13, 2026
75c78d9
Fix linting
lord-haffi Jan 13, 2026
aeb1a5f
Fix mypy
lord-haffi Jan 13, 2026
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
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/psf/black
rev: 24.4.2 # Replace by any tag/version: https://github.com/psf/black/tags
rev: 25.1.0 # Replace by any tag/version: https://github.com/psf/black/tags
hooks:
- id: black
language_version: python3 # Should be a command that runs python3.6+
- repo: https://github.com/pycqa/isort
rev: 5.12.0
rev: 6.0.1
hooks:
- id: isort
name: isort (python)
4 changes: 3 additions & 1 deletion docs/test_uml.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from pathlib import Path

from docs.uml import PlantUMLNetwork, build_network
from docs.uml import PlantUMLNetwork, build_network, get_unconnected_coms_and_enums


def test_network_build() -> None:
Expand All @@ -10,3 +10,5 @@ def test_network_build() -> None:
project_root_dir = Path(__file__).parent.parent
module_dir = project_root_dir / "src/bo4e"
_network, _namespaces_to_parse = build_network(module_dir, PlantUMLNetwork)
unconnected_els = get_unconnected_coms_and_enums(_network)
print(unconnected_els)
14 changes: 14 additions & 0 deletions docs/uml.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import shlex
import subprocess
from abc import ABCMeta, abstractmethod
from copy import copy
from pathlib import Path
from types import NoneType
from typing import Any, Dict, List, Optional, Tuple, Type, Union, cast, get_args
Expand Down Expand Up @@ -594,3 +595,16 @@ def compile_files_plantuml(input_dir: Path, output_dir: Path, executable: Path)
"""
command = f'java -jar "{executable}" "{input_dir}" -svg -o "{output_dir}"'
subprocess.call(shlex.split(command))


def get_unconnected_coms_and_enums(graph: _UMLNetworkABC) -> set[str]:
"""
Detects all COMs and ENUMs which are not reachable from any BO inside the `graph`.
"""
all_nodes = set(graph.nodes)
all_bos = set(filter(lambda modl_namespace: modl_namespace.startswith("bo4e.bo"), all_nodes))
connected_nodes = copy(all_bos)
for bo in all_bos:
connected_nodes |= set(nx.descendants(graph, bo))

return all_nodes - connected_nodes
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# This file is autogenerated by pip-compile with Python 3.12
# by the following command:
#
# pip-compile requirements.in
# pip-compile '.\requirements.in'
#
annotated-types==0.7.0
# via pydantic
Expand Down
64 changes: 28 additions & 36 deletions src/bo4e/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
"PreisblattNetznutzung",
"Rechnung",
"Region",
"Regionaltarif",
"Standorteigenschaften",
"SteuerbareRessource",
"Tarif",
Expand All @@ -45,20 +44,19 @@
"TechnischeRessource",
"Vertrag",
"Zaehler",
"Zaehlzeitdefinition",
"Zeitreihe",
"Adresse",
"Angebotsposition",
"Angebotsteil",
"Angebotsvariante",
"AufAbschlag",
"AufAbschlagProOrt",
"AufAbschlagRegional",
"AufAbschlagstaffelProOrt",
"Ausschreibungsdetail",
"Ausschreibungslos",
"Betrag",
"COM",
"Dienstleistung",
"EinheitsPreisposition",
"Energieherkunft",
"Energiemix",
"Fremdkostenblock",
Expand All @@ -69,23 +67,20 @@
"Konzessionsabgabe",
"Kostenblock",
"Kostenposition",
"KriteriumWert",
"Lastprofil",
"LastvariablePreisposition",
"MarktgebietInfo",
"Menge",
"Messwert",
"PositionsAufAbschlag",
"Preis",
"Preisgarantie",
"Preisposition",
"Preisstaffel",
"Rechnungsposition",
"RegionaleGueltigkeit",
"RegionalePreisgarantie",
"RegionalePreisstaffel",
"RegionalerAufAbschlag",
"RegionaleTarifpreisposition",
"Regionskriterium",
"Regionsoperation",
"Regionspreis",
"Regionszeitscheibe",
"RelativePreisposition",
"Sigmoidparameter",
"StandorteigenschaftenGas",
"StandorteigenschaftenStrom",
Expand All @@ -95,8 +90,8 @@
"Tarifeinschraenkung",
"Tarifpreis",
"Tarifpreisposition",
"TarifpreispositionProOrt",
"TarifpreisstaffelProOrt",
"Tarifpreiszeitscheibe",
"Umschaltzeit",
"Unterschrift",
"Vertragskonditionen",
"Vertragsteil",
Expand All @@ -107,12 +102,12 @@
"Zahlungsinformation",
"Zeitraum",
"Zeitreihenwert",
"ZeitvariablePreisposition",
"Zustaendigkeit",
"AbgabeArt",
"Aggregationsverantwortung",
"Angebotsstatus",
"Anrede",
"ArithmetischeOperation",
"AufAbschlagstyp",
"AufAbschlagsziel",
"Ausschreibungsportal",
Expand All @@ -132,7 +127,6 @@
"Geraeteklasse",
"Geraetetyp",
"Geschaeftspartnerrolle",
"Gueltigkeitstyp",
"Kalkulationsmethode",
"Konfigurationsprodukt",
"Kontaktart",
Expand All @@ -157,9 +151,11 @@
"NetznutzungRechnungstyp",
"Oekolabel",
"Oekozertifikat",
"Operator",
"Organisationstyp",
"Preisgarantietyp",
"Preismodell",
"Preisreferenz",
"Preisstatus",
"Preistyp",
"Profilart",
Expand All @@ -169,7 +165,7 @@
"Rechnungslegung",
"Rechnungsstatus",
"Rechnungstyp",
"Regionskriteriumtyp",
"Regionskriterium",
"Registeranzahl",
"Rollencodetyp",
"Sparte",
Expand All @@ -179,7 +175,6 @@
"StrEnum",
"Tarifkalkulationsmethode",
"Tarifmerkmal",
"Tarifregionskriterium",
"Tariftyp",
"Tarifzeit",
"TechnischeRessourceNutzung",
Expand All @@ -198,6 +193,7 @@
"Waehrungscode",
"Waehrungseinheit",
"Waermenutzung",
"Wiederholungstyp",
"Zaehlerauspraegung",
"Zaehlergroesse",
"Zaehlertyp",
Expand Down Expand Up @@ -237,7 +233,6 @@
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
Expand All @@ -247,6 +242,7 @@
from .bo.technischeressource import TechnischeRessource
from .bo.vertrag import Vertrag
from .bo.zaehler import Zaehler
from .bo.zaehlzeitdefinition import Zaehlzeitdefinition
from .bo.zeitreihe import Zeitreihe

# Import COMs
Expand All @@ -255,14 +251,12 @@
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.einheitspreisposition import EinheitsPreisposition
from .com.energieherkunft import Energieherkunft
from .com.energiemix import Energiemix
from .com.fremdkostenblock import Fremdkostenblock
Expand All @@ -274,23 +268,20 @@
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.lastvariablepreisposition import LastvariablePreisposition
from .com.marktgebietinfo import MarktgebietInfo
from .com.menge import Menge
from .com.messwert import Messwert
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.regionsoperation import Regionsoperation
from .com.regionspreis import Regionspreis
from .com.regionszeitscheibe import Regionszeitscheibe
from .com.relativepreisposition import RelativePreisposition
from .com.sigmoidparameter import Sigmoidparameter
from .com.standorteigenschaftengas import StandorteigenschaftenGas
from .com.standorteigenschaftenstrom import StandorteigenschaftenStrom
Expand All @@ -300,8 +291,8 @@
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.tarifpreiszeitscheibe import Tarifpreiszeitscheibe
from .com.umschaltzeit import Umschaltzeit
from .com.unterschrift import Unterschrift
from .com.vertragskonditionen import Vertragskonditionen
from .com.vertragsteil import Vertragsteil
Expand All @@ -312,6 +303,7 @@
from .com.zahlungsinformation import Zahlungsinformation
from .com.zeitraum import Zeitraum
from .com.zeitreihenwert import Zeitreihenwert
from .com.zeitvariablepreisposition import ZeitvariablePreisposition
from .com.zustaendigkeit import Zustaendigkeit

# Import Enums
Expand All @@ -320,7 +312,6 @@
from .enum.aggregationsverantwortung import Aggregationsverantwortung
from .enum.angebotsstatus import Angebotsstatus
from .enum.anrede import Anrede
from .enum.arithmetische_operation import ArithmetischeOperation
from .enum.aufabschlagstyp import AufAbschlagstyp
from .enum.aufabschlagsziel import AufAbschlagsziel
from .enum.ausschreibungsportal import Ausschreibungsportal
Expand All @@ -342,7 +333,6 @@
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
Expand All @@ -366,9 +356,11 @@
from .enum.netznutzungrechnungstyp import NetznutzungRechnungstyp
from .enum.oekolabel import Oekolabel
from .enum.oekozertifikat import Oekozertifikat
from .enum.operator import Operator
from .enum.organisationstyp import Organisationstyp
from .enum.preisgarantietyp import Preisgarantietyp
from .enum.preismodell import Preismodell
from .enum.preisreferenz import Preisreferenz
from .enum.preisstatus import Preisstatus
from .enum.preistyp import Preistyp
from .enum.profilart import Profilart
Expand All @@ -378,7 +370,7 @@
from .enum.rechnungslegung import Rechnungslegung
from .enum.rechnungsstatus import Rechnungsstatus
from .enum.rechnungstyp import Rechnungstyp
from .enum.regionskriteriumtyp import Regionskriteriumtyp
from .enum.regionskriterium import Regionskriterium
from .enum.registeranzahl import Registeranzahl
from .enum.rollencodetyp import Rollencodetyp
from .enum.sparte import Sparte
Expand All @@ -388,7 +380,6 @@
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
Expand All @@ -405,6 +396,7 @@
from .enum.waehrungseinheit import Waehrungseinheit
from .enum.waermenutzung import Waermenutzung
from .enum.wahlrechtprognosegrundlage import WahlrechtPrognosegrundlage
from .enum.wiederholungstyp import Wiederholungstyp
from .enum.zaehlerauspraegung import Zaehlerauspraegung
from .enum.zaehlergroesse import Zaehlergroesse
from .enum.zaehlertyp import Zaehlertyp
Expand Down
22 changes: 15 additions & 7 deletions src/bo4e/bo/region.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from .geschaeftsobjekt import Geschaeftsobjekt

if TYPE_CHECKING:
from ..com.regionskriterium import Regionskriterium
from ..com.regionsoperation import Regionsoperation


# pylint: disable=too-few-public-methods
Expand All @@ -21,7 +21,13 @@
@postprocess_docstring
class Region(Geschaeftsobjekt):
"""
Modellierung einer Region als Menge von Kriterien, die eine Region beschreiben
Modellierung einer Region als Liste von Regionsoperationen.

Die Reihenfolge der Regionsoperationen ist relevant,
wird aber nicht zwingend durch die Sortierung innerhalb der Liste definiert. Die Sortierung der Regionsoperationen
wird durch das Feld `prioritaet` im COM `Regionsoperation` explizit festgelegt, um technischen Problemen bei
spezifischen Umsetzungen vorzubeugen und Klarheit zu schaffen.
Bei einer Implementierung sollte darauf geachtet werden, dass sich "prioritaeten" nicht doppeln können.

.. raw:: html

Expand All @@ -35,9 +41,11 @@ class Region(Geschaeftsobjekt):
typ: Annotated[Literal[BoTyp.REGION], Field(alias="_typ")] = BoTyp.REGION
bezeichnung: Optional[str] = None
"""Bezeichnung der Region"""
beschreibung: Optional[str] = None
"""Beschreibung der Region"""

positiv_liste: Optional[list["Regionskriterium"]] = None
"""Positivliste der Kriterien zur Definition der Region"""

negativ_liste: Optional[list["Regionskriterium"]] = None
"""Negativliste der Kriterien zur Definition der Region"""
regionsoperationen: Optional[list["Regionsoperation"]] = None
"""
Eine (unsortierte) Liste von Regionsoperationen.
Die Sortierung wird durch das Feld `prioritaet` im COM `Regionsoperation` festgelegt.
"""
Loading
Loading