Abschluss-Dokumentation V3.1: betrieb.md, Bedienanleitung, Freigabedokument
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+143
-15
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user