Stock Levels
Where Kassly keeps your quantities, why they are per branch, what a sale takes out, and what makes an item count as low.
12 min read · Updated 28 Oct 2026
On this page
Stock Levels is the answer to "how much do we actually have". Open Inventory → Stock Levels. It is free on every plan, and it is the page the rest of this part writes into.
Two things decide what you see: the item has Track Stock switched on, and the branch you are looking at. Everything else on this page follows from those two.
One quantity per branch, per variant
A stock figure in Kassly is not a property of a product. It is a row that ties together a branch, a product and — when the product has variants — one variant. Three branches selling the same shirt in two sizes is six quantities, kept apart on purpose.
That has consequences worth knowing before you go looking for a number:
- There is no company-wide "on hand" figure to edit. Every stock-in, adjustment and count names a branch.
- The reorder point is per branch too. The main branch and a small kiosk should not warn at the same number, so the product form shows it as a grid with one row per branch (and per warehouse, and per variant) rather than as one field.
- Warehouse stock is kept in a separate ledger and does not appear on this page at all. See Warehouses.
Items with Track Stock off never appear here, even if they once did. If you switch tracking off, the old row stays in the database but is filtered out of the list, the counters and the reorder suggestions, so it cannot show up as "Out of Stock" for the rest of time.
What the four counters mean
| Counter | What it counts |
|---|---|
| Total SKUs | Tracked products with a stock row, plus active tracked products that have no stock row anywhere in the branches you can see |
| In Stock | Quantity above zero and above the reorder point (or no reorder point, and no store threshold, set) |
| Low Stock | Quantity above zero but at or below the reorder point (the item's own, or the store's Low Stock Threshold when it has none) |
| Out of Stock | Quantity at or below zero, plus every tracked product with no stock row at all |
A product with no stock row is deliberately counted as out of stock rather than ignored. A tracked item nobody has ever stocked in has none.
An item below zero is out of stock and more: it is oversold. Its row shows the quantity in red with an Oversold badge. See When stock goes below zero.
What "low" means
Low is not a guess. An item is low when its branch quantity is at or below the reorder point set for that branch.
An item with no reorder point of its own uses the store's Low Stock Threshold (Settings → Store Settings → Operational Settings) as its reorder point. With that left blank, an item with no reorder point is never low: it simply goes from In Stock to Out of Stock. The item's own reorder point always wins over the threshold, so set one on the few items that need a different level.
The Status badge on each row follows the same rule as the Low Stock counter. A product stocked at several branches reads Low Stock when any branch is low; expand it to see which, with the point each branch is measured against next to its quantity (9 / 10).
New stock rows start without a reorder point. When Kassly has to create a stock row for you — the first stock-in, the first sale, a transfer arriving, a count — it no longer fills in a reorder point of 10 and a reorder quantity of 50 that nobody chose, so a new item isn't suggested for reorder until you set its level. Rows created before this change keep the 10 / 50 they got; clear or change them on the items where they are noise.
Setting a reorder point and quantity
There are four places to set them. All four write the same two values on the same stock row, so use whichever suits the job:
- One item, every location: open the product's edit page. When the item tracks stock, a Reorder levels card lists every branch you can see, every warehouse (with the Warehouse Management add-on), and every variant, each with its own two fields. Change the rows you want and click Save reorder levels. The card saves on its own, separately from the product's Save button, and only the rows you changed are sent.
- One row: on Inventory → Stock Levels, click the sliders icon at the end of a row. For a product stocked at several branches, expand it first and use the icon on the branch's row.
- Many items, one location: on Catalog → Products, tick the items, then Set reorder level. Pick a branch or warehouse and fill in either field or both. A blank field keeps each item's current value, so you can set only the quantity to order. An item with variants gets the value on every variant; items that don't track stock are skipped.
- A sheet: the product and ingredient import sheets have a Reorder Point and a Reorder Qty column for the branch you pick. See Importing products.
| Field | What it does |
|---|---|
| Reorder when stock falls to | The reorder point. At or below it, the item is Low. Leave it blank to turn the low-stock alert off. |
| Quantity to order | What Inventory → Reorder suggests ordering. Leave it blank and the suggestion is enough to climb back to the reorder point. |
Setting either never moves stock. You need the permission to manage stock (Owners and Managers by default) to see any of these. Warehouse rows also need View Warehouses.
How much Inventory → Reorder suggests: the quantity to order when one is set, otherwise enough to climb back to the reorder point (never less than one), less what is already On order there on submitted or partly received POs. An item whose open POs cover the whole suggestion is left off until they arrive; drafts don't count. See Purchase orders. A row Kassly creates now has no quantity to order until you set one; only rows it created before that change (see the note above) can still say 50 without anyone choosing it, so set your own number on those or clear it.
Reorder suggestions cover branch stock, and with the Warehouse Management add-on and View Warehouses your warehouses too: a warehouse row at or below its own reorder point is listed with a Warehouse tag, and its Create PO delivers there. Warehouses don't use the store's Low Stock Threshold; only a warehouse row with its own reorder point is suggested.
Two things happen when a movement drops an item to or below its reorder point:
- Every Owner, and every Manager assigned to that branch, gets a Low Stock Alert notification naming the item and what is left. See Notification settings.
- The item joins Inventory → Reorder, grouped by supplier, which needs the Inventory Pro add-on (₱500 per branch each month).
How a sale moves stock
A completed sale does three things per line, in one transaction:
- deducts the quantity sold from that branch's stock row,
- writes a Sale movement recording the deduction, and
- pushes the new figure to every POS terminal on that branch, live.
Voiding the sale puts it back the same way, as a Return movement. Nothing is edited in place — the ledger only ever gains rows.
Three cases go further than the obvious one:
- A modifier that points at a real item deducts it too. An "extra cheese" option linked to a cheese SKU takes cheese out of stock at the quantity set on the option, multiplied by the line quantity.
- A dish with a recipe deducts its ingredients, not itself. See Ingredients & recipes.
- A sale always takes the full quantity. If the system thinks you have 3 and you sell 5, on-hand goes to −2. This includes stock a confirmed sales order has reserved: a POS sale can take on-hand below the reserved quantity, and that order is then short. Either way, Kassly asks for a recount; see When stock goes below zero.
A stock row carries two numbers: on hand (the physical figure) and available (on hand minus what confirmed sales orders have reserved). Reserving stock does not change the on-hand figure. Only a real movement does.
When stock goes below zero
A sale never waits on stock. An offline till can't see what the other tills sold, and a recipe uses its ingredients whether or not anyone stocked them in. So Kassly records every sale in full, and a count that was already wrong becomes visible as a negative number instead of hiding behind a zero.
A negative quantity nearly always means one of these:
- a delivery arrived but was never stocked in,
- the last count was off, or
- two tills sold the last units while one of them was offline.
When a sale takes an item below zero, or below what confirmed sales orders have reserved, every Owner and every Manager assigned to that branch gets one Stock Oversold notification naming the items and how short they are. A whole offline batch that syncs at once sends one notification, not one per sale. An item that is already negative doesn't notify again on later sales.
To put it right, stock in the delivery that was missed, or count the item. The Stock Levels page shows how many items are oversold, and Show oversold lists just those rows. Once a stock-in or count brings the item back to zero or above, it reads normally again.
Stock recorded as negative is always the truth of what was sold. If it had stopped at zero instead, the stock-in you record later would leave the count too high by however much was oversold.
The movement ledger
Every change to a quantity writes one movement row, and movement rows cannot be edited or deleted. This is the record you audit against, and it is why a mistake is fixed with a second movement rather than a correction of the first.
| Type | Written by |
|---|---|
| Stock In | Receiving stock outside a purchase order |
| Sale | A completed sale, a linked modifier, or a recipe deduction |
| Return | A void, or a refund putting stock back |
| Adjustment | A correction that removes stock |
| Transfer In / Transfer Out | A stock transfer arriving or leaving |
| Stock Count | An approved inventory count, for the variance only |
| Decomposition | Breaking one bought item into several sellable parts |
| Job Order Consumption | Parts used on a service job |
| GRN Receipt | A purchase order received into a warehouse |
| Production Consumption / Production Output | A commissary production run |
To read the history for one item, open it from Catalog → Products and look at Stock Movement History: type, quantity, who did it, the note they left, and the receipt number when the movement came from a sale.
Every movement lives at a branch or at a warehouse, never both and never neither. That is enforced in the database, which is why a branch filter automatically excludes warehouse activity.
Kassly re-adds the ledger nightly and compares the total against the stored on-hand figures. Any disagreement is logged for support rather than silently corrected, so if a number looks impossible it is worth raising.
Where the stock went
Above the dashboard's stock cards, and again on the Compositions page, sits a Stock Consumption panel: how much went out over a period, what it was worth, and the Goods Consumed list of the items that moved most.
It sums every outflow in the ledger — sales, recipe deductions, adjustments, transfers out, production — not just sales, so it is the honest answer to "what did we get through this week". Sales that were later voided are excluded entirely, so a void does not leave a phantom in the consumption figure.
Two details to keep in mind:
- A composed dish appears as its ingredients. Selling a burger shows up as beef, bun and lettuce, never as "1 burger".
- Items Depleted, Units Consumed and Value Consumed always cover everything in the period. The Top 5 / 10 / All buttons only change how much of the list is printed underneath.
Today is free. Any other date range needs the Business Reports add-on (₱400 per branch each month), or any bundle that includes it. Without it the other presets in the date picker are locked, and the panel shows today only.
Exporting stock on hand
Export Stock at the top of the Stock Levels page downloads today's stock on hand as CSV or Excel: one row per branch and variant (and per warehouse when no branch is picked), with on hand, reserved, available and the reorder point. It is free on every plan and needs View Stock Levels & Inventory. It carries no costs; for stock value, use Inventory valuation, which can also show the stock on a past date.
On the app
On the phone, stock lives in a few places:
- Products → Stock has the list for your branch, with Total SKUs, Low Stock and Out of Stock counters (tap Low Stock or Out of Stock to filter), an All / Low / Out filter, and search by name, SKU or variant. Low follows the same rule as the web. Tap an item to see its quantity at every branch and to record a Stock In or Remove stock on the spot.
- Oversight → Low-stock alerts shows the reorder suggestions (Inventory Pro).
- Oversight → Receive PO receives deliveries against a purchase order; see Receiving purchase orders.
- Oversight → Inventory counts runs cycle and spot counts with the barcode scanner; see Stock counts.
The Oversight tab needs View approvals queue, and each tile its own permission, so a custom role that receives on the phone needs Receive stock and View approvals queue.
Where to go next
- Receiving stock — putting quantities in
- Stock adjustments — taking them out and fixing them
- Stock counts — checking the figures against the shelf
- Recipe-derived stock — items with no quantity of their own