Neues Feld Plan.initialCash (additiv, Default 0). computePlan startet die erste Phase
mit diesem Cash-Bestand statt 0. In der Matrix ist die Cash-Zelle der ersten Phase
klickbar und oeffnet ein Popup zum Setzen des Anfangswerts (PATCH /api/plans/{id}).
Szenario-Kopie uebernimmt den Wert. Golden-Test ergaenzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -23,10 +23,13 @@ export async function GET(
|
||||
return NextResponse.json({ plan: planInput, computed });
|
||||
}
|
||||
|
||||
// Name allein aendern ODER das ganze Plan-Profil (Haushaltsform/Personen/Inflation).
|
||||
// Name/Cash-Anfangswert aendern ODER das ganze Plan-Profil (Haushaltsform/Personen/Inflation).
|
||||
const patchSchema = z.union([
|
||||
z.object({ name: z.string().min(1).max(120) }),
|
||||
planProfileSchema.extend({ name: z.string().min(1).max(120).optional() }),
|
||||
z.object({
|
||||
name: z.string().min(1).max(120).optional(),
|
||||
initialCash: z.number().min(0).max(1_000_000_000).optional(),
|
||||
}),
|
||||
]);
|
||||
|
||||
export async function PATCH(
|
||||
@@ -67,7 +70,10 @@ export async function PATCH(
|
||||
|
||||
const updated = await prisma.plan.update({
|
||||
where: { id: plan.id },
|
||||
data: { name: data.name },
|
||||
data: {
|
||||
name: "name" in data ? data.name : undefined,
|
||||
initialCash: "initialCash" in data && data.initialCash != null ? Math.round(data.initialCash) : undefined,
|
||||
},
|
||||
});
|
||||
return NextResponse.json({ plan: { id: updated.id, name: updated.name } });
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ export async function POST(
|
||||
name: parsed.data.name,
|
||||
householdType: source.householdType,
|
||||
inflationRateDefault: source.inflationRateDefault,
|
||||
initialCash: source.initialCash,
|
||||
parentPlanId: source.id,
|
||||
persons: {
|
||||
create: source.persons.map((p) => ({ role: p.role, name: p.name, age: p.age, retirementAge: p.retirementAge })),
|
||||
|
||||
Reference in New Issue
Block a user