1
0
Files
pdf-umbenenner/docs/specs/meilensteine.md

335 lines
14 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 KI-gestützte Umbenennung OCR-verarbeiteter PDFs
## Grundsätze für alle Meilensteine
- Jeder Meilenstein liefert einen **in sich geschlossenen, lauffähigen Entwicklungsstand**.
- Jeder Meilenstein umfasst **Implementierung, Konfiguration, JavaDoc und Tests**, soweit für den jeweiligen Stand sinnvoll.
- Die Lösung wird von Beginn an in **strenger hexagonaler Architektur** umgesetzt.
- Jeder Meilenstein baut auf dem vorherigen Stand auf, ohne Architekturbrüche oder provisorische Seiteneffekte zu erzeugen.
- Die Meilensteine bilden zusammen vollständig die fachlichen Anforderungen sowie das technische Zielbild ab.
- Fachliche Entscheidungen werden nicht in technische Adapter verschoben, technische Infrastruktur nicht in die Domain.
---
## M1 Vollständiges Maven-Projekt und technisches Grundgerüst
### Ziel
Erstellung eines vollständig lauffähigen Multi-Modul-Maven-Projekts als stabile Basis der Gesamtentwicklung.
### Inhalt
- vollständige Maven-Projektstruktur in strenger Hexagonal-Architektur erstellen:
- `domain`
- `application`
- `adapter-in`
- `adapter-out`
- `bootstrap`
- Parent-POM mit `packaging=pom` anlegen
- Modul-POMs vollständig konfigurieren
- alle benötigten Dependencies fest einbinden, insbesondere für:
- Log4j2
- Apache PDFBox
- SQLite JDBC
- OpenAI-kompatiblen HTTP-Zugriff
- JSON-Verarbeitung
- Test-Frameworks
- benötigte Maven-Plugins vollständig konfigurieren, insbesondere für:
- Compiler
- Surefire
- Enforcer
- Shade im Bootstrap-Modul
- Logging-Konfiguration mit Log4j2 anlegen
- lauffähigen Bootstrap-Einstiegspunkt bereitstellen
- `.properties`-Konfiguration grundlegend laden
- Grundvalidierung der Startkonfiguration vorsehen
- Build-, Start- und Testfähigkeit herstellen
### Lauffähiger Stand
- das Projekt baut vollständig mit Maven
- das ausführbare JAR startet erfolgreich
- Logging funktioniert
- Konfiguration wird geladen oder sauber validiert
- das Programm beendet sich kontrolliert ohne fachliche Verarbeitung
### Tests
- Build-/Smoke-Test für Programmstart
- Tests für Konfigurationsladen und Grundvalidierung
- Tests für Logging-/Bootstrap-Grundverhalten, soweit sinnvoll
---
## M2 Hexagonaler Kern, Batch-Startfall und Startschutz
### Ziel
Der fachliche Kern, der Batch-Einstieg und der technische Startschutz sind sauber modelliert, jedoch noch ohne vollständige Dokumentverarbeitung.
### Inhalt
- Domain-Objekte und Statusmodell anlegen
- zentrale Ports definieren
- zentralen Inbound-Use-Case für den Batch-Lauf implementieren
- CLI-/Batch-Adapter implementieren
- Bootstrap-Verdrahtung vervollständigen
- Run-Lock-Port und erste Lock-Implementierung einführen
- Lauf-ID-Konzept einführen
- Exit-Code-Grundverhalten vorbereiten:
- `0` für technisch ordnungsgemäß ausgeführten Lauf
- `1` für harte Start-/Bootstrap-Fehler
- JavaDoc für Architekturgrenzen, Ports und zentrale Typen ergänzen
### Lauffähiger Stand
- das Programm startet als Batch-Prozess
- Lauf-Sperre wird gesetzt und freigegeben
- eine zweite Instanz beendet sich kontrolliert sofort
- der Use-Case wird über den Inbound-Adapter erreicht
- Architekturgrenzen sind technisch sichtbar und eingehalten
- noch keine echte PDF-Verarbeitung, aber kontrollierter Batch-Ablauf vorhanden
### Tests
- Unit-Tests für Domain-Objekte und Statusmodell
- Tests für Lock-Verhalten
- Tests für Bootstrap- und Use-Case-Verdrahtung
- Tests für Exit-Code-Verhalten bei Startschutz- und Bootstrap-Fehlern, soweit in diesem Stand sinnvoll
---
## M3 Dateisystemzugriff, Kandidatenermittlung und PDF-Textauslese
### Ziel
Der Batch-Prozess kann PDFs im Quellordner finden, fachlich als Verarbeitungskandidaten behandeln sowie Text und Seitenzahl extrahieren.
### Inhalt
- Dateisystem-Adapter für Quellordnerzugriff implementieren
- PDF-Dateifilter gemäß fachlicher Regeln umsetzen
- PDFBox-Adapter zur Textauslese implementieren
- Seitenzahlermittlung integrieren
- Prüfung auf „brauchbaren Text“ umsetzen
- konfigurierbares Seitenlimit einführen
- erste Dateiobjekte und Metadatenfluss im Use-Case herstellen
- sicherstellen, dass bei fehlendem brauchbarem Text oder überschrittenem Seitenlimit **kein KI-Aufruf** erfolgt
- JavaDoc für Adapter, Fehlerfälle und Kandidatenbegriff ergänzen
### Lauffähiger Stand
- das Programm scannt den Quellordner
- passende PDFs werden erkannt
- Text und Seitenzahl werden extrahiert
- Dateien ohne brauchbaren Text oder oberhalb des Seitenlimits werden erkannt und protokolliert
- diese Fälle werden als deterministische Inhaltsfehler behandelt
- noch keine KI-Anbindung und noch keine Ergebnisdatei
### Tests
- Unit-Tests für PDF-Filterlogik
- Tests für Textauslese und Seitenzahlerkennung
- Tests für Fehlerfälle „kein brauchbarer Text“ und „Seitenlimit überschritten“
- Tests dafür, dass in diesen Fehlerfällen kein KI-Aufruf stattfindet
---
## M4 Fingerprint, SQLite-Persistenz und Idempotenz
### Ziel
Die Anwendung kann verarbeitete Dateien stabil wiedererkennen, Bearbeitungszustände dauerhaft speichern und jeden Verarbeitungsversuch nachvollziehbar historisieren.
### Inhalt
- Fingerprint-Port und SHA-256-basierte Implementierung einführen
- SQLite-Schema vollständig implementieren
- Persistenzmodell explizit in **zwei Ebenen** umsetzen:
- Dokument-Stammsatz pro Fingerprint
- Versuchshistorie mit einem Datensatz pro Verarbeitungsversuch
- Statusmodell persistent nutzbar machen
- Retry-Zähler und Fehlstatus speichern
- Regeln für „bereits erfolgreich verarbeitet“ und „final fehlgeschlagen“ umsetzen
- Versuchshistorie explizit mit mindestens folgenden technischen Metadaten anlegen:
- Lauf-ID
- Versuchsnummer
- Start- und Endzeitpunkt
- Ergebnisstatus
- Fehlerklasse
- Fehlermeldung bzw. fachliche/systemische Begründung
- Retryable-Flag
- JavaDoc für Persistenzmodell, Statusübergänge und Idempotenz ergänzen
### Lauffähiger Stand
- das Programm erkennt identische Quelldateien über Fingerprint wieder
- erfolgreich verarbeitete Dateien werden in späteren Läufen übersprungen
- final fehlgeschlagene Dateien werden in späteren Läufen übersprungen
- Bearbeitungsstände werden in SQLite gespeichert
- jeder Verarbeitungsversuch wird separat historisiert
- der Batch-Lauf ist idempotent gegenüber Wiederholungen
- noch keine KI-Anbindung und noch keine Zielkopie
### Tests
- Unit-Tests für Fingerprint-Erzeugung
- Repository-Tests gegen SQLite
- Tests für Statusübergänge, Retry-Zähler und Skip-Logik
- Tests für Versuchshistorie pro Lauf und pro Versuch
---
## M5 KI-Integration, Prompt-Bezug und validierter Benennungsvorschlag
### Ziel
Die Anwendung kann aus extrahiertem PDF-Text per KI einen validierten Benennungsvorschlag erzeugen und alle KI-bezogenen Nachvollziehbarkeitsdaten persistent festhalten.
### Inhalt
- externe Prompt-Datei laden und versionierbar anbinden
- OpenAI-kompatiblen HTTP-Adapter implementieren
- Basis-URL, Modellname, Timeout und API-Zugriff vollständig konfigurierbar machen
- Priorität Umgebungsvariable vor Properties für API-Key umsetzen
- Begrenzung des an die KI gesendeten Inhalts umsetzen
- parsebares JSON-Ergebnis mit `date`, `title`, `reasoning` verarbeiten
- Validierung umsetzen:
- `title` ist verpflichtend
- `reasoning` ist verpflichtend
- `date` ist optional
- fachliche Validierung für Datum und Titel umsetzen
- falls die KI **kein** belastbares Datum liefert, den Fallback **durch die Anwendung** über die technische Uhr/Clock vorsehen
- unbrauchbare KI-Antworten als Fehlerfälle behandeln
- Versuchshistorie um KI-Nachvollziehbarkeit explizit erweitern, insbesondere um:
- Modellname
- Prompt-Identifikator oder Prompt-Dateiname
- verarbeitete Seitenzahl
- an KI gesendete Zeichenzahl
- KI-Rohantwort
- KI-Reasoning
- aufgelöstes Datum
- Datumsquelle
- JavaDoc für KI-Port, Antwortvalidierung und Datumsauflösung ergänzen
### Lauffähiger Stand
- das Programm kann für verarbeitbare PDFs einen gültigen Benennungsvorschlag erzeugen
- gültige und ungültige KI-Antworten werden korrekt unterschieden
- bei fehlendem belastbarem KI-Datum wird das Datum durch die Anwendung als Fallback aufgelöst
- KI-Nachvollziehbarkeit ist persistent gespeichert
- noch keine physische Zielkopie, aber der vollständige Benennungsvorschlag ist verfügbar und gespeichert
### Tests
- Unit-Tests für Response-Validierung
- Tests für Prompt-Laden und Konfigurationsauflösung
- Tests für Fehlerfälle wie Timeout, ungültiges JSON und unbrauchbaren Titel
- Tests für Datums-Fallback durch die Anwendung
- Mock-/Adapter-Tests für den KI-Port
---
## M6 Dateinamensbildung, Dublettenbehandlung und Zielkopie
### Ziel
Der vollständige Erfolgspfad wird umgesetzt: Aus KI-Ergebnis und technischer Datumsauflösung wird ein zulässiger Zielname erzeugt und eine Kopie im Zielordner abgelegt.
### Inhalt
- technische Dateinamensbildung implementieren
- verbindliches Zielformat umsetzen: `YYYY-MM-DD - Titel.pdf`
- Windows-Zeichenbereinigung ergänzen
- Titellängenregel für den **Basistitel** umsetzen
- feste deutsche Titelregeln technisch absichern
- fachliche Titelregel „keine Sonderzeichen außer Leerzeichen“ technisch absichern
- Dubletten-Suffix `(1)`, `(2)` usw. implementieren
- Zielordnerprüfung und Zielpfadbildung vervollständigen
- Kopierlogik in den Zielordner implementieren
- temporäre Zieldatei mit finalem Rename bzw. atomisches Schreiben umsetzen, soweit möglich
- Erfolgsstatus erst nach erfolgreichem Schreiben **und** erfolgreicher Persistenz setzen
- finalen Zieldateinamen und Zielpfad persistent speichern
- JavaDoc für Dateinamensregeln, Dubletten und Zielerzeugung ergänzen
### Lauffähiger Stand
- das Programm verarbeitet PDFs Ende-zu-Ende erfolgreich
- bei Erfolg entsteht eine korrekt benannte Kopie im Zielordner
- die Quelldatei bleibt unverändert erhalten
- Dubletten werden korrekt ab `(1)` behandelt
- Erfolgsstatus, Zieldateiname und Zielpfad werden konsistent gespeichert
### Tests
- Unit-Tests für Dateinamensbildung und Dubletten-Suffixe
- Tests für technische Zeichenbereinigung
- Tests für Basistitel-Längenregel und Zielformat
- integrationsnahe Tests für Zielkopie und Erfolgsstatus
---
## M7 Fehlerbehandlung, Retry-Logik, Logging und betriebliche Robustheit
### Ziel
Die Lösung wird robust gegen typische Fehlerfälle und verhält sich in wiederholten Task-Scheduler-Läufen stabil, nachvollziehbar und konsistent.
### Inhalt
- fachliche Retry-Logik über spätere Läufe vollständig umsetzen
- deterministische Inhaltsfehler mit genau **1 Retry** in späterem Lauf umsetzen
- transiente technische Fehler mit Retry bis zum konfigurierten Maximalwert umsetzen
- finalen Fehlerstatus nach Ausschöpfen der jeweiligen Retry-Regeln umsetzen
- Sofort-Wiederholversuch nur für Schreibfehler der Zielkopie implementieren
- Skip-Logik für bereits erfolgreich verarbeitete und final fehlgeschlagene Dateien vervollständigen
- Logging auf den final geforderten Mindestumfang bringen, insbesondere mit:
- Laufstart
- Laufende
- Lauf-ID
- erkannte Quelldatei
- Überspringen bereits erfolgreicher Dateien
- Überspringen final fehlgeschlagener Dateien
- erzeugter Zielname
- Retry-Entscheidung
- Fehler mit Klassifikation
- Sensibilitätsregel für Logs umsetzen:
- vollständige KI-Rohantwort standardmäßig **nicht** ins Log
- vollständige KI-Rohantwort **in SQLite**
- Ausgabe sensibler Inhalte konfigurierbar
- Exit-Code-Verhalten finalisieren:
- `0` auch bei Teilfehlern einzelner Dateien, solange der Lauf technisch ordnungsgemäß ausgeführt wurde
- `1` nur bei harten Start-/Bootstrap-Fehlern
- Konfigurationsvalidierung vervollständigen
- Fehlernachvollziehbarkeit in Logs und SQLite konsistent machen
- JavaDoc zu Fehlersemantik, Retry-Regeln, Exit-Codes und Logging ergänzen
### Lauffähiger Stand
- die Anwendung verhält sich in Erfolg, Teilfehlern und Endfehlern stabil
- wiederholte Scheduler-Läufe führen zu keinem inkonsistenten Verhalten
- Fehler einzelner Dateien blockieren nicht den Gesamtlauf
- Retry-Zähler, Endstatus und Überspringen funktionieren konsistent
- Exit-Code und Logging entsprechen dem definierten Betriebsmodell
### Tests
- Tests für Retry-Abläufe über mehrere Läufe
- Tests für finale Fehlerzustände
- Tests für Skip-Logik bei bereits verarbeiteten Dateien
- Tests für Sofort-Wiederholversuch bei Zielkopierfehlern
- Tests für Logging-Sensibilitätsregel, soweit automatisierbar
- Tests für Konfigurationsfehler und finales Exit-Code-Verhalten
---
## M8 Abschlussmeilenstein: Qualitätssicherung, Feinschliff und vollständige Entwicklungsfreigabe
### Ziel
Die Entwicklung wird vollständig abgeschlossen und der Gesamtstand auf Produktionsreife innerhalb des definierten Projektumfangs gebracht.
### Inhalt
- Review aller Architekturgrenzen und Sicherstellung der strengen Hexagonal-Architektur
- Abgleich aller Meilenstein-Ergebnisse mit Fachlichkeit sowie Technik/Architektur
- letzte technische und fachliche Restlücken schließen
- JavaDoc vervollständigen
- Testabdeckung gezielt vervollständigen
- Konfigurationsbeispiel und Startdokumentation konsolidieren
- Logging- und Fehlermeldungen sprachlich und inhaltlich schärfen
- letzte Inkonsistenzen in Statusmodell, Persistenz und Adapterverhalten bereinigen
- End-to-End-Gesamtprüfung des vollständigen Soll-Ablaufs durchführen
### Lauffähiger Stand
- die Lösung ist innerhalb des definierten Umfangs vollständig implementiert
- alle Kernanforderungen aus Fachlichkeit sowie Technik/Architektur sind umgesetzt
- der Stand ist stabil, testbar, dokumentiert und für den geplanten Betrieb bereit
### Tests
- vollständige End-to-End-Tests, soweit im Projekt sinnvoll automatisierbar
- Regressionstests für Kernregeln
- Konsistenztests für Persistenz, Dateinamensbildung, Retry-Logik und Skip-Verhalten
- abschließende Smoke-Tests für Build, Start und Batch-Lauf
---
## Abschlussbewertung
Die Meilensteine sind mit diesem Stand:
- vollständig auf das fachliche Zielbild ausgerichtet
- mit dem technischen Architekturziel konsistent
- widerspruchsfrei und logisch aufeinander aufbauend
- für eine schrittweise produktive Umsetzung geeignet