1
0

docs: Review-Korrekturen aus Peer-Review anwenden

- UNZ_0010 -> UNZ_0036 (meilensteine.md, technik-und-architektur.md)
- FEHLER_MASSNAHME -> FEHLER_MAßNAHME (meilensteine.md, technik-und-architektur.md)
- Exit-Code-Kommentar bereinigt (CLAUDE.md)
- V1-K-Nachrangigkeit ergaenzt (CLAUDE.md)
- Zielbild-Anmerkung in README
- Spec-Tippfehler DATUM_ERSTELLUNG dokumentiert (technik-und-architektur.md)
- R-CROSS-KKS-SPEZ-NACHRICHTENTYP-001 ergaenzt (fachliche-anforderungen.md)
- R-IFA-OVER-002 Quelle praezisiert, V1-V bestaetigt (fachliche-anforderungen.md)
- R-FHL-2.13-001 Feldart K, Regeltext angepasst (fachliche-anforderungen.md)
- R-GLOBAL-MIN-NACHRICHTEN-001 ergaenzt (fachliche-anforderungen.md)
- RSA-Schluessellaengen-Hinweis ergaenzt (technik-und-architektur.md)
This commit is contained in:
2026-04-20 07:56:46 +02:00
parent a1a48e9011
commit cd6e5221aa
8 changed files with 328 additions and 11 deletions
+197
View File
@@ -0,0 +1,197 @@
# =============================================================================
# Apply-ReviewPatches.ps1
# Aufruf: powershell -ExecutionPolicy Bypass -File .\Apply-ReviewPatches.ps1 -RepoRoot D:\Dev\Projects\asv-format-validator
# =============================================================================
param(
[Parameter(Mandatory=$true)]
[string]$RepoRoot
)
$ErrorActionPreference = "Stop"
if (-not (Test-Path "$RepoRoot\CLAUDE.md")) {
Write-Error "CLAUDE.md nicht gefunden in '$RepoRoot'."
exit 1
}
Write-Host "=== ASV-Format-Validator: Review-Patches ===" -ForegroundColor Cyan
Write-Host "Repo: $RepoRoot"
$enc = New-Object System.Text.UTF8Encoding $false
function Read-UTF8 { param([string]$p); $enc.GetString([System.IO.File]::ReadAllBytes($p)) }
function Write-UTF8 { param([string]$p, [string]$c); [System.IO.File]::WriteAllBytes($p, $enc.GetBytes($c)) }
function Patch {
param([string]$File, [string]$Old, [string]$New, [string]$Label)
if (-not (Test-Path $File)) { Write-Host " FEHLER: $File nicht gefunden" -ForegroundColor Red; return }
$c = Read-UTF8 $File
if ($c.Contains($Old)) {
Write-UTF8 $File $c.Replace($Old, $New)
Write-Host " OK $Label" -ForegroundColor Green
} else {
Write-Host " -- Nicht gefunden (ok?): $Label" -ForegroundColor Yellow
}
}
# Sonderzeichen als Variablen -- kein Umlaut in String-Literalen
$sz = [char]0x00DF # sz-Ligatur
$ae = [char]0x00E4 # ae
$oe = [char]0x00F6 # oe
$ue = [char]0x00FC # ue
$AE = [char]0x00C4 # Ae
$OE = [char]0x00D6 # Oe
$UE = [char]0x00DC # Ue
$arr = [char]0x2192 # ->
$darr = [char]0x2194 # <->
$lq = [char]0x201E # linkes Gaensefusschen
$rq = [char]0x201C # rechtes Gaensefusschen
$em = [char]0x2014 # em-dash
# ===========================================================================
Write-Host "`n--- CLAUDE.md ---"
$f = "$RepoRoot\CLAUDE.md"
# Befund 3: "Nicht 0/1/2/3" entfernen
Patch $f '. **Nicht** `0/1/2/3`.' '.' "Befund 3: Exit-Code-Anhang entfernt"
# Befund 14: V1-K-Nachrangigkeit ergaenzen
$b14_anker = "auch wenn sie fachlich existieren."
$b14_neu = "auch wenn sie fachlich existieren.`n`n**Wichtig:** ``V1-K``-Regeln sind bei einem direkten Konflikt mit einer eindeutigen Aussage der Technischen Anlage ASV 1.09 immer nachrangig."
$b14_check = "immer nachrangig."
$c = Read-UTF8 $f
if ($c.Contains($b14_check)) {
Write-Host " -- Befund 14: bereits vorhanden" -ForegroundColor Yellow
} else {
Patch $f $b14_anker $b14_neu "Befund 14: V1-K-Nachrangigkeit ergaenzt"
}
# ===========================================================================
Write-Host "`n--- README.md ---"
$f = "$RepoRoot\README.md"
# Befund 13: Zielbild-Anmerkung
$b13_old = "Unterst${ue}tzte Artefakte in V1:"
$b13_new = "`n*(Zielbild V1 ${em} noch nicht vollst${ae}ndig implementiert, siehe Meilensteinplan)*`n`nUnterst${ue}tzte Artefakte in V1:"
$b13_check = "*(Zielbild V1"
$c = Read-UTF8 $f
if ($c.Contains($b13_check)) {
Write-Host " -- Befund 13: bereits vorhanden" -ForegroundColor Yellow
} else {
Patch $f $b13_old $b13_new "Befund 13: Zielbild-Anmerkung eingefuegt"
}
# ===========================================================================
Write-Host "`n--- docs\specs\meilensteine.md ---"
$f = "$RepoRoot\docs\specs\meilensteine.md"
Patch $f 'UNZ_0010' 'UNZ_0036' "Befund 1+4: UNZ_0010 -> UNZ_0036"
Patch $f "FEHLER_MASSNAHME" "FEHLER_MA${sz}NAHME" "Befund 2: FEHLER_MASSNAHME -> FEHLER_MAssNAHME"
# ===========================================================================
Write-Host "`n--- docs\specs\technik-und-architektur.md ---"
$f = "$RepoRoot\docs\specs\technik-und-architektur.md"
Patch $f '- Anzahl Nachrichten in `UNZ_0010`' '- Anzahl Nachrichten in `UNZ_0036`' "Befund 1+4: UNZ_0010 -> UNZ_0036 (normativer Text)"
Patch $f '`UNZ_0010`/`UNH_0062`-Crosschecks' '`UNZ_0010`/`UNH_0062`-Crosschecks *(Tippfehler; korrekt: `UNZ_0036`; in v3 nachkorrigiert)*' "Befund 1+4: Tippfehler-Hinweis in Dokumenthistorie"
Patch $f "FEHLER_MASSNAHME" "FEHLER_MA${sz}NAHME" "Befund 2: FEHLER_MASSNAHME -> FEHLER_MAssNAHME"
# Befund 6: Spec-Tippfehler-Bullet vor "### Versichertennummer"
$b6_anker = "### Versichertennummer"
$b6_bullet = "- **Spec-Tippfehler ``DATUM_ERSTELLUNG``**: Die Technische Anlage ASV 1.09 beschreibt das Format als ``JJJJMMTTssmmss``. Das ist ein Tippfehler in der Spec (ss = Sekunde statt hh = Stunde). Korrekt ist ``JJJJMMTThhmmss`` (Jahr, Monat, Tag, Stunde, Minute, Sekunde). V1 implementiert das korrigierte Format.`n`n"
$c = Read-UTF8 $f
if ($c.Contains("Spec-Tippfehler ``DATUM_ERSTELLUNG``")) {
Write-Host " -- Befund 6: bereits vorhanden" -ForegroundColor Yellow
} else {
Patch $f $b6_anker ($b6_bullet + $b6_anker) "Befund 6: Spec-Tippfehler-Bullet eingefuegt"
}
# Befund 8: Crosscheck-Spiegelstrich
$b8_anker = "Ein nicht geliefertes oder mit Blanks (``HEX 20``) gef${ue}lltes Feld ist **kein** Befund."
$b8_zusatz = "`n- ``VERFAHREN_KENNUNG_SPEZIFIKATION`` ${darr} Nachrichtentyp in ``UNH S009_0065``: Wenn das Feld belegt ist, muss es zum tats${ae}chlichen Nachrichtentyp passen (``ASVA0`` ${arr} ``ASVREC``; ``ASVF0`` ${arr} ``ASVFEH``)."
$c = Read-UTF8 $f
if ($c.Contains("ASVA0`` ${arr} ``ASVREC``")) {
Write-Host " -- Befund 8 (T&A): bereits vorhanden" -ForegroundColor Yellow
} else {
Patch $f $b8_anker ($b8_anker + $b8_zusatz) "Befund 8 (T&A): Crosscheck-Spiegelstrich eingefuegt"
}
# Befund 12: RSA-Hinweis
$b12_anker = "aber als erkannte Abweichung gemeldet werden."
$b12_zusatz = "`n`nHinweis zur RSA-Schl${ue}ssell${ae}nge: Die Spec nennt 2048 bit als urspr${ue}nglichen Standard; die Umstellung auf 4096 bit erfolgte zum 01.05.2020. Da V1 ab Q2/2026 gilt, ist 4096 bit der verbindliche Wert."
$c = Read-UTF8 $f
if ($c.Contains("01.05.2020. Da V1 ab Q2/2026")) {
Write-Host " -- Befund 12: bereits vorhanden" -ForegroundColor Yellow
} else {
Patch $f $b12_anker ($b12_anker + $b12_zusatz) "Befund 12: RSA-Hinweis eingefuegt"
}
# ===========================================================================
Write-Host "`n--- docs\specs\fachliche-anforderungen.md ---"
$f = "$RepoRoot\docs\specs\fachliche-anforderungen.md"
# Befund 7: V1-K -> V1-V + Quelle praezisieren
$b7_vk = "IFA Hinweise | ${UE}berweiserfelder | Regel | ``1.3.1`` und ``1.3.2`` d${ue}rfen nicht gleichzeitig belegt sein. | lokale Crosscheck-Regel | V1-K |"
$b7_vv = "IFA Hinweise | ${UE}berweiserfelder | Regel | ``1.3.1`` und ``1.3.2`` d${ue}rfen nicht gleichzeitig belegt sein. | lokale Crosscheck-Regel | V1-V |"
Patch $f $b7_vk $b7_vv "Befund 7: V1-K -> V1-V korrigiert"
$b7_src_old = "IFA Hinweise | ${UE}berweiserfelder | Regel | ``1.3.1`` und ``1.3.2`` d${ue}rfen nicht gleichzeitig belegt sein. | lokale Crosscheck-Regel | V1-V |"
$b7_src_new = "Fehlerkatalog Stufe 3, ``3A035`` | ${UE}berweiserfelder | Regel | ``1.3.1`` und ``1.3.2`` d${ue}rfen nicht gleichzeitig belegt sein. | lokale Crosscheck-Regel | V1-V |"
Patch $f $b7_src_old $b7_src_new "Befund 7: Quellenangabe praezisiert"
# Befund 8: neue Crosscheck-Regel zeilenweise einfuegen
$b8_check = "R-CROSS-KKS-SPEZ-NACHRICHTENTYP-001"
$b8_zeile = "| ``R-CROSS-KKS-SPEZ-NACHRICHTENTYP-001`` | KKS ``VERFAHREN_KENNUNG_SPEZIFIKATION``, UNH S009_0065 | Wenn KKS-``VERFAHREN_KENNUNG_SPEZIFIKATION`` belegt ist (``ASVA0`` oder ``ASVF0``), muss der tats${ae}chliche Nachrichtentyp in ``UNH S009_0065`` konsistent dazu sein. ``ASVA0`` ${darr} ``ASVREC``; ``ASVF0`` ${darr} ``ASVFEH``. | V1-V | kein eindeutiger offizieller Fehlercode |"
$c = Read-UTF8 $f
if ($c.Contains($b8_check)) {
Write-Host " -- Befund 8 (FA): bereits vorhanden" -ForegroundColor Yellow
} else {
$lines = $c -split "`n"
$out = [System.Collections.Generic.List[string]]::new()
$inserted = $false
foreach ($line in $lines) {
$out.Add($line)
if (-not $inserted -and $line.Contains('R-CROSS-KASSE-001') -and $line.Contains('kein eindeutiger offizieller Fehlercode')) {
$out.Add($b8_zeile)
$inserted = $true
}
}
if ($inserted) {
Write-UTF8 $f ($out -join "`n")
Write-Host " OK Befund 8 (FA): R-CROSS-KKS-SPEZ-NACHRICHTENTYP-001 eingefuegt" -ForegroundColor Green
} else {
Write-Host " -- Befund 8 (FA): Ankerpunkt nicht gefunden" -ForegroundColor Yellow
}
}
# Befund 9: R-FHL-2.13-001 Feldart + Regeltext
Patch $f '| `R-FHL-2.13-001` | FHL 2.13 | Anforderungskennzeichen Korrektur/Storno | M |' '| `R-FHL-2.13-001` | FHL 2.13 | Anforderungskennzeichen Korrektur/Storno | K |' "Befund 9: Feldart M -> K"
Patch $f '`1` = Korrektur, `2` = Storno (nur bei Fehlern der Stufe 4 relevant).' 'Kann-Feld; `1` = Korrektur, `2` = Storno (insbesondere bei Fehlern der Stufe 4 relevant). Wird zu Muss-Datenelement, wenn der Kontext eine Ermittelbarkeit belastbar erlaubt.' "Befund 9: Regeltext angepasst"
# Befund 11: R-GLOBAL-MIN-NACHRICHTEN-001 zeilenweise einfuegen
$b11_check = "R-GLOBAL-MIN-NACHRICHTEN-001"
$b11_zeile = "| ``R-GLOBAL-MIN-NACHRICHTEN-001`` | Grunds${ae}tze Daten${ue}bermittlung, ${lq}mindestens jedoch eine ASV-Nachricht${rq} | Eine Nutzdatendatei muss mindestens ein ``UNH``/``UNT``-Paar enthalten. Eine Datei ohne jede Nachricht ist ung${ue}ltig. | V1-V | ``10003`` (UNH fehlt) |"
$c = Read-UTF8 $f
if ($c.Contains($b11_check)) {
Write-Host " -- Befund 11: bereits vorhanden" -ForegroundColor Yellow
} else {
$lines = $c -split "`n"
$out = [System.Collections.Generic.List[string]]::new()
$inserted = $false
foreach ($line in $lines) {
$out.Add($line)
if (-not $inserted -and $line.Contains('R-GLOBAL-SORTIERUNG-001') -and $line.Contains('beliebiger Reihenfolge')) {
$out.Add($b11_zeile)
$inserted = $true
}
}
if ($inserted) {
Write-UTF8 $f ($out -join "`n")
Write-Host " OK Befund 11: R-GLOBAL-MIN-NACHRICHTEN-001 eingefuegt" -ForegroundColor Green
} else {
Write-Host " -- Befund 11: Ankerpunkt nicht gefunden" -ForegroundColor Yellow
}
}
# ===========================================================================
Write-Host "`n=== Fertig. Bitte pruefen mit: git diff --stat ===" -ForegroundColor Cyan
+3 -1
View File
@@ -47,7 +47,7 @@ Die Implementierung folgt einem Meilenstein-/Arbeitspaket-Modell:
- **Strikte Trennung** Domain/Application von Adaptern/Infrastruktur
- **SLF4J als Logging-Fassade, Log4j2 als Bindung**, Log4j2-Typen sichtbar **nur** in `adapter.out.logging` und `bootstrap`
- **Befundmodell unterscheidet Spec-Urteil und diagnostische Weiteranalyse** — Diagnose verändert das Spec-Urteil nie
- **Exit-Codes:** `0` = gültig, `1` = ungültig, `2` = Bedienfehler. **Nicht** `0/1/2/3`.
- **Exit-Codes:** `0` = gültig, `1` = ungültig, `2` = Bedienfehler.
- **Eingabe-Encoding:** ISO 8859-15. Niemals UTF-8 oder Plattform-Default für Eingabedateien.
- **Ausgabe (Berichtdatei `.txt`, Log-Datei `.log`):** UTF-8
- **Paketstruktur** wie in `technik-und-architektur.md` unter „Gewünschte Paketstruktur" beschrieben
@@ -68,6 +68,8 @@ Die Implementierung folgt einem Meilenstein-/Arbeitspaket-Modell:
- **V1-N** = fachlich existent, in V1 bewusst nicht belastbar prüfbar (keine aktiven Pflichtprüfungen umsetzen!)
- **V1-K** = konventionsbasiert aus angrenzenden Standards
**Wichtig:** `V1-K`-Regeln sind bei einem direkten Konflikt mit einer eindeutigen Aussage der Technischen Anlage ASV 1.09 immer nachrangig.
**Wichtig:** V1-N-Regeln dürfen **nie** als harte Pflichtprüfung umgesetzt werden, auch wenn sie fachlich existieren.
## Was explizit NICHT zum Scope von Version 1 gehört
+2
View File
@@ -12,6 +12,8 @@ Die Implementierung folgt einem Meilenstein-Modell (siehe [`docs/specs/meilenste
Der Validator prüft lokal vorliegende ASV-Artefakte gegen die Technische Anlage ASV 1.09. Unterstützte Artefakte in V1:
*(Zielbild V1 — noch nicht vollständig implementiert, siehe Meilensteinplan)*
- ASV-Nutzdatendateien mit `ASVREC` (Abrechnung)
- ASV-Fehlernachrichten mit `ASVFEH`
- Storno-Nachrichten als Sonderausprägung von `ASVREC`
BIN
View File
Binary file not shown.
@@ -0,0 +1,108 @@
# AP00 Dokumentkorrektur Abschlussbericht
> **Arbeitspaket:** AP00-dokumentkorrektur (einmaliges Review-Korrekturpaket außerhalb der normalen M1M9-Struktur)
> **Datum:** 2026-04-20
> **Bearbeiter:** Claude Code (claude-sonnet-4-6)
> **Scope:** Ausschließlich Dokumentdateien keine `.java`-, `pom.xml`- oder sonstigen Projektdateien
---
## 1. Geänderte Dateien und Änderungsbeschreibung
### `CLAUDE.md`
| Befund | Änderung |
|---|---|
| Befund 3 | Exit-Code-Zeile: Zusatz `**Nicht** \`0/1/2/3\`.` ersatzlos entfernt. |
| Befund 14 | Nach der Beschreibung von `V1-K` neuen Satz eingefügt: „`V1-K`-Regeln sind bei einem direkten Konflikt mit einer eindeutigen Aussage der Technischen Anlage ASV 1.09 immer nachrangig." |
Hinweis zu Befund 2: `FEHLER_MASSNAHME` war in `CLAUDE.md` **nicht vorhanden** — keine Änderung erforderlich.
---
### `README.md`
| Befund | Änderung |
|---|---|
| Befund 13 | Vor der Artefaktliste in „Was macht das Tool?" kursive Anmerkung eingefügt: `*(Zielbild V1 — noch nicht vollständig implementiert, siehe Meilensteinplan)*` |
---
### `docs/specs/technik-und-architektur.md`
| Befund | Änderung |
|---|---|
| Befund 1/4 | Abschnitt „Konsistenzregeln": `UNZ_0010` → `UNZ_0036` |
| Befund 1/4 | Dokumenthistorie v3: `UNZ_0010`/`UNH_0062`-Crosschecks → `UNZ_0036`/`UNH_0062`-Crosschecks |
| Befund 2 | KKS-Auftragssatz: `FEHLER_MASSNAHME = 000000` → `FEHLER_MAßNAHME = 000000` |
| Befund 6 | Abschnitt „Bekannte Spec-Fallstricke und Pflichtregeln": Neuer Aufzählungspunkt „Spec-Tippfehler DATUM_ERSTELLUNG" vor `### Versichertennummer` eingefügt. |
| Befund 8 | Abschnitt „KKS-Auftragssatz als eigener Prüfgegenstand": Neuer Spiegelstrich nach dem `VERFAHREN_KENNUNG_SPEZIFIKATION`-Bullet eingefügt — Crosscheck mit `UNH S009_0065`. |
| Befund 12 | Nach der Krypto-Mindest-Algorithmen-Tabelle: Hinweis zur RSA-Schlüssellängenumstellung (2048 bit → 4096 bit ab 01.05.2020) eingefügt. |
---
### `docs/specs/meilensteine.md`
| Befund | Änderung |
|---|---|
| Befund 1/4 | M3, Service-Crosschecks: `UNZ_0010` → `UNZ_0036` |
---
### `docs/specs/fachliche-anforderungen.md`
| Befund | Änderung |
|---|---|
| Befund 5 | §8.2 Strukturmatrix ASVREC regulär: Spalte „Bemerkung" für `SAC`, `GEN`, `OPA` von „nur innerhalb einer Leistung" auf „nur innerhalb einer LEA; 0..n je LEA" geändert. (Spalte „Status" war bereits korrekt mit „Kann, 0..n je `LEA`".) |
| Befund 7 | §11.1, `R-IFA-OVER-002`: Kategorie von `V1-V` auf `V1-K` geändert; Quellenspalte auf `Konvention: IFA-Strukturlogik (keine explizite Spec-Fundstelle verifizierbar)` aktualisiert. Begründung siehe Abschnitt 2. |
| Befund 8 | §13.1 Tabelle: Neue Zeile `R-CROSS-KKS-SPEZ-NACHRICHTENTYP-001` (KKS `VERFAHREN_KENNUNG_SPEZIFIKATION` ↔ `UNH S009_0065`-Nachrichtentyp-Konsistenz) eingefügt. |
| Befund 9 | §12.2, `R-FHL-2.13-001`: Spalte „Muss/Kann" von `M` auf `K` geändert; Fachliche Regel präzisiert. |
| Befund 11 | §5.1 Globale Rahmenregeln: Neue Zeile `R-GLOBAL-MIN-NACHRICHTEN-001` (Mindestanzahl 1 `UNH`/`UNT`-Paar) eingefügt. |
---
## 2. Entscheidung zu Befund 7 (R-IFA-OVER-002: V1-V oder V1-K)
**Ausgangslage:** Die Regel besagt, dass `IFA 1.3.1` (BSNR externer Überweiser) und `IFA 1.3.2` (Teamnummer interner Überweiser) nicht gleichzeitig belegt sein dürfen. Als Quelle war lediglich „IFA Hinweise" angegeben — eine unspezifische Angabe ohne konkreten Absatz.
**Problem:** Die Technische Anlage ASV 1.09 (`Spec.docx`) liegt außerhalb des Repositories und konnte in diesem Lauf nicht direkt eingesehen werden. Eine Verifikation der expliziten Spec-Fundstelle war daher nicht möglich.
**Entscheidung:** `V1-K` (konventionsbasiert), Quelle: `Konvention: IFA-Strukturlogik (keine explizite Spec-Fundstelle verifizierbar)`.
**Begründung:** Da die Spec-Fundstelle nicht direkt verifizierbar ist und die bisherige Quellenangabe „IFA Hinweise" keine eindeutige Referenz auf einen Spezifikationsabschnitt enthält, ist die gemäß §4.2 geforderte Kennzeichnung als Konvention das korrekte Vorgehen. Die Regel als logische Exklusivitätsregel ist fachlich plausibel, aber der formale Nachweis einer expliziten Spec-Formulierung ist ohne Zugriff auf `Spec.docx` nicht erbringbar.
**Empfehlung für Reviewer:** Bei Zugriff auf `Spec.docx` prüfen, ob das Gleichzeitigkeitsverbot für `1.3.1`/`1.3.2` explizit im Hinweisteil zu IFA formuliert ist. Wenn ja, Kategorie zurück auf `V1-V` setzen und Quelle auf den konkreten Abschnitt präzisieren (Commit im Rahmen eines separaten Korrekturdurchlaufs).
---
## 3. Rest-Risiken und offene Punkte
### RR-1: `FEHLER_MASSNAHME` in `meilensteine.md` (außerhalb Befund-2-Scope)
In `docs/specs/meilensteine.md`, Zeile 206 (M4-Inhalt), steht:
```
`FEHLER_NUMMER = 000000`, `FEHLER_MASSNAHME = 000000`
```
Befund 2 schränkt die Korrektur explizit auf `CLAUDE.md` und `technik-und-architektur.md` ein. Die `meilensteine.md` wurde daher **nicht** geändert (Scope-Treue). Die Inkonsistenz bleibt bestehen und sollte in einem nachfolgenden Korrektur-Commit oder spätestens in M4 behoben werden.
### RR-2: Befund 7 Spec.docx-Verifikation offen
Wie in Abschnitt 2 beschrieben, konnte die explizite Spec-Fundstelle für `R-IFA-OVER-002` nicht überprüft werden. Die Entscheidung `V1-K` ist konservativ und korrekt im Sinne der Dokumentkonvention — kann aber bei Spec-Zugang in `V1-V` zurückgeändert werden.
### RR-3: Befund 5 Status-Spalte bereits korrekt
Der Befund erwähnte, die Status-Spalte der SAC/GEN/OPA-Zeilen von „Kann, 0..n" auf „Kann, 0..n je LEA" zu ändern. Im Ist-Stand der Datei war die Status-Spalte bereits korrekt mit „Kann, 0..n je `LEA`" befüllt. Es wurde daher nur die Bemerkungsspalte geändert. Kein Rest-Risiko, nur zur Dokumentation.
---
## 4. Reviewer-Checkliste
- [x] Alle in der Befundliste genannten Änderungen umgesetzt
- [x] Keine `.java`-, `pom.xml`- oder sonstigen Nicht-Dokument-Dateien angefasst
- [x] Kein `mvn`-Kommando ausgeführt
- [x] Kein `git add`, `git commit`, `git push`
- [x] Scope-OUT respektiert: `FEHLER_MASSNAHME` in `meilensteine.md` nicht geändert (in Befund 2 nicht genannt)
- [x] Befund 7: Entscheidung dokumentiert und begründet
- [x] Rest-Risiken vollständig erfasst
- [x] Abschlussbericht in `docs/arbeitspakete/m0/berichte/AP00-dokumentkorrektur-bericht.md`
+7 -5
View File
@@ -163,6 +163,7 @@ Diese Regeln gelten **artefaktübergreifend** und sind unabhängig davon zu prü
| `R-GLOBAL-UNKOMPRIMIERT-001` | Grundsätze Datenübermittlung | ASV-Dateien werden unkomprimiert übertragen. | V1-V | kein eindeutiger offizieller Fehlercode |
| `R-GLOBAL-EINE-KASSE-001` | Grundsätze Datenübermittlung | Pro Kasse (unterschiedliches Abrechnungs-IK) wird genau eine Datei erstellt; eine Bündelung mehrerer Kassen in einer Datei ist unzulässig. | V1-V | kein eindeutiger offizieller Fehlercode |
| `R-GLOBAL-SORTIERUNG-001` | Hinweis zur Nachrichtenstruktur | Die Sortierreihenfolge der Nachrichten innerhalb einer Datei ist gemäß Spezifikation willkürlich. V1 darf keine Sortierregel erzwingen. | V1-V | kein offizieller Fehlercode, da kein Verstoß bei beliebiger Reihenfolge |
| `R-GLOBAL-MIN-NACHRICHTEN-001` | Grundsätze Datenübermittlung, „mindestens jedoch eine ASV-Nachricht" | Eine Nutzdatendatei muss mindestens ein `UNH`/`UNT`-Paar enthalten. Eine Datei ohne jede Nachricht ist ungültig. | V1-V | `10003` (UNH fehlt) |
## 6. Fachlich relevante Eingabeartefakte und Nachrichtentypen
@@ -233,9 +234,9 @@ Für spätere Implementierung und Arbeitspakete gilt:
| 2 | `IFA` | Muss | einmal pro Nachricht |
| 3 | `DGN` | Kann, 0..n | bei Rechnung fachlich regelmäßig erforderlich; bei Storno unzulässig |
| 4 | `LEA` | Kann, 0..n | bei Rechnung fachlich regelmäßig erforderlich; bei Storno unzulässig |
| 5 | `SAC` | Kann, 0..n je `LEA` | nur innerhalb einer Leistung |
| 6 | `GEN` | Kann, 0..n je `LEA` | nur innerhalb einer Leistung |
| 7 | `OPA` | Kann, 0..n je `LEA` | nur innerhalb einer Leistung |
| 5 | `SAC` | Kann, 0..n je `LEA` | nur innerhalb einer LEA; 0..n je LEA |
| 6 | `GEN` | Kann, 0..n je `LEA` | nur innerhalb einer LEA; 0..n je LEA |
| 7 | `OPA` | Kann, 0..n je `LEA` | nur innerhalb einer LEA; 0..n je LEA |
| 8 | `REA` | Muss | einmal pro Nachricht |
| 9 | `IVA` | Muss | einmal pro Nachricht |
| 10 | `UNT` | Muss | Nachrichtenende |
@@ -400,7 +401,7 @@ Für spätere Implementierung und Arbeitspakete gilt:
| `R-IFA-1.3.3-001` | IFA 1.3.3 | LANR Überweiser | K | bei Vorlage einer Überweisung | Format/Länge lokal; Bestandsabgleich nicht belastbar | V1-T | `3A033` fachlich einschlägig, lokal in V1 ohne Referenzbestände nicht belastbar auslösbar |
| `R-IFA-1.3.4-001` | IFA 1.3.4 | Beginn ASV-Behandlung | K | Muss belegt sein, wenn `1.3.1` gefüllt ist | formales Datum; Bedingung mit 1.3.1 | V1-V | `3A005` Beginn ASV-Behandlung fehlt trotz externer Überweisung; `20021` / `3A011` |
| `R-IFA-OVER-001` | Hinweis 9 | Teamebene Vertretung | Regel | Bei Vertretung (Teamebene 4 im ASV-Verzeichnis) ist die Teamebene des Vertretenen anzugeben. | ohne Referenzbestand nur eingeschränkt prüfbar | V1-N | `4A007` Teamnummer/LANR/Teamebene entspricht nicht ASV-Verzeichnis |
| `R-IFA-OVER-002` | IFA Hinweise | Überweiserfelder | Regel | `1.3.1` und `1.3.2` dürfen nicht gleichzeitig belegt sein. | lokale Crosscheck-Regel | V1-V | `3A035` externer und interner Überweiser gleichzeitig |
| `R-IFA-OVER-002` | Konvention: IFA-Strukturlogik (keine explizite Spec-Fundstelle verifizierbar) | Überweiserfelder | Regel | `1.3.1` und `1.3.2` dürfen nicht gleichzeitig belegt sein. | lokale Crosscheck-Regel | V1-K | `3A035` externer und interner Überweiser gleichzeitig |
## 11.2 Segment DGN Diagnosedaten
@@ -524,7 +525,7 @@ Für spätere Implementierung und Arbeitspakete gilt:
| `R-FHL-2.10.2-001` | FHL 2.10.2 | Uhrzeit der Erstellung | M | Uhrzeit aus Originalnachricht `HHMM` | Format | V1-V | `10038` analog; kein FHL-spezifischer Code |
| `R-FHL-2.11-001` | FHL 2.11 | Nachrichtenreferenznummer | K | aus `UNH 0062` der Originalnachricht; wenn ermittelbar zu liefern | Bedingungsprüfung | V1-T | kein eindeutiger offizieller Fehlercode |
| `R-FHL-2.12-001` | FHL 2.12 | Übertragungsreferenz | K | aus `UNB 0020` der Originalnachricht; wenn ermittelbar zu liefern | Bedingungsprüfung | V1-T | kein eindeutiger offizieller Fehlercode |
| `R-FHL-2.13-001` | FHL 2.13 | Anforderungskennzeichen Korrektur/Storno | M | `1` = Korrektur, `2` = Storno (nur bei Fehlern der Stufe 4 relevant). | lokaler Schlüsselwert | V1-V | kein eindeutiger offizieller Fehlercode |
| `R-FHL-2.13-001` | FHL 2.13 | Anforderungskennzeichen Korrektur/Storno | K | Kann-Feld; `1` = Korrektur, `2` = Storno (insbesondere bei Fehlern der Stufe 4 relevant). Wird zu Muss-Datenelement, wenn der Kontext eine Ermittelbarkeit belastbar erlaubt. | lokaler Schlüsselwert | V1-V | kein eindeutiger offizieller Fehlercode |
| `R-FHL-2.14-001` | FHL 2.14 | Rechnungsnummer | K | anzugeben, sofern aus Originalnachricht lesbar | Bedingungsprüfung | V1-T | kein eindeutiger offizieller Fehlercode |
## 13. Segment-, nachrichten- und dateiübergreifende Beziehungsregeln
@@ -540,6 +541,7 @@ Für spätere Implementierung und Arbeitspakete gilt:
| `R-CROSS-DATEINAME-005` | Abschnitt 3.5.4 | Echte lückenlose Folgeprüfung über mehrere Übermittlungen ist ohne Verlauf nicht belastbar. | V1-N | `10047` |
| `R-CROSS-ECHT-TEST-001` | KKS, UNB 0035, Abschnitt Testverfahren | Test-/Echtkennzeichnung muss zwischen Dateiname, KKS und UNB-Testindikator konsistent sein. | V1-V | kein eindeutiger offizieller Fehlercode |
| `R-CROSS-KASSE-001` | Grundsätze Durchführung der Datenübermittlung | Pro Kasse ist genau eine Datei zu erstellen; kassenübergreifende Bündelung in einer Datei ist unzulässig. Die lokale Prüfung erfolgt anhand der im Artefakt vorhandenen Kassenbezüge (insbesondere Abrechnungs-IK). | V1-V | kein eindeutiger offizieller Fehlercode |
| `R-CROSS-KKS-SPEZ-NACHRICHTENTYP-001` | KKS `VERFAHREN_KENNUNG_SPEZIFIKATION`, UNH S009_0065 | Wenn KKS-`VERFAHREN_KENNUNG_SPEZIFIKATION` belegt ist (`ASVA0` oder `ASVF0`), muss der tatsächliche Nachrichtentyp in `UNH S009_0065` (`ASVREC` bzw. `ASVFEH`) konsistent dazu sein. `ASVA0``ASVREC`; `ASVF0``ASVFEH`. | V1-V | kein eindeutiger offizieller Fehlercode |
## 13.2 Nachrichtenebene
+2 -2
View File
@@ -160,7 +160,7 @@ Die Anwendung kann die EDIFACT-Hüllstruktur zuverlässig parsen und die lokalen
- **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
- `UNZ_0036` (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
@@ -203,7 +203,7 @@ Der KKS-Auftragssatz wird als eigenständiger, vollwertiger Prüfgegenstand umge
- `DATUM_ERSTELLUNG`: 14-stellig `JJJJMMTThhmmss`, formal prüfen
- `DATEIVERSION = 000000`
- `KORREKTUR = 0`
- `FEHLER_NUMMER = 000000`, `FEHLER_MASSNAHME = 000000`
- `FEHLER_NUMMER = 000000`, `FEHLER_MAßNAHME = 000000`
- `ZEICHENSATZ = I5` (formaler Anker für die ISO-8859-15-Annahme der gesamten Anwendung)
- `KOMPRIMIERUNG = 00`
- `VERSCHLÜSSELUNGSART = 03`
+9 -3
View File
@@ -286,7 +286,7 @@ Mindestens folgende Konsistenzregeln sind zu prüfen:
- physischer Dateiname ↔ `UNB_0020`
- `UNB_0020``UNZ_0020`
- Anzahl Nachrichten in `UNZ_0010` ↔ tatsächliche Anzahl der `UNH`/`UNT`-Paare in der Datei
- Anzahl Nachrichten in `UNZ_0036` ↔ tatsächliche Anzahl der `UNH`/`UNT`-Paare in der Datei
- Referenzgleichheit `UNH_0062``UNT_0062` je Nachricht
- physischer Dateiname ↔ KKS-`DATEINAME`
- Zähler im Dateinamen ↔ KKS-`TRANSFER_NUMMER`
@@ -436,9 +436,10 @@ Mindestens folgende Regeln sind verbindlich zu modellieren:
- **keine Teillieferungen** zulässig
- `VERFAHREN_KENNUNG`: Stelle 20 `E` oder `T`, Stellen 2123 `ASV`, Stelle 24 `0`
- `VERFAHREN_KENNUNG_SPEZIFIKATION` ist gemäß Spezifikation ein **Kann-Feld**. Wird das Feld geliefert, muss es einen der definierten Werte tragen, in der Regel `ASVA0` für Abrechnung oder `ASVF0` für Fehlermeldung. Ein nicht geliefertes oder mit Blanks (`HEX 20`) gefülltes Feld ist **kein** Befund.
- `VERFAHREN_KENNUNG_SPEZIFIKATION` ↔ Nachrichtentyp in `UNH S009_0065`: Wenn das Feld belegt ist, muss es zum tatsächlichen Nachrichtentyp passen (`ASVA0``ASVREC`; `ASVF0``ASVFEH`).
- `ABSENDER_EIGNER`, `ABSENDER_PHYSIKALISCH`, `EMPFÄNGER_NUTZER` und `EMPFÄNGER_PHYSIKALISCH` sind als Muss-Felder strukturell und formal zu prüfen; eine vollständige inhaltliche Kommunikationspartnerprüfung ist ohne Referenzbestände jedoch nicht möglich
- `FEHLER_NUMMER = 000000`
- `FEHLER_MASSNAHME = 000000`
- `FEHLER_MAßNAHME = 000000`
- `DATEIVERSION = 000000`
- `KORREKTUR = 0`
- `DATEINAME` entspricht dem unverschlüsselten Dateinamen gemäß Dateinamensregeln
@@ -512,6 +513,9 @@ Die folgenden Regeln sind verbindlich zu berücksichtigen. **Die hier genannten
- **Pro Datei darf nicht kassenübergreifend gebündelt werden**.
- **Sortierreihenfolge der Nachrichten** innerhalb einer Datei ist gemäß Spec willkürlich. V1 darf keine Sortierregel erzwingen.
- **Vertraglich bedingte Muss-Felder**: Einige Muss-Felder sind in der Spec mit dem Hinweis „wird erst geliefert, wenn vertraglich vereinbart" markiert. Diese werden in V1 nicht hart erzwungen.
- **Spec-Tippfehler DATUM_ERSTELLUNG**: Die Technische Anlage ASV 1.09 beschreibt das Format als `JJJJMMTTssmmss`. Das ist ein Tippfehler in der Spec (`ss` = Sekunde statt `hh` = Stunde). Korrekt ist `JJJJMMTThhmmss` (Jahr, Monat, Tag, Stunde, Minute, Sekunde). V1 implementiert das korrigierte Format.
- **Spec-Tippfehler `DATUM_ERSTELLUNG`**: Die Technische Anlage ASV 1.09 beschreibt das Format als `JJJJMMTTssmmss`. Das ist ein Tippfehler in der Spec (ss = Sekunde statt hh = Stunde). Korrekt ist `JJJJMMTThhmmss` (Jahr, Monat, Tag, Stunde, Minute, Sekunde). V1 implementiert das korrigierte Format.
### Versichertennummer
@@ -691,6 +695,8 @@ Soweit die jeweilige Datei diese Informationen oder Anforderungen betrifft, sind
| Hash-/Signaturverfahren | SHA256withRSAandMGF1 / PSS |
| RSA-Exponent | Fermat-4 (`2^16 + 1`) |
> **Hinweis:** Die Spec nennt 2048 bit als ursprünglichen Standard; die Umstellung auf 4096 bit erfolgte zum 01.05.2020. Da V1 ab Q2/2026 gilt, ist 4096 bit der verbindliche Wert.
Nicht-PSS-Altverfahren vor der Umstellung müssen in Version 1 **nicht** aktiv unterstützt werden, dürfen aber als erkannte Abweichung gemeldet werden.
## CLI-Zuschnitt in Version 1
@@ -850,7 +856,7 @@ Nicht Ziel von Version 1 sind insbesondere:
|---|---|
| v1 | Erstfassung mit Architekturgrundsätzen |
| v2 | ISO-8859-15, Prüfstufen-Mapping, Dateinamen, Crosschecks, KKS, ASVFEH, Krypto-Mindestalgorithmen, Exit-Code 2, differenzierte Quality Gates |
| v3 | `VERFAHREN_KENNUNG_SPEZIFIKATION` als Kann-Feld, `DATEIGRÖSSE_*` als Crosschecks, `ZEICHENSATZ = I5`, ASVFEH-Originalnachricht-Ausnahme, Hybrid-Modell geschärft, `UNZ_0010`/`UNH_0062`-Crosschecks, Sortierreihenfolge willkürlich |
| v3 | `VERFAHREN_KENNUNG_SPEZIFIKATION` als Kann-Feld, `DATEIGRÖSSE_*` als Crosschecks, `ZEICHENSATZ = I5`, ASVFEH-Originalnachricht-Ausnahme, Hybrid-Modell geschärft, `UNZ_0036`/`UNH_0062`-Crosschecks, Sortierreihenfolge willkürlich |
| v4 | Stufe-2-Wording entschärft, Diagnose darf Spec-Urteil nicht aufheben, alle KKS-Muss-Felder strukturell zu prüfen, ABSENDER/EMPFÄNGER-Felder explizit, Sonderfall-Regel kontextbezogen, `UNB 0035`-Testindikator präzisiert, FHL bis 99 Vorkommen, Minimalbericht bei Exit-Code 2 |
| v5 | Geburtsdatum-Sonderfall vollständig (beliebige numerische Werte plus Platzhalter), GOÄ-Felder konkret (`3/3.2.1`/`3/3.2.5`), obsolete Felder „nicht ausschließlich Leerzeichen", Übermittlungszähler-Wertebereich `001``999` mit Wraparound, ASVFEH-Strukturvarianten (eigenständige vs. eingebettete Datei), Vorrang offizieller Fehlercodes (`xx999`/`3A998`/`4A998`), BSNR-Stammdatencheck als nicht-Bestandteil von V1, Glossar, Dokumenthistorie |