Files
MABEA/arbeitskacheln/12_personnel.md
T
patrickandClaude Sonnet 5 9c6426190e docs(arbeitskacheln): Open-Source-/HiOrg-Vergleich ausgewertet, 14 neue Kacheln ausgearbeitet
Vergleich mit InvenTree, Snipe-IT, Grocy, Shelf.nu, Resgrid, KP Front, FleetMS,
HiOrg-Server ergibt neue Kacheln (ASSET-010 Custody, FILE-008 Hash-Audit-Journal,
FILE-009 Notizen, NOTIF-003, MAINT-007 Tankbuch, ZUST-003 Standort-Scoping,
FOUND-007 Import/Export, FOUND-008 Fristen-Dienst, READY-006 Statistik-Dashboard,
UI2-006..010) sowie Referenz-Ergänzungen bei bestehenden Lücken. Alle Design-
Entscheidungen (Datenmodell, Sicherheitsanforderungen bei ASSET-010) geklärt.

Neues Epic 23 (Flutter-Begleit-App, Sondierungs-Prototyp FLUT-001) inkl. geklärtem
TLS-Blocker (Domain mabea.perlbach-edv.de mit Let's-Encrypt-Zertifikat statt
selbstsigniertem Server-Zertifikat).

Alle Kacheln bleiben offen/ungeplant, nur ausgearbeitet, keine Implementierung.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 00:49:32 +02:00

169 lines
7.9 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:** ✅ umgesetzt (2026-09-08) — echter Bedarf via AskUserQuestion bestätigt,
danach live deployed. `Person`-Modell (Migration 0034 mit Backfill bestehender
Benutzer), `/personen`-CRUD, Admin-UI `PersonSection.tsx`.
## 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:** ✅ umgesetzt (2026-09-08) — `Benutzer.person_id` FK (nullable), `/benutzer`
verknüpft bestehende Person oder legt automatisch neue Person an, wenn keine
`person_id` angegeben wird (Backward-Kompatibilität). Backfill bestehender Benutzer
via `ROW_NUMBER()`-1:1-Positionsmatch statt Name-Join (Namenskollisionen vermieden).
## 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 (aktualisiert 2026-09-09):** PERS-001…003, 005, 006, 007
sind vollständig in MABEA umgesetzt und live deployed. PERS-001/002 (Person↔Benutzer-
Trennung) waren der größte offene Architekturentscheid im gesamten Backlog — echter
Bedarf wurde am 2026-09-08 bestätigt, danach umgesetzt und deployed (Details siehe
PERS-001/002 oben). **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.