Inventuren
Zweck
Inventuren erfassen den Ist-Bestand pro Lager und vergleichen ihn mit dem Soll-Bestand aus dem System. Eine Inventur entsteht typischerweise zum Stichtag (Geschaeftsjahresende) oder anlassbezogen. Pro Inventur werden Lager-Produkte (InventoryWarehouseProduct) als Snapshot kopiert, gezaehlt, kommentiert und nach Abschluss durch den Finish-Workflow eingefroren.
Voraussetzungen
Berechtigungen (CASL)
| Action | Subject | Wirkung | Keycloak-Rolle |
|---|---|---|---|
view | FE_Inventory, Inventory | Liste/Details aufrufbar | — |
create/update/delete | Inventory | Inventuren pflegen | APP_SPEAMCORE_CREATE/UPDATE/DELETE_INVENTORY |
view/create | InventoryWarehouseProduct | Sub-Liste der Produkte | APP_SPEAMCORE_VIEW/CREATE_INVENTORY_WAREHOUSE_PRODUCT |
Schritt-für-Schritt-Anleitung
Inventur anlegen
- Inventuren (
/inventories) → + Neu. - Name vergeben (z. B. „Inventur 31.12.2025 Hauptlager").
- Lager zuordnen (
warehouseId). - Auf der Detail-Seite Produkte übernehmen —
POST /api/inventory-warehouse-products/copykopiert alle aktuellenWarehouseProduct-Einträge alsInventoryWarehouseProduct-Snapshot.
Bestand zählen und kommentieren
- Tab Produkte (
/inventories/:id/products). - Pro Produkt die gezaehlte Menge eintragen.
- Kommentare via
CommentPreviewCardergaenzen.
Inventur abschliessen
- Inventur abschliessen klicken (
POST /api/inventories/:id/finish). - Doppel-Bestätigung im Modal — der Anwender muss zweimal bestaetigen, weil die Aktion nicht reversibel ist.
- Beim Abschluss wird pro Produkt mit Differenz (
countedAmount != currentAmount) automatisch eine Bestandsbuchung ausgeloest:WarehouseProduct.amount = countedAmount(Korrektur auf gezaehlten Stand)- Es entsteht ein
ProductMovementmittype = 'inventory-correction'und Referenz auf die Inventur.
- Status der Inventur wechselt auf
closed, alleInventoryWarehouseProduct-Einträge werden read-only.
Inventur stornieren oder löschen
Eine abgeschlossene Inventur kann nicht mehr veraendert werden. Korrekturen erfolgen über eine neue Inventur oder manuelle Bestandsbuchung. Eine noch offene Inventur kann jederzeit gelöscht werden (Soft-Delete) — Buchungen sind dann noch nicht erfolgt.

Toolbar (Detail-Seite)
Schlanke Toolbar oben rechts:
| Icon | Aktion (aria-label) | CASL | Wirkung |
|---|---|---|---|
| ← | Zurückgehen | — | Zurück zur Liste. |
| 🏠 | Zur Startseite gehen | — | Springt auf das Dashboard / /. |
| ⏮/◀/▶/⏭ | Pagination | — | Navigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung. |
Globale Floating-Drawer (links)
Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:
- KAL. (Mini-Kalender)
- ZEIT (Persoenliche Wochen-Arbeitszeit)
- ARBEIT (Eigene bevorstehende Aufträge)
UI-Elemente
Button: „Produkte übernehmen"
Kopiert alle Lager-Produkte als Inventur-Snapshot. Wirkt nur auf die aktuelle Inventur.
Button: „Inventur abschliessen"
Schliesst die Inventur ab — wirkt als Lock; weitere Änderungen werden danach blockiert.
Felder und Eingaben
| Feldname | Pflicht | Datentyp | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|---|---|
name | ja | String | Inventur-Bezeichnung in Listen und Reports. | — |
warehouseId | ja | UUID | Lager, für das die Inventur gilt. Filtert die InventoryWarehouseProduct-Sub-Liste. | view:Warehouse. |
comments | nein | TEXT | Kommentar zur Inventur (z. B. besondere Vorkommnisse). | — |
createdAt / updatedAt | — | DateTime (read-only) | System-Felder. | — |
Sub-Felder pro InventoryWarehouseProduct
| Feldname | Datentyp | Wirkung |
|---|---|---|
warehouseProductId | UUID | Verweis auf das Lager-Produkt. |
quantity | Decimal | Gezaehlte Menge. |
transferredAt | DateTime | Wann wurde der Snapshot erstellt? |
Workflows und Zustaende
Wiederverwendbare Konzepte
Verknuepfungen zu anderen Modulen
- Lager (
/warehouses) — Quelle des Bestands. - Lager-Produkte (
WarehouseProduct) — werden als Snapshot kopiert. - Bestandsbewegungen — werden bei Inventur-Differenzen typischerweise als Korrektur-Buchungen angelegt.
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/inventories | Liste | view Inventory |
GET | /api/inventories/:id | Detail | view Inventory |
POST | /api/inventories | Anlegen | create Inventory |
PATCH | /api/inventories/:id | Ändern | update Inventory |
DELETE | /api/inventories/:id | Soft-Delete | delete Inventory |
POST | /api/inventories/:id/finish | Abschliessen | update Inventory |
POST | /api/inventory-warehouse-products/copy | Bestand übernehmen | create InventoryWarehouseProduct |
Versionshinweise
- 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard.