Behebt die Nominal/Real-Inkonsistenz (Bug #1): Einkommen/Ausgaben werden neu Jahr fuer
Jahr indexiert (eigenes Feld teuerungsausgleich je Element, Default = Phaseninflation;
Renten nominal fix = 0%). Vermoegen verzinst weiterhin nominal.
Cash: neues systemseitiges, immer sichtbares Element (0% Verzinsung, kein DB-Row -
synthetisch in computePlan). Ist der Ausgleichstopf = "verfuegbares Kapital fuer
Investments": cash_delta(t) = quote(t) - geplante flache Jahresraten (3a/Vermoegen/Amort./
Tilgung); Cash laeuft ueber Phasen fort, darf negativ werden (rot). Der Verteilzwang und
die harten Sparraten-Caps entfallen.
Ruin: Gesamtvermoegen (inkl. Cash) je Jahr; erstes Unterschreiten von 0 -> Ruin-Alter
(Person A), Anzeige als Banner + Zeitachsen-Marker.
Phasenkopf neu: Einkommen/Ausgaben Start->Ende, Quote Beginn/Ende, Cash Start->Ende,
Vermoegen inkl. Cash, Realwert. Inflation-Deflator neu pro Jahr (Math.pow ^Dauer).
Golden Tests (vitest) 1-4 + Renten-0% + Fortschreibung gruen (Test1 761'654/565'928,
Test2 Ruin Alter 94).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Kapitalbezugssteuer, Grundstueckgewinnsteuer und PK-Umwandlungssatz wurden im UI nur
optisch vorbelegt (num(td.x, 8/20/6)), die Berechnung las aber num(td.x) mit Fallback 0.
Ein nicht angetupftes Feld fuehrte so zu 0% Steuer bzw. 0 Rente. Defaults sind jetzt
zentrale Konstanten (constants.ts) und werden in Berechnung UND UI als Fallback genutzt.
Betrifft: PK-Kapital/-Kombi/-Rente, 3a-Bezug, Immobilienverkauf.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Sparquote/Verzehr zeigt in Klammern den bereits verteilten/gedeckten Prozentsatz,
z. B. "Sparquote 10'000 (100% verteilt)".
- Statt einer Alterszeile je Phase nun pro Person "Name Startalter -> Endalter".
- Neue Zeile "Vermoegen Startvermoegen -> Endvermoegen" (nominal).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Balkendiagramm: je Phase zwei x-Kategorien (Beginn/Ende), gestapelt nach Asset-Element
(Schluessel = elementId, damit gleiche Namen nicht kollidieren). Zeigt die Umschichtung;
Ende Phase N liegt neben Beginn Phase N+1.
- Liniendiagramm: x-Achse ist neu das Alter (Referenz Person A) von Startalter bis Ende der
letzten Phase, mit Start- und Phasen-Endwerten (nominal + real), statt Phasenindex.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Das untere Detail-Panel (ElementDetail/PhaseDetail) initialisiert seinen lokalen
Formular-Zustand nur beim Mounten. Ohne key wurde beim Wechsel der Zelle/Phase
dieselbe Instanz wiederverwendet -> Werte (z. B. Zusatzinvestition) blieben vom
zuvor geoeffneten Element haengen. Fix: key pro Auswahl (Zelle/Phase) erzwingt
Neuaufbau. Analog key am Uebergangs-Popup.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Person A/B erhalten ein optionales Namensfeld (Migration: Person.name nullable).
Fallback im UI bleibt "Person A"/"Person B". Angezeigt in Grundprofil-Box, Zeitachse,
Matrix-Elementzuordnung und Element-Erstelldialog; Szenario-Kopie uebernimmt den Namen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ist der Besitzer eines PK-/3a-Elements zu Beginn der Von-Phase bereits pensioniert,
wurde die Position bei der Pensionierung bereits bezogen oder verrentet -- in allen
weiteren Uebergaengen gibt es nichts mehr zu tun. Zentrale Hilfsfunktion
transitionInactive() (verkauft/getilgt ODER PK/3a post-Pension) steuert Zelle,
"?"-Status und Offen-Zaehler einheitlich.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
refreshCurrent laedt den Plan-Detail neu OHNE Loading-Umschaltung, damit die PlanView
montiert bleibt und die Scrollposition nicht auf 0/0 zurueckspringt. Der Spinner
erscheint weiterhin nur beim initialen Plan-Wechsel.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ist ein Element am jeweiligen Uebergang bereits verkauft/getilgt (status != ACTIVE),
zeigt die Zelle nur noch "–" (nicht interaktiv, kein "?"), analog zu AHV.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wenn openCount == 0, zeigt der Kopf statt "n offen" nun gruen hinterlegt einen
Haken (CheckCircle2) + "geprueft".
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Ursache des "?"-Bugs: sichtbarer Default (Halten/Rente) wurde ohne aktive Auswahl
nicht in den Datensatz geschrieben -> beim Speichern blieb der Entscheid leer.
Fix: withTransitionDefaults belegt den Entscheid explizit vor (Popup + Review-Panel),
sodass ein blosses Speichern den Default persistiert.
- Uebergangszellen oeffnen neu ein kleines Popup (TransitionCellDialog) statt des
unteren Detail-Panels; offene Zellen sind kraeftig eingefaerbt.
- PK und 3a bekommen im normalen Uebergang einen echten Bezugs-Entscheid
(Kein Bezug / Bezug + Betrag) inkl. offenem "?"-Status bis entschieden.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Vorlauf berechnet das Quoten-Vorzeichen (Einkommen inkl. Renten minus Ausgaben)
vor der Element-Schleife; in Verzehrphasen (Quote < 0) wird die Jahresrate beim
sonstigen Vermoegen als Bezug (negativ) statt als Sparbeitrag verrechnet.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>