Abschluss-Dokumentation V3.1: betrieb.md, Bedienanleitung, Freigabedokument

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-06 07:45:32 +02:00
parent 735b3af09f
commit eae2472b7e
3 changed files with 370 additions and 17 deletions
+143 -15
View File
@@ -337,13 +337,23 @@ vorbelegt.
## 8. Dirty-State und Schutzdialoge
### Konfigurations-Tab
Sobald eine geladene oder neu erzeugte Konfiguration bearbeitet wird, gilt der
Editor als „dirty" (ungespeicherte Änderungen). Zwei visuelle Markierungen
Editor als „dirty" (ungespeicherte Änderungen). Drei visuelle Markierungen
zeigen diesen Zustand an:
- Ein **`*`**-Präfix im **Tab-Titel**: `* Konfiguration`
- Ein **`*`**-Präfix im Fenstertitel
- Ein kleines **„geändert"**-Label im Header
Das Dirty-Flag wird über einen **Baseline-Snapshot** ermittelt: Beim Laden einer
Konfiguration wird ein Snapshot des geladenen Zustands gespeichert. Erst wenn
der aktuelle Formularinhalt vom Snapshot abweicht, erscheint der Dirty-Indikator.
Programmgesteuertes Laden und Normalisieren von Feldinhalten lösen keinen
Dirty-State aus. Auch ein DB-Pfad-Wechsel über „Neue Datenbank anlegen..."
(Abschnitt 16a) versetzt den Konfigurations-Tab in den Dirty-State.
Vor den Aktionen „Neu", „Öffnen" und beim Schließen des Fensters prüft die GUI,
ob ungespeicherte Änderungen vorhanden sind. Ist dies der Fall, erscheint ein
Schutzdialog mit drei Optionen:
@@ -354,6 +364,12 @@ Schutzdialog mit drei Optionen:
| **Verwerfen** | Verwirft die Änderungen und führt die Aktion aus |
| **Abbrechen** | Bricht die Aktion ab; die Änderungen bleiben erhalten |
### Prompt-Tab
Der Prompt-Tab zeigt ebenfalls ein Asterisk im Tab-Titel (`Prompt *`), sobald der
TextArea-Inhalt vom gespeicherten Stand abweicht. Das Verhalten ist identisch zum
Konfigurations-Tab (Schutzdialog, Reset nach Speichern).
---
## 9. `.bak`-Sicherung beim Überschreiben und Legacy-Migration
@@ -619,10 +635,31 @@ Das Panel enthält drei Bereiche:
- **Seitennavigation:** Über die Schaltflächen **„◀"** und **„▶"** (oder das Mausrad)
kann seitenweise geblättert werden. Die aktuelle Seitenzahl und Gesamtseitenzahl
werden angezeigt.
- **Fit-to-view:** Die Seite wird automatisch an die verfügbare Fläche angepasst
(preserveRatio=true). Keine Scrollbalken, keine manuelle Zoom-Einstellung.
- **Fit-to-Width:** Nach dem Laden wird die Seite automatisch an die verfügbare Breite
angepasst (preserveRatio=true).
- Das Rendering erfolgt direkt über Apache PDFBox bei 120 DPI.
#### Zoom per Mausrad (Strg+Mausrad)
- **Strg + Mausrad nach oben/unten** zoomt die Vorschau herein bzw. heraus.
- Zoombereich: **10 % bis 500 %**, ca. 10 % je Mausrad-Rastpunkt.
- Nach dem ersten manuellen Zoom verlässt die Vorschau den Fit-to-Width-Modus.
Fit-to-Width wird erst wieder aktiv, wenn ein neues PDF geladen oder der
Fit-to-Width-Button explizit betätigt wird.
- Beim Laden eines neuen PDF wird der Zoom auf Fit-to-Width zurückgesetzt.
- Beim Zoomen bleibt die sichtbare Viewport-Mitte möglichst stabil.
- Trackpad-Gesten (sehr kleine Delta-Werte) werden intern akkumuliert, bis ein
vollständiger Zoomschritt erreicht ist.
- **Ohne Strg:** Mausrad scrollt die Seite normal (kein Zoom).
- ScrollEvents mit gedrückter Strg-Taste werden immer konsumiert, sodass kein
paralleles Scrollen im Hintergrund stattfindet.
#### Grab & Pan (Handcursor im Zoom-Modus)
Im vergrößerten Zustand (Zoom über Fit-to-Width) wechselt der Mauszeiger über
der Vorschau auf einen **Handcursor**. Durch Klicken und Ziehen (Drag) kann die
Ansicht verschoben werden. Im Fit-to-Width-Modus ist Pan nicht aktiv.
### KI-Begründung und Fehlertext
Der mittlere Bereich zeigt das KI-Reasoning des ausgewählten Eintrags.
@@ -792,11 +829,38 @@ Die Tabelle zeigt folgende Spalten:
Über dem Tab befinden sich drei Bedienelemente:
- **Freitextsuche** filtert über Quelldateiname und Zieldateiname, case-insensitiv
- **Status-Filter** ComboBox zur Auswahl eines bestimmten Status oder „Alle"
- **„Aktualisieren"** lädt die Liste neu aus der Datenbank (kein automatisches Echtzeit-Tailing)
- **Status-Filter** ComboBox zur Auswahl eines bestimmten Status oder „Alle Status"
- **„Suchen"** startet die Suche sofort; alternativ die Enter-Taste im Suchfeld
Die Suche erfolgt datenbanksseitig; Sonderzeichen in der Sucheingabe werden korrekt behandelt.
#### Live-Suche
Die Freitextsuche reagiert **live** auf Tastatureingaben: 300 ms nach dem letzten
Tastendruck startet die Suche automatisch auf einem Hintergrund-Thread.
Der Such-Button und die Enter-Taste starten die Suche sofort ohne Verzögerung.
Nach jeder neuen Suchanfrage wird die Tabellenauswahl vollständig geleert;
Detailbereich und Aktionsbuttons werden zurückgesetzt. Ein leeres Suchfeld zeigt
alle Einträge (bis Limit 500).
### Mehrfachauswahl
Die Verlauf-Tabelle unterstützt **Mehrfachauswahl**:
| Geste | Wirkung |
|---|---|
| **Klick** | Einzelauswahl |
| **Strg+Klick** | Einzelnen Eintrag zur Auswahl hinzufügen oder entfernen |
| **Shift+Klick** | Bereich vom letzten zur aktuellen Zeile auswählen |
| **Strg+A** | Alle sichtbaren Einträge auswählen (**nur wenn die Tabelle den Fokus hat**) |
> **Hinweis:** Liegt der Fokus im Suchfeld, wirkt Strg+A als normale Textselektion
> im Suchfeld und selektiert keine Tabellenzeilen.
Bei Mehrfachauswahl zeigt der **Detailbereich** den Platzhaltertext
„X Einträge ausgewählt." (statt Dokumentdetails).
### Detailbereich
Ein Klick auf eine Zeile öffnet im rechten Bereich drei Informationsblöcke:
@@ -813,36 +877,100 @@ Ein Klick auf eine Zeile öffnet im rechten Bereich drei Informationsblöcke:
|--------|--------|
| # | Versuchsnummer |
| Datum | Endzeitpunkt des Versuchs |
| Status | Ergebnisstatus des Versuchs |
| Status | Ergebnisstatus des Versuchs (lesbarer Anzeigetext, kein Enum-Rohname) |
| Provider | Verwendeter KI-Provider |
| Modell | Verwendetes Sprachmodell |
| Vorgeschlagener Name | Vom Versuch erzeugter Zieldateiname |
**KI-Begründung:** Das `ai_reasoning` des ausgewählten Versuchs als nicht editierbarer Text.
**KI-Begründung / Fehlerursache:**
Das `ai_reasoning` des zuletzt ausgewählten Versuchs als nicht editierbarer Text.
Ist kein Reasoning gespeichert, erscheint ein gedimmter Platzhaltertext
„Keine KI-Begründung für diesen Versuch gespeichert."
Bei Einträgen mit Status `FAILED_FINAL`, `FAILED_RETRYABLE` oder
`SKIPPED_FINAL_FAILURE` wird zusätzlich die **Fehlerursache** des letzten
fehlgeschlagenen Versuchs angezeigt. Liegt keine Fehlerursache vor (z. B. ältere
Einträge), erscheint ebenfalls ein Platzhaltertext.
### Aktionen
Unterhalb der Dokumentenliste stehen zwei Aktionen zur Verfügung:
Unterhalb der Dokumentenliste stehen zwei Aktionen zur Verfügung.
**Beide Aktionen unterstützen Mehrfachauswahl** (≥ 1 Eintrag):
**„Status zurücksetzen"**
Setzt den Status des ausgewählten Dokuments auf „Wartet auf Verarbeitung" zurück,
sodass es beim nächsten Verarbeitungslauf automatisch erneut verarbeitet wird.
Setzt den Status der ausgewählten Dokumente auf „Wartet auf Verarbeitung" zurück,
sodass sie beim nächsten Verarbeitungslauf automatisch erneut verarbeitet werden.
Die Versuchshistorie bleibt vollständig erhalten kein Versuch wird gelöscht.
Vor der Aktion erscheint ein Bestätigungsdialog.
Vor der Aktion erscheint ein Bestätigungsdialog: „X Einträge zurücksetzen?"
Bei Mehrfachauswahl werden Einträge einzeln zurückgesetzt. Nach Abschluss erscheint
eine kompakte Zusammenfassung „X von Y erfolgreich verarbeitet." Detaillierte
Einzelfehler werden geloggt.
Wann sinnvoll: wenn die Ursache eines Fehlers behoben wurde (z. B. OCR nachträglich
durchgeführt, Passwortschutz entfernt) und das Dokument erneut verarbeitet werden soll.
**„Eintrag löschen"**
Löscht den Stammsatz und alle Verarbeitungsversuche des ausgewählten Dokuments
Löscht die Stammsätze und alle Verarbeitungsversuche der ausgewählten Dokumente
vollständig aus der Datenbank. Diese Aktion ist **nicht rückgängig zu machen**.
Vor der Aktion erscheint ein Bestätigungsdialog mit einem ausdrücklichen Hinweis
auf die Unwiderruflichkeit.
Vor der Aktion erscheint ein Bestätigungsdialog: „X Einträge unwiderruflich löschen?"
Bei Mehrfachauswahl gilt dieselbe Partial-Success-Logik wie beim Zurücksetzen.
**Hinweis:** Beide Aktionen sind während eines laufenden Verarbeitungslaufs deaktiviert.
Ein Hinweis „Aktion während Verarbeitungslauf nicht möglich." wird angezeigt.
Nach Laufende werden die Buttons automatisch reaktiviert, sofern eine Auswahl besteht
ohne dass der Benutzer die Auswahl erneuern muss.
---
## 16a. Neue Datenbank anlegen
Über **Datenbank → Neue Datenbank anlegen...** in der Menüleiste kann eine neue,
leere SQLite-Datenbank erstellt und sofort als aktive Datenbank der Anwendung
gesetzt werden ohne Neustart.
### Voraussetzung
Der Menüpunkt ist nur aktiv, wenn kein Verarbeitungslauf läuft.
### Ablauf
1. Ein Dateidialog öffnet sich (Filter: `*.sqlite` und `*.db`). Neue Zieldatei
wählen oder eingeben.
2. Die Anwendung prüft, ob die gewählte Datei identisch mit der aktuell aktiven
Datenbank ist (normalisierter, case-insensitiver Pfadvergleich). Bei
Übereinstimmung erscheint eine Fehlermeldung, kein Überschreiben.
3. Existiert die gewählte Datei bereits (andere als aktive DB): Bestätigungsdialog
„Die Datei existiert bereits. Überschreiben?"
4. Die neue DB wird als temporäre Datei im Zielverzeichnis erzeugt. Flyway
führt alle Migrationsskripte auf den neuesten Schema-Stand aus.
5. Verbindungstest: Verbindung öffnen, Flyway-History prüfen, Leseabfrage prüfen.
6. Nach erfolgreichem Test: atomarer Move zur Zieldatei
(`ATOMIC_MOVE + REPLACE_EXISTING`). Schlägt dies fehl, bricht der Vorgang
mit einer klaren Fehlermeldung ab.
7. Die aktive Datenbankverbindung wechselt zur neuen DB.
8. Der Verlauf-Tab lädt neu: „Noch keine Verarbeitungen vorhanden."
9. Die Statuszeile aktualisiert den DB-Pfad.
10. Die Konfiguration wird als geändert markiert (Dirty-State im Konfig-Tab).
11. Im Meldungsbereich erscheint der Hinweis:
„Neue Datenbank ist aktiv. Konfiguration speichern, damit diese Datenbank
beim nächsten Start verwendet wird."
### Fehlerfall
Schlägt ein Schritt fehl, bleibt die bisherige Datenbank vollständig unverändert
in Betrieb. Die temporäre Datei wird gelöscht. Ein Fehlerdialog erscheint mit
einer konkreten Meldung.
### Wichtiger Hinweis
**Die Konfigurationsdatei wird durch den DB-Wechsel nicht automatisch gespeichert.**
Damit die neue Datenbank beim nächsten Start der Anwendung verwendet wird, muss
die Konfiguration explizit über „Speichern" oder „Speichern unter" gesichert werden.
Der Dirty-State im Konfig-Tab und der Hinweis im Meldungsbereich erinnern daran.
---