14 KiB
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:
domainapplicationadapter-inadapter-outbootstrap
- Parent-POM mit
packaging=pomanlegen - 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:
0für technisch ordnungsgemäß ausgeführten Lauf1fü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,reasoningverarbeiten - Validierung umsetzen:
titleist verpflichtendreasoningist verpflichtenddateist 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:
0auch bei Teilfehlern einzelner Dateien, solange der Lauf technisch ordnungsgemäß ausgeführt wurde1nur 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