Guides
The inventory ledger
How event-sourced inventory works, and why positions are always reconcilable.
Inventory in Easy Procure is event-sourced. Positions aren’t stored and overwritten — they’re derived by replaying an append-only stream of events.
Events, not numbers
Each change to stock is an immutable event:
| Event | Carries |
|---|---|
GoodsReceived | batch, expiry, quantity, warehouse/bin |
StockReserved | order reference |
StockPicked | order reference, bin |
StockTransferred | from/to warehouse |
AdjustmentMade | reason code, approver |
Deriving a position
To know what’s in bin A3, replay every event for that SKU/bin. The position is the sum — and you can stop at any point in time to see a historical balance.
Reconciliation becomes replay. Any number can be traced back to the exact events that produced it.
FEFO and expiry
Because every unit carries its batch and expiry, allocation is first-expiry-first-out by default — critical for short-dated FMCG.
Adjustments
Adjustments require a reason code and an approver, so shrinkage and damage are visible events rather than silent edits. Read the deeper rationale in Event-sourced inventory.