Phase 3: Einsatz- und Uebungserfassung

Schnellerfassung im Alarmfall, sechs Zeitstempel mit Ausrueckzeit, Anfahrt
und Hilfsfrist, Staerke nach FwDV 3, Personalvorschlag mit
Qualifikationsstand, Einsatzbericht als PDF, Jahresexport fuer die Gemeinde,
Statistik und Uebungen mit Anwesenheitsliste.

Dazu das Einsatzportal fuer Fremdwehren: ein signierter Link ohne Anmeldung,
zeitlich und mengenbegrenzt, der Stichwort, Ort, Zeiten und Lagemeldungen
zeigt und Meldungen mit Foto annimmt. Es sind die ersten oeffentlich
erreichbaren Endpunkte in FLORIAN.

Acht neue Tabellen, alle mit organisationId und Row Level Security. Ein
freigegebener Einsatzbericht ist unveraenderlich; ein Datenbanktrigger setzt
das durch. Koordinaten liegen doppelt — als Dezimalgrad und als
PostGIS-Punkt, zusammengehalten von einem Trigger.

57 neue Tests (32 Unit, 14 gegen eine echte Datenbank, 11 E2E).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-03 13:50:58 +02:00
co-authored by Claude Opus 5
parent bc62a9c1e8
commit 91954c402b
100 changed files with 9667 additions and 38 deletions
+17
View File
@@ -106,6 +106,23 @@ const schema = z.object({
LLM_API_KEY: z.string().optional(),
LLM_MODELL: z.string().optional(),
// Einsätze und Übungen (Phase 3)
/// Adressen zu Koordinaten auflösen. Ohne eigenen Nominatim aus.
GEOCODING_ENABLED: boolAusText(false),
/// Adresse des SELBST betriebenen Nominatim. Einsatzadressen gehören nicht
/// an einen öffentlichen Dienst.
NOMINATIM_URL: z.string().url().optional(),
GEOCODING_TIMEOUT: zahl(5),
/// Auf welche Länder die Suche eingegrenzt wird (ISO-Codes, kommagetrennt).
GEOCODING_LAENDER: z.string().default("de,at,ch"),
/// Einsatzportal für Fremdwehren: Link ohne Anmeldung, zeitlich begrenzt.
PORTAL_ENABLED: boolAusText(true),
/// Wie lange ein neu erzeugter Portal-Link gilt.
PORTAL_GUELTIGKEIT_STUNDEN: zahl(24),
/// Höchstzahl Zugriffe je Portal-Link und Stunde.
PORTAL_MAX_ZUGRIFFE: zahl(120),
// Wartung und Prüfung (Phase 2)
/** Wann der nächtliche Lauf Termine plant. Cron-Syntax, Europe/Berlin. */
WARTUNG_NACHTLAUF: z.string().default("15 3 * * *"),