docs: add CLAUDE.md, Claude Code permissions and README

This commit is contained in:
2026-04-09 06:41:28 +02:00
parent 0005043aa8
commit 917b11f90e
4 changed files with 221 additions and 0 deletions

98
CLAUDE.md Normal file
View File

@@ -0,0 +1,98 @@
# CLAUDE.md
Projektweite Instruktionen für Claude Code. Diese Datei wird automatisch gelesen und gilt für jeden Lauf in diesem Repository.
## Projektkontext
**Projekt:** ASV-Format-Validator
**Sprache:** Java 21 (Jakarta/Java SE, **kein Spring, kein Quarkus, kein DI-Framework**)
**Build:** Maven
**Zielplattform:** Windows, lokale CLI, eine Eingabedatei pro Lauf
**Spezifikation:** Technische Anlage ASV 1.09, Stand 09.10.2025
**Domäne:** Validierung von ASV-Abrechnungsdateien (EDIFACT, KKS, PKCS#7) gegen eine normative Spezifikation der GKV
## Normative Dokumente (Rangfolge bei Konflikten)
1. **`Spec.docx`** — Technische Anlage ASV 1.09 ist die **fachlich-technische Wahrheit**. Bei jedem Konflikt entscheidet die Spec. (Liegt außerhalb des Repos beim Projektinhaber.)
2. **`docs/specs/fachliche-anforderungen.md`** v4 — verbindlicher fachlicher Soll-Rahmen, feldgenauer Regelkatalog, Fehlercodes
3. **`docs/specs/technik-und-architektur.md`** v5 — verbindlicher technischer Soll-Rahmen, Architektur, Paketstruktur, Qualitätsgates
4. **`docs/specs/meilensteine.md`** v3 — **nachrangig**, strukturiert nur die Umsetzung
Die Grunddokumente (13) sind bei jeder Arbeit mitzudenken. Die Meilensteindatei ersetzt sie nicht.
## Arbeitsweise in diesem Repo
Die Implementierung folgt einem Meilenstein-/Arbeitspaket-Modell:
- **Meilensteine** sind in `docs/specs/meilensteine.md` definiert (M1 bis M9)
- **Arbeitspakete pro Meilenstein** liegen in `docs/arbeitspakete/m<n>/APxx-*.md`
- **Abschlussberichte** pro Arbeitspaket gehören nach `docs/arbeitspakete/m<n>/berichte/APxx-bericht.md`
- **Berichtsvorlage** ist `docs/arbeitspakete/m<n>/templates/ap-bericht.md`
**Ein Claude-Code-Lauf bearbeitet genau ein Arbeitspaket.** Nicht mehr, nicht weniger.
## Harte Regeln für jeden Lauf
1. **Scope-Treue:** Was im Arbeitspaket unter „Scope OUT" steht, wird **nicht** angefasst. Auch nicht nebenbei, auch nicht „schnell aufgeräumt". Wenn du etwas Merkwürdiges außerhalb des Scopes siehst, dokumentiere es unter „Rest-Risiken" im Abschlussbericht.
2. **Keine stillen Annahmen:** Wo die Spec etwas nicht festlegt, wird nichts stillschweigend ergänzt. Unsicherheiten werden explizit benannt.
3. **Kein `git commit`, kein `git push`, kein `git add`** — der Mensch committet am Ende selbst nach Sichtung.
4. **Kein Schreiben außerhalb des Auftragsbereichs.** Wenn das Arbeitspaket sagt „keine Code-Änderungen", dann wird **keine** `.java`-Datei angefasst.
5. **Grünes Zwischenziel:** Jeder Arbeitspaket-Lauf endet mit einem grünen `mvn clean verify` — es sei denn, das Arbeitspaket sagt ausdrücklich etwas anderes.
6. **Abschlussbericht ist Pflicht:** Am Ende jedes Arbeitspaket-Laufs entsteht der Bericht nach Vorlage in `docs/arbeitspakete/m<n>/berichte/APxx-bericht.md`. Reviewer-Checkliste am Ende ausfüllen.
## Architekturprinzipien (aus technik-und-architektur.md)
- **Hexagonale Architektur** innerhalb des bestehenden Maven-Projekts
- **Manuelle Constructor Injection**, kein DI-Framework
- **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`.
- **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
## Code-Konventionen
- **Klassennamen, Methoden, Variablen:** Englisch
- **JavaDoc:** Deutsch
- **Benutzer-sichtbare Texte (Bericht, Logausgabe, Fehlermeldungen):** Deutsch
- **Unveränderliche Datenträger:** bevorzugt als Java Records, sofern fachlich-technisch passend
- **Wertobjekte mit Validierung:** reguläre Klassen
- **Tests:** JUnit 5, Mockito. Tests liegen spiegelbildlich zur Produktionsklasse.
## V1-Kategorien (für Regel-Implementierung ab M3)
- **V1-V** = verbindlich in V1 zu prüfen
- **V1-T** = in V1 nur teilweise/lokal prüfbar (strukturell/formal ja, inhaltlich gegen Bestände nein)
- **V1-N** = fachlich existent, in V1 bewusst nicht belastbar prüfbar (keine aktiven Pflichtprüfungen umsetzen!)
- **V1-K** = konventionsbasiert aus angrenzenden Standards
**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
- GUI (JavaFX-Anbindung wird in V2 erwogen)
- Batch-/Verzeichnisverarbeitung
- Server-/Containerbetrieb, Web-UI
- Mehrversionssupport der ASV-Spezifikation
- Referenzdatenbestände (ICD, OPS, IK, BSNR, LANR, Teamnummer, Stammdaten)
- Stufe-4-Prüfungen
- Automatische Korrektur/Rewrite von Eingabedateien
- PDF-Bericht
- JSON-Ausgabe
## Tools und Befehle
- **Build:** `mvn clean verify`
- **Nur Compile:** `mvn clean compile`
- **JAR bauen:** `mvn clean package`
- **Mutation-Tests:** `mvn -P mutation test` (Profil, ab AP02 verfügbar)
- **Tests einzeln:** `mvn test -Dtest=ClassName`
## Wenn du unsicher bist
- **Lies die drei Grunddokumente.** Wahrscheinlich steht die Antwort dort.
- **Halte dich ans Arbeitspaket.** Wenn das Arbeitspaket eine Sache nicht erlaubt oder nicht erwähnt, mache sie nicht.
- **Dokumentiere die Unsicherheit.** Lieber im Abschlussbericht „hier war ich unsicher, Entscheidung X, weil Y" als eine stille, unsichtbare Annahme.
- **Frag nicht nach Bestätigung für Offensichtliches.** Wenn das Arbeitspaket sagt „lies Datei X", dann lies sie, ohne vorher zu fragen.