Files
asv-format-validator/docs/specs/meilensteine.md

508 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Meilensteine
> **Dokumentversion:** v3
> **Stand:** 08.04.2026
> **Status:** verbindliche Meilensteinstruktur für die Implementierung von Version 1
> **Projekt:** ASV-Format-Validator
> **Primärquelle:** `Spec.docx` Technische Anlage ASV 1.09, Stand 09.10.2025, anzuwenden ab Leistungserbringungsquartal 2/2026
> **Begleitdokumente:** `fachliche-anforderungen.md` v4, `technik-und-architektur.md` v5
## 1. Zweck dieses Dokuments
Dieses Dokument untergliedert die Implementierung des Projekts **ASV-Format-Validator** in fachlich und technisch sinnvolle **Meilensteine** für Version 1.
**Rangfolge der Dokumente:**
1. `Spec.docx` ist die normative fachlich-technische Wahrheit. Bei jeder Kollision gilt die Spezifikation.
2. `fachliche-anforderungen.md` v4 ist der verbindliche fachliche Soll-Rahmen.
3. `technik-und-architektur.md` v5 ist der verbindliche technische Soll-Rahmen.
4. Dieses Dokument **strukturiert lediglich die Umsetzung** der oben genannten Grunddokumente in eine sinnvolle Reihenfolge. Es ersetzt sie nicht, reduziert sie nicht und darf ihnen nicht widersprechen.
Dieses Dokument beschreibt **keine Arbeitspakete**, **keine KI-Prompts** und **keine konkreten Implementierungsschritte**, sondern nur die empfohlene Reihenfolge und Abgrenzung der größeren Umsetzungsschritte für Version 1.
## 2. Leitplanken für die Meilensteinbildung
Für alle Meilensteine gelten verbindlich folgende Grundsätze:
1. Es geht **ausschließlich um Version 1**.
2. Die Zielbasis ist **genau eine Spezifikationsversion**: Technische Anlage ASV 1.09.
3. Themen aus `Ausblick.md` sind **nicht Bestandteil** dieser Meilensteinplanung.
4. Jeder Meilenstein muss in einem **grünen, stabilen Zwischenstand** enden.
5. Die Architektur wird **evolutionär** weiterentwickelt, nicht in einem riskanten Komplettumbau.
6. Fachliche Regeln, technische Parserlogik, Berichtserzeugung und Infrastruktur bleiben **klar getrennt**.
7. Bereiche, die laut Anforderungen in V1 **nicht belastbar prüfbar** sind (`V1-N`), werden nicht versehentlich als harte Pflichtvalidierung umgesetzt. Bereiche mit Kategorie `V1-T` werden nur so weit aktiv geprüft, wie es lokal belastbar möglich ist.
8. Die Trennung zwischen **Spec-Urteil** und **diagnostischer Weiteranalyse** ist von Anfang an architektonisch verankert, nicht erst am Ende eingeführt.
## 3. Überblick über die Meilensteinfolge
| Meilenstein | Titel | Hauptnutzen |
|---|---|---|
| **M1** | Projektfundament, Logging und Ergebnismodell | startbare CLI, stabile Grundarchitektur, Logging-Adapter, Befundmodell mit Spec-/Diagnose-Trennung |
| **M2** | Artefaktschicht, Dateizugriff, Dateinamen und globale Rahmenregeln | sauberes Einlesen, ISO-8859-15-Basis, Dateinamensschemata, Partnersicht |
| **M3** | EDIFACT-Serviceebene und Transportstruktur | belastbare Strukturprüfung für `UNA`, `UNB`, `UNH`, `UNT`, `UNZ` inkl. Service-Crosschecks |
| **M4** | KKS-Auftragssatz / AUF | vollständiger eigener Prüfpfad für Auftragsdateien und KKS-Crosschecks |
| **M5** | ASVREC-Kernmodell und feldgenaue Einzelregeln | fachlich belastbare Validierung regulärer ASV-Abrechnungen |
| **M6** | Beziehungsregeln, Summenlogik und Storno | Falllogik, Crosschecks und strukturierte Storno-Behandlung |
| **M7** | ASVFEH und Fehlernachrichtenlogik | sauber getrennte Validierung von Fehlerdateien und `FHL`-Segmenten |
| **M8** | PKCS#7, Krypto und Tiefenprüfung verschlüsselter Artefakte | Prüfung transportnaher bzw. verschlüsselter Eingaben bis zur inneren Nutzlast |
| **M9** | Bericht, Diagnose, Produktreife und Release-Härtung | final nutzbare V1 mit stabiler Ausgabe, Qualitätssicherung und Dokumentation |
## 4. Detaillierte Meilensteine
---
## M1 Projektfundament, Logging und Ergebnismodell
### Ziel
Es entsteht der tragfähige technische Sockel für die weitere Implementierung, inklusive **Logging-Adapter** und **Befundmodell mit eingebauter Spec-/Diagnose-Trennung**. Die eigentliche ASV-Fachvalidierung ist hier noch nicht enthalten. Das Grundgerüst ist so geschnitten, dass alle späteren Meilensteine ohne architektonischen Umbau darauf aufbauen können.
### Inhalt
- Zielstruktur gemäß hexagonaler Architektur innerhalb des bestehenden Maven-Projekts anlegen bzw. schärfen (Paketzuschnitt gemäß `technik-und-architektur.md`)
- manuellen Bootstrap mit Constructor Injection herstellen; kein DI-Framework
- CLI-Grundaufruf mit **genau einer Eingabedatei als Positionsargument** herstellen
- internes Ergebnis- und Befundmodell als stabiles Grundgerüst einführen; das Befundmodell unterscheidet **von Anfang an**:
- **Spec-Urteil** (verbindliches Prüfurteil gemäß Spezifikation)
- **diagnostische Weiteranalyse** (zusätzliche Befunde, die das Spec-Urteil niemals verändern)
- Befundarten Fehler / Warnung / Hinweis strukturell im Modell verankern
- Befund-Metadaten als Felder vorsehen: Artefaktschicht, Prüfstufe, Prüfbereich, Segmenttyp, Segmentindex, Feld-ID, Rohwert, Position, Nachrichtenbezug, optionaler offizieller Fehlercode
- **Logging-Adapter** einführen:
- SLF4J als Fassade
- Log4j2 als Implementierungs-Bindung
- konkrete Log4j2-Bindung **ausschließlich** im Bootstrap und im Logging-Adapter sichtbar
- Trennung zwischen fachlichem Kern, Infrastruktur, Bericht und Logging von Anfang an sauber festziehen
- Grundverhalten für Bericht- und Log-Datei im Eingabeverzeichnis etablieren (Berichtdatei `.txt`, Log-Datei `.log`, beide UTF-8)
- Suffix-Logik `_v1`, `_v2`, … für Mehrfachläufe auf denselben Dateibasisnamen etablieren
- Exit-Code-Grundgerüst (`0`, `1`, `2`) implementieren
- Minimalbericht auch für Bedien- oder Zugriffsfehler vorsehen (Exit-Code `2`)
### Noch nicht Ziel von M1
- echte EDIFACT-Nachrichtenvalidierung
- KKS-Feldlogik
- ASVREC-/ASVFEH-Fachmodell
- PKCS#7-Verarbeitung
- inhaltliche Bericht-Gestaltung
### Abnahme von M1
- Anwendung ist als JAR unter Windows mit Java 21 startbar
- Eingabedatei wird technisch entgegengenommen; falsches oder fehlendes Argument führt zu Exit-Code `2` mit Minimalbericht
- Bericht- und Log-Datei werden im Eingabeverzeichnis mit korrekter Suffix-Logik erzeugt
- Log4j2-Bindung ist außerhalb von Bootstrap und Logging-Adapter nicht sichtbar
- Befundmodell trennt Spec-Urteil und Diagnose strukturell
- Build und Tests sind grün
---
## M2 Artefaktschicht, Dateizugriff, Dateinamen und globale Rahmenregeln
### Ziel
Die Anwendung kann lokale Eingabedateien robust lesen, technisch einordnen und als äußeres Artefakt sauber modellieren. Die globalen fachlichen Rahmenregeln und die Dateinamenskonventionen der Spezifikation sind als harte Prüfregeln umgesetzt.
### Inhalt
- read-only Dateisystemzugriff in einem Infrastruktur-Adapter kapseln
- Eingaben konsequent mit **ISO 8859-15** behandeln; keine Plattform-Default- oder stillschweigende UTF-8-Dekodierung
- äußeres Artefaktmodell aufbauen:
- physische Datei
- Dateiname
- Extension
- mutmaßliche Artefaktart
- erkannte Schichten
- **automatische Dateityperkennung** und **explizite Benutzervorgabe** als gleichrangige Eingänge umsetzen; bei Widerspruch wird die Benutzervorgabe verarbeitet und zusätzlich eine Warnung erzeugt (kein Abbruch allein wegen Widerspruch)
- **Dateinamensschemata gemäß Spezifikation als harte Prüfregeln** umsetzen:
- unverschlüsselt: `B<VKNR><Jahr><Quartal><Zähler>` (11 Stellen)
- verschlüsselt: `<IK-Sender>_<IK-Kasse>_<E|T>ASV0<Zähler>`
- Auftragsdatei: identischer Basisname wie die zugehörige verschlüsselte Datei, Endung `.AUF`
- **Übermittlungszähler** prüfen: Wertebereich `001``999`, 3-stellig numerisch; V1 prüft **keine** quartalsübergreifende Folgesequenz, markiert diese Grenze aber als bewusste V1-Einschränkung im Bericht
- **globale fachliche Rahmenregeln** umsetzen (aus `fachliche-anforderungen.md` §5.1):
- ISO 8859-15 als Verfahrens-Zeichensatz, nur darstellbare Zeichen
- ASV-Dateien werden unkomprimiert übertragen
- eine Datei pro Kasse, keine kassenübergreifende Bündelung
- keine erzwungene Sortierreihenfolge der Nachrichten innerhalb einer Datei
- exakte Partnerdatei-Ableitung für die zugehörige `.AUF` bzw. die zugehörige Transportdatei herstellen (deterministisch, nicht heuristisch)
- fehlende oder nicht passende Partnerdatei als Warnung modellieren, nicht als Abbruch
### Noch nicht Ziel von M2
- tiefe Service-Segment-Validierung
- KKS-Feldprüfung
- fachliche Segmentbeziehungen in ASVREC
### Abnahme von M2
- äußere Datei wird robust gelesen, mit ISO 8859-15 dekodiert und klassifiziert
- Dateinamensschemata werden feldgenau geprüft
- Übermittlungszähler-Wertebereich wird geprüft und die V1-Einschränkung ist im Bericht kenntlich
- die vier globalen Rahmenregeln aus §5.1 sind als eigene Regelbausteine umgesetzt
- Partnerdateien werden deterministisch gesucht, nicht heuristisch geraten
- Widerspruch zwischen Auto-Erkennung und Benutzervorgabe wird als Warnung erzeugt, ohne Abbruch
- Build und Tests sind grün
---
## M3 EDIFACT-Serviceebene und Transportstruktur
### Ziel
Die Anwendung kann die EDIFACT-Hüllstruktur zuverlässig parsen und die lokalen Prüfregeln der Stufen 1 und 2 auf Service-Ebene belastbar anwenden.
### Inhalt
- Parsing für `UNA`, `UNB`, `UNH`, `UNT`, `UNZ`
- `UNA` als optionales Segment behandeln; Fallback auf die ASV-konformen Standardtrennzeichen, wenn `UNA` fehlt
- Prüfung der Trennzeichen und ihrer Gültigkeit
- technische Segmentgrenzen, Nachrichtenhüllen und Nachrichtenanzahl bestimmen
- **Service-Crosschecks** umsetzen:
- **physischer Dateiname ↔ `UNB_0020`** (`UNB_0020` ist die Übertragungsreferenz bzw. der Dateiname der Übertragung, nicht die Senderkennung)
- `UNB_0020``UNZ_0020` (Referenzgleichheit von Übertragungskopf und -ende)
- `UNH_0062``UNT_0062` je Nachricht (Referenzgleichheit von Nachrichtenkopf und -ende)
- `UNZ_0010` (Nachrichtenzähler) ↔ tatsächliche Anzahl der `UNH`/`UNT`-Paare
- Testindikator `UNB 0035`: Echtdaten-/Testdaten-Konsistenz mit der `E`/`T`-Kennung im physischen Dateinamen; Wert `1` nur für Testübertragungen
- Konsistenzprüfungen, die den KKS-Auftragssatz voraussetzen (insbesondere die Abstimmung zwischen `UNB 0035`/Dateiname und KKS-`VERFAHREN_KENNUNG`), sind **nicht** Bestandteil von M3 und werden in M4 zusammen mit den KKS-Crosschecks umgesetzt
- unbekannte oder fremde Segmente nicht vorschnell verwerfen, sondern diagnostisch sichtbar halten
- **Spec-Urteil und diagnostische Weiteranalyse strikt trennen** (Befundklassifizierung bereits beim Erzeugen)
- parse-nahe Sofortprüfungen bleiben auf **strukturelle und technische** Befunde beschränkt (Lesbarkeit, Zeichensatz, Trennzeichen, grobe Segment- und Feldfehler); fachliche Regeln, feldwertbezogene Plausibilitäten und Bezugskontrollen gehören **nicht** in den Parser
### Noch nicht Ziel von M3
- KKS-Auftragssatz im Detail
- fachliche Feldregeln der Nutzdaten
- Katalog- oder Bestandsprüfungen
### Abnahme von M3
- Service-Segmente werden robust erkannt und geparst (mit und ohne `UNA`)
- die in M3 genannten Crosschecks sind umgesetzt und als eigene Regeln nachweisbar
- typische Stufe-1- und Stufe-2-Strukturfehler können belastbar gemeldet werden
- Build und Tests sind grün
---
## M4 KKS-Auftragssatz / AUF
### Ziel
Der KKS-Auftragssatz wird als eigenständiger, vollwertiger Prüfgegenstand umgesetzt und nicht als Anhängsel der Nutzdatendatei behandelt. Eine `.AUF`-Datei kann auch **eigenständig** (als einzige Eingabedatei pro Lauf) validiert werden.
### Inhalt
- Parser für den festen KKS-Auftragssatz aufbauen
- **vollständige Umsetzung der KKS-Feldregeln** gemäß `fachliche-anforderungen.md` §9. Die nachfolgende Liste ist nicht abschließend, sondern nennt zentrale Anker; maßgeblich ist §9.
- zentrale Festwerte und Strukturprüfungen:
- `IDENTIFIKATOR = 500000`
- `VERSION = 01`
- `LÄNGE_AUFTRAG = 00000348`
- `SEQUENZ_NR = 000` (keine Teillieferungen)
- `VERFAHREN_KENNUNG`: Stelle 20 `E`/`T`, Stellen 2123 `ASV`, Stelle 24 `0`
- `VERFAHREN_KENNUNG_SPEZIFIKATION` als **Kann-Feld**: Blank zulässig; wenn belegt, nur aus der definierten Wertemenge (`ASVA0` für Abrechnung, `ASVF0` für Fehlermeldung)
- `TRANSFER_NUMMER`: Wertebereich `001``999`
- `DATUM_ERSTELLUNG`: 14-stellig `JJJJMMTThhmmss`, formal prüfen
- `DATEIVERSION = 000000`
- `KORREKTUR = 0`
- `FEHLER_NUMMER = 000000`, `FEHLER_MASSNAHME = 000000`
- `ZEICHENSATZ = I5` (formaler Anker für die ISO-8859-15-Annahme der gesamten Anwendung)
- `KOMPRIMIERUNG = 00`
- `VERSCHLÜSSELUNGSART = 03`
- `ELEKTRONISCHE_UNTERSCHRIFT = 03`
- **Kommunikationspartner-Felder** (`ABSENDER_EIGNER`, `ABSENDER_PHYSIKALISCH`, `EMPFÄNGER_NUTZER`, `EMPFÄNGER_PHYSIKALISCH`): strukturell und formal auf IK-Format prüfen. Eine inhaltliche Kommunikationspartnerprüfung ist ohne Referenzbestände in V1 nicht belastbar möglich und daher nicht Gegenstand von M4 (`V1-T`)
- Kann-Felder des KKS nach Nichtbelegungsregeln prüfen:
- numerisch → Nullfüllung (`HEX 30`)
- alphanumerisch → Blankfüllung (`HEX 20`)
- **KKS-Crosschecks**:
- `TRANSFER_NUMMER` ↔ Zähler im physischen Dateinamen
- **Dateinamensbezug** (Begriffsklärung):
- der **physische Dateiname** der verschlüsselten Übertragungsdatei folgt dem Schema `<IK-Sender>_<IK-Kasse>_<E|T>ASV0<Zähler>`
- die zugehörige **Auftragsdatei** trägt denselben physischen Basisnamen und endet auf `.AUF`
- `UNB_0020` trägt, sobald die EDIFACT-Schicht vorliegt, die Übertragungsreferenz und entspricht dem Dateinamen der Übertragung
- die **KKS-`DATEINAME`**-Angabe im Auftragssatz entspricht dem **unverschlüsselten** Dateinamen nach dem Schema `B<VKNR><Jahr><Quartal><Zähler>`
- zu prüfen sind: KKS-`DATEINAME` gegen den aus Schema und Kontext abgeleiteten unverschlüsselten Dateinamen sowie soweit beide Schichten vorliegen die Konsistenz zwischen physischem Dateinamen der Übertragung, `UNB_0020` und KKS-`DATEINAME`
- `DATEIGRÖSSE_NUTZDATEN` gegen die tatsächliche Bytegröße der unverschlüsselten Nutzdatendatei, soweit die unverschlüsselte Schicht lokal vorliegt
- `DATEIGRÖSSE_ÜBERTRAGUNG` gegen die tatsächliche Bytegröße der verschlüsselten Übertragungsdatei
- Echtdaten-/Testdaten-Konsistenz zwischen Dateiname, KKS-`VERFAHREN_KENNUNG` und soweit vorhanden `UNB 0035`
### Noch nicht Ziel von M4
- vollständige fachliche ASVREC-Regelvalidierung
- ASVFEH-Fachlogik
- PKCS#7-Tiefenprüfung
### Abnahme von M4
- `.AUF`-Dateien sind eigenständig validierbar
- die Regeln aus `fachliche-anforderungen.md` §9 sind umgesetzt
- KKS-Festwerte und Feldlogik sind belastbar geprüft
- KKS-Crosschecks funktionieren technisch sauber
- AUF-bezogene Befunde sind im Ergebnis klar von EDIFACT-Nutzdaten-Befunden getrennt
- Build und Tests sind grün
---
## M5 ASVREC-Kernmodell und feldgenaue Einzelregeln
### Ziel
Reguläre ASV-Abrechnungsnachrichten (`ASVREC`) werden fachlich auf Segment- und Feldebene belastbar validierbar, soweit dies lokal ohne Referenzbestände möglich ist.
### Inhalt
- kanonisches internes Modell für `ASVREC` aufbauen
- Segmentabbildung für die ASVREC-Nutzsegmente gemäß Spezifikation: `IFA`, `DGN`, `LEA`, `SAC`, `GEN`, `OPA`, `REA`, `IVA`
- feldgenaue Regeln gemäß Fachlichen Anforderungen umsetzen, soweit in V1 lokal belastbar
- Muss-/Kann-Logik und Vorkommensregeln pro Segment und Feld umsetzen
- formale Prüfungen für Typ, Länge, Format, Schlüsselwerte und Sonderformate umsetzen
- **Versichertennummer-Strukturprüfung** (`IVA 8.3.1`) umsetzen:
- Stelle 1: Alpha `A``Z` ohne Umlaute
- Stellen 29: numerisch
- Stelle 10: Prüfzifferstelle vorhanden (keine algorithmische Prüfziffernvalidierung in V1)
- zentrale Sonderregeln und Ausnahmen korrekt berücksichtigen diese **dürfen nicht fälschlich als Fehler gemeldet werden**:
- **Geburtsdatum im Ersatzverfahren** (`IVA 8.4.3`): im Format `JJJJMMTT` sind beliebige numerische Werte zulässig, zusätzlich die Platzhalter `00` (unbekannter Tag), `0000` (unbekannter Tag und Monat) und `00000000` (vollständig unbekannt); eine Datumsplausibilisierung in diesem Feld ist unzulässig
- **negative numerische Werte**: das führende Minuszeichen zählt nicht zur maximalen Feldlänge
- **Dezimalzeichen `,`** zählt nicht zur maximalen Feldlänge
- **Pseudo-GOP `88999` sowie regionale Pseudo-GOP** sind für Sachkosten ohne Sachzusammenhang zulässig
- **GOÄ-Sonderfall**: in `3/3.2.1` wird die Pseudo-GOP übertragen, in `3/3.2.5` die zugehörige GOÄ-Ziffer
- **obsolete Muss-Felder `4/4.2.4` und `4/4.2.5`**: füllpflichtig mit beliebigem Inhalt, aber **nicht ausschließlich Leerzeichen**; inhaltlich werden diese Felder nicht geprüft
- **Vertretungs-Teamebene `4`**: Die Spezifikation legt fest, dass bei Teamebene `4` die Teamebene des Vertretenen maßgeblich ist. Eine belastbare Prüfung dieser Regel setzt einen Abgleich mit dem ASV-Verzeichnis voraus und ist in V1 ohne Referenzbestände nicht möglich (`V1-N`). V1 erzwingt deshalb insbesondere keine Plausibilitäten auf Teamebene `4` und markiert diesen Bereich als bewusst nicht geprüft.
- ausdrücklich **keine** referenzbestandsabhängigen Prüfungen erzwingen (`V1-N`-Bereich: ICD, OPS, IK, BSNR, LANR, Teamnummer inhaltlich)
- Bereiche mit `V1-N` im Bericht als „bewusst nicht geprüft" kenntlich machen
### Noch nicht Ziel von M5
- fallübergreifende bzw. komplexe Crosschecks
- Storno-Sonderstruktur
- ASVFEH
- PKCS#7
### Abnahme von M5
- reguläre `ASVREC`-Nachrichten können segment- und feldgenau validiert werden
- die genannten Sonderwerte und Ausnahmen werden nicht fälschlich als Fehler behandelt
- die Versichertennummer-Strukturprüfung ist umgesetzt
- lokal nicht belastbar prüfbare Bereiche bleiben sauber abgegrenzt und als `V1-N` markiert
- das kanonische Modell ist stabil genug für Beziehungsregeln im nächsten Meilenstein
- Build und Tests sind grün
---
## M6 Beziehungsregeln, Summenlogik und Storno
### Ziel
Die fallinterne Logik von ASV-Abrechnungen wird vollständig genug, um reguläre Rechnungen und Storno-Fälle fachlich konsistent zu beurteilen.
### Inhalt
- segmentübergreifende Crosschecks umsetzen, insbesondere:
- `DGN` erforderlich bei regulärer Rechnung (`REA 7.2.4 = 0`)
- `LEA` erforderlich bei regulärer Rechnung
- Summenprüfung Rechnungsbetrag (`REA`) gegen `LEA` und `SAC`, soweit ohne externe Bestände lokal möglich
- Überweiserkontext ↔ Diagnoseart (`IFA 1.3.1` / `DGN 2.2.5`)
- externer und interner Überweiser nicht gleichzeitig (`IFA 1.3.1` / `1.3.2`)
- Pflicht-`GEN` bei bestimmten GOPs
- Regeln für Pseudo-GOP, GOÄ-Sonderfall und Sachkosten-Sonderkonstellationen umsetzen, soweit lokal belastbar
- Konsistenzprüfung zur globalen Regel „eine Datei pro Kasse" auf Basis der lokal verfügbaren Kassenbezüge (Andockstelle an die globale Rahmenregel aus M2)
- **Storno als eigene Strukturvariante von `ASVREC`** sauber modellieren:
- reduzierte Segmentstruktur: nur die in der Spezifikation für Storno vorgesehenen Muss-Segmente und Muss-Felder
- bei Storno **unzulässige** Segmente gemäß Spezifikation: `DGN`, `LEA`, `SAC`, `GEN`, `OPA` ihr Vorhandensein ist ein Fehler
- Rechnungskennzeichen Storno (`REA 7.2.4 = 1`)
- Rechnungsbetrag bei Storno `REA 7.2.1 = 0,00`
- Bezug auf die ursprüngliche Rechnungsnummer, soweit lokal prüfbar
- saubere Vermeidung, dass Storno-Pflichten als „normale Rechnungspflichten" missbraucht werden und umgekehrt
### Noch nicht Ziel von M6
- Validierung von `ASVFEH`
- PKCS#7-Tiefenprüfung
### Abnahme von M6
- reguläre Rechnungen und Storno-Nachrichten werden sauber unterschieden
- die in M6 genannten segmentübergreifenden ASVREC-Regeln greifen
- Summen- und Strukturfehler werden fachlich nachvollziehbar ausgewiesen
- Storno wird als eigene Variante behandelt; bei Storno unzulässige Segmente werden erkannt
- Build und Tests sind grün
---
## M7 ASVFEH und Fehlernachrichtenlogik
### Ziel
Fehlernachrichten (`ASVFEH`) werden als eigener Nachrichtentyp mit eigener Struktur und eigenen Regeln vollständig separat validiert.
### Inhalt
- eigenes kanonisches Modell für `ASVFEH` einführen
- beide Strukturvarianten unterstützen:
- **eigenständige Fehlerdatei** (typisch Stufe 1): `UNB`, `UNH` mit Nachrichtentyp `ASVFEH`, `FHL`, `UNT`, `UNZ`
- **eingebettete Fehlernachricht mit Originalnutzdaten** (typisch Stufen 24): `UNH`, Originalnutzdatensegmente, `FHL`, `UNT`
- `FHL`-Segmentlogik umsetzen (Spezifikation sieht bis zu 99 Vorkommen vor)
- Prüfung von Fehlercode, Fehlertext, Referenzen, Storno-/Korrekturkennzeichen und weiteren `FHL`-Feldern, soweit lokal belastbar
- Regel abbilden: Kann-Datenelemente im `FHL` werden zu Muss-Datenelementen, **wenn** ihre Ermittelbarkeit aus der Fehlersituation belastbar ableitbar ist. V1 setzt dies nur dort als Fehler um, wo diese Ableitbarkeit aus der vorliegenden Datei wirklich gegeben ist.
- **Umgang mit Originalnachricht** explizit umsetzen:
- die mitgelieferte Originalnachricht wird **nicht** als eigenständiger ASVREC-Validierungsgegenstand behandelt
- die Abwesenheit der Originalnachricht bei Prüfstufen 24 ist **kein Fehler**, sondern höchstens ein Hinweis, da die Originalnutzdaten laut Spezifikation nicht lesbar oder nicht syntaxkonform übertragbar gewesen sein dürfen
- die Verfahrensregel „eine Fehlernachricht darf nicht mit einer Fehlernachricht beantwortet werden" wird **nicht** als Validierungsregel umgesetzt, da sie an einer einzelnen isoliert übergebenen Datei nicht prüfbar ist (`V1-N`)
- Vorrang spezifischer offizieller Fehlercodes vor Sammelcodes (`xx999`, `3A998`, `4A998`) berücksichtigen
### Noch nicht Ziel von M7
- PKCS#7-Tiefenprüfung
- finale Berichtsveredelung
### Abnahme von M7
- `ASVFEH` ist sauber von `ASVREC` getrennt
- beide `ASVFEH`-Strukturvarianten werden korrekt erkannt
- `FHL`-Segmente sind feldgenau modelliert und strukturell für bis zu 99 Vorkommen unterstützt
- das Fehlen der Originalnachricht bei Stufen 24 erzeugt keinen harten Fehler
- offizielle Fehlercodebezüge können belastbar an Befunde angehängt werden; Sammelcodes werden nur genutzt, wenn kein spezifischerer offizieller Code einschlägig ist
- Build und Tests sind grün
---
## M8 PKCS#7, Krypto und Tiefenprüfung verschlüsselter Artefakte
### Ziel
Die Anwendung kann verschlüsselte bzw. transportnahe Artefakte technisch verarbeiten und soweit Material nutzbar bereitgestellt wurde bis zur inneren Nutzlast durchsteigen. **Die Tiefenprüfung nutzt die bereits in M3M7 gebaute Validierungskette erneut**; es entsteht keine zweite, parallele Validierungslogik.
### Inhalt
- Krypto-Adapter hinter stabilen Ports einführen; Krypto-Verarbeitung erfolgt **innerhalb der Java-Anwendung**, keine externen Tools oder Binaries
- explizite CLI-Übergabe von Schlüssel- und Passwortmaterial anbinden (konkrete Optionsnamen in der README dokumentiert)
- Basisprüfung verschlüsselter Artefakte auch **ohne** nutzbares Material ermöglichen
- Fallback-Verhalten sauber umsetzen: **Warnung statt Totalabbruch**, wenn Material technisch nicht nutzbar ist
- nach erfolgreicher Entschlüsselung automatisch bis zur inneren fachlichen Schicht weiterarbeiten, indem die bereits bestehende Validierungskette aus M3M7 auf die entschlüsselte Nutzlast angewendet wird
- Mindestalgorithmusprüfungen gemäß technischem Soll-Rahmen modellieren, insbesondere:
- PKCS#7 als Containerformat
- AES-256-CBC als Session Key
- RSA 4096 Bit als Interchange Key
- SHA256withRSAandMGF1 / PSS
- RSA-Exponent Fermat-4 (`2^16 + 1`)
- Nicht-PSS-Altverfahren müssen in V1 nicht aktiv unterstützt werden, dürfen aber als erkannte Abweichung gemeldet werden
- Abweichungen sauber als technische Befunde modellieren
- Krypto-Integration bleibt sauber von Domain und Application entkoppelt; Krypto-Typen sind außerhalb des Krypto-Adapters und des Bootstrap nicht sichtbar
### Noch nicht Ziel von M8
- zusätzliche Transportkanäle
- E-Mail- oder Serverintegration
- Mehrdateimodus
### Abnahme von M8
- verschlüsselte Artefakte sind technisch analysierbar
- mit gültigem Material ist Tiefenprüfung bis zur Nutzlast möglich; das Ergebnis ist konsistent zu dem, was eine Direktvalidierung der unverschlüsselten Datei liefern würde
- ohne nutzbares Material erfolgt nachvollziehbare Basisprüfung mit Warnung, kein Totalabbruch
- Krypto-Integration ist entkoppelt
- Build und Tests sind grün
---
## M9 Bericht, Diagnose, Produktreife und Release-Härtung
### Ziel
Die bis dahin umgesetzte Funktionalität wird zu einer sauberen, benutzbaren und abnahmereifen Version 1 zusammengeführt.
### Inhalt
- finalen hierarchischen Bericht stabilisieren:
- Datei
- Schichten
- Nachrichten/Fälle
- Befunde
- strukturierte Bestandsinformationen in den Bericht aufnehmen: erkannter Dateityp, erkannte Schichten, Anzahl Nachrichten/Fälle, relevante Kopfdaten, Übermittlungszähler, spec-konformes Prüfurteil, zusätzliche diagnostische Auffälligkeiten
- klare Trennung zwischen **Spec-Urteil** und **diagnostischer Weiteranalyse** final durchziehen (architektonisch seit M1 vorhanden, hier nur in der Darstellung konsolidiert)
- Befunde mit Metadaten und soweit eindeutig offiziellen Fehlercodes anreichern; Vorrangregel für Sammelcodes einhalten
- Konsolenausgabe und Berichtdatei fachlich gleichziehen
- technisches Logging sauber vom Bericht trennen
- README und Nutzungsdokumentation vervollständigen, inklusive CLI-Optionsnamen und der PKCS#7-Materialübergabe
- umfangreiche End-to-End-Testartefakte ergänzen: Parser-, KKS-, ASVFEH- und Storno-Fälle mit synthetischen, anonymisierten Testdaten
- letzte Robustheits- und Randfalllücken schließen
### Quality-Gates für Version 1 (verbindlich)
- Build grün
- alle Tests grün
- **Coverage gesamtprojektweit ≥ 85 %**
- **PIT-Mutation-Score gesamtprojektweit ≥ 70 %**
- differenzierte Zielschwellen gemäß `technik-und-architektur.md`:
| Bereich | Coverage | Mutation |
|---|---|---|
| `domain` | ≥ 95 % | ≥ 85 % |
| `application` | ≥ 90 % | ≥ 80 % |
| `adapter.out.*` | ≥ 90 % | ≥ 75 % |
| `adapter.in.cli` | ≥ 80 % | ≥ 60 % |
| `bootstrap` | ausgenommen | ausgenommen |
- Abweichungen von den Schwellwerten sind nur mit dokumentierter Begründung zulässig
### Noch nicht Ziel von M9
- GUI
- Batch-Verarbeitung
- Mehrversionssupport
- Referenzdatenbestände
- spätere Erweiterungen aus `Ausblick.md`
### Abnahme von M9
- Version 1 ist fachlich und technisch in sich geschlossen nutzbar
- Bericht und Logging sind stabil, verständlich und sauber getrennt
- Spec-Urteil wird nie durch Diagnose „grün gerechnet"
- alle Quality-Gates sind erreicht oder bewusst dokumentiert abgewichen
- das Projekt ist bereit für nachgelagerte Feinschnitte in Arbeitspakete
## 5. Empfohlene Umsetzungslogik für die spätere Arbeitspaketbildung
Aus dieser Meilensteinstruktur ergibt sich für die spätere Arbeitspaketbildung folgende sinnvolle Logik:
1. Zuerst immer den **tragfähigen Unterbau** herstellen inklusive Logging und Befundmodell mit Spec-/Diagnose-Trennung.
2. Danach die **äußere technische Struktur**, die **globalen Rahmenregeln** und den **KKS-Auftragssatz** stabilisieren.
3. Erst dann die **fachliche Tiefe von ASVREC** aufbauen.
4. Storno und ASVFEH nicht vermischen, sondern als **eigene Prüfdimensionen** schneiden.
5. PKCS#7 erst aufsetzen, wenn die innere Nutzlastvalidierung bereits stabil steht; die bestehende Kette wird wiederverwendet.
6. Produktreife, Bericht, Doku und Qualitäts-Härtung am Ende konsolidieren.
## 6. Definition of Done über alle Meilensteine hinweg
Ein Meilenstein gilt nur dann als sinnvoll abgeschlossen, wenn mindestens die folgenden Punkte erfüllt sind:
- der Stand ist **fachlich und technisch konsistent** zu den Grunddokumenten
- Build und zugehörige Tests sind **grün**
- der Meilenstein erzeugt keinen architektonischen Widerspruch zu den Grunddokumenten
- nicht prüfbare `V1-N`- und nur teilprüfbare `V1-T`-Bereiche wurden nicht versehentlich als harte Pflichtprüfung umgesetzt
- keine Elemente aus späteren Ausbaustufen wurden unbemerkt in Version 1 hineingezogen
- die im jeweiligen Meilenstein genannten Abnahmekriterien sind erfüllt
- der Stand ist stabil genug, um daraus anschließend **Arbeitspakete** abzuleiten
Die finalen Quality-Gates für Version 1 (Coverage, Mutation, Zielschwellen pro Paket) gelten am Ende von M9. Zwischenmeilensteine müssen lediglich grün sein, nicht die finalen Schwellwerte vorwegnehmen.
## 7. Zusammenfassung
Die Implementierung von Version 1 sollte nicht entlang technischer Zufälle, sondern entlang einer klaren fachlich-technischen Reifung erfolgen:
- zuerst **Grundgerüst, Logging und Befundmodell mit Spec-/Diagnose-Trennung**,
- dann **Artefaktschicht, Dateinamen und globale Rahmenregeln**,
- dann **Service- und KKS-Ebene**,
- danach **ASVREC mit Beziehungslogik und Storno**,
- anschließend **ASVFEH**,
- danach **PKCS#7-Tiefenprüfung unter Wiederverwendung der bestehenden Kette**,
- und zum Schluss **Bericht, Qualität und Release-Härtung**.
Damit entsteht eine Meilensteinfolge, die klein genug für kontrollierte Weiterentwicklung bleibt, aber groß genug ist, um daraus später präzise und in sich geschlossene Arbeitspakete abzuleiten.
## 8. Dokumenthistorie
| Version | Wesentliche Änderungen |
|---|---|
| v1 | Erstfassung mit Meilensteinfolge M1M9 |
| v2 | Logging-Adapter und Spec-/Diagnose-Trennung als Fundament in M1 verankert; Dateinamensschemata und globale Rahmenregeln in M2 ergänzt; Service-Crosschecks in M3 vollständiger; KKS-Regelsatz in M4 erweitert und eigenständige `.AUF`-Validierbarkeit klargestellt; Sonderregeln in M5 ergänzt; Umgang mit Originalnachricht in M7 präzisiert; Wiederverwendung der Validierungskette in M8 explizit; Quality-Gates in M9 mit Zahlen. |
| v3 | Zweck entschärft und Rangfolge der Grunddokumente klargestellt (Spec.docx als Wahrheit; `meilensteine.md` strukturiert lediglich). M3: Crosscheck `physischer Dateiname ↔ UNB_0020` korrekt als Übertragungsreferenz benannt (nicht „Senderkennung"); Vorgriff auf KKS-`VERFAHREN_KENNUNG` aus M3 entfernt und nach M4 verschoben. M4: Dateinamensbezug (physischer Dateiname, `UNB_0020`, KKS-`DATEINAME`, `.AUF`-Basisname) sauber begrifflich getrennt; unscharfe „bzw."-Formulierung ersetzt. M5: regionale Pseudo-GOP neben `88999` ausdrücklich aufgenommen; Vertretungs-Teamebene `4` als `V1-N` gekennzeichnet statt als aktive Prüfung; `NAD`-Hinweis entfernt. Gesamtes Dokument: in v2 eingeführte Zwischen-Quality-Gates (Coverage/Mutation pro Meilenstein) entfernt, da nicht aus den Grunddokumenten folgend; finale Gates bleiben in M9 erhalten. `V1-T`-Sprachregelung in den Leitplanken präzisiert. Kleinere sprachliche Glättungen. |