Stock Adjustments

Taking stock out for wastage, spoilage and shrinkage, correcting a wrong figure, and who is allowed to do it.

5 min read · Updated 26 Sep 2026

On this page

An adjustment is how you tell Kassly that stock left without a sale — it went in the bin, it broke, it walked, or the number was wrong to begin with. It is free on every plan and it lives on the same form as receiving: Inventory → Stock Levels → Stock Adjustment.

The three types, and which one you want

Adjustment Type What it does
Stock In (add inventory) Adds to the current figure
Adjustment (remove/correct) Subtracts from the current figure
Physical Count (set absolute quantity) Replaces the current figure with the number you type

Adjustment only ever removes. Whatever you enter is taken off, so there is no way to add stock with an Adjustment. To add, use Stock In. To land on an exact figure without working out the difference, use Physical Count.

Physical Count here is the blunt version: it sets one item at one branch to one number, immediately, with no review. The governed version — count a list of items, get a variance report, have a manager approve anything unexpected — is Stock counts.

There are no reason codes

This surprises people, so it is worth stating plainly. Kassly has no dropdown of wastage / spoilage / shrinkage / breakage reasons. What it has is a Notes field, and for Adjustment and Physical Count that field is required — up to 500 characters.

So the reason is whatever you type, and it is only as useful as your habits. The practical advice is to agree one wording per reason and stick to it, because the note is what you will be reading back in six months:

  • Wastage — spoiled, past use-by
  • Breakage — dropped in transit
  • Shrinkage — count short, no explanation
  • Correction — was entered as 100 cases, should have been 100 pcs

Notes appear in Stock Movement History on the product page and in the export, next to the quantity and the person who made the change.

Filling in the form

Field Required Notes
Branch Yes Adjustments are per branch.
Product Yes
Adjustment Type Yes
Variant Only if the item has variants
Quantity Yes For Adjustment, the amount to remove. For Physical Count, the figure to land on.
Unit — Packaging units are offered if the item has them; the figure is converted to the item's stock unit.
Cost Price No
Notes Yes for Adjustment and Physical Count Up to 500 characters.

Batch and expiry fields are not offered on an Adjustment — they only appear for Stock In. See Batch & expiry for why that matters if you are writing off an expired batch.

An adjustment cannot go below zero

If the removal would take the branch below zero, Kassly refuses it and tells you what it has: Insufficient stock. Current: 4, requested: 10.

That is a guard rail, not a bug to work around. A branch showing 4 when the shelf holds 10 means an earlier delivery was never recorded — fix that with a Stock In or a Physical Count rather than shaving the write-off down until it fits.

Sales are different: a sale always takes its full quantity, so an item can be below zero already (see When stock goes below zero). You can't remove more from an oversold item. Record a Physical Count with what is really on the shelf, or a Stock In for the delivery that was missed.

Nothing is ever edited

Every adjustment writes one Adjustment movement — an immutable row carrying the quantity, the branch, the note, the time and your name. Movements cannot be edited or deleted, by anyone, including support.

The practical consequence: you correct a mistake by making a second movement, not by fixing the first. Removed 100 when you meant 10? Stock In the 90 back with a note saying so. Both rows stay in the history, which is exactly what you want when someone asks what happened.

Who is allowed to adjust

Where Who
Web Owner and Manager
App Owner and Manager. Lower roles see Requires manager approval. and a manager PIN prompt.

The custom-role permission for this work is Stock In / Adjust Inventory (stock.manage) — see Custom roles.

Granting that permission to a cashier does not currently work for adjustments. The server still requires the signed-in account to be an Owner or Manager, so a cashier holding the permission passes the app's PIN prompt and is then refused. Until that changes, adjustments have to be made from a manager's account.

Everything is attributed either way: the movement records the account that made it, and adjustments also appear in the audit trail. See Audit logs.

Recipe waste is a different thing

If you run recipes, you will meet a waste percentage on each ingredient line. That is not an adjustment and it is not wastage you record after the fact — it is the trim, peel and spillage built into the recipe, applied automatically on every sale. It is explained in Ingredients & recipes.

Use an adjustment for the wastage nobody planned. Use the recipe's waste percentage for the wastage that happens every single time you cook the dish.

Seeing what you wrote off

Adjustments are outflows, so they show up in the Stock Consumption panel alongside sales and transfers. That means the panel answers "what did we get through" rather than "what did we sell" — see Stock levels for how to read it and what it costs beyond today.

Where to go next