Files
Lageplan/ROADMAP.md
Pepe Ziberi 2dbb2204f6 feat(cockpit): Modul-Baukasten – Einsatz-Cockpit frei zusammenstellbar (v1.5.0)
Jede Feuerwehr stellt ihr Cockpit selbst zusammen (Wunsch: modular & einfach):

M0 – Zerlegt:
- SOMA + Pendenzen als eigenständige Modul-Komponenten, gemeinsame Typen
  (journal/types.ts), einheitliche ModuleCard-Hülle

M1 – Registry & Verwaltung:
- Modul-Registry src/lib/modules.ts, Konfiguration pro Mandant in
  tenants.modulesConfig (JSONB, idempotente Migration)
- API GET/PUT /api/tenant/modules (normalisiert + validiert via normalizeModules)
- "Module"-Button im Journal (Admins): an/aus, Reihenfolge hoch/runter,
  eigene Module löschen

M2 – Eigene Module:
- Generisches Tabellen-Modul: frei definierbare Spalten (Text / Haken mit
  Zeitstempel / Auto-Zeit), max 8 Spalten
- Generische Daten-API /api/projects/[id]/modules/[moduleId]/items (+ [itemId]),
  neue Tabelle module_items, Live-Sync über journal-refresh Events

M3 – Feld-Vorlagen:
- Checkliste, Atemschutz-Überwachung (Trupp/Druck/Zeit/Draussen),
  Kräfte vor Ort (Name/Funktion/seit/Weg), Lagemeldungen (Hauptbereich),
  leeres Modul mit Spalten-Editor

Eingebaute Module (Journal/SOMA/Pendenzen) bleiben ohne Konfiguration exakt
wie bisher — kaputte Configs fallen sicher auf den Standard zurück.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 18:15:34 +02:00

102 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lageplan Verbesserungs-Fahrplan
Priorisierter Plan zur Weiterentwicklung. Wir arbeiten ihn Punkt für Punkt ab.
Legende Aufwand: 🟢 klein · 🟡 mittel · 🔴 gross
---
## Phase 0 Fundament & Sicherheit
- [x] **0.1 JWT-Secret härten** 🟢 ✅
- Gemeinsames Secret-Modul; in Produktion hart fehlschlagen, wenn `NEXTAUTH_SECRET`
fehlt oder < 32 Zeichen. Kein öffentlich bekannter Fallback mehr.
- Betrifft: `src/lib/auth.ts`, `src/middleware.ts`
- _Hinweis: Cookie-Flags (httpOnly/secure/sameSite) sind bereits korrekt._
- [x] **0.2 Token-Laufzeit verkürzt** 🟢 ✅
- „Angemeldet bleiben" 30 → 14 Tage. Laufzeiten zentralisiert (`SESSION_MAX_AGE_*` in `auth.ts`).
- _Offen für später: automatische Verlängerung bei Aktivität + serverseitiger Widerruf (grösserer Umbau, braucht Live-Test)._
- [x] **0.3 Benutzer-/Mandanten-Verwaltung** 🟡 ✅
- Super-Admin sieht ALLE Benutzer über alle Mandanten (Mandant-Spalte, letzte
Anmeldung, Status), sperren/entsperren (`User.isActive`), Passwort-Reset, **Suche**.
- **Anlegen mit Mandanten-Auswahl** (verhindert verwaiste User).
- `admin/page.tsx` von 1365 → ~230 Zeilen entwirrt: je Bereich eine eigene
Komponente (tenants/users/projects/icons/categories-tab), toter Code entfernt.
- Offen (später): Rollen-Dualität (User.role vs. Membership.role) vereinheitlichen.
## Phase 1 Einsatz vs. Übung
- [x] **1.1 `mode`-Feld am Projekt** 🟢 ✅
- Feld `mode` (EINSATZ/UEBUNG) im Schema + Auto-Migration + Validierung.
- Auswahl beim Erstellen (Segmented-Control), Badge in Projektliste, eigene Nummer `Ü-…`.
- [x] **1.2 UI je nach Modus** 🟡 ✅
- Direkte Buttons „Neuer Einsatz" (rot) / „Neue Übung" (blau) in der Topbar.
- Übung → Übungs-Cockpit statt Journal: Übungsziele + Zielerreichung + Auswertung.
- Deutliches „ÜBUNG"-Banner, Sidebar-Tab heisst bei Übung „Auswertung".
## Phase 2 Symbole aufräumen & ergänzen
- [ ] **2.1 Kategorien vereinheitlichen** 🟢 (Motorspritze, Hydrant, Leitern …)
- [ ] **2.2 Fehlende taktische Zeichen** 🟡 (Warteraum, Rettungsachse … Input von Fabian)
- [ ] **2.3 Symbol-Schönheitsfehler** 🟢 (Eingang/Treppe Umriss, Absperrung Seitenlinien)
- [ ] **2.4 Custom-Felder pro Symbol** 🟢 (z. B. Stockwerke; `Item.properties` existiert)
## Phase 3 Lage-/Rapportansicht
- [ ] **3.1 Reduzierte Lage-View** 🟡
- Read-Only (Pendenzen + Stand + Aufgaben) für Grossbildschirm. `Rapport` + Token existieren.
## Phase 4 Echte Kollaboration
- [x] **4.1 Karte & Journal parallel bearbeitbar** 🟡 ✅
- Editor-Lock gilt nur noch für die Karte; Journal/Cockpit unabhängig editierbar.
- Live-Sync für Journal existierte bereits (Socket → journal-refresh).
- _Offen (Kür): echtes gleichzeitiges Zeichnen (Co-Drawing) — bewusst nicht gebaut._
## Zusatz Robustheit / Datensicherheit ✅
- [x] Features-Speichern atomar (`prisma.$transaction`) — kein Totalverlust-Fenster mehr
- [x] localStorage-Features pro Projekt (`lageplan-features-<id>`) statt globalem Key
- [x] Sync-Queue verwirft dauerhafte 4xx-Fehler (kein Endlos-Retry/verstopfte Queue)
- [x] `beforeunload` persistiert auch leere Listen (gelöschte Elemente gehen nicht verloren)
- [x] **5: Optimistische Nebenläufigkeit**`Project.featuresVersion` + Versions-Check
beim Speichern. Ein veralteter (z.B. offline) Stand überschreibt neuere Änderungen nicht
mehr still, sondern erzeugt 409 → Client übernimmt Server-Stand + Warnung. Offline-Queue
verwirft konfliktierende 4xx. (Merge pro Element / echtes Co-Drawing weiterhin offen.)
## Zusatz Leitungsrechner professionalisiert ✅
- [x] Formel zentralisiert in `src/lib/hose-calc.ts` (eine Quelle, typisiert, testbar)
- [x] Ergebnis-Panel als React-Komponente (`MeasurePanel`) statt innerHTML/Inline-CSS
- [x] Schlauchtyp wählbar (Standard ★ vorausgewählt) statt alle gestapelt
- [x] Strahlrohrdruck einstellbar (4/5/6/8 bar)
- [x] Schlauchanzahl aus `lengthPerPieceM` + 10% Verlegereserve (Feld war vorher tot)
- [x] Ehrliche Höhendaten-Anzeige (Quelle bzw. Warnung „keine Höhendaten")
- Offen (später): Berechnungsparameter pro Mandant, mehrere Leitungen/Pumpenkette,
Elevation-Proxy mit Cache, Ergebnis als speicherbares Lageplan-Objekt.
## Zusatz Modul-Baukasten (Einsatz-Cockpit) ✅ v1.5.0
- [x] Journal-Monolith zerlegt: SOMA + Pendenzen als eigenständige Module,
gemeinsame Typen, Karten-Hülle (`ModuleCard`)
- [x] Modul-Registry (`src/lib/modules.ts`) + Konfiguration pro Mandant
(`tenants.modulesConfig`), API `GET/PUT /api/tenant/modules`
- [x] „Module verwalten"-Dialog: an/aus, Reihenfolge, eigene Module erstellen
- [x] Generisches Tabellen-Modul (Spaltentypen Text/Haken/Zeit) mit eigener
Daten-API (`module_items`), Live-Sync über journal-refresh
- [x] Vorlagen: Checkliste, Atemschutz-Überwachung, Kräfte vor Ort,
Lagemeldungen, leeres Modul
- Offen (später): Übungs-Cockpit auf denselben Baukasten umstellen,
Modul-Daten in Rapport-PDF übernehmen
## Phase 5 Kür
- [x] **5.1 Linien-Typ-Abfrage** 🟡 ✅
- Beim Zeichnen einer Linie/eines Pfeils fragt der Dialog nun den Typ ab:
**Normal** (gewählte Farbe), **Leitung** (blau, dicker), **Rettungsachse** (grün,
gestrichelt als freizuhaltende Achse klar erkennbar).
- Typ in `properties.lineType`; eigener MapLibre-Layer mit Dash-Muster für Rettungsachse.
---
_Fortschritt wird hier laufend abgehakt._