@startuml
title "Datenmodell: Lizenzen_und_Qualifikationen_Context"

!theme vibrant

package "Lizenzen & Qualifikationen" {

  ' Das Aggregate Root: Der Lizenznehmer ist die zentrale Entität,
  ' die Konsistenz für ihre Lizenzen und Qualifikationen sicherstellt.
  class Lizenznehmer <<(A,violet) Aggregate Root>> {
    ' Referenz zum Personen-Context, keine vollständige Person
    + oepsSatzNrPerson : VARCHAR(6)
    --
    name : string
    vorname : string
    ' Methode zur Überprüfung der Startberechtigung
    + hatStartberechtigungFuer(anforderungen) : boolean
  }

  ' Entität innerhalb des Aggregates
  class Lizenz {
    + gueltigBis : Date
    + ausgestelltAm : Date
    + bezahltImJahr : INTEGER
  }

  ' Entität innerhalb des Aggregates
  class Qualifikation {
    + erworbenAm : Date
    + bemerkung : string
  }

  ' Value Object: Beschreibt einen Lizenztyp, hat keine eigene Identität
  class LizenzTyp <<VO>> {
    + code : string
    + bezeichnung : string
    + sparte: string
  }

  ' Value Object: Beschreibt einen Qualifikationstyp
  class QualifikationsTyp <<VO>> {
    + code : string
    + bezeichnung : string
    + sparte : string
  }

  ' Beziehungen innerhalb des Aggregates
  Lizenznehmer "1" *-- "0..*" Lizenz : "besitzt"
  Lizenznehmer "1" *-- "0..*" Qualifikation : "hat"

  ' Beziehungen zu Value Objects
  Lizenz "1" -- "1" LizenzTyp
  Qualifikation "1" -- "1" QualifikationsTyp
}

note right of Lizenznehmer
  **Aggregate Root: Lizenznehmer**
  Alle Änderungen an Lizenzen oder
  Qualifikationen einer Person
  sollten über das Lizenznehmer-Objekt
  laufen, um die Geschäftsregeln
  (z.B. "Darf diese Lizenz haben?")
  zu wahren.
end note

@enduml
