Phase 11: Freigabereife
Pruefung / pruefung (pull_request) Canceled after 0s
Pruefung / oberflaeche (pull_request) Canceled after 0s

Kein Modul, sondern die drei Software-Voraussetzungen fuer 1.0.0:
Auskunft nach Art. 15 DSGVO, ein geprueftes Sicherungskonzept und eine
Pipeline.

Das Auskunftsrecht war ein Versprechen ohne Umsetzung: `person.export`
stand seit Phase 0 im Katalog und war dem Kommandanten zugewiesen,
implementiert war nichts. Ohne Auskunftsseite ist ein Loeschkonzept nicht
abnehmbar. Jetzt sammelt FLORIAN dreizehn Abschnitte ueber eine Person,
mit dem Zweck ueber jedem - Art. 15 verlangt nicht nur die Daten, sondern
auch Zwecke und Rechte, und eine blosse Liste erfuellt die Pflicht nicht.
Ein Durchgang liefert Anzeige, PDF und JSON nach Art. 20.

Die Trennlinie ist "ueber mich" gegen "von mir": was ueber die Person
gespeichert ist, steht vollstaendig drin, auch das Unangenehme. Was sie
getan hat, steht als Zahl drin - die Pruefprotokolle gehoeren zum
Nachweisbestand der Wehr, und vollstaendig ausgeliefert kaeme jeder ueber
eine Selbstauskunft an die Geraeteakten.

Die Rueckspielprobe hat sich sofort bezahlt gemacht: der erste Versuch
lief sauber durch und hatte dabei saemtliche Unveraenderlichkeitsgarantien
der Datenbank entfernt. Die Vorgabeprivilegierung aus dem Init-Skript gibt
jeder von pg_restore neu angelegten Tabelle wieder alle Rechte, und GRANT
kann nur hinzufuegen. Die Anwendungsrolle durfte danach das Audit-Log
aendern, Wiki-Fassungen loeschen, Kiosk-Vorgaenge umschreiben - und nichts
haette darauf hingewiesen. Gefunden haben es vier Datenbanktests
unmittelbar nach der Probe, also genau die Probe, wegen der 1.0.0 sie
verlangt.

Die Pipeline ist geschrieben, aber NICHT erprobt: in Gitea ist kein
act_runner registriert. Das steht so im README und im Devlog, damit sich
niemand auf eine Pruefung verlaesst, die nicht stattfindet.

601 Unit-Tests gruen; Sicherung und Wiederherstellung einmal vollstaendig
durchgefuehrt und die Tests danach erneut gruen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-05 17:16:08 +02:00
co-authored by Claude Opus 5
parent 91742a0dd7
commit 9156dcc144
21 changed files with 2495 additions and 8 deletions
+119 -2
View File
@@ -1,6 +1,6 @@
# Anleitung
Bedienung von FLORIAN, Stand Phase 10 (Version 0.11.0). Die Bilder zeigen die
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.
---
@@ -2253,7 +2253,124 @@ jeweiligen Detailseite sichtbar.
---
## 61. Wenn etwas nicht geht
## 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 |
|---|---|---|