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

14 KiB
Raw Blame History

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