Klassen impl

This commit is contained in:
stefan
2025-05-20 16:44:45 +02:00
parent 0ca73cbe60
commit 181cbcf7d3
27 changed files with 1974 additions and 491 deletions
+610
View File
@@ -0,0 +1,610 @@
@startuml
!theme vibrant
title Datenbankmodell ÖTO - Service-Orientierte Modulare Struktur (inkl. aller Sparten)
' Ankerpunkt: Montag 19. Mai, 10:53 Uhr (basierend auf Nutzer-Input und vorherigen Diskussionen)
' Diagramm-Optionen
skinparam linetype ortho
hide empty members
skinparam shadowing false
skinparam defaultFontName "Segoe UI"
skinparam defaultFontSize 10
skinparam roundCorner 10
allow_mixing
' --- Enums (mit Suffix E) ---
enum SparteE {
DRESSUR,
SPRINGEN,
VIELSEITIGKEIT,
FAHREN,
VOLTIGIEREN,
WESTERN,
DISTANZ,
ISLAND,
PFERDESPORT_SPIEL,
SONDERPRUEFUNG,
SONSTIGE,
UNBEKANNT
}
enum RegelwerkTypE {
OETO,
FEI,
SONSTIGE
}
enum PruefungsaufgabeNationE {
NATIONAL_OEPS,
FEI,
SONSTIGE
}
enum PruefungsaufgabeRichtverfahrenModusE {
GM,
GT,
NICHT_SPEZIFIZIERT
}
enum PruefungsaufgabeViereckE {
VIERECK_20x40,
VIERECK_20x60,
ANDERE,
UNBEKANNT
}
enum ArtDesStechensE {
KEIN_STECHEN,
FEHLER_ZEIT_NORMAL,
FEHLER_ZEIT_AM3,
SIEGERUNDE_SR1_MIT_UEBERNAHME_GP,
SIEGERUNDE_SR2_OHNE_UEBERNAHME_GP,
ZWEI_STECHEN_AM4, ZWEI_STECHEN_AM6,
SONDERREGELUNG_AUSSCHREIBUNG
}
enum FunktionaerRolleE {
RICHTER,
RICHTER_VORSITZ,
RICHTER_BEI_C,
RICHTER_AM_ABREITEPLATZ,
PARCOURSBAUER,
PARCOURSBAU_ASSISTENT,
STEWARD,
TECHNISCHER_DELEGIERTER,
TURNIERLEITER,
TURNIERBEAUFTRAGTER,
TIERARZT_TURNIER,
HUFSCHMIED_TURNIER,
MELD,
RECHENSTELLE,
SPRECHER,
REITERSPRECHER,
ZEITNEHMER,
SCHREIBER_RICHTER,
HELFER_PARCOURS,
SONSTIGE_FUNKTION
}
enum RichterPositionE {
C,
E,
H,
B,
M,
VORSITZ,
RICHTERTURM,
SONSTIGE_POSITION
}
enum DatenQuelleE {
OEPS_ZNS,
MANUELL_NATIONAL,
MANUELL_INTERNATIONAL,
SYSTEM_GENERIERTR
}
enum NennungStatusE {
GEMELDET,
MANUELL_ERFASST,
BESTAETIGT,
NACHGENANNT,
BEZAHLT,
STARTBERECHTIGT,
ABGEMELDET_REITER,
ABGEMELDET_VERANSTALTER,
STORNIERT_SYSTEM
}
enum BeginnzeitTypE {
FIX_UM,
ANSCHLIESSEND,
CA_UM,
NACH_VORHERIGEM_BEWERB_ABTEILUNG
}
enum EventStatusE {
IN_PLANUNG,
GENEHMIGT_VERANSTALTER,
OEFFENTLICH_SICHTBAR,
AKTIV,
ABGESCHLOSSEN,
ABGESAGT
}
enum PlatzTypE {
AUSTRAGUNG,
VORBEREITUNG,
LONGIEREN,
SONSTIGES
}
enum SportfachStammdatenTypE {
DRESSURAUFGABE,
HINDERNISTYP_SPRINGEN,
WERTUNGSVERFAHREN,
RVK_PUNKTETABELLE,
OETO_REGEL_TEXT,
SONSTIGES
}
enum CupSerieTypE {
CUP,
MEISTERSCHAFT_LAND,
MEISTERSCHAFT_BUND,
SERIE,
SONDERWERTUNG
}
' #####################################################################
' ### Service OeTO-Verwaltung (Regeln, Lizenzen, Definitionen) ###
' #####################################################################
package Service_OeTO_Verwaltung {
entity OETORegelReferenz {
+ oeto_regel_referenz_id : UUID <<PK>>
--
paragraph_nummer : VARCHAR
kapitel_titel : VARCHAR?
kurzbeschreibung_regel : TEXT?
oeto_version_datum : DATE
url_detail : VARCHAR?
regelwerk_typ : RegelwerkTypE ' ÖTO oder FEI
}
' Definiert Funktionärsqualifikationen
entity QualifikationsTyp {
+ qual_typ_code : VARCHAR <<PK>> ' z.B. "R-DPF", "PB-S", "TD-NAT"
--
bezeichnung : VARCHAR
sparte : SparteE
# oeto_regel_ref_id : UUID <<FK>>?
}
QualifikationsTyp -- "?" OETORegelReferenz : unterliegt
' Deine LizenzTyp_OEPS, umbenannt für globale Lizenzdefinitionen
entity LizenzTypGlobal {
+ lizenz_typ_global_code : VARCHAR(10) <<PK>> ' z.B. "R1", "RS2", "F1", "S (Startkarte)"
--
bezeichnung : VARCHAR
sparte_primaer : SparteE? ' Hauptsparte dieser Lizenz
kategorie_lizenz_text : VARCHAR ' z.B. "Reiterlizenz", "Startkarte", "Fahrerlizenz", "Funktionärsqualifikation"
stufe : VARCHAR? ' z.B. "1", "2", "S"
beschreibung_berechtigung : TEXT?
# oeto_regel_ref_id : UUID <<FK>>?
}
LizenzTypGlobal -- "?" OETORegelReferenz : basiert auf
entity AltersklasseDefinition {
+ altersklasse_code : VARCHAR(10) <<PK>> ' z.B. "JG", "U18", "YR", "ALLG"
--
bezeichnung : VARCHAR
min_alter : INTEGER?
max_alter : INTEGER?
geschlecht_filter : CHAR(1)? ' W, M, oder null für alle
# oeto_regel_ref_id : UUID <<FK>>?
}
AltersklasseDefinition -- "?" OETORegelReferenz : definiert durch
' Für Dressuraufgaben, Richtverfahren etc.
entity Sportfachliche_Stammdaten {
+ stammdatum_id : UUID <<PK>>
--
typ : SportfachStammdatenTypE
code : VARCHAR ' z.B. "GA02/23" (Dressuraufgabe), "A2_OETO204" (Richtverfahren)
bezeichnung : VARCHAR
beschreibung_details_json : TEXT ' Strukturierte Details als JSON (z.B. Lektionen, Fehlerpunkte)
sparte_zugehoerigkeit : SparteE
nation_gueltigkeit: PruefungsaufgabeNationE? ' NATIONAL_OEPS, FEI
viereck_groesse: PruefungsaufgabeViereckE? ' Für Dressuraufgaben
richtverfahren_modus: PruefungsaufgabeRichtverfahrenModusE? ' GM/GT für Dressuraufgaben
istAktiv: Boolean
# oeto_regel_ref_id : UUID <<FK>>?
}
Sportfachliche_Stammdaten -- "?" OETORegelReferenz : referenziert
}
' --- Ende Service OeTO-Verwaltung ---
' #####################################################################
' ### Service ZNS-Daten (Staging/Rohdaten von OEPS) ###
' #####################################################################
package Service_ZNS_Daten {
entity Verein_ZNS_Staging {
+ oeps_vereins_nr : VARCHAR(4) <<PK>> ' Aus VEREIN01.dat
--
name : VARCHAR(50)
import_timestamp: TIMESTAMP
}
entity Person_ZNS_Staging {
+ oeps_satz_nr_person : VARCHAR(6) <<PK>> ' Aus LIZENZ01.dat / RICHT01.dat
--
familienname : VARCHAR(50)
vorname : VARCHAR(25)
geburtsdatum_text : VARCHAR(8) ' JJJJMMTT
geschlecht_code : CHAR(1)
nationalitaet_code : VARCHAR(3)
bundesland_code_oeps : VARCHAR(2)?
vereinsname_oeps_roh : VARCHAR(50)?
mitglied_nr_verein : VARCHAR(8)?
fei_id_person : VARCHAR(10)?
sperrliste_flag_oeps : CHAR(1)? ' "S" oder BLANK
kader_flag_oeps : CHAR(1)?
telefon_roh : VARCHAR(21)?
reiterlizenz_roh : VARCHAR(4)?
startkarte_roh : CHAR(1)?
fahrlizenz_roh : VARCHAR(2)?
altersklasse_jugend_code_oeps : VARCHAR(2)?
altersklasse_jungerreiter_code_oeps : CHAR(1)?
jahr_letzte_zahlung_lizenz_oeps : INTEGER?
lizenzinfo_raw_oeps : VARCHAR(10)?
qualifikationen_raw_oeps: VARCHAR(30)? ' Aus RICHT01.dat
import_timestamp: TIMESTAMP
}
entity Pferd_ZNS_Staging {
+ oeps_satz_nr_pferd : VARCHAR(10) <<PK>> ' Aus PFERDE01.dat
--
oeps_kopf_nr : VARCHAR(4)? ' Wird oft zusätzlich verwendet
name : VARCHAR(30)
lebensnummer : VARCHAR(9)?
geburtsjahr : INTEGER?
geschlecht_code : CHAR(1)?
farbe : VARCHAR(15)?
abstammung_vater_name : VARCHAR(30)?
abstammung_info_roh : VARCHAR(15)? ' Feld "ABSTAMMUNG"
oeps_verein_nr_pferd_roh : VARCHAR(4)?
verantwortliche_person_name_roh: VARCHAR(75)?
fei_pass_nr : VARCHAR(10)?
letzte_zahlung_pferdegebuehr_jahr : INTEGER?
import_timestamp: TIMESTAMP
}
}
' --- Ende Service ZNS-Daten ---
' ####################################################################################
' ### Domänen Service: Sportler & Pferde Verwaltung (aus ZNS und manuell) ###
' ####################################################################################
package Service_Sportler_Pferde_Verwaltung {
entity DomPerson {
+ person_id: UUID <<PK>>
--
oeps_satz_nr: VARCHAR(6) <<UQ>>?
nachname: VARCHAR
vorname: VARCHAR
geburtsdatum: DATE?
geschlecht: GeschlechtE?
nationalitaet_code: VARCHAR(3)?
fei_id: VARCHAR(10)?
telefon: VARCHAR?
email: VARCHAR?
# stamm_verein_id: UUID <<FK>>? ' Verweis auf DomVerein.verein_id
ist_gesperrt: BOOLEAN
sperr_grund: TEXT?
daten_quelle: DatenQuelleE
ist_aktiv: BOOLEAN
}
entity DomPferd {
+ pferd_id: UUID <<PK>>
--
oeps_satz_nr_pferd: VARCHAR(10) <<UQ>>?
oeps_kopf_nr: VARCHAR(4)?
name: VARCHAR
lebensnummer: VARCHAR?
geburtsjahr: INTEGER?
geschlecht_pferd: CHAR(1)? ' oder Enum
# besitzer_person_id: UUID <<FK>>?
# verantwortlicher_person_id: UUID <<FK>>?
# heimat_verein_id: UUID <<FK>>?
daten_quelle: DatenQuelleE
ist_aktiv: BOOLEAN
}
entity DomVerein {
+ verein_id: UUID <<PK>>
--
oeps_vereins_nr: VARCHAR(4) <<UQ>>
name: VARCHAR
kuerzel: VARCHAR?
bundesland_code: VARCHAR(2)?
}
entity DomLizenz {
+ lizenz_id: UUID <<PK>>
--
# person_id: UUID <<FK>>
# lizenz_typ_global_code: VARCHAR(10) <<FK>> ' Verweis auf Service_OeTO_Verwaltung.LizenzTypGlobal
gueltig_bis_jahr: INTEGER?
ist_aktiv_bezahlt: BOOLEAN ' Info aus LIZENZINFO
}
entity DomQualifikation {
+ qualifikation_id: UUID <<PK>>
--
# person_id: UUID <<FK>>
# qual_typ_code: VARCHAR <<FK>> ' Verweis auf Service_OeTO_Verwaltung.QualifikationsTyp
details: VARCHAR?
}
DomPerson "1" -- "0..*" DomLizenz : besitzt
DomLizenz -- "1" Service_OeTO_Verwaltung.LizenzTypGlobal : ist vom Typ
DomPerson "1" -- "0..*" DomQualifikation : besitzt
DomQualifikation -- "1" Service_OeTO_Verwaltung.QualifikationsTyp : ist vom Typ
DomPerson "0..*" -- "1" DomVerein : hat Stammverein
DomPferd "0..*" -- "1" DomPerson : hat Besitzer
DomPferd "0..*" -- "1" DomPerson : hat Verantwortlichen
DomPferd "0..*" -- "1" DomVerein : hat Heimatverein
}
' --- Ende Service Sportler & Pferde Verwaltung ---
' #####################################################################
' ### Service Veranstaltungsplanung (Events, Turniere, Prüfungen) ###
' #####################################################################
package Service_Veranstaltungsplanung {
' Entspricht unserem "Event"
entity VeranstaltungsRahmen {
+ veranst_rahmen_id : UUID <<PK>>
--
name : VARCHAR
datum_von_gesamt : DATE
datum_bis_gesamt : DATE
# hauptveranstalter_verein_id : UUID <<FK>> ' Verweis auf DomVerein
ort_text: VARCHAR
status: EventStatusE
}
' Entspricht unserem "Turnier"
entity Turnier_OEPS {
+ turnier_id : UUID <<PK>> ' Eigene UUID für interne Zwecke
--
# veranst_rahmen_id : UUID <<FK>>
oeps_turnier_nr : VARCHAR(5) <<UQ>> ' Offizielle OEPS Nummer
name_zusatz : VARCHAR?
datum_von_turnier : DATE
datum_bis_turnier : DATE
# oeto_kategorie_ids: List<UUID> '(FKs zu Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition)' ' Eher so'
kategorie_text_turnier : VARCHAR(50) ' Wie in SUDO, kann mehrere ÖTO Kat. enthalten, z.B. "CDN-C Neu / CDNP-C Neu"'
regelwerk_typ : RegelwerkTypE
hauptsparte: SparteE
}
' Entspricht unserer "BewerbBasis"
entity Pruefung_OEPS {
+ pruefung_db_id : UUID <<PK>>
--
# turnier_id : UUID <<FK>>
oeps_bewerb_nr_display : INTEGER ' Eindeutige Nummer pro Turnier
name_text_uebergeordnet : VARCHAR
sparte : SparteE ' Explizit, wird ggf. aus oeps_kategorie_id vorgeschlagen
# oeps_kategorie_id : UUID <<FK zu Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition>>
' # klasse_id : UUID <<FK zu Service_OeTO_Verwaltung.BewerbsKlasseDefinition>> ' Wandert in Spezifika'
' Verweise auf spartenspezifische Details '
# dressur_spezifika_id: UUID <<FK>>?
# springen_spezifika_id: UUID <<FK>>?
}
' Entspricht unserer "Abteilung"
entity Pruefung_Abteilung {
+ pruefung_abteilung_db_id : UUID <<PK>>
--
# pruefung_db_id : UUID <<FK>>
abteilungs_kennzeichen : VARCHAR ' z.B. "1", "A" -> für Anzeige "12/1"
bezeichnung_abteilung : VARCHAR?
' ... strukturierte Teilungskriterien ...
}
entity Meisterschaft_Cup_Serie {
+ mcs_id : UUID <<PK>>
--
name : VARCHAR
typ : CupSerieTypE
jahr : INTEGER
sparte : SparteE
# reglement_oeto_regel_ref_id : UUID <<FK>>?
}
entity MCS_Wertungspruefung {
# mcs_id : UUID <<PK>> <<FK>>
# pruefung_abteilung_db_id : UUID <<PK>> <<FK>>
--
faktor_fuer_wertung : DECIMAL?
}
entity Platz {
+ platz_id: UUID <<PK>>
name: VARCHAR
typ: PlatzTypE
'.. berichtFelder ..
}
entity Turnier_hat_Platz {
# turnier_id: UUID <<PK>> <<FK>>
# platz_id: UUID <<PK>> <<FK>>
verwendungszweck: VARCHAR?
}
package Sportfachliche_Details_Pruefung {
entity DressurPruefungSpezifika {
+ pruefung_db_id : UUID <<PK>> <<FK>> ' 1:1 zu Pruefung_OEPS
--
# aufgabe_stammdatum_id : UUID <<FK>> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ DRESSURAUFGABE)
# klasse_id : UUID <<FK>> ' Zu Service_OeTO_Verwaltung.BewerbsKlasseDefinition
# richtverfahren_id: UUID <<FK>> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ WERTUNGSVERFAHREN_DRESSUR)
viereck_groesse_code : PruefungsaufgabeViereckE
' geplanteRichterPositionen: List<RichterPositionE> '
}
entity SpringenPruefungSpezifika {
+ pruefung_db_id : UUID <<PK>> <<FK>> ' 1:1 zu Pruefung_OEPS
--
# klasse_id : UUID <<FK>> ' Zu Service_OeTO_Verwaltung.BewerbsKlasseDefinition (z.B. Höhe)
# richtverfahren_id: UUID <<FK>> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ WERTUNGSVERFAHREN_SPRINGEN)
art_des_stechens : ArtDesStechensE?
'.. parcours infos ..
}
' ... Weitere Sparten (VS, RVK) analog ...
}
' Beziehungen innerhalb Veranstaltungsplanung
VeranstaltungsRahmen "1" -- "0..*" Turnier_OEPS
Turnier_OEPS "1" -- "0..*" Pruefung_OEPS
Pruefung_OEPS "1" -- "1..*" Pruefung_Abteilung
Pruefung_OEPS "1" -- "0..1" Sportfachliche_Details_Pruefung.DressurPruefungSpezifika
Pruefung_OEPS "1" -- "0..1" Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika
' ... Beziehungen zu weiteren Spezifika ...
Meisterschaft_Cup_Serie "1" -- "0..*" MCS_Wertungspruefung
Pruefung_Abteilung "1" -- "0..*" MCS_Wertungspruefung
Turnier_OEPS "1" -- "0..*" Turnier_hat_Platz
Platz "1" -- "0..*" Turnier_hat_Platz
' Beziehungen zu Service_OeTO_Verwaltung
Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Aufgabe"
Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse"
Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse"
Pruefung_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "hat ÖTO Kategorie"
Turnier_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "ist kategorisiert als"
' Beziehungen zu Service_Sportler_Pferde_Verwaltung (für Funktionäre etc.)
Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_Sportler_Pferde_Verwaltung.DomPerson : "Parcoursdesigner" (als FK)
}
' --- Ende Service Veranstaltungsplanung ---
' #####################################################################
' ### Service Nennungsabwicklung (Nennungen, Startlisten, Ergebnisse) ###
' #####################################################################
package Service_Nennungsabwicklung {
' Umbenannt von Nennung_OEPS für Domänenkontext
entity Nennung {
+ nennung_id : UUID <<PK>>
--
# pruefung_abteilung_db_id : UUID <<FK>>
# teilnehmer_person_id : UUID <<FK>> ' Verweis auf DomPerson
# genanntes_pferd_id : UUID <<FK>> ' Verweis auf DomPferd
# genutzte_lizenz_id: UUID <<FK>>? ' Verweis auf DomLizenz des Teilnehmers
nennungs_zeitpunkt : TIMESTAMP
status_nennung : NennungStatusE
kopf_nr_pferd_fuer_nennung : VARCHAR(4)? ' Für Anzeige/Abgleich, Pferd ist aber per ID verknüpft
startgeld_bezahlt: BOOLEAN
pferdepass_kontrolliert: BOOLEAN
}
entity NennungsTeilnehmerSnapshot {
+ snapshot_id: UUID <<PK>>
# nennung_id: UUID <<FK>> (1:1 oder 1:0..1)
--
' Gesnapshotete Personendaten zum Zeitpunkt der Nennung '
person_oeps_satz_nr: VARCHAR(6)?
person_nachname: VARCHAR
person_vorname: VARCHAR
person_verein_name_snapshot: VARCHAR? ' Name des Vereins zum Zeitpunkt der Nennung '
relevante_lizenz_kuerzel_snapshot: VARCHAR?
' Gesnapshotete Pferdedaten zum Zeitpunkt der Nennung '
pferd_oeps_kopf_nr: VARCHAR(4)?
pferd_name_snapshot: VARCHAR
}
Nennung "1" -- "0..1" NennungsTeilnehmerSnapshot
entity Startfolge {
+ startfolge_id: UUID <<PK>>
# nennung_id: UUID <<FK>>
start_nummer_display: INTEGER ' Die sichtbare Startnummer
start_zeit_geplant: TIMESTAMP?
start_zeit_effektiv: TIMESTAMP?
status_start: VARCHAR ' z.B. GENANNT, GESTARTET, ABGEMELDET
s4_kader_flag: BOOLEAN ' Für spezielle Kaderwertung
}
' Eine Nennung führt zu max. einem Startfolgeeintrag pro (Teil-)Prüfung
Nennung "1" -- "0..1" Startfolge
' Umbenannt von Ergebnis_OEPS_Zeile
entity Ergebnis_Zeile {
+ ergebnis_zeile_id : UUID <<PK>>
--
# startfolge_id : UUID <<FK>>
platz : INTEGER?
ausschluss_disq_code : CHAR(1)?
punkte_wertnote_text_ergebnis_roh : VARCHAR(10)? ' Rohwert, wie erfasst
zeit_prozent_text_ergebnis_roh : VARCHAR(10)? ' Rohwert, wie erfasst
stechen_sr_info_text_ergebnis_roh : VARCHAR(4)?
geldpreis_betrag_ergebnis : DECIMAL?
nation_code_fuer_ergebnis : VARCHAR(3)?
platziert_flag : BOOLEAN
' Verweise auf spartenspezifische Ergebnisdetails '
# dressur_ergebnis_spezifika_id: UUID <<FK>>?
# springen_ergebnis_spezifika_id: UUID <<FK>>?
}
Startfolge "1" -- "0..1" Ergebnis_Zeile
package Sportfachliche_Details_Ergebnis {
entity DressurErgebnisSpezifika {
+ ergebnis_zeile_id : UUID <<PK>> <<FK>>
--
gesamt_wertnote : DECIMAL(5,3)?
gesamt_prozent : DECIMAL(5,2)?
' Hier könnten Details zu Richterbewertungen pro Lektion folgen (Array von JSONs oder eigene Entitäten)
}
entity SpringenErgebnisSpezifika {
+ ergebnis_zeile_id : UUID <<PK>> <<FK>>
--
stilnote_gesamt : DECIMAL(3,1)? ' Falls zutreffend
}
' Kind von SpringenErgebnisSpezifika oder direkt von Ergebnis_Zeile
entity SpringenUmlaufErgebnis {
+ umlauf_ergebnis_id : UUID <<PK>>
--
# springen_ergebnis_spezifika_id : UUID <<FK>> ' oder ergebnis_zeile_id
umlauf_oder_stechen_nr : INTEGER ' 1=Grundumlauf, 2=1.Stechen etc.
fehlerpunkte_hindernis : DECIMAL(4,2)?
fehlerpunkte_zeit : DECIMAL(4,2)?
zeit_benoetigt_sek : DECIMAL(5,2)?
stilnote_umlauf : DECIMAL(3,1)?
}
SpringenErgebnisSpezifika "1" -- "0..*" SpringenUmlaufErgebnis : hat Umläufe/Stechen
' ... Weitere Sparten (VS, RVK) analog ...
}
Ergebnis_Zeile "1" -- "0..1" Sportfachliche_Details_Ergebnis.DressurErgebnisSpezifika
Ergebnis_Zeile "1" -- "0..1" Sportfachliche_Details_Ergebnis.SpringenErgebnisSpezifika
}
' --- Ende Service Nennungsabwicklung ---
' #####################################################################
' ### Paketübergreifende Beziehungen (Auswahl) ###
' #####################################################################
' Veranstaltungsplanung <--> OeTO-Verwaltung
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Aufgabe"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse"
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse"
Service_Veranstaltungsplanung.Pruefung_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "hat ÖTO Kategorie"
Service_Veranstaltungsplanung.Turnier_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "ist kategorisiert als"
' Veranstaltungsplanung <--> Sportler & Pferde Verwaltung (für Funktionäre)
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_Sportler_Pferde_Verwaltung.DomPerson : "Parcoursdesigner"
' Nennungsabwicklung <--> Veranstaltungsplanung
Service_Nennungsabwicklung.Nennung -- Service_Veranstaltungsplanung.Pruefung_Abteilung : "für"
' Nennungsabwicklung <--> Sportler & Pferde Verwaltung
Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomPerson : "durch Reiter"
Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomPferd : "mit Pferd"
Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomLizenz : "unter Lizenz (genutzte)"
' ZNS Import Logik (konzeptionell)
' Service_ZNS_Daten.Person_ZNS_Staging -> Service_Sportler_Pferde_Verwaltung.DomPerson
' Service_ZNS_Daten.Pferd_ZNS_Staging -> Service_Sportler_Pferde_Verwaltung.DomPferd
' Service_ZNS_Daten.Verein_ZNS_Staging -> Service_Sportler_Pferde_Verwaltung.DomVerein
' Service_ZNS_Daten.Person_ZNS_Staging (lizenzinfo_raw_oeps, etc.) -> Service_Sportler_Pferde_Verwaltung.DomLizenz (über Service_OeTO_Verwaltung.LizenzTypGlobal)
@enduml
+464
View File
@@ -0,0 +1,464 @@
@startuml
!theme vibrant
title Datenbankmodell ÖTO - Service-Orientierte Modulare Struktur (Stand: 19. Mai 2025, 10:53 Uhr)
' Diagramm-Optionen
skinparam linetype ortho
hide empty members
skinparam shadowing false
skinparam defaultFontName "Segoe UI"
skinparam defaultFontSize 9 ' Etwas kleiner für mehr Übersicht
skinparam roundCorner 10
allow_mixing
skinparam packageStyle rect
' --- Enums (mit Suffix E) ---
enum SparteE {
DRESSUR, SPRINGEN, VIELSEITIGKEIT, FAHREN, VOLTIGIEREN, WESTERN,
DISTANZ, ISLAND, PFERDESPORT_SPIEL, SONDERPRUEFUNG, SONSTIGE, UNBEKANNT
}
enum RegelwerkTypE {
OETO, FEI, SONSTIGE
}
enum PruefungsaufgabeNationE {
NATIONAL_OEPS, FEI, SONSTIGE
}
enum PruefungsaufgabeRichtverfahrenModusE {
GM, GT, NICHT_SPEZIFIZIERT
}
enum PruefungsaufgabeViereckE {
VIERECK_20x40, VIERECK_20x60, ANDERE, UNBEKANNT
}
enum ArtDesStechensE {
KEIN_STECHEN, FEHLER_ZEIT_NORMAL, FEHLER_ZEIT_AM3,
SIEGERUNDE_SR1_MIT_UEBERNAHME_GP, SIEGERUNDE_SR2_OHNE_UEBERNAHME_GP,
ZWEI_STECHEN_AM4, ZWEI_STECHEN_AM6, SONDERREGELUNG_AUSSCHREIBUNG
}
enum FunktionaerRolleE {
RICHTER, RICHTER_VORSITZ, RICHTER_BEI_C, RICHTER_AM_ABREITEPLATZ,
PARCOURSBAUER, PARCOURSBAU_ASSISTENT, STEWARD, TECHNISCHER_DELEGIERTER,
TURNIERLEITER, TURNIERBEAUFTRAGTER, TIERARZT_TURNIER, HUFSCHMIED_TURNIER,
MELD रात्रि, RECHENSTELLE, SPRECHER, REITERSPRECHER, ZEITNEHMER, SCHREIBER_RICHTER,
HELFER_PARCOURS, SONSTIGE_FUNKTION
}
enum RichterPositionE {
C, E, H, B, M, VORSITZ, RICHTERTURM, SONSTIGE_POSITION
}
enum DatenQuelleE {
OEPS_ZNS, MANUELL_NATIONAL, MANUELL_INTERNATIONAL, SYSTEM_GENERIERTR
}
enum NennungStatusE {
GEMELDET, MANUELL_ERFASST, BESTAETIGT, NACHGENANNT, BEZAHLT, STARTBERECHTIGT,
ABGEMELDET_REITER, ABGEMELDET_VERANSTALTER, STORNIERT_SYSTEM
}
enum BeginnzeitTypE {
FIX_UM, ANSCHLIESSEND, CA_UM, NACH_VORHERIGEM_BEWERB_ABTEILUNG
}
enum EventStatusE {
IN_PLANUNG, GENEHMIGT_VERANSTALTER, OEFFENTLICH_SICHTBAR, AKTIV, ABGESCHLOSSEN, ABGESAGT
}
enum PlatzTypE {
AUSTRAGUNG, VORBEREITUNG, LONGIEREN, SONSTIGES
}
enum SportfachStammdatenTypE {
DRESSURAUFGABE, HINDERNISTYP_SPRINGEN, WERTUNGSVERFAHREN_SPRINGEN,
WERTUNGSVERFAHREN_DRESSUR, RVK_PUNKTETABELLE, OETO_REGEL_TEXT, SONSTIGES
}
enum CupSerieTypE {
CUP, MEISTERSCHAFT_LAND, MEISTERSCHAFT_BUND, SERIE, SONDERWERTUNG
}
' #####################################################################
' ### Service OeTO-Verwaltung (Regeln, Lizenzen, Definitionen) ###
' #####################################################################
package "Service OeTO-Verwaltung" {
entity OETORegelReferenz {
+ oeto_regel_referenz_id : UUID <<PK>>
--
paragraph_nummer : VARCHAR
kapitel_titel : VARCHAR?
kurzbeschreibung_regel : TEXT?
oeto_version_datum : DATE
url_detail : VARCHAR?
regelwerk_typ : RegelwerkTypE
}
' Definiert Funktionärsqualifikationen
entity QualifikationsTyp {
+ qual_typ_code : VARCHAR(20) <<PK>> ' z.B. "R-DPF", "PB-S", "TD-NAT"
--
bezeichnung : VARCHAR
sparte : SparteE
oeto_regel_ref_id : UUID <<FK>>?
}
QualifikationsTyp -- "?" OETORegelReferenz
' Globale Lizenz-/Startkartendefinitionen
entity LizenzTypGlobal {
+ lizenz_typ_global_code : VARCHAR(10) <<PK>> ' z.B. "R1", "RS2", "F1", "S" (Startkarte)
--
bezeichnung : VARCHAR
sparte_primaer : SparteE?
kategorie_lizenz: VARCHAR ' z.B. "Reiterlizenz", "Startkarte", "Fahrerlizenz"
stufe: VARCHAR? ' z.B. "1", "2", "S"
beschreibung_berechtigung : TEXT?
oeto_regel_ref_id : UUID <<FK>>?
}
LizenzTypGlobal -- "?" OETORegelReferenz
entity AltersklasseDefinition {
+ altersklasse_code : VARCHAR(10) <<PK>> ' z.B. "JG", "U18", "YR", "ALLG"
--
bezeichnung : VARCHAR
min_alter : INTEGER?
max_alter : INTEGER?
geschlecht_filter : CHAR(1)?
oeto_regel_ref_id : UUID <<FK>>?
}
AltersklasseDefinition -- "?" OETORegelReferenz
' Für Dressuraufgaben, Richtverfahren etc.
entity Sportfachliche_Stammdaten {
+ stammdatum_id : UUID <<PK>>
--
typ : SportfachStammdatenTypE
code : VARCHAR ' z.B. "GA02/23", "A2_OETO204"
bezeichnung : VARCHAR
beschreibung_details_json : TEXT ' Strukturierte Details
sparte_zugehoerigkeit : SparteE
nation_gueltigkeit: PruefungsaufgabeNationE?
viereck_groesse: PruefungsaufgabeViereckE?
richtverfahren_modus: PruefungsaufgabeRichtverfahrenModusE?
istAktiv: Boolean
oeto_regel_ref_id : UUID <<FK>>?
}
Sportfachliche_Stammdaten -- "?" OETORegelReferenz
}
' #####################################################################
' ### Service ZNS-Daten (Staging/Rohdaten von OEPS) ###
' #####################################################################
package "Service ZNS-Daten (Staging)" {
entity Verein_ZNS_Staging {
+ oeps_vereins_nr : VARCHAR(4) <<PK>>
name : VARCHAR(50)
import_timestamp: TIMESTAMP
}
entity Person_ZNS_Staging {
+ oeps_satz_nr_person : VARCHAR(6) <<PK>>
--
familienname : VARCHAR(50)
vorname : VARCHAR(25)
geburtsdatum_text : VARCHAR(8)
geschlecht_code : CHAR(1)
nationalitaet_code : VARCHAR(3)
bundesland_code_oeps : VARCHAR(2)?
vereinsname_oeps_roh : VARCHAR(50)?
mitglied_nr_verein : VARCHAR(8)?
fei_id_person : VARCHAR(10)?
sperrliste_flag_oeps : CHAR(1)?
kader_flag_oeps : CHAR(1)?
telefon_roh : VARCHAR(21)?
reiterlizenz_roh : VARCHAR(4)?
startkarte_roh : CHAR(1)?
fahrlizenz_roh : VARCHAR(2)?
altersklasse_jugend_code_oeps : VARCHAR(2)?
altersklasse_jungerreiter_code_oeps : CHAR(1)?
jahr_letzte_zahlung_lizenz_oeps : INTEGER?
lizenzinfo_raw_oeps : VARCHAR(10)?
qualifikationen_raw_oeps: VARCHAR(30)? ' Aus RICHT01.dat
import_timestamp: TIMESTAMP
}
entity Pferd_ZNS_Staging {
+ oeps_satz_nr_pferd : VARCHAR(10) <<PK>>
--
oeps_kopf_nr : VARCHAR(4)?
name : VARCHAR(30)
lebensnummer : VARCHAR(9)?
geburtsjahr : INTEGER?
geschlecht_code : CHAR(1)?
farbe : VARCHAR(15)?
abstammung_vater_name_roh : VARCHAR(30)?
abstammung_info_roh : VARCHAR(15)?
oeps_verein_nr_pferd_roh : VARCHAR(4)?
verantwortliche_person_name_roh: VARCHAR(75)?
fei_pass_nr : VARCHAR(10)?
letzte_zahlung_pferdegebuehr_jahr : INTEGER?
import_timestamp: TIMESTAMP
}
}
' ####################################################################################
' ### Domänen Service: Sportler & Pferde Verwaltung (aus ZNS und manuell) ###
' ####################################################################################
package "Service Sportler & Pferde Verwaltung (Domäne)" {
entity DomPerson {
+ person_id: UUID <<PK>>
--
oeps_satz_nr: VARCHAR(6) <<UQ>>?
nachname: VARCHAR
vorname: VARCHAR
geburtsdatum: DATE?
geschlecht: GeschlechtE?
nationalitaet_code: VARCHAR(3)?
fei_id: VARCHAR(10)?
telefon: VARCHAR?
email: VARCHAR?
stamm_verein_id: UUID <<FK>>?
ist_gesperrt: BOOLEAN
sperr_grund: TEXT?
daten_quelle: DatenQuelleE
ist_aktiv: BOOLEAN
}
entity DomPferd {
+ pferd_id: UUID <<PK>>
--
oeps_satz_nr_pferd: VARCHAR(10) <<UQ>>?
oeps_kopf_nr: VARCHAR(4)?
name: VARCHAR
lebensnummer: VARCHAR?
geburtsjahr: INTEGER?
geschlecht_pferd: CHAR(1)?
besitzer_person_id: UUID <<FK>>?
verantwortlicher_person_id: UUID <<FK>>?
heimat_verein_id: UUID <<FK>>?
daten_quelle: DatenQuelleE
ist_aktiv: BOOLEAN
}
entity DomVerein {
+ verein_id: UUID <<PK>>
--
oeps_vereins_nr: VARCHAR(4) <<UQ>>
name: VARCHAR
kuerzel: VARCHAR?
bundesland_code: VARCHAR(2)?
}
' Zugeordnete Lizenz/Quali einer Person
entity DomLizenz {
+ lizenz_id: UUID <<PK>>
--
person_id: UUID <<FK>>
lizenz_typ_global_code: VARCHAR(10) <<FK>> ' Verweis auf Service_OeTO_Verwaltung.LizenzTypGlobal
gueltig_bis_jahr: INTEGER?
ist_aktiv_bezahlt_oeps: BOOLEAN
}
DomPerson "1" -- "0..*" DomLizenz
DomLizenz -- "1" Service_OeTO_Verwaltung.LizenzTypGlobal
DomPerson "0..1" -- "1" DomVerein : "hat Stammverein"
DomPferd "0..1" -- "1" DomPerson : "hat Besitzer"
DomPferd "0..1" -- "1" DomPerson : "hat Verantwortlichen"
DomPferd "0..1" -- "1" DomVerein : "hat Heimatverein"
}
' #####################################################################
' ### Service Veranstaltungsplanung (Events, Turniere, Prüfungen) ###
' #####################################################################
package "Service Veranstaltungsplanung" {
entity VeranstaltungsRahmen {
+ veranst_rahmen_id : UUID <<PK>>
name : VARCHAR
datum_von_gesamt : DATE
datum_bis_gesamt : DATE
hauptveranstalter_verein_id : UUID <<FK>>? ' Verweis auf DomVerein
ort_text: VARCHAR
status: EventStatusE
}
entity Turnier_OEPS {
+ turnier_id : UUID <<PK>>
veranst_rahmen_id : UUID <<FK>>
oeps_turnier_nr : VARCHAR(5) <<UQ>>
name_zusatz : VARCHAR?
datum_von_turnier : DATE
datum_bis_turnier : DATE
oeto_kategorie_definition_ids: List<UUID> ' FKs zu Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition
regelwerk_typ : RegelwerkTypE
hauptsparte: SparteE
}
' Entspricht BewerbBasis
entity Pruefung_OEPS {
+ pruefung_db_id : UUID <<PK>>
turnier_id : UUID <<FK>>
oeps_bewerb_nr_anzeige : INTEGER ' Deine nummerInAusschreibung
name_text_uebergeordnet : VARCHAR
sparte : SparteE
oeps_kategorie_definition_id : UUID <<FK>> ' FK zu Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition
' Verweise auf spartenspezifische Details (1:1)
' dressur_spezifika_id: UUID <<FK>>?
' springen_spezifika_id: UUID <<FK>>?
}
entity Pruefung_Abteilung {
+ pruefung_abteilung_db_id : UUID <<PK>>
pruefung_db_id : UUID <<FK>> ' FK zu Pruefung_OEPS
abteilungs_kennzeichen : VARCHAR ' z.B. "1", "A"
bezeichnung_abteilung : VARCHAR?
' ... strukturierte Teilungskriterien ...
}
entity Meisterschaft_Cup_Serie {
+ mcs_id : UUID <<PK>>
name : VARCHAR
typ : CupSerieTypE
jahr : INTEGER
sparte : SparteE
}
entity MCS_Wertungspruefung {
mcs_id : UUID <<PK>> <<FK>>
pruefung_abteilung_db_id : UUID <<PK>> <<FK>>
faktor_fuer_wertung : DECIMAL?
}
entity Platz {
+ platz_id: UUID <<PK>>
name: VARCHAR
typ: PlatzTypE
'.. berichtFelder ..
}
entity Turnier_hat_Platz {
turnier_id: UUID <<PK>> <<FK>>
platz_id: UUID <<PK>> <<FK>>
verwendungszweck: VARCHAR?
}
package "Sportfachliche Details Pruefung" {
entity DressurPruefungSpezifika {
+ pruefung_db_id : UUID <<PK>> <<FK>> ' 1:1 zu Pruefung_OEPS
aufgabe_stammdatum_id : UUID <<FK>> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten
klasse_definition_id : UUID <<FK>>? ' Zu Service_OeTO_Verwaltung.BewerbsKlasseDefinition
richtverfahren_stammdatum_id: UUID <<FK>>? ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten
viereck_groesse_code : PruefungsaufgabeViereckE
' geplanteRichterPositionen: List<RichterPositionE> ' oder über BewerbFunktionaerZuordnung
}
entity SpringPruefungSpezifika {
+ pruefung_db_id : UUID <<PK>> <<FK>> ' 1:1 zu Pruefung_OEPS
klasse_definition_id : UUID <<FK>>?
richtverfahren_stammdatum_id: UUID <<FK>>?
art_des_stechens : ArtDesStechensE?
'.. parcours infos ..
}
}
VeranstaltungsRahmen "1" -- "0..*" Turnier_OEPS
Turnier_OEPS "1" -- "0..*" Pruefung_OEPS
Pruefung_OEPS "1" -- "1..*" Pruefung_Abteilung
Pruefung_OEPS "1" o-- "0..1" Sportfachliche_Details_Pruefung.DressurPruefungSpezifika
Pruefung_OEPS "1" o-- "0..1" Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika
Meisterschaft_Cup_Serie "1" -- "0..*" MCS_Wertungspruefung
Pruefung_Abteilung "1" -- "0..*" MCS_Wertungspruefung
Turnier_OEPS "1" -- "0..*" Turnier_hat_Platz
Platz "1" -- "0..*" Turnier_hat_Platz
Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten
Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten
Pruefung_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition
Turnier_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition
}
' #####################################################################
' ### Service Nennungsabwicklung (Nennungen, Startlisten, Ergebnisse) ###
' #####################################################################
package "Service Nennungsabwicklung" {
entity Nennung {
+ nennung_id : UUID <<PK>>
pruefung_abteilung_db_id : UUID <<FK>>
teilnehmer_person_id : UUID <<FK>> ' Verweis auf DomPerson
genanntes_pferd_id : UUID <<FK>> ' Verweis auf DomPferd
genutzte_lizenz_id: UUID <<FK>>? ' Verweis auf DomLizenz
nennungs_zeitpunkt : TIMESTAMP
status_nennung : NennungStatusE
kopf_nr_pferd_fuer_nennung : VARCHAR(4)?
startgeld_bezahlt: BOOLEAN
pferdepass_kontrolliert: BOOLEAN
}
entity NennungsTeilnehmerSnapshot {
+ snapshot_id: UUID <<PK>>
nennung_id: UUID <<FK>>
' Gesnapshotete Daten '
person_nachname_snapshot: VARCHAR
pferd_name_snapshot: VARCHAR
}
Nennung "1" -- "0..1" NennungsTeilnehmerSnapshot
entity Startfolge {
+ startfolge_id: UUID <<PK>>
nennung_id: UUID <<FK>>
start_nummer_display: INTEGER
start_zeit_geplant: TIMESTAMP?
s4_kader_flag: BOOLEAN
}
Nennung "1" -- "0..1" Startfolge
entity Ergebnis_Zeile {
+ ergebnis_zeile_id : UUID <<PK>>
startfolge_id : UUID <<FK>>
platz : INTEGER?
' Verweise auf spartenspezifische Ergebnisdetails '
}
Startfolge "1" -- "0..1" Ergebnis_Zeile
package "Sportfachliche Details Ergebnis" {
entity DressurErgebnisSpezifika {
+ ergebnis_zeile_id : UUID <<PK>> <<FK>>
gesamt_wertnote : DECIMAL(5,3)?
gesamt_prozent : DECIMAL(5,2)?
}
entity SpringenErgebnisSpezifika {
+ ergebnis_zeile_id : UUID <<PK>> <<FK>>
stilnote_gesamt : DECIMAL(3,1)?
}
entity SpringenUmlaufErgebnis {
+ umlauf_ergebnis_id : UUID <<PK>>
springen_ergebnis_spezifika_id : UUID <<FK>>
umlauf_oder_stechen_nr : INTEGER
fehlerpunkte_hindernis : DECIMAL(4,2)?
fehlerpunkte_zeit : DECIMAL(4,2)?
zeit_benoetigt_sek : DECIMAL(5,2)?
}
SpringenErgebnisSpezifika "1" -- "0..*" SpringenUmlaufErgebnis
}
Ergebnis_Zeile "1" -- "0..1" Sportfachliche_Details_Ergebnis.DressurErgebnisSpezifika
Ergebnis_Zeile "1" -- "0..1" Sportfachliche_Details_Ergebnis.SpringenErgebnisSpezifika
}
' #####################################################################
' ### Paketübergreifende Beziehungen (Auswahl) ###
' #####################################################################
Service_Veranstaltungsplanung.VeranstaltungsRahmen -- Service_Sportler_Pferde_Verwaltung.DomVerein : "veranstaltet von"
Service_Veranstaltungsplanung.Turnier_OEPS -- Service_Veranstaltungsplanung.VeranstaltungsRahmen
Service_Veranstaltungsplanung.Pruefung_OEPS -- Service_Veranstaltungsplanung.Turnier_OEPS
Service_Veranstaltungsplanung.Pruefung_Abteilung -- Service_Veranstaltungsplanung.Pruefung_OEPS
Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_Sportler_Pferde_Verwaltung.DomPerson : "Parcoursdesigner"
Service_Nennungsabwicklung.Nennung -- Service_Veranstaltungsplanung.Pruefung_Abteilung
Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomPerson : "Reiter"
Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomPferd : "Pferd"
Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomLizenz : "genutzte Lizenz"
' Beziehungen für Funktionärsplanung (noch konzeptionell)
entity FunktionaerEinsatzPlanung {
+ einsatz_plan_id: UUID <<PK>>
# event_id: UUID <<FK>>
# turnier_id: UUID <<FK>>?
# pruefung_abteilung_id: UUID <<FK>>?
# funktionaer_person_id: UUID <<FK zu DomPerson>>
rolle: FunktionaerRolleE
position_richter: RichterPositionE?
start_zeit: TIMESTAMP
ende_zeit: TIMESTAMP
}
Service_Veranstaltungsplanung.VeranstaltungsRahmen -- "0..*" FunktionaerEinsatzPlanung
Service_Sportler_Pferde_Verwaltung.DomPerson -- "0..*" FunktionaerEinsatzPlanung
@enduml
-371
View File
@@ -1,371 +0,0 @@
@startuml
' Diagramm-Optionen
skinparam linetype ortho
hide empty members
skinparam shadowing false
skinparam defaultFontName "Segoe UI"
skinparam defaultFontSize 11
skinparam roundCorner 10
allow_mixing
' --- Enums (Auswahl, können bei Bedarf erweitert werden) ---
enum SparteEnum {
DRESSUR
SPRINGEN
VIELSEITIGKEIT
FAHREN
VOLTIGIEREN
WESTERN
DISTANZ
ISLAND
PFERDESPORT_SPIEL
SONDERPRUEFUNG
SONSTIGE
UNBEKANNT
}
enum RegelwerkTypEnum {
OETO
FEI
SONSTIGE
}
enum PruefungsaufgabeNationEnum {
NATIONAL_OEPS
FEI
SONSTIGE
}
enum PruefungsaufgabeRichtverfahrenModusEnum {
GM
GT
NICHT_SPEZIFIZIERT
}
enum PruefungsaufgabeViereckEnum {
VIERECK_20x40
VIERECK_20x60
ANDERE
UNBEKANNT
}
enum ArtDesStechensEnum {
KEIN_STECHEN
FEHLER_ZEIT_NORMAL
FEHLER_ZEIT_AM3
SIEGERUNDE_SR1_MIT_UEBERNAHME_GP
SIEGERUNDE_SR2_OHNE_UEBERNAHME_GP
ZWEI_STECHEN_AM4
ZWEI_STECHEN_AM6
SONDERREGELUNG_AUSSCHREIBUNG
}
enum FunktionaerRolleEnum {
RICHTER
PARCOURS_BAUER
PARCOURSBAU_ASSISTENT
STEWARD
TURNIERLEITER
TURNIERBEAUFTRAGTER
TIERARZT
HUFSCHMIED
SPRECHER
REITERSPRECHER
SONSTIGE
}
enum RichterPositionEnum {
C
E
H
B
M
VORSITZ
SONSTIGE
}
enum DatenQuelleEnum {
OEPS_ZNS
MANUELL_NATIONAL
MANUELL_INTERNATIONAL
SYSTEM_GENERIERTR
}
enum NennungStatusEnum {
GEMELDET
MANUELL_ERFASST
BESTAETIGT
NACHGENANNT
BEZAHLT
STARTBERECHTIGT
ABGEMELDET_REITER
ABGEMELDET_VERANSTALTER
STORNIERT_SYSTEM
}
enum BeginnzeitTypEnum {
FIX_UM
ANSCHLIESSEND
CA_UM
NACH_VORHERIGEM_BEWERB_ABTEILUNG
}
enum EventStatusEnum {
IN_PLANUNG
GENEHMIGT_VERANSTALTER
OEFFENTLICH_SICHTBAR
AKTIV
ABGESCHLOSSEN
ABGESAGT
}
enum PlatzTypEnum {
AUSTRAGUNG
VORBEREITUNG
LONGIEREN
SONSTIGES
} ' Hinzugefügt für die Platz-Entität
' --- Entitäten für verwaltbare Auswahllisten (Lookup Tables / Master Data) ---
entity "Pruefungsaufgabe" {
+ id: UUID (PK)
--
kuerzel: String
nameLang: String
sparte: SparteEnum
nation: PruefungsaufgabeNationEnum
richtverfahrenModusDefault: PruefungsaufgabeRichtverfahrenModusEnum?
viereckGroesseDefault: PruefungsaufgabeViereckEnum?
istAktiv: Boolean
}
entity "Richtverfahren" {
+ id: UUID (PK)
--
code: String
bezeichnung: String
sparte: SparteEnum
oetoParagraphVerweis: String?
istAktiv: Boolean
}
entity "BewerbsKlasseDefinition" as BewerbsKlasseDef {
+ id: UUID (PK)
--
kuerzel: String
bezeichnung: String
sparte: SparteEnum
istAktiv: Boolean
}
entity "BewerbsKategorieOetoDefinition" as BewerbsKatOetoDef {
+ id: UUID (PK)
--
kuerzel: String
bezeichnung: String
sparte: SparteEnum
istAktiv: Boolean
}
' --- Kern-Entitäten ---
entity "Event" {
+ id: UUID (PK)
--
bezeichnung: String
datumVon: LocalDate
datumBis: LocalDate
veranstalterVereinId: UUID (FK)?
}
entity "Turnier" {
+ id: UUID (PK)
--
eventId: UUID (FK)
oepsTurnierNr: String
titel: String
sparte: SparteEnum
oetoKategorieIds: List<UUID> ' FKs zu BewerbsKatOetoDef
regelwerkTyp: RegelwerkTypEnum
datumVon: LocalDate
datumBis: LocalDate
}
entity "BewerbBasis" {
+ id: UUID (PK)
--
turnierId: UUID (FK)
nummerInAusschreibung: String
uebergeordneteBezeichnung: String
sparte: SparteEnum
klasseId: UUID (FK zu BewerbsKlasseDef.id)?
oetoKategorieId: UUID (FK zu BewerbsKatOetoDef.id)
dressurDetailsId: UUID (FK, optional)
springDetailsId: UUID (FK, optional)
}
entity "DressurBewerbDetails" {
+ bewerbBasisId: UUID (PK, FK)
--
pruefungsaufgabeId: UUID (FK)
richtverfahrenId: UUID (FK)
viereckGroesse: PruefungsaufgabeViereckEnum
}
entity "SpringBewerbDetails" {
+ bewerbBasisId: UUID (PK, FK)
--
richtverfahrenId: UUID (FK)
artDesStechens: ArtDesStechensEnum?
parcoursskizzeUrl: String?
}
entity "Abteilung" {
+ id: UUID (PK)
--
bewerbBasisId: UUID (FK)
abteilungsKennzeichen: String
bezeichnungOeffentlich: String?
}
entity "Person" {
+ id: UUID (PK)
--
nachname: String
vorname: String
oepsSatzNr: String?
datenQuelle: DatenQuelleEnum
stammVereinId: UUID (FK)?
}
entity "Pferd" {
+ id: UUID (PK)
--
name: String
oepsKopfNr: String?
datenQuelle: DatenQuelleEnum
besitzerPersonId: UUID (FK)?
}
entity "Verein" {
+ id: UUID (PK)
--
oepsVereinsNr: String
name: String
}
entity "Lizenz" {
+ id: UUID (PK)
--
personId: UUID (FK)
lizenzTypOepsCode: String
bezeichnung: String
}
entity "Nennung" {
+ id: UUID (PK)
--
turnierId: UUID (FK)
abteilungId: UUID (FK)
personId: UUID (FK)
pferdId: UUID (FK)
status: NennungStatusEnum
}
entity "Startfolge" {
+ id: UUID (PK)
--
nennungId: UUID (FK)
abteilungId: UUID (FK)
startNummer: Int
startZeitGeplant: LocalDateTime?
pferdepassKontrolliert: Boolean
}
entity "Ergebnis" {
+ id: UUID (PK)
--
startfolgeId: UUID (FK)
platzierung: Int?
}
entity "Platz" {
+ id: UUID (PK)
--
name: String
typ: PlatzTypEnum
}
entity "PlatzZuordnungTurnier" as PlatzZuordnung {
turnierId: UUID (FK)
platzId: UUID (FK)
(PK: turnierId, platzId)
}
entity "Artikel" {
+ id: UUID (PK)
--
bezeichnung: String
standardPreis: BigDecimal?
}
entity "TurnierArtikel" {
+ id: UUID (PK)
--
turnierId: UUID (FK)
artikelId: UUID (FK)
preis: BigDecimal
}
entity "FunktionaerEinsatz" {
+ id: UUID (PK)
--
personId: UUID (FK)
eventId: UUID (FK)
turnierId: UUID (FK)?
abteilungId: UUID (FK)?
rolle: FunktionaerRolleEnum
positionRichter: RichterPositionEnum?
geplanterStart: LocalDateTime
geplantesEnde: LocalDateTime
}
' --- Beziehungen ---
Event "1" -- "0..*" Turnier
Turnier "1" -- "0..*" BewerbBasis
BewerbBasis "1" -- "0..1" DressurDetails
BewerbBasis "1" -- "0..1" SpringDetails
BewerbBasis "1" -- "1..*" Abteilung
Turnier "1" -- "0..*" Nennung
Abteilung "1" -- "0..*" Nennung
Person "1" -- "0..*" Nennung
Pferd "1" -- "0..*" Nennung
Nennung "1" -- "0..1" Startfolge
Startfolge "1" -- "0..1" Ergebnis
Person "1" -- "0..*" Lizenz
Verein "1" -- "0..*" Person : Stammverein
Person "1" -- "0..*" Pferd : Besitzer
Turnier "1" -- "0..*" TurnierArtikel
Artikel "1" -- "0..*" TurnierArtikel
Turnier "1" -- "0..*" PlatzZuordnung
Platz "1" -- "0..*" PlatzZuordnung
Event "1" -- "0..*" FunktionaerEinsatz
Person "1" -- "0..*" FunktionaerEinsatz
Turnier -- FunktionaerEinsatz
Abteilung -- FunktionaerEinsatz
DressurDetails "1" -- "1" Pruefungsaufgabe
DressurDetails "1" -- "1" Richtverfahren
SpringDetails "1" -- "1" Richtverfahren
BewerbBasis "1" -- "1" BewerbsKlasseDef
BewerbBasis "1" -- "1" BewerbsKatOetoDef
Turnier "1" -- "0..*" BewerbsKatOetoDef : "verwendet ÖTO Kategorien"
@enduml
Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

-68
View File
@@ -1,68 +0,0 @@
@startuml
enum KurzbezeichnungTurnierBewerbE {
CDN ... Dressur
CSN ... Springen
CCN ... Vielseitigkeit
CAN ... Fahren
CVN ... Voltigieren
CEN ... Distanzreiten
CHNI ... Turniere für Islandpferde
CHNV ... Reitervierkampf
TREC ... Orientierungsreiten
CPEDN ... Pferdesportler mit Behinderung Dressur
CPEAN ... Pferdesportler mit Behinderung Fahren
CMGN ... Mounted Games
CWEN ... Working Equitation
}
note top of KurzbezeichnungTurnierBewerbE
Die Gliederung nach Sparten und die Kurzbezeichnung von Tur-
nieren und Bewerben, die nach der ÖTO ausgetragen werden,
erfolgt in Übereinstimmung mit der FEI. Die angegebenen
Bezeichnungen gelten für nationale Turniere;
end note
enum TeilnehmerkreisesE {
J ... JG, JN und/oder YR
P ... Ponys
N ... Noriker
H ... Haflinger
L ... Ländliche Reiter auf Warmblutpferden
A ... Vollblutaraberbewerbe
K ... Kaltblut
D ... Damensattel
}
note top of TeilnehmerkreisesE
Die Einschränkungen des Teilnehmerkreises für Turniere oder
einzelne Bewerbe auf die folgenden Reiter oder Pferde durch
die Ausschreibung sind in der Bezeichnung durch Anhängen
des angegebenen Buchstaben zu berücksichtigen:
end note
enum TurnierGliederungE {
A* ... -A*
A ... -A
B* ... -B*
B ... -B
C ... -C
C-NEU ... -C-NEU
}
note top of TurnierGliederungE
Zur Gliederung nach den Anforderungen werden nationale Tur-
niere in die Kategorien A*, A, B*, B, C und C-NEU eingeteilt. Der
Kurzbezeichnung gemäß Abs. 2 und 3 ist zur Kennzeichnung
entweder -A*, -A, -B*, -B, -C oder -C-NEU anzuhängen.
end note
entity "Ergebnis" {
+ id: UUID (PK)
--
startfolgeId: UUID (FK)
platzierung: Int?
}
@enduml