Movements and Transfers

Understand the immutable Stock movement ledger and how quantity changes update current balances.

Every supported quantity change is represented by a stock_movements record. Movement writes also update the maintained stock_balances table in the same database operation, so current on-hand reads do not need to recalculate the complete ledger.

Movement kinds

KindTypical use
ReceiptGoods arriving from Procurement or another inbound workflow
ShipmentGoods leaving for a customer or sales workflow
TransferQuantity moved between two locations
AdjustmentManual or integrated correction
ReturnReturned inventory
ConsumptionMaterials consumed by a project, service, or production workflow
ProductionProduced inventory

Each movement can include a product, optional lot, source and destination locations, positive quantity, source type, source record, reason, reference, unit cost, occurrence time, and idempotency key.

View the ledger

Open Stock > Movements. The table shows:

  • Date and time
  • Product name and SKU
  • Movement kind
  • Source type and reference
  • Quantity

The full page loads older records with cursor-based infinite scrolling. Product detail pages show a smaller recent-movements view for that product.

Record a transfer

Use Stock > Transfers to open the transfer form. Select a product, source location, destination location, and quantity. A successful transfer creates a single ledger record with both locations and updates both sides of the balance.

Integrated movement sources

  • A Procurement purchase-order receipt can emit an inbound receipt movement.
  • Stock server actions and the v1 API can record validated movements.
  • Project-attributed movements with unit cost can emit analytic cost/revenue context without blocking the movement if analytics tagging fails.

Idempotency keys are used by supported integrations so retries do not double-count stock.

Corrections

Movement records are treated as an audit ledger. Do not edit historical quantities to correct a mistake. Record a compensating movement with the correct reason and reference.

The current Stock UI does not provide the previously documented cycle-count wizard, scheduled count sheets, movement CSV export, or a dedicated manual-adjustment page. These should not be treated as available workflows.

Accounting boundary

Unit cost can feed inventory-value reporting and project/deal analytics, but Stock does not currently post a configurable Finance journal entry for every movement and does not expose FIFO, AVCO, or standard-cost valuation settings.