Ab hier dokumentiert die Wehr, was sie tut — für die Gemeinde, für die Versicherung und für die eigene Mannschaft.
Was drin ist
Schnellerfassung — im Alarmfall fragt FLORIAN drei Dinge: Stichwort, Ort, ausgerückte Fahrzeuge. Alarmzeit ist der Moment des Anlegens, alles Weitere wird nachgetragen.
Sechs Zeitstempel (alarmiert, ausgerückt, eingetroffen, Einsatzende, eingerückt, einsatzbereit) — je ein Knopf. Daraus gerechnet: Ausrückzeit, Anfahrtszeit, Hilfsfrist und Einsatzdauer.
Stärke nach FwDV 3 aus den Funktionen der Mannschaft, in der Schreibweise Führer/Unterführer/Mannschaft/Gesamt, mit Zuordnung zur taktischen Einheit.
Personalvorschlag — sortiert nach Einsatzerfahrung der letzten zwölf Monate, mit dem Qualifikationsstand daneben: eine abgelaufene G26.3 fällt auf, bevor jemand unter Atemschutz geht.
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.
Einsatzportal für Fremdwehren — ein signierter Link ohne Anmeldung. Die ersten öffentlich erreichbaren Endpunkte in FLORIAN.
Übungen mit Thema, Lernzielen und Anwesenheitsliste zum Abhaken.
Zwei Festlegungen, über die es sich zu reden lohnt
Die Hilfsfrist wird als 80-Prozent-Wert ausgewiesen, nicht als Durchschnitt. Ein einzelner Einsatz auf der Autobahn zieht den Durchschnitt nach oben, während neunzig Prozent der Fälle im Ort liegen. In Bayern gilt als Ziel, in 80 % der Fälle binnen zehn Minuten da zu sein — also ist genau das die Zahl.
Hinweise statt Sperren. Eine verdrehte Zeitreihenfolge oder eine fehlende Führungskraft wird angezeigt, aber nicht verhindert. Ein Einsatz mit unsicheren Zeiten ist besser als einer, den niemand erfasst, weil das Formular ihn nicht angenommen hat.
Sicherheit des Portals
Vier technische Schranken:
32 zufällige Bytes im Link
nur der Hash liegt in der Datenbank
24 Stunden gültig, jederzeit widerrufbar, jeder Aufruf wird mitgezählt
120 Aufrufe, 30 Meldungen, 10 Fotos je Link und Stunde
Und eine fachliche: das Portal zeigt Stichwort, Ort, Zeitstempel und Lagemeldungen — keine Namen von Einsatzkräften, keinen Bericht, keinen Weg in den Rest der Anwendung. Der E2E-Test prüft das in einem Browser ohne Sitzung.
Zum Testen
git checkout feat/phase-3-einsaetze
npm install
docker compose up -d
npm run db:migrate
npm run db:seed
npm run dev # Anwendung auf :3100
npm run worker # zweites Fenster: erzeugt die Einsatzberichte
Anmeldung: admin@beispielwehr.de / Feuerwehr2026
/einsaetze — acht Einsätze aus dem Seed. „Einsatz erfassen" ausprobieren: Stichwort, Ort, Fahrzeuge, anlegen.
Im neuen Einsatz — Zeitstempel setzen (die Kennzahlen rechnen sich sofort), „Mannschaft erfassen" für den Vorschlag, Lagemeldung schreiben.
Portal — rechts einen Link für „FF Nachbarhausen" erzeugen, in einem privaten Fenster öffnen (dort ist keine Sitzung), Meldung absetzen. Danach widerrufen und noch einmal aufrufen.
Freigeben — Bericht schreiben, freigeben, „Bericht als PDF" (der Worker braucht ein bis zwei Sekunden). Danach ist Ändern gesperrt.
/einsaetze/statistik — Jahr wählen, „Jahresexport als PDF".
/uebungen — Übung anlegen, Anwesenheit abhaken.
Nachweise
npm run typecheck — ohne Ausgabe
npm run test — 207 Tests grün (davon 32 gegen eine echte Datenbank)
npm run test:e2e — 95 grün, 2 begründet übersprungen
npm run build — 38 Routen
Nebenbei
Der Nummernkreis JJJJ-NNNN liegt jetzt in src/lib/nummernkreis.ts und wird von Prüfprotokollen, Einsätzen und Übungen gemeinsam verwendet.
Behoben: die Anwesenheitsliste einer Übung forderte 300 Mitglieder an, erlaubt sind 200 je Seite — die Liste blieb leer.
Das Zeitlimit der E2E-Erwartungen steigt von 15 auf 25 Sekunden. Mit fünfzig Routen dauert die erste Übersetzung einer Seite im Entwicklungsserver unter Last länger; daran scheiterten gelegentlich Tests, die einzeln grün sind.
Eine offene Frage an dich
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 zählen den Maschinisten zu den Unterführern oder schreiben dreistellig ohne Unterführer (1/8/9). Wie rechnet ihr? Die Zuordnung steht an einer Stelle in src/lib/einsatz/staerke.ts und ist in zwei Zeilen geändert.
Ab hier dokumentiert die Wehr, was sie tut — für die Gemeinde, für die Versicherung und für die eigene Mannschaft.
## Was drin ist
**Schnellerfassung** — im Alarmfall fragt FLORIAN drei Dinge: Stichwort, Ort, ausgerückte Fahrzeuge. Alarmzeit ist der Moment des Anlegens, alles Weitere wird nachgetragen.
**Sechs Zeitstempel** (alarmiert, ausgerückt, eingetroffen, Einsatzende, eingerückt, einsatzbereit) — je ein Knopf. Daraus gerechnet: Ausrückzeit, Anfahrtszeit, **Hilfsfrist** und Einsatzdauer.
**Stärke nach FwDV 3** aus den Funktionen der Mannschaft, in der Schreibweise `Führer/Unterführer/Mannschaft/Gesamt`, mit Zuordnung zur taktischen Einheit.
**Personalvorschlag** — sortiert nach Einsatzerfahrung der letzten zwölf Monate, mit dem Qualifikationsstand daneben: eine abgelaufene G26.3 fällt auf, bevor jemand unter Atemschutz geht.
**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.
**Einsatzportal für Fremdwehren** — ein signierter Link ohne Anmeldung. Die ersten öffentlich erreichbaren Endpunkte in FLORIAN.
**Übungen** mit Thema, Lernzielen und Anwesenheitsliste zum Abhaken.
## Zwei Festlegungen, über die es sich zu reden lohnt
**Die Hilfsfrist wird als 80-Prozent-Wert ausgewiesen, nicht als Durchschnitt.** Ein einzelner Einsatz auf der Autobahn zieht den Durchschnitt nach oben, während neunzig Prozent der Fälle im Ort liegen. In Bayern gilt als Ziel, in 80 % der Fälle binnen zehn Minuten da zu sein — also ist genau das die Zahl.
**Hinweise statt Sperren.** Eine verdrehte Zeitreihenfolge oder eine fehlende Führungskraft wird angezeigt, aber nicht verhindert. Ein Einsatz mit unsicheren Zeiten ist besser als einer, den niemand erfasst, weil das Formular ihn nicht angenommen hat.
## Sicherheit des Portals
Vier technische Schranken:
1. 32 zufällige Bytes im Link
2. nur der Hash liegt in der Datenbank
3. 24 Stunden gültig, jederzeit widerrufbar, jeder Aufruf wird mitgezählt
4. 120 Aufrufe, 30 Meldungen, 10 Fotos je Link und Stunde
Und eine fachliche: das Portal zeigt Stichwort, Ort, Zeitstempel und Lagemeldungen — **keine Namen von Einsatzkräften, keinen Bericht, keinen Weg in den Rest der Anwendung**. Der E2E-Test prüft das in einem Browser ohne Sitzung.
## Zum Testen
```bash
git checkout feat/phase-3-einsaetze
npm install
docker compose up -d
npm run db:migrate
npm run db:seed
npm run dev # Anwendung auf :3100
npm run worker # zweites Fenster: erzeugt die Einsatzberichte
```
Anmeldung: `admin@beispielwehr.de` / `Feuerwehr2026`
1. **`/einsaetze`** — acht Einsätze aus dem Seed. „Einsatz erfassen" ausprobieren: Stichwort, Ort, Fahrzeuge, anlegen.
2. **Im neuen Einsatz** — Zeitstempel setzen (die Kennzahlen rechnen sich sofort), „Mannschaft erfassen" für den Vorschlag, Lagemeldung schreiben.
3. **Portal** — rechts einen Link für „FF Nachbarhausen" erzeugen, in einem privaten Fenster öffnen (dort ist keine Sitzung), Meldung absetzen. Danach widerrufen und noch einmal aufrufen.
4. **Freigeben** — Bericht schreiben, freigeben, „Bericht als PDF" (der Worker braucht ein bis zwei Sekunden). Danach ist Ändern gesperrt.
5. **`/einsaetze/statistik`** — Jahr wählen, „Jahresexport als PDF".
6. **`/uebungen`** — Übung anlegen, Anwesenheit abhaken.
## Nachweise
- `npm run typecheck` — ohne Ausgabe
- `npm run test` — 207 Tests grün (davon 32 gegen eine echte Datenbank)
- `npm run test:e2e` — 95 grün, 2 begründet übersprungen
- `npm run build` — 38 Routen
## Nebenbei
- Der Nummernkreis `JJJJ-NNNN` liegt jetzt in `src/lib/nummernkreis.ts` und wird von Prüfprotokollen, Einsätzen und Übungen gemeinsam verwendet.
- Behoben: die Anwesenheitsliste einer Übung forderte 300 Mitglieder an, erlaubt sind 200 je Seite — die Liste blieb leer.
- Das Zeitlimit der E2E-Erwartungen steigt von 15 auf 25 Sekunden. Mit fünfzig Routen dauert die erste Übersetzung einer Seite im Entwicklungsserver unter Last länger; daran scheiterten gelegentlich Tests, die einzeln grün sind.
## Eine offene Frage an dich
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 zählen den Maschinisten zu den Unterführern oder schreiben dreistellig ohne Unterführer (1/8/9). Wie rechnet ihr? Die Zuordnung steht an einer Stelle in `src/lib/einsatz/staerke.ts` und ist in zwei Zeilen geändert.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ab hier dokumentiert die Wehr, was sie tut — für die Gemeinde, für die Versicherung und für die eigene Mannschaft.
Was drin ist
Schnellerfassung — im Alarmfall fragt FLORIAN drei Dinge: Stichwort, Ort, ausgerückte Fahrzeuge. Alarmzeit ist der Moment des Anlegens, alles Weitere wird nachgetragen.
Sechs Zeitstempel (alarmiert, ausgerückt, eingetroffen, Einsatzende, eingerückt, einsatzbereit) — je ein Knopf. Daraus gerechnet: Ausrückzeit, Anfahrtszeit, Hilfsfrist und Einsatzdauer.
Stärke nach FwDV 3 aus den Funktionen der Mannschaft, in der Schreibweise
Führer/Unterführer/Mannschaft/Gesamt, mit Zuordnung zur taktischen Einheit.Personalvorschlag — sortiert nach Einsatzerfahrung der letzten zwölf Monate, mit dem Qualifikationsstand daneben: eine abgelaufene G26.3 fällt auf, bevor jemand unter Atemschutz geht.
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.
Einsatzportal für Fremdwehren — ein signierter Link ohne Anmeldung. Die ersten öffentlich erreichbaren Endpunkte in FLORIAN.
Übungen mit Thema, Lernzielen und Anwesenheitsliste zum Abhaken.
Zwei Festlegungen, über die es sich zu reden lohnt
Die Hilfsfrist wird als 80-Prozent-Wert ausgewiesen, nicht als Durchschnitt. Ein einzelner Einsatz auf der Autobahn zieht den Durchschnitt nach oben, während neunzig Prozent der Fälle im Ort liegen. In Bayern gilt als Ziel, in 80 % der Fälle binnen zehn Minuten da zu sein — also ist genau das die Zahl.
Hinweise statt Sperren. Eine verdrehte Zeitreihenfolge oder eine fehlende Führungskraft wird angezeigt, aber nicht verhindert. Ein Einsatz mit unsicheren Zeiten ist besser als einer, den niemand erfasst, weil das Formular ihn nicht angenommen hat.
Sicherheit des Portals
Vier technische Schranken:
Und eine fachliche: das Portal zeigt Stichwort, Ort, Zeitstempel und Lagemeldungen — keine Namen von Einsatzkräften, keinen Bericht, keinen Weg in den Rest der Anwendung. Der E2E-Test prüft das in einem Browser ohne Sitzung.
Zum Testen
Anmeldung:
admin@beispielwehr.de/Feuerwehr2026/einsaetze— acht Einsätze aus dem Seed. „Einsatz erfassen" ausprobieren: Stichwort, Ort, Fahrzeuge, anlegen./einsaetze/statistik— Jahr wählen, „Jahresexport als PDF"./uebungen— Übung anlegen, Anwesenheit abhaken.Nachweise
npm run typecheck— ohne Ausgabenpm run test— 207 Tests grün (davon 32 gegen eine echte Datenbank)npm run test:e2e— 95 grün, 2 begründet übersprungennpm run build— 38 RoutenNebenbei
JJJJ-NNNNliegt jetzt insrc/lib/nummernkreis.tsund wird von Prüfprotokollen, Einsätzen und Übungen gemeinsam verwendet.Eine offene Frage an dich
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 zählen den Maschinisten zu den Unterführern oder schreiben dreistellig ohne Unterführer (1/8/9). Wie rechnet ihr? Die Zuordnung steht an einer Stelle in
src/lib/einsatz/staerke.tsund ist in zwei Zeilen geändert.🤖 Generated with Claude Code