Skip to content

Commit 0d1048c

Browse files
committed
Model new BO Region
1 parent 83711c1 commit 0d1048c

7 files changed

Lines changed: 81 additions & 59 deletions

File tree

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ repos:
77
- id: end-of-file-fixer
88
- id: trailing-whitespace
99
- repo: https://github.com/psf/black
10-
rev: 24.4.2 # Replace by any tag/version: https://github.com/psf/black/tags
10+
rev: 25.1.0 # Replace by any tag/version: https://github.com/psf/black/tags
1111
hooks:
1212
- id: black
1313
language_version: python3 # Should be a command that runs python3.6+
1414
- repo: https://github.com/pycqa/isort
15-
rev: 5.12.0
15+
rev: 6.0.1
1616
hooks:
1717
- id: isort
1818
name: isort (python)

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# This file is autogenerated by pip-compile with Python 3.12
33
# by the following command:
44
#
5-
# pip-compile requirements.in
5+
# pip-compile '.\requirements.in'
66
#
77
annotated-types==0.7.0
88
# via pydantic

src/bo4e/bo/region.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from .geschaeftsobjekt import Geschaeftsobjekt
1212

1313
if TYPE_CHECKING:
14-
from ..com.regionskriterium import Regionskriterium
14+
from ..com.regionsoperation import Regionsoperation
1515

1616

1717
# pylint: disable=too-few-public-methods
@@ -21,7 +21,13 @@
2121
@postprocess_docstring
2222
class Region(Geschaeftsobjekt):
2323
"""
24-
Modellierung einer Region als Menge von Kriterien, die eine Region beschreiben
24+
Modellierung einer Region als Liste von Regionsoperationen.
25+
26+
Die Reihenfolge der Regionsoperationen ist relevant,
27+
wird aber nicht zwingend durch die Sortierung innerhalb der Liste definiert. Die Sortierung der Regionsoperationen
28+
wird durch das Feld `prioritaet` im COM `Regionsoperation` explizit festgelegt, um technischen Problemen bei
29+
spezifischen Umsetzungen vorzubeugen und Klarheit zu schaffen.
30+
Bei einer Implementierung sollte darauf geachtet werden, dass sich "prioritaeten" nicht doppeln können.
2531
2632
.. raw:: html
2733
@@ -35,9 +41,11 @@ class Region(Geschaeftsobjekt):
3541
typ: Annotated[Literal[BoTyp.REGION], Field(alias="_typ")] = BoTyp.REGION
3642
bezeichnung: Optional[str] = None
3743
"""Bezeichnung der Region"""
44+
beschreibung: Optional[str] = None
45+
"""Beschreibung der Region"""
3846

39-
positiv_liste: Optional[list["Regionskriterium"]] = None
40-
"""Positivliste der Kriterien zur Definition der Region"""
41-
42-
negativ_liste: Optional[list["Regionskriterium"]] = None
43-
"""Negativliste der Kriterien zur Definition der Region"""
47+
regionsoperationen: Optional[list[Regionsoperation]] = None
48+
"""
49+
Eine (unsortierte) Liste von Regionsoperationen.
50+
Die Sortierung wird durch das Feld `prioritaet` im COM `Regionsoperation` festgelegt.
51+
"""

src/bo4e/com/regionskriterium.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/bo4e/com/regionsoperation.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
Contains Regionskriterium class
3+
"""
4+
5+
from decimal import Decimal
6+
from typing import TYPE_CHECKING, Annotated, Literal, Optional
7+
8+
from pydantic import Field
9+
10+
from ..enum.comtyp import ComTyp
11+
from ..utils import postprocess_docstring
12+
from .com import COM
13+
14+
if TYPE_CHECKING:
15+
from ..enum.operator import Operator
16+
from ..enum.regionskriterium import Regionskriterium
17+
18+
19+
# pylint: disable=too-few-public-methods
20+
21+
22+
@postprocess_docstring
23+
class Regionsoperation(COM):
24+
"""
25+
Komponente zur Abbildung einer Regionsoperation.
26+
27+
In Kombination mit anderen Regionsoperationen kann eine Region definiert werden. Eine Regionsoperation ermöglicht
28+
die Definition einer Region in eingeschränkter Form. Durch den Operator können mehrere "einfache" Regionsoperationen
29+
miteinander kombiniert werden, um eine komplexere Region zu definieren.
30+
31+
.. raw:: html
32+
33+
<object data="../_static/images/bo4e/com/Regionsoperation.svg" type="image/svg+xml"></object>
34+
35+
.. HINT::
36+
`Regionsoperation JSON Schema <https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/BO4E/BO4E-Schemas/{__gh_version__}/src/bo4e_schemas/com/Regionsoperation.json>`_
37+
38+
"""
39+
40+
typ: Annotated[Literal[ComTyp.REGIONSKRITERIUM], Field(alias="_typ")] = ComTyp.REGIONSKRITERIUM
41+
42+
regionsoperator: Optional[Operator] = None
43+
prioritaet: Optional[int] = None
44+
"""
45+
Priorität dieser Regionsoperation. Theoretisch sind Listen in JSON sortiert, jedoch ist eine solche Sortierung
46+
eventuell implementierungsbedingt fehleranfällig. Daher nutzen wir dieses Feld. angefangen bei 1 (höchste Priorität) und aufsteigend
47+
"""
48+
bezeichnung: Optional[str] = None
49+
"""(auch IDs und PLZ möglich)"""
50+
bezeichnung2: Optional[str] = None
51+
"""(TODO: bessere Benamung! geht vor allem um Postort: PLZ & Ort als Schnittmenge)"""
52+
wert_von: Optional[str] = None
53+
"""(inklusiv)"""
54+
wert_bis: Optional[str] = None
55+
"""(inklusiv)"""
56+
radius_in_km: Optional[Decimal] = None
57+
"""(inklusiv)"""
58+
regionskriterium: Optional[Regionskriterium] = None
59+
"""(ehemals Regionskriteriumtyp)]"""
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
from bo4e.enum.strenum import StrEnum
33

44

5-
class ArithmetischeOperation(StrEnum):
5+
class Operator(StrEnum):
66
"""
7-
Mit dieser Aufzählung können arithmetische Operationen festgelegt werden.
7+
Mit dieser Aufzählung können Operationen festgelegt werden.
88
"""
99

1010
ADDITION = "ADDITION"
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from bo4e.enum.strenum import StrEnum
33

44

5-
class Regionskriteriumtyp(StrEnum):
5+
class Regionskriterium(StrEnum):
66
"""
77
Klassifizierung der Kriterien für eine regionale Eingrenzung.
88
"""
@@ -67,7 +67,7 @@ class Regionskriteriumtyp(StrEnum):
6767
"""Einwohnerzahl Gemeinde"""
6868
EINWOHNERZAHL_ORT = "EINWOHNERZAHL_ORT"
6969
"""Einwohnerzahl Ort"""
70-
KM_UMKREIS = "KM_UMKREIS"
70+
PLZ_KM_UMKREIS = "PLZ_KM_UMKREIS"
7171
"""km Umkreis"""
7272
BUNDESWEIT = "BUNDESWEIT"
7373
"""Bundesweite Betrachtung"""

0 commit comments

Comments
 (0)