@startuml !theme vibrant title Datenbankmodell ÖTO - Service-Orientierte Modulare Struktur (inkl. aller Sparten) ' Ankerpunkt: Montag 19. Mai, 10:53 Uhr (basierend auf Nutzer-Input und vorherigen Diskussionen) ' Diagramm-Optionen skinparam linetype ortho hide empty members skinparam shadowing false skinparam defaultFontName "Segoe UI" skinparam defaultFontSize 10 skinparam roundCorner 10 allow_mixing ' --- Enums (mit Suffix E) --- enum SparteE { DRESSUR, SPRINGEN, VIELSEITIGKEIT, FAHREN, VOLTIGIEREN, WESTERN, DISTANZ, ISLAND, PFERDESPORT_SPIEL, SONDERPRUEFUNG, SONSTIGE, UNBEKANNT } enum RegelwerkTypE { OETO, FEI, SONSTIGE } enum PruefungsaufgabeNationE { NATIONAL_OEPS, FEI, SONSTIGE } enum PruefungsaufgabeRichtverfahrenModusE { GM, GT, NICHT_SPEZIFIZIERT } enum PruefungsaufgabeViereckE { VIERECK_20x40, VIERECK_20x60, ANDERE, UNBEKANNT } enum ArtDesStechensE { 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 FunktionaerRolleE { RICHTER, RICHTER_VORSITZ, RICHTER_BEI_C, RICHTER_AM_ABREITEPLATZ, PARCOURSBAUER, PARCOURSBAU_ASSISTENT, STEWARD, TECHNISCHER_DELEGIERTER, TURNIERLEITER, TURNIERBEAUFTRAGTER, TIERARZT_TURNIER, HUFSCHMIED_TURNIER, MELD, RECHENSTELLE, SPRECHER, REITERSPRECHER, ZEITNEHMER, SCHREIBER_RICHTER, HELFER_PARCOURS, SONSTIGE_FUNKTION } enum RichterPositionE { C, E, H, B, M, VORSITZ, RICHTERTURM, SONSTIGE_POSITION } enum DatenQuelleE { OEPS_ZNS, MANUELL_NATIONAL, MANUELL_INTERNATIONAL, SYSTEM_GENERIERTR } enum NennungStatusE { GEMELDET, MANUELL_ERFASST, BESTAETIGT, NACHGENANNT, BEZAHLT, STARTBERECHTIGT, ABGEMELDET_REITER, ABGEMELDET_VERANSTALTER, STORNIERT_SYSTEM } enum BeginnzeitTypE { FIX_UM, ANSCHLIESSEND, CA_UM, NACH_VORHERIGEM_BEWERB_ABTEILUNG } enum EventStatusE { IN_PLANUNG, GENEHMIGT_VERANSTALTER, OEFFENTLICH_SICHTBAR, AKTIV, ABGESCHLOSSEN, ABGESAGT } enum PlatzTypE { AUSTRAGUNG, VORBEREITUNG, LONGIEREN, SONSTIGES } enum SportfachStammdatenTypE { DRESSURAUFGABE, HINDERNISTYP_SPRINGEN, WERTUNGSVERFAHREN, RVK_PUNKTETABELLE, OETO_REGEL_TEXT, SONSTIGES } enum CupSerieTypE { CUP, MEISTERSCHAFT_LAND, MEISTERSCHAFT_BUND, SERIE, SONDERWERTUNG } ' ##################################################################### ' ### Service OeTO-Verwaltung (Regeln, Lizenzen, Definitionen) ### ' ##################################################################### package Service_OeTO_Verwaltung { entity OETORegelReferenz { + oeto_regel_referenz_id : UUID <> -- paragraph_nummer : VARCHAR kapitel_titel : VARCHAR? kurzbeschreibung_regel : TEXT? oeto_version_datum : DATE url_detail : VARCHAR? regelwerk_typ : RegelwerkTypE ' ÖTO oder FEI } ' Definiert Funktionärsqualifikationen entity QualifikationsTyp { + qual_typ_code : VARCHAR <> ' z.B. "R-DPF", "PB-S", "TD-NAT" -- bezeichnung : VARCHAR sparte : SparteE # oeto_regel_ref_id : UUID <>? } QualifikationsTyp -- "?" OETORegelReferenz : unterliegt ' Deine LizenzTyp_OEPS, umbenannt für globale Lizenzdefinitionen entity LizenzTypGlobal { + lizenz_typ_global_code : VARCHAR(10) <> ' z.B. "R1", "RS2", "F1", "S (Startkarte)" -- bezeichnung : VARCHAR sparte_primaer : SparteE? ' Hauptsparte dieser Lizenz kategorie_lizenz_text : VARCHAR ' z.B. "Reiterlizenz", "Startkarte", "Fahrerlizenz", "Funktionärsqualifikation" stufe : VARCHAR? ' z.B. "1", "2", "S" beschreibung_berechtigung : TEXT? # oeto_regel_ref_id : UUID <>? } LizenzTypGlobal -- "?" OETORegelReferenz : basiert auf entity AltersklasseDefinition { + altersklasse_code : VARCHAR(10) <> ' z.B. "JG", "U18", "YR", "ALLG" -- bezeichnung : VARCHAR min_alter : INTEGER? max_alter : INTEGER? geschlecht_filter : CHAR(1)? ' W, M, oder null für alle # oeto_regel_ref_id : UUID <>? } AltersklasseDefinition -- "?" OETORegelReferenz : definiert durch ' Für Dressuraufgaben, Richtverfahren etc. entity Sportfachliche_Stammdaten { + stammdatum_id : UUID <> -- typ : SportfachStammdatenTypE code : VARCHAR ' z.B. "GA02/23" (Dressuraufgabe), "A2_OETO204" (Richtverfahren) bezeichnung : VARCHAR beschreibung_details_json : TEXT ' Strukturierte Details als JSON (z.B. Lektionen, Fehlerpunkte) sparte_zugehoerigkeit : SparteE nation_gueltigkeit: PruefungsaufgabeNationE? ' NATIONAL_OEPS, FEI viereck_groesse: PruefungsaufgabeViereckE? ' Für Dressuraufgaben richtverfahren_modus: PruefungsaufgabeRichtverfahrenModusE? ' GM/GT für Dressuraufgaben istAktiv: Boolean # oeto_regel_ref_id : UUID <>? } Sportfachliche_Stammdaten -- "?" OETORegelReferenz : referenziert } ' --- Ende Service OeTO-Verwaltung --- ' ##################################################################### ' ### Service ZNS-Daten (Staging/Rohdaten von OEPS) ### ' ##################################################################### package Service_ZNS_Daten { entity Verein_ZNS_Staging { + oeps_vereins_nr : VARCHAR(4) <> ' Aus VEREIN01.dat -- name : VARCHAR(50) import_timestamp: TIMESTAMP } entity Person_ZNS_Staging { + oeps_satz_nr_person : VARCHAR(6) <> ' Aus LIZENZ01.dat / RICHT01.dat -- familienname : VARCHAR(50) vorname : VARCHAR(25) geburtsdatum_text : VARCHAR(8) ' JJJJMMTT geschlecht_code : CHAR(1) nationalitaet_code : VARCHAR(3) bundesland_code_oeps : VARCHAR(2)? vereinsname_oeps_roh : VARCHAR(50)? mitglied_nr_verein : VARCHAR(8)? fei_id_person : VARCHAR(10)? sperrliste_flag_oeps : CHAR(1)? ' "S" oder BLANK kader_flag_oeps : CHAR(1)? telefon_roh : VARCHAR(21)? reiterlizenz_roh : VARCHAR(4)? startkarte_roh : CHAR(1)? fahrlizenz_roh : VARCHAR(2)? altersklasse_jugend_code_oeps : VARCHAR(2)? altersklasse_jungerreiter_code_oeps : CHAR(1)? jahr_letzte_zahlung_lizenz_oeps : INTEGER? lizenzinfo_raw_oeps : VARCHAR(10)? qualifikationen_raw_oeps: VARCHAR(30)? ' Aus RICHT01.dat import_timestamp: TIMESTAMP } entity Pferd_ZNS_Staging { + oeps_satz_nr_pferd : VARCHAR(10) <> ' Aus PFERDE01.dat -- oeps_kopf_nr : VARCHAR(4)? ' Wird oft zusätzlich verwendet name : VARCHAR(30) lebensnummer : VARCHAR(9)? geburtsjahr : INTEGER? geschlecht_code : CHAR(1)? farbe : VARCHAR(15)? abstammung_vater_name : VARCHAR(30)? abstammung_info_roh : VARCHAR(15)? ' Feld "ABSTAMMUNG" oeps_verein_nr_pferd_roh : VARCHAR(4)? verantwortliche_person_name_roh: VARCHAR(75)? fei_pass_nr : VARCHAR(10)? letzte_zahlung_pferdegebuehr_jahr : INTEGER? import_timestamp: TIMESTAMP } } ' --- Ende Service ZNS-Daten --- ' #################################################################################### ' ### Domänen Service: Sportler & Pferde Verwaltung (aus ZNS und manuell) ### ' #################################################################################### package Service_Sportler_Pferde_Verwaltung { entity DomPerson { + person_id: UUID <> -- oeps_satz_nr: VARCHAR(6) <>? nachname: VARCHAR vorname: VARCHAR geburtsdatum: DATE? geschlecht: GeschlechtE? nationalitaet_code: VARCHAR(3)? fei_id: VARCHAR(10)? telefon: VARCHAR? email: VARCHAR? # stamm_verein_id: UUID <>? ' Verweis auf DomVerein.verein_id ist_gesperrt: BOOLEAN sperr_grund: TEXT? daten_quelle: DatenQuelleE ist_aktiv: BOOLEAN } entity DomPferd { + pferd_id: UUID <> -- oeps_satz_nr_pferd: VARCHAR(10) <>? oeps_kopf_nr: VARCHAR(4)? name: VARCHAR lebensnummer: VARCHAR? geburtsjahr: INTEGER? geschlecht_pferd: CHAR(1)? ' oder Enum # besitzer_person_id: UUID <>? # verantwortlicher_person_id: UUID <>? # heimat_verein_id: UUID <>? daten_quelle: DatenQuelleE ist_aktiv: BOOLEAN } entity DomVerein { + verein_id: UUID <> -- oeps_vereins_nr: VARCHAR(4) <> name: VARCHAR kuerzel: VARCHAR? bundesland_code: VARCHAR(2)? } entity DomLizenz { + lizenz_id: UUID <> -- # person_id: UUID <> # lizenz_typ_global_code: VARCHAR(10) <> ' Verweis auf Service_OeTO_Verwaltung.LizenzTypGlobal gueltig_bis_jahr: INTEGER? ist_aktiv_bezahlt: BOOLEAN ' Info aus LIZENZINFO } entity DomQualifikation { + qualifikation_id: UUID <> -- # person_id: UUID <> # qual_typ_code: VARCHAR <> ' Verweis auf Service_OeTO_Verwaltung.QualifikationsTyp details: VARCHAR? } DomPerson "1" -- "0..*" DomLizenz : besitzt DomLizenz -- "1" Service_OeTO_Verwaltung.LizenzTypGlobal : ist vom Typ DomPerson "1" -- "0..*" DomQualifikation : besitzt DomQualifikation -- "1" Service_OeTO_Verwaltung.QualifikationsTyp : ist vom Typ DomPerson "0..*" -- "1" DomVerein : hat Stammverein DomPferd "0..*" -- "1" DomPerson : hat Besitzer DomPferd "0..*" -- "1" DomPerson : hat Verantwortlichen DomPferd "0..*" -- "1" DomVerein : hat Heimatverein } ' --- Ende Service Sportler & Pferde Verwaltung --- ' ##################################################################### ' ### Service Veranstaltungsplanung (Events, Turniere, Prüfungen) ### ' ##################################################################### package Service_Veranstaltungsplanung { ' Entspricht unserem "Event" entity VeranstaltungsRahmen { + veranst_rahmen_id : UUID <> -- name : VARCHAR datum_von_gesamt : DATE datum_bis_gesamt : DATE # hauptveranstalter_verein_id : UUID <> ' Verweis auf DomVerein ort_text: VARCHAR status: EventStatusE } ' Entspricht unserem "Turnier" entity Turnier_OEPS { + turnier_id : UUID <> ' Eigene UUID für interne Zwecke -- # veranst_rahmen_id : UUID <> oeps_turnier_nr : VARCHAR(5) <> ' Offizielle OEPS Nummer name_zusatz : VARCHAR? datum_von_turnier : DATE datum_bis_turnier : DATE # oeto_kategorie_ids: List '(FKs zu Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition)' ' Eher so' kategorie_text_turnier : VARCHAR(50) ' Wie in SUDO, kann mehrere ÖTO Kat. enthalten, z.B. "CDN-C Neu / CDNP-C Neu"' regelwerk_typ : RegelwerkTypE hauptsparte: SparteE } ' Entspricht unserer "BewerbBasis" entity Pruefung_OEPS { + pruefung_db_id : UUID <> -- # turnier_id : UUID <> oeps_bewerb_nr_display : INTEGER ' Eindeutige Nummer pro Turnier name_text_uebergeordnet : VARCHAR sparte : SparteE ' Explizit, wird ggf. aus oeps_kategorie_id vorgeschlagen # oeps_kategorie_id : UUID <> ' # klasse_id : UUID <> ' Wandert in Spezifika' ' Verweise auf spartenspezifische Details ' # dressur_spezifika_id: UUID <>? # springen_spezifika_id: UUID <>? } ' Entspricht unserer "Abteilung" entity Pruefung_Abteilung { + pruefung_abteilung_db_id : UUID <> -- # pruefung_db_id : UUID <> abteilungs_kennzeichen : VARCHAR ' z.B. "1", "A" -> für Anzeige "12/1" bezeichnung_abteilung : VARCHAR? ' ... strukturierte Teilungskriterien ... } entity Meisterschaft_Cup_Serie { + mcs_id : UUID <> -- name : VARCHAR typ : CupSerieTypE jahr : INTEGER sparte : SparteE # reglement_oeto_regel_ref_id : UUID <>? } entity MCS_Wertungspruefung { # mcs_id : UUID <> <> # pruefung_abteilung_db_id : UUID <> <> -- faktor_fuer_wertung : DECIMAL? } entity Platz { + platz_id: UUID <> name: VARCHAR typ: PlatzTypE '.. berichtFelder .. } entity Turnier_hat_Platz { # turnier_id: UUID <> <> # platz_id: UUID <> <> verwendungszweck: VARCHAR? } package Sportfachliche_Details_Pruefung { entity DressurPruefungSpezifika { + pruefung_db_id : UUID <> <> ' 1:1 zu Pruefung_OEPS -- # aufgabe_stammdatum_id : UUID <> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ DRESSURAUFGABE) # klasse_id : UUID <> ' Zu Service_OeTO_Verwaltung.BewerbsKlasseDefinition # richtverfahren_id: UUID <> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ WERTUNGSVERFAHREN_DRESSUR) viereck_groesse_code : PruefungsaufgabeViereckE ' geplanteRichterPositionen: List ' } entity SpringenPruefungSpezifika { + pruefung_db_id : UUID <> <> ' 1:1 zu Pruefung_OEPS -- # klasse_id : UUID <> ' Zu Service_OeTO_Verwaltung.BewerbsKlasseDefinition (z.B. Höhe) # richtverfahren_id: UUID <> ' Zu Service_OeTO_Verwaltung.Sportfachliche_Stammdaten (Typ WERTUNGSVERFAHREN_SPRINGEN) art_des_stechens : ArtDesStechensE? '.. parcours infos .. } ' ... Weitere Sparten (VS, RVK) analog ... } ' Beziehungen innerhalb Veranstaltungsplanung VeranstaltungsRahmen "1" -- "0..*" Turnier_OEPS Turnier_OEPS "1" -- "0..*" Pruefung_OEPS Pruefung_OEPS "1" -- "1..*" Pruefung_Abteilung Pruefung_OEPS "1" -- "0..1" Sportfachliche_Details_Pruefung.DressurPruefungSpezifika Pruefung_OEPS "1" -- "0..1" Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika ' ... Beziehungen zu weiteren Spezifika ... Meisterschaft_Cup_Serie "1" -- "0..*" MCS_Wertungspruefung Pruefung_Abteilung "1" -- "0..*" MCS_Wertungspruefung Turnier_OEPS "1" -- "0..*" Turnier_hat_Platz Platz "1" -- "0..*" Turnier_hat_Platz ' Beziehungen zu Service_OeTO_Verwaltung Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Aufgabe" Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse" Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse" Pruefung_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "hat ÖTO Kategorie" Turnier_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "ist kategorisiert als" ' Beziehungen zu Service_Sportler_Pferde_Verwaltung (für Funktionäre etc.) Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_Sportler_Pferde_Verwaltung.DomPerson : "Parcoursdesigner" (als FK) } ' --- Ende Service Veranstaltungsplanung --- ' ##################################################################### ' ### Service Nennungsabwicklung (Nennungen, Startlisten, Ergebnisse) ### ' ##################################################################### package Service_Nennungsabwicklung { ' Umbenannt von Nennung_OEPS für Domänenkontext entity Nennung { + nennung_id : UUID <> -- # pruefung_abteilung_db_id : UUID <> # teilnehmer_person_id : UUID <> ' Verweis auf DomPerson # genanntes_pferd_id : UUID <> ' Verweis auf DomPferd # genutzte_lizenz_id: UUID <>? ' Verweis auf DomLizenz des Teilnehmers nennungs_zeitpunkt : TIMESTAMP status_nennung : NennungStatusE kopf_nr_pferd_fuer_nennung : VARCHAR(4)? ' Für Anzeige/Abgleich, Pferd ist aber per ID verknüpft startgeld_bezahlt: BOOLEAN pferdepass_kontrolliert: BOOLEAN } entity NennungsTeilnehmerSnapshot { + snapshot_id: UUID <> # nennung_id: UUID <> (1:1 oder 1:0..1) -- ' Gesnapshotete Personendaten zum Zeitpunkt der Nennung ' person_oeps_satz_nr: VARCHAR(6)? person_nachname: VARCHAR person_vorname: VARCHAR person_verein_name_snapshot: VARCHAR? ' Name des Vereins zum Zeitpunkt der Nennung ' relevante_lizenz_kuerzel_snapshot: VARCHAR? ' Gesnapshotete Pferdedaten zum Zeitpunkt der Nennung ' pferd_oeps_kopf_nr: VARCHAR(4)? pferd_name_snapshot: VARCHAR } Nennung "1" -- "0..1" NennungsTeilnehmerSnapshot entity Startfolge { + startfolge_id: UUID <> # nennung_id: UUID <> start_nummer_display: INTEGER ' Die sichtbare Startnummer start_zeit_geplant: TIMESTAMP? start_zeit_effektiv: TIMESTAMP? status_start: VARCHAR ' z.B. GENANNT, GESTARTET, ABGEMELDET s4_kader_flag: BOOLEAN ' Für spezielle Kaderwertung } ' Eine Nennung führt zu max. einem Startfolgeeintrag pro (Teil-)Prüfung Nennung "1" -- "0..1" Startfolge ' Umbenannt von Ergebnis_OEPS_Zeile entity Ergebnis_Zeile { + ergebnis_zeile_id : UUID <> -- # startfolge_id : UUID <> platz : INTEGER? ausschluss_disq_code : CHAR(1)? punkte_wertnote_text_ergebnis_roh : VARCHAR(10)? ' Rohwert, wie erfasst zeit_prozent_text_ergebnis_roh : VARCHAR(10)? ' Rohwert, wie erfasst stechen_sr_info_text_ergebnis_roh : VARCHAR(4)? geldpreis_betrag_ergebnis : DECIMAL? nation_code_fuer_ergebnis : VARCHAR(3)? platziert_flag : BOOLEAN ' Verweise auf spartenspezifische Ergebnisdetails ' # dressur_ergebnis_spezifika_id: UUID <>? # springen_ergebnis_spezifika_id: UUID <>? } Startfolge "1" -- "0..1" Ergebnis_Zeile package Sportfachliche_Details_Ergebnis { entity DressurErgebnisSpezifika { + ergebnis_zeile_id : UUID <> <> -- gesamt_wertnote : DECIMAL(5,3)? gesamt_prozent : DECIMAL(5,2)? ' Hier könnten Details zu Richterbewertungen pro Lektion folgen (Array von JSONs oder eigene Entitäten) } entity SpringenErgebnisSpezifika { + ergebnis_zeile_id : UUID <> <> -- stilnote_gesamt : DECIMAL(3,1)? ' Falls zutreffend } ' Kind von SpringenErgebnisSpezifika oder direkt von Ergebnis_Zeile entity SpringenUmlaufErgebnis { + umlauf_ergebnis_id : UUID <> -- # springen_ergebnis_spezifika_id : UUID <> ' oder ergebnis_zeile_id umlauf_oder_stechen_nr : INTEGER ' 1=Grundumlauf, 2=1.Stechen etc. fehlerpunkte_hindernis : DECIMAL(4,2)? fehlerpunkte_zeit : DECIMAL(4,2)? zeit_benoetigt_sek : DECIMAL(5,2)? stilnote_umlauf : DECIMAL(3,1)? } SpringenErgebnisSpezifika "1" -- "0..*" SpringenUmlaufErgebnis : hat Umläufe/Stechen ' ... Weitere Sparten (VS, RVK) analog ... } Ergebnis_Zeile "1" -- "0..1" Sportfachliche_Details_Ergebnis.DressurErgebnisSpezifika Ergebnis_Zeile "1" -- "0..1" Sportfachliche_Details_Ergebnis.SpringenErgebnisSpezifika } ' --- Ende Service Nennungsabwicklung --- ' ##################################################################### ' ### Paketübergreifende Beziehungen (Auswahl) ### ' ##################################################################### ' Veranstaltungsplanung <--> OeTO-Verwaltung Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.Sportfachliche_Stammdaten : "nutzt Aufgabe" Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.DressurPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse" Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_OeTO_Verwaltung.BewerbsKlasseDefinition : "hat Klasse" Service_Veranstaltungsplanung.Pruefung_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "hat ÖTO Kategorie" Service_Veranstaltungsplanung.Turnier_OEPS -- Service_OeTO_Verwaltung.BewerbsKategorieOetoDefinition : "ist kategorisiert als" ' Veranstaltungsplanung <--> Sportler & Pferde Verwaltung (für Funktionäre) Service_Veranstaltungsplanung.Sportfachliche_Details_Pruefung.SpringenPruefungSpezifika -- Service_Sportler_Pferde_Verwaltung.DomPerson : "Parcoursdesigner" ' Nennungsabwicklung <--> Veranstaltungsplanung Service_Nennungsabwicklung.Nennung -- Service_Veranstaltungsplanung.Pruefung_Abteilung : "für" ' Nennungsabwicklung <--> Sportler & Pferde Verwaltung Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomPerson : "durch Reiter" Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomPferd : "mit Pferd" Service_Nennungsabwicklung.Nennung -- Service_Sportler_Pferde_Verwaltung.DomLizenz : "unter Lizenz (genutzte)" ' ZNS Import Logik (konzeptionell) ' Service_ZNS_Daten.Person_ZNS_Staging -> Service_Sportler_Pferde_Verwaltung.DomPerson ' Service_ZNS_Daten.Pferd_ZNS_Staging -> Service_Sportler_Pferde_Verwaltung.DomPferd ' Service_ZNS_Daten.Verein_ZNS_Staging -> Service_Sportler_Pferde_Verwaltung.DomVerein ' Service_ZNS_Daten.Person_ZNS_Staging (lizenzinfo_raw_oeps, etc.) -> Service_Sportler_Pferde_Verwaltung.DomLizenz (über Service_OeTO_Verwaltung.LizenzTypGlobal) @enduml