meldestelle/CHANGELOG.md
StefanMoCoAt f98a9075ae
Some checks failed
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Failing after 1m2s
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Successful in 6m3s
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Successful in 5m59s
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Failing after 3m27s
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Successful in 1m48s
feat: erweitere Changelog um Onboarding, UX-Verbesserungen und Fehlerbehebungen, aktualisiere Settings-Datei
Signed-off-by: StefanMoCoAt <stefan.mo.co@gmail.com>
2026-04-16 00:45:53 +02:00

28 KiB
Raw Blame History

Changelog — Meldestelle

Alle wesentlichen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.

Format basiert auf Keep a Changelog. Versionierung folgt Semantic Versioning.

Versionsschema: MAJOR.MINOR.PATCH[-QUALIFIER]

  • MAJOR — Breaking Changes / inkompatible API-Änderungen
  • MINOR — Neue Features (abwärtskompatibel)
  • PATCH — Bugfixes (abwärtskompatibel)
  • QUALIFIERSNAPSHOT (Entwicklung), beta.N (Vorversion), leer = Release

Unreleased

Hinzugefügt

  • Onboarding & Desktop-UX - 15.04.2026:
    • Desktop-App: Dynamisierung der Statusanzeigen im App-Footer ("Cloud synchronisiert" & "Verbunden").
    • Connectivity-Tracking: Implementierung des ConnectivityTracker (KMP) zur Echtzeit-Überwachung der API-Gateway Erreichbarkeit.
    • LAN-Erkennung: Integration des NetworkDiscoveryService (mDNS) im Footer zur Anzeige aktiver Instanzen im lokalen Netzwerk.
    • Onboarding: Datenfluss vom SettingsManager bis in den Footer finalisiert (Anzeige des echten Gerätenamens).
  • Online-Nennung & Integration - 15.04.2026:
    • Backend (Mail-Service): Finalisierung des MailController für Web-Nennungen inkl. SMTP-Versand via World4You.
    • Frontend (Desktop): NennungsEingangScreen an Live-Daten vom mail-service angebunden.
    • Repository: NennungRemoteRepository (KMP) um holeNennungen() erweitert.
  • Billing & ÖTO - 15.04.2026:
    • Sportförderbeitrag: Automatische Buchung von 1,00 EUR (§16 ÖTO) bei jeder Nennung im entries-service implementiert.

Behoben

  • Identity-Modul: Umstellung auf kotlin.time.Instant zur Vermeidung von Deprecation-Warnungen und Behebung von Persistenz-Konflikten im ExposedDeviceRepository.
  • Koin DI: Korrektur von Typ-Inferenz-Fehlern beim HttpClient im nennung-feature durch explizite Qualifier.
  • Turnier-Feature: Behebung eines unsicheren Casts (Any! zu List<String>) in TurnierStammdatenTab.kt.
  • Konfiguration: Harmonisierung der Ports (Mail-Service auf 8083) in .env, dc-backend.yaml und PlatformConfig.jvm.kt.

Hinzugefügt

  • Phase 12 (Abrechnung & Infrastruktur) - 12.04.2026:
    • Infrastruktur: Docker-Integration für billing-service (Port 8087) und API-Gateway Routing vervollständigt.
    • Service Discovery: Alle relevanten Microservices (masterdata, events, results, series, billing) sind nun bei Consul registriert.
    • Frontend Billing: BillingRepository und BillingViewModel auf reale API-Anbindung (Ktor) umgestellt; BillingScreen funktionalisiert.
    • Backend (Series): JPA-Entitäten Serie und SeriePunkt im series-service stabilisiert und Flyway-Migrationen für das Datenbankschema erstellt.
    • Fix: Behebung von IDE-Mapping-Warnungen durch explizite @Column Namen in den JPA-Entitäten.
  • Backend Fixes - 12.04.2026:
    • Infrastruktur: Behebung von Startfehlern im events-service (DataSource) und masterdata-service (Consul).
    • Build: Integration von results-service und series-service in settings.gradle.kts.
    • Domain: Serie und SeriePunkt zu data class konvertiert (copy() Unterstützung).
  • Phase 11 (Ergebniserfassung & Platzierung) - 12.04.2026:
    • Backend (Results): results-service um JPA-Entitäten, Repositories und Business-Logik für Platzierungsberechnungen (Wertnote, Zeit, Fehler) ergänzt.
    • Infrastructure: dc-backend.yaml und GatewayConfig.kt um den Service results (Port 8088) erweitert.
    • Frontend Domain: ErgebnisRepository und Ergebnis-Modell für Wertnoten, Zeiten und Status erstellt.
    • Frontend UI: ErgebnisEditDialog zur schnellen Ergebniserfassung hinzugefügt; TurnierStartlistenTab ermöglicht nun Erfassung per Zeilen-Klick.
    • Frontend UI: TurnierErgebnislistenTab vervollständigt: Buttons für "Platzierung berechnen" und "Drucken" (PDF) funktionalisiert.
    • Fix: Kompilierungsprobleme im TurnierFeatureModule und ScreenPreviews.kt behoben (fehlende ergebnisRepo Parameter).

Hinzugefügt

  • Phase 10.4 (Series-Context Vertiefung) - 12.04.2026:
    • Backend (Series): series-service um Logik für Streichresultate (ReglementTyp) und Bindungsarten (Reiter-zentriert, Pferde-zentriert, Paar-Bindung) erweitert.
    • Infrastructure: dc-backend.yaml und GatewayConfig.kt um den Service series (Port 8089) erweitert.
    • Frontend Domain: SeriesRepository und Modelle an das neue Ranking-Format (SerieStandEntry) angepasst.
    • UI: SeriesScreen.kt überarbeitet: Zeigt nun Reiter- und Pferde-IDs sowie Fortschritt pro Teilnehmer an.
    • Dokumentation: MASTER_ROADMAP.md aktualisiert (Phase 10 & 11 auf 'Completed' gesetzt).

Hinzugefügt

  • Phase 10.3 (Echter Datenverkehr & Infrastruktur) - 12.04.2026:
    • Infrastructure: Docker-Services für masterdata, events und zns-import in dc-backend.yaml ergänzt.
    • Gateway: API-Gateway Routing für Masterdata (/api/v1/masterdata) und Events (/api/v1/events) konfiguriert.
    • Frontend (Vereine): VereinRepository (Ktor) und VereinViewModel implementiert für echtes Anlegen von Veranstaltern.
    • Frontend (Events): TurnierViewModel an das reale TurnierRepository angebunden.
    • Fix: verein-feature Abhängigkeiten korrigiert (Network/Ktor).
    • Fix: Polling-Endpoints im ZnsImportViewModel an das neue Gateway-Routing angepasst.

Hinzugefügt

  • Phase 10.2 (Masterdata-Editoren & Organisation) - 12.04.2026:
    • Frontend: MasterdataEditDialogs.kt für die Bearbeitung von Reiter- und Pferdedaten direkt im Turnier-Kontext.
    • Frontend: Erweiterung des MasterdataRepository um Schreibzugriffe (saveReiter, savePferd).
    • Frontend: Funktionale Suche für Turnierleiter im Organisation-Tab via NennungViewModel und Masterdata-API.
    • Frontend: State-Management für Stammdaten-Editoren im NennungViewModel.
    • Fix: Kompilierungsfehler in ScreenPreviews.kt behoben (fehlende Interface-Methoden in Mocks).
    • Fix (Desktop Shell): Fehlendes turnierFeatureModule in main.kt registriert und Login-Gate in DesktopApp.kt optimiert.

Hinzugefügt

  • Phase 10 (Series-Context & Stammdaten) - 11.04.2026:
    • Frontend: Stammdaten-Infrastruktur im turnier-feature (Repositories, DTOs, Domänenmodelle) für Reiter, Pferde, Funktionäre und Vereine.
    • Frontend: NennungViewModel zur Steuerung der Suche und Status-Verwaltung von Nennungen.
    • Frontend: Funktionalisierung des Nennungen-Tabs (Suche, Echt-Datenanbindung) und Vorbereitung des Organisation-Tabs.
    • Frontend: DefaultMasterdataRepository zur Suche in Reitern, Pferden und Funktionären via Backend-API.
    • Netzwerk: Erweiterung der ApiRoutes um Endpunkte für Masterdata und Nennungen.
    • Phase 10 (Series-Context) Vorbereitung:
      • Frontend: Neuer SeriesScreen.kt für die Verwaltung von Cups und Meisterschaften (konfigurierbare Reglements).
      • Frontend: Erweiterung des AdminUebersichtScreen (Cockpit) um KPI-Kacheln mit Direkt-Links zu Cups und Meisterschaften.
      • Frontend: Integration der Series-Navigation in die Breadcrumbs und das globale Routing (Meisterschaften, Cups).
  • Turnier-Feature Hardening:
    • Frontend: STARTLISTEN und ERGEBNISLISTEN Tabs vollständig an das BewerbViewModel angebunden (Bewerbs-Auswahl mit echten Daten).
    • Frontend: Implementierung der Starter-Anzeige in der Startliste (LazyColumn).

Geändert

  • Turnier-Feature: Sichtbarkeit von BewerbViewModel.generateStartliste() auf public geändert, um den Aufruf aus dem Tab zu ermöglichen.
  • Frontend (Desktop): ScreenPreviews.kt aktualisiert zur Berücksichtigung der neuen ViewModel-Abhängigkeiten (NennungViewModel, MasterdataRepository).

[Phase 9] - 11.04.2026

  • Frontend: Interaktiver Drag & Drop Zeitplan mit automatischem 5-Minuten-Snapping und Konflikt-Visualisierung.
  • Frontend: "B-Satz Export (ZNS)" Toolbar-Aktion mit integriertem Vorschau-Dialog.
  • Frontend: "Änderungs-Historie" (Audit-Log) Sektion zur Nachverfolgung von Zeitplan-Anpassungen.
  • Backend: audit_log Persistenz und Abfrage-API für manuelle Eingriffe in Bewerbe.
  • Backend: ZNS B-Satz Export Endpunkt (/export/zns/b-satz) zur Generierung von BBEWERBE Datensätzen.
  • Core: FixedWidthLineBuilder zur präzisen Generierung von ZNS-konformen Festbreiten-Formaten.

Behoben

  • Infrastruktur: Veraltete newSuspendedTransaction in DatabaseFactory.kt durch moderne suspendTransaction (Exposed v1) ersetzt.
  • Frontend (Desktop): Kompilierfehler in ScreenPreviews.kt behoben, indem fehlende Interface-Methoden im Mock-Repository implementiert wurden.
  • Backend (Tests): JdbcSQLSyntaxErrorException im BewerbeZeitplanIntegrationTest durch Korrektur des Schema-Setups (Audit-Log Tabelle) gelöst.

Hinzugefügt

  • Bugfix: Behebung von Build-Fehlern im veranstalter-feature nach der Paket-Konsolidierung.
  • Frontend: FakeVeranstalterRepository in commonMain implementiert, um saubere KMP-DI zu ermöglichen.
  • Frontend: Veraltete Imports und Referenzen im meldestelle-desktop Shell und Previews korrigiert.
  • Architektur: Fachliches Konzept für Zeitplan-Optimierung (Drag & Drop) erstellt (konzept-zeitplan-optimierung-de.md).
  • Architektur: Spezifikation des Status-Automaten für Nennungen und Synchronisations-Logik (status-automat-nennungen-de.md).
  • Rulebook: Überprüfung und Spezifikation der Parcoursbesichtigung zu Pferd (§43 ÖTO) inkl. 5-Minuten-Puffer-Regel.
  • Backend (Entries): Erweiterung der Domain-Modelle Bewerb und Abteilung um Besichtigungs- und Pausen-Konfigurationen.
  • Backend (Entries): Neues Datenmodell BesichtigungsBlock für wettbewerbsübergreifende Parcoursbesichtigungen.
  • Backend (Entries): API-Endpunkt PATCH /bewerbe/{id}/zeitplan für schnelle Zeitplan-Updates implementiert.
  • Backend (Entries): StartlistenService um ÖTO-konforme Zeitberechnung (Besichtigungs-Puffer, Pausen-Intervalle) erweitert.

Geändert

  • Masterdata/Domain: Umbenennungen zur Vereinheitlichung der Terminologie (DE):
    • MasterdataLicenseRepositoryLizenzRepository
    • LicenseMatrixServiceLizenzMatrixService
    • LicenseMatrixServiceImplLizenzMatrixServiceImpl
    • Test: LicenseMatrixServiceTestLiznezMatrixServiceTest (exakt nach Vorgabe)
    • Infrastructure (Exposed): LicenseTableLizenzTable
  • Docs: Begriff „reit_lizenzen“ → „reiterlizenzen“ in Glossar/UL konsolidiert.

Hinzugefügt

  • Events-Service Bundle: Vollständige Stabilisierung der events Services (Domain, Infrastructure, API, Service).

    • Domain: Umstellung auf kotlin.time.Instant zur Vermeidung von Deprecation-Warnungen (Kotlin 2.1.20+) und Harmonisierung mit dem Rulebook-Expert.
    • Infrastructure: Anpassung an den org.jetbrains.exposed.v1 Namespace und Implementierung von UUID-Konvertierungen zwischen kotlin.uuid.Uuid (Domain) und java.util.UUID (DB).
    • API: Refactoring des VeranstaltungController zur direkten Repository-Nutzung (Alignment mit entries Service).
    • Service-Config: Umstellung auf Flyway-basiertes Tenant-Schema-Management in EventsDatabaseConfiguration.
    • Build: Behebung des shadowJar Fehlers in events-infrastructure durch Entfernen des unnötigen ktor Plugins in der Library-Schicht.
  • Masterdata: Automatisches Seeding aller Reiterlizenzen (license_matrix) beim Start des masterdata-service via ReiterlizenzenSeeder (idempotent; SPRINGEN: LIZENZFREI,R1R4; DRESSUR: LIZENZFREI,RD1RD3).

  • ZNS-Import (LIZENZ01.dat): Robuster Lizenz-Tokenizer und Normalizer implementiert.

    • Erkennung: RD1..RD4, R1..R4, S1..S4, D2..D4, Kombis R{n}D{m}, R{n}S{k}, RDS4 (rechts-/letztes Vorkommen gewinnt).
    • Normalisierung: S*→R*, D*→RD*, RD4→RD3 (bis Enum verfügbar), R{n}S{k}→Rmax(n,k), R{n}D{m}→R{n}+RD{m}.
    • Integration: ZnsReiterParser füllt lizenzen-Liste (1:n) entsprechend und leitet lizenzKlasse bei fehlendem 4SpaltenCode aus Token ab.
    • QA: Neue Unit-Tests (Tokenizer) für Beispiele R2S3, R2D4, RD2 u. a.; alle Parser-Tests grün.
  • Core: Modularisierte ZNS-Parser eingeführt (ZnsVereinParser, ZnsReiterParser, ZnsPferdParser, ZnsFunktionaerParser) zur Verbesserung der Wartbarkeit und Unterstützung von Einzelimporten.

  • Fix: SQL-Migrationsfehler in V010 behoben, indem die Umbenennung der Spalte name in verein_name durch einen idempotenten DO-Block abgesichert wurde (behebt "Unable to resolve column 'name'").

  • Infrastructure: Datenbank-Migration V010 hinzugefügt, um das Schema final mit den Exposed-Modellen zu synchronisieren.

  • Infrastructure: Datei-Archivierung für hochgeladene ZNS-ZIP-Dateien im ZnsImportOrchestrator implementiert.

  • Infrastructure: ZnsImportService vollständig auf die neuen spezialisierten Parser umgestellt und als Spring-Bean im Backend registriert.

  • QA: Umfassende Test-Suite ZnsParserTest.kt mit realen ZNS-Daten (Hämmerle, Neuwirth, etc.) erstellt; Korrektur der Extraktions-Logik für Mitgliedsnummern (Position 147) und Funktionär-Daten (RICHT01).

  • QA: Neue Betriebsanleitung für ZNS-Importer Tests erstellt: docs/07_Infrastructure/runbooks/ZNS_Importer_Test_Manual.md.

  • Infrastructure: MasterdataDatabaseConfiguration korrigiert: Expliziter Aufruf von Database.connect() hinzugefügt, um Abstürze beim Anwendungsstart ("No database specified") zu beheben.

  • Infrastructure: application.yml im masterdata-service vervollständigt (DataSource-Konfiguration mit pg-user/pg-password und Flyway-Aktivierung).

  • Domain: Legacy-Spezifikationen für ZNS-Schnittstellen (Import/Export) formalisiert:

    • docs/03_Domain/02_Reference/Legacy_Specs/OETO-2026_Meldestelle_Pflichtenheft_V2.4.md (Basis-Satzarten A-N)
    • docs/03_Domain/02_Reference/Legacy_Specs/OETO-2026_Meldestelle_Erweiterung-Schnittstelle_2014.md (XML-Erweiterung, LinkID-Logik)
  • QA B-2: OnboardingValidator-Objekt extrahiert; OnboardingValidatorTest.kt (17 Unit-Tests: Pflichtfeld-Guard, Doppelklick-Schutz, Abbrechen-Reset, rememberSaveable-Regression)

  • QA B-3: AbteilungsRegelServiceTest.kt um 14 Tests erweitert: CSN-C-NEU ≤95 cm / ≥100 cm Pflicht-Teilung, ORGANISATORISCH, SEPARATE_SIEGEREHRUNG, Caprilli-Regression, Grenzfälle 90/110 cm

  • Domain: AbteilungsTeilungsTypE um ORGANISATORISCH und SEPARATE_SIEGEREHRUNG erweitert

Behoben

  • Masterdata/Infrastructure: Kompilierfehler in AltersklasseRepositoryImpl durch Vereinheitlichung der Exposed-Tabellendefinition behoben:

    • AltersklassenTableAltersklasseTable
    • Spalte altersklassen_codealtersklasse_code
    • Tabellenname altersklassenaltersklasse
  • Masterdata/API: Fehlendes Interface-Mapping ergänzt: RegulationRepository enthält nun findAllTurnierklassen(); ExposedRegulationRepository implementiert die Methode und RegulationController kompiliert wieder.

  • ZNS-Import: AltersklassenExposedRepository korrigiert (richtiger Domain-Typ AltersklasseDefinition, Mapping von SparteE und Zeitstempeln).

  • Migration V013: Idempotent und robust gemacht. Alle ALTER TABLE ... RENAME-Operationen laufen nun nur, wenn die Quell-Tabelle existiert (Fix für "Unable to resolve table 'bundesland'/'turnierklasse'").

  • Lizenz-Validierung: LicenseMatrixServiceImpl um Cross-Discipline-Mapping R↔RD (ÖTO-Äquivalenzen) erweitert. Damit funktionieren Fälle wie Dressur-Starts mit Spring-Lizenz (R1→RD1, R2→RD2, R3/R4→RD3) bzw. umgekehrt konsistent.

  • Domain: Striktere Spartenlizenz-Prüfung in Reiter.hasLizenzForSparte implementiert (RD1..RD3 nur DRESSUR; R1..R4 nur SPRINGEN). Behebt Testfehler „isEligible verweigert Start ohne passende Spartenlizenz“ im LicenseMatrixServiceTest.

Behoben

  • Backend (Entries): Fehlschlagenden Unit-Test berechneStartzeiten sollte Zeiten korrekt aufsummieren korrigiert; der Test berücksichtigt nun den neuen 5-minütigen ÖTO-konformen Puffer nach der Parcoursbesichtigung (§43).
  • Frontend (Desktop): Build-Fehler ("No matching variant") beim funktionaer-feature behoben; fehlendes build.gradle.kts mit JVM-Target und Compose/Koin-Abhängigkeiten ergänzt.
  • Frontend (Desktop): Massive Inkonsistenzen in der Paketstruktur des veranstalter-feature bereinigt; alle Komponenten (ViewModel, Screens, Mocks) auf das Standardpaket at.mocode.frontend.features.veranstalter konsolidiert, um Redeklarationen und Import-Fehler zu beheben.
  • Frontend (Desktop): Kompilierfehler im VeranstalterDetailScreen durch korrekte Paket-Referenzierung des FakeVeranstaltungStore gelöst.

Dokumentation

  • Masterdata/Docs: REITER_LIZENZEN.md überarbeitet:
    • Strikte Sparten-Trennung dokumentiert (RD1..RD3 nur Dressur; R1..R4 nur Springen).
    • Dressur-Tabelle korrigiert (R-Lizenzen entfernen; RD-Pflicht je Klasse).
    • Validierungslogik ergänzt (2-stufig: Spartenlizenz → Max-Turnierklasse; R↔RD Mapping nur zur Kappung, nicht zur Eligibility).
    • Vielseitigkeit (CCN/CCI) ergänzt: kumulative Anforderungen (Dressur RD* UND Springen R* je Klasse); Startkartenregel für Einsteiger.
    • Fahren (CAN/CAI) ergänzt: aktueller Systemzustand ohne F*Lizenzen dokumentiert; Teilnahme über Startkarte/Ausschreibung, geplante EnumErweiterung vermerkt.
    • §15Tabelle (kompakt) integriert und auf ÖTOReferenz verlinkt; Bedeutungen „B,C“ und „LP“ erläutert. Hinweis aufgenommen, dass RD4 derzeit nicht als Enum vorhanden ist und wie RD3 behandelt wird.
    • Kombinationsreihen gemäß §15 ergänzt: R1S2, R1S3, R1S4, R2S3, R2S4, R3S4 (neuer Unterabschnitt 2.6 mit Tabelle, identische Spalten wie 2.5).

Behoben

  • Masterdata: Qualifikations-Management für Funktionäre (Richter/Parcoursbauer) professionalisiert: Umstellung von unstrukturiertem Text auf offizielle ÖTO/FEI Master-Daten Referenzen (QualifikationMasterTable).

  • Masterdata: Fehlende Tabelle funktionaer_qualifikation in der Initialisierung beider Services (masterdata und zns-import) ergänzt, um PSQLException während des ZNS-Imports zu beheben.

  • Infrastructure: Start-Probleme des masterdata-service endgültig behoben: Port-Konflikt zwischen Spring Boot (Management/Actuator) und dem Gateway (8081) durch Umzug auf Port 8086 (gemäß Infrastruktur-Vorgaben) gelöst.

  • Infrastructure: Port-Konflikt im masterdata-service durch Trennung der Bind-Adressen (Spring: 127.0.0.1, Ktor: 0.0.0.0) und Bereinigung verwaister Prozesse stabilisiert.

  • Core: Veraltete ZnsLegacyParsersTest.kt entfernt; alle Tests sind nun in ZnsParserTest.kt konsolidiert.

  • Domain: Fehlschlagenden LicenseMatrixServiceTest behoben; fehlende reiterLizenz-Daten in Test-Reitern ergänzt und Fallback-Logik in LicenseMatrixServiceImpl für spartenübergreifende Lizenzen (z.B. Springlizenz für Dressur-Basis) stabilisiert.

  • Infrastructure: Fehlschlagenden RegulationSeedVerificationTest behoben; Testdaten an das neue Modell (reiterLizenz Feld) angepasst.

  • Infrastructure: Kompilierfehler 'Unresolved reference lizenzKlasse' in ReiterExposedRepository behoben; fehlendes Feld lizenzKlasse zu ReiterTable und Datenbank-Migration V010 hinzugefügt.

  • Onboarding: rememberrememberSaveable für geraetName, sharedKey, znsStatus in OnboardingScreen.kt ( Felder gingen bei Zurück-Navigation verloren)

  • AbteilungsRegelService: CSN-C-NEU Pflicht-Teilungslogik implementiert (≤95 cm: ohne/mit Lizenz; ≥100 cm: R1/R2+); SparteE-Import ergänzt

  • Desktop-Packaging konfiguriert: .deb (Linux), .msi (Windows), .dmg (macOS)

  • Zentrale Versionsdatei version.properties (Single Source of Truth für SemVer)

  • Automatisches Git-Tagging via CI/CD (release.yml Gitea Actions Workflow)

  • CHANGELOG.md eingeführt (dieses Dokument)


[1.0.6-SNAPSHOT] — 2026-04-10

Hinzugefügt

  • Entries-Domain: Strukturiertes Abteilungs-Warnungssystem gemäß ÖTO § 39 implementiert.
    • Neues Value Object AbteilungsWarnung und Enum AbteilungsWarnungCodeE für präzise Fehlermeldungen und ÖTO-Referenzen.
    • Erweiterung von Bewerb um die Methode validateStrukturellesTeilung zur Prüfung vorgeschriebener Abteilungsstrukturen (z.B. Lizenz-Trennung bei CSN-C-NEU, Stilspringen, Caprilli).
    • Umstellung des CompetitionWarningService und AbteilungsRegelService auf das neue strukturierte Warnungsmodell.
  • Entries-Service: Erweiterung der REST-API (BewerbeController) um die Auslieferung von Warnungen in den DTOs (BewerbResponse).
  • Frontend (Turnier-Feature): Visuelle Integration der Abteilungs-Warnungen in der Bewerbe-Liste.
    • Anzeige eines Warn-Icons (gelb) bei Regelverstößen.
    • Tooltip-Funktionalität zur Anzeige der detaillierten Warnungstexte und ÖTO-Paragraphen.
    • Erweiterung des BewerbUiModel und Repositories zur Unterstützung der Warnungs-Metadaten.

Geändert

  • QA: AbteilungsRegelServiceTest und BewerbTest auf das neue Warnungssystem aktualisiert und um Tests für strukturelle Teilungen (CSN Stilspringen, Caprilli) erweitert.
  • KMP: Korrektur von veralteten Instant-Deprecations in Testklassen (kotlin.time.Instant).

[1.0.5-SNAPSHOT] — 2026-04-06

Geändert

  • Masterdata: Bereinigung und Standardisierung von Masterdaten-Tabellen (Mehrzahl-Konvention):
    • bundesland -> bundeslaender
    • qualifikation_master -> funktionaers_qualifikationen
    • reiter_lizenz -> reit_lizenzen
    • turnierklasse -> turnier_klassen
  • Seeding: Umfassende Erweiterung der Seeder für Funktionärs-Qualifikationen, Turnierklassen und Turnier-Sparten gemäß ÖTO.
  • Data Modeling: Einführung der Tabelle turnier_sparten und Entfernung der redundanten reiter_sparte.
  • Infrastructure: Datenbank-Migration V013 implementiert alle Schema-Änderungen und Umbenennungen.

[1.0.4-SNAPSHOT] — 2026-04-06

Hinzugefügt

  • Reiter-Lizenzen: Strukturierte Speicherung von Lizenzen (STARTKARTE, REITERLIZENZ, FAHRLIZENZ) in einer 1:n Relation (ReiterLizenzTable).
  • Altersklassen: Einführung von Enums (ReiterAltersKlasseE) für präzise Filterung und Validierung im Domain-Modell und Parser.
  • Mitgliedsnummer: Validierungs-Logik gemäß ÖTO-Spezifikation (Bundesland-Präfix 1-9) in Reiter.kt implementiert.
  • ZNS-Import: ZnsReiterParser erweitert, um Lizenzen und Altersklassen-Enums direkt aus LIZENZ01.DAT zu extrahieren.
  • Persistenz: ReiterExposedRepository unterstützt nun das transaktionale Speichern und Laden der 1:n Lizenzen.

[1.0.3-SNAPSHOT] — 2026-04-06

Hinzugefügt

  • Masterdata: Refactoring der Reiter-Stammdaten (LIZENZ01.DAT). Bundesland, Verein und Nation werden nun über Master-Tabellen referenziert.
  • Domain: Validierungslogik für die 8-stellige OEPS-Mitgliedsnummer im Reiter-Modell implementiert.
  • Infrastructure: Neue Tabellen reiter_lizenz (1:n Beziehung) und Migration V012 zur Schemaanpassung und Datenbereinigung eingeführt.
  • ZNS-Import: Automatisches Auflösen von Relationen (Verein nach Name, Bundesland nach Nummer, Nation nach ISO-Code) während des Reiter-Imports.

Behoben

  • Infrastruktur: Consul Health-Check für masterdata-service korrigiert (Port 8086 für Actuator).
  • Masterdaten: MasterdataSeeder für Nationen und Bundesländer hinzugefügt, um Datenvollständigkeit nach Volume-Cleanup sicherzustellen.
  • Datenintegrität: Heilungs-Logik (fixReiterForeignKeys) implementiert, die Reiter-Datensätze nachträglich mit Masterdaten verknüpft.
  • Code-Qualität: Redundante BundeslandTable Definition in ReiterTable.kt entfernt.
  • Infrastruktur: BeanDefinitionOverrideException im zns-import-service durch Konsolidierung der Repositories in RepositoryConfiguration behoben.
  • Service-Discovery: Fehlende Consul-Registrierung des masterdata-service durch Hinzufügen der Discovery-Dependency und Konfiguration behoben.
  • Build: Kompilierfehler in BundeslandExposedRepository.kt behoben (inkonsistente Rückgabetypen im BundeslandRepository-Interface).
  • Infrastruktur: Fehlendes Autowiring im zns-import-service durch explizite Bean-Definitionen für alle Repositories in ZnsImportServiceApplication.kt behoben.
  • Domain: Kompilierfehler in Bundesland.kt behoben (uninitialisierte Eigenschaft bundeslandId entfernt).
  • Migration: SQL-Syntaxfehler in V012 behoben (korrekter Fremdschlüssel-Constraint für reiter_lizenz und Wiederherstellung des DO $$-Blocks).

[1.0.2-SNAPSHOT] — 2026-04-06

Geändert

  • ZNS-Import: ZnsImportService stabilisiert (ZipInputStream-Management korrigiert), um sequentielle Imports in Tests zu ermöglichen.
  • Test-Vollständigkeit: ZnsImportServiceTest korrigiert (Mocking für Reiter-Suche ergänzt, Testdaten für Funktionäre an Int-Parser angepasst). Alle 9 Tests nun grün.
  • Data Modeling: Redundante Kontakt- und Adressdaten aus FunktionaerTable entfernt; stattdessen Verknüpfung zu ReiterTable via reiter_id hinzugefügt. (Bereinigung der Felder erfolgte in V010).
  • Import: ZNS-Importer verknüpft nun Funktionäre automatisch mit vorhandenen Reitern anhand des Namens (Nachname, Vorname).
  • Infrastructure: findByName in ReiterRepository implementiert für effiziente Suche während des Imports.
  • Datenbank: Migration V011 hinzugefügt, um die Fremdschlüsselbeziehung zu etablieren.

[1.0.1-SNAPSHOT] — 2026-04-05

Geändert

  • Masterdata: Funktionär-Datenmodell und API bereinigt und vollständig dokumentiert. Konsistente Verwendung von satzId (statt satzID) in allen Schichten (Domain, Infrastructure, API).
  • Refactoring: DomVerein zu Verein, DomReiter zu Reiter, DomPferd zu Pferd und DomFunktionaer zu Funktionaer umbenannt (Domain, Infrastructure, API, Core).
  • Domain: personId ist nun optional (nullable) bei Verein, Reiter, Pferd und Funktionaer, um ZNS-Initialimporte zu unterstützen.
  • Infrastructure: VereinTable, ReiterTable, HorseTable und FunktionaerTable synchronisiert; personId ist nun optional.
  • API: VereinController, ReiterController, HorseController und FunktionaerController (DTOs/Requests) an die neuen Modelle angepasst.
  • Doku: Ubiquitous_Language.md und MASTER_ROADMAP.md an das neue Namensschema (Reiter, Pferd, Funktionaer) angepasst.

Behoben

  • ZNS-Import: Kompatibilitätsprobleme in ZnsLegacyParsers und ZnsImportService nach Domain-Refactorings behoben (UUID-Person-Referenzen und Enum-Synchronisation).
  • Domain: Felder kurzname und oepsRegionNummer bei Verein entfernt (nicht in VEREIN01.DAT vorhanden).

1.0.0-SNAPSHOT — 2026-04-03

Hinzugefügt

  • Sprint A: Docker-Compose-Setup, Healthchecks für alle Services
  • Sprint B: CI/CD Pipeline für Compose Desktop Tests (headless, Xvfb)
  • Sprint B: Gradle-Build-Optimierungen (Cache, Parallel, Wrapper 9.4.0)
  • Sprint B: Onboarding-Wizard (Veranstalter, Verein, Turnier, Bewerb, Abteilung)
  • Sprint B: BewerbRepository, AbteilungRepository, DefaultTurnierRepository
  • Sprint B: ReiterProfilEditDialog, PferdProfilEditDialog mit MsValidationWrapper
  • Sprint B: ÖTO-Regelwerk als Regulation-as-Data (Lizenz-/Altersmatrix, V008/V009 Migrations)
  • Sprint B: Tenant-Isolation Grundstruktur (Multi-Tenant Postgres-Schemas)
  • Sprint B: Architektur-Tests (:platform:architecture-tests)

Geändert

  • Gradle Wrapper auf 9.3.1 aktualisiert
  • JVM-Toolchain auf Java 25 angehoben