Overview
Fresh dairy expires in hours, not days. A paneer batch with 14 hours left and one with 48 hours left both read as "1 day" in a normal stock list — so staff ship the wrong one and the short batch turns into a write-off. Shelf-life alerts watch every dairy batch by the hour and raise a flag at 24h, 12h, and 6h before expiry, so you can route short stock to a discount sale or dispatch it first while it still has value.
Paid Pack · locked
This article is part of the Dairy PackDairy Pack
You can read the guide. The actions it describes unlock when an owner adds this Pack in Billing & entitlements.
This is part of the Dairy Pack (paid). Your Owner turns it on by installing the Dairy Pack from Settings → Billing; once installed, the alerts cron starts watching your dairy batches automatically.
Where to find it
On web at Dairy → Shelf-life (/dairy/shelf-life). It is a desktop screen — there is no mobile view. Only the Owner sees the Dairy menu, so shelf-life alerts are an Owner screen.
Key concepts
- Shelf-life hours — every dairy product carries a shelf life measured in hours, not days. The preset comes from the product's dairy category: 72h for curd, 168h for paneer, 240h for fresh cheese, 720h for milk-based syrups, 8760h for ghee. This hour precision is what lets the system tell a 14h paneer apart from a 48h one.
- Severity tier — each alert sits in one of three tiers: Warning (≤24h), Warning (≤12h), and Critical (≤6h). As a batch ages, it escalates up the tiers.
- Acknowledge — your dismiss on an alert, with an optional note like "routed to discount sale". It stamps the alert resolved and moves it from the open list to the acknowledged list.
- Resolved — an alert clears either when you acknowledge it, or automatically when the batch is disposed or its stock hits zero. Both set the same resolved stamp, and the open / acknowledged filter keys off it.
Common workflows
Open Dairy → Shelf-life. The three KPI tiles at the top count open alerts by tier — Critical (≤6h), Warning (≤12h), Warning (≤24h). Start with Critical.
Use the Severity dropdown to show only Critical (≤6h) alerts, or the open / acknowledged pills to hide the ones you've already handled. Each row shows the batch, product, hours left, and when the alert was emitted.
The Hours left column is the number that matters. At 6 hours or under it turns pink so it jumps off the screen.
Hit Acknowledge on a row, add an optional note (e.g. "Routed to discount sale, expected to clear by 22:00"), and confirm. The alert is stamped resolved and moves to the Acknowledged list.
The alerts themselves are written by a background job that runs every 30 minutes — there is no "create alert" button. You read them, act on the stock, and acknowledge.
Role notes
Shelf-life alerts are an Owner-only screen. Owner can view the alert list and acknowledge alerts. These powers come from the Dairy Pack: Pack permissions are not granted to the Owner until the Pack is installed — before that, even the Owner cannot see the screen. No other role (Manager, Operator, Warehouse, etc.) has access to Dairy Pack screens.
There is no manual "create alert" action — alerts are emitted by the cron every 30 minutes. You clear an alert by acknowledging it, and the cron also auto-resolves one when the batch is disposed or its stock reaches zero.
Tips & time-savers
Add a note when you acknowledge — "routed to discount sale", "dispatched to QC platform first", "held for tomorrow's collection van". The note travels with the alert, so when you reopen the screen you can see at a glance which short batches already have a home and which still need a decision.
Filter to Critical (≤6h) first thing each morning and clear that list before touching anything else — those are the batches that turn into a write-off by lunch.
Gotchas
Acknowledging clears this alert — it moves to the Acknowledged list — but it does not stop the batch ageing. The same batch raises a fresh alert at the next tier (24h → 12h → 6h) until you actually move the stock, so acknowledging the 24h warning won't spare you the 6h critical. Acknowledging is your dismiss; the cron also auto-resolves an alert when the batch is disposed or its stock hits zero.
Shelf-life alerts only watch products that are tagged as dairy with a shelf-life set. A dairy product missing its category or hours will be skipped by the cron — so it won't appear here at all.