What you hold, and what it is actually worth.
FIFO cost layers, batches and expiry, multi-site, cycle counts and a valuation that ties to the control account — because a stock figure that does not tie is not a figure.
| Milk 1L × 12 | 3 layers | 1,840 cs | |
| Cooking oil 1L | 2 layers | 960 cs | |
| Rice 25kg | 1 layer | 412 sacks | |
| Corned beef 150g | 4 layers | 2,880 cs | |
| Count variance | last cycle count | 0.4% | within |
| Negative stock | blocked by the engine | 0 | none |
Inventory across every site, costed in layers, traceable by batch, counted without closing, and reconciled to the ledger.
What it actually does.
Cost layers, not an average nobody can explain
Stock value is the sum of the layers that are actually on the shelf. It will not match a spreadsheet that uses the latest price paid, and the ledger is the one that is right.
- FIFO by default, with the method a setting rather than a rewrite.
- Landed cost carried onto the line that incurred it.
- The unit a price is per is not always the unit you count in — and a mismatch there prices everything wrong, silently.
Three deliveries at three prices. A single average cost hides which one you are actually eating.
Counted without closing the shop
Cycle counts by aisle, by category or by value band. The book figure is not shown while counting, deliberately, and the variance posts as its own entry so the original movement stays exactly as recorded.
- Counts weighted by value — the lines worth counting get counted often.
- Every variance carries a peso figure at cost.
- Transfers have two independent sides, which is what makes a discrepancy visible.
Every movement costed at the layer it actually came off.
Stock that arrived from nowhere
Every movement that put stock on a shelf should have something taking it off somewhere. This is the report you want empty: when it is not, its total is exactly how much the inventory control account is out by.
- Stock with no lot number, listed — because it cannot be traced later.
- Near expiry with a horizon, not a surprise.
- Quarantine that actually blocks a pick, enforced in the database.
The ones people ask about this.
Why does our stock value differ from our spreadsheet?
Almost always because the spreadsheet uses the latest cost and the ledger uses the layers actually on hand. Open any item and the layers are listed.
Can we count without stopping trading?
Yes — that is what cycle counts are for. A full close-and-count is available but rarely necessary once counts are weighted by value.
Does it handle batches and expiry?
Yes, from receipt, and the dates travel with the stock through production and out to the customer.
What about stock in transit between branches?
It has left the sending site and not yet arrived at the receiving one, and it is visible as exactly that.
Nothing here is a separate product.
Procurement
Requisition to order to receipt, three-way match, landed cost
See the pageTraceability & recall
Both directions, while the caller is on the line
See the pageDemand forecasting
Machine-learned reordering, days of cover, seasonality
See the pageProduction
Recipes, bills of material, yield, batch runs, wastage
See the pageSee it on your own figures.
Bring one ordinary day from your business and we will run it through in front of you, on your own items and your own prices.