Fundament: Element-Stammdaten, Fixpunkte, Horizont in Jahren, PK-Bezugsalter

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 22:06:04 +02:00
parent cc61a120ee
commit 2f762175d2
17 changed files with 515 additions and 146 deletions
+10 -4
View File
@@ -68,17 +68,23 @@ describe("Datenbank-Migrationen", () => {
expect(scenCols).not.toContain("startYear");
expect(scenCols).not.toContain("userId"); // Eigentümer hängt am Plan
// Person trägt Pensionsalter und Planungshorizont -- Name und Alter beschreiben den
// Haushalt und liegen am Plan.
// Person trägt nur noch das Pensionsalter -- Name und Alter beschreiben den Haushalt und
// liegen am Plan, der Planungshorizont liegt seit 0.36 als JAHRESZAHL am Szenario.
const personCols = await cols("Person");
expect(personCols).toContain("retirementAge");
expect(personCols).toContain("planningHorizonAge");
expect(personCols).not.toContain("planningHorizonAge");
expect(personCols).not.toContain("name");
expect(personCols).not.toContain("age");
const scenCols2 = await cols("Scenario");
expect(scenCols2).toContain("planningHorizonYears");
expect(scenCols2).toContain("assistantProgress");
// Der Pensionierungs-Entscheid hängt am ELEMENT und bewusst an keiner Phase (0.34) --
// nur so überlebt er eine Verschiebung der Zeitachse.
// nur so überlebt er eine Verschiebung der Zeitachse. Die Stammdaten (0.36) ebenso: Sie
// beschreiben den Bestand bei Planbeginn und existieren, bevor es Phasen gibt.
expect(await cols("FinancialElement")).toContain("retirementDecision");
expect(await cols("FinancialElement")).toContain("baseData");
// Er muss NULL zulassen: Ohne erfassten Entscheid gelten die Vorgaben.
const rd = await db.query<{ is_nullable: string }>(