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
| Kind | Typical use |
|---|---|
| Receipt | Goods arriving from Procurement or another inbound workflow |
| Shipment | Goods leaving for a customer or sales workflow |
| Transfer | Quantity moved between two locations |
| Adjustment | Manual or integrated correction |
| Return | Returned inventory |
| Consumption | Materials consumed by a project, service, or production workflow |
| Production | Produced 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.

