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:
co-authored by
Claude Opus 5
parent
bc62a9c1e8
commit
91954c402b
+103
-1
@@ -14,7 +14,109 @@ Die aufgewendete Zeit wandert nach jedem Abschnitt in die Spalte
|
||||
| Phase 1 — Stammdaten | 1:15 h | 1 | 03.09.2026 |
|
||||
| Phase 1 — Nachtrag Geräteformular | 0:50 h | 1 | 03.09.2026 |
|
||||
| Phase 2 — Wartung und Prüfung | 2:25 h | 1 | 03.09.2026 |
|
||||
| **Summe** | **5:30 h** | **4** | |
|
||||
| Phase 3 — Einsätze und Übungen | 2:10 h | 1 | 03.09.2026 |
|
||||
| **Summe** | **7:40 h** | **5** | |
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-03 · Phase 3 — Einsätze und Übungen
|
||||
|
||||
**12:25 – 14:35 · 2:10 h · Version 0.4.0**
|
||||
|
||||
### Was entstanden ist
|
||||
|
||||
Ab hier dokumentiert die Wehr, was sie tut. Acht neue Tabellen, ein öffentlich
|
||||
erreichbares Portal und die Zahlen, nach denen die Gemeinde fragt.
|
||||
|
||||
**Schnellerfassung.** Im Alarmfall fragt FLORIAN drei Dinge: Stichwort, Ort,
|
||||
welche Fahrzeuge raus sind. Alarmzeit ist der Moment des Anlegens. Alles
|
||||
Weitere wird nachgetragen, wenn wieder Ruhe ist.
|
||||
|
||||
**Zeitstempel und Kennzahlen.** Sechs Stempel, je ein Knopf. Daraus rechnet
|
||||
sich Ausrückzeit, Anfahrtszeit, Hilfsfrist und Einsatzdauer.
|
||||
|
||||
**Stärke nach FwDV 3.** Aus den Funktionen der Mannschaft, in der üblichen
|
||||
Schreibweise, mit Zuordnung zur taktischen Einheit.
|
||||
|
||||
**Einsatzbericht.** Als PDF über Gotenberg, mit der Freigabe festgeschrieben.
|
||||
Dazu der Jahresexport quer gedruckt für die Gemeinde.
|
||||
|
||||
**Statistik.** Kategorien nach Landesstatistik, Verteilung der Hilfsfristen mit
|
||||
dem 80-Prozent-Wert, Beteiligung je Person, Auslastung je Fahrzeug.
|
||||
|
||||
**Portal für Fremdwehren.** Ein signierter Link ohne Anmeldung: Stand sehen,
|
||||
Lagemeldung mit Foto absetzen. Zeitlich begrenzt, mengenbegrenzt, widerrufbar.
|
||||
|
||||
**Übungen.** Thema, Lernziele, Anwesenheit zum Abhaken — die Grundlage für die
|
||||
Teilnahmequote in der Jahreshauptversammlung.
|
||||
|
||||
### Entscheidungen
|
||||
|
||||
**Die Hilfsfrist wird als 80-Prozent-Wert ausgewiesen, nicht als Durchschnitt.**
|
||||
Der Durchschnitt sagt bei Eintreffzeiten nichts: ein einzelner Einsatz auf der
|
||||
Autobahn zieht ihn nach oben, während neunzig Prozent der Fälle im Ort liegen.
|
||||
In Bayern gilt als Ziel, in 80 Prozent der Fälle binnen zehn Minuten da zu
|
||||
sein — also ist genau das die Zahl.
|
||||
|
||||
**Hinweise statt Sperren bei Zeiten und Stärke.** Eine verdrehte Reihenfolge
|
||||
oder eine fehlende Führungskraft wird angezeigt, aber nicht verhindert.
|
||||
Einsätze werden Tage später aus dem Gedächtnis nachgetragen; ein Einsatz mit
|
||||
unsicheren Zeiten ist immer noch besser als einer, den niemand erfasst, weil
|
||||
das Formular ihn nicht angenommen hat.
|
||||
|
||||
**Der freigegebene Bericht ist unveränderbar — Lagemeldungen nicht.** Der
|
||||
Bericht geht an die Gemeinde, die Meldungen sind das Protokoll des Verlaufs.
|
||||
Eine Meldung aus dem Portal kann eintreffen, wenn der Bericht längst
|
||||
geschrieben ist; sie nachträglich abzuweisen wäre falsch.
|
||||
|
||||
**Das Portal zeigt bewusst wenig.** Stichwort, Ort, Zeitstempel und Meldungen —
|
||||
also das, was an der Einsatzstelle ohnehin jeder sieht. Keine Namen von
|
||||
Einsatzkräften, kein Bericht, keine Navigation. Der Link ist ein Fenster auf
|
||||
einen Einsatz, keine Tür in die Anwendung.
|
||||
|
||||
**Koordinaten liegen doppelt.** Als Dezimalgrad, die Prisma lesen kann, und als
|
||||
PostGIS-Punkt für die Karte ab Phase 6. Ein Trigger hält beides zusammen —
|
||||
sonst wäre jede Schreiboperation Roh-SQL geworden, und ein über einen anderen
|
||||
Weg angelegter Einsatz fehlte später auf der Karte.
|
||||
|
||||
**Geocoding nur gegen einen eigenen Nominatim.** Einsatzadressen sagen, wo es
|
||||
gebrannt hat. Solche Anfragen gehören nicht an einen fremden Dienst — und die
|
||||
Nutzungsbedingungen des öffentlichen Nominatim erlauben es ohnehin nicht.
|
||||
|
||||
### Wo es gehakt hat
|
||||
|
||||
| Problem | Ursache | Lösung |
|
||||
|---|---|---|
|
||||
| Prisma wollte wieder die Suchindizes löschen | wie in Phase 2: gin_trgm und gist kennt das Schema nicht | DROP INDEX-Zeilen aus der erzeugten Migration entfernt, mit Kommentar |
|
||||
| Der Prisma-Client ließ sich nicht neu erzeugen | die Engine-DLL war vom laufenden Entwicklungsserver gesperrt | Server und Worker beenden, dann erzeugen — unter Windows unvermeidlich |
|
||||
| Die Anwesenheitsliste blieb leer | sie forderte 300 Mitglieder an, erlaubt sind 200 je Seite | auf 200 gesetzt; aufgefallen in der Server-Ausgabe während der E2E-Tests |
|
||||
| Zwei E2E-Tests schlugen im Gesamtlauf fehl, einzeln aber nicht | die erste Übersetzung einer Route dauert unter Last länger als das Erwartungslimit | Limit von 15 auf 25 Sekunden — Wartezeit des Entwicklungsservers, kein Fehler der Anwendung |
|
||||
|
||||
### Abweichung von der Vorgabe
|
||||
|
||||
**Keine.** Alle acht Tabellen tragen `organisationId` und stehen unter Row
|
||||
Level Security, jede schreibende Operation protokolliert, gelöscht wird weich.
|
||||
|
||||
Eine Ergänzung: die Portalprozeduren sind die **ersten öffentlich erreichbaren
|
||||
Endpunkte** in FLORIAN. Sie prüfen den Token selbst, laufen für die Suche des
|
||||
Zugangs bewusst ohne Mandantenfilter (begründet im Code) und arbeiten danach im
|
||||
Mandantenkontext der gefundenen Wehr.
|
||||
|
||||
### Offen und bewusst so gelassen
|
||||
|
||||
Die Zuordnung der Funktionen zur Stärke ist **regional unterschiedlich**. Hier
|
||||
zählt der Maschinist zur Mannschaft und nur der Truppführer als Unterführer;
|
||||
eine Gruppe ergibt damit 1/3/5/9. Andere Wehren rechnen anders. Die Zuordnung
|
||||
steht an einer Stelle in `lib/einsatz/staerke.ts` und ist leicht zu ändern —
|
||||
bestätigt ist sie noch nicht.
|
||||
|
||||
### Nachweise
|
||||
|
||||
- `npm run typecheck` — ohne Ausgabe
|
||||
- `npm run test` — 207 Tests grün, davon 32 gegen eine echte Datenbank
|
||||
- `npm run test:e2e` — 95 Tests grün, 2 übersprungen
|
||||
- `npm run build` — 38 Routen
|
||||
- `docker compose up -d` — Postgres, Redis, MinIO, Gotenberg gesund
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user