Files
Lageplan/ROADMAP.md
Pepe Ziberi 8b5f4a6778 fix(robustheit+ux): atomares Speichern, Offline-Härtung, Einsatz-Beenden, Audit raus
Robustheit / Datensicherheit:
- Features-PUT in prisma.$transaction (delete+create atomar) — verhindert
  Totalverlust bei Abbruch zwischen Löschen und Neuanlegen
- localStorage-Features pro Projekt (lageplan-features-<id>) statt globalem Key
  — verhindert Datenübertrag zwischen Projekten
- Sync-Queue verwirft dauerhafte 4xx-Fehler statt Endlos-Retry
- beforeunload persistiert auch leere Feature-Listen (Löschungen gehen nicht verloren)

UX:
- Leitungsrechner-Dropdown: Popover z-[2000] (lag hinter dem Panel), Label gekürzt
- Neuer "Einsatz beenden"-Button (speichert, löst Lock, schliesst Einsatz)
- Audit-Trail-Einstiege entfernt (Toolbar-Button + Menü-Eintrag)

Version 1.4.10

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

4.2 KiB
Raw Blame History

Lageplan Verbesserungs-Fahrplan

Priorisierter Plan zur Weiterentwicklung. Wir arbeiten ihn Punkt für Punkt ab. Legende Aufwand: 🟢 klein · 🟡 mittel · 🔴 gross


Phase 0 Fundament & Sicherheit

  • 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.
  • 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).
  • 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

  • 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 Ü-….
  • 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

  • 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

  • Features-Speichern atomar (prisma.$transaction) — kein Totalverlust-Fenster mehr
  • localStorage-Features pro Projekt (lageplan-features-<id>) statt globalem Key
  • Sync-Queue verwirft dauerhafte 4xx-Fehler (kein Endlos-Retry/verstopfte Queue)
  • beforeunload persistiert auch leere Listen (gelöschte Elemente gehen nicht verloren)
  • Offen (🟡 5): Multi-Device-Versionierung — Editor-Lock ist pro Session, nicht pro User; Last-Writer-Wins ohne updatedAt-Check. Eigener grösserer Schritt.

Zusatz Leitungsrechner professionalisiert

  • Formel zentralisiert in src/lib/hose-calc.ts (eine Quelle, typisiert, testbar)
  • Ergebnis-Panel als React-Komponente (MeasurePanel) statt innerHTML/Inline-CSS
  • Schlauchtyp wählbar (Standard ★ vorausgewählt) statt alle gestapelt
  • Strahlrohrdruck einstellbar (4/5/6/8 bar)
  • Schlauchanzahl aus lengthPerPieceM + 10% Verlegereserve (Feld war vorher tot)
  • 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.