Files
MABEA/arbeitskacheln/07_warehouse.md
T
patrickandClaude Sonnet 5 6aa45a3101
CI / backend-tests (push) Failing after 1m54s
CI / frontend-build (push) Successful in 20s
docs: Warehouse-Epic komplettiert (WH-001..007)
Größter Abstand zwischen Backlog-Anspruch und MABEA-Ist-Stand bisher: Standort
ist flach (keine Hierarchie), kein Lagerplatz-Konzept, Lagerbewegung nur auf
Objekt-/Standort-Ebene statt Material-/Lagerplatz-Ebene, kein Inventur-Konzept.

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

171 lines
8.1 KiB
Markdown

# Epic 07 — Warehouse
Details zu WH-001 … WH-007 (vollständig).
---
## WH-001 — Lager-Stammdaten (Hierarchie)
- **Ziel:** Mehrstufige Standort-Hierarchie statt flacher Standort-Liste.
- **Beschreibung:** Organisation→Standort→Gebäude→Raum→Lager als Baum, nicht nur ein
flaches „Standort"-Feld.
- **Benutzerwert:** Größere Organisationen mit mehreren Gebäuden/Lagern pro Standort
abbildbar.
- **Abhängigkeiten:** FOUND-002
- **Datenmodell:** `lagerort` (id, name, parent_id, typ:
organisation/standort/gebaeude/raum/lager)
- **Backend:** CRUD, Baum-Query
- **Frontend:** Baum-/Breadcrumb-Navigation
- **Mobile:** einfache Auswahl
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Standortbereich referenziert Lagerort statt flachen Standort
- **Rechte:** Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** mehrstufige Hierarchie anlegen und navigieren.
- **Tests:** Baum-Test (Kind/Eltern-Beziehungen korrekt).
- **DoD:** mind. 3 Ebenen tief angelegt und funktionsfähig. **Lücke gegenüber MABEA:**
`Standort` ist flach (kein Parent) — echte strukturelle Erweiterung, kein reiner Nachzug.
## WH-002 — Lagerplätze
- **Ziel:** Feingranulare Position innerhalb eines Lagers (Regal/Fach/Box).
- **Beschreibung:** Lagerplatz als unterste Hierarchieebene (oder eigenes Konzept
unterhalb WH-001), mit eigenem Code/QR.
- **Benutzerwert:** „Wo genau im Regal" statt nur „irgendwo im Lager X".
- **Abhängigkeiten:** WH-001
- **Datenmodell:** `lagerplatz` (id, lagerort_id, code, bezeichnung)
- **Backend:** CRUD
- **Frontend:** Verwaltung
- **Mobile:** Scan-Unterstützung
- **QR-Code:** eigener QR je Lagerplatz (IDENT-001-Konzept gilt auch für Lagerplätze, nicht
nur physische Assets — deckt die Ursprungs-Anforderung `/lager/HALLE-01` ab)
- **Seriennummer/Inventarnummer:** nein
- **Akte:** Lagerplatz kann eigene „Akte" haben (was liegt hier) — Sonderfall des
Akte-Konzepts
- **Rechte:** Materialwart/Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** Lagerplatz anlegen mit eigenem Code, QR generierbar.
- **Tests:** CRUD-Test.
- **DoD:** QR-Scan eines Lagerplatzes zeigt dessen Inhalt (Kopplung zu WH-003).
## WH-003 — Bestand je Lagerplatz
- **Ziel:** Wissen, wie viel wovon an welchem Lagerplatz liegt.
- **Beschreibung:** Bestandstabelle (Consumable-/Asset-Menge je Lagerplatz).
- **Benutzerwert:** Grundlage für Einlagerung/Auslagerung/Inventur.
- **Abhängigkeiten:** WH-002, INV-003
- **Datenmodell:** `bestand` (lagerplatz_id, material_id, menge) — lagerplatz-spezifisch
statt nur „irgendein Standort" wie in INV-003
- **Backend:** Bestandsabfrage je Lagerplatz
- **Frontend:** Lagerplatz-Detailansicht mit Inhalt
- **Mobile:** Anzeige beim Scan
- **QR-Code:** Scan Lagerplatz zeigt Bestand
- **Seriennummer/Inventarnummer:** nein
- **Akte:** Lagerplatz-Akte
- **Rechte:** wie Lese-Recht
- **Audit:** nein (Bewegungen selbst werden in WH-004/007 geloggt)
- **Akzeptanzkriterien:** Bestand je Lagerplatz korrekt abfragbar.
- **Tests:** Abfragetest.
- **DoD:** konsistent mit INV-003 (kein Doppelbestand-Tracking).
## WH-004 — Einlagerung/Auslagerung
- **Ziel:** Material einem Lagerplatz zubuchen/abbuchen.
- **Beschreibung:** Aktionen, die Bestand (WH-003) verändern und dabei protokolliert
werden (WH-007).
- **Benutzerwert:** Kernaktion im Lageralltag.
- **Abhängigkeiten:** WH-003
- **Datenmodell:** keins neu (nutzt `bestand` + WH-007-Protokoll)
- **Backend:** Ein-/Auslagerungs-Endpunkte
- **Frontend:** Aktion in Lagerplatz-/Material-Ansicht
- **Mobile:** scan-gestützt (Lagerplatz scannen, Menge eingeben)
- **QR-Code:** zentral für den mobilen Ablauf
- **Seriennummer/Inventarnummer:** nein
- **Akte:** Bestandsverlauf
- **Rechte:** Mitarbeiter+ (Materialwart für Korrekturen)
- **Audit:** jede Bewegung geloggt (WH-007)
- **Akzeptanzkriterien:** Einlagerung erhöht, Auslagerung verringert Bestand korrekt,
negativer Bestand unmöglich.
- **Tests:** Grenzwerttest.
- **DoD:** funktioniert scan-gestützt im Feldtest.
## WH-005 — Umlagerung
- **Ziel:** Material von einem Lagerplatz zu einem anderen verschieben (auch über Lager
hinweg), in einem Schritt statt Aus+Ein manuell.
- **Beschreibung:** Kombinierte Aktion: Auslagerung an Quelle + Einlagerung an Ziel
atomar, mit Grund.
- **Benutzerwert:** Ein Klick statt zwei fehleranfällige Einzelschritte.
- **Abhängigkeiten:** WH-004
- **Datenmodell:** keins neu (nutzt WH-004 zweifach in einer Transaktion + WH-007-Eintrag
mit Von/Nach)
- **Backend:** Umlagerungs-Endpunkt (transaktional)
- **Frontend:** „Verschieben"-Aktion
- **Mobile:** Scan Quelle + Scan Ziel
- **QR-Code:** zentral
- **Seriennummer/Inventarnummer:** nein
- **Akte:** Bewegungshistorie
- **Rechte:** Materialwart+
- **Audit:** WH-007-Eintrag
- **Akzeptanzkriterien:** Umlagerung schlägt fehlerfrei fehl oder läuft komplett durch
(keine halbe Buchung).
- **Tests:** Transaktions-Test (Fehler führt zu Rollback, keine Teilbuchung).
- **DoD:** deckt sich konzeptionell mit MABEA `Lagerbewegung`, aber auf Lagerplatz- statt
nur Standort-Ebene (MABEA kennt keine Lagerplätze, nur Standorte).
## WH-006 — Inventur & Bestandskorrektur
- **Ziel:** Periodischer Abgleich Soll-Bestand (System) vs. Ist-Bestand (gezählt).
- **Beschreibung:** Inventurlauf je Lager/Lagerplatz, Erfassung Ist-Menge, automatische
Korrekturbuchung bei Abweichung mit Begründung.
- **Benutzerwert:** Systematische Fehlerkorrektur statt stiller Bestandsdrift über Zeit.
- **Abhängigkeiten:** WH-003
- **Datenmodell:** `inventur` (id, lagerort_id, gestartet_am, status),
`inventur_position` (inventur_id, material_id, soll, ist)
- **Backend:** Inventur starten/erfassen/abschließen
- **Frontend:** Inventur-Erfassungsmaske
- **Mobile:** scan-gestützte Zählung
- **QR-Code:** Lagerplatz/Material scannen während der Inventur
- **Seriennummer/Inventarnummer:** Erfassung bei SN-pflichtigen Gütern inkl. SN-Abgleich
- **Akte:** Korrekturen erscheinen im Bestandsverlauf
- **Rechte:** Materialwart+ startet/schließt, Mitarbeiter+ erfasst
- **Audit:** jede Korrekturbuchung mit Begründung geloggt
- **Akzeptanzkriterien:** Abweichung erzeugt nachvollziehbare Korrekturbuchung, keine
stille Anpassung ohne Log.
- **Tests:** Inventur-Zyklus-Test mit Abweichung.
- **DoD:** ein vollständiger Inventurzyklus durchgeführt. **Lücke:** MABEA hat kein
Inventur-Konzept, nur Kontrolle (Soll/Ist je Objekt, nicht als eigener Lagerlauf mit
Korrekturbuchung).
## WH-007 — Materialbewegungsprotokoll
- **Ziel:** Vollständige, lückenlose Historie aller Bestandsbewegungen.
- **Beschreibung:** Append-only Protokoll (Was/Menge/Von/Nach/Wer/Wann/Warum), Basis für
WH-004/005/006 und ASSET-006.
- **Benutzerwert:** Nachvollziehbarkeit, Diebstahl-/Schwund-Erkennung.
- **Abhängigkeiten:** WH-004, FOUND-006
- **Datenmodell:** `materialbewegung` (material_id, menge, von_lagerplatz_id,
nach_lagerplatz_id, benutzer_id, zeitpunkt, grund)
- **Backend:** log-Funktion, von WH-004/005/006 aufgerufen
- **Frontend:** Bewegungs-Liste/Filter
- **Mobile:** nur Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Historienbereich
- **Rechte:** wie Lese-Recht (Verantwortliche)
- **Audit:** eigenständiges Fach-Protokoll (analog ASSET-006, nicht generisches
FOUND-006-JSON — strukturierte Von/Nach-Felder gebraucht)
- **Akzeptanzkriterien:** jede Bestandsbewegung erzeugt genau einen Eintrag.
- **Tests:** Vollständigkeitstest (keine Bewegung ohne Protokolleintrag).
- **DoD:** deckt sich konzeptionell mit MABEA `Lagerbewegung` (dort schon vorhanden, aber
objekt-/standort-bezogen statt material-/lagerplatz-bezogen).
---
**MABEA-Ist-Stand-Abgleich:** Das gesamte Warehouse-Epic ist in MABEA nur **flach**
umgesetzt — `Standort` ohne Hierarchie (WH-001-Lücke), kein Lagerplatz-Konzept (WH-002/003
fehlen komplett), `Lagerbewegung` deckt WH-004/005/007 nur auf Objekt-/Standort-Ebene ab
(nicht auf Material-/Lagerplatz-Ebene — MABEA verschiebt ganze Objekte, nicht einzelne
Materialmengen zwischen Lagerplätzen), Inventur (WH-006) fehlt komplett. Dieses Epic hat den
größten Abstand zwischen Backlog-Anspruch und MABEA-Ist-Stand aller bisher abgeglichenen
Epics — am ehesten vergleichbar mit dem komplett fehlenden Digital-File-Epic.