Files
FireAdministration/CHANGELOG.md
Florian WildeandClaude Opus 5 845942f36c Phase 0: Fundament der Feuerwehr-Verwaltungsplattform
Legt den kompletten Unterbau an, auf dem die Fachmodule aufsetzen.

Betrieb:
- docker-compose.yml mit Traefik, App, Worker, PostgreSQL 17 + PostGIS,
  Redis, MinIO und Gotenberg; Entwicklungs-Override ohne Traefik, dafuer
  mit Mailpit und Adminer
- Mehrstufiges Dockerfile: eigener Benutzer, tini als PID 1, Healthcheck
- .env.example mit einem Kommentar zu jeder Variable

Mandantentrennung:
- Row Level Security auf allen mandantenpflichtigen Tabellen
- Zwei getrennte Datenbankverbindungen: florian_app mit aktiver RLS fuer
  die Anwendung, Eigentuemer-Zugang nur fuer Migration, Seed und Anmeldung
- fuerOrganisation() als einziger Weg zu Fachdaten

Nachvollziehbarkeit:
- AuditLog append-only per Trigger; UPDATE ist dauerhaft gesperrt, DELETE
  nur im gekennzeichneten Aufbewahrungslauf
- Geheimnisse werden vor dem Schreiben entfernt

Anmeldung:
- OIDC gegen ein extern betriebenes authentik, Rollen aus Gruppen nur als
  Vorbelegung beim ersten Login
- Lokaler E-Mail/Passwort-Login als Rueckfallweg
- Terminal per PIN und RFID mit zwei Schranken (Geraet, dann Person)

Weiteres:
- lib/authz.ts mit 9 Rollen und 38 Einzelrechten
- lib/storage.ts (MinIO), lib/audit.ts, lib/warteschlange.ts (BullMQ)
- Integrationen fuer Mail, Telegram und LLM hinter abschaltbaren Interfaces
- tRPC v11, Basis-Layout mit Seitenleiste und dunkler Darstellung
- Seed mit einer Beispielwehr: 16 Personen, 3 Fahrzeuge, 40 Geraete
- 32 Vitest-Tests (davon 8 gegen eine echte Datenbank), 10 Playwright-Tests
- README, Anleitung mit Screenshots, Roadmap, Aufwandsschaetzung, Devlog,
  Versionierungsregeln und Changelog

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 00:13:53 +02:00

3.8 KiB

Changelog

Alle nennenswerten Änderungen an FLORIAN. Format nach Keep a Changelog, Versionierung nach Semantic Versioning.

Die Regeln dazu stehen in docs/VERSIONIERUNG.md.

[Unveröffentlicht]

Noch nichts. Nächster Schritt ist Phase 1 (Stammdatenverwaltung).

[0.1.0] — 2026-09-03

Phase 0: das Fundament. Ab hier steht ein lauffähiger Stack mit Mandantentrennung, Anmeldung, Dateiablage und lückenloser Protokollierung.

Hinzugefügt

Betrieb

  • docker-compose.yml mit Traefik, App, Worker, PostgreSQL 17 + PostGIS, Redis, MinIO und Gotenberg.
  • docker-compose.override.yml für die Entwicklung: ohne Traefik, mit Mailpit als SMTP-Auffangkorb und Adminer für den Blick in die Datenbank. Host-Ports bewusst abseits der Standardwerte (3100, 5442, 6389, 9010/9011), damit FLORIAN neben anderen lokalen Stacks laufen kann.
  • Mehrstufiges docker/Dockerfile: eigener Benutzer florian (UID 1001, kein root), tini als PID 1, Healthcheck gegen /api/health, Standalone-Build von Next.js.
  • docker/entrypoint.sh wendet ausstehende Migrationen an — nur im App-Container, nicht im Worker.
  • docker/postgres/10-init-app-role.sh legt beim ersten Start die Rolle florian_app (NOBYPASSRLS) samt Vorgabeprivilegien an.
  • .env.example mit einem Kommentar zu jeder einzelnen Variable.

Datenmodell

  • Prisma-Schema mit Organisation, Person, Rolle, Berechtigung, RolleBerechtigung, PersonRolle, AusweisToken, AuditLog, Datei.
  • Fahrzeug und Geraet bereits schmal angelegt, damit der Seed eine realistische Wehr aufbauen kann. Phase 1 erweitert beide.
  • Migration 20260902000100_rls_policies: Row Level Security auf allen mandantenpflichtigen Tabellen, Funktion aktuelle_organisation(), Append-only-Trigger auf audit_log.
  • Migration 20260902000200_audit_bereinigung: UPDATE auf audit_log bleibt dauerhaft gesperrt, DELETE ist nur im gekennzeichneten Aufbewahrungslauf möglich.

Anwendungskern

  • lib/env.ts — Zod-Validierung der gesamten Umgebung beim Start.
  • lib/db.ts — getrennte Verbindungen für Anwendung (RLS aktiv) und System (RLS-frei), fuerOrganisation() als einziger Weg zu Fachdaten.
  • lib/authz.ts — 9 Rollen, 38 Einzelrechte, zentrale Prüffunktionen.
  • lib/storage.ts — MinIO, presignte Up- und Downloads, SHA-256-Prüfsumme.
  • lib/audit.ts — Protokolleinträge mit Vorher/Nachher-Vergleich, entfernt Geheimnisse vor dem Schreiben.
  • lib/auth.ts — Auth.js mit OIDC gegen authentik, lokalem Passwort-Login und Terminal-Anmeldung über PIN oder RFID.
  • lib/warteschlange.ts und src/worker/ — BullMQ-Gerüst mit den Auftragsarten für Fristen, Erinnerungen, PDF und Aufbewahrung.
  • lib/integrations/ — Mail, Telegram und LLM hinter abschaltbaren Schnittstellen.
  • tRPC v11 mit den Prozedurarten oeffentlich, angemeldet und mitRecht(...).

Oberfläche

  • Basis-Layout mit Seitenleiste, heller und dunkler Darstellung (Systemvorgabe als Standard) und durchgängig deutschen Texten.
  • Anmeldeseite, die genau die eingerichteten Anmeldewege zeigt.
  • Übersicht mit Kennzahlen und dem Sicherheitshinweis zur analogen Atemschutzüberwachung.
  • Farbwelt in OKLCH mit festen Statusfarben für Gerätezustände.

Daten und Tests

  • Seed mit einer vollständigen Beispielwehr: 15 Personen mit Rollen und Terminal-Ausweisen, 3 Fahrzeuge, 40 Geräte mit gemischten Prüffristen.
  • Vitest: 32 Tests, darunter acht, die die Mandantentrennung gegen eine echte Datenbank prüfen.
  • Playwright: 10 Tests über Desktop und Tablet.
  • npm run screenshots erzeugt die Bilder für die Anleitung.

Dokumentation

  • README mit Schnellstart in sechs Zeilen.
  • Anleitung, Roadmap, Aufwandsschätzung, Devlog und Versionierungsregeln.