# Anleitung Bedienung von FLORIAN, Stand Phase 11 (Version 0.12.0). Die Bilder zeigen die Beispielwehr aus dem Seed und werden mit `npm run screenshots` neu erzeugt. --- ## 1. Anmelden Aufgerufen wird FLORIAN im Browser unter der Adresse, die der Administrator eingerichtet hat — in der Entwicklung `http://localhost:3100`. ![Anmeldeseite](screenshots/01-anmeldung-light.png) Die Anmeldeseite zeigt genau die Wege, die in dieser Installation eingerichtet sind: | Weg | Wann | |---|---| | **Anmeldung über authentik** | Der Regelweg, sobald authentik eingerichtet ist. Ein Klick, keine Passworteingabe in FLORIAN. | | **E-Mail und Passwort** | Beim Erststart, und wenn authentik gerade nicht erreichbar ist. | | **Terminal im Gerätehaus** | Am Wandtablet, mit PIN oder Ausweiskarte. Eigene Oberfläche, kommt in Phase 4. | Beim allerersten Start gibt es genau ein Konto: das aus `SEED_ADMIN_EMAIL` und `SEED_ADMIN_PASSWORT` in der `.env`. Vorgabe: ``` admin@beispielwehr.de Feuerwehr2026 ``` **Dieses Passwort gehört nach dem ersten Login geändert.** ### Wenn die Anmeldung nicht klappt Nach mehreren Fehlversuchen wird das Konto vorübergehend gesperrt — voreingestellt nach fünf Versuchen für fünf Minuten (`KIOSK_MAX_FEHLVERSUCHE`, `KIOSK_SPERRDAUER`). Die Meldung nennt nicht, ob die E-Mail-Adresse oder das Passwort falsch war; das ist Absicht und verhindert, dass sich vorhandene Konten erraten lassen. --- ## 2. Die Übersicht Nach der Anmeldung steht die Übersicht der eigenen Wehr. ![Übersicht](screenshots/02-uebersicht-light.png) Von oben nach unten: **Kopfzeile.** Name der Wehr und darunter, wer angemeldet ist und mit welchen Rollen. Wer mehrere Rollen trägt — der Gerätewart ist oft auch Ausbilder — sieht alle. **Sicherheitshinweis.** Der gelbe Kasten bleibt stehen, solange die Wehr die Anwendung nicht ausdrücklich freigegeben hat. Er ist keine Formalität: Atemschutzüberwachung und Alarmmonitor sind sicherheitsrelevant, und bis zur Freigabe bleibt die analoge Überwachung führend. **Kennzahlen.** Vier Kacheln mit aktiven Mitgliedern, Fahrzeugen, Geräten und fälligen Prüfungen. Sie zählen nur die eigene Wehr — was eine andere Wehr auf derselben Installation hat, ist nicht sichtbar und nicht abfragbar. **Stand des Aufbaus.** Welche Phasen fertig sind und was als Nächstes kommt. ### Die Seitenleiste Links stehen alle Module. Was noch nicht existiert, ist ausgegraut und trägt 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: das Ausblenden ist nur Bequemlichkeit. Der eigentliche Schutz sitzt auf dem Server — wer eine Adresse direkt aufruft, für die ihm das Recht fehlt, bekommt trotzdem nichts. --- ## 3. Helle und dunkle Darstellung Oben rechts wird zwischen hell und dunkel umgeschaltet. Voreingestellt ist die Einstellung des Betriebssystems. ![Übersicht in dunkler Darstellung](screenshots/02-uebersicht-dark.png) Die dunkle Darstellung ist bewusst kein invertiertes Schwarz, sondern ein warmes Grau. Wer abends vom Fahrzeug hereinkommt und ans Terminal tritt, soll nicht geblendet werden. --- ## 4. Geräte ![Geräteliste](screenshots/03-geraeteliste-light.png) Die Geräteliste ist die Ansicht, die am häufigsten offen ist. Von links nach rechts steht dort, was man beim Suchen braucht: Inventarnummer, was es ist, von wem, wo es liegt, in welchem Zustand und wann es wieder geprüft werden muss. ### Suchen und filtern **Das Suchfeld** durchsucht Inventarnummer, Bezeichnung, Hersteller, Modell und Seriennummer gleichzeitig. Es genügt ein Teil — „press" findet alle Pressluftatmer. Gesucht wird erst, wenn man kurz aufhört zu tippen; das verhindert eine Abfrage bei jedem Anschlag. **Alle Zustände** schränkt auf einen Status ein. Praktisch, wenn man wissen will, was gerade fällig oder gesperrt ist. **Spalten** blendet Spalten ein und aus. Zwölf stehen zur Auswahl, sechs sind voreingestellt. Die Auswahl bleibt im Browser gespeichert — der Gerätewart schaut auf Prüftermine, der Kassier auf Anschaffungspreise, und beide finden ihre Einstellung beim nächsten Mal wieder. **Sortiert** wird durch einen Klick auf die Spaltenüberschrift, ein zweiter Klick dreht die Richtung um. ### Farben und Fristen | Farbe | Bedeutung | |---|---| | grün | einsatzbereit | | gelb | Prüfung fällig, oder eine Frist läuft in den nächsten 30 Tagen ab | | rot | gesperrt, ausgesondert oder überfällig | | grau | in Reparatur | Hinter jedem Datum steht, wie viele Tage noch bleiben — „in 12 Tagen" sagt mehr als ein Datum, das man erst im Kopf ausrechnen muss. Was vorbei ist, steht als „seit 62 Tagen" da. Die Farbe allein trägt nie die Information: daneben steht immer Klartext. ### Mehrere Geräte auf einmal Über die Kästchen links lassen sich Geräte auswählen. Sobald mindestens eines ausgewählt ist, erscheint eine Leiste mit zwei Möglichkeiten: - **Etiketten drucken** erzeugt den Etikettenbogen als PDF. - **Status setzen auf …** ändert den Zustand aller ausgewählten Geräte. Der häufigste Handgriff überhaupt: Nach einer Sammelprüfung stehen zwanzig Geräte auf einmal wieder auf einsatzbereit. Jede Änderung wird einzeln protokolliert — am jeweiligen Gerät, nicht als Sammelvorgang, den später niemand mehr zuordnen kann. --- ## 5. Ein einzelnes Gerät ![Gerätedetail](screenshots/04-geraet-light.png) ### Woher das Prüfintervall kommt Steht am Gerät kein eigenes Intervall, gilt die Vorgabe des Gerätetyps. Das Bild zeigt es: „alle 12 Monate (aus dem Gerätetyp)". So muss man bei vierzig Pressluftatmern nicht vierzigmal dasselbe eintragen. Schreibt der Hersteller für eine bestimmte Charge etwas anderes vor, wird der Wert am Gerät gesetzt und gewinnt dann. Dasselbe gilt für die Lebensdauer. Ob sie ab Herstellung oder ab Indienststellung zählt, hängt von der Vorschrift ab: Seile und Druckbehälter altern ab Herstellung, Schutzkleidung meist ab Indienststellung. ### QR-Code Rechts steht der QR-Code des Geräts. **Etikett drucken** erzeugt daraus einen Aufkleber für den Geräteraum. Der Code zeigt auf `.../g/`. Wer ihn scannt und angemeldet ist, landet direkt auf dieser Seite. Wer nicht angemeldet ist, landet zuerst auf der Anmeldung und danach hier — **der Aufkleber ist keine Berechtigung.** Wer ihn fotografiert, bekommt dadurch keinen Zugang. Bewusst steht die Inventarnummer im Code und nicht die interne Kennung: Eine UUID wäre 36 Zeichen lang, das Muster entsprechend fein, und auf einem 38 × 21 mm großen Aufkleber im staubigen Geräteraum wird das unzuverlässig. ### Verlauf Unten steht, was mit dem Gerät passiert ist — direkt aus dem Audit-Log. Es gibt bewusst keine zweite Historie: zwei Quellen könnten auseinanderlaufen. --- ## 5a. Ein Gerät anlegen oder ändern ![Formular für ein neues Gerät](screenshots/10-geraet-neu-light.png) Über **Neues Gerät** in der Geräteliste, oder über **Bearbeiten** auf der Detailseite eines vorhandenen Geräts. Für größere Bestände ist der Import der schnellere Weg; dieses Formular ist für den Neuzugang zwischendurch. Pflicht sind nur zwei Angaben: **Inventarnummer** und **Bezeichnung**. Alles andere kann später nachgetragen werden. ### Der Gerätetyp nimmt Arbeit ab Wird oben ein Gerätetyp gewählt, gelten dessen Prüfintervall, Prüfvorschrift und Lebensdauer — man muss sie nicht eintragen. Die Felder darunter bleiben trotzdem änderbar: Was dort steht, überschreibt die Vorgabe für dieses eine Gerät. Das braucht man, wenn der Hersteller für eine bestimmte Charge etwas anderes vorschreibt. Ist die Bezeichnung noch leer, wird sie aus dem Typ übernommen. ### „Daraus ergibt sich" Der graue Kasten zeigt, was aus den Angaben folgt: wann die nächste Prüfung fällig wird und wann die Nutzungsdauer endet. Er rechnet beim Tippen mit, sodass man vor dem Speichern sieht, was herauskommt. Gerechnet wird mit denselben Regeln wie auf dem Server — beim Speichern rechnet dieser erneut und behält das letzte Wort. Steht dort „keine", fehlt entweder das Prüfintervall oder die Indienststellung. Das ist kein Fehler: Für Geräte ohne Prüfpflicht ist es der Normalfall. ### Wo liegt es? Entweder an einem Standort **oder** auf einem Fahrzeug. Der Umschalter lässt nur eines von beidem zu — deshalb kann hier gar nicht erst der Fehler entstehen, den die Datenbank sonst abweisen würde. Bei „Auf einem Fahrzeug" lässt sich zusätzlich der Geräteraum angeben. Er darf leer bleiben: Manches liegt lose in der Kabine. Wird das Fahrzeug gewechselt, wird die Raumangabe zurückgesetzt — der Raum gehört zum Fahrzeug. Gibt es in der Wehr nur einen Standort, ist er beim Anlegen schon ausgewählt. > Jede Änderung landet im Verlauf des Geräts. Wer wissen will, wann ein > Prüftermin verschoben wurde und von wem, findet es dort. --- ## 6. Etiketten drucken Der Bogen ist auf das gängige Format mit **65 Etiketten je DIN-A4-Seite** (38,1 × 21,2 mm, 5 Spalten × 13 Zeilen) ausgelegt — den gibt es in jedem Schreibwarenladen und er passt in jeden Laserdrucker. Auf jedem Etikett stehen drei Dinge: der QR-Code, die Inventarnummer zum Ablesen ohne Handy, und die Bezeichnung. Bei verlasteten Geräten kommt der Funkrufname des Fahrzeugs dazu. Der Druck kann an einer beliebigen Position des Bogens beginnen. Wer drei Etiketten braucht, muss so keinen ganzen Bogen opfern. > Erzeugt wird das PDF von Gotenberg, einem eigenen Container im Stack. Kommt > die Meldung „Der Etikettenbogen ließ sich nicht erzeugen", läuft er nicht: > `docker compose ps` zeigt es. --- ## 7. Gerät scannen Über **Scannen** in der Geräteliste öffnet sich der QR-Scanner. Der Browser fragt beim ersten Mal nach der Kamerafreigabe. Das Bild verlässt das Gerät nicht — ausgewertet wird direkt im Browser. Zwei Dinge sind bewusst so gebaut: - **Es geht immer auch ohne Kamera.** Darunter steht ein Eingabefeld für die Inventarnummer. Wenn die Freigabe verweigert wurde oder das Etikett zerkratzt ist, tippt man sie ein. - **Fremde Codes brechen nichts ab.** Der Barcode des Herstellers klebt oft direkt daneben. Wird er erkannt, kommt ein Hinweis statt einer Fehlermeldung. --- ## 8. Fahrzeuge ![Fahrzeugdetail](screenshots/06-fahrzeug-light.png) Die Übersicht zeigt die Fahrzeuge als Kacheln — eine Wehr hat drei bis zehn, nicht dreihundert. Auf jeder Kachel stehen der nächste TÜV-Termin und die Zahl der verlasteten Geräte. Auf der Detailseite steht die **Beladung nach Geräteräumen**, in der Reihenfolge der Beladeordnung: G1 bis G6, Heck, Dach, Mannschaftsraum. Genau so sucht der Gerätewart — nicht „wo ist die Motorsäge", sondern „was ist in G3". Beim Anlegen eines neuen Fahrzeugs werden diese Räume auf Wunsch gleich mitangelegt. Ein Mannschaftstransportwagen bekommt weniger Fächer als ein Löschfahrzeug. Ein Gerät liegt **entweder** an einem Standort **oder** auf einem Fahrzeug. Beides gleichzeitig lässt die Datenbank nicht zu — das ist keine Formalität, sondern verhindert, dass ein Gerät zweimal gezählt wird. Was verlastet ist, aber keinem Raum zugeordnet wurde, erscheint unter „Ohne Raumangabe" statt stillschweigend zu verschwinden. --- ## 9. Mitglieder und Qualifikationen ![Qualifikationen](screenshots/08-qualifikationen-light.png) Die Mitgliederliste ist nach Abteilung gruppiert — Aktive, Jugendfeuerwehr, Passive. Eine durchlaufende alphabetische Liste vermischt Gruppen, die in der Wehr nichts miteinander zu tun haben. Auf der Seite **Qualifikationen** steht oben, was abgelaufen ist oder demnächst abläuft. Das ist der Grund, warum jemand diese Seite öffnet. **Gewarnt wird mit der Vorwarnzeit des jeweiligen Typs**, nicht mit einer pauschalen Frist. Eine G26.3-Untersuchung braucht 120 Tage Vorlauf, weil erst ein Termin beim Betriebsarzt gefunden werden muss; eine jährliche Unterweisung kommt mit deutlich weniger aus. Einsatzrelevante Qualifikationen sind gekennzeichnet. Das Ablaufdatum wird beim Speichern aus der Gültigkeitsdauer des Typs gerechnet — lässt sich aber überschreiben. Auf einer Urkunde steht manchmal etwas anderes, als die Regel hergäbe. --- ## 10. Daten importieren ![Import-Assistent](screenshots/09-import-light.png) Der Import geht in drei Schritten, und der mittlere ist der eigentliche Punkt. ### Schritt 1: Datei wählen CSV oder Excel (`.xlsx`). Die erste Zeile muss die Spaltenüberschriften enthalten. Höchstens 10 MB und 5.000 Zeilen. Erkannt werden die Formate, die in der Praxis herauskommen: | Fall | Wird verstanden | |---|---| | Trennzeichen | Semikolon, Komma, Tabulator, senkrechter Strich | | Zeichensatz | UTF-8 (auch mit BOM) und Windows-1252 | | Datum | 02.09.2026, 2.9.26, 2026-09-02, und die Seriennummer aus Excel | | Zahlen | 1.234,56 und 1,234.56, mit und ohne Eurozeichen | | Ja/Nein | ja, j, x, 1, wahr — und die Gegenstücke | ### Schritt 2: Zuordnung prüfen FLORIAN rät die Zuordnung anhand der Überschriften. „Inv.-Nr." landet bei Inventarnummer, „Fabrikat" bei Hersteller. Jede Zuordnung lässt sich ändern, und die Vorschau passt sich sofort an. **Die Vorschau ist der Grund, warum es diesen Zwischenschritt gibt.** Sie zeigt Zeile für Zeile, was übernommen würde, und markiert rot, was nicht stimmt: fehlende Pflichtfelder, unlesbare Daten, Inventarnummern, die in der Datei doppelt vorkommen. Eine falsch zugeordnete Spalte verteilt sonst Seriennummern auf Inventarnummern, und das merkt man erst Wochen später am Regal. ### Schritt 3: Übernehmen Übernommen wird nur, was fehlerfrei ist. Zeilen mit Fehlern bleiben in der Datei und lassen sich nach der Korrektur erneut einlesen. **Vorhandene Datensätze aktualisieren** entscheidet, was mit Datensätzen passiert, die es schon gibt: überspringen (Vorgabe) oder überschreiben. Erkannt werden sie über die Inventarnummer, bei Mitgliedern über die Mitgliedsnummer oder die E-Mail-Adresse. Zum Schluss steht da, wie viele Datensätze angelegt, aktualisiert und übersprungen wurden. Der ganze Vorgang steht auch im Protokoll. --- --- ## 11. Prüfungen und Fristen ![Fristen-Dashboard](screenshots/11-fristen-light.png) Die Seite, die der Gerätewart morgens aufmacht. Sie beantwortet eine Frage: **was ist zu tun.** Ganz oben stehen vier Zahlen, nach Dringlichkeit geordnet: | Topf | Bedeutung | |---|---| | **überfällig** | hätte längst geprüft sein müssen | | **diese Woche** | in den nächsten sieben Tagen | | **diesen Monat** | in den nächsten 30 Tagen | | **nächste 90 Tage** | mittelfristig zu planen | Jede Zahl ist gleichzeitig ein Filter: ein Klick, und die Liste darunter zeigt nur noch diesen Zeitraum. Nochmal klicken hebt den Filter wieder auf. „Überfällig" wird jeden Tag neu gerechnet und nicht gespeichert. Ein Termin, der heute Nacht fällig geworden ist, steht morgen früh im richtigen Topf, ohne dass jemand etwas anstoßen muss. ### Verteilung Darunter steht, **wo** die offenen Termine hängen — wahlweise nach Fahrzeug, Standort, Gerätetyp oder Zuständigem. Wer einen Prüftag ansetzt, arbeitet ein Fahrzeug ab und keine alphabetische Liste; deshalb ist Fahrzeug die Vorgabe. ### Termine zuweisen In der Terminliste lassen sich mehrere Zeilen ankreuzen und in einem Zug jemandem zuweisen. Der Zuständige bekommt die Erinnerungen; ist niemand zuständig, gehen sie an die Gerätewarte der Wehr. ### Erinnerungen Nachts um 3:45 Uhr verschickt FLORIAN eine **Sammelnachricht je Empfänger** — nicht eine Mail je Gerät. Erinnert wird bei 30 Tagen (oder der Vorwarnzeit der Vorlage), bei 7 Tagen, am Fälligkeitstag und einmal, wenn ein Termin überfällig geworden ist. Jede Stufe genau einmal. Solange `MAIL_ENABLED=false` steht, landen die Nachrichten im Protokoll statt im Postfach. --- ## 12. Wartungsvorlagen ![Wartungsvorlagen](screenshots/12-vorlagen-light.png) Eine Wartungsvorlage sagt, **was** an einem Gerätetyp **in welchem Takt** geprüft wird. Sie ist die Regel; der Termin ist ihre Anwendung auf ein einzelnes Gerät. **Ohne Vorlage gibt es keine Termine.** Das ist die erste Seite, die eine Wehr in diesem Modul ausfüllt. | Angabe | Wofür | |---|---| | **Gerätetyp** | für welche Bauart die Vorlage gilt. Ohne Gerätetyp plant der nächtliche Lauf nichts. | | **Intervall in Monaten** | zählt ab der letzten durchgeführten Prüfung | | **Vorwarnzeit in Tagen** | wann die erste Erinnerung rausgeht | | **Prüfvorschrift** | steht später im Protokoll und in der Fußzeile des PDF | | **Übliche Dauer** | Erfahrungswert für die Planung eines Prüftags | ### Die Checkliste ![Checkliste einer Vorlage](screenshots/17-checkliste-light.png) Jeder Punkt hat eine von vier Antwortarten: | Art | Wann | |---|---| | **Ja / Nein** | Sichtprüfungen: „ohne Risse", „Kennzeichnung lesbar" | | **Messwert** | alles Gemessene, mit zulässigem Bereich und Einheit | | **Text** | Befunde, die sich nicht ankreuzen lassen | | **Foto** | wenn der Zustand belegt werden soll | Bei einem Messwert entscheidet der zulässige Bereich, ob der Punkt in Ordnung ist. Gerechnet wird das auf dem Server, nicht im Browser. **Pflichtpunkt heißt: davon hängt die Einsatzbereitschaft ab.** Ein Pflichtpunkt, der durchfällt, bedeutet „nicht bestanden" und sperrt das Gerät. Ein Kann-Punkt, der durchfällt, bedeutet „bestanden mit Mängeln". Wer einen Punkt als Pflicht anlegt, trifft also eine fachliche Entscheidung. Die Reihenfolge zählt: der Prüfwizard arbeitet die Punkte genau so ab, wie sie hier stehen. Umsortiert wird mit den Pfeiltasten — das geht auch mit Handschuhen und mit der Tastatur. --- ## 13. Eine Prüfung durchführen Gestartet wird sie entweder im Fristen-Dashboard über **Prüfen** oder auf der Gerätedetailseite über **Prüfung durchführen**. Wer das Gerät am Regal gescannt hat, ist schon auf der richtigen Seite. Der Wizard zeigt **einen Prüfpunkt je Bildschirm**. Oben läuft die Zeit mit; sie landet im Protokoll und gehört zum Nachweis, wie gründlich geprüft wurde. Zu jedem Punkt lassen sich zusätzlich ein Foto und eine Bemerkung erfassen. Auf dem Tablet öffnet der Fotoknopf unmittelbar die Kamera. **Jede Antwort geht sofort zum Server.** Wenn im Gerätehaus das WLAN wegbricht, ist höchstens die letzte Antwort verloren. Beim erneuten Öffnen wird der angefangene Durchgang fortgesetzt — es entsteht keine zweite halbe Prüfung. ### Der Abschluss Am Ende steht: 1. **Ergebnis** — vorgeschlagen wird, was sich aus den Antworten ergibt. Übersteuern darf der Prüfer; er trägt die Verantwortung, nicht die Software. 2. **Mängel** — aus den beanstandeten Punkten vorgeschlagen, frei ergänzbar. Ein kritischer Mangel sperrt das Gerät. 3. **Unterschrift** — auf dem Zeichenfeld, mit Finger, Stift oder Maus. Ohne Unterschrift lässt sich nicht abschließen: ein Protokoll ohne Unterschrift ist kein Nachweis. Wurde die Prüfung **extern** durch eine Fachfirma gemacht, lassen sich hier Firma, Kosten und das Fremdprotokoll als PDF anhängen. Mit dem Abschluss passiert alles auf einmal: die Prüfung wird festgeschrieben, der Termin gilt als erledigt, der nächste wird geplant, der Gerätestatus zieht nach, und das PDF entsteht im Hintergrund. --- ## 14. Prüfprotokolle ![Prüfprotokoll](screenshots/18-pruefprotokoll-light.png) Jedes abgeschlossene Protokoll bekommt eine laufende Nummer im Format `JJJJ-NNNN` — das ist die Nummer, die man bei einer Rückfrage der Unfallkasse nennt. Über **Protokoll als PDF** kommt die Fassung zum Ausdrucken oder Weiterreichen: Kopf mit Wehr, Gerät und Prüfer-Kennung, die Checkliste mit Soll, Ist und Befund, die Fotos, die Unterschriften und eine Fußzeile mit Prüfvorschrift und Prüfdatum. Alles ist im PDF eingebettet — es lädt nichts nach und sieht in zehn Jahren noch genauso aus. ### Ein Protokoll lässt sich nicht ändern Das ist keine Bequemlichkeitsfrage, sondern der Kern der Sache: ein Nachweis, den man nachträglich ändern kann, ist keiner. FLORIAN verhindert das in der Datenbank, nicht bloß in der Oberfläche. Wenn etwas falsch ist, legt **Korrektur anlegen** eine neue Prüfung an — mit den bisherigen Antworten vorbelegt und einem Verweis auf das alte Protokoll. Sobald sie abgeschlossen ist, gilt das alte als „ersetzt". **Beide bleiben lesbar**, und im Korrekturprotokoll steht, warum korrigiert wurde. --- ## 15. Mängel ![Mängel](screenshots/13-maengel-light.png) Der Weg ist immer derselbe: ``` gemeldet → zugewiesen → in Arbeit → behoben ``` **Melden darf jedes Mitglied.** Der Riss im Schlauch fällt dem auf, der ihn in der Hand hat, nicht dem Gerätewart am Schreibtisch. Zum Melden gehören das Gerät, eine Beschreibung, eine Dringlichkeit und auf Wunsch ein Foto. Ein Mangel der Stufe **kritisch** sperrt das Gerät sofort. Beim Beheben wird die Sperre wieder aufgehoben — aber nur, wenn kein anderer offener Mangel dasselbe Gerät sperrt. Ein behobener Kratzer gibt kein Gerät frei, das wegen eines Risses gesperrt ist. Eine Fehlmeldung wird **verworfen**, nicht gelöscht: dass gemeldet wurde und was, bleibt nachvollziehbar. --- ## 16. Rückrufe ![Rückrufe](screenshots/14-rueckrufe-light.png) Kommt ein Sicherheitshinweis des Herstellers, wird er hier erfasst — mit der betroffenen Bauart, wahlweise eingegrenzt über Modell, Seriennummernbereich und Herstellungszeitraum. FLORIAN sucht dann im Bestand nach passenden Geräten und zeigt sie als **Vorschlag**. Zugeordnet wird nur, was der Gerätewart bestätigt — eine Chargenangabe des Herstellers passt selten eins zu eins auf die eigenen Seriennummern. Zugeordnete Geräte lassen sich in einem Zug sperren. Je Gerät wird fortgeschrieben, wie es steht: offen, nicht betroffen, Maßnahme läuft, erledigt. Mit „erledigt" fällt die Sperre wieder — sofern kein Mangel dasselbe Gerät sperrt. Abschließen lässt sich der Rückruf erst, wenn zu jedem betroffenen Gerät ein Ergebnis steht. --- ## 17. Lebensdauer ![Lebensdauer](screenshots/15-lebensdauer-light.png) Helme, Seile, Schutzkleidung und Pressluftatmer sind ab einem Stichtag nicht mehr zugelassen — unabhängig davon, wie gut sie aussehen. Diese Seite zeigt, was abgelaufen ist und was in den nächsten Monaten abläuft. Ein Gerät mit abgelaufener Nutzungsdauer wird nachts automatisch **gesperrt**. **Ausgesondert** wird es von einem Menschen: das entscheidet, wer weiß, ob Ersatz da ist. Der Knopf dazu steht in der Zeile. Voraussetzung ist, dass am Gerätetyp eine Lebensdauer hinterlegt ist (Kapitel 5). --- ## 18. Einen Einsatz erfassen ![Einsatzliste](screenshots/19-einsaetze-light.png) 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 38). Ohne den bleibt das Feld leer — das ist in Ordnung, die Karte kommt in Phase 6. --- ## 19. Der Einsatz von innen ![Einsatzdetail](screenshots/22-einsatz-light.png) ### 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 ![Einsatzportal](screenshots/24-portal-light.png) 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 ![Einsatzstatistik](screenshots/20-statistik-light.png) 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 ![Übungen](screenshots/21-uebungen-light.png) Eine Übung besteht aus Thema, Art, Datum und den **Lernzielen** — was danach sitzen soll. ![Übung mit Anwesenheit](screenshots/23-uebung-light.png) 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. Das Terminal im Gerätehaus ![Kachelschirm des Terminals](screenshots/25-kiosk-kacheln-light.png) Das Terminal ist eine **eigene Oberfläche** unter `/kiosk`, gedacht für ein Wandtablet neben der Fahrzeughalle. Große Kacheln statt Seitenleiste, alles Bedienbare mindestens 64 Pixel hoch, jede Kachel mit Symbol **und** Text — das ist kein Geschmack, sondern die Voraussetzung dafür, dass es mit Feuerwehrhandschuhen bedienbar bleibt. ### Einmal je Tablet einrichten Bevor sich jemand anmelden kann, muss das Tablet wissen, zu welcher Wehr es gehört. Das macht der Administrator einmal unter `/kiosk/einrichten`: Kurzname der Wehr und das Gerätegeheimnis aus der `.env` (`KIOSK_DEVICE_SECRET`). Damit am Tablet nichts abgetippt werden muss, nimmt die Seite beides auch aus der Adresse an: ``` http://florian.example/kiosk/einrichten?wehr=ff-musterhausen&schluessel=… ``` Diesen Link schickt sich der Administrator einmal selbst — etwa als QR-Code vom eigenen Rechner — und ruft ihn am Tablet auf. > **Das Gerätegeheimnis ist die erste Schranke.** Ohne eingerichtetes Tablet > nimmt der Server keine PIN und keine Karte an. Ein fremdes Handy, das > `/kiosk` aufruft, kommt nicht weiter, auch nicht mit richtiger PIN. ### Anmelden ![Anmeldung am Terminal](screenshots/30-kiosk-anmeldung-light.png) Drei Wege, in dieser Reihenfolge: 1. **Ausweis auflegen** — der Regelfall. Der Leser am Tablet gibt die Kartenkennung wie eine Tastatur aus; es muss vorher nichts angetippt werden. 2. **QR-Code vom Handy** — für den, der den Ausweis vergessen hat (Kapitel 29). 3. **Mitgliedsnummer und PIN** — wenn beides fehlt. Nach `KIOSK_IDLE_TIMEOUT` Sekunden ohne Bedienung (Vorgabe: 120) meldet sich das Terminal von selbst ab, mit sichtbarer Warnung vorher. Ein Terminal, an dem die letzte Anmeldung stehen bleibt, schreibt irgendwann alles dem Falschen zu. ### Was auf dem Kachelschirm steht Die Kacheln richten sich nach zwei Dingen: den Rechten der angemeldeten Person und ihrem aktuellen Zustand. | Kachel | Wann sie sich ändert | |---|---| | Kommen / **Gehen** | Wer eingecheckt ist, sieht „Gehen" samt Zeit, seit wann | | Fahrt beginnen / **Fahrt beenden** | Wer mit einem Fahrzeug unterwegs ist, sieht dessen Funkrufname | | Wäsche abgeben | Zeigt an, wie viele Stücke noch nicht zurück sind | | Inventur | Nur für den Gerätewart | | Prüfung durchführen | Ohne Netz gesperrt, mit dem Hinweis „braucht Netz" | --- ## 25. Mangel melden am Terminal ![Mangel melden](screenshots/26-kiosk-mangel-light.png) Der Vorgang, an dem sich das Terminal misst — Anspruch war **unter dreißig Sekunden**. Deshalb drei Schritte und kein Formular: 1. **QR-Code am Gerät scannen.** Oder die Inventarnummer eintippen, wenn das Etikett unleserlich ist. Steht die Nummer im Bestand, erscheint sofort Bezeichnung und Zustand. 2. **Foto und ein Satz dazu.** Das Foto ist kein Pflichtfeld, macht aber die halbe Arbeit: „Riss im Schlauch, etwa 20 cm von der Kupplung" plus Bild sagt dem Gerätewart mehr als jedes Formular. 3. **Dringlichkeit antippen.** Damit ist die Meldung abgeschickt. | Dringlichkeit | Was passiert | |---|---| | Kleinigkeit | kann warten | | Normal | beim nächsten Dienst | | Dringend | vor dem nächsten Einsatz | | **Kritisch** | Das Gerät wird **sofort gesperrt** | Eine unbekannte Inventarnummer hält die Meldung nicht auf. Sie geht trotzdem raus und landet notfalls in der Konfliktliste (Kapitel 27) — lieber ein Zettel zu viel als ein Riss im Schlauch, den niemand gemeldet hat. --- ## 26. Ohne Netz weiterarbeiten In einer Fahrzeughalle ist das Netz regelmäßig weg: Stahlbeton, Tore aus Metall, ein Repeater, der irgendwann ausfällt. Das Terminal ist dafür gebaut, nicht dagegen abgesichert. Über jeder Terminalseite läuft eine Leiste, die den Zustand in Klartext sagt: | Leiste | Bedeutung | |---|---| | **Verbunden · alles übertragen** | Alles, was erfasst wurde, ist beim Server | | **Verbunden · 2 Änderungen warten** | Wird gerade übertragen | | **Kein Netz · 1 Änderung wartet** | Erfasst und gespeichert, wartet auf Netz | Und so funktioniert es: **jede** erfasste Aktion geht zuerst in eine Warteschlange im Tablet — auch dann, wenn Netz da ist. Erst von dort geht sie zum Server. Deshalb ist der Ablauf ohne Netz derselbe wie mit Netz, nur dauert er länger. Was das im Betrieb bedeutet: - **Die Bestätigung kommt sofort.** Wer eine Meldung abschickt, kann das Tablet weglegen. Es ist gespeichert, auch wenn es noch nicht übertragen ist. - **Ein Neustart des Tablets schadet nicht.** Die Warteschlange liegt im Speicher des Browsers, nicht im Arbeitsspeicher. - **Fotos warten mit.** Das Bild liegt neben der Meldung und wird beim Übertragen zuerst hochgeladen. - **Nichts wird doppelt gebucht.** Jeder Vorgang bekommt beim Erfassen eine eigene Kennung. Bricht die Übertragung mitten drin ab und wird wiederholt, erkennt der Server dieselbe Kennung wieder und bucht nicht erneut. - **Die Prüfung braucht Netz.** Ein Prüfprotokoll mit Checkliste, Messwerten, Fotos und Unterschrift lässt sich nicht sinnvoll zwischenspeichern — ein halb erfasstes Protokoll wäre schlechter als keins. Die Kachel sagt das, statt ins Leere zu führen. Bleibt ein Vorgang mehr als fünf Versuche liegen, lässt er sich über „anzeigen" einsehen und im Notfall verwerfen. Vorher nicht — und das ist Absicht. --- ## 27. Konflikte nachbearbeiten ![Terminalübersicht](screenshots/28-terminal-uebersicht-light.png) Ein Tablet, das drei Tage offline war, schickt irgendwann Vorgänge, deren Ziel es nicht mehr gibt: das Gerät wurde ausgesondert, die Prüfung inzwischen abgeschlossen und damit festgeschrieben. FLORIAN erzwingt in diesem Fall nichts und verwirft nichts. Der Vorgang landet als **Konflikt** in der Übersicht unter `/terminal` — mit Zeitpunkt, Art, Grund und der Person, die ihn erfasst hat. Der Gerätewart entscheidet und vermerkt, wie es gelöst wurde. Auf derselben Seite steht das Übrige, was am Terminal zusammenkommt: wer im Haus ist, welche Wäsche in der Reinigung ist und das Fahrtenbuch. --- ## 28. Hallenmonitor ![Hallenmonitor](screenshots/27-kiosk-monitor-light.png) `/kiosk/monitor` ist für einen Fernseher in der Fahrzeughalle gedacht: Vollbild, große Schrift, **keine Bedienung**. Zu sehen sind Uhrzeit und Datum, ein laufender Einsatz, wer gerade im Haus ist, die Fahrzeuge samt laufenden Fahrten, fällige Prüfungen und die nächsten Termine. Optional dazu **Wetterwarnungen des DWD**: ```bash # .env WETTER_ENABLED=true DWD_WARNCELL=809162000 ``` > Das ist die einzige Verbindung, die FLORIAN von sich aus nach außen aufbaut, > und sie ist deshalb standardmäßig aus. Nach draußen geht nur die > Warnzellen-Nummer, keine Daten der Wehr. Fällt der Abruf aus, bleibt die > Kachel leer — eine Wetterwarnung ist eine Zugabe, alarmiert wird über die > Leitstelle. Die Nummer der eigenen Gemeinde steht in der [Warnzellenliste des DWD](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv). --- ## 29. Anmeldemarke fürs Handy ![Anmeldemarke](screenshots/29-anmeldemarke-light.png) Wer den Ausweis vergessen hat, öffnet in FLORIAN auf dem Handy die Seite **Anmeldemarke** und hält den QR-Code vor die Kamera des Terminals. Der Code gilt **60 Sekunden** und wird von der Seite selbst erneuert. Er ist signiert und nirgends gespeichert: ein abfotografierter Code aus der Umkleide nützt eine Minute später nichts mehr. --- ## 30. Atemschutz — was das Modul ist und was nicht ![Atemschutzübersicht](screenshots/31-atemschutz-light.png) > **Über jeder Ansicht dieses Moduls steht:** > *Ergänzendes System — die analoge Atemschutzüberwachung bleibt führend.* Das ist kein Kleingedrucktes. Die Überwachung, die im Ernstfall zählt, hängt am Fahrzeug und wird mit Stift geführt. FLORIAN schreibt mit, rechnet mit und druckt am Ende ein Protokoll — aber wenn dieses Tablet ausfällt, läuft der Einsatz unverändert weiter. Der Hinweis lässt sich abschalten, aber nur zusammen mit einem Beleg: ```bash # .env ATEMSCHUTZ_HINWEIS=false ATEMSCHUTZ_FREIGABE=Kommandantenbeschluss vom 12.03.2026 ``` Fehlt die Fundstelle, bleibt der Hinweis stehen — egal was in `ATEMSCHUTZ_HINWEIS` steht. Eine Freigabe ohne Beschluss ist keine. Ist er abgeschaltet, verschwindet er nicht spurlos: dann steht dort, worauf sich die Freigabe stützt, und dasselbe steht später im Protokoll. Die Startseite zeigt die Zahl, nach der im Einsatz als Erstes gefragt wird: **wie viele Atemschutzgeräteträger heute einsetzbar sind** — und wie viele davon knapp davor stehen, es nicht mehr zu sein. --- ## 31. Eine Überwachung führen ![Überwachungsschirm](screenshots/33-atemschutz-ueberwachung-light.png) ### Eröffnen Auf `/atemschutz` genügt eine Bezeichnung — „Zimmerbrand Hauptstraße 12". Die Zuordnung zu einem Einsatz lässt sich nachtragen; im Ernstfall wird zuerst überwacht und später sortiert. ### Trupp anlegen Zwei oder drei Personen, für jede der Eingangsdruck vom Manometer, eine davon Truppführer. Neben jedem Namen steht, ob die Person nach FwDV 7 einsetzbar ist und was gegebenenfalls fehlt. > **Verweigert wird nichts.** Im Einsatz entscheidet der Einheitsführer. Ein > Programm, das ihm im entscheidenden Moment eine Person sperrt, wird umgangen — > und dann steht am Ende gar nichts im Protokoll. Der Hinweis nützt, die Sperre > schadet. ### Was auf der Karte steht | Anzeige | Bedeutung | |---|---| | **unter Atemschutz** | Zeit seit dem Einstieg — läuft, solange der Trupp drin ist | | **niedrigster Druck** | Der ungünstigste Wert im Trupp. Der Trupp geht gemeinsam zurück | | **Rückzug bei** | Der errechnete Rückzugsdruck | Die Farbe der Karte ist die Ampel, und daneben steht immer der Text dazu: „im Rahmen", „Rückzugsdruck bald erreicht", „Rückzugsdruck erreicht — Trupp zurückziehen". Gelb kommt schon zehn Prozent vor der Grenze — der Trupp soll losgehen, bevor der Wert erreicht ist. ### Der Rückzugsdruck Gerechnet wird nach dem **doppelten Anmarschverbrauch**: ``` Rückzug = 2 × (Eingangsdruck − Druck am Einsatzziel) + Warndruck + Zuschlag ``` Dafür meldet der Trupp einmal, wenn er das Einsatzziel erreicht hat — dafür ist der Knopf **„Einsatzziel erreicht"** da. Bis dahin steht ein vorläufiger Wert nach der Zwei-Drittel-Regel; er liegt höher und ist damit die vorsichtigere Annahme. Die Karte sagt das auch dazu. Beispiel: 300 bar rein, 260 bar am Ziel — 40 bar für den Hinweg, also 80 für hin und zurück, plus 55 bar Warndruck und 10 bar Zuschlag: **Rückzug bei 145 bar.** ### Druckabfrage Alle Werte des Trupps in einer Zeile, ein Knopf. Bleibt eine Meldung aus, steht nach `ATEMSCHUTZ_ABFRAGE_INTERVALL` Sekunden (Vorgabe zehn Minuten) ein deutlicher Hinweis auf der Karte — gerechnet ab der letzten Meldung, nicht ab dem Einstieg. ### Mayday Ein Knopf je Trupp. Er ändert nichts an der Lage: er hält fest, wann es losging, macht es auf jedem Bildschirm sichtbar und lässt einen Ton hören. Aufgehoben wird er **ausdrücklich**, nicht durch Wegklicken — und beides steht im Protokoll. ### Beenden Geht erst, wenn alle Trupps als draußen gemeldet sind. Das ist keine Schikane: eine beendete Überwachung mit einem Trupp, der noch drin steht, wäre die gefährlichste Zeile im ganzen Protokoll. --- ## 32. Was passiert, wenn die Technik streikt Die wichtigste Eigenschaft dieser Ansicht ist, dass man ihr nichts anhaben kann. Der Grund dafür ist einfach: **es gibt keinen Timer.** In der Datenbank steht, wann der Trupp eingestiegen ist; wie lange er drin ist, rechnet der Bildschirm jede Sekunde neu aus. | Was passiert | Was Sie sehen | |---|---| | Seite neu laden | Dieselbe Zeit läuft weiter | | Zweites Tablet daneben | Dieselbe Zeit, ohne Abgleich | | WLAN bricht ab | Die Uhr läuft weiter; oben steht **Verbindung unterbrochen** | | Server neu gestartet | Nach der ersten Antwort ist alles wieder da | Oben rechts steht dauerhaft, ob die Verbindung steht. Das ist Absicht: wer nicht sieht, dass der Draht weg ist, hält einen alten Stand für den aktuellen. Meldet sich der Server acht Sekunden lang nicht, springt die Anzeige auf „unterbrochen" — auch dann, wenn der Browser selbst keinen Fehler meldet. Ist die Verbindung weg, bleibt die Ansicht bedienbar; sie fragt weiter im Takt nach und holt auf, sobald es wieder geht. --- ## 33. Nachweise und Tauglichkeit ![Nachweise](screenshots/32-atemschutz-nachweise-light.png) Drei Nachweise müssen **gleichzeitig** gelten, sonst ist jemand nicht einsetzbar: | Nachweis | Frist | Wo erfasst | |---|---|---| | **G26.3** | drei Jahre, ab 50 Jahren eines | `/atemschutz/nachweise` | | **Belastungsübung** | jährlich | dort, für die ganze Gruppe auf einmal | | **Einsatzübung unter Atemschutz** | jährlich | dort — ein echter Einsatz zählt ebenso | Dazu die Qualifikation als Atemschutzgeräteträger aus Kapitel 9. Das Ablaufdatum der G26 wird nach dem Alter vorgeschlagen; was auf der Bescheinigung steht, gilt und lässt sich überschreiben. Eine Untersuchung mit dem Ergebnis „Nachuntersuchung" oder „nicht tauglich" zählt nicht als Nachweis. In der Übersicht steht neben jedem Namen **im Klartext**, was fehlt — „G26.3 ist abgelaufen", „Belastungsübung in diesem Jahr fehlt". Eine rote Ampel ohne Begründung hilft am Fahrzeug niemandem. Drei Monate vor Ablauf der G26 wechselt die Ampel auf Gelb: die Person ist weiter einsetzbar, aber es wird Zeit für einen Termin. --- ## 34. Die Karte ![Karte](screenshots/34-karte-light.png) Die Karte beantwortet die Frage, die auf der Anfahrt gestellt wird: **Was liegt in der Nähe, und was gibt es her?** ### Kartenhintergrund einrichten FLORIAN lädt **keine** Kacheln aus dem Netz. Wo Ihre Wehr ausrückt und wo Ihre Hydranten liegen, ist niemandes Geschäft — es gibt deshalb keinen Rückfall auf einen öffentlichen Kartendienst. Der Kartenserver läuft selbst: ```bash docker compose --profile karte up -d ``` Dafür brauchen Sie eine MBTiles-Datei Ihres Ausrückegebiets; woher, steht in `docker/karten/LIESMICH.md`. Danach in der `.env`: ``` KARTE_STIL_URL=http://localhost:8085/styles/basic/style.json ``` > **Ohne Kartenserver funktioniert alles außer den Straßen.** Punkte liegen an > der richtigen Stelle, Entfernungen stimmen, die Umkreissuche rechnet. Die > Karte sagt oben, dass der Hintergrund fehlt — sie tut nicht so, als wäre > nichts. ### Was auf der Karte liegt | Ebene | Farbe | |---|---| | **Löschwasser** | grün einsatzbereit, gelb eingeschränkt, rot defekt, grau ungeprüft | | **Objekte** | blau, mit Verweis auf den Feuerwehrplan | Beide lassen sich einzeln ab- und anschalten: wer Löschwasser sucht, will keine Objekte sehen und umgekehrt. ### Umkreissuche **In die Karte tippen** — rechts steht, was in 500 Metern erreichbar ist, nach Entfernung sortiert, mit Nennweite und Durchfluss. Findet sich nichts, steht das ausdrücklich da: eine Angabe, die man vor dem Einsatz wissen will, nicht währenddessen. --- ## 35. Hydranten pflegen und importieren ### Import — der übliche Weg Die Stadtwerke oder das Landratsamt haben die Liste. FLORIAN nimmt sie in zwei Formaten: - **GeoJSON** (aus QGIS, vom Landratsamt, aus einem OSM-Auszug) - **CSV** — mit den Spaltennamen, die eben drinstehen Erkannt werden unter anderem `Nummer`, `Bauart`, `DN`, `Lage`, `Latitude`, `Pruefdatum`, `Versorger` und ihre Geschwister. Auch „DN 100" in der Zahlenspalte, „48,5031" mit Komma und „24.05.2026" als Datum. Sind Breite und Länge vertauscht, wird das erkannt und zurückgedreht. Der Import läuft **in zwei Schritten**: 1. Datei wählen — FLORIAN zeigt, was herauskäme: wie viele Hydranten gefunden wurden, welche Zeilen übersprungen werden und warum. 2. Erst dann „übernehmen". > **Zweimal importieren ist ungefährlich.** Hydranten mit einer Nummer des > Versorgers werden aktualisiert, nicht doppelt angelegt. Fehlt die Nummer, > sagt der Import das vorher. Was FLORIAN **nicht** tut: raten. Fehlt die Position, wird die Zeile übersprungen — ein Hydrant ohne Ort ist kein Hydrant. Und ohne Statusangabe steht „ungeprüft", nicht „einsatzbereit". ### Einzeln erfassen In die Karte tippen setzt den Ort, darunter kommen Bezeichnung, Art, Zustand und Nennweite. Für den einen Hydranten, der beim Neubaugebiet dazugekommen ist. --- ## 36. Objekte und Feuerwehrpläne ![Objekte](screenshots/35-objekte-light.png) Für jedes Objekt, für das es einen Feuerwehrplan gibt oder geben sollte: Schule, Pflegeheim, Aussiedlerhof, Betrieb. Die Detailseite ist so sortiert, wie auf der Anfahrt gelesen wird: | Block | Was hineingehört | |---|---| | **Zufahrt** | Tordurchfahrt, Höhenbegrenzung, Aufstellfläche, Schranke | | **Gefahren** | Photovoltaik, Gasflaschen, Silo, Tiere, Personen | | **Schlüsseldepot** | Wo der FSD hängt und was er aufsperrt | | **Löschwasser am Objekt** | Wandhydranten, Steigleitung, Sprinklerzentrale | Darunter die **Ansprechpartner** — mit der einzigen Angabe, die im Einsatz zählt: wer nachts ans Telefon geht. Die Nummern lassen sich antippen. Und die **Planblätter nach DIN 14095** mit Art und Stand. Der Stand gehört dazu: ein Feuerwehrplan von 2009 ist eine Vermutung. Gesucht wird über alles — Name, Straße, Gefahrenstichwort, Ansprechpartner. Wer im Einsatz sucht, weiß selten, wie das Objekt im System heißt, aber oft, was dort ist: „Photovoltaik" findet die Schule. --- ## 37. Lagekarte und Wasserförderung ### Lagekarte Jeder Einsatz hat eine, unterhalb der Einsatzdaten. 22 taktische Zeichen nach FwDV 102: Fahrzeuge, Einheiten, Führung, Stellen, Gefahren, Maßnahmen. **Ein Werkzeug, ein Klick**: Zeichen antippen, in die Karte tippen. Dazu Linienzüge (Schlauchleitung, Absperrung), Flächen (Bereitstellungsraum) und freie Beschriftungen. Was einer einträgt, sehen die anderen — auch auf einem zweiten Tablet. Oben steht, ob der Abgleich läuft; steht er nicht, sehen Sie eine ältere Lage und wissen das. Eingetragenes lässt sich **zurücknehmen**, nicht löschen: was um 14:12 eingezeichnet wurde, gehört zur Mitschrift, auch wenn es um 14:20 nicht mehr stimmte. ### Wasserförderung ![Wasserförderung](screenshots/36-wasserfoerderung-light.png) Die Rechnung, die sonst mit Tabelle und Bleistift auf der Motorhaube entsteht. Punkte in die Karte tippen — der erste ist die Entnahmestelle, der letzte die Einsatzstelle —, dann Schlauchdurchmesser und Fördermenge einstellen. Sofort steht da: - **wie viele Pumpen** gebraucht werden und wo ein Verstärker stehen muss, - **wie viele Schlauchlängen** je Abschnitt, - **welcher Druck** am Ende ankommt. Zwei Dinge kosten Druck: die Reibung im Schlauch (steigt mit dem **Quadrat** der Fördermenge — doppelte Menge, vierfacher Verlust) und die Steigung (zehn Meter sind ein bar). Wo die Höhe bekannt ist, sollte sie eingetragen werden; ohne rechnet FLORIAN mit ebenem Gelände, und das ist im Zweifel zu günstig. Geht eine Strecke nicht auf, sagt die Ausgabe das — statt eine Zahl auszuwerfen, die niemand halten kann. > **Es bleibt eine Planungshilfe.** Was zählt, ist der Druck am Verteiler — und > den liest jemand ab. --- ## 38. 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. ## 39. Der Terminkalender ![Termine](screenshots/37-termine-light.png) Unter **Termine** steht, was ansteht: Dienste, Übungen, Lehrgänge, Arbeitsdienste, Veranstaltungen, Sitzungen. Die Liste blickt nach vorn — das ist, was fast immer gemeint ist. An jeder Zeile stehen zwei Knöpfe: **Zusagen** und **Absagen**. Mehr braucht das normale Mitglied nicht. ### Rückmeldung ist die Ausnahme Beim Übungsabend meldet sich niemand an, man kommt oder man kommt nicht. Erst beim Lehrgang mit zwölf Plätzen und beim Ausflug mit Busbestellung wird beim Anlegen **Rückmeldung verlangen** angekreuzt. Wer dann Plätze begrenzt, bekommt automatisch eine **Warteliste**: Zusagen über die Platzzahl hinaus landen dort, nummeriert in der Reihenfolge der Anmeldung. Sagt jemand ab, rückt der Erste von selbst nach und erfährt es. Niemand muss eine Liste führen. ### Serientermine Beim Anlegen unter **Wiederholung** wählen: wöchentlich, alle zwei Wochen, monatlich, jährlich. Dazu ein Datum, bis zu dem die Serie läuft. Darunter steht dann in einem Kasten, **wie viele Termine daraus werden** — lesen Sie das, bevor Sie auf „Anlegen" drücken. Wöchentlich über ein Jahr sind 52 Einträge. FLORIAN legt jeden Abend als eigenen Termin an, nicht als Regel. Das ist Absicht: so lässt sich der Abend im August absagen, der im Dezember eine Woche vorziehen, und für jeden gibt es eine eigene Teilnehmer- und Anwesenheitsliste. Bei „monatlich" bleibt der Tag im Monat gleich — der 31. rutscht im Februar auf den 28., nicht in den März. ### Absagen statt löschen Ein Termin, zu dem schon jemand zugesagt hat, lässt sich nicht löschen. Er wird **abgesagt**, mit Grund. Er bleibt dann durchgestrichen im Kalender stehen, der Grund steht daneben, und wer zugesagt hatte, bekommt eine Nachricht — nicht die ganze Wehr. Gehört der Termin zu einer Serie, können Sie im selben Schritt **alle folgenden Termine** absagen. Vergangene bleiben unberührt; man sagt nicht rückwirkend ab, was schon stattgefunden hat. ### Anwesenheitsliste Auf jedem Termin oben rechts. Sie zeigt **alle aktiven Mitglieder**, nicht nur die Angemeldeten — auf einem Blatt zum Abhaken muss jeder stehen. Daneben, was jemand gemeldet hatte. Wer das Recht dazu hat, hakt gleich hier ab; sonst führt **Drucken** zu einem Blatt mit leeren Kästchen. > Zusage und Anwesenheit sind zwei verschiedene Dinge. Wer zugesagt hat und > nicht kam, steht genau so in der Liste — das ist der Zweck der Trennung. --- ## 40. Benachrichtigungen einrichten ![Benachrichtigungen](screenshots/38-benachrichtigungen-light.png) > **Niemand wird ungefragt benachrichtigt.** Wer hier nichts einträgt, bekommt > nichts. Es gibt keine Voreinstellung, die alle anmeldet. Unter **Benachrichtigungen** richten Sie Ihre eigenen Wege ein — Ihre, nicht die von jemand anderem. Auch der Kommandant kann niemanden für Sie anmelden. ### Die vier Wege | Weg | Was Sie brauchen | Bleibt im Haus? | |---|---|---| | **E-Mail** | nichts, es gilt Ihre hinterlegte Adresse | ja | | **ntfy** | die ntfy-App und ein Thema | ja, wenn der Server der Wehr gehört | | **Telegram** | Ihre Chat-Kennung vom Bot | **nein** | | **Browser-Push** | nur die Erlaubnis des Browsers | **nein** | Neben den Wegen, die das Netz der Wehr verlassen, steht ein Warnhinweis. Dorthin gehen nur **Kurzfassungen**: „3 Prüfungen fällig", nicht welche. Wer es genau wissen will, bekommt es per E-Mail oder schaut in FLORIAN nach. ### ntfy einrichten Der bequemste Weg, wenn die Wehr einen eigenen ntfy betreibt: 1. Die App „ntfy" aus dem Store laden. 2. In der App den Server eintragen, der auf dieser Seite steht. 3. In FLORIAN **ntfy** wählen; das vorgeschlagene Thema übernehmen. 4. In der App dasselbe Thema abonnieren. > **Das Thema ist Ihr Schlüssel.** Wer den Namen kennt, liest mit. Deshalb > schlägt FLORIAN einen zufälligen vor — nehmen Sie nicht „florian-mueller". ### Browser-Push **Einrichten** drücken; der Browser fragt nach Erlaubnis. Das Abo gilt für **diesen einen Browser auf diesem einen Gerät** — auf dem Diensthandy und am Rechner im Büro also zweimal einrichten. Auf dem iPhone funktioniert es erst, wenn FLORIAN über „Zum Home-Bildschirm" abgelegt wurde. Vorher bietet der Browser es gar nicht an. ### Wofür? Unter jedem Weg stehen die sechs Anlässe zum Ankreuzen: | Anlass | Wann er kommt | |---|---| | Prüfung fällig | im morgendlichen Lauf | | Mangel gemeldet | sofort | | Qualifikation läuft ab | 90, 30 und 7 Tage vorher | | Neuer Termin | beim Anlegen | | Erinnerung an einen Termin | 7 Tage und 1 Tag vorher | | Einsatzbericht freigegeben | bei der Freigabe | ### Der Probeknopf **Drücken Sie ihn.** Er steht direkt an jedem Weg und schickt eine Probenachricht durch dieselbe Maschinerie wie alles andere. Ohne ihn merken Sie einen Tippfehler im Thema erst in drei Wochen — dann, wenn die Nachricht wichtig gewesen wäre. Sie geht mit dem nächsten Lauf raus, üblicherweise binnen einer Minute. ### Was ankam Ganz unten steht, was FLORIAN Ihnen zuletzt geschickt hat und ob es angekommen ist. Steht dort mehrfach **Fehlgeschlagen**, ist der Weg kaputt — der Grund steht daneben. --- ## 41. Den Kalender aufs Handy holen Auf derselben Seite unter **Kalender abonnieren**. Namen für das Gerät eingeben, **Adresse erzeugen** — und die Adresse gleich übernehmen. > **Sie wird genau einmal angezeigt.** FLORIAN speichert nur ihre Prüfsumme. > Wer sie verliert, erzeugt eine neue und widerruft die alte. Die Adresse dann eintragen: | Gerät | Weg | |---|---| | **iPhone/iPad** | Einstellungen → Kalender → Accounts → Account hinzufügen → Andere → Kalenderabo hinzufügen | | **Android** | in Google Kalender am Rechner: Andere Kalender → Per URL | | **Thunderbird** | Neuer Kalender → Im Netzwerk → iCalendar (ICS) | | **Outlook** | Kalender hinzufügen → Aus dem Internet abonnieren | Danach stehen die Termine der Wehr neben allem anderen im Kalender. Neue Termine und Absagen kommen von selbst nach; die meisten Programme fragen stündlich nach. **Nur eigene Termine** angekreuzt heißt: nur die, zu denen Sie sich zurückgemeldet haben. > **Die Adresse ist ein Schlüssel.** Wer sie hat, sieht die Termine der Wehr — > ohne Anmeldung. Geben Sie sie nicht weiter; bei einem verlorenen Handy > genügt ein Klick auf **Widerrufen**. Ausgeliefert werden ausschließlich Termine — keine Teilnehmerlisten, keine Mängel, keine Einsätze. Wer aus der Wehr austritt, verliert das Abo. --- ## 42. Textvorlagen und der Dienstausweis ### Textvorlagen ![Textvorlagen](screenshots/39-vorlagen-light.png) Für Kommandant, Schriftführer und Administrator: unter **Benachrichtigungen → Vorlagen bearbeiten** steht, was in den Nachrichten steht. Was hier geändert wird, gilt für **alle**. Links der Text, rechts die Vorschau mit erfundenen Beispielwerten. Die **Platzhalter** darunter sind anklickbar und werden beim Versand ersetzt: `{titel}` wird zu „Übungsabend", `{datum}` zum Datum. Ein Platzhalter, den es für diesen Anlass nicht gibt, wird beim Speichern abgewiesen — mit der Liste der erlaubten daneben. Und einer, der stehen bleibt, bleibt auch in der fertigen Nachricht sichtbar: eine Lücke, die niemand bemerkt, wäre schlimmer. Ohne eigene Vorlage greift der eingebaute Text. **Auf Standard zurücksetzen** stellt ihn wieder her. > Bei Telegram und Browser-Push steht ein Warnhinweis über dem Feld. Was Sie > dort hineinschreiben, läuft über einen fremden Server — also keine Namen, > keine Adressen, keine Einsatzdetails. ### Der digitale Dienstausweis ![Dienstausweis](screenshots/40-dienstausweis-light.png) Unter **Dienstausweis**: ein QR-Code mit Ihrem Namen, Ihrer Wehr, Ihrer Funktion und Ihren gültigen Qualifikationen. Zum Vorzeigen an der Absperrung, beim Lehrgang oder bei einer Kontrolle. Wer ihn scannt, landet auf einer Prüfseite und sieht genau das — **ohne sich anzumelden**. Denn wer prüft, hat keinen Zugang zu FLORIAN. Drei Dinge sollten Sie darüber wissen: - **Der Code gilt fünf Minuten.** Danach zeigt die Seite ihn selbst neu an. Ein abfotografierter Code nützt nichts. - **Er öffnet nichts.** Die Prüfseite zeigt an, sie lässt nicht hinein. - **Es steht nicht mehr darauf als auf einem Ausweis aus Papier.** Keine Anschrift, kein Geburtsdatum, keine Telefonnummer. Die Prüfseite nennt außerdem, wann der Code erzeugt wurde. Das ist der Punkt, auf den ein Prüfender schauen sollte: „vor zwei Minuten" ist ein Ausweis, „gültig" allein wäre wertlos. Wer aus der Wehr ausgetreten ist, bekommt dort **Kein aktives Mitglied** — auch wenn sein Code technisch noch stimmt. --- ## 43. Das Wiki der Wehr ![Wissen](screenshots/41-wissen-light.png) Unter **Wissen** steht, was die Wehr nachschlagen soll: Dienstvorschriften, Merkblätter, Ausbildungsunterlagen. Also das, was heute als PDF im Ordner steht und im Einsatz niemand findet. Lesen darf jeder. Eine Wehr, in der nur die Führung nachschlagen kann, hat kein Wiki, sondern einen Aktenschrank. ### Zwei Suchen, und beide werden gebraucht | Suche | Findet | Braucht ein Sprachmodell | |---|---|---| | **Wortsuche** (das Feld) | was dasteht — „FwDV 7" findet die Seite mit genau dieser Zeichenfolge | nein | | **Frage** (der Kasten oben) | was gemeint ist — „wie lange hält ein Schlauch" findet den Abschnitt über Ablegereife | ja | Die Wortsuche zeigt nicht nur den Seitennamen, sondern die **Textstelle**. So sieht man beim Suchen, ob es die richtige Stelle ist, ohne die Seite zu öffnen. ### Eine Seite schreiben **Seite anlegen**, dann Titel, Bereich und Inhalt. Der Inhalt ist Markdown: ``` ## Eine Überschrift Ein Absatz. - Ein Aufzählungspunkt - Noch einer | Spalte | Spalte | |---|---| | Wert | Wert | ``` Die **Überschriften sind wichtiger, als sie aussehen**: an ihnen wird die Seite für die Suche zerlegt, und sie stehen später als Fundstelle unter einer Antwort. Eine Seite ohne Überschriften ist ein einziger großer Block und liefert entsprechend grobe Fundstellen. Unter dem Textfeld steht beim Bearbeiten, in wie viele Abschnitte zerlegt wird. ### Fundstelle angeben Das Feld **Fundstelle** ist freiwillig und trotzdem das wichtigste: Es steht unter jeder Antwort, die aus dieser Seite gebaut wird. > „Zusammenfassung nach FwDV 7, Ausgabe 2002" sagt einem Leser, woran er ist. > Eine Antwort ohne Herkunft ist eine Behauptung. Abschreiben sollten Sie eine Dienstvorschrift übrigens nicht — die sind urheberrechtlich geschützt. Was hier hineingehört, ist die **eigene Zusammenfassung** mit Verweis auf die Fundstelle, so wie ein Merkblatt der Wehr. ### Entwurf oder veröffentlicht Ein **Entwurf** wird nicht durchsucht und nicht für Antworten herangezogen. Das ist der Zustand für eine Seite, an der noch gearbeitet wird — sie steht dann nur für die, die bearbeiten dürfen, in der Liste. ### Jede Änderung wird aufgehoben Beim Speichern wird die vorherige Fassung vollständig weggeschrieben. Über **Verlauf** lässt sich jede frühere Fassung im Wortlaut ansehen. Das ist keine Bequemlichkeit: eine Dienstvorschrift, die sich unbemerkt ändert, ist schlimmer als keine. Deshalb lässt sich eine Fassung auch nicht löschen. --- ## 44. Fragen stellen > **Beantwortet wird ausschließlich aus den hinterlegten Seiten.** Steht die > Antwort dort nicht, sagt FLORIAN genau das — statt etwas Plausibles zu > erfinden. Im Kasten oben auf der Wissensseite eine Frage eintippen und **Fragen** drücken. Nach ein paar Sekunden steht die Antwort da — in einem gestrichelten Rahmen mit dem Vermerk **Maschinell erzeugt**. Darunter stehen die **Fundstellen**, aus denen die Antwort gebaut wurde. Das sind Verweise: ein Klick führt auf die Seite. Lesen Sie sie, bevor Sie sich auf die Antwort verlassen — sie sind das Belegte, die Antwort ist die Zusammenfassung. Findet FLORIAN keine passende Stelle, wird das Modell **gar nicht erst gefragt**. Dann steht dort, dass es in den Unterlagen nicht steht. Das ist die richtige Antwort und keine Fehlermeldung. ### Wenn kein Modell eingerichtet ist Dann steht statt des Kastens ein Hinweis. Die Wortsuche funktioniert weiter, und die ist für „FwDV 7" oder „Ablegereife" ohnehin die bessere. ### Der Hinweis „Suchstand ist älter als der Text" Steht auf einer Seite, die geändert, aber noch nicht neu eingebettet wurde. Bis das nachgeholt ist, findet die Frage-Funktion noch die vorherige Fassung — gelesen wird auf der Seite natürlich die aktuelle. Der Hintergrundprozess holt das von selbst nach, spätestens im nächtlichen Lauf. Wer nicht warten will, drückt **Jetzt nachziehen**. --- ## 45. Diktieren statt tippen Auf der Einsatzseite unter **Bericht** → **Beim Schreiben helfen lassen**. Der Weg, den es in jeder Wehr schon gibt: jemand spricht auf der Rückfahrt in sein Telefon, und daraus wird abends ein Bericht. Neu ist nur, dass abends schon ein Text dasteht. 1. **Diktat aufnehmen** drücken. Der Browser fragt nach dem Mikrofon. 2. Sprechen. Der Zähler läuft mit. 3. **Fertig** drücken. Die Aufnahme wird übertragen und erkannt — bei einer langen Aufnahme dauert das ein bis zwei Minuten. Die Seite kann offen bleiben, der Text erscheint von selbst. 4. Text lesen, dann **In den Bericht übernehmen** oder **Verwerfen**. > **Bitte gegenlesen.** Fachbegriffe, Ortsnamen und Fahrzeugbezeichnungen > erkennt kein Modell zuverlässig. Die Aufnahme bleibt abgelegt, bis Sie > entschieden haben — wer dem Text nicht traut, hört nach. Das Mikrofon fragt der Browser nur über **HTTPS** oder auf `localhost` ab. Bleibt der Knopf ohne Wirkung, liegt es fast immer daran. ### Aus Stichpunkten einen Entwurf Im selben Kasten. Stichpunkte eintippen — oder das Diktat dorthin übernehmen — und **Entwurf erstellen** drücken. ``` Angriffstrupp unter PA ins EG Brand in der Küche, Fettbrand Löschdecke, kein Wasser Belüftung mit Überdrucklüfter Übergabe an Polizei ``` Daraus wird ein Fließtext für die Akte. Was das Modell **nicht** bekommt: Zeitstempel, Einsatznummer und Fahrzeuge. Die stehen schon als Felder im Bericht und stünden sonst zweimal da — beim zweiten Mal womöglich falsch. Der Entwurf landet **nicht** im Berichtsfeld. Er steht daneben, gekennzeichnet, mit zwei gleich großen Knöpfen. Erst **Übernehmen** schreibt ihn ins Feld — und auch dann ist er nur ein Textvorschlag im Formular. Gespeichert wird er, wenn Sie **Bericht speichern** drücken. > Verantwortlich ist, wer freigibt. Ein Einsatzbericht ist ein Nachweis, und im > Zweifel liest ihn ein Gericht. --- ## 46. Belege erfassen ![Belege](screenshots/42-belege-light.png) Unter **Belege**: **Beleg fotografieren** drücken. Auf dem Handy öffnet sich direkt die Kamera. Was das Modell erkennt, steht danach in **änderbaren Feldern**. Was es nicht erkannt hat, bleibt leer und ist **gelb hinterlegt** — das ist eine Aufforderung. Ein geratener Betrag wäre eine falsche Buchung, die niemand bemerkt. Prüfen Sie gegen das Foto, das links daneben steht. Dann **Gegenzeichnen**. > Mit dem Gegenzeichnen übernehmen Sie, was **dort steht** — nicht, was die > Maschine gelesen hat. Wenn Sie den Betrag berichtigen, ist der berichtigte > Betrag der Ihre. Beides bleibt nachvollziehbar: das KI-Protokoll hält fest, > was ursprünglich erkannt wurde. Ohne Vision-Modell funktioniert alles bis auf das Auslesen: der Beleg wird fotografiert und abgelegt, die Angaben tragen Sie von Hand ein. Ist der Beleg gegengezeichnet, steht in der Liste der erledigten Belege ein Knopf **Buchen**. Er führt in einem Schritt ins Kassenbuch — zu wählen sind nur Konto und Kategorie. Siehe [Kapitel 48](#48-buchen). ### Das KI-Protokoll ![KI-Protokoll](screenshots/43-ki-protokoll-light.png) Für Kommandant und Administrator: unter **KI-Protokoll** steht jede Befragung eines Modells — was hineinging, was herauskam, wer entschieden hat. Die Zeile **Offen** ist die wichtigste. Sie zählt die Ausgaben, die erzeugt und nie angesehen wurden. Steht dort eine große Zahl, benutzt jemand den Assistenten und liest nicht gegen. Eingabe, Ausgabe und Modell lassen sich nachträglich nicht ändern, und löschen kann man einen Vorgang gar nicht. Das ist der Zweck der Liste: sie soll belegen, was war. Daneben unter **Protokoll** steht dasselbe für Menschen: jede Änderung an jedem Datensatz, seit dem ersten Tag. --- ## 47. Die Kasse Unter **Kasse** stehen alle Konten der Wehr mit ihrem heutigen Bestand. ![Kassenübersicht](screenshots/45-kasse-light.png) Drei Arten von Konten: | Art | Wofür | |---|---| | **Barkasse** | Die Kassette im Gerätehaus. Wechselgeld für Feste, Kleinausgaben. | | **Bankkonto** | Das Girokonto der Wehr. Mit IBAN, damit sich Kontoauszüge zuordnen lassen. | | **Rücklage** | Angespartes für eine Beschaffung. Wird nicht laufend bewegt. | **Der Bestand wird gerechnet, nicht gespeichert.** Anfangsbestand plus alle Buchungen. Wer nachträglich eine Buchung einträgt, sieht den Bestand sofort richtig — es gibt keinen zweiten Wert, der danebenläuft. ### Beim ersten Mal Steht die Kasse leer, bietet die Übersicht an, den **Standardkontenrahmen** anzulegen: rund zwanzig Kategorien, wie sie eine Feuerwehrkasse braucht — Kraftstoff, Reparatur, Schutzkleidung, Ausbildung, Verpflegung auf der einen Seite; Zuschüsse, Spenden, Mitgliedsbeiträge, Veranstaltungen, Kostenersatz auf der anderen. Sie lassen sich danach umbenennen, ergänzen und um eigene Unterkategorien erweitern. Wer eine eigene Gliederung hat, legt sie stattdessen von Hand an. --- ## 48. Buchen ![Kassenbuch](screenshots/46-kassenbuch-light.png) Oben stehen drei Summen: Einnahmen, Ausgaben, Saldo. Sie beziehen sich auf **alle** Treffer der eingestellten Auswahl, nicht nur auf die angezeigten Zeilen — eine Summe unter einer abgeschnittenen Liste bedeutete nichts. ### Eine Buchung erfassen Der Betrag ist immer positiv; ob es eine Einnahme oder eine Ausgabe ist, steht mit den beiden Knöpfen daneben. Eine „negative Ausgabe" gibt es nicht: sie wäre eine Einnahme in Verkleidung und in keiner Auswertung als solche zu erkennen. Sobald ein Verwendungszweck dasteht, schlägt FLORIAN eine Kategorie vor. Zuerst aus den **eigenen früheren Buchungen** der Wehr — steht darunter „zuletzt so gebucht", ist dieselbe Sache schon einmal so einsortiert worden. Erst wenn es dazu nichts gibt, greift eine Stichwortliste. Der Vorschlag ist ein Angebot, kein Automatismus: er wird erst übernommen, wenn er angeklickt wird. Und ist er unsicher, erscheint gar keiner. Ein falscher Vorschlag wäre schlechter als keiner — er wird übernommen, ohne gelesen zu werden. ### Entwurf und festgeschrieben Eine neue Buchung ist zunächst ein **Entwurf**. Sie lässt sich ändern und verwerfen, solange der Kassier sie durchsieht. Mit **Festschreiben** wird sie unveränderbar. Das ist der Zustand, den eine Kassenprüfung erwartet, und dahinter führt kein Weg zurück — auch nicht über einen Umweg, die Datenbank lehnt jede Änderung ab. Ein Schloss in der Zeile zeigt, welche Buchungen festgeschrieben sind. ### Einen Beleg buchen Wurde eine Quittung unter **Belege** fotografiert und gegengezeichnet, muss sie nicht noch einmal abgetippt werden. In der Liste der erledigten Belege steht dort ein Knopf **Buchen**. Zu wählen sind nur Konto und Kategorie — alles andere steht schon fest. Betrag, Datum und Händler kommen aus dem gegengezeichneten Beleg, und das Foto hängt danach an der Buchung. Das ist der Zustand, den eine Kassenprüfung erwartet: zu jeder Ausgabe ein Beleg, und zwar an der Buchung und nicht in einem Ordner daneben. Ein Beleg, der noch nicht gegengezeichnet ist, lässt sich nicht buchen. Er ist bis dahin ein von einer Maschine ausgefülltes Formular. ### Wenn etwas falsch war Bei einem Entwurf: ändern oder verwerfen. Bei einer festgeschriebenen Buchung: **Gegenbuchen**. Es entsteht eine zweite Buchung mit derselben Summe in die andere Richtung, mit Verweis auf die erste und mit dem eingegebenen Grund im Verwendungszweck. Beide bleiben stehen. Das sieht nach mehr Aufwand aus, als eine Zahl zu korrigieren, und ist genau der Punkt: eine verschwundene Buchung kann ein Kassenprüfer nicht prüfen. Eine berichtigte kann er nachvollziehen. Das Datum der Gegenbuchung ist immer **heute**. Läge es im geprüften Zeitraum, würde die Datenbank sie ablehnen — und das zu Recht. --- ## 49. Kontoauszug einlesen Statt fünfzig Umsätze abzutippen, lässt sich der Auszug aus dem Online-Banking einlesen. Zwei Formate: | Format | Datei | |---|---| | **CAMT.053** | `.xml` oder `.camt` | | **MT940** | `.txt` oder `.sta` | Beides bietet fast jedes Online-Banking zum Herunterladen an, meist unter „Umsatzexport" oder „Umsätze exportieren". Welches von beiden, spielt keine Rolle — FLORIAN erkennt es am Inhalt. ### Was dabei passiert — und was nicht Es entstehen **Entwürfe**, keine fertigen Buchungen. Jeder Posten muss danach noch durchgesehen und die Kategorie geprüft werden. Umsätze, die schon in der Kasse stehen, sind grau hinterlegt und mit „steht schon in der Kasse" gekennzeichnet. Sie sind nicht vorausgewählt. Das ist der eigentliche Wert der Sache: ein zweimal eingelesener Auszug wäre sonst ein doppelt gebuchter Monat, und der fällt erst beim Kassenabschluss auf — also drei Monate später. Umsätze, die nicht gelesen werden konnten, stehen mit Grund darüber. Sie verschwinden nicht stillschweigend. --- ## 50. Mitgliedsbeiträge ![Beiträge](screenshots/47-beitraege-light.png) ### Sätze Ein Beitragssatz gilt **ab einem Jahr** und wahlweise für eine Abteilung. Ein Satz ohne Abteilung gilt für alle, die keinen eigenen haben. Rückwirkend wird nichts geändert. Wer den Beitrag erhöht, legt einen neuen Satz ab dem kommenden Jahr an — sonst stimmten die Beiträge der vergangenen Jahre nicht mehr, und die sind bereits geprüft. ### Der Beitragslauf Einmal im Jahr, meist im Januar. Vorher zeigt FLORIAN, was entstehen wird: - wie viele Beiträge und über welche Summe - wie viele Mitglieder für dieses Jahr schon einen haben (die bleiben unberührt) - **wer keinen passenden Satz hat** Der letzte Punkt ist der wichtige. Das sind die Mitglieder, für die niemand entschieden hat, was sie zahlen — entweder fehlt ein Satz für ihre Abteilung oder es gibt keinen allgemeinen. Der Lauf lässt sich wiederholen. Wer im Februar drei Neue aufgenommen hat, startet ihn noch einmal; doppelt entsteht nichts. ### Zahlungen und Mahnungen Ein Zahlungseingang erzeugt zugleich die **Buchung** im Kassenbuch. Ein Häkchen ohne Geld in der Kasse wäre eine Behauptung. Gemahnt wird als Sammelaktion: die offenen Beiträge auswählen, mahnen. Die Mahnstufe zählt hoch. Ab der fünften Stufe hört FLORIAN auf — was danach kommt, entscheidet die Kommandantschaft und nicht die Software. Ein **Erlass** braucht eine Begründung. Ohne sie wird er nicht gespeichert: ein erlassener Beitrag ohne Grund ist in der Kassenprüfung eine offene Frage, und in fünf Jahren weiß es niemand mehr. ### Rückstände Ganz oben steht die Rückstandsliste über **alle Jahre**, nach Person gruppiert. Sie ist die einzige Ansicht, in der auffällt, wer seit drei Jahren offen steht — in der Jahresliste sieht das aus wie ein einzelner offener Beitrag. --- ## 51. Rechnungen an Dritte ![Rechnungen](screenshots/48-rechnungen-light.png) Kostenersatz nach Art. 28 BayFwG (Fehlalarm einer Brandmeldeanlage, Öleinsatz mit Verursacher), Vermietung des Schulungsraums, Absicherung einer Veranstaltung. ### Nummer und Betrag Die **Rechnungsnummer** vergibt FLORIAN fortlaufend je Jahr, lückenlos. Eine fehlende Nummer muss in der Kassenprüfung erklärt werden, deshalb wird auch eine stornierte Rechnung nicht gelöscht, sondern bleibt mit Grund stehen. Der **Betrag** ist die Summe der Positionen und wird nicht eingegeben. Ein von Hand eingetippter Gesamtbetrag neben Positionen, die etwas anderes ergeben, ist der Fehler, den niemand bemerkt, bis der Empfänger anruft. Die Menge hat drei Nachkommastellen: Einsatzstunden werden vielerorts viertelstündlich abgerechnet, und 0,25 × 47,50 € muss auf den Cent stimmen. ### Entwurf, versendet, bezahlt Bis zum **Versenden** ist eine Rechnung ein Entwurf und lässt sich vollständig ändern. Danach nicht mehr: was beim Empfänger liegt, muss dem entsprechen, was hier steht. Beim Versenden entsteht das PDF im Hintergrund. Es steht kurz darauf zum Herunterladen bereit. Der Zahlungseingang erzeugt — wie beim Beitrag — zugleich die Buchung. Wurde weniger überwiesen als berechnet, lässt sich der abweichende Betrag eintragen. Für eine Korrektur: stornieren und neu schreiben. Eine bezahlte Rechnung wird nicht storniert; dort ist zuerst die Buchung gegenzubuchen. --- ## 52. Kassenprüfung ![Kassenabschluss](screenshots/49-kassenabschluss-light.png) Einmal im Jahr, meist vor der Jahreshauptversammlung. Zwei Kassenprüfer zählen die Kasse und vergleichen mit dem Buch. ### Der Ablauf 1. **Zeitraum wählen.** In der Regel das abgelaufene Kalenderjahr. 2. **Zählen.** In der Maske stehen links die Bestände laut Buch und rechts leere Felder für das Gezählte. Die Reihenfolge ist Absicht: wer erst das Buch sieht und dann zählt, zählt, bis es passt. 3. **Differenz erklären**, falls eine bleibt. 4. **Prüfer und Prüfdatum eintragen.** 5. **Festschreiben.** Steht ein Hinweis auf noch nicht festgeschriebene Buchungen im Zeitraum: erst durchsehen. Das Festschreiben des Abschlusses nimmt sie mit. ### Was das Festschreiben bewirkt Der Zeitraum ist danach **zu**. Es lässt sich keine Buchung mehr mit einem Datum darin anlegen, und keine vorhandene mehr dorthin verschieben. Wer nach der Prüfung noch eine Quittung findet, bucht sie mit dem heutigen Datum. Der Abschluss selbst ist ebenfalls unveränderbar — Zahlen, Prüfer und Erläuterung stehen fest. Nachgetragen wird nur der Prüfbericht, weil das PDF im Hintergrund entsteht. Ohne Prüfer und Prüfdatum lässt sich nichts festschreiben: ohne beides ist es kein Abschluss, sondern eine Notiz. Und eine Differenz ohne Erläuterung ebenfalls nicht — sonst steht in fünf Jahren „stimmt nicht" im Bericht und niemand weiß mehr, warum. ### Der Prüfbericht Entsteht als PDF mit vier Unterschriftsfeldern: beide Prüfer, der Kassier und der Kommandant. Er lässt sich ausdrucken, unterschreiben und abheften — die Papierform bleibt für die Entlastung in der Versammlung die maßgebliche. --- ## 53. Auswertungen und Export Unter **Kasse → Abschluss → Auswertung** stehen die Zahlen für die Jahreshauptversammlung: - Einnahmen und Ausgaben je Kategorie, absteigend nach Betrag - der Verlauf über zwölf Monate - das Vorjahr daneben — eine Zahl ohne Vergleich sagt nichts Das ist die Ansicht, in der auffällt, dass sich die Kraftstoffkosten verdoppelt haben. ### Export **Kassenbuch als CSV** lädt alle Buchungen eines Jahres herunter: Datum, Konto, Richtung, Betrag, Ober- und Unterkategorie, Kontonummer, Verwendungszweck, Belegnummer, Gegenüber und ob festgeschrieben. Die Datei ist für den Steuerberater oder die Kämmerei gedacht und öffnet in Excel ohne Rückfrage richtig: Semikolon als Trennzeichen, Komma als Dezimaltrennzeichen, UTF-8 mit Kennung. --- ## 54. Mehrere Wehren auf einem Server Ein FLORIAN kann mehrere Wehren führen — eine Gemeinde mit drei Ortswehren, ein Landkreis mit zwanzig. Die Wehren sehen einander dabei **nicht**. Jede Abfrage ist an eine Wehr gebunden, und zwar in der Datenbank selbst, nicht im Programm. ### Konto und Personenakte Zwei verschiedene Dinge, und der Unterschied ist der Kern dieses Kapitels: | | Was es ist | |---|---| | **Konto** | Womit Sie sich anmelden. E-Mail und Passwort. Gehört keiner Wehr. | | **Personenakte** | Ihr Eintrag in einer Wehr: Dienstgrad, Qualifikationen, Einsätze. | | **Zuordnung** | Verbindet beides — je Wehr eine. | Wer nur zu einer Wehr gehört, merkt davon nichts: ein Konto, eine Akte, eine Zuordnung, und alles sieht aus wie vorher. Wer zu **zwei** Wehren gehört — aktiv in der einen, Ehrenmitglied in der anderen —, hat trotzdem nur **ein** Passwort. Zwei Akten, ein Konto. ### Die Wehr wechseln Steht Ihr Konto bei mehreren Wehren, wird der Name der Wehr in der Seitenleiste zu einem Auswahlfeld. Ein Klick darauf, und alle Wehren stehen untereinander — mit dem Hinweis, ob Sie dort Mitglied oder Kreisaufsicht sind. Nach der Anmeldung sind Sie immer in **Ihrer eigenen** Wehr, nicht in einer betreuten. Nach dem Wechsel wird alles neu geladen. Was Sie danach sehen, gehört zur neuen Wehr — es gibt keinen Zustand, in dem Daten der einen unter dem Namen der anderen stehen. --- ## 55. Kreisbrandrat und Kreisbrandinspektion Die Kreisebene bekommt Zugang zu den betreuten Wehren, ohne ihnen anzugehören. **Sie sieht und ändert nichts.** Das ist keine Einstellung, die jemand versehentlich anders setzen kann: eine Aufsichtszuordnung bekommt genau die Leserechte und keines der Schreibrechte, und zwar automatisch auch für Module, die es noch gar nicht gibt. Wer als Aufsicht in einer Wehr unterwegs ist, sieht das durchgehend als Zeile über der Ansicht. ### Was die Aufsicht sieht Mitglieder, Fahrzeuge, Geräte, Prüfungen, Atemschutz, Einsätze, Übungen, Qualifikationen, Termine, Wiki, Karte. Der **Atemschutz** ist dabei der wichtigste Punkt: ob ein Träger tauglich ist, ist genau die Frage, für die es eine Kreisebene gibt. ### Was sie nicht sieht | | Warum | |---|---| | **Kasse** | Sie gehört dem Verein oder der Kommune, nicht der Kreisaufsicht. | | **Protokoll** | Wer wann was getan hat, bleibt innerhalb der Wehr. | | **KI-Protokoll** | Dasselbe. | | **Personenexport nach DSGVO** | Das Auskunftsrecht erfüllt die Wehr, die die Daten führt. | ### Sie taucht in keiner Mitgliederliste auf Die Aufsicht hat in der betreuten Wehr **keine Personenakte**. Sie ist also kein Mitglied, erscheint in keiner Liste, in keiner Stärkemeldung und in keiner Anwesenheit — und kann als Urheber einer Änderung auch gar nicht eingetragen werden, weil sie keine macht. Ist der Kreisbrandinspektor zugleich Kommandant seiner Heimatwehr, hat er dort ganz normal seine Akte und seine Rollen. Es sind zwei Zuordnungen desselben Kontos, mehr nicht. --- ## 56. Wehren und Konten verwalten Unter **Wehren und Konten**. Der Menüpunkt erscheint nur für den, der die Installation betreibt — nicht für Kommandanten, auch nicht für Administratoren einer einzelnen Wehr. > Dieses Merkmal hebt die Trennung zwischen den Wehren auf. Es gehört an so > wenige Konten wie möglich, im Regelfall an eines. ### Eine Wehr anlegen Vollständiger Name, Kurzname und eine **Kennung**. Die Kennung steht später im Terminal und in Dateipfaden und lässt sich nicht mehr ändern — also mit Bedacht wählen: Kleinbuchstaben, Ziffern, Bindestriche, etwa `ff-musterhausen`. Die neue Wehr bekommt sofort ihre Rollen samt Rechten. Ein Konto bekommt sie nicht: das ist der zweite Schritt. ### Ein Konto anlegen E-Mail-Adresse und ein erstes Passwort. Die Adresse gilt über alle Wehren hinweg und ist damit die Anmeldung. Das Passwort steht im Klartext da, damit Sie es weitergeben können — FLORIAN verschickt keines. Es gehört nach der ersten Anmeldung geändert. Gibt es zu der Adresse schon ein Konto, sagt FLORIAN das und legt **kein zweites** an. Wenn diese Person zu einer weiteren Wehr gehören soll, bekommt sie eine weitere Zuordnung — genau dafür ist die Trennung da. ### Zuordnen Konto wählen, **Wehr zuordnen**, dann: - **Mitglied** — zusätzlich die Personenakte in dieser Wehr wählen. Zur Auswahl steht, wer noch kein Konto hat: eine Akte gehört zu höchstens einem, sonst wäre nicht entscheidbar, wer unter ihrem Namen gehandelt hat. - **Kreisaufsicht** — keine Akte, nur Leserechte. Jede Zuordnung wird **in der betroffenen Wehr** protokolliert. Dort steht also nachlesbar, dass jemand von außen Zugang bekommen hat. ### Eine Zuordnung beenden Über das Papierkorb-Symbol. Die Personenakte in der Wehr bleibt bestehen — entfernt wird nur der Zugang. Wer ausgetreten ist, wird in der Mitgliederliste ausgetragen, nicht hier. --- ## 57. 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 kann sie also nachträglich zuschneiden, ohne dass jemand Code ändert. | Rolle | Darf im Kern | |---|---| | **Administrator** | alles, auch über Wehren hinweg | | **Kommandant** | alles innerhalb der eigenen Wehr, einschließlich Rollen vergeben und Protokoll einsehen | | **Gerätewart** | Fahrzeuge und Geräte anlegen, ändern, aussondern; Prüfungen planen und durchführen | | **Atemschutzgerätewart** | zusätzlich Atemschutzgeräte, Träger und die Überwachung nach FwDV 7 | | **Kassier** | Kassenbuch, Beiträge, Rechnungen und Kassenabschluss; Belege erfassen und gegenzeichnen | | **Schriftführer** | Mitglieder pflegen, Einsätze und Berichte erfassen, den Terminkalender führen | | **Ausbilder** | Übungen und Übungstermine planen, Teilnahme, Anwesenheit und Qualifikationen erfassen | | **Mitglied** | eigene Daten, Listen lesen, Termine sehen und sich zurückmelden, eigene Benachrichtigungswege einrichten, im Wiki lesen | | **Kreisebene** | sieht die betreuten Wehren, ändert nichts — siehe [Kapitel 55](#55-kreisbrandrat-und-kreisbrandinspektion) | | **Terminal** | nur anmelden und erfassen — nie verwalten | Zwei Dinge sind bewusst so gebaut: **Der Gerätewart kommt nicht an die Kasse, der Kassier nicht an die Geräte.** Trennung nach Verantwortung, nicht nach Bequemlichkeit. **Das Terminal darf fast nichts.** Wer am Wandtablet arbeitet, meldet sich zusätzlich mit PIN oder Karte an und handelt dann unter seiner eigenen Person. Das Terminal selbst ist nur die Tür. **Seine Benachrichtigungswege richtet jeder selbst ein.** Das ist ein Grundrecht jedes Mitglieds und keine Sache des Kommandanten — es gibt bewusst keinen Weg, jemand anderem einen Zustellweg einzutragen. Was für alle gilt, sind nur die Textvorlagen, und die hängen an einem eigenen Recht. --- ## 58. Anmeldung über authentik einrichten authentik läuft **getrennt** von FLORIAN und ist nicht Teil dieses Stacks. ### In authentik 1. Neuen Provider anlegen, Typ **OAuth2/OpenID Provider** 2. Client-Typ: **Confidential** 3. Redirect-URI genau so eintragen: ``` https:///api/auth/callback/authentik ``` 4. Scopes: `openid`, `profile`, `email` 5. Für die Rollenvorbelegung zusätzlich ein Scope-Mapping, das die Gruppen des Benutzers als Claim `groups` ausliefert 6. Eine Application anlegen und mit dem Provider verbinden. Der Slug der Application ist der letzte Teil der Issuer-URL. ### In der `.env` ```bash AUTH_OIDC_ENABLED=true AUTH_OIDC_ISSUER=https://auth.beispiel.de/application/o/florian/ AUTH_OIDC_CLIENT_ID= AUTH_OIDC_CLIENT_SECRET= AUTH_OIDC_GROUP_CLAIM=groups AUTH_OIDC_GROUP_MAPPING=feuerwehr-kommandant:KOMMANDANT,feuerwehr-geraetewart:GERAETEWART AUTH_OIDC_AUTO_PROVISION=true AUTH_OIDC_STANDARD_ORGANISATION=ff-musterhausen ``` Danach die Anwendung neu starten. Auf der Anmeldeseite erscheint der Knopf für authentik. ### Wie die Rollenvorbelegung wirkt Die Zuordnung greift **nur beim allerersten Login** einer Person. Danach ist die in FLORIAN gepflegte Rolle führend, und authentik überschreibt sie nicht mehr. Wer also einem Mitglied in FLORIAN die Rolle „Gerätewart" gibt, behält sie — auch wenn die authentik-Gruppe etwas anderes sagt. Steht `AUTH_OIDC_AUTO_PROVISION=false`, muss die Person vorher in FLORIAN angelegt sein. Verknüpft wird über die E-Mail-Adresse. ### Wenn authentik ausfällt Solange `AUTH_LOCAL_ENABLED=true` steht, bleibt der Passwort-Login als Rückfallweg erreichbar. Für den Wirkbetrieb ist es sinnvoll, mindestens ein Konto mit Passwort zu behalten — sonst sperrt ein Ausfall von authentik die ganze Wehr aus. --- ## 59. PIN und Ausweiskarte verwalten Wie sich am Terminal angemeldet wird, steht in Kapitel 24. Hier geht es darum, was dahinter liegt. Am Terminal wird zweifach geprüft: 1. **Das Gerät** weist sich mit `KIOSK_DEVICE_SECRET` aus. Ohne diesen Wert nimmt der Server keine PIN und keine Karte an. 2. **Die Person** meldet sich mit einer sechsstelligen PIN (zusammen mit ihrer Mitgliedsnummer) oder mit einer RFID-Karte an. Beides wird nur als Hash gespeichert — weder die PIN noch die Kartenkennung liegen im Klartext in der Datenbank. PINs, die sich zu leicht raten lassen, weist FLORIAN ab: lauter gleiche Ziffern und fortlaufende Folgen wie `123456`. Aus dem Seed lässt sich das ausprobieren: Mitgliedsnummer `0001` (Andreas Huber), PIN `471203`. --- ## 60. Was protokolliert wird Jede schreibende Änderung erzeugt einen Eintrag mit Zeitpunkt, Person, betroffenem Datensatz und den geänderten Feldern im Vorher-Nachher-Vergleich. Auch jede Anmeldung — erfolgreich wie gescheitert. Zwei Eigenschaften sind wichtig: **Der Log lässt sich nicht ändern.** Nicht über die Oberfläche, nicht über die Datenbank, auch nicht vom Administrator. Die Datenbank selbst verhindert es. **Er lässt sich nur im Aufbewahrungslauf kürzen.** Nach der eingestellten Frist (`AUDIT_AUFBEWAHRUNG_TAGE`, Vorgabe 10 Jahre) sichert der Hintergrundprozess die alten Einträge und entfernt sie danach. Das ist der einzige Weg, auf dem etwas aus dem Log verschwindet. **Passwörter, PINs und Kartenkennungen stehen nie im Log** — sie werden vor dem Schreiben herausgenommen. Einsehbar ist der Log mit dem Recht `system.auditlog`, das Kommandant und Administrator haben. Am Gerät und am Fahrzeug ist der Verlauf bereits auf der jeweiligen Detailseite sichtbar. --- ## 61. Wenn jemand Auskunft über seine Daten verlangt Jede Person darf verlangen zu erfahren, welche Daten über sie verarbeitet werden — Art. 15 DSGVO. Die Anfrage muss **innerhalb eines Monats** beantwortet werden, und sie ist kostenlos. ### So geht es 1. **Mitglieder** öffnen, die Person anklicken. 2. Rechts oben auf **Datenauskunft**. 3. **Auskunft erstellen**. Danach stehen drei Dinge bereit: | | Wofür | |---|---| | **Die Anzeige** | Was ausgehändigt wird — vor dem Aushändigen | | **PDF** | Das Schreiben an die Person. Ausdrucken oder als Datei geben | | **JSON** | Nur, wenn die Person die Daten maschinenlesbar verlangt (Art. 20) | Das Recht dazu heißt `person.export` und liegt bei Kommandant und Administrator. ### Was drinsteht Dreizehn Abschnitte: Stammdaten, Zugang, Rollen, Qualifikationen, arbeitsmedizinische Vorsorge, Belastungsübungen, Einsatz- und Übungsbeteiligung, Anwesenheiten, Fahrten, Beiträge, Benachrichtigungswege, Ausweise. Über jedem steht, **wozu** diese Daten vorliegen. Das ist kein Beiwerk: Art. 15 verlangt neben den Daten auch die Zwecke und den Hinweis auf die weiteren Rechte. Eine bloße Liste erfüllt die Auskunftspflicht nicht. **Auch das Unangenehme steht drin** — ein gemahnter Beitrag, eine nicht bestandene G26. Eine Auskunft, die auswählt, was gut aussieht, ist keine. **Leere Abschnitte bleiben stehen.** „Dazu liegen keine Daten vor" ist eine Auskunft. **Gesundheitsdaten sind gekennzeichnet.** G26 und Belastungsübungen sind eine besondere Kategorie nach Art. 9 — das steht im Bericht ausdrücklich dabei. ### Was nicht drinsteht Was die Person **getan** hat, erscheint nur als Zahl: „12 durchgeführte Prüfungen", „3 gemeldete Mängel". Das ist Absicht. Die Prüfprotokolle selbst gehören zum Nachweisbestand der Feuerwehr und nicht zu den personenbezogenen Daten eines Mitglieds. Würden sie mitgeliefert, käme jeder über eine Selbstauskunft an die kompletten Geräteakten — die Auskunftspflicht wäre eine Hintertür. ### Der Vorgang wird protokolliert Dass eine Auskunft erteilt wurde, steht danach unter **Protokoll**. Das ist richtig so: die Auskunft legt alles offen, was über einen Menschen gespeichert ist, einschließlich seiner Gesundheitsdaten. Wer sie erstellt hat und wann, gehört festgehalten. ### Wenn die Person in zwei Wehren geführt wird Dann gibt es **zwei** Auskünfte, eine je Wehr. Das ist kein Versehen: jede Wehr ist eine eigene Verantwortliche im Sinne der Verordnung und kann nur über die Daten Auskunft geben, die sie selbst führt. --- ## 62. Sicherung und Wiederherstellung > **Der wichtigste Satz dieses Kapitels:** Eine Sicherung, die nie > zurückgespielt wurde, ist eine Vermutung. ### Sichern ```bash npm run sicherung npm run sicherung -- --ziel D:\backups ``` Gesichert wird die Datenbank **und** der Dateispeicher — Prüfprotokolle, Einsatzberichte, Fotos, Rechnungen. Beides aus demselben Moment: eine Datenbank von heute mit Dateien von gestern ergibt Einträge, die auf nichts zeigen. Das Ergebnis ist ein Verzeichnis mit Zeitstempel. Es gehört auf ein anderes Gerät — eine Sicherung auf derselben Festplatte hilft gegen einen Festplattenfehler nicht. ### Zurückspielen ```bash npm run wiederherstellen -- --quelle sicherungen/2026-09-05T14-16-48 ``` So passiert **nichts**. Es wird nur angezeigt, aus welchem Moment die Sicherung stammt und wie groß sie ist. Erst mit `--wirklich` am Ende wird zurückgespielt — und dabei **der gesamte vorhandene Bestand überschrieben**. ### Einmal im Jahr proben Nicht im Notfall zum ersten Mal. Der Ordner kann leer sein, der Auszug abgeschnitten, das Passwort falsch — man erfährt es sonst an dem Tag, an dem man es nicht erfahren will. Nach dem Zurückspielen prüft das Skript selbst nach, ob die Schutzsperren der Datenbank wieder stehen. Drei Handgriffe bleiben trotzdem: 1. **Anmelden** — kommt jemand hinein? 2. **Ein Prüfprotokoll öffnen** — ist das PDF da? 3. **Die Mitgliederzahl** mit der Erwartung vergleichen. Erst danach gilt die Sicherung als geprüft. Das Datum der letzten geglückten Probe gehört ins Sicherungskonzept. --- ## 63. Wenn etwas nicht geht | Beobachtung | Wahrscheinliche Ursache | Was hilft | |---|---|---| | Die Anwendung startet nicht und meldet fehlende Variablen | `.env` unvollständig | Die Meldung nennt jede fehlende Variable. Erklärungen dazu stehen in `.env.example`. | | Anmeldung schlägt immer fehl, obwohl das Passwort stimmt | Konto nach Fehlversuchen gesperrt | Fünf Minuten warten, oder `gesperrtBis` in der Datenbank zurücksetzen | | Listen sind leer, obwohl Daten da sind | Kein Mandantenkontext gesetzt | Das ist der Schutzmechanismus. Der Zugriff muss über `fuerOrganisation()` laufen. | | Dateien lassen sich nicht hochladen | MinIO nicht erreichbar oder Bucket fehlt | `http://localhost:9011` öffnen; `docker compose logs minio-init` | | Der Knopf für authentik fehlt | Issuer, Client-ID oder Secret nicht gesetzt | Alle drei sind nötig, sonst wird der Weg ausgeblendet | | Etikettenbogen lässt sich nicht erzeugen | Gotenberg läuft nicht | `docker compose ps`, dann `docker compose up -d gotenberg` | | Kamera bleibt schwarz | Freigabe abgelehnt, oder die Seite läuft nicht über HTTPS | Der Browser fragt nur bei HTTPS oder localhost. Sonst die Inventarnummer eintippen | | Import meldet fehlende Pflichtfelder | Keine Spalte ist Inventarnummer oder Bezeichnung zugeordnet | In Schritt 2 die Zuordnung von Hand setzen | | Umlaute im Import verstümmelt | Die Datei ist weder UTF-8 noch Windows-1252 | In Excel als „CSV UTF-8" speichern | | Gerät lässt sich nicht speichern | Standort **und** Fahrzeug gesetzt, oder keines von beidem | Genau eines von beiden angeben | | `docker compose up` startet Traefik mit | Override-Datei wurde nicht mitgeladen | In Produktion `-f docker-compose.yml` angeben | | Terminal zeigt „Terminal nicht eingerichtet" | Das Tablet kennt keine Wehr, oder der Browserspeicher wurde geleert | `/kiosk/einrichten` erneut aufrufen | | Terminal weist jede PIN ab | Gerätegeheimnis stimmt nicht mit `KIOSK_DEVICE_SECRET` überein | Einrichtung mit dem aktuellen Wert wiederholen | | Die Leiste zeigt dauerhaft wartende Änderungen | Server erreichbar, aber der Vorgang wird abgelehnt | Über „anzeigen" den Grund lesen; landet er als Konflikt, steht er unter `/terminal` | | „Der Code wurde nicht erkannt" beim QR-Login | Marke älter als 60 Sekunden | Auf dem Handy die Seite Anmeldemarke offen halten, sie erneuert den Code selbst | | Der Monitor zeigt keine Wetterwarnung | `WETTER_ENABLED` aus oder `DWD_WARNCELL` leer | Beides setzen; ohne Warnzelle wird nichts abgerufen | | Der Sicherheitshinweis im Atemschutz bleibt trotz `ATEMSCHUTZ_HINWEIS=false` | `ATEMSCHUTZ_FREIGABE` ist leer | Fundstelle der Freigabe eintragen — ohne sie bleibt der Hinweis absichtlich stehen | | Die Überwachung lässt sich nicht beenden | Ein Trupp ist noch nicht als draußen gemeldet | Trupp abmelden, dann beenden. Die Meldung nennt die Anzahl | | Oben steht „Verbindung unterbrochen", obwohl das Netz da ist | Der Ereignisstrom wurde von einem Proxy gepuffert oder gekappt | Die Ansicht arbeitet weiter; bei einem Reverse Proxy `X-Accel-Buffering: no` durchreichen | | Das Atemschutzprotokoll fehlt | Die Überwachung ist noch nicht beendet | Ein Protokoll entsteht erst mit dem Ende — vorher wäre es unvollständig und sähe vollständig aus | | Die Karte zeigt keinen Hintergrund | Kein Kartenserver eingerichtet oder nicht erreichbar | `docker compose --profile karte up -d`, MBTiles nach `docker/karten/`, `KARTE_STIL_URL` setzen. Ohne läuft alles außer den Straßen | | Der Import überspringt alle Zeilen | Keine Spalte wurde als Breite und Länge erkannt | Spalten umbenennen (`lat`/`lon`, `Breitengrad`/`Längengrad`) — die erkannten Namen stehen in `lib/karte/hydrant-import.ts` | | Nach dem Import steht überall „ungeprüft" | Die Quelle hat keine Statusspalte | Absicht: ohne Angabe wird nicht „einsatzbereit" behauptet. Zustand nachpflegen | | Die Lagekarte gleicht nicht ab | Der Ereignisstrom ist unterbrochen | Steht oben in der Lagekarte. Bei einem Reverse Proxy `X-Accel-Buffering: no` durchreichen | | Die Förderstrecke braucht unerwartet viele Pumpen | Fördermenge zu hoch für den Durchmesser | Der Verlust steigt im Quadrat: 800 statt 400 l/min kostet die vierfache Reibung. Größeren Schlauch wählen oder weniger fördern | | Es kommt keine Benachrichtigung an | Kein Zustellweg eingerichtet, oder kein Anlass angekreuzt | Unter **Benachrichtigungen** einen Weg einrichten und ankreuzen, wofür. Ohne beides kommt absichtlich nichts | | Die Probenachricht bleibt aus | Der Kanal ist auf dem Server nicht eingerichtet | In der Auswahl steht „(nicht eingerichtet)". `MAIL_ENABLED`, `NTFY_ENABLED`, `TELEGRAM_ENABLED` oder `WEBPUSH_ENABLED` setzen | | Im Verlauf steht mehrfach „Fehlgeschlagen" | Der Weg ist kaputt — der Grund steht daneben | Bei ntfy meist ein Tippfehler im Thema, bei Telegram eine falsche Chat-Kennung | | Browser-Push lässt sich nicht einrichten | Keine VAPID-Schlüssel auf dem Server | `npm run vapid` und die Ausgabe in die `.env` übernehmen | | Push kam bisher an, jetzt nicht mehr | Der öffentliche VAPID-Schlüssel wurde gewechselt | Alle Abos sind damit wertlos. Jeder muss Push neu erlauben — deshalb gehören die Schlüssel ins Backup | | Auf dem iPhone gibt es keinen Push-Knopf | Web-Push geht dort nur als abgelegte App | Über „Teilen → Zum Home-Bildschirm" ablegen, dann erneut versuchen | | Der Kalender im Handy aktualisiert sich nicht | Das Programm fragt nur stündlich nach | Abwarten oder im Kalenderprogramm „Aktualisieren" auslösen | | Der Kalender ist plötzlich leer | Der Zugang wurde widerrufen, oder die Person ist ausgetreten | Unter **Benachrichtigungen** eine neue Adresse erzeugen | | Eine Vorlage lässt sich nicht speichern | Ein Platzhalter gehört nicht zu diesem Anlass | Die Meldung nennt ihn und listet die erlaubten auf | | Ein Termin lässt sich nicht löschen | Es liegen schon Rückmeldungen vor | Absagen statt löschen — dann sehen die Angemeldeten den Grund | | Die Zusage wurde zur Warteliste | Die Plätze sind belegt | Sagt jemand ab, rücken Sie von selbst nach und werden benachrichtigt | | Der Kasten „Frage an die Unterlagen" fehlt | Kein Sprachmodell eingerichtet | `LLM_ENABLED=true` und `LLM_BASE_URL`; Container mit `docker compose --profile ki up -d`. Die Wortsuche geht trotzdem | | Die Frage antwortet „steht nicht in den Unterlagen" | Entweder steht es wirklich nicht drin — oder die Seite ist noch nicht eingebettet | Auf der Seite steht dann „Suchstand ist älter als der Text". **Jetzt nachziehen** drücken | | „Das Modell hat nach 120 Sekunden nicht geantwortet" | Ohne Grafikkarte ist das normal | Kleineres Modell (`qwen2.5:7b`) oder `LLM_TIMEOUT` hochsetzen | | „Das Modell liefert 1024 Dimensionen, die Datenbank erwartet 768" | Ein anderes Einbettungsmodell eingetragen | Entweder `nomic-embed-text` benutzen oder die Spalte per Migration ändern — siehe README, Phase 8 | | Der Diktat-Knopf bewirkt nichts | Der Browser fragt das Mikrofon nur über HTTPS oder auf localhost ab | Über die richtige Adresse aufrufen und die Freigabe erteilen | | Das Diktat bleibt bei „Wird erkannt …" stehen | Der Hintergrundprozess läuft nicht, oder Whisper ist nicht erreichbar | `docker compose ps`, dann `docker compose --profile ki up -d whisper`. Die Aufnahme bleibt erhalten | | Beim Beleg bleiben alle Felder leer | Kein Vision-Modell, oder das Foto ist unscharf | Angaben von Hand eintragen. Für die Erkennung `LLM_VISION_MODELL` setzen und das Modell holen | | Die Migration bricht mit „type vector does not exist" ab | Das Postgres-Image bringt pgvector noch nicht mit | `docker compose build postgres`, dann `docker compose up -d postgres` und erneut migrieren | Zustand aller Randsysteme auf einen Blick: ``` http://localhost:3100/api/health ``` Antwortet mit `200` und `"status": "ok"`, wenn Datenbank, Objektspeicher und Warteschlange erreichbar sind — sonst mit `503` und der Angabe, welcher Dienst fehlt. --- ## Bilder erneuern ```bash docker compose up -d npm run dev npm run screenshots ``` Die Bilder entstehen in `docs/screenshots/`, jeweils in heller und dunkler Darstellung, und werden mit eingecheckt — die Anleitung soll auch dann lesbar sein, wenn gerade kein Stack läuft.