feat(db): add regulation-as-data tables for license height and horse age matrices

- Introduced `license_height_matrix` for mapping minimum license requirements to jump heights (ÖTO § 231).
- Added `horse_min_age_matrix` for defining minimum horse ages by discipline, height, or level (ÖTO § 103, FEI GR Art. 136).
- Populated both tables with ÖTO 2026 and FEI-compliant seed data.
- Updated Flyway V008 to remove incorrect `RD4` entry and annotated corrected enum references.
- Created Flyway V009 for introducing the new tables and their seeds.
- Aligned documentation, validation rules, and roadmaps for backend implementation handover.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-03 11:10:42 +02:00
parent 1f9f528554
commit c696b8c50e
7 changed files with 572 additions and 28 deletions
@@ -0,0 +1,79 @@
---
date: 2026-04-03
sprint: B-2
agent: Rulebook Expert
status: TEILWEISE ABGESCHLOSSEN
---
# Session-Log: B-2 Regulation-as-Data Backend-Übergabe
## Ziel der Session
Lizenz-/Altersmatrix als Regulation-as-Data an 👷 Backend übergeben; Lizenz×Bewerb-Tabellen für Fachfreigabe vorbereiten.
---
## Durchgeführte Arbeiten
### 1. Enum-Korrektur: `LizenzKlasseE` (core-domain)
- **Problem:** `R4` fehlte im Enum, obwohl Flyway V008 bereits `R4` inserierte → Mismatch.
- **Fix:** `R4` in `core/core-domain/src/commonMain/kotlin/at/mocode/core/domain/model/Enums.kt` ergänzt.
- **Vollständiger Katalog jetzt:** `LIZENZFREI, R1, R2, R3, R4, RD1, RD2, RD3, JN, JG, YR`
### 2. Flyway V008 korrigiert
- **Problem:** `RD4` in Dressur-Lizenz-Matrix inseriert — existiert nicht im ÖTO-Regelwerk und nicht im Enum.
- **Fix:** `RD4`-Zeile entfernt; Kommentar mit Enum-Key-Konvention ergänzt.
- **Datei:**
`backend/services/masterdata/masterdata-service/src/main/resources/db/migration/V008__Seed_OETO_2026_Data.sql`
### 3. Flyway V009 neu angelegt
Zwei neue Tabellen als Regulation-as-Data:
| Tabelle | Inhalt |
|-------------------------|-----------------------------------------------------------------------------|
| `license_height_matrix` | Höhenbereich (cm) × erlaubte Lizenzklassen (Springen, ÖTO § 231) |
| `horse_min_age_matrix` | Mindestalter Pferd je Sparte + Höhe/Niveau (national ÖTO + FEI GR Art. 136) |
- **Datei:**
`backend/services/masterdata/masterdata-service/src/main/resources/db/migration/V009__Add_HorseAge_And_LicenseHeight_Matrix.sql`
### 4. B-2-Übergabe-Spezifikation erstellt
- Vollständige Spezifikation für 👷 Backend mit: Enum-Katalog, DB-Tabellen, Abfrage-Patterns, Pseudocode,
REST-Endpunkt-Empfehlungen, Abweichungen Backend↔Frontend, Fachfreigabe-Checkliste.
- **Datei:** `docs/03_Domain/02_Reference/OETO_Regelwerk/B2-Backend-Uebergabe-Regulation-as-Data.md`
### 5. `Validierungsregeln.md` aktualisiert (v0.3 → v0.4)
- `LZF``LIZENZFREI` in allen Vorkommen korrigiert (Enum ist SSoT).
- Verweis auf B2-Übergabe-Spezifikation ergänzt.
- Version auf 0.4 (2026-04-03) angehoben.
### 6. Roadmap aktualisiert
- Sprint B von 🔴 auf 🟡 gesetzt (Übergabe abgeschlossen, Fachfreigabe + Backend-Impl. offen).
- Abgeschlossene Teilaufgaben abgehakt.
---
## Offene Punkte (Übergabe an nächste Session)
| # | Aufgabe | An wen | Priorität |
|---|-----------------------------------------------------------------------|--------------------|-----------|
| 1 | **Fachfreigabe** Lizenz×Bewerb-Tabellen beim ÖTO-Fachreferat einholen | 📜 Rulebook Expert | 🔴 |
| 2 | Backend-Endpunkte `/api/regulation/*` implementieren | 👷 Backend | 🔴 |
| 3 | Frontend `LZF`-Key im Code prüfen (nicht nur Doku) | 🎨 Frontend | 🟠 |
| 4 | Serverseitige Validierung prüfen (nach Backend-Impl.) | 📜 Rulebook Expert | 🟠 |
| 5 | `AltersklasseRechner` (C-1) spezifizieren und implementieren | 👷 + 📜 | 🟠 |
---
## Entscheidungen & Erkenntnisse
- **`LIZENZFREI` ist der kanonische Enum-Key** — nicht `LZF`. Alle Dokumente und Code müssen diesen Key verwenden.
- **`RD4` existiert nicht** im ÖTO-Regelwerk 2026. Höchste Dressur-Lizenz ist `RD3`.
- **Aufwärts-Kompatibilität** ist explizit modelliert: Höhere Lizenz darf immer in niedrigerer Klasse starten.
- **Fachfreigabe ist Voraussetzung** für STABLE-Status der Tabellen — bis dahin bleibt alles DRAFT.