Version 1.0.0 — Freigabe fuer den Echtbetrieb
Pruefung / pruefung (pull_request) Canceled after 0s
Pruefung / oberflaeche (pull_request) Canceled after 0s

Kein neues Modul. Zwoelf Phasen sind fertig, und die Wehr kann ab jetzt
echte Daten hineingeben, ohne befuerchten zu muessen, sie beim naechsten
Update zu verlieren.

Neu dazu, weil beides zum Betrieb gehoert:

update.sh aktualisiert auf einem Linux-Server in einem Befehl. Der Ablauf
darf an jeder Stelle abbrechen, ohne eine halb aktualisierte Anlage zu
hinterlassen: erst nachsehen ob es etwas Neues gibt, dann sichern, dann
holen und bauen (schlaegt das fehl, laeuft die alte Fassung unveraendert
weiter), dann umschalten, dann pruefen ob die Anwendung antwortet. Tut sie
es nicht, stehen die Protokollzeilen da und die Befehle fuer den Rueckweg.

docs/KURZANLEITUNG.md ist der Einstieg fuer die Wehr - nach Rollen
sortiert, aufgabenorientiert statt nach Modulen, und bei jedem heiklen
Punkt steht das Warum dabei. Die vollstaendige Anleitung hat 63 Kapitel;
die liest niemand, bevor er das erste Geraet pruefen will.

Die Roadmap haelt den Stand JEDER Freigabevoraussetzung fest, auch der
offenen: Datenuebernahme entfaellt (die Wehr pflegt von Hand ein),
Sicherungskonzept erledigt, Loeschkonzept technisch vollstaendig aber
nicht abgenommen, Schulung steht aus, Atemschutzhinweis bewusst stehen
gelassen. Eine Freigabe, die abhakt was nicht geprueft wurde, ist keine.

Nebenbei die Ursache der Testflackerei gefunden, die sich durch mehrere
Phasen zog: zwei Datenbanktests schalteten beim Aufraeumen ihre Trigger
mit ALTER TABLE ... DISABLE TRIGGER ab - eine Schemaaenderung, die fuer
die ganze Datenbank gilt. Vitest faehrt die Dateien parallel, also pruefte
eine Datei gerade dass ein Trigger greift, waehrend eine andere ihn
abgeraeumt hatte. Jetzt sitzungslokal ueber session_replication_role.

Erstmals in diesem Projekt: fuenf Unit-Testlaeufe hintereinander 601 gruen
und ein E2E-Lauf mit 268 gruen ohne Fehlschlag und ohne Flackern.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-06 18:09:26 +02:00
co-authored by Claude Opus 5
parent 9156dcc144
commit 30faa6cb02
11 changed files with 799 additions and 30 deletions
+283
View File
@@ -0,0 +1,283 @@
# FLORIAN — Kurzanleitung
Alles, was man am Anfang braucht, auf ein paar Seiten. Nach Rollen sortiert:
such dir den Abschnitt, der zu dir gehört, und lies den Rest später.
Ausführlich steht alles in der [Anleitung](ANLEITUNG.md) — 63 Kapitel, zum
Nachschlagen, nicht zum Durchlesen.
---
## Für alle
### Anmelden
FLORIAN läuft im Browser. Die Adresse bekommst du vom Kommandanten.
![Anmeldung](screenshots/01-anmeldung-light.png)
Nach der Anmeldung landest du auf der Übersicht: was ansteht, was fällig ist,
was gemeldet wurde.
**Das Passwort gehört nach der ersten Anmeldung geändert.** Oben rechts auf
deinen Namen.
### Was du überall findest
| Links in der Leiste | Wofür |
|---|---|
| **Übersicht** | Die Startseite: Fristen, Mängel, nächste Termine |
| **Termine** | Übungsabende, Lehrgänge, Versammlungen — mit Rückmeldung |
| **Dienstausweis** | Dein Ausweis mit QR-Code, auch fürs Handy |
| **Wissen** | Merkblätter und Dienstanweisungen der Wehr |
Du siehst nur, was zu deiner Rolle gehört. Fehlt dir etwas, sag dem
Kommandanten Bescheid — Rollen werden dort vergeben.
### Zu einem Termin zurückmelden
**Termine** öffnen, den Termin anklicken, **Zusagen** oder **Absagen**. Fertig.
Wer absagt, kann einen Grund angeben; das hilft dem Ausbilder bei der Planung.
### Am Terminal im Gerätehaus
Am Wandtablet meldest du dich mit **PIN oder Ausweiskarte** an — nicht mit
E-Mail und Passwort. Deine PIN bekommst du vom Kommandanten.
![Terminal](screenshots/25-kiosk-kacheln-light.png)
Dort geht: anmelden zum Dienst, einen Mangel melden, eine Fahrt eintragen,
Schutzkleidung zur Reinigung geben.
---
## Für den Gerätewart
Das ist der Bereich, in dem FLORIAN am meisten abnimmt.
### Der wichtigste Bildschirm: Prüfungen
![Fristen](screenshots/11-fristen-light.png)
Unter **Prüfungen** steht, was wann fällig wird. Rot heißt überfällig, gelb
heißt demnächst. Die Fristen rechnet FLORIAN selbst aus den Prüfintervallen
der Gerätetypen aus — du musst nichts nachhalten.
### Ein Gerät prüfen
1. **Prüfungen** → das fällige Gerät anklicken → **Prüfung durchführen**.
2. Die Checkliste durchgehen. Sie kommt aus der Wartungsvorlage des Gerätetyps.
3. Ergebnis eintragen, unterschreiben, abschließen.
![Prüfprotokoll](screenshots/18-pruefprotokoll-light.png)
Danach entsteht ein **Prüfprotokoll als PDF** — das ist der Nachweis gegenüber
der Unfallkasse.
> **Achtung:** Ein abgeschlossenes Protokoll lässt sich nicht mehr ändern. Das
> ist Absicht — ein nachträglich änderbarer Nachweis wäre keiner. Ist etwas
> falsch, wird eine neue Prüfung erfasst.
### Ein Gerät anlegen
**Geräte** → **Gerät anlegen**. Pflicht sind nur Inventarnummer und
Bezeichnung; der Rest kann nachkommen.
Wähle möglichst einen **Gerätetyp** — daran hängen Prüfintervall und
Lebensdauer, und ohne Typ rechnet FLORIAN keine Frist.
### Einen Mangel bearbeiten
Mängel kommen meist vom Terminal — jemand meldet sie beim Einrücken.
**Mängel** → anklicken → jemandem zuweisen → nach der Behebung **erledigen**.
Ein Gerät mit einem schweren Mangel wird automatisch gesperrt.
### Was noch dazugehört
| Wo | Wofür |
|---|---|
| **Rückrufe** | Herstellerrückrufe: welche eurer Geräte betroffen sind |
| **Lebensdauer** | Helme, Schläuche, Schutzkleidung mit Höchstalter |
| **Fahrzeuge** | Beladung nach Geräteräumen |
---
## Für den Atemschutzgerätewart
> **Der wichtigste Satz zuerst:** Die Überwachungstafel am Fahrzeug bleibt
> führend. FLORIAN ergänzt sie, ersetzt sie nicht. Das steht auch dauerhaft
> über jeder Ansicht, und es soll dort stehen.
### Wer darf unter Pressluftatmer?
![Atemschutz](screenshots/31-atemschutz-light.png)
**Atemschutz** zeigt jeden Träger mit seinem Stand: G26, Belastungsübung,
Einsatzübung. Wer eine der Voraussetzungen nicht erfüllt, steht rot da — mit
Klartext, woran es liegt, nicht nur mit einer Farbe.
### Eine G26 eintragen
**Atemschutz** → **Nachweise** → Person wählen → G26 erfassen. Untersuchungs­datum,
Ergebnis und Gültigkeit reichen; den Befund speichert FLORIAN bewusst nicht.
Dasselbe für Belastungsübungen.
### Eine Überwachung führen
**Atemschutz** → **Überwachung eröffnen**. Trupp zusammenstellen, Druckwerte
in Intervallen eintragen, Rückzugsdruck im Blick behalten. FLORIAN rechnet den
Rückzugsdruck und warnt, bevor es knapp wird.
![Überwachung](screenshots/33-atemschutz-ueberwachung-light.png)
Nach dem Ende entsteht ein vollständiges Protokoll als PDF.
> Solange ein Trupp im Einsatz ist, lässt sich die Überwachung nicht beenden.
---
## Für den Kommandanten
### Mitglieder und Rollen
**Mitglieder** → Person anklicken → Rollen vergeben.
Neun Rollen, jede mit festem Rechteumfang. Die wichtigsten: Gerätewart,
Atemschutzgerätewart, Kassier, Schriftführer, Ausbilder.
**Jemand kommt nicht hinein?** Dann hat die Person eine Akte, aber kein Konto.
Konten verwaltet, wer den Server betreibt — unter *Wehren und Konten*.
### Einen Einsatz erfassen
**Einsätze** → **Einsatz anlegen**. Die sechs Zeitstempel (Alarmierung,
Ausrücken, Eintreffen, Einsatzende, Einrücken, Einsatzbereitschaft), die
beteiligten Fahrzeuge und die Mannschaft.
![Einsatz](screenshots/22-einsatz-light.png)
Daraus entsteht der **Einsatzbericht als PDF** und die Statistik fürs Jahr.
### Kostenersatz abrechnen
Fehlalarm einer Brandmeldeanlage, Öleinsatz mit Verursacher, vermieteter
Schulungsraum: **Kasse** → **Rechnungen** → *Rechnung schreiben*. Die Nummer
vergibt FLORIAN fortlaufend.
### Wenn jemand Auskunft über seine Daten verlangt
Kommt selten vor, hat aber eine Frist von einem Monat.
**Mitglieder** → Person → **Datenauskunft** → *Auskunft erstellen*. Daraus
entsteht ein PDF mit allem, was über die Person gespeichert ist. Ausdrucken
und aushändigen, fertig.
---
## Für den Kassier
![Kasse](screenshots/45-kasse-light.png)
### Buchen
**Kasse** → **Buchungen** → *Buchung erfassen*. Der Betrag ist immer positiv;
ob Einnahme oder Ausgabe, sagen die beiden Knöpfe daneben.
FLORIAN schlägt eine Kategorie vor — meist die richtige, weil er nachsieht,
wie ihr dieselbe Sache zuletzt gebucht habt.
### Kontoauszug einlesen
Statt fünfzig Umsätze abzutippen: im Online-Banking den **Umsatzexport**
herunterladen (CAMT.053 oder MT940), dann **Kasse** → **Buchungen** →
*Kontoauszug*.
Es entstehen **Entwürfe**, keine fertigen Buchungen — durchsehen musst du sie.
Umsätze, die schon in der Kasse stehen, erkennt FLORIAN und hakt sie nicht
noch einmal ab.
### Beiträge
Einmal im Jahr: **Kasse** → **Beiträge** → *Beitragslauf*. Vorher steht da, wie
viele Beiträge entstehen — und wer keinen passenden Satz hat.
Zahlungen hakst du in der Liste ab; dabei entsteht gleich die Buchung.
### Festschreiben — und was das bedeutet
Eine neue Buchung ist erst einmal ein **Entwurf** und änderbar. Mit
*Festschreiben* wird sie unveränderbar.
Ist danach etwas falsch, wird **gegengebucht**: eine zweite Buchung in die
andere Richtung, mit Begründung. Beide bleiben stehen. Das sieht nach mehr
Aufwand aus und ist genau der Punkt — eine verschwundene Buchung kann ein
Kassenprüfer nicht prüfen, eine berichtigte schon.
### Kassenprüfung
**Kasse** → **Abschluss** → *Kassenprüfung anlegen*. Links steht der Bestand
laut Buch, rechts trägst du ein, was gezählt wurde.
Bleibt eine Differenz, muss sie erklärt werden — sonst lässt sich der Abschluss
nicht festschreiben. In fünf Jahren weiß sonst niemand mehr, woher sie kam.
Danach entsteht der **Kassenprüfbericht als PDF** mit Unterschriftsfeldern.
---
## Für den, der den Server betreibt
### Sichern
```bash
npm run sicherung
```
Sichert Datenbank **und** Dateien. Das Ergebnis gehört auf ein anderes Gerät —
eine Sicherung auf derselben Festplatte hilft gegen einen Festplattenfehler
nicht.
### Einmal im Jahr proben
```bash
npm run wiederherstellen -- --quelle sicherungen/<Ordner>
```
So passiert nichts, es wird nur angezeigt, was geschähe. Erst mit `--wirklich`
wird zurückgespielt.
> Eine Sicherung, die nie zurückgespielt wurde, ist eine Vermutung. Der Ordner
> kann leer sein, der Auszug abgeschnitten — man erfährt es sonst an dem Tag,
> an dem man es nicht erfahren will.
### Aktualisieren
```bash
./update.sh --pruefen # nachsehen, ob es etwas Neues gibt
./update.sh # einspielen
```
Das Skript sichert von sich aus, bevor es etwas anfasst, und sagt bei einem
Fehler, wie der vorherige Stand zurückkommt.
---
## Wenn etwas nicht geht
| Was | Woran es meist liegt |
|---|---|
| **Anmeldung geht nicht** | Nach fünf Fehlversuchen ist das Konto fünf Minuten gesperrt. Kurz warten. |
| **Ein Menüpunkt fehlt** | Die Rolle fehlt. Der Kommandant vergibt sie unter *Mitglieder*. |
| **Ein PDF entsteht nicht** | Es wird im Hintergrund erzeugt; nach ein paar Sekunden die Seite neu laden. |
| **Das Terminal meldet niemanden an** | PIN falsch, oder das Tablet ist nicht mehr eingerichtet. |
| **Eine Buchung lässt sich nicht ändern** | Sie ist festgeschrieben. Gegenbuchen. |
Steht die Antwort nicht dabei: [Anleitung, letztes Kapitel](ANLEITUNG.md).
---
*FLORIAN läuft auf einem Server, den die Feuerwehr selbst betreibt. Es gibt
keine Telemetrie, keine Cloud und keine Weitergabe an Dritte — die Daten
bleiben im Gerätehaus.*