ce5f83823f
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>
72 lines
2.9 KiB
SQL
72 lines
2.9 KiB
SQL
-- V7: Haushaltsform, Personen (Name/Alter) und Planstartjahr wandern auf PLAN-Ebene.
|
|
--
|
|
-- Begruendung (SPEZIFIKATION 2.1, 9.30): Diese Angaben beschreiben den HAUSHALT, nicht eine
|
|
-- Planungsvariante. Unterscheiden sie sich, ist es ein anderer Plan -- kein anderes Szenario.
|
|
-- Solange sie am Szenario hingen, konnten zwei Szenarien desselben Plans verschiedene
|
|
-- Startjahre tragen; derselbe Ist-Satz waere dann je Szenario auf einem anderen Planjahr
|
|
-- gelandet.
|
|
--
|
|
-- Das PENSIONSALTER bleibt bewusst am Szenario -- es ist der Kern jedes
|
|
-- Frueh-/Spaetpensionierungs-Szenarios.
|
|
|
|
ALTER TABLE "Plan" ADD COLUMN "householdType" "HouseholdType";
|
|
ALTER TABLE "Plan" ADD COLUMN "startYear" INTEGER;
|
|
|
|
CREATE TABLE "PlanPerson" (
|
|
"id" TEXT NOT NULL,
|
|
"planId" TEXT NOT NULL,
|
|
"role" "PersonRole" NOT NULL,
|
|
"name" TEXT,
|
|
"age" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "PlanPerson_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "PlanPerson_planId_role_key" ON "PlanPerson"("planId", "role");
|
|
|
|
ALTER TABLE "PlanPerson" ADD CONSTRAINT "PlanPerson_planId_fkey"
|
|
FOREIGN KEY ("planId") REFERENCES "Plan"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- --- Datenuebernahme aus dem BASISSZENARIO ------------------------------------------------
|
|
-- Das Basisszenario ist der kanonische Stand. Weichen Nebenszenarien ab, gewinnt die Basis.
|
|
|
|
UPDATE "Plan" p
|
|
SET "householdType" = s."householdType",
|
|
"startYear" = s."startYear"
|
|
FROM "Scenario" s
|
|
WHERE s."planId" = p."id" AND s."isBase" = true;
|
|
|
|
-- Sicherheitsnetz: Plaene ohne Basisszenario (sollte es nicht geben) nehmen irgendein Szenario.
|
|
UPDATE "Plan" p
|
|
SET "householdType" = s."householdType",
|
|
"startYear" = COALESCE(p."startYear", s."startYear")
|
|
FROM "Scenario" s
|
|
WHERE s."planId" = p."id" AND p."householdType" IS NULL;
|
|
|
|
INSERT INTO "PlanPerson" ("id", "planId", "role", "name", "age")
|
|
SELECT 'pp_' || pe."id", s."planId", pe."role", pe."name", pe."age"
|
|
FROM "Person" pe
|
|
JOIN "Scenario" s ON s."id" = pe."scenarioId"
|
|
WHERE s."isBase" = true
|
|
ON CONFLICT ("planId", "role") DO NOTHING;
|
|
|
|
-- Netz fuer Plaene, deren Basisszenario keine Personen traegt.
|
|
INSERT INTO "PlanPerson" ("id", "planId", "role", "name", "age")
|
|
SELECT DISTINCT ON (s."planId", pe."role") 'pp_' || pe."id", s."planId", pe."role", pe."name", pe."age"
|
|
FROM "Person" pe
|
|
JOIN "Scenario" s ON s."id" = pe."scenarioId"
|
|
ORDER BY s."planId", pe."role", s."isBase" DESC
|
|
ON CONFLICT ("planId", "role") DO NOTHING;
|
|
|
|
-- Ein Plan ohne Haushaltsform waere nicht rechenbar.
|
|
UPDATE "Plan" SET "householdType" = 'SINGLE' WHERE "householdType" IS NULL;
|
|
ALTER TABLE "Plan" ALTER COLUMN "householdType" SET NOT NULL;
|
|
|
|
-- --- Szenario-Ebene verschlanken ----------------------------------------------------------
|
|
-- Person traegt nur noch Rolle + Pensionsalter; Name und Alter kommen vom Plan.
|
|
ALTER TABLE "Person" DROP COLUMN "name";
|
|
ALTER TABLE "Person" DROP COLUMN "age";
|
|
|
|
ALTER TABLE "Scenario" DROP COLUMN "householdType";
|
|
ALTER TABLE "Scenario" DROP COLUMN "startYear";
|