Skip to content

Inventory

Inventory tracks the live stock state across the warehouse: every product quantity by position, every booked movement between positions, and the position hierarchy itself. Live updates stream over SSE on the inventory notification subtopic so the table reflects each commit without a manual refresh.

Key screens

Inventory overview

How to reach: drawer → WarehouseInventory (route: /app/warehouse/overview/inventory).

What you can do here:

  • Browse the live inventory table sorted by created, with virtual-scroll paging.
  • Filter by product code, position, and serial.
  • Read the position path (A > A1 > A1-shelf-3) inline on each row.

Expected business logic:

  • Each row reflects a product-quantity-position triple kept in sync via InventoryChangedEvent and the movement family below.
  • Refresh fires on incoming MOVEMENT_COMPLETED, MOVEMENT_REVERSED, INVENTORY_PRODUCED, INVENTORY_CONSUMED, and INVENTORY_CHANGED notifications.

Movements

How to reach: drawer → WarehouseMovements (route: /app/warehouse/overview/movements).

What you can do here:

  • Sort and scroll the movement ledger (created / start / end timestamps, type, status, planned vs confirmed quantity, user, references).
  • Right-click a row for the context menu: Revert movement (when reversible), or copy the canceling-movement key when already reversed.
  • Double-click a row to open the movement details.

Expected business logic:

Positions

How to reach: drawer → WarehousePositions (route: /app/warehouse/overview/positions).

What you can do here:

  • Browse the position list with virtual-scroll paging; closed positions are dimmed.
  • Filter by search, is in position, contains position, and created date range.
  • Double-click a row to open position details (sub-route :positionKey).
  • Open the new position form from the position-detail surface.

Expected business logic:

  • Confirming an empty position emits PositionConfirmedEmptyEvent; the row stays in the list with the closed flag set.
  • The position list refreshes on the same movement and inventory notifications as the inventory table, so structural changes are visible immediately.

Released under the Apache 2.0 License.