Fix Bug #12: Bindestrich im Titel wird jetzt erlaubt
- Validierungsregel in AiResponseValidator erweitert um Bindestrich (-) - Test angepasst: validate_titleWithHyphen jetzt als Valid-Case akzeptiert - Dokumentation (fachliche Anforderungen, CLAUDE.md) aktualisiert - mvn clean verify erfolgreich durchgelaufen
This commit is contained in:
@@ -123,7 +123,7 @@ Ein Arbeitspaket ist erst fertig, wenn die betroffenen öffentlichen Klassen und
|
||||
- Bei Namenskollisionen: `YYYY-MM-DD - Titel(1).pdf`, `YYYY-MM-DD - Titel(2).pdf`, ...
|
||||
- Die **konfigurierte maximale Titellänge** gilt nur für den **Basistitel**; das Dubletten-Suffix zählt nicht mit
|
||||
- Das Dubletten-Suffix wird unmittelbar vor `.pdf` angehängt
|
||||
- Titel sind **deutsch**, verständlich, eindeutig und enthalten keine Sonderzeichen außer Leerzeichen
|
||||
- Titel sind **deutsch**, verständlich, eindeutig und enthalten keine Sonderzeichen außer Leerzeichen und Bindestrichen
|
||||
- Eigennamen bleiben unverändert
|
||||
- Datumsermittlung mit Priorität aus den fachlichen Anforderungen; wenn kein belastbares Datum eindeutig ableitbar ist, ist das **aktuelle Datum** als Fallback erlaubt
|
||||
- Mehrdeutige Dokumente liefern **kein** unsicheres Ergebnis, sondern einen Fehler
|
||||
|
||||
@@ -68,7 +68,7 @@ Fallback auf aktuelles Datum ist erlaubt, wenn kein belastbares Datum eindeutig
|
||||
|
||||
- maximal **konfigurierbare Anzahl Zeichen (Basistitel, Default 60, gültiger Bereich 10..120)**
|
||||
- verständlich und eindeutig
|
||||
- keine Sonderzeichen außer Leerzeichen
|
||||
- keine Sonderzeichen außer Leerzeichen und Bindestrichen
|
||||
|
||||
---
|
||||
|
||||
|
||||
+3
-3
@@ -102,7 +102,7 @@ public final class AiResponseValidator {
|
||||
|
||||
if (!isAllowedTitleCharacters(title)) {
|
||||
return AiValidationResult.invalid(
|
||||
"Title contains disallowed characters (only letters, digits, and spaces are permitted): '"
|
||||
"Title contains disallowed characters (only letters, digits, spaces, and hyphens are permitted): '"
|
||||
+ title + "'",
|
||||
AiErrorClassification.FUNCTIONAL);
|
||||
}
|
||||
@@ -142,14 +142,14 @@ public final class AiResponseValidator {
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns {@code true} if every character in the title is a letter, digit, or space.
|
||||
* Returns {@code true} if every character in the title is a letter, digit, space, or hyphen.
|
||||
* <p>
|
||||
* Permits Unicode letters including German Umlauts (ä, ö, ü, Ä, Ö, Ü) and ß.
|
||||
*/
|
||||
private static boolean isAllowedTitleCharacters(String title) {
|
||||
for (int i = 0; i < title.length(); i++) {
|
||||
char c = title.charAt(i);
|
||||
if (!Character.isLetter(c) && !Character.isDigit(c) && c != ' ') {
|
||||
if (!Character.isLetter(c) && !Character.isDigit(c) && c != ' ' && c != '-') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -139,12 +139,12 @@ class AiResponseValidatorTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void validate_titleWithHyphen_returnsInvalid() {
|
||||
void validate_titleWithHyphen_isAccepted() {
|
||||
ParsedAiResponse parsed = ParsedAiResponse.of("Strom-Rechnung", "reasoning", null);
|
||||
|
||||
AiResponseValidator.AiValidationResult result = validator.validate(parsed);
|
||||
|
||||
assertThat(result).isInstanceOf(AiResponseValidator.AiValidationResult.Invalid.class);
|
||||
assertThat(result).isInstanceOf(AiResponseValidator.AiValidationResult.Valid.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user