Skip to content

Commit bdf7639

Browse files
Rework Geschaeftspartner, Marktteilnehmer and Ansprechpartner (=> Person) (#680)
Co-authored-by: kevin <68426071+hf-krechan@users.noreply.github.com>
1 parent c117848 commit bdf7639

21 files changed

+342
-303
lines changed

src/bo4e/__init__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
"""
1010
__all__ = [
1111
"Angebot",
12-
"Ansprechpartner",
1312
"Ausschreibung",
1413
"Buendelvertrag",
1514
"Energiemenge",
@@ -22,6 +21,7 @@
2221
"Marktlokation",
2322
"Marktteilnehmer",
2423
"Messlokation",
24+
"Person",
2525
"Preisblatt",
2626
"PreisblattDienstleistung",
2727
"PreisblattHardware",
@@ -58,6 +58,7 @@
5858
"Fremdkostenposition",
5959
"Geokoordinaten",
6060
"Katasteradresse",
61+
"Kontaktweg",
6162
"Konzessionsabgabe",
6263
"Kostenblock",
6364
"Kostenposition",
@@ -77,7 +78,6 @@
7778
"RegionalerAufAbschlag",
7879
"RegionaleTarifpreisposition",
7980
"Regionskriterium",
80-
"Rufnummer",
8181
"Sigmoidparameter",
8282
"StandorteigenschaftenGas",
8383
"StandorteigenschaftenStrom",
@@ -145,6 +145,7 @@
145145
"NetznutzungRechnungstyp",
146146
"Oekolabel",
147147
"Oekozertifikat",
148+
"Organisationstyp",
148149
"Preisgarantietyp",
149150
"Preismodell",
150151
"Preisstatus",
@@ -155,7 +156,6 @@
155156
"Regionskriteriumtyp",
156157
"Registeranzahl",
157158
"Rollencodetyp",
158-
"Rufnummernart",
159159
"Sparte",
160160
"Steuerkennzeichen",
161161
"StrEnum",
@@ -188,7 +188,6 @@
188188

189189
# Import BOs
190190
from .bo.angebot import Angebot
191-
from .bo.ansprechpartner import Ansprechpartner
192191
from .bo.ausschreibung import Ausschreibung
193192
from .bo.buendelvertrag import Buendelvertrag
194193
from .bo.energiemenge import Energiemenge
@@ -201,6 +200,7 @@
201200
from .bo.marktlokation import Marktlokation
202201
from .bo.marktteilnehmer import Marktteilnehmer
203202
from .bo.messlokation import Messlokation
203+
from .bo.person import Person
204204
from .bo.preisblatt import Preisblatt
205205
from .bo.preisblattdienstleistung import PreisblattDienstleistung
206206
from .bo.preisblatthardware import PreisblattHardware
@@ -239,6 +239,7 @@
239239
from .com.fremdkostenposition import Fremdkostenposition
240240
from .com.geokoordinaten import Geokoordinaten
241241
from .com.katasteradresse import Katasteradresse
242+
from .com.kontaktweg import Kontaktweg
242243
from .com.konzessionsabgabe import Konzessionsabgabe
243244
from .com.kostenblock import Kostenblock
244245
from .com.kostenposition import Kostenposition
@@ -258,7 +259,6 @@
258259
from .com.regionaleraufabschlag import RegionalerAufAbschlag
259260
from .com.regionaletarifpreisposition import RegionaleTarifpreisposition
260261
from .com.regionskriterium import Regionskriterium
261-
from .com.rufnummer import Rufnummer
262262
from .com.sigmoidparameter import Sigmoidparameter
263263
from .com.standorteigenschaftengas import StandorteigenschaftenGas
264264
from .com.standorteigenschaftenstrom import StandorteigenschaftenStrom
@@ -328,6 +328,7 @@
328328
from .enum.netznutzungrechnungstyp import NetznutzungRechnungstyp
329329
from .enum.oekolabel import Oekolabel
330330
from .enum.oekozertifikat import Oekozertifikat
331+
from .enum.organisationstyp import Organisationstyp
331332
from .enum.preisgarantietyp import Preisgarantietyp
332333
from .enum.preismodell import Preismodell
333334
from .enum.preisstatus import Preisstatus
@@ -338,7 +339,6 @@
338339
from .enum.regionskriteriumtyp import Regionskriteriumtyp
339340
from .enum.registeranzahl import Registeranzahl
340341
from .enum.rollencodetyp import Rollencodetyp
341-
from .enum.rufnummernart import Rufnummernart
342342
from .enum.sparte import Sparte
343343
from .enum.steuerkennzeichen import Steuerkennzeichen
344344
from .enum.strenum import StrEnum

src/bo4e/bo/angebot.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
from ..enum.sparte import Sparte
1515
from ..enum.typ import Typ
1616
from ..utils import postprocess_docstring
17-
from .ansprechpartner import Ansprechpartner
1817
from .geschaeftsobjekt import Geschaeftsobjekt
1918
from .geschaeftspartner import Geschaeftspartner
19+
from .person import Person
2020

2121

2222
@postprocess_docstring
@@ -59,6 +59,6 @@ class Angebot(Geschaeftsobjekt):
5959
#: Bis zu diesem Zeitpunkt (Tag/Uhrzeit) inklusive gilt das Angebot
6060
bindefrist: Optional[datetime] = None
6161
#: Person, die als Angebotsnehmer das Angebot angenommen hat
62-
unterzeichner_angebotsnehmer: Optional[Ansprechpartner] = None
62+
unterzeichner_angebotsnehmer: Optional[Person] = None
6363
#: Person, die als Angebotsgeber das Angebots ausgestellt hat
64-
unterzeichner_angebotsgeber: Optional[Ansprechpartner] = None
64+
unterzeichner_angebotsgeber: Optional[Person] = None

src/bo4e/bo/ansprechpartner.py

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

src/bo4e/bo/geschaeftspartner.py

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@
22
Contains Geschaeftspartner class
33
and corresponding marshmallow schema for de-/serialization
44
"""
5-
# pylint: disable=too-many-instance-attributes, too-few-public-methods
5+
6+
# pylint: disable=too-many-instance-attributes, too-few-public-methods, disable=duplicate-code
67
from typing import Annotated, Optional
78

89
from pydantic import Field
910

1011
from ..com.adresse import Adresse
12+
from ..com.kontaktweg import Kontaktweg
1113
from ..enum.anrede import Anrede
1214
from ..enum.geschaeftspartnerrolle import Geschaeftspartnerrolle
13-
from ..enum.kontaktart import Kontaktart
15+
from ..enum.organisationstyp import Organisationstyp
16+
from ..enum.titel import Titel
1417
from ..enum.typ import Typ
1518
from ..utils import postprocess_docstring
1619
from .geschaeftsobjekt import Geschaeftsobjekt
20+
from .person import Person
1721

1822

1923
@postprocess_docstring
@@ -34,53 +38,45 @@ class Geschaeftspartner(Geschaeftsobjekt):
3438
"""
3539

3640
typ: Annotated[Optional[Typ], Field(alias="_typ")] = Typ.GESCHAEFTSPARTNER
37-
name1: Optional[str] = None
41+
#: Mögliche Anrede der Person
42+
anrede: Optional[Anrede] = None
43+
individuelle_anrede: Optional[str] = None
3844
"""
39-
Erster Teil des Namens.
40-
Hier kann der Firmenname oder bei Privatpersonen beispielsweise der Nachname dagestellt werden.
41-
Beispiele: Yellow Strom GmbH oder Hagen
45+
Im Falle einer nicht standardisierten Anrede kann hier eine frei definierbare Anrede vorgegeben werden.
46+
Beispiel: "Vereinsgemeinschaft", "Pfarrer", "Hochwürdigster Herr Abt".
4247
"""
43-
# todo: replace name1/2/3 with something more readable. no one wants to deal with that. maybe serialize as name1/2/3
44-
# but resolve to readable python fields under the hood
48+
#: Möglicher Titel der Person
49+
titel: Optional[Titel] = None
50+
#: Vorname der Person
51+
vorname: Optional[str] = None
52+
#: Nachname (Familienname) der Person
53+
nachname: Optional[str] = None
4554

46-
ist_gewerbe: Optional[bool] = None
55+
ansprechpartner: Optional[list[Person]] = None
56+
organisationstyp: Optional[Organisationstyp] = None
4757
"""
48-
Kennzeichnung ob es sich um einen Gewerbe/Unternehmen (istGewerbe = true)
49-
oder eine Privatperson handelt. (istGewerbe = false)
58+
Kennzeichnung ob es sich um ein Gewerbe/Unternehmen, eine Privatperson oder eine andere Art von Organisation handelt.
5059
"""
51-
#: Rollen, die die Geschäftspartner inne haben (z.B. Interessent, Kunde)
52-
geschaeftspartnerrolle: Optional[list[Geschaeftspartnerrolle]] = None
53-
# todo: rename to plural
54-
55-
#: Die Anrede für den GePa, Z.B. "Herr"
56-
anrede: Optional[Anrede] = None
57-
name2: Optional[str] = None
60+
organisationsname: Optional[str] = None
5861
"""
59-
Zweiter Teil des Namens.
60-
Hier kann der eine Erweiterung zum Firmennamen oder bei Privatpersonen beispielsweise der Vorname dagestellt werden.
61-
Beispiele: Bereich Süd oder Nina
62-
"""
63-
64-
name3: Optional[str] = None
65-
"""
66-
Dritter Teil des Namens.
67-
Hier können weitere Ergänzungen zum Firmennamen oder bei Privatpersonen Zusätze zum Namen dagestellt werden.
68-
Beispiele: und Afrika oder Sängerin
62+
Name der Firma, wenn Gewerbe oder andere Organisation.
6963
"""
64+
#: Kontaktwege des Geschäftspartners
65+
kontaktwege: Optional[list[Kontaktweg]] = None
66+
#: Rollen, die die Geschäftspartner inne haben (z.B. Interessent, Kunde)
67+
geschaeftspartnerrollen: Optional[list[Geschaeftspartnerrolle]] = None
7068
#: Handelsregisternummer des Geschäftspartners
71-
hrnummer: Optional[str] = None
69+
handelsregisternummer: Optional[str] = None
7270
#: Amtsgericht bzw Handelsregistergericht, das die Handelsregisternummer herausgegeben hat
7371
amtsgericht: Optional[str] = None
74-
#: Bevorzugte Kontaktwege des Geschäftspartners
75-
kontaktweg: Optional[list[Kontaktart]] = None
7672
#: Die Steuer-ID des Geschäftspartners; Beispiel: "DE 813281825"
7773
umsatzsteuer_id: Optional[str] = None
7874
#: Die Gläubiger-ID welche im Zahlungsverkehr verwendet wird; Z.B. "DE 47116789"
7975
glaeubiger_id: Optional[str] = None
80-
#: E-Mail-Adresse des Ansprechpartners. Z.B. "info@hochfrequenz.de"
81-
e_mail_adresse: Optional[str] = None
8276
#: Internetseite des Marktpartners
8377
website: Optional[str] = None
84-
#: Adressen der Geschäftspartner, an denen sich der Hauptsitz befindet
85-
partneradresse: Optional[Adresse] = None # todo: is it plural or not? the docs are bad
78+
#: Adresse des Geschäftspartners
79+
adresse: Optional[Adresse] = None
8680
#: Todo: Add optional connection to marktteilnehmer as discussed in workshop
81+
#: not clear what is the best solution here - circular import marktteilnehmer?
82+
#: discussed in workshop on Feb 6 2024: yes we need the bidirectional option, let's figure out a solution somehow.

src/bo4e/bo/marktteilnehmer.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
from ..enum.sparte import Sparte
1616
from ..enum.typ import Typ
1717
from ..utils import postprocess_docstring
18+
from .geschaeftsobjekt import Geschaeftsobjekt
1819
from .geschaeftspartner import Geschaeftspartner
1920

2021

2122
@postprocess_docstring
22-
class Marktteilnehmer(Geschaeftspartner):
23+
class Marktteilnehmer(Geschaeftsobjekt):
2324
"""
2425
Objekt zur Aufnahme der Information zu einem Marktteilnehmer
2526
@@ -41,6 +42,7 @@ class Marktteilnehmer(Geschaeftspartner):
4142
rollencodetyp: Optional[Rollencodetyp] = None
4243
#: Sparte des Marktteilnehmers, z.B. Gas oder Strom
4344
sparte: Optional[Sparte] = None
44-
45-
#: Die 1:1-Kommunikationsadresse des Marktteilnehmers; Diese wird in der Marktkommunikation verwendet.
46-
makoadresse: Optional[str] = None
45+
#: Die 1:1-Kommunikationsadresse des Marktteilnehmers. Diese wird in der Marktkommunikation verwendet. Konkret kann dies eine eMail-Adresse oder ein AS4-Endpunkt sein.
46+
makoadresse: Optional[list[str]] = None
47+
#: Der zu diesem Marktteilnehmer gehörende Geschäftspartner
48+
geschaeftspartner: Optional[Geschaeftspartner] = None

src/bo4e/bo/person.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"""
2+
Contains Person class
3+
and corresponding marshmallow schema for de-/serialization
4+
"""
5+
6+
from datetime import datetime
7+
from typing import Annotated, Optional
8+
9+
from pydantic import Field
10+
11+
from ..com.adresse import Adresse
12+
from ..com.kontaktweg import Kontaktweg
13+
from ..com.zustaendigkeit import Zustaendigkeit
14+
from ..enum.anrede import Anrede
15+
from ..enum.titel import Titel
16+
from ..enum.typ import Typ
17+
from ..utils import postprocess_docstring
18+
from .geschaeftsobjekt import Geschaeftsobjekt
19+
20+
# pylint: disable=too-many-instance-attributes, too-few-public-methods, disable=duplicate-code
21+
22+
23+
@postprocess_docstring
24+
class Person(Geschaeftsobjekt):
25+
"""
26+
Object containing information about a Person
27+
28+
.. raw:: html
29+
30+
<object data="../_static/images/bo4e/bo/Person.svg" type="image/svg+xml"></object>
31+
32+
.. HINT::
33+
`Person JSON Schema <https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/Hochfrequenz/BO4E-Schemas/{__gh_version__}/src/bo4e_schemas/bo/Person.json>`_
34+
35+
"""
36+
37+
typ: Annotated[Optional[Typ], Field(alias="_typ")] = Typ.PERSON
38+
#: Mögliche Anrede der Person
39+
anrede: Optional[Anrede] = None
40+
individuelle_anrede: Optional[str] = None
41+
"""
42+
Im Falle einer nicht standardisierten Anrede kann hier eine frei definierbare Anrede vorgegeben werden.
43+
Beispiel: "Vereinsgemeinschaft", "Pfarrer", "Hochwürdigster Herr Abt".
44+
"""
45+
#: Möglicher Titel der Person
46+
titel: Optional[Titel] = None
47+
#: Vorname der Person
48+
vorname: Optional[str] = None
49+
#: Nachname (Familienname) der Person
50+
nachname: Optional[str] = None
51+
#: Kontaktwege der Person
52+
kontaktwege: Optional[list[Kontaktweg]] = None
53+
#: Geburtsdatum der Person
54+
geburtsdatum: Optional[datetime] = None
55+
#: Weitere Informationen zur Person
56+
kommentar: Optional[str] = None
57+
#: Liste der Abteilungen und Zuständigkeiten der Person
58+
zustaendigkeiten: Optional[list[Zustaendigkeit]] = None
59+
#: Adresse der Person, falls diese von der Adresse des Geschäftspartners abweicht
60+
adresse: Optional[Adresse] = None

0 commit comments

Comments
 (0)