Neue Tabelle planning_monthly (Monatssummen je Kategorie aus wiederkehrenden
Posten, Einmalposten und allen Kreditraten), Service planning_chart mit
refresh_planning_chart (Advisory-Lock, komplette Neuschreibung), GUI-Hooks
in index/planung_page ueber _safe_refresh, neues Barchart-Panel im
Grafana-Dashboard (Panel 5).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Corrected closing quotation mark in hx-confirm attribute and test assertions
from U+201D (RIGHT DOUBLE QUOTATION MARK) to U+201C (LEFT DOUBLE QUOTATION
MARK), matching German typographic convention („...") and house style (line 114).
Changes by code point:
- finance/app/templates/szenarien.html line 17: 1 × U+201D → U+201C
- finance/tests/test_gui.py lines 501, 521: 2 × U+201D → U+201C
Template lines 17 and 114 now have identical quote code points: U+201E...U+201C.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Critical quoting fix: the hx-confirm attribute now uses U+201D (") for the
closing German quote instead of ASCII " (0x22), which was terminating the
attribute early and losing the confirm message text. The template now
correctly contains: hx-confirm="Szenario „{{ sc.name }}" mit allen..."
Test enhancement: restored the complete assertion text from the brief and
added HTML parsing verification to ensure the attribute value matches exactly
with correct typographic quotes.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Alle drei Bank-Parser gegen die realen Fixtures gehaertet:
- DKB/VR/HVB: Sammlung endet am Schlusssaldo (break), damit Summen,
Rechnungsabschluss und Hinweisseiten nicht mehr in die letzte Buchung
rutschen.
- Generische, rein strukturelle Noise-Filter fuer wiederkehrende
Seitenfuss-/Kopfbloecke und Blattwechsel-Reste (keine Kontodaten hart
codiert); Kopf-/Hinweisbloecke werden als Sequenz uebersprungen.
- VR: Rekonstruktion harter Zeilenumbrueche im Verwendungszweck unter
konservativen Schutzbedingungen (nur purpose, nicht counterparty).
- Neue Noise- und expected-Value-Tests; expected_*.json gitignored.
- Audit-Werkzeug scripts/parser_audit.py ergaenzt (nur lokale Nutzung).
Transaktionszahlen und Saldo-Differenzen unveraendert; max. Laenge des
Verwendungszwecks je Bank deutlich unter 300 Zeichen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Zwei identische Buchungen im selben Auszug teilen sich den dedup_hash. Beim
Confirm markierte die zuerst bestaetigte Buchung ihren Zwilling (autoflush +
Clash-Select) als Duplikat und uebersprang ihn, wodurch der vom Preview
gepruefte Saldo zerstoert wurde. Clash-Query um statement_id != tx.statement_id
erweitert: der Re-Check schuetzt nur noch statement-uebergreifend. Test: Auszug
mit zwei identischen Buchungen -> beide werden bestaetigt.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Kreditzuordnung im Szenario prueft jetzt response.ok, zeigt bei Fehlschlag
eine deutsche Meldung und macht die Checkbox-Aenderung rueckgaengig statt
stillschweigend neu zu laden. process_pdf faengt zusaetzlich zu ParserError
auch unerwartete Parser-Exceptions (z.B. pdfminer bei strukturell kaputten
PDFs) ab und legt dafuer ein sauberes error-Statement an statt eines
unbehandelten 500; die Datei bleibt dabei im Posteingang.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ersetzt die Platzhalter-Routen aus Task 12 durch echte GUI-Seiten: /import
mit Drop-Zone (Fetch-Upload), gepollter Importliste (Status-Badges,
aufklappbarer Vorschau samt Saldo-/Duplikat-Anzeige, Uebernehmen/Verwerfen)
und /planung mit den vier Abschnitten Fixposten (inkl. Vorschlaege),
Einmalposten, Kredite (Tilgungsplan-Aufklapper) und Szenarien
(Kredit-Zuordnung, Modifikatoren, Durchrechnen mit Ergebnisanzeige).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>