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

90 lines
3.8 KiB
Markdown

# Changelog
Alle nennenswerten Änderungen an FLORIAN. Format nach
[Keep a Changelog](https://keepachangelog.com/de/1.1.0/), Versionierung nach
[Semantic Versioning](https://semver.org/lang/de/).
Die Regeln dazu stehen in [docs/VERSIONIERUNG.md](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.