Expiry dates and batches
For medicines, food and cosmetics you can keep stock per batch and expiry date. Purchases then ask for the batch number and expiry date, sales and transfers take what expires first, and the Expiry dates page shows what has expired, what expires soon and what it is worth.
Open Inventory Management › Warehouse Management › Expiry dates. It needs the product read permission. Staff see only the warehouses they are assigned to.
Set it up
- Open a product under Product Details. Batches work for stocked products only.
- In the Batches and expiry card, switch on Track batches and expiry dates. This needs the product update permission.
- Stock already on hand counts as "batch not known" and is sold first.
- From now on, each purchase line of this product asks for its Batch and Expires date. A purchase cannot be posted until each such line has at least one of the two. If a delivery holds two batches, use Another batch to split the line.
The same card then lists the product's batches in stock, per warehouse, with their expiry date, the days left and the quantity. Each batch is marked Expired, Expires soon, Good, No expiry or Batch not known.
The Batches and expiry card, with tracking still switched off
Switching tracking off keeps the batches, but they are no longer followed.
The Expiry dates page
The page lists every batch with an expiry date that still has stock, the soonest first. While no product tracks batches, it says so and shows Nothing expires.
| Tile | Shows |
|---|---|
| Expired | The value of expired batches, and how many |
| Within 30 days | What expires soon (the number of days is your setting) |
| Later | What expires after that |
| Products tracked | How many products track batches |
Click a tile, or use Show (All, Expired, Expiring soon, Later), to filter. With more than one warehouse you can also pick a Warehouse. Search by item, SKU, barcode or batch.
| Column | Shows |
|---|---|
| Item | Name, variant, unit and SKU |
| Batch | The batch number, if one was entered |
| Warehouse | Where the batch is |
| Expires | The date, a bar and the days left, for example "12 days left" or "Expired 3 days ago" |
| In stock | The quantity left in the batch |
| Value | What it is worth at cost |
Click a row to open the product.
Change "expiring soon"
With the settings permission, click the Warn 30 days ahead button, enter a number of days (1 to 365, or click 7, 30, 60 or 90) under Expiring soon means within, and click Save. The tiles and filters use the new number at once.
Write off expired stock
On an expired batch, click Write off and confirm Write off this batch?. This posts a waste of that quantity with the reason "expired" (see Waste and adjustments), noting the batch number. It needs the waste create permission.
How batches are used
- Sales and transfers take the batches that expire first among those still good, then batches without an expiry date, then expired ones.
- Write-offs, stock counts and returns to the supplier take expired batches first.
- Stock whose batch is not known (it was there before tracking) is always used first.
- Returns and arriving transfers put goods back into the batch they came from.
- At the till, if a cart would be sold from an expired batch, a warning such as "Milk 1L: 2 from a batch that expired on 3/10/2026" appears before payment.
Example
A pharmacy switches on tracking for a cough syrup. A delivery of 40 bottles comes in two batches: 25 of batch L231 expiring 30 June and 15 of batch L240 expiring 30 September. The pharmacist enters the first line with batch L231, clicks Another batch for the second and posts. Sales take L231 first. In July, 3 bottles of L231 are left and show as Expired; the manager clicks Write off and they leave the stock as waste.
Last updated 17 Oct 2026