feat: integrate new desktop shell and extend backend & ADRs

- Added `meldestelle-desktop` module using JVM/Compose Desktop, registered in `settings.gradle.kts`.
- Integrated new screens and desktop navigation into core: `Veranstaltungen`, `TurnierDetail`, etc.
- Expanded backend with `ExposedFunktionaerRepository` in `officials-infrastructure`.
- Completed ADRs for bounded context mapping (`ADR-0014`) and context map (`ADR-0015`).
- Updated and extended project documentation with session logs and architecture decisions.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-03-24 18:22:15 +01:00
parent c624df8744
commit 354bd49de6
75 changed files with 7616 additions and 48 deletions
@@ -88,3 +88,353 @@ enum class BearbeitungsStatusE {
ABGEBROCHEN,
FEHLER
}
/**
* Sportliche Sparten gemäß ÖTO § 3 Abs. 2 und FEI-Kurzbezeichnungen.
* Nationale Turniere verwenden das Präfix "N" (z.B. CDN = Dressur national).
*/
@Serializable
enum class SparteE {
/** Dressur national (CDN) */
DRESSUR,
/** Springen national (CSN) */
SPRINGEN,
/** Vielseitigkeit national (CCN) */
VIELSEITIGKEIT,
/** Fahren national (CAN) */
FAHREN,
/** Voltigieren national (CVN) */
VOLTIGIEREN,
/** Distanzreiten national (CEN) */
DISTANZREITEN,
/** Westernreiten national (CWN) */
WESTERNREITEN,
/** Reining national (CWRN) */
REINING
}
/**
* Turnierkategorie gemäß ÖTO § 3 Abs. 4.
* Bestimmt das Niveau und die Teilnahmeberechtigung.
*/
@Serializable
enum class TurnierkategorieE {
C_NEU,
C,
B_STERN,
B,
A,
A_STERN
}
/**
* Typ einer pferdesportlichen Veranstaltung gemäß ÖTO § 2 Abs. 1.
*/
@Serializable
enum class VeranstaltungsTypE {
/** Turnier mit OEPS-Genehmigung und Turniernummer (§ 2 Abs. 2) */
TURNIER,
/** Reitertreffen für Vereinsmitglieder und geladene Gäste (§ 2 Abs. 3) */
REITERTREFFEN,
/** Sonderprüfung zur Erlangung von Abzeichen/Lizenzen (§ 2 Abs. 4) */
SONDERPRUEFUNG,
/** Pferde-Sport & Spiel (§ 2 Abs. 5) */
PS_UND_S,
/** Turnierartige Veranstaltung mit Sondergenehmigung (§ 2 Abs. 6) */
TURNIERARTIG
}
/**
* Lizenzklasse eines Reiters gemäß ÖTO Teilnahmeberechtigung.
*/
@Serializable
enum class LizenzKlasseE {
/** Lizenzfrei keine Lizenz erforderlich */
LIZENZFREI,
/** Reiter-Lizenz Klasse 1 */
R1,
/** Reiter-Lizenz Klasse 2 */
R2,
/** Reiter-Lizenz Klasse 3 */
R3,
/** Dressur-Reiter Klasse 1 */
RD1,
/** Dressur-Reiter Klasse 2 */
RD2,
/** Dressur-Reiter Klasse 3 */
RD3,
/** Jugend/Nachwuchs */
JN,
/** Junioren */
JG,
/** Young Rider */
YR
}
/**
* Status einer Nennung im registration-context.
*/
@Serializable
enum class NennungsStatusE {
/** Nennung eingegangen, noch nicht bestätigt */
EINGEGANGEN,
/** Nennung bestätigt und aktiv */
BESTAETIGT,
/** Nennung nach Nennschluss (Nachnennung) */
NACHNENNUNG,
/** Nennung wurde transferiert (Reiter/Pferd getauscht) */
TRANSFERIERT,
/** Nennung zurückgezogen */
ZURUECKGEZOGEN,
/** Reiter/Pferd gestartet */
GESTARTET,
/** Nicht angetreten */
NICHT_ANGETRETEN
}
/**
* Startwunsch eines Reiters bezüglich seiner Position in der Startliste.
*/
@Serializable
enum class StartwunschE {
VORNE,
HINTEN,
KEIN_WUNSCH
}
/**
* Rolle eines Funktionärs bei einer Veranstaltung gemäß ÖTO Funktionärs-Qualifikation.
* Bestimmt, welche Aufgaben eine Person bei einem Turnier übernehmen darf.
*/
@Serializable
enum class FunktionaerRolleE {
/** Turnierbeauftragter (TBA) hat bei Regelkonflikten das letzte Wort (ÖTO § 24/§ 25) */
TBA,
/** Richter / Kampfrichter */
RICHTER,
/** Parcoursbauer (Springen) */
PARCOURSBAUER,
/** Streckendesigner (Vielseitigkeit, Distanzreiten) */
STRECKENDESIGNER,
/** Tierarzt */
TIERARZT,
/** Steward */
STEWARD,
/** Starter */
STARTER,
/** Zeitnehmer */
ZEITNEHMER,
/** Protokollführer */
PROTOKOLLFUEHRER,
/** Sonstige Funktion */
SONSTIGE
}
/**
* Qualifikationsstufe eines Richters gemäß ÖTO/ZNS-Klassifikation (RICHT01.dat).
* Bestimmt, für welche Turnierkategorien und Sparten ein Richter zugelassen ist.
*/
@Serializable
enum class RichterQualifikationE {
/** Grundausbildung / Anfänger */
GA,
/** Gruppe 3 (niedrigste offizielle Stufe) */
G3,
/** Gruppe 2 */
G2,
/** Gruppe 1 (höchste nationale Stufe) */
G1,
/** Internationaler Richter (FEI-Lizenz) */
INTERNATIONAL,
/** Sonstige / unbekannte Qualifikation */
SONSTIGE
}
/**
* Typ einer Prüfung / eines Bewerbs gemäß ÖTO-Klassifikation.
* Relevant für die Abteilungs-Schwellenwerte (§ 39 A-Teil).
*/
@Serializable
enum class PruefungsTypE {
/** Stilspringprüfung (Schwellenwert: > 30 Starter → Pflicht-Teilung) */
STIL_SPRINGEN,
/** Springpferdeprüfung (Schwellenwert: > 30 Starter → Pflicht-Teilung) */
SPRINGPFERDE,
/** Dressurpferdeprüfung (Schwellenwert: > 30 Starter → Kann-Teilung) */
DRESSURPFERDE,
/** Vielseitigkeitsprüfung (Schwellenwert: > 40 Starter → Pflicht-Teilung) */
VIELSEITIGKEIT,
/** Übrige Springprüfung (Standard, Zweiphasen, Punkte, Risiko; Schwellenwert: > 80 Starter) */
SPRINGEN_UEBRIG,
/** Dressurprüfung (Schwellenwert: > 30 Starter → Kann-Teilung) */
DRESSUR,
/** Caprilli-Prüfung (strukturelle Pflicht-Teilung nach Lizenz, § 803) */
CAPRILLI,
/** Fahrprüfung / Fahrertreffen (CAN, § 850 ff.) */
FAHREN,
/** Voltigierprüfung (CVN, § 400 ff.) */
VOLTIGIEREN,
/** Sonstiger Prüfungstyp */
SONSTIGE
}
/**
* Typ der Abteilungs-Teilung gemäß ÖTO § 39.
* Bestimmt, nach welchem Kriterium ein Bewerb in Abteilungen aufgeteilt wird.
*/
@Serializable
enum class AbteilungsTeilungsTypE {
/** Keine Teilung (Bewerb läuft als eine Einheit) */
KEINE,
/** Teilung nach Lizenzstufe (Standard-Fallback gemäß § 39) */
NACH_LIZENZ,
/** Teilung nach Startplatznummer / Plätzen */
NACH_PLATZ,
/** Teilung nach Pferdealter (z.B. Springpferdeprüfung 95110 cm) */
NACH_PFERDEALTER,
/** Strukturelle Pflicht-Teilung (z.B. CSN-C-NEU, Caprilli) */
STRUKTURELL,
/** Teilung nach Ausschreibungs-Kriterium (Altersklasse, Geschlecht etc.) */
NACH_AUSSCHREIBUNG
}
/**
* Status einer Startliste gemäß Turnier-Workflow.
*/
@Serializable
enum class StartlistenStatusE {
/** Startliste noch nicht erstellt */
NICHT_ERSTELLT,
/** Startliste in Bearbeitung (Entwurf) */
ENTWURF,
/** Startliste veröffentlicht (für Reiter sichtbar) */
VEROEFFENTLICHT,
/** Startliste gesperrt (keine Änderungen mehr möglich, Turnier läuft) */
GESPERRT,
/** Startliste archiviert (Turnier abgeschlossen) */
ARCHIVIERT
}
/**
* Status einer Veranstaltung im Planungs- und Durchführungs-Workflow.
*/
@Serializable
enum class VeranstaltungsStatusE {
/** Veranstaltung in Planung (noch nicht genehmigt) */
IN_PLANUNG,
/** Ausschreibung eingereicht, wartet auf Genehmigung */
EINGEREICHT,
/** Veranstaltung genehmigt, Nennungen möglich */
GENEHMIGT,
/** Nennschluss abgelaufen, Startlisten in Erstellung */
NENNSCHLUSS_ABGELAUFEN,
/** Veranstaltung läuft aktiv */
AKTIV,
/** Veranstaltung abgeschlossen */
ABGESCHLOSSEN,
/** Veranstaltung abgesagt */
ABGESAGT
}
/**
* Status eines Turniers innerhalb einer Veranstaltung.
*/
@Serializable
enum class TurnierStatusE {
/** Turnier geplant, noch nicht gestartet */
GEPLANT,
/** Turnier läuft aktiv */
AKTIV,
/** Turnier abgeschlossen, Ergebnisse vorhanden */
ABGESCHLOSSEN,
/** Turnier abgesagt */
ABGESAGT
}
/**
* Status einer Ausschreibung gemäß ÖTO-Genehmigungsworkflow.
*/
@Serializable
enum class AusschreibungsStatusE {
/** Ausschreibung im Entwurf */
ENTWURF,
/** Ausschreibung eingereicht beim Verband */
EINGEREICHT,
/** Ausschreibung genehmigt */
GENEHMIGT,
/** Ausschreibung abgelehnt (Überarbeitung erforderlich) */
ABGELEHNT,
/** Ausschreibung veröffentlicht (für Reiter sichtbar) */
VEROEFFENTLICHT
}