Commit Graph

30 Commits

Author SHA256 Message Date
b3b40a5982 docs: Plan-Haekchen nach Umsetzung aller 17 Tasks gesetzt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:51:05 +02:00
1338bd66d5 fix: Inbox/Uploads unter gemeinsamem Bind-Mount (EXDEV bei Path.replace)
Beim E2E-Smoke-Test schlug der Import mit 'Invalid cross-device link'
fehl: rename() funktioniert nicht ueber zwei getrennte Bind-Mounts.
Inbox und Uploads liegen jetzt unter einem einzigen /data-Mount.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:45:36 +02:00
557928ac3f feat: Pod-Skript finance_pod mit systemd-Service und Secrets-Bootstrap
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:37:03 +02:00
a1d8e91cbc feat: Containerfile und Entrypoint
Basis-Image docker.io/library/python:3.12.11-slim wie im Brief gepinnt
(Tag existiert auf Docker Hub, kein Patch-Bump nötig, verifiziert via
podman pull).

Zusätzlich finance/.containerignore ergänzt (.venv/, tests/, .env,
*.sqlite, inbox/, uploads/), da der Build-Kontext sonst echte
Bank-PDFs aus tests/fixtures/ sowie die ~150MB .venv/ in den
Container-Build einschleusen würde.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:26:25 +02:00
fca11f551c fix: Grafana-Datasource-UID gepinnt, Dashboard-Feinheiten
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:23:27 +02:00
43e8e8e8f9 feat: SQL-Views und Grafana-Provisionierung
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 19:18:20 +02:00
df6615c8f7 fix: Fehler-Feedback Kreditzuordnung, robustes PDF-Fehlerhandling
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>
2026-07-17 19:14:43 +02:00
afbbcbe9a5 feat: Import-Seite mit Drag-and-Drop und Planungs-Seite
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>
2026-07-17 19:05:58 +02:00
3847398055 fix: json-form-Extension fuer Standalone-Elemente, Kontoname in Buchungsliste
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:53:23 +02:00
a6009c47e3 feat: Web-GUI Basis, Uebersicht, Buchungsliste
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:45:54 +02:00
e8ea948b38 test: Vorschlagslogik suggest_recurring abgedeckt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:38:52 +02:00
b0cb4883ea feat: Planungs- und Szenario-API mit Projektion und Vorschlaegen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:33:25 +02:00
8ca563cec1 fix: Upload-Sanitizing, atomare Import-Reihenfolge, idempotentes UNBEKANNT-Konto
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:28:15 +02:00
19d870cf20 feat: Import-API mit Vorschau, Saldo-Pruefung und Duplikat-Schutz
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:21:28 +02:00
0576b396f1 fix: PATCH-Buchung ohne Feld laesst Kategorie unveraendert, 404 bei unbekannter Kategorie
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:16:52 +02:00
320abd6542 feat: CRUD-API Konten/Buchungen/Kategorien/Regeln
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:11:56 +02:00
193bbc450c fix: konstante Zeit fuer API-Key-Vergleich, Auth-Tests erweitert
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:07:20 +02:00
a10f4d0b57 feat: FastAPI-App mit API-Key- und Session-Auth
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 18:03:24 +02:00
101ee01af1 feat: PDF-Parser VR/HVB/DKB mit Registry und Fixture-Tests
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:58:33 +02:00
78d94a583b fix: NBSP-Betraege und ParserError bei ungueltigem Datum
- parse_german_amount: Fix non-breaking space (U+00A0) handling in second replace call
  was: .replace(" ", "").replace(" ", "") → now: .replace(" ", "").replace("\xa0", "")
- parse_german_date: Catch ValueError from invalid calendar dates (e.g., 31.02.2026)
  and raise ParserError with "Ungültiges Datum" message instead
- Add test for non-breaking space amount parsing
- Add test for invalid date error handling with pytest.raises

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:34:39 +02:00
d91bb2e331 feat: Parser-Basis, Bank-Erkennung, Saldo-/Duplikat-Pruefung
- ParsedTransaction und ParsedStatement Datenklassen
- parse_german_amount(): German format number parsing (1.234,56 -> Decimal)
- parse_german_date(): DD.MM.YYYY date parsing with optional year
- detect_bank(): Recognize VR/HVB/DKB from text markers
- balance_difference(): Validate statement balance consistency
- dedup_hash(): SHA256-based transaction deduplication

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:30:10 +02:00
877cba4964 test: Absolute-Modifier und Stichtag-Semantik der Projektion
Ergänzte Tests für Lückenschluss:
1. test_absolute_modifier_reduces_outflow: Absolute Modifier reduziert Ausgaben (-200 - 50 = -150)
2. test_absolute_modifier_clamps_to_zero: Absolute Modifier klemmt auf 0 (nie Vorzeichenflip: -200 + 300 = 0)
3. test_cashflow_on_start_date_excluded: Cashflows am start_date werden ausgeschlossen (Teil des Startsaldos)

Alle 18 Tests grün (15 existierend + 3 neu).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:27:41 +02:00
020f41e9f2 feat: Szenario-Engine (Projektion, Modifikatoren, Zahlungsstrom)
Implementiert Task 5 mit TDD-Ansatz: projection.py mit Projection-Klasse
und project()-Funktion für Cashflow-Simulation; scenario.py mit PlainRecurring,
PlainPlanned, PlainModifier Dataclasses und build_cashflows() für Szenarien-Zahlungsströme
mit Modifier-Support (remove, percent, absolute). Alle 15 Tests grün.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:22:36 +02:00
d41db2e10d test: Clamping-Tests Schaltjahr und Quartalsrhythmus
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:20:19 +02:00
82800ea7d0 feat: Recurrence-Terminberechnung
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:16:36 +02:00
9f50435df9 feat: Kredit-Mathematik (Annuitaet, endfaellig)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:12:25 +02:00
d37cb230c4 feat: Datenmodell (SQLAlchemy) und Alembic-Migration
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:09:02 +02:00
53ffd65104 feat: Projekt-Geruest finance/ mit Config und Test-Setup
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:04:59 +02:00
d4a98e117f docs: Implementierungsplan Finanzberatungs-Tool (Plan.md)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 16:19:13 +02:00
309b1039c5 Initial commit 2026-07-17 12:39:50 +02:00