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
236 lines
13 KiB
Markdown
236 lines
13 KiB
Markdown
# Epic 03 — Digital File (Akte)
|
|
|
|
Details zu FILE-001 … FILE-009. FILE-001-007 vollständig, FILE-008 ergänzt am 2026-09-09
|
|
aus Open-Source-Vergleich (KP Front/InvenTree), FILE-009 (Notizen) ergänzt am
|
|
2026-09-10 — beide offen/ungeplant.
|
|
|
|
---
|
|
|
|
## FILE-001 — Akte-Grundgerüst
|
|
|
|
- **Ziel:** Zentrale Entität, die alle Teilbereiche einer Ressource bündelt.
|
|
- **Beschreibung:** Konzeptionelle „Akte" muss keine eigene Tabelle sein, sondern eine
|
|
Aggregations-Sicht (View/Backend-Endpunkt), der Stammdaten+Standort+Historie+Dokumente+
|
|
Prüfungen+Wartungen+Mängel für eine gegebene Ressourcen-ID zusammenführt.
|
|
- **Benutzerwert:** Ein Helfer/Prüfer sieht auf einen Blick alles zu einer Ressource, ohne
|
|
mehrere Screens durchklicken zu müssen.
|
|
- **Abhängigkeiten:** IDENT-001
|
|
- **Datenmodell:** kein neues Datenmodell — Aggregations-Logik über bestehende Tabellen (die
|
|
zum Zeitpunkt dieser Kachel z.T. noch nicht existieren, daher zunächst nur
|
|
Stammdaten+Historie als Platzhalter, Rest wird nachgezogen sobald die jeweiligen Module
|
|
existieren)
|
|
- **Backend:** GET /akte/{ressourcen_id} (aggregiert)
|
|
- **Frontend/Mobile:** —
|
|
- **QR-Code:** Ziel des QR-Scans (IDENT-008)
|
|
- **Seriennummer/Inventarnummer:** werden hier nur angezeigt, nicht neu verwaltet
|
|
- **Akte:** ist diese Kachel selbst
|
|
- **Rechte:** Lesen wie Ressourcen-Leserecht
|
|
- **Audit:** Akte-Aufruf selbst wird NICHT geloggt (zu granular/kein Mehrwert), nur
|
|
Änderungen an den Teilbereichen
|
|
- **Akzeptanzkriterien:** Endpunkt liefert für eine existierende Ressourcen-ID ein
|
|
zusammengesetztes JSON, für unbekannte ID 404.
|
|
- **Tests:** Aggregations-Test mit Dummy-Daten in mind. zwei Teilbereichen.
|
|
- **DoD:** Grundgerüst erweiterbar, ohne bestehende Endpunkt-Konsumenten zu brechen, wenn
|
|
neue Teilbereiche dazukommen.
|
|
|
|
## FILE-002 — Akte-Stammdatenbereich
|
|
|
|
- **Ziel:** Feste, immer sichtbare Kopfzeile jeder Akte.
|
|
- **Beschreibung:** Name, Kategorie/Typ, Inventarnummer, Seriennummer, Hersteller/Modell,
|
|
Status-Badge gebündelt.
|
|
- **Benutzerwert:** Sofortige Grundorientierung ohne Scrollen.
|
|
- **Abhängigkeiten:** FILE-001, IDENT-002/004/005, ASSET-004
|
|
- **Datenmodell:** keins neu, reine Aggregation
|
|
- **Backend:** Teil des FILE-001-Aggregations-Endpunkts
|
|
- **Frontend:** Kopfzeilen-Komponente
|
|
- **Mobile:** kompakte Variante (Karte statt Tabellenzeile)
|
|
- **QR-Code:** Druckbutton hier verankert (IDENT-007)
|
|
- **Seriennummer/Inventarnummer:** zentrale Anzeige hier
|
|
- **Akte:** ist dieser Bereich selbst
|
|
- **Rechte:** wie Lese-Recht
|
|
- **Audit:** nein (nur Anzeige)
|
|
- **Akzeptanzkriterien:** alle Kernfelder korrekt angezeigt, Status-Badge farbcodiert.
|
|
- **Tests:** Rendering-Test mit Beispieldaten.
|
|
- **DoD:** an mind. zwei unterschiedlichen Ressourcentypen (z.B. Fahrzeug + Gerät) getestet.
|
|
|
|
## FILE-003 — Akte-Standortbereich
|
|
|
|
- **Ziel:** Aktueller Standort direkt sichtbar, mit Sprung zur vollständigen
|
|
Standorthistorie.
|
|
- **Beschreibung:** Anzeige aktueller Standort (Lagerplatz/Fahrzeug/Person), Link zu
|
|
WH-Modul für Details.
|
|
- **Benutzerwert:** „Wo ist das Ding gerade" ist die häufigste Frage im Alltag.
|
|
- **Abhängigkeiten:** FILE-001, WH-001 (zumindest Platzhalter-Standortfeld, bevor
|
|
Warehouse-Epic fertig ist)
|
|
- **Datenmodell:** Referenz auf aktuellen Standort (Feld existiert ggf. schon am Asset,
|
|
hier nur Anzeige)
|
|
- **Backend:** Teil des Aggregations-Endpunkts
|
|
- **Frontend:** Standort-Kachel in der Akte
|
|
- **Mobile:** gleiche Anzeige, kompakt
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** ist dieser Bereich
|
|
- **Rechte:** wie Lese-Recht
|
|
- **Audit:** nein (Standortänderung selbst wird in WH-Modul geloggt, hier nur Anzeige)
|
|
- **Akzeptanzkriterien:** aktueller Standort korrekt, Link funktioniert.
|
|
- **Tests:** Rendering-Test.
|
|
- **DoD:** funktioniert, sobald WH-001 minimal existiert (auch als Platzhalter-Freitextfeld
|
|
vor vollem Warehouse-Modul akzeptabel).
|
|
|
|
## FILE-004 — Akte-Verantwortlichkeitsbereich
|
|
|
|
- **Ziel:** Klar erkennbar, wer für eine Ressource zuständig ist.
|
|
- **Beschreibung:** Anzeige zuständige Person/Einheit (aus Personnel-Epic).
|
|
- **Benutzerwert:** Ansprechpartner bei Fragen/Problemen sofort ersichtlich.
|
|
- **Abhängigkeiten:** FILE-001, PERS-003 (zumindest Einheiten-Grundgerüst)
|
|
- **Datenmodell:** Referenz auf zuständige Einheit/Person
|
|
- **Backend:** Teil des Aggregations-Endpunkts
|
|
- **Frontend:** Verantwortlichkeits-Kachel
|
|
- **Mobile:** gleiche Anzeige
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** ist dieser Bereich
|
|
- **Rechte:** wie Lese-Recht; Ändern nur Administrator/Zugführer
|
|
- **Audit:** Änderung wird geloggt
|
|
- **Akzeptanzkriterien:** Zuständigkeit anzeigen/ändern funktioniert, Änderung geloggt.
|
|
- **Tests:** Anzeige- und Änderungstest.
|
|
- **DoD:** funktioniert mit mind. einer Einheit.
|
|
|
|
## FILE-005 — Akte-Historienbereich
|
|
|
|
- **Ziel:** Chronologische Ereignisliste je Ressource, direkt in der Akte statt in einem
|
|
separaten globalen Log.
|
|
- **Beschreibung:** Gefilterte Sicht auf FOUND-006 (Audit-Log), gefiltert nach
|
|
`entitaet_id`.
|
|
- **Benutzerwert:** „Was ist mit diesem Gerät in letzter Zeit passiert" auf einen Blick.
|
|
- **Abhängigkeiten:** FILE-001, FOUND-006
|
|
- **Datenmodell:** keins neu
|
|
- **Backend:** Filter-Query auf Audit-Log nach Ressourcen-ID
|
|
- **Frontend:** Zeitleisten-Komponente in der Akte
|
|
- **Mobile:** kompakte Liste
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** ist dieser Bereich
|
|
- **Rechte:** wie Lese-Recht (evtl. eingeschränkter als Vollzugriff auf globales Audit-Log)
|
|
- **Audit:** zeigt Audit-Daten, erzeugt selbst keine
|
|
- **Akzeptanzkriterien:** Ereignisse chronologisch, korrekt gefiltert auf die Ressource.
|
|
- **Tests:** Filter-Test mit mehreren Ressourcen (keine Vermischung).
|
|
- **DoD:** mind. drei unterschiedliche Ereignistypen sichtbar getestet.
|
|
|
|
## FILE-006 — Akte-Übersichtsseite (UI)
|
|
|
|
- **Ziel:** EIN Screen, der alle Teilbereiche zusammen zeigt.
|
|
- **Beschreibung:** Frontend-Seite, konsumiert den FILE-001-Aggregations-Endpoint, rendert
|
|
FILE-002…005 untereinander (Desktop) bzw. als Tabs (Mobile).
|
|
- **Benutzerwert:** zentrale Anlaufstelle je Ressource — Zielseite des QR-Scans (IDENT-008).
|
|
- **Abhängigkeiten:** FILE-002…005
|
|
- **Datenmodell:** keins
|
|
- **Backend:** keins zusätzlich
|
|
- **Frontend:** Seite `/akte/{typ}/{id}`
|
|
- **Mobile:** responsive Variante (Tabs statt nebeneinander)
|
|
- **QR-Code:** Zielseite von IDENT-008
|
|
- **Seriennummer/Inventarnummer:** Anzeige via FILE-002
|
|
- **Akte:** ist diese Kachel selbst
|
|
- **Rechte:** wie Lese-Recht
|
|
- **Audit:** nein
|
|
- **Akzeptanzkriterien:** Seite lädt alle Teilbereiche fehlerfrei; fehlende Teilbereiche
|
|
(z.B. noch keine Dokumente) zeigen „keine Daten" statt Fehler.
|
|
- **Tests:** Rendering-Test mit vollen Daten, Rendering-Test mit leeren Teilbereichen.
|
|
- **DoD:** von IDENT-008 aus erreichbar, produktiv nutzbar.
|
|
|
|
## FILE-007 — Akte-Audit-Anbindung
|
|
|
|
- **Ziel:** Sicherstellen, dass jede Änderung an einem Akte-Teilbereich auch im
|
|
Historienbereich (FILE-005) auftaucht — keine stillen Lücken.
|
|
- **Beschreibung:** Audit-Log-Aufrufe an den Schreib-Endpunkten der Teilbereiche
|
|
systematisch nachrüsten/verifizieren (Konsistenz-Check über alle Mutations-Endpunkte).
|
|
- **Benutzerwert:** Vertrauen, dass die Akte-Historie wirklich vollständig ist.
|
|
- **Abhängigkeiten:** FILE-005
|
|
- **Datenmodell:** keins
|
|
- **Backend:** Audit-Log-Aufruf-Vervollständigung, ggf. Lint-Regel/Test dagegen
|
|
- **Frontend/Mobile:** keins
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** Qualitätssicherung für den Historienbereich
|
|
- **Rechte:** keine neuen
|
|
- **Audit:** ist Gegenstand dieser Kachel
|
|
- **Akzeptanzkriterien:** für jeden Schreibendpunkt eines Akte-Teilbereichs existiert ein
|
|
Audit-Log-Test.
|
|
- **Tests:** Coverage-Check „jeder Mutations-Endpunkt loggt".
|
|
- **DoD:** keine bekannte Lücke mehr — vgl. MABEA, wo genau diese Art Lücke (Mangel/
|
|
Personal/Objekt-Änderungen ohne Audit-Eintrag) schon einmal real gefunden und gefixt
|
|
wurde. Diese Kachel ist der methodische Nachfolgeschritt: systematisch statt punktuell.
|
|
|
|
## FILE-008 — Manipulationssicheres Audit-Journal (Hash-Kette, P2, neu)
|
|
|
|
- **Ziel:** Nachweisen können, dass ein Audit-Log-Eintrag nachträglich nicht verändert
|
|
wurde — über reines Vorhandensein (FILE-007) hinaus.
|
|
- **Beschreibung:** Jeder Audit-Log-Eintrag bekommt zusätzlich einen Hash über
|
|
(Eintragsinhalt + Hash des Vorgängereintrags) — bricht die Kette erkennbar, sobald
|
|
irgendein historischer Eintrag verändert wird. Betrifft insbesondere Kontroll-
|
|
Ergebnisse, Wartungsprotokolle und Soll/Ist-Korrekturbuchungen (WH-006), wo
|
|
BOS-Dokumentationspflichten Nachweisbarkeit verlangen.
|
|
- **Benutzerwert:** Rechtssicherer Nachweis bei Prüfungen/Vorfällen, dass Protokolle
|
|
echt und unverändert sind — nicht nur „es gibt einen Log-Eintrag", sondern „der
|
|
Log-Eintrag ist beweisbar unverändert".
|
|
- **Abhängigkeiten:** FOUND-006 (Audit-Log), FILE-007
|
|
- **Datenmodell:** `historie.hash` (SHA-256 über Inhalt+Vorgänger-Hash) — **nicht**
|
|
`audit_log`, MABEAs reale Tabelle heißt `historie` (`FOUND-006`). **Entschieden
|
|
(2026-09-09): Kette läuft pro Ressource (Objekt-ID)**, nicht global — jedes
|
|
Objekt hat seine eigene Kette, erster Eintrag je Objekt mit fixem
|
|
Genesis-Wert. Verifikations-Endpoint prüft/meldet damit je Objekt einzeln statt
|
|
eine einzige globale Bruchstelle für die ganze `historie`-Tabelle.
|
|
- **Backend:** Hash-Berechnung beim Schreiben, Verifikations-Endpoint (Kette prüfen,
|
|
Bruchstelle melden falls vorhanden)
|
|
- **Frontend:** „Integrität geprüft ✓"-Anzeige im Akte-Historienbereich (FILE-005),
|
|
Warnung bei Kettenbruch
|
|
- **Mobile:** nein
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** Vertrauensanzeige im Historienbereich
|
|
- **Rechte:** Verifikation: Administrator; Anzeige „geprüft"-Status: wie Lese-Recht
|
|
- **Audit:** ist Gegenstand dieser Kachel selbst
|
|
- **Akzeptanzkriterien:** nachträgliche Änderung eines historischen Eintrags (z.B. direkt
|
|
in der DB) wird vom Verifikations-Lauf erkannt und gemeldet.
|
|
- **Tests:** Kettenbruch-Erkennungstest (Eintrag nachträglich manipuliert → Verifikation
|
|
schlägt fehl), Normalfall-Test (unveränderte Kette → Verifikation erfolgreich).
|
|
- **DoD:** offen. **Referenz (Open-Source-Vergleich 2026-09-09):** KP Front
|
|
(`feuerwehr-oberwil/kp-front`, AGPL-3.0-or-later — nur Muster) nutzt genau dieses
|
|
Hash-Ketten-Prinzip für sein Einsatzjournal. Kombiniert mit InvenTree-Vorbild
|
|
(lückenloser Stock-History-Trail bei jeder Bestandsänderung) — WH-006-Korrekturbuchungen
|
|
sollten ebenfalls durch diese Kette laufen, sobald WH-006 umgesetzt wird.
|
|
|
|
## FILE-009 — Freitext-Notizen in der Akte (P2, neu, 2026-09-10)
|
|
|
|
- **Ziel:** Formlose, freie Notizen zu einer Ressource festhalten — Dinge, die in
|
|
keinen strukturierten Teilbereich (Prüfung/Mangel/Wartung) passen.
|
|
- **Beschreibung:** Einfaches Freitextfeld je Ressource, mehrere Notizen möglich
|
|
(chronologische Liste, nicht nur ein einzelnes Textfeld), mit Autor+Zeitstempel.
|
|
Kein Rich-Text/Formatierung nötig, reiner Text reicht.
|
|
- **Benutzerwert:** Raum für Kontext, der sonst mündlich verlorengeht (z.B.
|
|
„Funkgerät klemmt manchmal beim Einschalten, noch kein reproduzierbarer Fehler
|
|
für ein Mangel-Ticket" oder „Rücksprache mit Hersteller am 12.03. — Ersatzteil
|
|
in 2 Wochen").
|
|
- **Abhängigkeiten:** FILE-001
|
|
- **Datenmodell:** `akte_notiz` (id, entitaet_typ, entitaet_id, text, autor_id,
|
|
erstellt_am) — polymorph wie `dokument` (DOC-001), gleiches Kopplungsmuster
|
|
- **Backend:** POST/GET/DELETE (Löschen nur eigene Notiz oder Administrator)
|
|
- **Frontend:** Notiz-Panel in der Akte (FILE-006-Übersichtsseite), Eingabefeld +
|
|
chronologische Liste
|
|
- **Mobile:** Anzeige + Erfassung (einfaches Textfeld, kein Zusatzaufwand)
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** ist dieser Bereich selbst
|
|
- **Rechte:** Anlegen: Mitarbeiter+; Löschen: eigene Notiz oder Administrator
|
|
- **Audit:** Anlegen/Löschen geloggt
|
|
- **Akzeptanzkriterien:** mehrere Notizen chronologisch je Ressource sichtbar,
|
|
Löschen nur durch Autor oder Administrator möglich.
|
|
- **Tests:** CRUD-Test, Berechtigungstest (fremde Notiz nicht löschbar außer als
|
|
Administrator).
|
|
- **DoD:** offen.
|
|
|
|
---
|
|
|
|
**MABEA-Ist-Stand-Abgleich (aktualisiert 2026-09-05):** FILE-001…006 sind umgesetzt und
|
|
live deployed — `GET /api/v1/akte/objekt/{id}` bündelt Stammdaten/Standort/
|
|
Verantwortlichkeit/Historie/Dokumente/Geräte-Prüfungen/Mängel, Frontend-Seite
|
|
`/akte/objekt/{id}` konsumiert den Endpunkt, Link aus der Objektliste. **FILE-007**
|
|
(systematischer Audit-Konsistenz-Check über alle Mutations-Endpunkte) bewusst noch offen
|
|
gelassen — eigene, spätere Qualitätssicherungs-Kachel, keine Sichtbarkeits-/Nutzenlücke für
|
|
den Anwender. QR-Scan (IDENT-008) zeigt weiterhin auf die Kontrolle, nicht auf die Akte -
|
|
Verknüpfung dorthin ist ein kleiner Nachzug, kein Neubau.
|