# How expiry tracking and batches work

> Turn on Track expiry for an item and give it a shelf life. Every stock-in of that item then creates a dated batch. Stock-outs draw from the batch expiring soonest, batches due within 30 days are flagged Expiring, expired ones are flagged and shown on the Dashboard, and you write off what is past its date.

_Category: Daily use · Updated 2026-09-06 · Canonical: https://jogan.cloud/help/track-expiry-and-batches_

Expiry tracking is per item. For items with it switched on, Jogan keeps stock in **batches**, each with a manufactured date, an expiry date and a remaining quantity, and always uses the oldest first.

## Step 1: mark the item

When adding or editing an item, tick **Track expiry** and enter its **Shelf life (days)**. See [How to add your items](https://jogan.cloud/help/add-your-items).

## Step 2: batches are created on every stock-in

Whenever an expiry-tracked item comes in, a batch is created:

- A **purchase**, **opening**, **return** or **adjustment in** on the Stock page: enter the expiry date from the label, or leave it blank to use the shelf life counted from the movement date. Enter a batch number or let Jogan assign one (`B-YYMMDD-0001`).
- A **production run**: the finished goods get a batch expiring today plus shelf life.

Two deliveries with different dates should be two movements, so they become two batches.

## Step 3: stock-outs draw down the oldest batch

Every sale, production consumption, waste, damage or adjustment-out of an expiry-tracked item is taken from the batch that expires soonest, then the next. Sale lines remember which batch they came from. You do not choose a batch on the form; first-expiring-first-out is automatic.

## The Batches page

Opens on the **Active** tab, which lists every lot still on the shelf. **Expiring**, **Expired**, **Sold out** and **Written off** tabs filter the rest, so a batch that has run out or been written off moves to its own tab rather than vanishing. Each row shows the item with **Manufactured**, **Expires**, remaining quantity and a **Status**:

| Status | Meaning |
| --- | --- |
| **Active** | In stock, more than 30 days from expiry. |
| **Expiring** | In stock, expires within 30 days. |
| **Expired** | Past its date and still counted in stock. Write it off. |
| **Sold out** | Fully used through sales or production. On the Sold out tab. |
| **Written off** | Removed by a write-off. On the Written off tab. |

## Where you are warned

- The **Dashboard** shows a banner for batches expiring soon and a warning that expired stock is still counted in inventory.
- **Reports → Expired / Expiring** lists expired batches and those due within 30 days, with days left.

## Dealing with expired stock

An expired batch still counts as stock and stock value until you write it off. See [How to write off expired stock](https://jogan.cloud/help/write-off-expired-stock).

## Costing is unaffected

Batches are for dates and traceability only. Cost stays one weighted average per item. See [How Jogan works out cost](https://jogan.cloud/help/how-costing-works).
