Wiederkehrende Zahlungen aufspueren
Am Anfang einer Betreuung weiss niemand, welche Vertraege es gibt. Die Antwort steht aber im Kontoauszug: Wer regelmaessig abbucht, hat einen Vertrag. Neu unter Vermoegen & Kasse wird aus hunderten Buchungszeilen eine Arbeitsliste. Aufbau: - Die Erkennung liegt als reine Funktionen in src/lib/finanzen/wiederkehrend.ts, ohne Datenbank. Nur so laesst sich jede Einordnung einzeln nachrechnen. - Der Datenzugriff steht getrennt in wiederkehrend-laden.ts. - Ein kleines Modell haelt fest, was bewusst KEIN Vertrag ist. Es haengt am normalisierten Empfaengernamen, nicht an Buchungen - nur so ueberlebt die Entscheidung den naechsten Import. Zwei Haltungen liegen der Erkennung zugrunde: Im Zweifel getrennt lassen. Zusammengefasst wird nur das Unstrittige: Gross- und Kleinschreibung, Satzzeichen, Umlaute, Rechtsform am Ende. Keine Aehnlichkeitssuche - "Stadtwerke Bamberg" und "Stadtwerke Bayreuth" trennen drei Zeichen und zwei Rechnungssteller. Zwei Zeilen zu viel sind harmlos; eine falsche Gruppe verbirgt einen Vertrag. Nichts behaupten, was nicht belegt ist. Statt "monatlich" steht dort "6 Zahlungen, etwa monatlich". Schwankt der Betrag, wird die Spanne genannt. Ohne erkennbaren Abstand wird nicht hochgerechnet, sondern gezeigt, was geflossen ist. Dazu eine zweite Liste fuer einzelne groessere Zahlungen: Die Gruppierung braucht zwei Zahlungen, ein Jahresbeitrag erscheint bei einem importierten Jahr aber nur einmal - und ausgerechnet Versicherungen zahlt man oft jaehrlich. Geprueft: 37 Einheitstests, die Haelfte davon in der Gegenrichtung, plus vier End-to-End-Tests auf beiden Geraeteprofilen. Der Browsertest hat zwei Fehler gefunden, die Typpruefung und Einheitstests durchgelassen haben - darunter ein verlorener Backslash, der die Vorbelegung des Beitrags stillschweigend verschluckte. Nebenbei: .claude/ ins .gitignore. Dort legen parallel arbeitende Agenten ihre Worktrees ab; ein "git add -A" haette einen kompletten zweiten Checkout eingecheckt. Refs #3
This commit is contained in:
+70
-1
@@ -26,6 +26,74 @@ Wiederherstellung*.
|
||||
|
||||
_Noch nichts._
|
||||
|
||||
## [1.2.0] – 2026-08-23
|
||||
|
||||
### Hinzugefügt
|
||||
|
||||
- **Wiederkehrende Zahlungen aufspüren**
|
||||
([#3](https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/issues/3)).
|
||||
Am Anfang einer Betreuung weiß niemand, welche Verträge es gibt — es liegt
|
||||
kein Ordner bereit, und die betreute Person kann es oft selbst nicht mehr
|
||||
sagen. Die Antwort steht aber schon im Kontoauszug: **Wer regelmäßig
|
||||
abbucht, hat einen Vertrag.**
|
||||
|
||||
Neu unter *Vermögen & Kasse → Wiederkehrende Zahlungen*: Die importierten
|
||||
Kontobewegungen werden nach Empfänger gruppiert und nach Jahresbetrag
|
||||
sortiert. Je Zeile stehen Rhythmus, Betrag, Zeitraum und ob dazu schon ein
|
||||
Vertrag in der Akte liegt. Aus der Zeile heraus geht es weiter — *Vertrag
|
||||
anlegen* mit vorbelegter Gesellschaft und vorbelegtem Beitrag, oder *kein
|
||||
Vertrag* mit Begründung.
|
||||
|
||||
Die Seite wertet nur aus. Sie legt von sich aus nichts an; jede Zeile
|
||||
endet in einer Entscheidung, die ein Mensch trifft.
|
||||
|
||||
**Was sie nennt, begründet sie.** Statt „monatlich" zu behaupten, steht
|
||||
daneben „6 Zahlungen, etwa monatlich" — man soll widersprechen können.
|
||||
Schwankt der Betrag, wird die Spanne genannt statt eines Mittelwerts, der
|
||||
Genauigkeit vortäuscht. Und ohne erkennbaren Abstand wird nicht aufs Jahr
|
||||
hochgerechnet, sondern gezeigt, was tatsächlich geflossen ist.
|
||||
|
||||
**Zusammengefasst wird nur, was sicher dasselbe ist:** Groß- und
|
||||
Kleinschreibung, Satzzeichen, Umlaute und die Rechtsform am Ende.
|
||||
„Stadtwerke Bamberg" und „Stadtwerke Bayreuth" unterscheiden sich in drei
|
||||
Zeichen und bleiben zwei Zeilen. Zwei Zeilen zu viel sind harmlos — eine
|
||||
falsch zusammengefasste Gruppe verbirgt dagegen einen Vertrag, und der
|
||||
fehlt dann im Vermögensverzeichnis.
|
||||
|
||||
- **Einzelne größere Zahlungen** stehen in einem eigenen Abschnitt darunter.
|
||||
Grund: Die Gruppierung braucht mindestens zwei Zahlungen, eine jährlich
|
||||
abgebuchte Prämie erscheint bei einem importierten Jahr aber nur einmal —
|
||||
und ausgerechnet Versicherungen werden oft jährlich gezahlt. Ohne diese
|
||||
zweite Liste wäre die Suche genau dort blind, wo sie am meisten bringen
|
||||
soll.
|
||||
|
||||
- **Hinweis auf „Heute"**, sobald es unbearbeitete Kandidaten gibt. Er steht
|
||||
in der Kachel *Unverbuchte Belege*, nicht in einer eigenen: Es ist
|
||||
dieselbe Frage — wozu gehört diese Zahlung? —, nur eine Ebene höher.
|
||||
|
||||
### Zu beachten
|
||||
|
||||
- **Eine Datenbank-Migration ist nötig**
|
||||
(`20260823000500_zahlungsgruppe_geklaert`). Sie läuft beim Start des
|
||||
Behälters automatisch mit und legt nur eine neue Tabelle an; bestehende
|
||||
Daten bleiben unberührt.
|
||||
- Ausgewertet werden **nur Ausgaben der betreuten Person**. Umbuchungen
|
||||
zwischen eigenen Konten und Auslagen des Betreuers bleiben außen vor —
|
||||
wer monatlich aufs Sparbuch legt, hat deswegen keinen Vertrag.
|
||||
|
||||
### Geprüft
|
||||
|
||||
- 37 Einheitstests (`tests/wiederkehrend.test.ts`), die Hälfte davon in der
|
||||
Gegenrichtung: dass ähnliche, aber verschiedene Namen **nicht**
|
||||
zusammenfallen.
|
||||
- Vier End-to-End-Tests gegen einen echten Browser: Erkennung, getrennte
|
||||
Liste der Einzelzahlungen, Übernahme ins Vertragsformular, Abhaken und
|
||||
Zurückholen samt Neuladen.
|
||||
|
||||
Zwei Fehler hat erst der Browsertest gefunden. Einer davon hätte die
|
||||
Vorbelegung des Beitrags stillschweigend verschluckt — Typprüfung und
|
||||
Einheitstests waren grün.
|
||||
|
||||
## [1.1.2] – 2026-08-23
|
||||
|
||||
### Behoben
|
||||
@@ -548,7 +616,8 @@ Was davon wann angegangen wird, steht in [`docs/ROADMAP.md`](docs/ROADMAP.md).
|
||||
|
||||
---
|
||||
|
||||
[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.1.2...HEAD
|
||||
[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.2.0...HEAD
|
||||
[1.2.0]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.1.2...v1.2.0
|
||||
[1.1.2]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.1.1...v1.1.2
|
||||
[1.1.1]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.1.0...v1.1.1
|
||||
[1.1.0]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.5...v1.1.0
|
||||
|
||||
Reference in New Issue
Block a user