Zum Hauptinhalt springen

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

- Mindestens ein Lager mit Bestand (`WarehouseProduct`). - Berechtigung `create:Inventory`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Inventory, InventoryListe/Details aufrufbar
create/update/deleteInventoryInventuren pflegenAPP_SPEAMCORE_CREATE/UPDATE/DELETE_INVENTORY
view/createInventoryWarehouseProductSub-Liste der ProdukteAPP_SPEAMCORE_VIEW/CREATE_INVENTORY_WAREHOUSE_PRODUCT

Schritt-für-Schritt-Anleitung

Inventur anlegen

  1. Inventuren (/inventories) → + Neu.
  2. Name vergeben (z. B. „Inventur 31.12.2025 Hauptlager").
  3. Lager zuordnen (warehouseId).
  4. Auf der Detail-Seite Produkte übernehmenPOST /api/inventory-warehouse-products/copy kopiert alle aktuellen WarehouseProduct-Einträge als InventoryWarehouseProduct-Snapshot.

Bestand zählen und kommentieren

  1. Tab Produkte (/inventories/:id/products).
  2. Pro Produkt die gezaehlte Menge eintragen.
  3. Kommentare via CommentPreviewCard ergaenzen.

Inventur abschliessen

  1. Inventur abschliessen klicken (POST /api/inventories/:id/finish).
  2. Doppel-Bestätigung im Modal — der Anwender muss zweimal bestaetigen, weil die Aktion nicht reversibel ist.
  3. Beim Abschluss wird pro Produkt mit Differenz (countedAmount != currentAmount) automatisch eine Bestandsbuchung ausgeloest:
    • WarehouseProduct.amount = countedAmount (Korrektur auf gezaehlten Stand)
    • Es entsteht ein ProductMovement mit type = 'inventory-correction' und Referenz auf die Inventur.
  4. Status der Inventur wechselt auf closed, alle InventoryWarehouseProduct-Einträge werden read-only.
**Buchhaltungs-Auswirkung:** Inventur-Differenzen erscheinen in der BWA als „Inventurdifferenz" auf dem Bestandskonto (kostenneutral, da gegen Aufwandskonto gebucht). Bei größeren Differenzen sollte ein Kommentar an der Inventur dokumentieren warum (Schwund, Bruch, Diebstahl, Buchungsfehler) — für Steuerpruefung und GoBD-Konformitaet.

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.

Listenansicht — inventories

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

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

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
namejaStringInventur-Bezeichnung in Listen und Reports.
warehouseIdjaUUIDLager, für das die Inventur gilt. Filtert die InventoryWarehouseProduct-Sub-Liste.view:Warehouse.
commentsneinTEXTKommentar zur Inventur (z. B. besondere Vorkommnisse).
createdAt / updatedAtDateTime (read-only)System-Felder.

Sub-Felder pro InventoryWarehouseProduct

FeldnameDatentypWirkung
warehouseProductIdUUIDVerweis auf das Lager-Produkt.
quantityDecimalGezaehlte Menge.
transferredAtDateTimeWann 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

MethodeEndpointZweckCASL
GET/api/inventoriesListeview Inventory
GET/api/inventories/:idDetailview Inventory
POST/api/inventoriesAnlegencreate Inventory
PATCH/api/inventories/:idÄndernupdate Inventory
DELETE/api/inventories/:idSoft-Deletedelete Inventory
POST/api/inventories/:id/finishAbschliessenupdate Inventory
POST/api/inventory-warehouse-products/copyBestand übernehmencreate InventoryWarehouseProduct

Versionshinweise

  • 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard.