Batch & Expiry
Recording a batch number and expiry date when stock arrives, reading the expiry alerts, and the important things batch tracking does not do.
5 min read · Updated 10 Sep 2026
On this page
If you sell anything perishable, you want to know what is about to go off before your customers do. Kassly lets you tag incoming stock with a batch number and an expiry date, and reports on what is close to the line.
Read the limits section on this page before you build a process around it. What Kassly does here is narrower than most people assume from the words "batch tracking".
| What | Needs an add-on? |
|---|---|
| Recording a batch number and expiry when stock arrives | No. Free on every plan. |
| The Expiry Alerts page and the daily notification | Yes — Inventory Pro |
Expiry Alerts needs the Inventory Pro add-on (₱400 per branch each month), or any bundle that includes it. Recording the dates does not.
Recording a batch
Batch details are captured when stock comes in, and only then.
| Where | Batch fields |
|---|---|
| Stock Adjustment → Stock In (add inventory) | Batch Number, Manufacture Date, Expiry Date |
| Bulk Stock-In, both the table and the Excel template | Batch number and expiry per row |
| Receiving a purchase order, in the web app | Batch number and expiry per line |
| Receiving a purchase order on the POS app | Not offered |
| Field | Notes |
|---|---|
| Batch Number | Up to 100 characters. Free text — Kassly does not generate it. |
| Manufacture Date | Recorded, but not used by any report. |
| Expiry Date | Must not be earlier than the manufacture date. This is the field everything keys off. |
The panel is headed Batch & Expiry Tracking (optional) and appears only when the adjustment type is Stock In. There is nothing to switch on per product; you either fill the fields in for a delivery or you do not.
The Expiry Alerts page
Open Inventory → Expiry Alerts. Four counters across the top:
| Counter | What it counts |
|---|---|
| Expired Batches | Batch lines already past their date |
| Expired Units | The quantity sitting on those lines |
| Expiring Soon | Batch lines due within the window |
| Critical (7d) | Of those, the ones due within a week |
Below that, a View toggle between Expiring and Expired, a Days Ahead box (30 by default) and a search across product, SKU and batch number.
The table shows Product, Batch, Location, Qty, Expiry Date and a Status badge:
| Days until expiry | Badge |
|---|---|
| Already past | Expired nd ago |
| 0 | Expires today |
| 1–7 | nd left, red |
| 8–14 | nd left, amber |
| 15–30 | nd left, yellow |
| More than 30 | nd left, plain |
Location is a branch or a warehouse — batches are reported from both, so a delivery received into a central warehouse shows up here too. See Warehouses.
The daily alert
Every morning at 08:00 Manila time Kassly checks for batches expiring within seven days and sends one notification to every Owner and Manager: "3 product batches expiring within 7 days." It is a nudge to open the page, not a list.
The seven days here are fixed and separate from the Days Ahead box on the page. See Notification settings.
What batch tracking does not do
This is the part that matters.
A sale never picks a batch. Selling an item deducts from the branch's single on-hand figure. It does not choose the oldest batch, the nearest-expiry batch, or any batch at all — the sale's movement carries no batch number.
There is no FEFO or FIFO picking. Kassly does not rotate stock for you and will not warn a cashier that the item they are ringing up belongs to a batch that expires tomorrow. Rotation is a shelf discipline; Kassly's contribution is telling you what to go and look at.
A batch's quantity is what you received, not what is left. Kassly works out a batch's figure by adding up every movement carrying that exact batch number. Because only incoming movements ever carry one, that figure does not go down as you sell.
In practice this means an expired batch line does not clear itself, and there is currently no screen that can clear it. The batch fields appear only on Stock In, and Stock In only adds — so a batch you have thrown away will keep appearing on the Expired list at its original quantity.
Record the write-off as an ordinary Adjustment with a note naming the batch. Your total stock will then be right, which is what the valuation and your books depend on. The Expired line will remain, so treat that list as a running record of what has expired rather than a live picture of what is still in the bin.
Nothing carries a batch between locations. A transfer moves quantity only, so a batch received at the main branch and sent to a second branch is still reported at the first. See Stock transfers.
Getting value out of it anyway
Given the above, the way to use this feature is:
- Fill the expiry date in on deliveries of perishables, and give the batch a name you will recognise — the supplier's lot code, or just the delivery date.
- Work the Expiring list, not the Expired one. Its whole purpose is the fortnight before something becomes a loss: discount it, use it in a special, or move it to the branch that will sell it.
- Write off with an Adjustment and a clear note, so the money side and Stock consumption stay honest.
- Do not use batch quantities as a stock figure. The figure to trust is the one on Stock levels.
Where to go next
- Receiving stock — where the batch fields live
- Stock adjustments — recording a write-off
- Inventory valuation — what the remaining stock is worth