Rückkaufswerte aller Versicherungen in einem Zug anfragen #6

Closed
opened 2026-08-22 23:28:00 +00:00 by florian.wilde · 3 comments
Owner

Problem

Vor dem Vermögensverzeichnis und vor jedem Jahresbericht brauche ich von
jeder Lebens- und Rentenversicherung den Rückkaufswert zum Stichtag. Das
sind jedes Mal dieselben fünf bis zehn Briefe, die ich einzeln erzeuge,
einzeln kopiere und einzeln nachhalte. Von den Antworten kommen erfahrungs-
gemäß zwei Drittel; den Rest muss ich nachfassen — und dafür muss ich
wissen, wen ich wann gefragt habe.

Das ist der Handgriff, der im Jahr am meisten Zeit kostet.

Was ich will

Unter Verträge ein Knopf „Rückkaufswerte anfragen":

  • Stichtag eingeben
  • Liste der infrage kommenden Verträge, einzeln abwählbar
  • Ergebnis: ein ZIP mit je einer Word-Datei pro Gesellschaft
  • Je Vertrag: rueckkaufswertAngefragtAm gesetzt, Wiedervorlage nach
    28 Tagen, Ausgangsdokument in der Akte

Akzeptanzkriterien

  • Vorausgewählt sind nur Verträge, bei denen ein Rückkaufswert
    überhaupt in Frage kommt
  • Verträge, die in den letzten 28 Tagen schon angefragt wurden, sind
    sichtbar markiert und nicht vorausgewählt
  • Das ZIP enthält je eine Datei mit sprechendem Namen
    (Gesellschaft + Stichtag)
  • Nach dem Lauf steht auf „Heute" unter „Wartet auf andere", worauf ich
    warte und seit wann
  • Bricht die Erzeugung bei einem Vertrag ab, wird das benannt und die
    übrigen laufen trotzdem durch — kein Alles-oder-nichts
  • Ein zweiter Lauf am selben Tag erzeugt keine doppelten Dokumente und
    keine doppelten Wiedervorlagen
  • Vor dem Erzeugen steht, wie viele Schreiben entstehen — damit man
    einen Fehlgriff bemerkt, bevor zehn Briefe rausgehen

Hinweise zur Umsetzung

  • archiver ist bereits als Abhängigkeit vorhanden (Vollexport)
  • rueckkaufswertAnschreiben() und RUECKKAUFSWERT_WIEDERVORLAGE_TAGE
    liegen in src/lib/vertraege/rueckkaufswert.ts

Abhängigkeit

Baut auf „Schreiben erzeugen: Word-Datei, Ablage in der Akte,
Wiedervorlage" auf. Sinnvoll erst, wenn die Verträge auch vollständig
erfasst sind — siehe „Verträge aufspüren".

Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula
nachtragen.

## Problem Vor dem Vermögensverzeichnis und vor jedem Jahresbericht brauche ich von jeder Lebens- und Rentenversicherung den Rückkaufswert zum Stichtag. Das sind jedes Mal dieselben fünf bis zehn Briefe, die ich einzeln erzeuge, einzeln kopiere und einzeln nachhalte. Von den Antworten kommen erfahrungs- gemäß zwei Drittel; den Rest muss ich nachfassen — und dafür muss ich wissen, wen ich wann gefragt habe. Das ist der Handgriff, der im Jahr am meisten Zeit kostet. ## Was ich will Unter **Verträge** ein Knopf **„Rückkaufswerte anfragen"**: - Stichtag eingeben - Liste der infrage kommenden Verträge, einzeln abwählbar - Ergebnis: ein ZIP mit je einer Word-Datei pro Gesellschaft - Je Vertrag: `rueckkaufswertAngefragtAm` gesetzt, Wiedervorlage nach 28 Tagen, Ausgangsdokument in der Akte ## Akzeptanzkriterien - [ ] Vorausgewählt sind nur Verträge, bei denen ein Rückkaufswert überhaupt in Frage kommt - [ ] Verträge, die in den letzten 28 Tagen schon angefragt wurden, sind sichtbar markiert und nicht vorausgewählt - [ ] Das ZIP enthält je eine Datei mit sprechendem Namen (Gesellschaft + Stichtag) - [ ] Nach dem Lauf steht auf „Heute" unter „Wartet auf andere", worauf ich warte und seit wann - [ ] Bricht die Erzeugung bei einem Vertrag ab, wird das benannt und die übrigen laufen trotzdem durch — kein Alles-oder-nichts - [ ] Ein zweiter Lauf am selben Tag erzeugt keine doppelten Dokumente und keine doppelten Wiedervorlagen - [ ] Vor dem Erzeugen steht, wie viele Schreiben entstehen — damit man einen Fehlgriff bemerkt, bevor zehn Briefe rausgehen ## Hinweise zur Umsetzung - `archiver` ist bereits als Abhängigkeit vorhanden (Vollexport) - `rueckkaufswertAnschreiben()` und `RUECKKAUFSWERT_WIEDERVORLAGE_TAGE` liegen in `src/lib/vertraege/rueckkaufswert.ts` ## Abhängigkeit Baut auf „Schreiben erzeugen: Word-Datei, Ablage in der Akte, Wiedervorlage" auf. Sinnvoll erst, wenn die Verträge auch vollständig erfasst sind — siehe „Verträge aufspüren". _Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula nachtragen._
florian.wilde added the in-arbeit label 2026-08-23 09:29:51 +00:00
florian.wilde started working 2026-08-23 09:30:03 +00:00
Author
Owner

🤖 Claude Code hat mit der Umsetzung begonnen.

  • Branch: feat/6-rueckkaufswerte-serienabfrage
  • Verstanden als: Die fünf bis zehn immer gleichen Rückkaufswert-Briefe vor Vermögensverzeichnis und Jahresbericht sollen in einem Lauf entstehen — als ZIP mit einer Word-Datei je Gesellschaft, mit gesetztem Anfragedatum, Wiedervorlage und Ausgangsdokument je Vertrag.
  • Geplantes Vorgehen:
    • Auswahllogik als reine Funktionen (kommtInFrage, Vorauswahl, 28-Tage-Sperre) — testbar ohne Datenbank
    • Seite Verträge → Rückkaufswerte anfragen mit Stichtag, abwählbarer Liste und Zusammenfassung vor dem Erzeugen
    • Ein Lauf = eine Route, die das ZIP liefert; je Vertrag Word-Datei, PDF in die Akte, rueckkaufswertAngefragtAm, Wiedervorlage — Fehler je Vertrag benannt, kein Alles-oder-nichts
    • Dublettenschutz über rueckkaufswertAngefragtAm am selben Tag

Ein Punkt, den ich anders löse als beim Einzel-Schreiben: Das ZIP muss in einem Aufruf entstehen und die Nebenwirkungen (Dokumente, Fristen, Anfragedatum) setzen. Ich lasse die Route zuerst alle Nebenwirkungen je Vertrag durchführen und sammle die Word-Dateien, dann kommt das ZIP. Scheitert ein Vertrag, steht er im Begleitblatt im ZIP und in der Rückmeldung — die übrigen laufen durch.

Zeiterfassung läuft.

🤖 **Claude Code hat mit der Umsetzung begonnen.** - Branch: `feat/6-rueckkaufswerte-serienabfrage` - Verstanden als: Die fünf bis zehn immer gleichen Rückkaufswert-Briefe vor Vermögensverzeichnis und Jahresbericht sollen in einem Lauf entstehen — als ZIP mit einer Word-Datei je Gesellschaft, mit gesetztem Anfragedatum, Wiedervorlage und Ausgangsdokument je Vertrag. - Geplantes Vorgehen: - Auswahllogik als reine Funktionen (`kommtInFrage`, Vorauswahl, 28-Tage-Sperre) — testbar ohne Datenbank - Seite `Verträge → Rückkaufswerte anfragen` mit Stichtag, abwählbarer Liste und Zusammenfassung *vor* dem Erzeugen - Ein Lauf = eine Route, die das ZIP liefert; je Vertrag Word-Datei, PDF in die Akte, `rueckkaufswertAngefragtAm`, Wiedervorlage — Fehler je Vertrag benannt, kein Alles-oder-nichts - Dublettenschutz über `rueckkaufswertAngefragtAm` am selben Tag **Ein Punkt, den ich anders löse als beim Einzel-Schreiben:** Das ZIP muss in einem Aufruf entstehen *und* die Nebenwirkungen (Dokumente, Fristen, Anfragedatum) setzen. Ich lasse die Route zuerst alle Nebenwirkungen je Vertrag durchführen und sammle die Word-Dateien, dann kommt das ZIP. Scheitert ein Vertrag, steht er im Begleitblatt im ZIP und in der Rückmeldung — die übrigen laufen durch. Zeiterfassung läuft.
florian.wilde worked for 40 minutes 2026-08-23 10:10:21 +00:00
florian.wilde added zu-testen and removed in-arbeit labels 2026-08-23 10:11:06 +00:00
Author
Owner

✅ Umsetzung abgeschlossen — bereit zum Testen.

Was geändert wurde

  • Neue Seite Verträge → Rückkaufswerte anfragen: Stichtag, abwählbare Liste, Anzahl vor dem Klick auf dem Knopf.
  • Ein Lauf erzeugt das ZIP (Word-Datei je Gesellschaft + Begleitblatt) und je Vertrag: PDF in der Akte, Wiedervorlage nach 28 Tagen, rueckkaufswertAngefragtAm, Protokolleintrag.
  • Auswahl mit Begründungen statt stummem Ausblenden; frisch Angefragte nicht vorausgewählt, aber wählbar; gekündigte Verträge bleiben anfragbar.
  • Kein Alles-oder-nichts: gescheiterte Verträge stehen mit Grund im Begleitblatt, die übrigen laufen durch.
  • Tagesgenauer Dublettenschutz gegen den Doppelklick.
  • Version 1.6.0, keine Migration.

Geänderte Dateien

  • src/lib/vertraege/serienabfrage.ts (neu), serienlauf.ts (neu)
  • src/app/(app)/vertraege/serienabfrage/{route.ts,seite/page.tsx} (neu)
  • src/components/vertraege/serienabfrage-formular.tsx (neu)
  • src/app/(app)/vertraege/page.tsx (Knopf), src/lib/schreiben/arten.ts
  • tests/serienabfrage.test.ts (neu), e2e/serienabfrage.spec.ts (neu), Changelog, README, Doku

So testest du es

  1. git switch feat/6-rueckkaufswerte-serienabfrage und npm run dev
  2. Verträge → oben rechts Rückkaufswerte anfragen
  3. Erwartet: Deine Lebens-/Renten-/Sterbegeldversicherungen sind vorausgewählt; was nicht geht, steht mit Grund dabei; auf dem Knopf steht die Anzahl
  4. Stichtag setzen, Knopf klicken → ein ZIP lädt herunter: je Gesellschaft eine Word-Datei plus UEBERSICHT.txt
  5. Dokumente (Richtung Ausgang): je Vertrag eine PDF-Fassung. Fristen: je Vertrag eine Wiedervorlage in 28 Tagen. Heute → Wartet auf andere: die Anfragen stehen dort
  6. Seite neu laden → die Verträge tragen jetzt „bereits angefragt" und sind nicht mehr vorausgewählt
  7. Gegenprobe Doppelklick: einen davon von Hand anwählen, erneut starten → das ZIP enthält nur das Begleitblatt mit „übersprungen", keine doppelten Dokumente oder Fristen

Aufgewendete Zeit: 00:40
Pull Request: #17


Anmerkung: Meine ersten e2e-Fassungen scheiterten an einer falschen Annahme (feste Anzahl statt vorhandener Demoverträge) — der Fehler lag in den Tests, nicht in der Anwendung. Und beim Testen wird der Lauf rueckkaufswertAngefragtAm an deinen Demoverträgen setzen; das ist gewollt und zeigt genau das echte Verhalten.

Nach Freigabe: /issue-freigabe 6

✅ **Umsetzung abgeschlossen — bereit zum Testen.** <!-- claude-status branch: feat/6-rueckkaufswerte-serienabfrage pr: 17 zeit_sekunden: 2418 --> **Was geändert wurde** - Neue Seite **Verträge → Rückkaufswerte anfragen**: Stichtag, abwählbare Liste, Anzahl vor dem Klick auf dem Knopf. - Ein Lauf erzeugt das ZIP (Word-Datei je Gesellschaft + Begleitblatt) und je Vertrag: PDF in der Akte, Wiedervorlage nach 28 Tagen, `rueckkaufswertAngefragtAm`, Protokolleintrag. - Auswahl mit Begründungen statt stummem Ausblenden; frisch Angefragte nicht vorausgewählt, aber wählbar; gekündigte Verträge bleiben anfragbar. - Kein Alles-oder-nichts: gescheiterte Verträge stehen mit Grund im Begleitblatt, die übrigen laufen durch. - Tagesgenauer Dublettenschutz gegen den Doppelklick. - Version 1.6.0, keine Migration. **Geänderte Dateien** - `src/lib/vertraege/serienabfrage.ts` *(neu)*, `serienlauf.ts` *(neu)* - `src/app/(app)/vertraege/serienabfrage/{route.ts,seite/page.tsx}` *(neu)* - `src/components/vertraege/serienabfrage-formular.tsx` *(neu)* - `src/app/(app)/vertraege/page.tsx` (Knopf), `src/lib/schreiben/arten.ts` - `tests/serienabfrage.test.ts` *(neu)*, `e2e/serienabfrage.spec.ts` *(neu)*, Changelog, README, Doku **So testest du es** 1. `git switch feat/6-rueckkaufswerte-serienabfrage` und `npm run dev` 2. **Verträge** → oben rechts **Rückkaufswerte anfragen** 3. Erwartet: Deine Lebens-/Renten-/Sterbegeldversicherungen sind vorausgewählt; was nicht geht, steht mit Grund dabei; auf dem Knopf steht die Anzahl 4. Stichtag setzen, Knopf klicken → ein ZIP lädt herunter: je Gesellschaft eine Word-Datei plus `UEBERSICHT.txt` 5. **Dokumente (Richtung Ausgang)**: je Vertrag eine PDF-Fassung. **Fristen**: je Vertrag eine Wiedervorlage in 28 Tagen. **Heute → Wartet auf andere**: die Anfragen stehen dort 6. Seite neu laden → die Verträge tragen jetzt „bereits angefragt" und sind nicht mehr vorausgewählt 7. **Gegenprobe Doppelklick:** einen davon von Hand anwählen, erneut starten → das ZIP enthält nur das Begleitblatt mit „übersprungen", keine doppelten Dokumente oder Fristen **Aufgewendete Zeit:** 00:40 **Pull Request:** #17 --- **Anmerkung:** Meine ersten e2e-Fassungen scheiterten an einer falschen Annahme (feste Anzahl statt vorhandener Demoverträge) — der Fehler lag in den Tests, nicht in der Anwendung. Und beim Testen wird der Lauf `rueckkaufswertAngefragtAm` an deinen Demoverträgen setzen; das ist gewollt und zeigt genau das echte Verhalten. Nach Freigabe: `/issue-freigabe 6`
Author
Owner

🚀 Freigegeben und nach main übernommen.

  • Merge-Commit: 0a8878d
  • Pull Request: #17 (gemergt)
  • Gesamtaufwand: 00:40
  • Veröffentlicht als v1.6.0 — Tag diesmal erst nach kontrolliertem Pull gesetzt und gegengeprüft; keine Migration nötig.
cd /opt/docker/configs/betreuungs-cockpit
./scripts/update.sh

Issue wird geschlossen.

🚀 **Freigegeben und nach `main` übernommen.** <!-- claude-status merge: 0a8878d8d2fa9158e256c8eaace109a7e7b21d15 pr: 17 zeit_sekunden: 2418 --> - Merge-Commit: `0a8878d` - Pull Request: #17 (gemergt) - Gesamtaufwand: 00:40 - Veröffentlicht als **v1.6.0** — Tag diesmal erst nach kontrolliertem Pull gesetzt und gegengeprüft; keine Migration nötig. ```bash cd /opt/docker/configs/betreuungs-cockpit ./scripts/update.sh ``` Issue wird geschlossen.
florian.wilde removed the zu-testen label 2026-08-23 10:18:50 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Total Time Spent: 40 minutes
florian.wilde
40 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#6