Titellänge nun parametrisierbar

This commit is contained in:
2026-04-22 09:53:03 +02:00
parent 088fd85572
commit 8286d0f0e5
74 changed files with 1450 additions and 236 deletions
+2 -1
View File
@@ -152,6 +152,7 @@ Vorlagen für lokale und Test-Konfigurationen befinden sich in:
| `max.retries.transient` | Maximale transiente Fehlversuche pro Dokument (ganzzahlig, >= 1) |
| `max.pages` | Maximale Seitenzahl pro Dokument (ganzzahlig, > 0) |
| `max.text.characters` | Maximale Zeichenanzahl des Dokumenttexts für KI-Anfragen (ganzzahlig, > 0) |
| `max.title.length` | Maximale Länge des Basistitels in Zeichen (ganzzahlig, 10..120, Default 60). Werte unter 10 oder über 120 verhindern den Start. Werte 1019 und 100120 erzeugen eine Startwarnung. |
| `prompt.template.file` | Pfad zur externen Prompt-Datei (muss vorhanden sein) |
### Provider-Parameter
@@ -271,7 +272,7 @@ YYYY-MM-DD - Titel(1).pdf
YYYY-MM-DD - Titel(2).pdf
```
Das Suffix zählt nicht zu den 20 Zeichen des Basistitels.
Das Suffix zählt nicht zur konfigurierten maximalen Titellänge des Basistitels.
---
+6
View File
@@ -102,6 +102,12 @@ max.pages=10
# Standardvorlage der GUI: 5000.
max.text.characters=5000
# Maximale Länge des Basistitels in Zeichen (10..120). Default 60.
# Werte unter 10 oder ueber 120 verhindern den Start.
# Werte 10-19: Warnung (fuer die meisten Dokumente nicht empfohlen).
# Werte 100-120: Warnung (Dateiname wird sehr lang, Kompatibilitaet mit verschluesselten Volumes pruefen).
max.title.length=60
# ---------------------------------------------------------------------------
# Optionale Parameter
# ---------------------------------------------------------------------------
+14
View File
@@ -246,6 +246,20 @@ Wirtschaftliche Warnschwellen für `max.text.characters`:
`max.pages` wird als Plausibilitäts- und Performance-Hinweis behandelt.
Validierungsregeln für `max.title.length` (Feld „Max. Titellänge (Zeichen)" im Bereich „Verarbeitungslimits"):
| Wertebereich | Bewertung |
|---|---|
| Kein Wert / leer | Fehler Pflichtfeld, Konfiguration nicht lauffähig |
| Keine Ganzzahl (z. B. „abc") | Fehler ungültiger Typ |
| Kleiner als 10 | Fehler Minimum ist 10 Zeichen |
| 10 19 | Warnung Titellänge unter 20 Zeichen ist für die meisten Dokumente nicht empfohlen |
| 20 99 | Normaler Betrieb, keine Meldung |
| 100 120 | Warnung Dateiname wird sehr lang, Kompatibilität mit verschlüsselten Volumes prüfen |
| Größer als 120 | Fehler überschreitet sicheres Limit für verschlüsselte Volumes |
Warnungen verhindern das Speichern nicht. Fehler markieren den Stand als nicht lauffähig; Speichern ist dennoch erlaubt, jedoch erscheint ein deutlicher Hinweis im Meldungsbereich.
---
## 7. Provider-Bedienung und Modellabruf
+120
View File
@@ -0,0 +1,120 @@
# V2.6 Titellänge parametrisierbar machen
**Status:** Entwurf
**Erstellt:** 2026-04-22
**Autor:** Marcus (mit Claude als Mentor)
---
## Ziel
Der maximale Basistitel für KI-generierte PDF-Namen wird nicht mehr hardcodiert,
sondern ist über die Konfigurationsdatei steuerbar. Alle bisherigen Magic Numbers
(20 und 60 Zeichen) werden durch den konfigurierten Wert ersetzt.
---
## Hintergrund
### Bisheriger Zustand
- Titellänge war mit 20 Zeichen im Prompt und 60 Zeichen in der Validierung hardcodiert
- Kein zentraler Konfigurationsparameter, Werte über ~20 Dateien verstreut
- 60-Zeichen-Limit wurde im Rahmen des Produkttests als pragmatischer Zwischenwert eingeführt
### Motivation
- Verschiedene Einsatzszenarien erfordern unterschiedliche Titellängen
- Dateinamenlimits je nach Zielsystem unterschiedlich (siehe Recherche unten)
### Recherchierte Dateinamenlimits (nur Dateiname, ohne Pfad)
| System | Limit |
|---|---|
| Windows 10 / Windows Server 2022 (NTFS) | 255 Zeichen |
| Synology NAS Btrfs (unverschlüsselt) | 255 Zeichen |
| Synology NAS Btrfs (verschlüsselt) | ~143 Zeichen |
**Hinweis:** Der generierte Dateiname hat das Format `YYYY-MM-DD - <Titel>.pdf`,
was bereits 18 Zeichen Overhead bedeutet (Datum + Trennzeichen + Dateiendung).
Das sicherste Maximum für verschlüsselte Synology-Volumes ist daher **120 Zeichen**
für den Basistitel (143 18 = 125, mit Puffer auf 120 gerundet).
---
## Fachliche Anforderungen
### Neuer Konfigurationsparameter
- **Name:** `ai.title.max.length` (finale Benennung obliegt der Implementierung)
- **Typ:** positive Ganzzahl
- **Defaultwert:** `60` (bisheriger Wert bleibt erhalten, kein Breaking Change)
- **Speicherort:** `.properties`-Konfigurationsdatei
---
### Validierungsregeln
| Wert | Typ | Verhalten |
|---|---|---|
| Kein Wert / leer | Fehler | Pflichtfeld, Start wird abgebrochen |
| Keine Ganzzahl (z. B. „abc", „1.5") | Fehler | Ungültiger Typ, Start wird abgebrochen |
| < 1 | Fehler | Wert muss positiv sein, Start wird abgebrochen |
| 19 | Fehler | Minimum ist 10 Zeichen, Start wird abgebrochen |
| 1019 | Warnung | „Titellänge unter 20 Zeichen ist für die meisten Dokumente nicht empfohlen" |
| 2099 | OK | Normaler Betrieb, keine Meldung |
| 100120 | Warnung | „Hohe Titellänge Dateiname wird sehr lang, Kompatibilität mit verschlüsselten Volumes prüfen" |
| > 120 | Fehler | Überschreitet sicheres Limit für verschlüsselte Synology-Volumes, Start wird abgebrochen |
---
### GUI Konfigurationseditor
- Neues Texteingabefeld im Bereich **„Verarbeitungslimits"**
- Beschriftung: **„Max. Titellänge (Zeichen)"**
- Validierung erfolgt beim Speichern ungültige Werte werden **nicht** gespeichert
- Warnungen und Fehlermeldungen erscheinen im **Meldungsbereich** (unten in der GUI)
- Warnungen blockieren das Speichern **nicht**, Fehler hingegen schon
---
### Verarbeitung / Backend
- Alle hardcodierten `20`- und `60`-Zeichen-Limits werden durch den konfigurierten Wert ersetzt
- **Keine Magic Numbers** mehr im Produktionscode
- Der Wert wird beim Start geladen, validiert und an alle betroffenen Komponenten weitergereicht
- Betroffen sind mindestens:
- `AiResponseValidator`
- `TargetFilenameBuildingService`
- Prompt-Template (Hinweistext an die KI)
- JavaDoc aller betroffenen Klassen
---
### Prompt-Template
- Der Hinweis auf die Zeichenbegrenzung im Prompt-Template (`config/prompts/template.txt`)
wird ebenfalls dynamisch mit dem konfigurierten Wert befüllt
- **Hinweis:** Das Prompt-Template liegt außerhalb des JARs und wird zur Laufzeit gelesen.
Die Implementierung muss sicherstellen, dass der konfigurierte Wert zur Laufzeit
in den Prompt eingesetzt wird (z. B. per Platzhalter-Ersetzung).
---
## Nicht in V2.6 enthalten
- Automatisches Kürzen von zu langen KI-Titeln
- Pfadlängen-Validierung (Gesamtpfad inkl. Ordner)
- Unterschiedliche Limits je nach Zielsystem (nur ein globaler Wert)
---
## Abnahmekriterien
- [ ] Neuer Parameter ist in der `.properties`-Datei konfigurierbar
- [ ] Defaultwert 60 ist abwärtskompatibel (bestehende Configs ohne den Parameter funktionieren)
- [ ] Alle Validierungsregeln greifen korrekt (Fehler blockieren Start/Speichern, Warnungen nicht)
- [ ] GUI zeigt das neue Feld im richtigen Bereich
- [ ] Meldungsbereich zeigt passende Warn- und Fehlertexte
- [ ] Keine hardcodierten 20- oder 60-Zeichen-Limits mehr im Produktionscode
- [ ] Prompt-Template enthält den konfigurierten Wert zur Laufzeit
- [ ] Alle bestehenden Tests werden angepasst
- [ ] `mvn clean verify` ist grün
+3 -3
View File
@@ -66,7 +66,7 @@ Fallback auf aktuelles Datum ist erlaubt, wenn kein belastbares Datum eindeutig
### 4.3 Titel
- maximal **20 Zeichen (Basistitel)**
- maximal **konfigurierbare Anzahl Zeichen (Basistitel, Default 60, gültiger Bereich 10..120)**
- verständlich und eindeutig
- keine Sonderzeichen außer Leerzeichen
@@ -87,7 +87,7 @@ Bei Namenskonflikten:
Regel:
- 20 Zeichen gelten nur für den Basistitel
- die konfigurierte maximale Titellänge gilt nur für den Basistitel
- Suffix wird zusätzlich ergänzt
---
@@ -192,7 +192,7 @@ Ein Ergebnis ist korrekt, wenn:
- Format stimmt
- Datum korrekt ist
- Titel max. 20 Zeichen hat
- Titel die konfigurierte maximale Länge einhält
- Dubletten korrekt behandelt wurden
- Begründung vorhanden ist
- Ergebnis reproduzierbar ist
+4 -3
View File
@@ -55,8 +55,8 @@ YYYY-MM-DD - Titel(2).pdf
```
Dabei gilt:
- die **20 Zeichen** beziehen sich nur auf den **Basistitel**
- das Dubletten-Suffix zählt **nicht** zu diesen 20 Zeichen
- die **konfigurierte maximale Titellänge** bezieht sich nur auf den **Basistitel**
- das Dubletten-Suffix zählt **nicht** zur konfigurierten Titellänge
- die Quelldatei wird **nie** überschrieben oder verändert
---
@@ -290,7 +290,7 @@ Der Titel muss technisch diese Regeln erfüllen:
- Deutsch
- verständlich
- eindeutig genug für den Dokumentkontext
- maximal **20 Zeichen** als Basistitel
- maximal die **konfigurierte Titellänge** als Basistitel (Default 60, gültiger Bereich 10..120)
- keine unzulässigen Windows-Dateinamenzeichen
- keine generischen Platzhalter wie z. B. `Dokument`, `Datei`, `Scan`, `PDF`
- Eigennamen bleiben unverändert
@@ -532,6 +532,7 @@ Verbindlich zweckmäßige Parameter:
- `max.retries.transient`
- `max.pages`
- `max.text.characters`
- `max.title.length`
- `prompt.template.file`
Pro unterstützter Provider-Familie existiert ein eigener Parameter-Namensraum mit zweckmäßig mindestens: