meldestelle/docs/diagrams/Domänen-Stammdaten_26-Mai-25.puml
2025-05-26 23:00:15 +02:00

284 lines
8.9 KiB
Plaintext

@startuml
!theme vibrant
title Datenbankmodell ÖTO - Fokus: Domänen-Stammdaten (Stand: 26. Mai 2025, 20:12 Uhr)
' Diagramm-Optionen
skinparam linetype ortho
hide empty members
skinparam shadowing false
skinparam defaultFontName "Segoe UI"
skinparam defaultFontSize 9
skinparam roundCorner 10
allow_mixing
skinparam packageStyle rect
' --- Enums (mit Suffix E) - Auswahl ---
enum DatenQuelleE {
OEPS_ZNS,
MANUELL_NATIONAL,
MANUELL_INTERNATIONAL,
SYSTEM_GENERIERTR
}
enum GeschlechtE {
M,
W,
UNBEKANNT
}
' Angepasst gemäß deiner Implementierung
enum PferdeGeschlechtE {
HENGST,
STUTE,
WALLACH,
UNBEKANNT
}
enum SparteE {
DRESSUR,
SPRINGEN,
VIELSEITIGKEIT,
}
' #####################################################################
' ### Service OeTO-Verwaltung (Definitionen) - Gekürzt dargestellt ###
' #####################################################################
package "Service OeTO-Verwaltung" {
entity LizenzTypGlobal {
+ lizenzTypGlobalId : UUID <<PK>>
--
lizenzTypGlobalCode : VARCHAR(15) <<UQ>> ' Eindeutiges OEPS Kürzel
bezeichnung : VARCHAR(100)
spartePrimaer : SparteE?
kategorieLizenzText : VARCHAR(50) ' LizenzKategorieE als String oder Enum intern
stufe: VARCHAR(10)?
aufschluesselungKombilizenzCodes: List<VARCHAR(10)>?
istAktiv: Boolean
}
entity QualifikationsTyp {
+ qualTypId : UUID <<PK>>
--
qualTypCode : VARCHAR(30) <<UQ>> ' Eindeutiges Kürzel
bezeichnung : VARCHAR(100)
sparte : SparteE
istAktiv: Boolean
}
entity LandDefinition {
+ landId: UUID <<PK>>
--
isoAlpha2Code: String <<UQ>>
isoAlpha3Code: String <<UQ>>
nameDeutsch: String
}
entity BundeslandDefinition {
+ bundeslandId: UUID <<PK>>
--
landId: UUID <<FK>>
oepsCode: String? ' Eindeutig für Österreich
name: String
}
}
' #####################################################################
' ### Service ZNS-Daten (Staging) - Gekürzt dargestellt ###
' #####################################################################
package "Service ZNS-Daten (Staging)" {
entity Person_ZNS_Staging {
+ oeps_satz_nr_person : VARCHAR(6) <<PK>>
--
familienname_roh : VARCHAR(50)
vorname_roh : VARCHAR(25)
'.. viele weitere Rohdaten-Felder ..
lizenzinfo_raw_oeps_roh : VARCHAR(10)?
qualifikationen_raw_oeps_roh: VARCHAR(30)?
import_timestamp: TIMESTAMP
}
entity Pferd_ZNS_Staging {
+ oeps_satz_nr_pferd : VARCHAR(10) <<PK>>
'.. viele weitere Rohdaten-Felder ..
import_timestamp: TIMESTAMP
}
entity Verein_ZNS_Staging {
+ oeps_vereins_nr : VARCHAR(4) <<PK>>
name_roh : VARCHAR(50)
import_timestamp: TIMESTAMP
}
}
' ####################################################################################
' ### Service Domänen-Stammdaten (Unsere finalisierten Domänenobjekte) ###
' ####################################################################################
package "Service Domänen-Stammdaten" {
entity DomVerein {
+ vereinId: UUID <<PK>>
--
oepsVereinsNr: String? <<UQ>>
name: String
kuerzel: String?
adresseStrasse: String?
plz: String?
ort: String?
bundeslandId: UUID <<FK>>?
landId: UUID <<FK>>
emailAllgemein: String?
telefonAllgemein: String?
webseiteUrl: String?
datenQuelle: DatenQuelleE
istAktiv: Boolean
notizenIntern: String?
createdAt: Instant
updatedAt: Instant
}
entity DomPerson {
+ personId: UUID <<PK>>
--
oepsSatzNr: String? <<UQ>>
nachname: String
vorname: String
titel: String?
geburtsdatum: LocalDate?
geschlecht: GeschlechtE?
nationalitaetLandId: UUID <<FK>>?
feiId: String?
telefon: String?
email: String?
strasse: String?
plz: String?
ort: String?
adresszusatzZusatzinfo: String?
stammVereinId: UUID <<FK>>?
mitgliedsNummerBeiStammVerein: String?
istGesperrt: Boolean
sperrGrund: String?
altersklasseOepsCodeRaw: String?
istJungerReiterOepsFlag: Boolean
kaderStatusOepsRaw: String?
datenQuelle: DatenQuelleE
istAktiv: Boolean
notizenIntern: String?
createdAt: Instant
updatedAt: Instant
}
entity DomPferd {
+ pferdId: UUID <<PK>>
--
oepsSatzNrPferd: String? <<UQ>>
oepsKopfNr: String?
name: String
lebensnummer: String?
feiPassNr: String?
geburtsjahr: Int?
geschlecht: PferdeGeschlechtE?
farbe: String?
rasse: String?
abstammungVaterName: String?
abstammungMutterName: String?
abstammungMutterVaterName: String?
abstammungZusatzInfo: String?
besitzerPersonId: UUID <<FK>>?
verantwortlichePersonId: UUID <<FK>>?
heimatVereinId: UUID <<FK>>?
letzteZahlungPferdegebuehrJahrOeps: Int?
stockmassCm: Int?
datenQuelle: DatenQuelleE
istAktiv: Boolean
notizenIntern: String?
createdAt: Instant
updatedAt: Instant
}
entity DomLizenz {
+ lizenzId: UUID <<PK>>
--
personId: UUID <<FK>>
lizenzTypGlobalId: UUID <<FK>> ' Verweis auf Service_OeTO_Verwaltung.LizenzTypGlobal
gueltigBisJahr: Int?
ausgestelltAm: LocalDate?
istAktivBezahltOeps: Boolean
notiz: String?
createdAt: Instant
updatedAt: Instant
}
entity DomQualifikation {
+ qualifikationId: UUID <<PK>>
--
personId: UUID <<FK>>
qualTypId: UUID <<FK>> ' Verweis auf Service_OeTO_Verwaltung.QualifikationsTyp
bemerkung: String?
gueltigVon: LocalDate?
gueltigBis: LocalDate?
istAktiv: Boolean
createdAt: Instant
updatedAt: Instant
}
}
' --- Beziehungen für Domänen-Stammdaten ---
Service_Domänen_Stammdaten.DomVerein -- "? Service_OeTO_Verwaltung.BundeslandDefinition : hat Bundesland"
Service_Domänen_Stammdaten.DomVerein -- "1" Service_OeTO_Verwaltung.LandDefinition : ist in Land"
Service_Domänen_Stammdaten.DomPerson -- "? Service_OeTO_Verwaltung.LandDefinition : hat Nationalität"
Service_Domänen_Stammdaten.DomPerson "0..1" -- "1" Service_Domänen_Stammdaten.DomVerein : hat Stammverein >
Service_Domänen_Stammdaten.DomPerson "1" -- "0..*" Service_Domänen_Stammdaten.DomLizenz : besitzt
Service_Domänen_Stammdaten.DomPerson "1" -- "0..*" Service_Domänen_Stammdaten.DomQualifikation : besitzt
Service_Domänen_Stammdaten.DomPferd "0..1" -- "1" Service_Domänen_Stammdaten.DomPerson : hat Besitzer >
Service_Domänen_Stammdaten.DomPferd "0..1" -- "1" Service_Domänen_Stammdaten.DomPerson : hat Verantwortlichen >
Service_Domänen_Stammdaten.DomPferd "0..1" -- "1" Service_Domänen_Stammdaten.DomVerein : hat Heimatverein >
Service_Domänen_Stammdaten.DomLizenz -- "1" Service_OeTO_Verwaltung.LizenzTypGlobal : ist vom Typ
Service_Domänen_Stammdaten.DomQualifikation -- "1" Service_OeTO_Verwaltung.QualifikationsTyp : ist vom Typ
' --- Andeutung der weiteren Pakete und wichtigsten Entitäten (stark gekürzt) ---
package "Service Veranstaltungsplanung" {
entity VeranstaltungsRahmen
entity Turnier_OEPS
'BewerbBasis'
entity Pruefung_OEPS
package "Sportfachliche Details Pruefung" {
entity DressurPruefungSpezifika
entity SpringPruefungSpezifika
}
entity Pruefung_Abteilung
entity Meisterschaft_Cup_Serie
}
package "Service Nennungsabwicklung" {
entity Nennung
entity NennungsTeilnehmerSnapshot
entity Startfolge
entity Ergebnis_Zeile
package "Sportfachliche Details Ergebnis" {
entity DressurErgebnisSpezifika
entity SpringenErgebnisSpezifika
}
}
package "Service Funktionärsplanung" {
entity FunktionaerEinsatzPlanung
}
' --- Wichtige übergreifende Beziehungen (Beispiele) ---
Service_Veranstaltungsplanung.VeranstaltungsRahmen "1" -- "0..*" Service_Veranstaltungsplanung.Turnier_OEPS
Service_Veranstaltungsplanung.Turnier_OEPS "1" -- "0..*" Service_Veranstaltungsplanung.Pruefung_OEPS
Service_Veranstaltungsplanung.Pruefung_OEPS "1" o-- "0..1" Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika
Service_Veranstaltungsplanung.Pruefung_OEPS "1" o-- "0..1" Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringPruefungSpezifika
Service_Veranstaltungsplanung.Pruefung_OEPS "1" -- "1..*" Service_Veranstaltungsplanung.Pruefung_Abteilung
Service_Nennungsabwicklung.Nennung -- Service_Veranstaltungsplanung.Pruefung_Abteilung
Service_Nennungsabwicklung.Nennung -- Service_Domänen_Stammdaten.DomPerson
Service_Nennungsabwicklung.Nennung -- Service_Domänen_Stammdaten.DomPferd
Service_Funktionärsplanung.FunktionaerEinsatzPlanung -- Service_Domänen_Stammdaten.DomPerson
Service_Funktionärsplanung.FunktionaerEinsatzPlanung -- Service_Veranstaltungsplanung.VeranstaltungsRahmen
' ... usw.
@enduml