@startuml title "Detailliertes Datenmodell: Veranstaltungs_Context" !theme vibrant ' Externe Referenzen werden der Übersichtlichkeit halber als vereinfachte Entitäten dargestellt. package "Externe Referenzen (Andere Kontexte)" { class Verein_ZNS class Person_ZNS class OETORegelReferenz class Sportfachliche_Stammdaten } package "Veranstaltungsplanung" as VeranstaltungsContext { ' #################### Aggregate Root: VeranstaltungsRahmen #################### class VeranstaltungsRahmen <<(A,orange) Aggregate Root>> { + veranstaltungsRahmenId : UUID -- + name : string ' z.B. "Reitertage Musterhof Frühling 2025" + zeitraum : DatumsbereichVO + austragungsort : AdresseVO ' FK zu Service_ZNS_Daten.Verein_ZNS # hauptveranstalter_verein_nr : VARCHAR(4) <> } ' #################### Aggregate Root: Turnier_OEPS #################### class Turnier_OEPS <<(A,orange) Aggregate Root>> { ' A-Satz, Stelle 2-6 + oepsTurnierNr : VARCHAR(5) <> -- ' FK zu VeranstaltungsRahmen # veranstaltungsRahmenId : UUID <> ' A-Satz, Stelle 7-31 + name_ort : VARCHAR(25) ' A-Satz, Stelle 32-47 + zeitraum : DatumsbereichVO ' A-Satz, Stelle 48-72 + kategorie_text_turnier : VARCHAR(25) + turnierart_sparte : string ' z.B. CDN-A, CSN-B* ' A-Satz (Ergebnis), Stelle 73-75 + protokoll_version_oeps : VARCHAR(3) ' A-Satz (Ergebnis), Stelle 76-95 + meldestelle_software_version : VARCHAR(20) ' A-Satz (Ergebnis), Stelle 96-103 + link_id_turnier : VARCHAR(8) } ' #################### Aggregate Root: Meisterschaft_Cup_Serie #################### class Meisterschaft_Cup_Serie <<(A,orange) Aggregate Root>> { + mcsId : UUID <> -- + name : string ' z.B. "XYZ Sommercup 2025" + typ : string ' Meisterschaft, Cup, Serie + jahr : INTEGER + sparte : string # oetoRegelRefId : UUID <> } ' #################### Entitäten innerhalb des Turnier_OEPS Aggregats #################### ' Ein Bewerb innerhalb eines Turniers entity Pruefung_OEPS { + pruefungId : UUID <> -- ' B-Satz, Stelle 61-63 (3-stellig) + oepsBewerbNr : VARCHAR(3) ' B-Satz, Stelle 5-39 + name_text_pruefung : VARCHAR(35) ' B-Satz, Stelle 40-43 + klasse_text : VARCHAR(4) ' B-Satz, Stelle 44-51 + kategorie_text_pruefung : VARCHAR(8) ' B-Satz, Stelle 52-59 + datumPruefung : Date ' Zur Steuerung der spartenspezifischen Logik + artDisziplin : DisziplinVO ' B-Satz (Ergebnis), Stelle 64-71 + link_id_pruefung : VARCHAR(8) } ' Eine Abteilung eines Bewerbs entity Pruefung_Abteilung { + abteilungId : UUID <> -- ' B-Satz, Stelle 4 + oepsAbteilungNr : INTEGER + bezeichnung : string ' z.B. "Abt. 1: Junioren" ' B-Satz (Ergebnis), Stelle 52-54 + anzahl_starter_gemeldet : INTEGER ' B-Satz (Ergebnis), Stelle 55-60 (ohne Komma) + geldpreis_summe : DECIMAL } ' Entität zur Speicherung der konkreten Anforderungen für eine Prüfung/Abteilung entity PruefungsAnforderungen { + anforderungenId: UUID <> -- ' Kann sich auf eine Pruefung_OEPS oder eine Pruefung_Abteilung beziehen # bezugs_id: UUID <> ' FK zu Service_OeTO_Verwaltung.OETORegelReferenz # oeto_regel_ref_id: UUID <> } entity Anforderung_Lizenz { # anforderungenId: UUID <> # lizenzTypCode: VARCHAR(4) <> } entity Anforderung_Altersklasse { # anforderungenId: UUID <> # altersklasseCode: VARCHAR(4) <> } ' #################### Spartenspezifische Erweiterungen #################### package "Sportfachliche Details für Prüfungen" { ' Alle Spezifika sind 1:1 mit Pruefung_OEPS verbunden entity DressurPruefungSpezifika { # pruefungId : UUID <> <> -- ' FK zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten # aufgabe_stammdatum_id : UUID <> + platz_groesse_code : string ' z.B. 20x40, 20x60 } entity SpringenPruefungSpezifika { # pruefungId : UUID <> <> -- ' FK zu Service_ZNS_Daten.Person_ZNS # parcours_designer_person_id : VARCHAR(6) <> + anzahl_hindernisse : INTEGER + hoehe_max_cm : INTEGER + erlaubte_zeit_sek : INTEGER ' FK zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten # wertungs_verfahren_stammdatum_id : UUID <> + anzahl_umlaeufe : INTEGER + anzahl_stechen : INTEGER } ' (Vielseitigkeit und RVK Spezifika hier analog) } ' #################### Value Objects #################### class DatumsbereichVO <> { +von: Date, +bis: Date } class AdresseVO <> { +strasse: string, +plz: string, +ort: string } class DisziplinVO <> { +name: string } ' #################### Beziehungen #################### ' Aggregat-Hierarchie VeranstaltungsRahmen "1" -- "1..*" Turnier_OEPS : "beinhaltet" Turnier_OEPS "1" *-- "1..*" Pruefung_OEPS : "besteht aus" Pruefung_OEPS "1" *-- "1..*" Pruefung_Abteilung : "unterteilt in" ' Anforderungen zuordnen Pruefung_OEPS "1" -- "1" PruefungsAnforderungen : "hat" Pruefung_Abteilung "1" -- "0..1" PruefungsAnforderungen : "hat spezielle" PruefungsAnforderungen "1" -- "*" Anforderung_Lizenz PruefungsAnforderungen "1" -- "*" Anforderung_Altersklasse ' Sparten-Spezifika zuordnen (Vererbung/Erweiterung) Pruefung_OEPS <|-- DressurPruefungSpezifika Pruefung_OEPS <|-- SpringenPruefungSpezifika ' Meisterschaft/Cup Beziehungen class MCS_Wertungspruefung (Meisterschaft_Cup_Serie, MCS_Wertungspruefung) .up. Pruefung_Abteilung } ' Beziehungen zu externen Kontexten VeranstaltungsContext.VeranstaltungsRahmen -- Verein_ZNS : "veranstaltet von" VeranstaltungsContext.SpringenPruefungSpezifika -- Person_ZNS : "Parcoursdesigner" ' Weitere Beziehungen zu OETORegelReferenz, Stammdaten etc. @enduml