Version A.B: B automatisch je Bearbeitungssitzung (10-Minuten-Fenster, unveraenderte Staende erzeugen keine), A manuell mit Pflichtkommentar. Eine Version haelt den vollstaendigen Zustand als PlanInput-JSON -- dadurch ist die Versionsauswahl in allen vier Analysewerkzeugen fast kostenlos, bei Monte-Carlo je Szenario einzeln. Wiederherstellen erhaelt die IDs (sonst verlieren Kind-Szenarien ihre Diff-Basis) und legt den Stand selbst als neue Version an. Wo ein Bezug trotzdem bricht, warnt der Dialog vorher namentlich. Statischer Waechter-Test: jeder schreibende Endpunkt loest eine Version aus. Migration gegen echtes Postgres verifiziert. Spezifikation 0.19 (3.8 und 9.28 neu), 25 Tests (139 -> 164). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+33
-1
@@ -32,7 +32,8 @@ model User {
|
||||
passwordHash String
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
plans Plan[]
|
||||
plans Plan[]
|
||||
versions ScenarioVersion[]
|
||||
}
|
||||
|
||||
enum HouseholdType {
|
||||
@@ -114,9 +115,40 @@ model Scenario {
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Laufende Hauptversion. Die Nebenversionen zaehlen in ScenarioVersion.
|
||||
currentMajor Int @default(1)
|
||||
|
||||
persons Person[]
|
||||
phases Phase[]
|
||||
elements FinancialElement[]
|
||||
versions ScenarioVersion[]
|
||||
}
|
||||
|
||||
// Ein festgehaltener Stand eines Szenarios (Version A.B). Haelt den VOLLSTAENDIGEN Zustand
|
||||
// als JSON in der Form PlanInput -- nicht eine Differenz. Dadurch laesst sich jeder alte
|
||||
// Stand ohne Umbau rechnen (computePlan), anzeigen und wiederherstellen.
|
||||
model ScenarioVersion {
|
||||
id String @id @default(cuid())
|
||||
scenarioId String
|
||||
scenario Scenario @relation(fields: [scenarioId], references: [id], onDelete: Cascade)
|
||||
|
||||
major Int
|
||||
minor Int
|
||||
// Pflicht bei Hauptversionen; Wiederherstellungen tragen hier ihre Herkunft.
|
||||
comment String?
|
||||
isMajor Boolean @default(false)
|
||||
|
||||
createdById String
|
||||
createdBy User @relation(fields: [createdById], references: [id], onDelete: Cascade)
|
||||
|
||||
snapshot Json
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
// Wird bei Zusammenfassung innerhalb einer Bearbeitungssitzung mitgezogen.
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@unique([scenarioId, major, minor])
|
||||
@@index([scenarioId, createdAt])
|
||||
}
|
||||
|
||||
// Ein Lebensabschnitt innerhalb eines Plans. Der Phasentyp (Erwerb/Pension/Mischung)
|
||||
|
||||
Reference in New Issue
Block a user