Files
MABEA/arbeitskacheln/12_personnel.md
T
patrickandClaude Sonnet 5 286227b763
CI / backend-tests (push) Failing after 1m51s
CI / frontend-build (push) Successful in 18s
docs: Personnel-Epic komplettiert (PERS-001..007)
PERS-003/005/006/007 vollständig in MABEA umgesetzt (Qualifikations-/
Berechtigungsprüfung sogar schon live getestet). PERS-001/002 (Person<->
Benutzer-Trennung) bleiben einziger echter offener Architekturentscheid im
gesamten Backlog - bewusst zurückgestellt bis konkreter Bedarf. PERS-004
(fachliche Funktion wie "Zugführer", getrennt von System-Rollen) fehlt
komplett.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
2026-09-05 15:41:14 +02:00

170 lines
8.0 KiB
Markdown

# Epic 12 — Personnel
Details zu PERS-001 … PERS-007 (vollständig).
---
## PERS-001 — Person (fachlich)
- **Ziel:** Fachliches Konzept einer Person, getrennt vom technischen Login.
- **Beschreibung:** Person-Entität (Name, Geburtsdatum optional, Kontaktdaten) — kann
existieren OHNE Systemzugang (z.B. Jugendgruppe, externe Kontaktperson).
- **Benutzerwert:** Nicht jede Person im System braucht einen Login (Kinder/Jugendliche,
externe Helfer ohne digitale Nutzung).
- **Abhängigkeiten:** FOUND-002
- **Datenmodell:** `person` (id, name, geburtsdatum, kontakt)
- **Backend:** CRUD
- **Frontend:** Verwaltung
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein (Person ist keine physische Ressource im
engeren Sinn — ein optionaler QR-Ausweis wäre ein Erweiterungspunkt, kein Kern)
- **Akte:** eigene Personen-Akte möglich (eigenes Konzept, nicht Ressourcen-Akte)
- **Rechte:** Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** Person ohne Benutzerkonto anlegbar.
- **Tests:** CRUD-Test, Test „Person ohne Benutzer funktioniert".
- **DoD:** **HIGH RISK** (siehe Decision Required #4 in `00_index.md`) — größter Umbau
des gesamten Personal-Bereichs, da MABEA Person=Benutzer verschmolzen hat. Vor
Umsetzung: echten Bedarf klären (gibt es in der Praxis tatsächlich Personen ohne
Login-Bedarf, die trotzdem im System geführt werden müssen?).
## PERS-002 — Benutzer (technisch, verknüpft)
- **Ziel:** Systemzugang, verknüpft mit einer Person.
- **Beschreibung:** `Benutzer` (login, passwort_hash) referenziert optional eine Person
(1:1 oder 1:0..1).
- **Benutzerwert:** Systemzugang bleibt wie gehabt, aber fachlich sauber von der
Personen-Stammdatenverwaltung getrennt.
- **Abhängigkeiten:** PERS-001, FOUND-003
- **Datenmodell:** `benutzer.person_id` (FK, optional während Übergang)
- **Backend:** Migration bestehender Benutzer zu Person-Datensätzen
- **Frontend:** Benutzeranlage erzeugt/verknüpft Person
- **Mobile:** kein Unterschied
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** nein direkt
- **Rechte:** bestehende Rechte-Logik unverändert
- **Audit:** Verknüpfung geloggt
- **Akzeptanzkriterien:** bestehende Benutzer funktionieren nach Migration unverändert.
- **Tests:** Migrationstest (keine Datenverluste), Regressionstest bestehender
Auth-Flows.
- **DoD:** **DECISION REQUIRED** — das ist der eigentliche Bruch. Lohnt sich das, wenn
aktuell niemand Personen ohne Login braucht? Empfehlung: zurückstellen bis konkreter
Bedarf auftritt (z.B. Jugendgruppen-Verwaltung), dann als eigenes fokussiertes Vorhaben
angehen, nicht „nebenbei" im Rahmen einer anderen Kachel.
## PERS-003 — Einheiten/Organisationsstruktur
- **Ziel:** Hierarchische Gliederung von Personen in Züge/Gruppen.
- **Beschreibung:** Einheit mit optionaler übergeordneter Einheit, Person/Benutzer gehört
zu einer Einheit.
- **Benutzerwert:** Organisationsstruktur abbildbar (Zug → Gruppe → Trupp).
- **Abhängigkeiten:** PERS-001 (oder direkt Benutzer, falls PERS-001 zurückgestellt)
- **Datenmodell:** `einheit` (id, name, uebergeordnete_einheit_id, standort_id)
- **Backend:** CRUD
- **Frontend:** Verwaltung
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Verantwortlichkeitsbereich (FILE-004) referenziert Einheit
- **Rechte:** Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** mehrstufige Hierarchie anlegen (Zug→Gruppe).
- **Tests:** Baum-Test.
- **DoD:** deckt sich mit MABEA (`Einheit`-Modell bereits umgesetzt, self-referenzierend)
— allerdings bisher nur eine Ebene in der Praxis genutzt, mehrstufige Hierarchie ist
technisch möglich aber ungetestet im echten Einsatz.
## PERS-004 — Funktionen/Rollen im Einsatzkontext
- **Ziel:** Fachliche Funktion einer Person innerhalb einer Einheit (Zugführer, Melder,
Fahrer, ...) — unterscheidet sich von System-Rollen (Rechte).
- **Beschreibung:** Funktion als Stammdatum, Zuordnung Person↔Einheit↔Funktion.
- **Benutzerwert:** „Wer ist der Zugführer von Zug 3" beantwortbar, unabhängig von
Systemrechten.
- **Abhängigkeiten:** PERS-003
- **Datenmodell:** `funktion` (id, name), `einheit_mitgliedschaft` (person_id,
einheit_id, funktion_id)
- **Backend:** CRUD
- **Frontend:** Zuordnung
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Verantwortlichkeitsbereich
- **Rechte:** Administrator/Zugführer
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** Person mit Funktion in Einheit zuordnen.
- **Tests:** CRUD-Test.
- **DoD:** komplett neu in MABEA — Einheit-Zuordnung existiert (`Benutzer.einheit_id`),
aber keine fachliche Funktion/Rolle INNERHALB der Einheit (nur System-Rollen wie
„Materialverantwortlicher" existieren — das ist etwas anderes als „Zugführer von
Zug 3").
## PERS-005 — Qualifikationen/Lehrgänge
- **Ziel:** Nachgewiesene Qualifikationen einer Person.
- **Beschreibung:** Qualifikationstyp-Katalog + Zuordnung mit Erwerbsdatum/Gültigkeit.
- **Benutzerwert:** Nachweis von Ausbildungsstand.
- **Abhängigkeiten:** PERS-001
- **Datenmodell:** `qualifikationstyp`, `benutzer_qualifikation`
- **Backend:** CRUD
- **Frontend:** Verwaltung
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** eigener Bereich (Personen-Akte)
- **Rechte:** Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** Qualifikation mit Gültigkeit erfassen.
- **Tests:** CRUD-Test.
- **DoD:** deckt sich 1:1 mit MABEA (`Qualifikationstyp`/`BenutzerQualifikation` bereits
umgesetzt, inkl. Ablauf-Dashboard-Kachel).
## PERS-006 — Führerscheine/Berechtigungen mit Gültigkeit
- **Ziel:** Spezialfall von PERS-005 — Fahrerlaubnis, die bestimmt, wer welches Fahrzeug
fahren darf.
- **Beschreibung:** Führerschein als Qualifikationskategorie, Verknüpfung zu
AssetType-Anforderung.
- **Benutzerwert:** „Wer darf dieses Fahrzeug fahren" automatisch beantwortbar.
- **Abhängigkeiten:** PERS-005, ASSET-002
- **Datenmodell:** `objekttyp_qualifikationsanforderung` (M:N)
- **Backend:** Berechtigungsprüfungs-Endpunkt
- **Frontend:** Anzeige „fehlende Qualifikation"
- **Mobile:** Anzeige vor Fahrtantritt
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Fahrzeug-Akte zeigt erforderliche Qualifikation
- **Rechte:** wie Lese-Recht
- **Audit:** nein zusätzlich
- **Akzeptanzkriterien:** Prüfung liefert korrekt berechtigt/nicht berechtigt + fehlende
Typen.
- **Tests:** Berechtigungstest (mit/ohne/abgelaufene Qualifikation).
- **DoD:** deckt sich 1:1 mit MABEA — bereits umgesetzt und in dieser Session live gegen
den Produktivserver getestet (`GET /objekte/{id}/berechtigung/{benutzer_id}`).
## PERS-007 — Qualifikationsablauf-Warnungen
- **Ziel:** Frühwarnung vor ablaufenden Qualifikationen.
- **Beschreibung:** Dashboard-Kachel analog Prüftermine/Ablaufdaten.
- **Benutzerwert:** Rechtzeitig Nachschulung planen, bevor jemand mit abgelaufener
Qualifikation eingeteilt wird.
- **Abhängigkeiten:** PERS-006
- **Datenmodell:** keins neu
- **Backend:** Abfrage bevorstehender Abläufe
- **Frontend:** Dashboard-Kachel
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** nein (übergreifende Sicht)
- **Rechte:** Verantwortliche
- **Audit:** nein
- **Akzeptanzkriterien:** korrekte Sortierung, 60 Tage Standard-Vorlauf.
- **Tests:** Schwellenwerttest.
- **DoD:** deckt sich 1:1 mit MABEA
(`dashboard.bevorstehende_qualifikationsablaeufe()`, bereits umgesetzt).
---
**MABEA-Ist-Stand-Abgleich:** PERS-003, 005, 006, 007 sind vollständig in MABEA
umgesetzt und größtenteils sogar schon live getestet. **PERS-001/002 (Person↔Benutzer-
Trennung) bleiben der einzige echte offene Architekturentscheid im gesamten Backlog** —
bewusst nicht einfach umgesetzt, sondern als Decision Required markiert, da der Nutzen
(Personen ohne Login) bisher nicht als konkreter Bedarf geäußert wurde. **PERS-004
(fachliche Funktion innerhalb einer Einheit, z.B. „Zugführer") fehlt komplett** — leicht
zu verwechseln mit den bestehenden System-Rollen, ist aber ein eigenständiges Konzept.