Memo 2026081701: Kapitalverwendung mit waehlbarem Tilgungsziel, AHV automatisch, Farb- und Textkorrekturen
Deploy App / deploy (push) Successful in 1m18s
Deploy App / deploy (push) Successful in 1m18s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -481,7 +481,18 @@ function BaseDataCard({
|
||||
onChange={(v) => setDraft((d) => ({ ...d, names: { ...d.names, [el.id]: v } }))}
|
||||
/>
|
||||
</div>
|
||||
{kind?.baseFields(values, set)}
|
||||
{kind ? (
|
||||
kind.baseFields(values, set)
|
||||
) : (
|
||||
// Die AHV ist die einzige Kategorie ohne Bestand: Es gibt kein Guthaben zum
|
||||
// Nachschlagen, nur eine Beitragskarriere. Eine leere Karte sähe nach einem Fehler
|
||||
// aus -- deshalb steht hier, warum nichts zu tun ist.
|
||||
<p className="sm:col-span-2 rounded-lg bg-surface-2 px-3 py-2 text-xs text-muted">
|
||||
Hier gibt es nichts zu erfassen. Die AHV-Rente entsteht aus deiner Beitragskarriere – FPT leitet sie
|
||||
aus den Einkommen dieses Plans ab. Beim Übergang in die Pension kannst du sie prüfen und um
|
||||
Beitragslücken vor Planbeginn ergänzen.
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
@@ -502,6 +513,26 @@ export async function saveInventoryDraft(plan: PlanInput, draft: InventoryDraft)
|
||||
if (draft.cash !== null && draft.cash !== plan.initialCash) {
|
||||
await api.patch(`/api/scenarios/${plan.id}`, { initialCash: draft.cash });
|
||||
}
|
||||
|
||||
// Die AHV entsteht am Schluss von selbst -- je Person eine.
|
||||
//
|
||||
// Sie hat als einzige Kategorie KEINEN Bestand: Es gibt kein Guthaben, das man nachschlagen
|
||||
// könnte, nur eine Beitragskarriere. Ein Plus-Knopf mit einer leeren Karte darunter wäre
|
||||
// deshalb sinnlos gewesen. Weglassen ist aber keine Option: In der Schweiz hat jede Person
|
||||
// eine AHV, und ohne das Element rechnet der Plan ab der Pensionierung mit einer Rente von 0.
|
||||
//
|
||||
// IDEMPOTENT: Wer die Bestandsaufnahme später korrigiert und erneut abschliesst, bekommt
|
||||
// kein zweites Element -- geprüft wird je Person, nicht global.
|
||||
for (const person of plan.persons) {
|
||||
const exists = plan.elements.some((e) => e.category === "AHV" && e.ownerRole === person.role);
|
||||
if (exists) continue;
|
||||
const name = person.name?.trim() ? `AHV ${person.name.trim()}` : "AHV";
|
||||
await api.post(`/api/scenarios/${plan.id}/elements`, {
|
||||
category: "AHV",
|
||||
name,
|
||||
ownerRole: person.role,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user