(vision) SCS/DDD

This commit is contained in:
2025-07-01 23:53:29 +02:00
parent 6e50b9d32d
commit f4b11b220d
14 changed files with 1381 additions and 0 deletions
@@ -0,0 +1,132 @@
@startuml
title "Detailliertes Datenmodell: Nennungs_Context"
!theme vibrant
' Externe Referenzen werden der Übersichtlichkeit halber als vereinfachte Entitäten dargestellt.
package "Externe Referenzen (Andere Kontexte)" {
class Veranstaltungs_Context_API
class Personen_Context_API
class Lizenzen_Context_API
}
package "Nennungsabwicklung" as NennungsContext {
' #################### Aggregate Root: Nennung ####################
class Nennung <<(A,blue) Aggregate Root>> {
+ nennungId : UUID <<PK>>
--
' -- Snapshots von Daten aus anderen Kontexten --
' Daten zur Prüfung/Abteilung zum Zeitpunkt der Nennung
+ pruefung : PruefungsReferenzVO
' Daten zum Reiter zum Zeitpunkt der Nennung
+ reiter : ReiterReferenzVO
' Daten zum Pferd zum Zeitpunkt der Nennung
+ pferd : PferdeReferenzVO
' Optionaler Ersatzreiter gem. KKARTEI-Satz
+ ersatzreiter : ReiterReferenzVO
--
' -- Nennungsspezifische Attribute --
+ nennungsZeitpunkt : timestamp
+ status : NennungsStatusVO
' Kopfnummer gem. KKARTEI-Satz
+ zugewieseneKopfnummer : VARCHAR(4)
' Nenn- und Startgeld
+ nenngebuehr : GeldbetragVO
' Zahlungsstatus der Nenngebühr
+ bezahlStatus : BezahlStatusVO
' Betrag, der lt. Nennliste eingezahlt wurde
' KKARTEI, Stelle 161-165
+ bezahltBetragKontrolle : GeldbetragVO
' Betrag, der mit dem Veranstalter verrechnet wird
' KKARTEI, Stelle 118-122
+ accontoBetrag : GeldbetragVO
' Box bestellt? Gem. KKARTEI-Satz
+ istStallReserviert : boolean
' Grund, falls die Nennung abgelehnt wurde
+ ablehnungsGrund : string
}
' #################### Value Objects (VOs) für Snapshots und Beschreibungen ####################
' Snapshot der wichtigsten Prüfungsdaten aus dem Veranstaltungs_Context.
class PruefungsReferenzVO <<VO>> {
' Referenz zur originalen Abteilung
+ pruefungAbteilungDbId : UUID
' Relevante Daten zum Zeitpunkt der Nennung
+ turnierName : string
+ bewerbBezeichnung : string
+ abteilungBezeichnung : string
' Anforderungsprofil, das zum Zeitpunkt der Nennung galt
+ anforderungsProfil : AnforderungsProfilVO
}
' Snapshot der wichtigsten Reiterdaten aus dem Personen_Context.
class ReiterReferenzVO <<VO>> {
' Referenz zur originalen Person
+ oepsSatzNrPerson : VARCHAR(6)
' Relevante Daten zum Zeitpunkt der Nennung
+ name : string
+ vereinsName : string
' Snapshot der Lizenzen zur Validierung
+ lizenzSnapshot : List<string>
}
' Snapshot der wichtigsten Pferdedaten aus dem Personen_Context.
class PferdeReferenzVO <<VO>> {
' Referenz zum originalen Pferd
+ oepsSatzNrPferd : VARCHAR(10)
' Relevante Daten zum Zeitpunkt der Nennung
+ name : string
}
' Kapselt die Anforderungen, die zum Zeitpunkt der Nennung gültig waren.
class AnforderungsProfilVO <<VO>> {
+ erlaubteAltersklassen : List<string>
+ erforderlicheLizenzen : List<string>
}
class GeldbetragVO <<VO>> {
+ wert : decimal
+ waehrung : string
}
' Enum für den Lebenszyklus einer Nennung.
enum NennungsStatusVO {
EINGEGANGEN
IN_PRUEFUNG
STARTBERECHTIGT_BESTAETIGT
ABGELEHNT
ZURUECKGEZOGEN
}
' Enum für den Zahlungsstatus.
enum BezahlStatusVO {
OFFEN
BEZAHLT
}
' #################### Beziehungen ####################
' Die Nennung ist das einzige Aggregat und enthält ihre beschreibenden VOs (Komposition).
Nennung "1" o-- "1" PruefungsReferenzVO
Nennung "1" o-- "1" ReiterReferenzVO
Nennung "1" o-- "1" PferdeReferenzVO
Nennung "1" o-- "0..1" ReiterReferenzVO : "Ersatzreiter"
Nennung "1" o-- "1" GeldbetragVO : "Nenngebühr"
Nennung "1" -- "1" NennungsStatusVO
Nennung "1" -- "1" BezahlStatusVO
}
' Beziehungen zu externen Kontexten (dargestellt als API-Aufrufe)
Nennung ..> Veranstaltungs_Context_API : "holt Prüfungsdetails"
Nennung ..> Personen_Context_API : "holt Reiter-/Pferdedetails"
Nennung ..> Lizenzen_Context_API : "prüft Startberechtigung"
note right of Nennung
**Aggregate Root: Nennung**
* **Verantwortung:** Eine Nennung ist eine unteilbare, transaktionale Einheit. Sie repräsentiert den "Vertrag" zwischen Reiter und Veranstalter für die Teilnahme an einer Prüfung.
* **Datenherkunft:** Viele Attribute sind direkt auf den `KKARTEI`-Satz im OEPS Pflichtenheft zurückzuführen, z.B. `ERSATZREITER` , `ACCONTO` , `STALL` und `BEZAHLT`.
* **Validierungslogik:** Bei der Erstellung oder Prüfung einer Nennung ruft das Aggregat andere Kontexte auf, um die aktuellen Daten zu verifizieren (z.B. "Ist die Lizenz des Reiters noch gültig?"). Die Entscheidung ("Akzeptiert" / "Abgelehnt") wird aber hier im `Nennungs_Context` getroffen und gespeichert.
end note
@enduml