164 Commits
Author SHA256 Message Date
rdmsandClaude Opus 5.5 4c3fa25cd0 docs: A14 Plan-Haken
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:43:46 +02:00
rdmsandClaude Opus 5.5 d51287e8d8 fix: Final-Review A14 – Beispielbetrag ersetzt, Vorzeichen-Hinweis Neuer Betrag, Laufzeit max 1200, Mermaid
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:39:05 +02:00
rdmsandClaude Opus 5.5 eb68781a1d chore: Release v0.14.0 (Szenario-Zeitraum, Neuer Betrag, Szenario-Zahlungen)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:30:02 +02:00
rdmsandClaude Haiku 4.5 30330801cc fix: Tabellen scrollen auf schmalen Bildschirmen in sich (A14-T6 Fixrunde)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-09-30 13:28:19 +02:00
rdmsandClaude Haiku 4.5 dfb814955f fix: Navigation bricht auf schmalen Bildschirmen um, gewähltes Tortensegment oben, Legendenzusatz nicht fett (A14-T6)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-09-30 13:16:57 +02:00
rdmsandClaude Haiku 4.5 94fd7ab96e fix: Kredit-Ausgabe ohne Laufzeit-Grenze (A14-T5 Fixrunde)
LoanOut erbt nicht mehr von LoanIn - definiert term_months ohne Grenzen.
Altbestände mit term_months>1200 (vor Validierung direkt eingefügt)
crashen GET /api/loans und PATCH nicht mehr.

Regression-Test: test_altbestand_kredit_mit_laufzeit_ausserhalb_grenzen
- Inseriert Loan mit term_months=1500 direkt via DB
- Bestätigt GET /api/loans und Ausgabe-Serialisierung funktioniert
- Keine Validierung auf Output

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-09-30 13:14:14 +02:00
rdmsandClaude Haiku 4.5 80b8b369c7 refactor: Tilgungsplan-Helfer schedule_for, Kredit-Laufzeit 1–1200 Monate (A14-T5)
- Neuer schedule_for() in app/engine/loans.py: vereinheitlicht Tilgungsplan-Erstellung
- Laufzeit-Validierung in LoanIn und LoanPatch: 1–1200 Monate
- Aufrufstellen aktualisiert (routers/planning.py, services/breakdown.py,
  services/projection_service.py, services/planning_chart.py)
- Keine direkten loan_schedule(Decimal(...)) Aufrufe außerhalb engine/loans.py mehr
- Tests für schedule_for und Laufzeit-Grenzen (1, 1200, sowie 0/-5/1201 Ablehnung)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-09-30 13:10:55 +02:00
rdmsandClaude Opus 5.5 cd7ba6aa6a feat: Szenarien-Seite mit zwei Formularen, Zeitraum-Spalte und wiederkehrenden Szenario-Zahlungen (A14-T4)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:08:16 +02:00
rdmsandClaude Opus 5.5 8911623c15 fix: Migration e7f1a9c3b214 auch auf SQLite lauffähig (A14-T1 Fixrunde)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:06:36 +02:00
rdmsandClaude Opus 5.5 2aed685d7e feat: API für Szenario-Zeitraum, Neuer Betrag und szenario-eigene wiederkehrende Zahlungen (A14-T3)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:03:16 +02:00
rdmsandClaude Opus 5.5 aaf05b9209 feat: Szenario-Einträge je Stichtag mit Zeitraum und Art Neuer Betrag (A14-T2)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:00:18 +02:00
rdmsandClaude Opus 5.5 b0a1ba80a1 feat: Szenario-Zeitraum, Neuer Betrag, szenario-eigene Zahlungen – Datenmodell + Migration (A14-T1)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 12:58:06 +02:00
rdmsandClaude Opus 5.5 c065ade0d5 docs: Plan Ausbaustufe 14
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 11:17:50 +02:00
rdmsandClaude Opus 5.5 d8dc25f2a8 docs: Spec Ausbaustufe 14 (Szenario-Zeitraum, Neuer Betrag, szenario-eigene wiederkehrende Zahlungen)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 10:59:44 +02:00
rdmsandClaude Opus 5.5 60cd3c4fea fix: Versionskennung an statischen Dateien gegen veraltete Browser-Caches (v0.13.1)
Gecachte style.css ohne Tortenfarben ließ alle Segmente schwarz erscheinen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 17:54:55 +02:00
rdmsandClaude Opus 5.5 23557db0fb docs: A13 Plan-Haken gesetzt
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 17:01:38 +02:00
rdmsandClaude Opus 5.5 987e28847c fix: Aufteilung – Final-Review-Nachträge (Monat <1000, Übrige-Mitglieder, Auth-Test, Doku) (A13)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:56:57 +02:00
rdmsandClaude Opus 5.5 b32f28fff5 chore: Release v0.13.0 (Seite Aufteilung)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:49:50 +02:00
rdmsandClaude Opus 5.5 3ef20034d3 feat: Aufteilung – Drill-down in Kategorie per Klick auf Tortensegment (A13-T6)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:45:44 +02:00
rdmsandClaude Opus 5.5 4b6144d812 fix: Aufteilung – Tabelle volle Breite, Torte darunter; ungültige Eingaben inline (A13-T5)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:29:24 +02:00
rdmsandClaude Opus 5.5 2a62bdca6c feat: Seite Aufteilung – Auswahl, Kennzahlen, Tabelle, Tortendiagramm (A13-T5)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:24:20 +02:00
rdmsandClaude Opus 5.5 1cded22e90 feat: Service compute_breakdown – System-Plan/Szenario, Doppelzählungs-Hinweis (A13-T4)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:20:38 +02:00
rdmsandClaude Opus 5.5 9e804cd349 fix: Torte – große Segmente als zwei Teilbögen (A13-T3)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:16:49 +02:00
rdmsandClaude Opus 5.5 125d370497 feat: Engine pie – Tortensegmente mit Übrige-Regel und SVG-Pfaden (A13-T3)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:13:11 +02:00
rdmsandClaude Opus 5.5 7555d8e6a4 feat: Engine breakdown – Monatsbeträge je Posten, Summen, Kategorie-Filter (A13-T2)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:09:30 +02:00
rdmsandClaude Opus 5.5 0f5bb45a55 refactor: Modifikator-Helfer öffentlich, load_scenario_inputs aus run_projection (A13-T1)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 16:05:43 +02:00
rdmsandClaude Opus 5.5 acabc3d2a4 docs: A13 – höchstens 8 benannte Tortensegmente (Nutzerentscheidung)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 14:41:21 +02:00
rdmsandClaude Opus 5.5 c015b52a70 docs: Plan Ausbaustufe 13 (8 Tasks)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 13:49:02 +02:00
rdmsandClaude Opus 5.5 a5f2f23a7e docs: Design Ausbaustufe 13 – Seite Aufteilung (Monatskosten je Kategorie)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 13:27:58 +02:00
rdmsandClaude Opus 5.5 d2b21c8f8b fix: Balkendiagramme ohne Segment-Beschriftung, Tooltip mit allen Kategorien, Monat ohne Uhrzeit
In gestapelten Balken mit vielen Kategorien überlagerten sich die
Segment-Beschriftungen, sichtbar blieb ein zufälliger kleiner Wert.
Betrifft Monat nach Kategorie und Planung nach Kategorie.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 09:29:55 +02:00
rdmsandClaude Opus 5.5 b904709d0b docs: A12 Plan-Haken gesetzt
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:52:17 +02:00
rdmsandClaude Opus 5.5 f79e1ce26b docs: ARCHITEKTUR – Kategorie System-Kreditraten (A12 Final-Review)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:46:24 +02:00
rdmsandClaude Opus 5.5 b78990786f chore: Release v0.12.0 (System-Präfix, Doppelzählungs-Warnung)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:40:03 +02:00
rdmsandClaude Opus 5.5 e665180b1f feat: Warnfenster und Planungs-Hinweis bei möglicher Doppelzählung (A12-T4)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:35:16 +02:00
rdmsandClaude Opus 5.5 9e856ec655 feat: API meldet mögliche Doppelzählung mit 409, Speichern nur mit Bestätigung (A12-T3)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:30:58 +02:00
rdmsandClaude Opus 5.5 42d3d95e48 feat: Erkennung möglicher Doppelzählung Kredit/Fixposten (A12-T2)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:27:30 +02:00
rdmsandClaude Opus 5.5 0a5fa90ae8 feat: Präfix System- für Tool-Serien reserviert, Kreditraten-Serie heißt System-Kreditraten (A12-T1)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 07:24:41 +02:00
rdmsandClaude Opus 5.5 5a8e05596f docs: Plan Ausbaustufe 12 (6 Tasks)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 21:58:54 +02:00
rdmsandClaude Opus 5.5 404c1a5648 docs: Spec Ausbaustufe 12 (System-Präfix, Doppelzählungs-Warnung Kredit/Fixposten)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 21:51:19 +02:00
rdmsandClaude Opus 5.5 ffd7647c5f docs: A11 Plan-Haken gesetzt
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:44:35 +02:00
rdmsandClaude Opus 5.5 b28b0e69c0 chore: Release v0.11.0 (Szenario-Löschen, Grafana-Korrekturen, Tabellensortierung)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:34:18 +02:00
rdmsandClaude Opus 5.5 b1e007ed15 feat: Buchungen serverseitig nach Spalte sortierbar (A11-T5)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:29:25 +02:00
rdmsandClaude Opus 5.5 2a5cd141f2 fix: node --test bekommt explizite Dateiliste statt Verzeichnis (A11-T4 Fix-Runde 1)
tests/test_sort_js.py übergab bisher tests/js als Verzeichnis an
`node --test`; unter Node 22 führt das zu MODULE_NOT_FOUND, weil Node
einen Verzeichnispfad hier nicht auflöst (Fable-Fund). Fix: Testdateien
per Glob (*.test.js, sortiert) einzeln übergeben. Verifiziert unter
Node 22 via Podman mit exakt dieser Argumentliste: 14/14 Tests grün,
0 geskippt. Gesamtsuite unverändert bei 248 passed, 3 skipped.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:27:14 +02:00
rdmsandClaude Opus 5.5 4458300f43 feat: Tabellen per Spaltenkopf sortierbar (A11-T4)
Neues static/sort.js sortiert Tabellen clientseitig per Klick auf den
Spaltenkopf (⇅/▲/▼): Datum TT.MM.JJJJ, deutsche Zahlen/Beträge, sonst
Text (Intl.Collator 'de'). Sortierwert optional per td[data-sort]
(Punkt-Dezimal/ISO) überschreibbar, th[data-nosort] bekommt keinen
Button, table[data-sort-mode="server"] wird übersprungen (Buchungen
sortiert serverseitig, folgt in Task 5). Bearbeiten-/Tilgungsplan-
Zeilen (tr[data-sort-follow]) wandern mit ihrer Vorzeile mit.
Initialisierung über htmx.onLoad, greift auch bei nachgeladenen
Fragmenten.

Templates entsprechend annotiert (Planung, Szenarien, Admin, Index,
Salden, Import-Liste, Buchungen); Salden-Gesamtzeile dafür in ein
tfoot verschoben. test_gui.py::test_gui_zeigt_deutsche_betragsformate
angepasst, da das neue machinenlesbare data-sort-Attribut bewusst
Punkt-Dezimal führt (Interface-Konvention) - die Prüfung auf deutsches
Format im sichtbaren Text bleibt bestehen.

JS-Unit-/DOM-Tests unter tests/js (node --test, DOM-Teil optional via
jsdom), pytest-Wrapper skip ohne node (Fable-Gate führt sie per
Podman aus). Suite: 248 passed, 3 skipped (vorher 242/2).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:22:34 +02:00
rdmsandClaude Opus 5.5 42b410446d feat: Grafana-Panel Planung nach Kategorie inkl. Kreditraten (A11-T3)
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>
2026-09-28 19:15:26 +02:00
rdmsandClaude Opus 5.5 979e1c0edc fix: Szenario-Vergleich zeigt vor heute Ist-Saldo, veraltete Szenarien werden neu gerechnet (A11-T2)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:10:51 +02:00
rdmsandClaude Opus 5.5 32d78fdbe1 fix: German quote style U+201C instead of U+201D (A11-T1)
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>
2026-09-28 19:07:31 +02:00
rdmsandClaude Opus 5.5 8b637f91b3 fix: HTML attribute quoting in hx-confirm, test assertion precision (A11-T1)
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>
2026-09-28 19:05:37 +02:00
rdmsandClaude Opus 5.5 57ab6dae4a feat: Szenario per GUI löschen, Name System-Ist reserviert (A11-T1)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 19:01:21 +02:00
rdmsandClaude Opus 5.5 1c452b48de docs: Plan Ausbaustufe 11 (6 Tasks)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 18:43:02 +02:00