From d3c752e2b9b6270647dea5f23c479896870a4be7262d568c47e03508e8a687c5 Mon Sep 17 00:00:00 2001 From: wlfb Date: Mon, 28 Sep 2026 18:33:59 +0200 Subject: [PATCH] docs: Spec A11 - Ist-Serie als reservierter Name System-Ist Co-Authored-By: Claude Opus 5.5 (1M context) --- .../specs/2026-09-28-ausbaustufe-11-design.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/specs/2026-09-28-ausbaustufe-11-design.md b/docs/superpowers/specs/2026-09-28-ausbaustufe-11-design.md index 1ab0e5e..3985663 100644 --- a/docs/superpowers/specs/2026-09-28-ausbaustufe-11-design.md +++ b/docs/superpowers/specs/2026-09-28-ausbaustufe-11-design.md @@ -8,8 +8,9 @@ ## Nutzerentscheidungen (2026-09-28) -- Szenario-Vergleich vor heute: **Ist-Gesamtsaldo als eigene Serie „Ist"**, - Szenario-Kurven erst ab heute. +- Szenario-Vergleich vor heute: **Ist-Gesamtsaldo als eigene Serie + „System-Ist"** (bewusst systemeigen benannt, Name für Szenarien + reserviert), Szenario-Kurven erst ab heute. - Veraltete Szenarien: **automatisch neu rechnen** beim Seitenaufruf. - Planungs-Diagramm: **Einnahmen + Ausgaben mit Vorzeichen** (Semantik wie „Monat nach Kategorie"). @@ -54,7 +55,7 @@ Neue Definition, Spalten unverändert (`scenario, day, balance`): -1. **Ist-Serie:** `SELECT 'Ist', day, balance FROM v_balance_total` +1. **Ist-Serie:** `SELECT 'System-Ist', day, balance FROM v_balance_total` (reicht bis `CURRENT_DATE`). 2. **Szenario-Startpunkt:** je Szenario mit mindestens einem Projektionspunkt eine Zeile `(s.name, CURRENT_DATE, )` @@ -71,8 +72,15 @@ stehen (ist bereits so; Reihenfolge beibehalten). Achtung: DROP … CASCADE von `v_balance_total` im Fallback-Pfad würde `v_projection` mitreißen — da `v_projection` danach ohnehin neu angelegt wird, ist das unkritisch. -Bekannte Grenze: ein Szenario namens „Ist" würde mit der Ist-Serie -verschmelzen. Wird hingenommen (keine Namensvalidierung eingeführt). +Reservierter Name: Die Serienbezeichnung `System-Ist` ist als Modul-Konstante +(`RESERVED_SCENARIO_NAME` in `models/views.py`, dort auch in der View-SQL +verwendet) hinterlegt. `routers/scenarios.py` lehnt `POST` und `PATCH` mit +diesem Namen (Vergleich nach `strip().casefold()`) mit **422** und der +Meldung „Der Name »System-Ist« ist für die Ist-Kurve reserviert" ab, damit +kein Szenario mit der Ist-Serie verschmelzen kann. Bestandsszenarien mit +diesem Namen existieren nicht (live geprüft: 3 Szenarien, andere Namen). +Tests: POST/PATCH mit `System-Ist`, `system-ist`, ` System-Ist ` → 422; +normale Namen unverändert 201/200. ### 2b. Automatisches Neurechnen (`services/projection_service.py`)