-- Effektive (Ist-)Werte, Roadmap Nr. 5 (SPEZIFIKATION 3.9).
--
-- Ein Ist-Satz gehoert zum PLAN, nicht zum Szenario: Die Realitaet ist dieselbe, egal gegen
-- welches Szenario man sie haelt. Die Zuordnung auf die szenario-eigenen Element-IDs laeuft
-- ueber die Herkunfts-Kette (sourceElementId) in der Applikationsschicht.

CREATE TABLE "ActualsSet" (
    "id" TEXT NOT NULL,
    "planId" TEXT NOT NULL,
    -- Exaktes Erfassungsdatum: erscheint in der Liste und auf der Zeitachse.
    "recordedOn" DATE NOT NULL,
    -- Kalenderjahr. NUR dieses geht in die Berechnung ein (der Rechenkern arbeitet in
    -- ganzen Jahren ab Planbeginn).
    "year" INTEGER NOT NULL,
    "comment" TEXT,
    -- Effektiver Cash-Bestand. Eigenes Feld, weil Cash kein FinancialElement ist.
    "cash" DOUBLE PRECISION,
    -- Werte je WURZEL-Element: { "<rootElementId>": { "value": 120000, "mortgage": 400000 } }
    "values" JSONB NOT NULL DEFAULT '{}',
    "createdById" TEXT NOT NULL,
    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

    CONSTRAINT "ActualsSet_pkey" PRIMARY KEY ("id")
);

-- Die Saetze werden immer nach Jahr sortiert gelesen (aeltester zuerst fuer die Rechnung).
CREATE INDEX "ActualsSet_planId_year_idx" ON "ActualsSet"("planId", "year");

ALTER TABLE "ActualsSet" ADD CONSTRAINT "ActualsSet_planId_fkey"
    FOREIGN KEY ("planId") REFERENCES "Plan"("id") ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE "ActualsSet" ADD CONSTRAINT "ActualsSet_createdById_fkey"
    FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
