@startuml
title "Datenmodell: Lizenzen_und_Qualifikationen_Context"

!theme vibrant

' Der Bounded Context wird als Paket dargestellt.
package "Lizenzen & Qualifikationen" as LizenzContext {

    ' Das Aggregate Root: Der Lizenznehmer ist die zentrale Entität.
    class Lizenznehmer <<(A,violet) Aggregate Root>> {
        ' Referenz zum Personen-Context, KEINE vollständige Kopie der Person.
        + oepsSatzNrPerson : VARCHAR(6)
        --
        ' Minimal notwendige Daten zur Identifikation im Fachkontext.
        name : string
        vorname : string
        --
        ' Geschäftslogik wird hier gekapselt.
        + hatLizenz(lizenzTypCode) : boolean
        + hatQualifikation(qualTypCode) : boolean
        + fuegeLizenzHinzu(lizenzDetails)
        + fuegeQualifikationHinzu(qualDetails)
    }

    ' Eine Entität innerhalb des Lizenznehmer-Aggregates.
    entity Lizenz {
        + lizenzId : UUID
        --
        ' Bezieht sich auf den Typ der Lizenz.
        # lizenzTypCode : VARCHAR(4) <<FK>>
        ' Daten aus LIZENZ01.dat.
        + gueltigBis : Date
        + ausgestelltAm : Date
        + bezahltImJahr : INTEGER
    }

    ' Eine weitere Entität innerhalb des Lizenznehmer-Aggregates.
    entity Qualifikation {
        + qualifikationId : UUID
        --
        ' Bezieht sich auf den Typ der Qualifikation.
        # qualifikationsTypCode : VARCHAR <<FK>>
        ' Daten aus RICHT01.dat (indirekt).
        + erworbenAm : Date
        + gueltigBis : Date
    }

    ' Die Definitionen der Lizenz- und Qualifikationstypen
    ' kommen aus einem anderen Bounded Context (OeTO-Verwaltung).
    ' Hier werden sie als Referenz oder Value Object verwendet.
    ' Wir stellen sie hier vereinfacht dar, um die Beziehung zu zeigen.
    class LizenzTyp_Referenz <<VO>> {
        + code : string
        + bezeichnung : string
        + sparte : string
    }

    class QualifikationsTyp_Referenz <<VO>> {
        + code : string
        + bezeichnung : string
        + sparte : string
    }

    ' -- Beziehungen --
    ' Der Lizenznehmer besitzt seine Lizenzen und Qualifikationen (Komposition).
    Lizenznehmer "1" *-- "0..*" Lizenz
    Lizenznehmer "1" *-- "0..*" Qualifikation

    ' Jede Lizenz und Qualifikation ist von einem bestimmten Typ.
    ' Dies ist eine Assoziation, da die Typen außerhalb des Aggregates existieren.
    Lizenz ..> LizenzTyp_Referenz : "ist vom Typ"
    Qualifikation ..> QualifikationsTyp_Referenz : "ist vom Typ"
}

note right of Lizenznehmer
  **Aggregate Root: Lizenznehmer**
  * **Verantwortung:** Stellt sicher, dass ein Lizenznehmer nur gültige und konsistente Lizenzen/Qualifikationen besitzen kann.
  * **Referenz:** Die `oepsSatzNrPerson` ist der Schlüssel zur Verknüpfung mit dem `Personen_und_Vereine_Context`.
  * **Isolation:** Dieser Context speichert bewusst *keine* Adress- oder Kontaktdaten. Wenn diese benötigt werden, müssen sie vom `Personen_und_Vereine_Context` angefragt werden.
end note

note top of LizenzTyp_Referenz
  **Referenzen zu anderen Contexts**
  `LizenzTyp_Referenz` und `QualifikationsTyp_Referenz`
  sind keine Entitäten, die *hier* verwaltet werden.
  Sie repräsentieren die Daten, die aus dem
  `Service_OeTO_Verwaltung` stammen und hier
  zur Beschreibung von Lizenzen und Qualifikationen
  genutzt werden.
end note


@enduml
