# M1 - Arbeitspakete

## Geltungsbereich

Dieses Dokument beschreibt ausschließlich die Arbeitspakete für den definierten Meilenstein **M1 – Vollständiges Maven-Projekt und technisches Grundgerüst**.

Die Arbeitspakete sind so geschnitten, dass jedes Paket in **einem Durchgang** von einer KI umgesetzt werden kann und danach wieder ein **fehlerfreier, buildbarer Stand** vorliegt.

## Konsistenz- und Schnittregeln

- Jedes Arbeitspaket liefert einen in sich geschlossenen, fehlerfreien Zwischenstand.
- Die Reihenfolge ist verbindlich, weil jedes Paket auf dem vorherigen Stand aufbaut.
- Der Fokus bleibt strikt auf **M1**.
- Es erfolgt **kein Vorgriff auf spätere Meilensteine**.
- Insbesondere sind in M1 noch **nicht** enthalten:
  - fachliche PDF-Verarbeitung
  - Batch-Fachablauf
  - Run-Lock
  - Fingerprint
  - SQLite-Persistenz
  - KI-Aufruf
  - Prompt-Verarbeitung
  - Dateinamenbildung
  - Zielkopie
  - Retry-Logik

---

## AP-001 Projekt-Skelett und Parent-POM

### Ziel
Das Multi-Modul-Maven-Projekt wird strukturell korrekt angelegt.

### Inhalt
- Root-Projekt mit Parent-POM (`packaging=pom`) anlegen
- folgende Module anlegen:
  - `pdf-umbenenner-domain`
  - `pdf-umbenenner-application`
  - `pdf-umbenenner-adapter-in-cli`
  - `pdf-umbenenner-adapter-out`
  - `pdf-umbenenner-bootstrap`
- minimale Java- und Ressourcenstruktur pro Modul anlegen
- neutrale Platzhalterklassen nur dort ergänzen, wo sie für einen fehlerfreien Reactor-Build erforderlich sind

### Fertig wenn
- die Zielstruktur vollständig vorhanden ist
- der Maven-Reactor grundsätzlich ausführbar ist
- noch keine fachliche Verarbeitung implementiert ist

---

## AP-002 Modul-POMs, Dependency-Management und Build-Plugins

### Ziel
Alle Maven-Grundlagen werden vollständig und konsistent konfiguriert.

### Inhalt
- Child-POMs vollständig anlegen und sauber auf den Parent ausrichten
- Java 21 zentral konfigurieren
- zentrale Versionsverwaltung im Parent-POM vorsehen
- benötigte Dependencies für M1 fest einbinden, insbesondere für:
  - Log4j2
  - Apache PDFBox
  - SQLite JDBC
  - OpenAI-kompatiblen HTTP-Zugriff
  - JSON-Verarbeitung
  - Test-Frameworks
- benötigte Maven-Plugins konfigurieren, insbesondere:
  - Compiler
  - Surefire
  - Enforcer
  - Shade im Bootstrap-Modul

### Fertig wenn
- alle POMs konsistent sind
- keine zyklischen Modulabhängigkeiten existieren
- das Projekt fehlerfrei baut

---

## AP-003 Hexagonales Grundgerüst und technischer Startpfad

### Ziel
Die Hexagonal-Architektur wird technisch sichtbar gemacht und ein minimaler Startpfad wird hergestellt.

### Inhalt
- modulbezogene Paketstruktur gemäß Architekturverantwortung anlegen
- minimale technische Verdrahtung über folgende Schichten herstellen:
  - Bootstrap
  - Adapter-In CLI
  - Application
- kontrollierten No-Op-Startpfad ohne fachliche Verarbeitung implementieren
- erste JavaDoc- und `package-info`-Beschreibungen für Modulverantwortung und Architekturgrenzen ergänzen

### Fertig wenn
- ein technischer Startpfad vorhanden ist
- die Anwendung kontrolliert startet und endet
- die Hexagonal-Struktur im Projekt klar erkennbar ist

---

## AP-004 Log4j2-Basiskonfiguration

### Ziel
Das Logging wird technisch sauber und reproduzierbar eingerichtet.

### Inhalt
- Log4j2-Konfiguration anlegen
- sinnvolle Basis für Konsolen- und Dateilogging konfigurieren
- Logging in den technischen Startpfad integrieren
- Start- und End-Logging des Programms ergänzen
- sicherstellen, dass keine Logging-Infrastruktur in die Domain eingebracht wird

### Fertig wenn
- beim Programmstart nachvollziehbare Logs entstehen
- Logging über die Basiskonfiguration funktioniert
- die Architekturgrenzen weiterhin eingehalten sind

---

## AP-005 Properties-Konfigurationsmodell und Konfigurationsloader

### Ziel
Die technische Startkonfiguration kann typisiert geladen werden.

### Inhalt
- typisiertes Konfigurationsmodell für die M1-relevanten Parameter anlegen
- Laden einer `.properties`-Datei implementieren
- Konfigurationszugriff als technische Infrastruktur platzieren
- Vorrang einer Umgebungsvariable vor `api.key` aus der Properties-Datei umsetzen
- Beispiel-Konfigurationsdatei für lokale Starts und Teststarts bereitstellen

### Fertig wenn
- eine gültige `.properties`-Datei sauber geladen werden kann
- das Konfigurationsobjekt im technischen Startpfad verfügbar ist
- die Prioritätsregel für den API-Key umgesetzt ist

---

## AP-006 Grundvalidierung der Startkonfiguration und kontrollierter Fehlerabbruch

### Ziel
Ungültige Startkonfigurationen werden vor jedem Verarbeitungslauf sauber abgefangen.

### Inhalt
- Pflichtparameter der Startkonfiguration validieren
- technische Grundvalidierung für Werte und Pfade umsetzen, soweit für M1 erforderlich
- Fehlerbehandlung für ungültige oder unvollständige Startkonfiguration ergänzen
- sicherstellen, dass bei ungültiger Konfiguration kein Verarbeitungslauf beginnt
- den Fehlerfall kontrolliert protokollieren und mit Fehlerstatus beenden

### Fertig wenn
- ungültige Konfiguration den Start vor jeder fachlichen Verarbeitung beendet
- Fehler nachvollziehbar geloggt werden
- der Ablauf kontrolliert fehlschlägt

---

## AP-007 Unit-Tests für Konfigurationsladen und Grundvalidierung

### Ziel
Die zentralen M1-Bausteine werden automatisiert abgesichert.

### Inhalt
- Tests für gültiges Konfigurationsladen implementieren
- Tests für fehlende Pflichtparameter implementieren
- Tests für ungültige Konfigurationswerte implementieren
- Tests für den Vorrang der Umgebungsvariable beim API-Key implementieren
- Tests für das Grundverhalten von Bootstrap, Loader und Validierung ergänzen, soweit innerhalb von M1 sinnvoll

### Fertig wenn
- die Test-Suite grün ist
- Konfigurationsladen und Grundvalidierung ausreichend abgesichert sind

---

## AP-008 Smoke-Test des ausführbaren JARs und M1-Abschlussstand

### Ziel
Der M1-Zielzustand wird als reales, ausführbares Artefakt nachgewiesen.

### Inhalt
- ausführbares Standalone-JAR final verifizieren
- Smoke-Test für `java -jar ...` absichern
- prüfen, dass:
  - das Projekt vollständig baut
  - das ausführbare JAR startet
  - Logging funktioniert
  - Konfiguration geladen oder sauber validiert wird
  - das Programm kontrolliert endet
  - noch keine fachliche Verarbeitung stattfindet
- den M1-Stand abschließend auf Konsistenz und Vollständigkeit prüfen

### Fertig wenn
- das ausführbare JAR erfolgreich nachweisbar startbar ist
- der definierte M1-Zielzustand vollständig erreicht ist
- ein fehlerfreier, übergabefähiger Stand vorliegt

---

## Abschlussbewertung

Die Arbeitspakete sind inhaltlich konsistent, widerspruchsfrei und sauber auf den Meilenstein **M1** zugeschnitten. Sie decken den vollständigen technischen Zielumfang von M1 ab, ohne fachliche oder infrastrukturelle Inhalte späterer Meilensteine vorwegzunehmen.
