meldestelle/CHANGELOG.md
StefanMoCoAt 7bf89c58d3
Some checks are pending
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Waiting to run
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Waiting to run
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Waiting to run
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Waiting to run
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Waiting to run
Refactor license matrix and tokenizer logic: rename LicenseTable to LizenzTable, replace LicenseMatrixService with LizenzMatrixService, enhance tokenizer with normalized and fallback token handling, improve ZNS import for license extraction, and update related documentation.
2026-04-06 23:52:06 +02:00

15 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

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

  • 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.

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.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