# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Projekt Desktop-Fakturierungsanwendung (Einzelplatz) für ein Hochschulprojekt (SE1, Team 1). Java 21, Swing-GUI mit FlatLaf, Maven-Build. Alle Texte (Klassen, Methoden, Variablen, Kommentare, Spezifikationen) sind auf **Deutsch**. ## Build & Run ```bash ./mvnw compile # Kompilieren ./mvnw test # Alle Tests (JUnit 5) ./mvnw test -Dtest=KundenVerwaltungTest # Einzelne Testklasse ./mvnw test -Dtest=KundenVerwaltungTest#testMethode # Einzelne Testmethode ./mvnw package # Fat-JAR bauen (maven-shade-plugin) java -jar target/fakturierung-1.0.0.jar # Anwendung starten ``` ## PDF-Spezifikationen bauen Die `*.md`-Dateien unter `dokumentation/` (z. B. `dokumentation/anforderungen/Lastenheft.md`, `Pflichtenheft_Gruppe{A-D}.md`, `dokumentation/tests/Modultestplan.md`) werden mit pandoc + XeLaTeX zu PDF konvertiert — es gibt kein Build-Skript, der Aufruf erfolgt manuell. ## Diagramme PlantUML-Quelldateien liegen in `dokumentation/diagramme/`. Rendering via `tools/plantuml.jar`. ## Architektur Vier fachliche Module, jeweils einer Projektgruppe zugeordnet: | Paket | Gruppe | Verantwortung | |-------|--------|---------------| | `dokumente` | A | Dokumentenzyklus: Angebot → Auftragsbestätigung → Lieferschein → Rechnung, Belegnummern, PDF-Export | | `produkte` | B | Produktverwaltung (CRUD, Nummernvergabe, Löschsperre) | | `kunden` | C | Kundenverwaltung (CRUD, Nummernvergabe, Löschsperre) | | `gui` | D | Swing-Oberfläche (HauptFenster, Panels, Dialoge, Wizard) | | `gemeinsam` | — | Querschnitt: EreignisBus, JsonPersistenz, CSV-Hilfe, Exceptions | ### Wichtige Muster - **EreignisBus** (Observer): Services melden Datenänderungen (`DatenBereich.KUNDEN/PRODUKTE/DOKUMENTE`), GUI-Panels abonnieren und aktualisieren sich. Kein manueller Refresh nötig. - **Repository-Interfaces** (`KundenRepository`, `ProduktRepository`, `DokumentRepository`) mit JSON-Implementierungen. Persistenz erfolgt atomar via `JsonPersistenz.schreibeAtomar()`. - **NummernGenerator-Interfaces** (`KundennummernGenerator`, `ProduktnummernGenerator`, `BelegnummernGenerator`) mit `Einfacher*`-Implementierungen, die den nächsten Wert aus dem Repository-Bestand ableiten. - **ReferenzPrüfung**: `DokumentReferenzPruefung` verhindert Löschung von Kunden/Produkten, die in Dokumenten referenziert werden. - **Wiring** in `Main.java`: Manuelle Dependency Injection — kein Framework. ### Persistenz Alle Daten liegen als JSON-Dateien im Verzeichnis `daten/` (kunden.json, produkte.json, dokumente.json). Dieses Verzeichnis ist in `.gitignore`.