Skip to content
Product documentation

Operating concepts, workflow guides, and implementation references.

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:

EventCarries
GoodsReceivedbatch, expiry, quantity, warehouse/bin
StockReservedorder reference
StockPickedorder reference, bin
StockTransferredfrom/to warehouse
AdjustmentMadereason 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.