# 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.

## Phase 5 – Kür

- [ ] **5.1 – Linien-Typ-Abfrage** 🟡 (Rettungsachse / Leitung / normal)

---

_Fortschritt wird hier laufend abgehakt._
