Inventory tracks stock across warehouses, along with what it cost.
These are "items", not "products"
What this module holds is called an item. "Product" is deliberately reserved for the store. An item may or may not be linked to a store product — raw materials and consumables are never sold but still have to be counted.
Stock is the result of movements
The stock figure is not an editable field; it is the sum of movements. Receipts, issues, transfers, count corrections — each is a row in a ledger that is only ever appended to.
No movement is deleted or edited. Correcting a mistake is a new movement. That is why any number here can always be explained.
Reserved means "set aside", not "gone"
When an order is placed, stock is reserved: still physically present, but no longer available to sell. Shipping the order commits the reservation and stock actually decreases; cancelling releases it.
This is why "on hand" and "available" are two different numbers, and why that difference is not an error.
Cost is held in layers
Every receipt creates its own cost layer. When stock leaves, layers are consumed in the order configured for the site (first-in-first-out, or the reverse).
The consequence is that the value of a warehouse does not depend on the most recent purchase price, but on which layers were actually consumed.
Two people can open one page and see different numbers
A user's access can be limited to particular warehouses. Every list, every report and every CSV export then covers only those.
So a disagreement between two people's figures is not necessarily a fault. These grants are set on the Warehouses page.