Finanzmanager/Changes.md
fds2610-bot 1e3227ce83 Phase 1: Stammdaten und QIF-Stammdatenimport
Konten, Kontengruppen, Kategorien und Klassen samt Übernahme aus dem
QIF-Export des Lexware FinanzManagers.

Kontenübersicht nach Kontengruppen gebündelt, mit Gruppensummen und
Gesamtsumme; die drei Saldospalten (Online-Saldo, aktueller und erwarteter
Saldo) sind angelegt und werden bis Phase 2 aus dem Anfangssaldo gespeist.

Kategorien sind hierarchisch mit ":" als Trenner. Der vollständige Pfad
steht redundant in der Tabelle, weil jede Anzeige und der gesamte Import
darüber laufen; Umbenennen und Verschieben schreiben den Teilbaum neu. Die
Art (Einnahme/Ausgabe) gilt für den ganzen Ast. Register wie im Original:
Alle, Einnahmen, Ausgaben, Umbuchungskonten.

QifParser liest zustandsbehaftet und sequenziell, wandelt ISO-8859-1 nach
UTF-8 und versteht US-Beträge sowie das Datumsformat aus der Kopfzeile.
QifStammdatenImport ist idempotent und bietet Trockenlauf und Protokoll -
im Dialog unter Verwaltung sowie über scripts/qif-import.php. Am echten
Export geprüft: 17 Klassen, 105 Kategorien, 37 Konten.

Enthält außerdem die Korrektur der englischen Monatsnamen im
Einstellungsdialog: date('F') ist sprachlich nicht umschaltbar, deshalb
liegen die Namen jetzt zentral als View::MONATE vor. Die Änderung ließ
sich nicht als eigener Commit trennen, weil sie dieselben Dateien berührt
wie Phase 1.

Tests: 227 PHP-Prüfungen und 14 Playwright-Tests, alle grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 21:33:40 +02:00

4.5 KiB
Raw Blame History

Änderungen

Phase 1 – Stammdaten und QIF-Stammdatenimport (09.08.2026)

Datenmodell

  • Migration 002_stammdaten.sql: kontengruppen, konten, kategorien, klassen
  • Alle Tabellen führen benutzer_id; Mandant::id() liefert die Kennung aus der Session oder – im CLI – vom ersten aktiven Benutzer

Konten

  • Kontenübersicht nach Kontengruppen gebündelt, mit Gruppensummen und Gesamtsumme
  • Die drei Saldospalten des FinanzManagers (Online-Saldo, aktueller und erwarteter Saldo) sind angelegt und werden bis Phase 2 aus dem Anfangssaldo gespeist
  • Kontoarten des FinanzManagers samt Zuordnung zu den QIF-Typen
  • Kontenpflege mit Anfangssaldo, Kreditlimit, IBAN/BIC, Kontengruppe, aktiv/inaktiv
  • Kontengruppen anlegen, umbenennen, sortieren, löschen – die Konten bleiben erhalten

Kategorien und Klassen

  • Hierarchische Kategorien mit : als Trenner; der vollständige Pfad wird mitgeführt und beim Umbenennen oder Verschieben für den ganzen Teilbaum neu geschrieben
  • Art (Einnahme/Ausgabe) gilt für den ganzen Ast und vererbt sich an Unterkategorien
  • Verschieben, Zusammenführen und Löschen; Verschieben in den eigenen Teilbaum wird abgewiesen
  • Register Alle / Einnahmen / Ausgaben / Umbuchungskonten wie im Original
  • Klassen als flache zweite Auswertungsdimension, in der Liste direkt bearbeitbar

QIF-Import

  • QifParser: zustandsbehaftetes, sequenzielles Lesen; ISO-8859-1 nach UTF-8, US-Beträge, Datumsformat aus der Kopfzeile, Mehrfachfelder für spätere Splitzeilen
  • QifStammdatenImport für Klassen, Kategorien und Konten – idempotent, mit Trockenlauf und Protokoll; fehlende Zwischenstufen im Kategoriepfad entstehen selbsttätig
  • Dialog unter Verwaltung → QIF-Import mit Upload, Trockenlauf und Übernahme
  • scripts/qif-import.php für dieselbe Aufgabe auf der Kommandozeile
  • Geprüft am echten Export: 17 Klassen, 105 Kategorien, 37 Konten

Tests

  • 06_KategorienTest – Hierarchie, Pfadpflege, Artvererbung, Verschieben, Zusammenführen
  • 07_KontenTest – Kontoarten, Gruppierung und Summen, Betragseingabe
  • 08_QifImportTest – Parser, Zeichensatz, Beträge und Datum, Import, Trockenlauf, Prüfung der Dateinamen
  • E2E stammdaten.spec.js – Konto, Kategorie mit Unterkategorie, Register, Klasse, QIF-Upload mit Trockenlauf

Korrektur – Monatsnamen auf Deutsch (09.08.2026)

  • Der Einstellungsdialog zeigte unter Buchhaltung englische Monatsnamen, weil date('F') sprachlich nicht umschaltbar ist.
  • Monatsnamen liegen jetzt zentral als View::MONATE und View::MONATE_KURZ vor, abrufbar über View::monat(). Budgetplaner und Auswertungen greifen später darauf zu.
  • 05_DarstellungTest prüft Monatsnamen, Betrags- und Datumsformat gegen eine feste Sollliste – der Vergleich gegen date('F') allein würde April, August, September und November nicht auffallen lassen.

Phase 0 – Projektgerüst (09.08.2026)

Grundgerüst der Anwendung. Fachliche Module folgen ab Phase 1.

Betrieb

  • Docker Compose mit drei Services: nginx (Port 8000), php (php-fpm 8.3), db (MariaDB 11)
  • docker-entrypoint.sh legt Datenverzeichnisse an und spielt Migrationen ein
  • scripts/migrate.php – nummerierte SQL-Migrationen, idempotent, mit Journal-Tabelle
  • scripts/update.sh – Update für den Produktionsserver: Backup, git pull, Image-Neubau bei Bedarf, Migrationen, Rechte, Tests
  • scripts/backup.sh – Datenbank- und Dateisicherung mit Rotation (7 Tage / 4 Wochen / 12 Monate), gegen Parallelläufe per flock abgesichert

Anwendung

  • Config, Database (PDO-Wrapper, verschachtelbare Transaktionen), Router (Platzhalter-Routen, CSRF-Prüfung für alle verändernden Requests), View, Auth
  • Anmeldung mit Session-Härtung, Ersteinrichtung des ersten Benutzers
  • Zentraler Einstellungsdialog mit Reitern (Allgemein, Darstellung, Buchhaltung, Online-Banking, Import/Export, Wertpapiere, Diagnose); Werte in Tabelle einstellungen
  • Debug-Log, ein- und ausschaltbar, mit Maskierung von PINs, Passwörtern, TANs und API-Keys; Ausnahmen werden immer protokolliert
  • Layout nach Vorbild des FinanzManagers: feste Navigation links, Werkzeugleiste oben, Tab-Leiste; Farbschema hell/dunkel/System

Tests

  • Test-Harness mit Transaktions-Rollback und Aufräumen temporärer Pfade
  • 01_AuthTest – Anmeldung, Passwort-Hashing, CSRF, Cookie-Attribute
  • 02_EinstellungenTest – Lesen/Schreiben, Cache-Invalidierung, Bereichsabdeckung
  • 03_RouterTest – Pfad-Muster, Platzhalter, keine Treffer über Pfadgrenzen
  • 04_DebugLogTest – Schalter, Maskierung, Fehlerprotokollierung