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>
@@ -1,9 +1,9 @@
|
||||
# Anleitung
|
||||
|
||||
Bedienung von FLORIAN, Stand Phase 2 (Version 0.3.0). Die Bilder zeigen die
|
||||
Bedienung von FLORIAN, Stand Phase 3 (Version 0.4.0). Die Bilder zeigen die
|
||||
Beispielwehr aus dem Seed und werden mit `npm run screenshots` neu erzeugt.
|
||||
|
||||
> Einsätze, Atemschutz und die Kiosk-Oberfläche kommen in den folgenden Phasen
|
||||
> Atemschutz, Karten und die Kiosk-Oberfläche kommen in den folgenden Phasen
|
||||
> dazu. Siehe [ROADMAP.md](ROADMAP.md).
|
||||
|
||||
---
|
||||
@@ -70,7 +70,7 @@ derselben Installation hat, ist nicht sichtbar und nicht abfragbar.
|
||||
### Die Seitenleiste
|
||||
|
||||
Links stehen alle Module. Was noch nicht existiert, ist ausgegraut und trägt
|
||||
rechts sein Phasenkürzel — `P3` heißt „kommt in Phase 3".
|
||||
rechts sein Phasenkürzel — `P4` heißt „kommt in Phase 4".
|
||||
|
||||
Was jemand überhaupt sieht, hängt an seinen Rechten. Ein einfaches Mitglied
|
||||
sieht die Mitgliederliste, aber nicht das Protokoll. Wichtig zum Verständnis:
|
||||
@@ -585,7 +585,200 @@ Ersatz da ist. Der Knopf dazu steht in der Zeile.
|
||||
Voraussetzung ist, dass am Gerätetyp eine Lebensdauer hinterlegt ist
|
||||
(Kapitel 5).
|
||||
|
||||
## 18. Rollen und was sie dürfen
|
||||
---
|
||||
|
||||
## 18. Einen Einsatz erfassen
|
||||
|
||||

|
||||
|
||||
Im Alarmfall zählt eines: dass der Einsatz überhaupt angelegt wird. Die
|
||||
**Schnellerfassung** fragt deshalb nur drei Dinge:
|
||||
|
||||
1. **Stichwort** — das, was die Leitstelle durchgegeben hat: „B 3 Wohnhausbrand"
|
||||
2. **Ort** — Straße, Hausnummer, gegebenenfalls das Objekt
|
||||
3. **Fahrzeuge** — welche ausgerückt sind
|
||||
|
||||
Die Alarmzeit ist der Moment des Anlegens. Alles andere — Mannschaft, Zeiten,
|
||||
Bericht — wird später nachgetragen. Der Einsatz bekommt sofort eine
|
||||
fortlaufende Nummer im Format `JJJJ-NNNN`.
|
||||
|
||||
**Koordinaten** lassen sich über „Koordinaten suchen" ermitteln, wenn die Wehr
|
||||
einen eigenen Nominatim betreibt (Kapitel 24). Ohne den bleibt das Feld leer —
|
||||
das ist in Ordnung, die Karte kommt in Phase 6.
|
||||
|
||||
---
|
||||
|
||||
## 19. Der Einsatz von innen
|
||||
|
||||

|
||||
|
||||
### Zeitstempel
|
||||
|
||||
Sechs Stempel beschreiben einen Einsatz vollständig:
|
||||
|
||||
| Stempel | wann |
|
||||
|---|---|
|
||||
| alarmiert | die Leitstelle hat alarmiert |
|
||||
| ausgerückt | das erste Fahrzeug verlässt das Gerätehaus |
|
||||
| eingetroffen | das erste Fahrzeug ist an der Einsatzstelle |
|
||||
| Einsatzende | die Arbeit an der Einsatzstelle ist beendet |
|
||||
| eingerückt | zurück im Gerätehaus |
|
||||
| einsatzbereit | Fahrzeuge und Geräte sind wieder hergerichtet |
|
||||
|
||||
Jeder Stempel ist ein Knopf und setzt die aktuelle Uhrzeit. Ein Klick auf
|
||||
„zurücknehmen" macht ihn wieder leer, falls er zu früh gedrückt wurde.
|
||||
|
||||
Daraus errechnet FLORIAN vier Zahlen:
|
||||
|
||||
- **Ausrückzeit** — Alarm bis Ausrücken. Sagt etwas über die Wehr aus.
|
||||
- **Anfahrt** — Ausrücken bis Eintreffen. Sagt etwas über die Lage aus.
|
||||
- **Hilfsfrist** — Alarm bis Eintreffen. Die Zahl, nach der die Gemeinde fragt.
|
||||
- **Einsatzdauer** — Alarm bis Einrücken.
|
||||
|
||||
Stimmt die Reihenfolge nicht, erscheint ein Hinweis. **Gespeichert wird
|
||||
trotzdem**: Zeiten werden oft Tage später aus dem Gedächtnis nachgetragen, und
|
||||
ein Einsatz mit unsicheren Zeiten ist besser als einer, den niemand erfasst.
|
||||
|
||||
### Mannschaft
|
||||
|
||||
„Mannschaft erfassen" zeigt einen Vorschlag, sortiert danach, wer im letzten
|
||||
Jahr am häufigsten dabei war. Daneben steht, ob die einsatzrelevanten
|
||||
Qualifikationen noch gelten — eine abgelaufene G26.3 fällt so auf, **bevor**
|
||||
jemand unter Atemschutz geht.
|
||||
|
||||
Ein Klick übernimmt die Person, danach lassen sich Funktion und Atemschutz in
|
||||
der Tabelle einstellen.
|
||||
|
||||
Rechts steht laufend die **Stärke nach FwDV 3**:
|
||||
|
||||
```
|
||||
1/3/5/9 entspricht einer Gruppe
|
||||
│ │ │ └── gesamt
|
||||
│ │ └──── Mannschaft
|
||||
│ └────── Unterführer (Truppführer)
|
||||
└──────── Führer (Gruppen-, Zug-, Staffelführer, Einsatzleiter)
|
||||
```
|
||||
|
||||
> **Regional unterschiedlich.** Hier zählt der Maschinist zur Mannschaft. Manche
|
||||
> Wehren rechnen ihn zu den Unterführern, andere schreiben dreistellig ohne
|
||||
> Unterführer. Die Zuordnung steht an einer Stelle im Code und lässt sich
|
||||
> anpassen.
|
||||
|
||||
### Verlauf
|
||||
|
||||
Lagemeldungen halten fest, was währenddessen passiert ist — mit Foto und
|
||||
wahlweise als **wichtig** gekennzeichnet (Menschenrettung, Nachforderung,
|
||||
Lageänderung). Meldungen bleiben auch nach der Freigabe möglich.
|
||||
|
||||
---
|
||||
|
||||
## 20. Bericht und Freigabe
|
||||
|
||||
Der Bericht ist der Text des Einsatzleiters: Lage bei Eintreffen, was getan
|
||||
wurde, wie es endete. Er lässt sich jederzeit speichern und weiter ergänzen.
|
||||
|
||||
**Freigeben** schließt den Einsatz ab. Danach:
|
||||
|
||||
- ist der Bericht **unveränderbar** — er geht an die Gemeinde und im
|
||||
Schadensfall an die Versicherung,
|
||||
- entsteht im Hintergrund das PDF (Knopf „Bericht als PDF"),
|
||||
- bleiben nur die Lagemeldungen weiter möglich.
|
||||
|
||||
Vor der Freigabe prüft FLORIAN zwei Dinge: dass eine Alarmzeit gesetzt ist und
|
||||
dass mindestens eine Einsatzkraft erfasst wurde. Ein Bericht ohne Mannschaft
|
||||
ist kein Nachweis.
|
||||
|
||||
---
|
||||
|
||||
## 21. Einsatzportal für Fremdwehren
|
||||
|
||||

|
||||
|
||||
Bei einer größeren Sache sind Nachbarwehren, THW oder Rettungsdienst mit vor
|
||||
Ort. Die brauchen kein Konto in FLORIAN — sie bekommen einen **Link**.
|
||||
|
||||
So geht es:
|
||||
|
||||
1. Auf der Einsatzseite unter „Portal für Fremdwehren" eintragen, für wen der
|
||||
Link ist („FF Nachbarhausen").
|
||||
2. **Erzeugen** klicken. Der Link erscheint **einmal** — danach steht in der
|
||||
Datenbank nur noch sein Hash.
|
||||
3. Link kopieren und weitergeben, oder als QR-Code zeigen.
|
||||
|
||||
Was die Fremdwehr sieht: Stichwort, Ort, die Zeitstempel und den Verlauf. Was
|
||||
sie **nicht** sieht: Namen von Einsatzkräften, den Bericht, irgendetwas
|
||||
außerhalb dieses Einsatzes.
|
||||
|
||||
Was sie tun kann: eine Lagemeldung mit Foto absetzen.
|
||||
|
||||
Der Link gilt 24 Stunden, lässt sich jederzeit **widerrufen**, und jeder Aufruf
|
||||
wird mitgezählt — ein Link, der nach dem Einsatz noch benutzt wird, fällt auf.
|
||||
|
||||
---
|
||||
|
||||
## 22. Statistik
|
||||
|
||||

|
||||
|
||||
Zwei Fragen, eine Seite.
|
||||
|
||||
**Was die Gemeinde fragt:** wie viele Einsätze welcher Art, und wie schnell wart
|
||||
ihr da? Dafür stehen oben die Zahlen nach der Landesstatistik und die
|
||||
**Hilfsfrist als 80-Prozent-Wert**.
|
||||
|
||||
> Warum nicht der Durchschnitt? Weil ein einzelner Einsatz auf der Autobahn ihn
|
||||
> nach oben zieht, während neunzig Prozent der Fälle im Ort liegen. In Bayern
|
||||
> gilt als Ziel: in 80 Prozent der Fälle binnen zehn Minuten. Genau diese Zahl
|
||||
> steht hier.
|
||||
|
||||
**Was die Wehr fragt:** wer trägt die Last? Dafür steht unten die Beteiligung je
|
||||
Person — Einsätze, davon unter Atemschutz, und Übungen.
|
||||
|
||||
**Jahresexport als PDF** erzeugt das Blatt für die Gemeinde: Überblick,
|
||||
Kategorien und alle Einsätze des Jahres in einer Tabelle. Es wird nicht
|
||||
gespeichert, sondern jedes Mal neu gerechnet — es ist eine Auswertung, keine
|
||||
Urkunde.
|
||||
|
||||
---
|
||||
|
||||
## 23. Übungen
|
||||
|
||||

|
||||
|
||||
Eine Übung besteht aus Thema, Art, Datum und den **Lernzielen** — was danach
|
||||
sitzen soll.
|
||||
|
||||

|
||||
|
||||
Die Anwesenheit wird als Liste abgehakt: alle aktiven Mitglieder auf einmal,
|
||||
nicht einzeln gesucht. Bei einer Übung ist die halbe Wehr da.
|
||||
|
||||
Die Teilnahme fließt in die Beteiligungsstatistik ein — das ist die Zahl, nach
|
||||
der in der Jahreshauptversammlung gefragt wird und die bei Beförderungen zählt.
|
||||
|
||||
---
|
||||
|
||||
## 24. Adressen zu Koordinaten (Nominatim)
|
||||
|
||||
FLORIAN löst Einsatzadressen nur auf, wenn die Wehr einen **eigenen** Nominatim
|
||||
betreibt:
|
||||
|
||||
```bash
|
||||
# .env
|
||||
GEOCODING_ENABLED=true
|
||||
NOMINATIM_URL=http://nominatim:8080
|
||||
GEOCODING_LAENDER=de,at,ch
|
||||
```
|
||||
|
||||
> **Kein öffentlicher Dienst.** Einsatzadressen sagen, wo es gebrannt hat und
|
||||
> wer betroffen war. Solche Anfragen gehören nicht an einen fremden Server —
|
||||
> und die Nutzungsbedingungen des öffentlichen Nominatim erlauben es ohnehin
|
||||
> nicht.
|
||||
|
||||
Ohne Konfiguration bleibt die Suche leer. Koordinaten lassen sich dann von Hand
|
||||
eintragen oder weglassen.
|
||||
|
||||
## 25. Rollen und was sie dürfen
|
||||
|
||||
Neun Rollen, jede mit einem festen Satz Rechte. Die Zuordnung steht zentral in
|
||||
`src/lib/authz.ts` und wird beim Seed in die Datenbank gespiegelt — eine Wehr
|
||||
@@ -614,7 +807,7 @@ Das Terminal selbst ist nur die Tür.
|
||||
|
||||
---
|
||||
|
||||
## 19. Anmeldung über authentik einrichten
|
||||
## 26. Anmeldung über authentik einrichten
|
||||
|
||||
authentik läuft **getrennt** von FLORIAN und ist nicht Teil dieses Stacks.
|
||||
|
||||
@@ -667,7 +860,7 @@ ganze Wehr aus.
|
||||
|
||||
---
|
||||
|
||||
## 20. Terminal-Anmeldung im Gerätehaus
|
||||
## 27. Terminal-Anmeldung im Gerätehaus
|
||||
|
||||
Die Oberfläche dazu kommt in Phase 4; der Anmeldeweg steht bereits.
|
||||
|
||||
@@ -689,7 +882,7 @@ Huber), PIN `471203`.
|
||||
|
||||
---
|
||||
|
||||
## 21. Was protokolliert wird
|
||||
## 28. Was protokolliert wird
|
||||
|
||||
Jede schreibende Änderung erzeugt einen Eintrag mit Zeitpunkt, Person,
|
||||
betroffenem Datensatz und den geänderten Feldern im Vorher-Nachher-Vergleich.
|
||||
@@ -714,7 +907,7 @@ jeweiligen Detailseite sichtbar.
|
||||
|
||||
---
|
||||
|
||||
## 22. Wenn etwas nicht geht
|
||||
## 29. Wenn etwas nicht geht
|
||||
|
||||
| Beobachtung | Wahrscheinliche Ursache | Was hilft |
|
||||
|---|---|---|
|
||||
|
||||
@@ -33,7 +33,7 @@ Faktoren, die in die Schätzung eingehen:
|
||||
| 0 | Fundament | 12–16 PT | — | **1:00 h** |
|
||||
| 1 | Stammdaten | 10–14 PT | 2,5–3,5 h | **2:05 h** |
|
||||
| 2 | Wartung und Prüfung | 18–24 PT | 4,5–6 h | **2:25 h** |
|
||||
| 3 | Einsätze und Übungen | 12–16 PT | 3–4 h | offen |
|
||||
| 3 | Einsätze und Übungen | 12–16 PT | 3–4 h | **2:10 h** |
|
||||
| 4 | Kiosk-PWA mit Offline | 16–22 PT | 4–5,5 h | offen |
|
||||
| 5 | Atemschutz (FwDV 7) | 14–18 PT | 3,5–4,5 h | offen |
|
||||
| 6 | Kartenmodule | 14–18 PT | 3,5–4,5 h | offen |
|
||||
@@ -149,7 +149,7 @@ Stift und Maus in einem ab, und mehr als Skalierung auf die Pixeldichte und
|
||||
|
||||
## Phase 3 — Einsätze und Übungen
|
||||
|
||||
**Vergleichsaufwand: 12–16 PT**
|
||||
**Vergleichsaufwand: 12–16 PT** · **Tatsächlich: 2:10 h Sitzungszeit**
|
||||
|
||||
| Baustein | PT |
|
||||
|---|---:|
|
||||
@@ -166,6 +166,30 @@ Das externe Portal für Fremdwehren ist sicherheitsrelevant: ein Zugang ohne
|
||||
Anmeldung, der zeitlich begrenzt und mengenbegrenzt sein muss. Der Aufwand
|
||||
steckt weniger in der Funktion als in der Absicherung.
|
||||
|
||||
**Rückblick.** Die Schätzung lag richtig darin, wo der Aufwand steckt — nur
|
||||
nicht in welcher Reihenfolge.
|
||||
|
||||
Billiger als gedacht war das Portal. Der Grund liegt in Phase 0 und 2: die
|
||||
Mandantentrennung, das Hashen von Geheimnissen und die Ablage von Dateien gab
|
||||
es schon, und der Zugang war am Ende ein Datensatz mit Hash, ein Zeitfenster
|
||||
und ein Zähler in Redis. Was blieb, war die Frage, was das Portal **nicht**
|
||||
zeigen darf — und die ist fachlicher Natur, nicht technischer.
|
||||
|
||||
Teurer war die Statistik. Nicht das Rechnen, sondern die Entscheidung, welche
|
||||
Zahl gilt: der Durchschnitt der Eintreffzeiten sagt nichts, weil ein einzelner
|
||||
Einsatz auf der Autobahn ihn verschiebt. Es zählt der 80-Prozent-Wert, weil die
|
||||
Gemeinde danach fragt — und das steht in keinem Pflichtenheft, das muss man
|
||||
wissen.
|
||||
|
||||
Zwei Dinge fielen erst beim Tun auf:
|
||||
|
||||
- Koordinaten müssen doppelt liegen. Prisma kann den PostGIS-Typ nicht lesen;
|
||||
ohne die Dezimalgrade daneben wäre jede Anzeige eine Rohabfrage geworden. Ein
|
||||
Trigger hält beides zusammen.
|
||||
- Der Nummernkreis war schon zweimal da (Prüfprotokolle, jetzt Einsätze und
|
||||
Übungen). Beim dritten Mal wurde daraus ein eigener Baustein — die passende
|
||||
Gelegenheit war genau diese, keine früher.
|
||||
|
||||
## Phase 4 — Kiosk-PWA
|
||||
|
||||
**Vergleichsaufwand: 16–22 PT**
|
||||
|
||||
@@ -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
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ Versionszuordnung: [VERSIONIERUNG.md](VERSIONIERUNG.md).
|
||||
Phase 0 ████████████████████ fertig 0.1.0
|
||||
Phase 1 ████████████████████ fertig 0.2.0
|
||||
Phase 2 ████████████████████ fertig 0.3.0
|
||||
Phase 3 ░░░░░░░░░░░░░░░░░░░░ offen 0.4.0
|
||||
Phase 3 ████████████████████ fertig 0.4.0
|
||||
Phase 4 ░░░░░░░░░░░░░░░░░░░░ offen 0.5.0
|
||||
Phase 5 ░░░░░░░░░░░░░░░░░░░░ offen 0.6.0
|
||||
Phase 6 ░░░░░░░░░░░░░░░░░░░░ offen 0.7.0
|
||||
@@ -83,7 +83,7 @@ Das wichtigste Modul. Ab hier ersetzt FLORIAN den Ordner.
|
||||
**Danach kann die Wehr:** einen DGUV-Nachweis führen, der einer Prüfung durch
|
||||
die Unfallkasse standhält.
|
||||
|
||||
## Phase 3 — Einsätze und Übungen · als Nächstes
|
||||
## Phase 3 — Einsätze und Übungen · fertig
|
||||
|
||||
- Einsatz mit allen Zeitstempeln: alarmiert, ausgerückt, eingetroffen,
|
||||
Einsatzende, eingerückt, einsatzbereit
|
||||
@@ -97,7 +97,7 @@ die Unfallkasse standhält.
|
||||
|
||||
**Danach kann die Wehr:** ihre Jahresstatistik auf Knopfdruck erzeugen.
|
||||
|
||||
## Phase 4 — Kiosk-PWA
|
||||
## Phase 4 — Kiosk-PWA · als Nächstes
|
||||
|
||||
Für die Wandtablets in der Fahrzeughalle.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 207 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 243 KiB |
|
Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 251 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 161 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 409 KiB After Width: | Height: | Size: 412 KiB |
|
Before Width: | Height: | Size: 419 KiB After Width: | Height: | Size: 421 KiB |
|
Before Width: | Height: | Size: 728 KiB After Width: | Height: | Size: 730 KiB |
|
Before Width: | Height: | Size: 751 KiB After Width: | Height: | Size: 754 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 301 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 312 KiB After Width: | Height: | Size: 315 KiB |
|
Before Width: | Height: | Size: 962 KiB After Width: | Height: | Size: 965 KiB |
|
Before Width: | Height: | Size: 1008 KiB After Width: | Height: | Size: 1010 KiB |
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 207 KiB |
|
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 252 KiB After Width: | Height: | Size: 255 KiB |
|
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 294 KiB After Width: | Height: | Size: 382 KiB |
|
Before Width: | Height: | Size: 300 KiB After Width: | Height: | Size: 389 KiB |
|
Before Width: | Height: | Size: 266 KiB After Width: | Height: | Size: 268 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 248 KiB |
|
After Width: | Height: | Size: 317 KiB |
|
After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 354 KiB |
|
After Width: | Height: | Size: 364 KiB |
|
After Width: | Height: | Size: 242 KiB |
|
After Width: | Height: | Size: 246 KiB |
|
After Width: | Height: | Size: 558 KiB |
|
After Width: | Height: | Size: 571 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 192 KiB |