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.

9 min read · Updated 26 Sep 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, which is why it is not on the product form. The main warehouse and a small kiosk should not warn at the same number.
  • 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 set)
Low Stock Quantity above zero but at or below the reorder point
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 is never low — it simply goes from In Stock to Out of Stock.

A reorder point of 10 appears by itself the first time an item gets stock. When Kassly has to create a stock row for you — the first stock-in, the first sale, a transfer arriving — it creates it with a reorder point of 10 and a suggested reorder quantity of 50. Those are placeholders, not advice. Set your own on the items that matter, and clear the field on the ones where a warning is just noise.

Setting a reorder point and quantity

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 — each branch has its own setting.

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 the icon.

The product and ingredient import sheets can also set the reorder point for the branch you pick. See Importing products.

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 (₱400 per branch each month).

How a sale moves stock

A completed sale does three things per line, in one transaction:

  1. deducts the quantity sold from that branch's stock row,
  2. writes a Sale movement recording the deduction, and
  3. 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 Inventory 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.

On the app

The POS app has the same list under Inventory, with Total SKUs, Low Stock and Out of Stock counters, an All / Low / Out filter, and search across name, SKU and variant. It updates live from the same broadcast the tills receive, and tapping an item shows that item's quantity in every branch.

Two tiles at the top lead to the jobs that belong on a phone rather than a desk: Counts and Receive PO.

Where to go next