Inventory Reports
Stock on hand, what actually left the shelves, what was lost, what is not moving, what your stock is worth, and what you bought from each supplier — with the two different cost bases Kassly uses.
14 min read · Updated 28 Oct 2026
On this page
Kassly has two families of stock report and they sit behind two different add-ons. Knowing which is which saves a lot of hunting.
Owners and Managers only, with one exception noted under Goods Consumed.
| Report | Where | Needs |
|---|---|---|
| Inventory Summary | Reports → Inventory Summary | Free: it's a snapshot of your stock right now |
| Goods Consumed | Dashboard, and the Ingredients page | Free for today. Any other range needs Business Reports |
| Shrinkage | Reports → Shrinkage | Free for today. Any other range needs Business Reports |
| Slow-Moving Stock | Reports → Slow-Moving Stock | Business Reports |
| Valuation | Inventory → Valuation, or the Inventory Valuation card on the Reports page | Inventory Pro (₱500 per branch each month) |
| Reorder Suggestions | Inventory → Reorder | Inventory Pro |
| Expiring Items | Inventory → Expiry Alerts | Inventory Pro |
| Food Cost Analysis | Reports → Food Cost Analysis | Inventory Pro |
| Purchases by Supplier | Reports → Purchases by Supplier, or Spend by Supplier on the Purchase Orders list | Inventory Pro. Beyond today it also needs Business Reports |
| Supplier Cost Changes | Reports → Supplier Cost Changes | Inventory Pro and See Cost Prices. Beyond today it also needs Business Reports |
Day-to-day stock work — looking a product up, receiving a delivery, counting a shelf — is not in this part. See Stock levels, Receiving stock and Stock counts.
Two cost bases, and when each is used
Almost every complaint about inventory figures comes down to this, so it is worth reading before the reports themselves.
| Cost basis | Meaning | Used by |
|---|---|---|
| Current cost price | The cost sitting on the product record right now | Slow-Moving Stock, the dashboard's stock value |
| Weighted average cost | Averaged across every cost-bearing receipt of that product at that location | Valuation, and the Inventory Value on Inventory Summary |
| Cost at the moment of movement | What the item cost when it actually moved | Goods Consumed, Shrinkage |
| Cost at the moment of sale | What the item cost when it was sold | Profit reports |
They will not agree, and none of them is wrong. Current cost price is a snapshot; weighted average is a history; cost-at-movement is a fact about one event. If you have just changed a supplier price, expect Slow-Moving Stock to move immediately and Valuation and Inventory Summary to move gradually.
Inventory Summary
Four figures, computed live. This report takes no date range at all — it is always "right now".
| Figure | Counts |
|---|---|
| Total SKUs | Stock records at the selected branch |
| Inventory Value | The Valuation total for the same branch: quantity × weighted average cost, stock-tracked products only |
| Low Stock | At or below reorder point, but not yet at zero |
| Out of Stock | At or below zero, including oversold items below zero |
A few rules to keep in mind:
- Low Stock excludes anything already at zero. A product that has run out completely moves to Out of Stock and leaves the Low Stock count. Watching only Low Stock will therefore miss the things that most need ordering.
- Inventory Value and Valuation always agree. They are the same figure, so an oversold item (below zero) is left out of both rather than pulling the value down; it still counts under Out of Stock. The Total value above the Top 10 chart is that figure again. See When stock goes below zero.
- With no branch selected, Inventory Value includes your warehouses. Pick a branch and it becomes that branch's shelves alone. This is deliberate — the ledger books warehouse-bound deliveries as inventory, so leaving warehouses out of the store-wide figure would understate it against your books. A manager restricted to specific branches never sees warehouse stock in this total. See Warehouses.
Goods Consumed
This is the stock-depletion report. It answers "how much stock actually left the building", in units and at cost, over a period. It appears as a card on the Dashboard and in full on the Ingredients page.
It reads the stock ledger and sums every outflow, whatever caused it:
- sales, including the per-ingredient deductions a recipe writes at sale time
- transfers out to another branch or a warehouse
- negative adjustments, and count corrections that reduced stock
- production and job-order consumption
- waste and spoilage written off
That is the whole scope. There is no filter by movement type — if it left, it is counted.
Recipes are already expanded, so you never see the dish. A sold burger appears as beef, bun and lettuce, in their own units. It never appears as "1 burger". This is why the report is genuinely useful for a kitchen and why its units look nothing like your sales report. See Ingredients and recipes.
A few more rules:
| Rule | Detail |
|---|---|
| Voided sales are excluded | Both halves — the original deduction and the put-back. A voided sale never consumed anything, so it does not inflate the figure |
| Value uses the cost at the time of the movement | Falling back to the product's current cost, and to zero if neither exists |
| Dated by when the movement was written | Not by the sale's business day. A sale that syncs late lands on the day it synced |
| Branch scope | With no branch selected the total spans branches and warehouses. Pick a branch and warehouse movements drop out |
| Ingredients only | A toggle that narrows to ingredients — meaning anything flagged as an ingredient or used in any of your recipes. The flag alone is not enough, because most kitchens never set it |
| List length | The list shows at most 200 items. The summary line above it — distinct items, total units, total value — is always computed over everything, not just the visible rows |
Figures are cached for 60 seconds, so a fresh movement takes up to a minute to appear.
The one exception to Owner-and-Manager access: a staff member on a custom role that can view recipes can open Goods Consumed, but they are always forced to ingredients-only. They never see store-wide consumption. See Custom roles.
Shrinkage
Stock lost without a sale, over the date range: what was removed as damaged, expired, spoiled, stolen, sampled or corrected, plus count shortfalls. It shows three views of the same losses:
- By reason, with the number of entries and the cost value for each
- By product, with the quantity lost, the main reason and the cost value
- By branch, when more than one branch lost stock
| What counts | Detail |
|---|---|
| Removals | Every Remove stock entry, under its reason |
| Count shortfalls | A count that landed below the system figure. With no reason it shows as Count variance |
| Removals without a reason | From before reasons existed, or from an older app version. They show as Not specified |
| Not counted | Sales, transfers, production, recipe waste percentages, stock-ins, and counts that found extra stock |
| Branches only | Warehouse stock is not included |
The cost value is the cost recorded on the movement if there is one, otherwise the item's cost on the day it was written off (the variant's cost first, else the product's), from the cost history. Changing a cost later never changes what an old removal was worth. This is exactly how your books value it, so from the day stock adjustments started posting there, this report's value for a period equals the shrinkage, spoilage, damage and samples accounts in the books for the same branches. Count gains are not in this report; in the books they post to Inventory Count Gains. The cost value appears only for people allowed to see cost prices (the See Cost Prices permission, which Owners and Managers have by default). Everyone else with access to inventory sees quantities and entry counts only, ranked by quantity.
Use the reason filter at the top to see one reason on its own, for example only Theft, or only Not specified to find the entries that still need better habits.
Slow-Moving Stock
Products that still have stock on shelves and sold nothing at all in the lookback window. Pick 30, 60 or 90 days from the selector.
| Rule | Detail |
|---|---|
| Zero sales, not low sales | One unit sold in the window removes a product from this list |
| Per branch | Judged for each (product, branch) pair. Something selling in Makati but not in Cebu appears for Cebu only |
| Stock-tracked products only | Services and non-tracked items are never listed |
| Stock on hand required | Something at zero has nothing sitting on a shelf, so it is not listed |
| Valued at current cost price | Not at weighted average |
The lookback counts back from today, not from your date range. The date picker at the top of the page does not affect this report. "Last 60 days" always means the 60 days ending now.
You can narrow the list to one category from the filter bar.
Valuation
Per-SKU stock value at weighted average cost, listed for every branch and every warehouse, with a store-wide total.
The weighted average for a product at a location is built from every cost-bearing inflow ever recorded there — stock-ins, returns and transfers in. It is a lifetime average, not a rolling one, so a single unusual purchase price keeps a small influence indefinitely. Where a product has no cost history at that location at all, Kassly falls back to the product's cost price.
Kassly values stock one way. There is no FIFO or LIFO option to choose.
Only quantities above zero are valued. An oversold item (below zero) does not appear here at all, and the Inventory Summary leaves it out of its Inventory Value the same way. Products with stock tracking off are not valued either.
Because this is the figure that ties to your books, it is also the one to reconcile against Financial statements. If they disagree, the usual causes are stock received without a cost, or adjustments made without one.
On the full Inventory Valuation page you can also pick an As of date to see the stock on a past day (rebuilt from the movement ledger, valued at today's average cost), read turnover and days of cover per product for a period, see the cost of goods sold for a period, and export the stock and turnover tables as CSV or Excel. See Inventory valuation. All of it is part of Inventory Pro; cost and value columns need the See Cost Prices permission.
Reorder Suggestions and Expiring Items
Reorder Suggestions lists everything at or below its reorder point, grouped by the product's preferred supplier, so one screen turns into one purchase order per supplier. Items with no preferred supplier are grouped under No Supplier. Link a product to its supplier on the product form or in the import sheet — see Suppliers.
Each row shows the current stock, the reorder point and an Order Qty: the reorder quantity you set for that branch, or enough to climb back to the reorder point when none is set.
A manager limited to certain branches sees only those branches here; the Owner sees them all.
With the Warehouse Management add-on and View Warehouses, warehouses are listed too, marked Warehouse in the Location column, using the reorder levels set for each warehouse. They stay listed whichever branch is selected at the top. The desktop app and the dashboard's stock alerts still list branches only.
Create PO on a group opens a new purchase order with the supplier, branch (or, for a warehouse, the delivery warehouse) and every line already filled in — see Purchase orders. It appears for users who can manage purchase orders.
Expiring Items has two lists: batches expiring inside your store's expiry alert window, and batches that have already expired. The window is 30 days unless you change it under Settings → Inventory Settings, and the Days Ahead box changes it for one visit. Expired batches are listed until you deal with them — they do not age out, and sales take usable stock before expired stock. Only stock received with an expiry date appears here. See Batch and expiry.
Food Cost Analysis
One row per menu item that has an active recipe: selling price, cost per serving, food cost percentage, and the peso margin.
| Status | Food cost |
|---|---|
| Healthy | 30% or less |
| Watch | Over 30% |
| High Cost | Over 40% |
The summary above the table counts how many items are above your target. Target defaults to 35%.
Items without a recipe are absent — not zero-cost, absent. A menu built out half-way will show a food cost for the half that is built.
Export streams the whole table as a CSV, honouring the category filter and with no row limit. See Exporting reports.
Purchases by Supplier
What each supplier actually delivered over a date range, and what it cost.
- Received, not ordered. A PO for 10 kg of which 6 kg arrived counts as 6 kg. POs that are still waiting count for nothing.
- Dated by arrival. Each delivery lands on the day it was received, not the day the PO was raised. A PO delivered in two drops can fall in two periods. Branch deliveries and warehouse goods receipts both count.
- Valued at the PO's unit cost on the day it arrived.
Per supplier you get the received value and its share of the total, the number of POs and items, and the on-time rate. Click a supplier to see each item: the supplier code, quantity received, average unit cost (value ÷ quantity, so it blends price changes across POs) and value.
On time vs late is judged per delivery: a delivery is on time when it arrived on or before the PO's expected date. Deliveries against a PO with no expected date aren't counted either way. A PO delivered in two drops, one on time and one late, counts one of each.
Filter by supplier, and the branch picked in the top bar applies. Export downloads CSV or Excel with one row per supplier and item.
Who can see it: Owners, Managers, and custom roles with Create / Submit / Cancel Purchase Orders & Suppliers. Values and costs need See Cost Prices; without it you see quantities, PO counts and on-time figures only.
It does not yet subtract goods returned to a supplier.
Supplier Cost Changes
Which suppliers raised (or cut) their prices, on which items, and by how much.
Every delivery on a purchase order records the price you paid, whatever your plan. This report compares each delivery with the same supplier's price on their previous delivery of that item, even if that was months before the range you picked. One row per supplier and item (a variant is its own item):
| Column | Meaning |
|---|---|
| Previous | The supplier's price before the first delivery in the range. Blank for a First price: the first time you bought this item from this supplier |
| Latest | The price on the last delivery in the range |
| Change | Latest against previous, as a percentage. Increases show in red, decreases in green |
| Received | Quantity delivered in the range |
| Last delivery | When the latest price arrived |
Click a row to see each delivery where the price moved, with a link to its purchase order. Items whose price didn't move are not listed.
Alerts. An increase at or above the Alert on increases from (%) value (10% unless you change it) is marked Alert and counted in the summary. The summary also shows how many items went up and down, the average change weighted by quantity received, and the five biggest increases.
Filters: supplier, category, increases or decreases only, and Hide changes under (%) to drop small moves. The branch in the top bar applies to the PO's branch, including POs delivered to a warehouse. Export downloads CSV or Excel with one row per supplier and item, as filtered.
Only deliveries count. Update costs on a received PO (making its prices the catalog cost) changes your catalog, not the supplier's price, so it is left out. Manual stock-ins with a cost are not supplier deliveries either.
Who can see it: anyone with See Cost Prices. The whole report is cost data, so the card is hidden from everyone else.
What is not here
- Stock movement history for one product is on the product itself, not in a report. Open the product and read its movement list.
- One product's cost and price history is on the product too: see Cost & price history.
- Variance from a count is in the count record. See Stock counts.
- What a dish can still be made from is a POS-side availability calculation, not a report. See Recipe-derived stock.