372 lines
6.4 KiB
Plaintext
372 lines
6.4 KiB
Plaintext
@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
|