V7: Haushalt auf Plan-Ebene, Annahmen bleiben am Szenario
Deploy App / deploy (push) Successful in 1m52s
Deploy App / deploy (push) Successful in 1m52s
Haushaltsform, Personen (Name/Alter) und Startjahr wandern vom Szenario auf den Plan. Das Pensionsalter bleibt szenario-eigen -- es ist der Kern jedes Frueh-/Spaetpensionierungs-Szenarios. Neue Tabelle PlanPerson; Person behaelt nur Rolle + Pensionsalter; Plan bekommt householdType und startYear. Der Rechenkern bleibt unberuehrt: toPlanInput fuegt beide Ebenen wieder zu einem unveraenderten PlanInput zusammen. 43 Golden Tests unveraendert. Nebeneffekt: Ein Ist-Satz trifft jetzt in ALLEN Szenarien dasselbe Planjahr -- vorher war das nicht garantiert. Wiederherstellen einer Version setzt nur noch Szenario-Eigenes zurueck. Profil-Dialog kennzeichnet plan-weite vs. szenario-eigene Felder. Zwei Tests spielen echte V6-Daten ein und pruefen die Uebernahme. Spezifikation 0.23 (210 -> 212). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -49,8 +49,17 @@ export function PlanProfileFields({
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-4">
|
||||
{/* Seit V7 beschreiben Haushaltsform, Personen und Startjahr den PLAN und gelten für
|
||||
ALLE Szenarien. Das muss sichtbar sein -- sonst ändert man beim Bearbeiten eines
|
||||
Nebenszenarios unbemerkt auch alle anderen. */}
|
||||
<p className="rounded-lg border border-attention bg-attention-soft px-3 py-2 text-xs text-attention-soft-fg">
|
||||
Haushaltsform, Personen und Planstart gelten für <strong>alle Szenarien</strong> dieses
|
||||
Plans. Unterscheiden sie sich, ist es ein anderer Plan. Szenario-eigen sind nur das{" "}
|
||||
<strong>Pensionsalter</strong> und die <strong>Inflation</strong>.
|
||||
</p>
|
||||
|
||||
<SelectField
|
||||
label="Haushaltsform"
|
||||
label="Haushaltsform (plan-weit)"
|
||||
help="Planst du alleine oder gemeinsam mit einer Partnerin / einem Partner?"
|
||||
value={draft.householdType}
|
||||
onChange={setType}
|
||||
@@ -67,22 +76,22 @@ export function PlanProfileFields({
|
||||
</div>
|
||||
<div className="col-span-2">
|
||||
<TextField
|
||||
label="Name (optional)"
|
||||
label="Name (optional, plan-weit)"
|
||||
value={person.name}
|
||||
placeholder={person.role === "PERSON_A" ? "Person A" : "Person B"}
|
||||
onChange={(v) => updatePerson(index, { name: v })}
|
||||
/>
|
||||
</div>
|
||||
<NumberField
|
||||
label="Aktuelles Alter"
|
||||
label="Aktuelles Alter (plan-weit)"
|
||||
value={person.age}
|
||||
min={0}
|
||||
max={120}
|
||||
onChange={(v) => updatePerson(index, { age: Math.round(v) })}
|
||||
/>
|
||||
<NumberField
|
||||
label="Pensionierungsalter"
|
||||
help="Steuert die Ableitung des Phasentyps (Erwerb/Pension)."
|
||||
label="Pensionierungsalter (nur dieses Szenario)"
|
||||
help="Steuert die Ableitung des Phasentyps (Erwerb/Pension). Als einzige Personenangabe szenario-eigen -- das ist der Kern jedes Früh-/Spätpensionierungs-Szenarios."
|
||||
value={person.retirementAge}
|
||||
min={30}
|
||||
max={100}
|
||||
@@ -92,7 +101,7 @@ export function PlanProfileFields({
|
||||
))}
|
||||
|
||||
<NumberField
|
||||
label="Planstart (Jahr)"
|
||||
label="Planstart (Jahr, plan-weit)"
|
||||
help="Kalenderjahr, in dem die Planung beginnt (Jahr 1). Wird auf der Zeitachse und in den Grafiken angezeigt; die Berechnung selbst rechnet in Jahren ab Planbeginn."
|
||||
value={draft.startYear}
|
||||
min={1900}
|
||||
@@ -101,7 +110,7 @@ export function PlanProfileFields({
|
||||
/>
|
||||
|
||||
<NumberField
|
||||
label="Erwartete Inflationsrate (%)"
|
||||
label="Erwartete Inflationsrate (%, nur dieses Szenario)"
|
||||
help="Langfristige Annahme zur jährlichen Teuerung. Gilt plan-weit für alle Lebensphasen."
|
||||
value={draft.inflationRateDefault}
|
||||
step={0.1}
|
||||
|
||||
Reference in New Issue
Block a user