5.1 KiB
AP05 – Befundmodell mit Spec-/Diagnose-Trennung
Ziel
Im Paket domain ein stabiles Befundmodell einführen, das von Anfang an zwischen Spec-Urteil (verbindliches Prüfurteil gemäß Spezifikation) und diagnostischer Weiteranalyse (zusätzliche, das Spec-Urteil nicht verändernde Hinweise) unterscheidet. Dieses Modell ist das Herzstück für alle nachfolgenden Meilensteine.
Der bestehende Typ de.gecheckt.asv.validation.model.ValidationResult wird nicht einfach gelöscht, sondern ersetzt durch ein sauber geschnittenes Domain-Modell. Der alte Typ wird im Rahmen von AP09 eingefroren.
Voraussetzungen
- AP03 (Paketstruktur)
Scope IN
Folgende Typen im Paket de.gecheckt.asv.domain.finding (oder ähnliches Unterpaket von domain):
Severity (Enum)
ERRORWARNINGHINT
FindingKind (Enum)
SPEC— Befund ist Teil des Spec-Urteils, beeinflusstVerdictDIAGNOSTIC— zusätzliche Weiteranalyse, beeinflusstVerdictnicht
FindingLayer (Enum)
ARTIFACT— äußeres Artefakt / DateiebeneTECHNICAL_STRUCTURE— Service-Segmente, KKS, TransportDOMAIN_MODEL— kanonisches Fachmodell (ASVREC/ASVFEH)
Finding (Record)
public record Finding(
FindingKind kind, // SPEC oder DIAGNOSTIC
Severity severity, // ERROR/WARNING/HINT
FindingLayer layer, // ARTIFACT/TECHNICAL_STRUCTURE/DOMAIN_MODEL
String ruleId, // interne Regel-ID, optional null
String officialErrorCode, // offizieller Fehlercode, optional null
String segmentType, // z.B. "UNB", optional
Integer segmentIndex, // optional
String fieldId, // z.B. "UNB_0020", optional
String rawValue, // Rohwert, optional
Integer position, // Byte-/Zeichenposition, optional
String messageReference, // UNH 0062 bei Nachrichtenbezug, optional
String germanMessage // deutscher Befundtext
) {}
Records mit vielen optionalen Feldern sind unschön — als Alternative ist eine reguläre Klasse mit Builder erlaubt, solange sie unveränderlich (final) ist und die gleichen Felder trägt. Wichtig ist: unveränderlich und mit allen Metadaten aus technik-und-architektur.md Abschnitt „Befundarten".
Verdict (Enum)
VALID— keine Spec-ERROR-BefundeINVALID— mindestens ein Spec-ERROR-BefundOPERATIONAL_ERROR— Bedienfehler (Exit-Code 2)
ValidationReport (Klasse)
- unveränderlich
- enthält:
List<Finding> findings(alle Befunde, SPEC und DIAGNOSTIC gemischt, Reihenfolge erhalten)- Methode
Verdict computeVerdict()— berücksichtigt nurkind == SPECundseverity == ERROR - Methode
List<Finding> specFindings()— filtert aufkind == SPEC - Methode
List<Finding> diagnosticFindings()— filtert aufkind == DIAGNOSTIC - Methode
boolean hasSpecErrors() - Metadaten:
String fileName,Instant timestamp
- invariant: eine
DIAGNOSTIC-SeverityERRORdarf das Verdict niemals aufINVALIDsetzen. Dies ist per Unit-Test abzusichern.
Unit-Tests
ValidationReportohne Befunde →Verdict.VALIDValidationReportmit einem SPEC-ERROR →Verdict.INVALIDValidationReportmit einem DIAGNOSTIC-ERROR →Verdict.VALID(dieser Test ist kritisch!)ValidationReportmit SPEC-WARNING →Verdict.VALID(nur ERROR zählt)specFindings()/diagnosticFindings()filtern korrekt- Unveränderlichkeit:
findings-Liste ist nicht modifizierbar
Scope OUT
- Integration des neuen Modells in den bestehenden Lauf (kommt in AP06)
- Löschen oder Umbenennen der alten
validation.model.ValidationResult-Klasse (das ist Teil von AP09) - Berichtserzeugung (Text-Rendering), Bericht-Format, Konsolenausgabe (kommt in AP07)
- Architekturtest (kommt in AP10)
Schritte
- Branch
m1/ap05-befundmodell - Paket
de.gecheckt.asv.domain.findinganlegen - Enums und Klassen implementieren
- Unit-Tests schreiben, mindestens die sechs oben genannten
mvn clean verifygrün bekommen- Commit
M1-AP05: Befundmodell mit Spec-/Diagnose-Trennung - Abschlussbericht schreiben
Abnahmekriterien
- Paket
domain.findingenthält alle oben genannten Typen - Der Test „DIAGNOSTIC-ERROR ergibt VALID" ist grün und wird im Bericht explizit genannt
ValidationReport.findingsist unveränderlich (Test vorhanden)- alle Metadaten-Felder aus
technik-und-architektur.mdAbschnitt „Befundarten" sind imFinding-Typ vorhanden mvn clean verifyist grün- keine Änderung an
validation.model.ValidationResult(Altmodell) - Abschlussbericht liegt vor
Rest-Risiken und offene Punkte
- Wir haben jetzt zwei parallele Ergebnis-Typen: den alten
ValidationResultund den neuenValidationReport. Das ist Absicht bis AP09, wo die alte Logik sauber eingefroren wird. - Das Befundmodell ist bewusst keine Hierarchie (Datei → Schicht → Nachricht → Befund), sondern eine flache Liste mit Metadaten. Die hierarchische Berichtserzeugung passiert später auf Basis dieser Metadaten in M9. Für M1 genügt die flache Struktur.
Bericht
docs/arbeitspakete/m1/berichte/AP05-bericht.md nach templates/ap-bericht.md.