UI-Umbau: Analyse-Bereich, Planstart, Zeitachse mit Phasen
Deploy App / deploy (push) Successful in 1m44s
Deploy App / deploy (push) Successful in 1m44s
Sieben Anpassungen aus dem Feedback: - Grafiken liegen neu im eigenen Bereich "Grafiken" (Dialog, Button oben) statt unter der Matrix. Die Matrix bleibt die ruhige Hauptansicht. - Kennzahl "Geschaetzter Nachlass" entfernt -- sie war rechnerisch identisch mit dem nominalen Endvermoegen und suggerierte eine Zusatzinformation, die es nicht gab. - Monte-Carlo-Button nach oben zu den Szenario-Aktionen verschoben. - Neues Profilfeld "Planstart (Jahr)" (Scenario.startYear + Migration). Rein fuer die Darstellung -- die Berechnung rechnet unveraendert in relativen Jahren. Bestehende Szenarien werden auf das laufende Jahr gesetzt. - Zeitachse zeigt die Lebensphasen als Segmente (Breite = Dauer, Einfaerbung nach Phasentyp) inkl. Jahresspanne, plus Jahres-Beschriftung an den Enden. - Lebensphase bearbeiten neu als Popup statt Panel unter der Tabelle -- konsistent zu allen anderen Eingaben; Speichern schliesst. - Vermoegensverlauf ueber ALLE Jahre statt nur ueber die Phasengrenzen. Dafuer fuehrt computePlan das Vermoegen neu pro Jahr mit (YearPoint.wealthNominal/ wealthReal) -- dieselbe Groesse, die schon die Ruin-Erkennung berechnet. Damit werden Verlaeufe INNERHALB einer Phase sichtbar (z. B. Kapitalverzehr). Zwei Tests fuer das Jahres-Vermoegen (58 -> 60). Spezifikation auf v0.9. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -19,18 +19,16 @@ export interface TimelineSeries {
|
||||
computed: PlanComputed;
|
||||
}
|
||||
|
||||
// Datenpunkte je Serie: Start (Beginn Phase 1) + Endwert je Phase, verortet auf dem
|
||||
// Alter der Referenzperson (Person A). So laeuft die x-Achse ueber das Alter statt ueber
|
||||
// die Phasen.
|
||||
// Datenpunkte je Serie: JEDES Planjahr (nicht nur die Phasengrenzen), verortet auf dem Alter
|
||||
// der Referenzperson (Person A). Der erste Punkt ist das Startvermoegen vor Jahr 1.
|
||||
function pointsFor(computed: PlanComputed) {
|
||||
const phases = computed.phases;
|
||||
if (phases.length === 0) return [] as { age: number; nominal: number; real: number }[];
|
||||
const refAge = (ph: PlanComputed["phases"][number]) => ph.persons[0]?.startAge ?? 0;
|
||||
const pts = [
|
||||
{ age: refAge(phases[0]), nominal: Math.round(phases[0].startWealthNominal), real: Math.round(phases[0].startWealthNominal) },
|
||||
];
|
||||
for (const p of phases) {
|
||||
pts.push({ age: refAge(p) + p.durationYears, nominal: Math.round(p.endWealthNominal), real: Math.round(p.endWealthReal) });
|
||||
const startAge = phases[0].persons[0]?.startAge ?? 0;
|
||||
const start = Math.round(phases[0].startWealthNominal);
|
||||
const pts = [{ age: startAge, nominal: start, real: start }];
|
||||
for (const y of computed.yearly) {
|
||||
pts.push({ age: y.age, nominal: y.wealthNominal, real: y.wealthReal });
|
||||
}
|
||||
return pts;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user