A customer clause requiring seventy five per cent of life remaining on receipt, combined with a quality release hold and transit, leaves far less usable window than the shelf life on the label suggests, and the number that belongs in the planning system is the usable window rather than the total life. Every customer clause creates a different effective expiry date for the same batch, which turns a write-off decision into a downgrade decision. Long campaigns consume usable life before the pallets leave, so the changeover saving and the date code fight each other. The issuing rule that works is the oldest stock that still clears the receiving customer's clause rather than the oldest stock in the building.
The specification sheet says ninety days. The retailer's supply agreement says seventy five per cent of life remaining on delivery, which is sixty seven and a half days, so the stock has to arrive within twenty two days of the production date. Quality release takes three days because the micro results come back on day two and the paperwork moves on day three. Transit to the regional distribution centre is two days. Picking and outbound is another day at the volumes involved.
That leaves sixteen or seventeen days in which the pallet can sit in your own warehouse and still be shippable to that customer. On day eighteen it is still a perfectly good product with seventy two days of life on it, and it has become unsaleable to the account that most of it was made for.
Nobody in the plan sees this. The material master holds ninety days, the ATP calculation uses ninety days, and the exposure report starts flagging the batch about sixty days after it stopped being useful.
Compute the usable window and put it in the system
The arithmetic is simple and almost never written down.
Usable window equals total shelf life, minus the customer's residual life requirement, minus quality release time, minus transit, minus the outbound handling allowance. Everything after the subtraction is the number of days a batch can sit before it fails the gate check at the customer's receiving door.
Run it on the example above and ninety becomes seventeen. Run it on a chilled product with a twenty one day life and a fifty per cent clause and you get something in the region of four days, which explains why chilled operations feel different from ambient ones even when both are described as make to stock.
Two of those subtractions are inside your control. Quality release time is a process with a distribution, and a plant that releases in three days on average but seven days when a retest is needed is losing four days of window on those batches without recording it anywhere. Transit is a network decision, and shipping to a customer's regional depot rather than their national one can return three or four days of window on the same product.
Once the usable window exists as a field, several things start working. Available to promise can check it, so the system stops offering stock that will be rejected at the gate. The exposure report can sort on days to unsaleable rather than days to expiry. Days of cover can be compared against the window, which is the ratio that predicts a write-off six weeks before the write-off happens.
Every clause creates a different expiry date for the same pallet
The complication that makes this a planning problem rather than a master data problem is that the residual requirement varies by customer.
A typical ambient range might face three of them. The major grocer wants seventy five per cent. The discounter takes sixty six per cent. The wholesaler and the foodservice distributor take fifty per cent or accept whatever is agreed on the day. Export customers frequently ask for more than the grocer, because they are adding their own transit to the front of the calculation.
One batch therefore carries three or four different effective expiry dates depending on who receives it, and those dates can be a month apart. The consequence is worth stating carefully, because it changes what a shelf life event is. A batch that has passed the grocer's window still has most of its value available through a different door, so the decision in front of the planner is which channel it drops into and what that drop costs in realised margin.
Handling that well needs an ordered list: customers ranked by residual requirement, with the contribution each one delivers on that product. The planner then knows the sequence of doors a batch falls through as it ages, and roughly what each fall costs. Once the batch is past the last door, the decision set is the one I5 covers.
The rule this implies for issuing is more specific than first expired first out. Sending the oldest available stock to the strictest customer maximises rejection risk. Sending the newest stock to the loosest customer wastes window that the strict customer needed. The rule that works is the oldest stock that still clears the receiving customer's clause with a margin, which is a two-sided constraint rather than a sort.
The classical result behind the instinct is Pierskalla and Roach in Management Science in 1972, who showed that issuing oldest first minimises outdating for fixed-life perishables under a single stream of demand. The condition that does the work there is the single stream. With several customers holding different acceptance thresholds, the oldest-first rule stops being optimal, and the correction is the margin test above rather than a different sort order.
Campaign length spends the window before the pallets leave
The shelf life constraint reaches the plant through campaign length, and this is where most of the avoidable loss is created.
A three week campaign on a slow moving SKU means the pallets made in week one ship in week three. Eighteen days of window have gone before the stock left the site, and on a seventeen day usable window every pallet from the first half of the run is already outside the grocer's clause on the day it is picked.
The plant has good reasons to run long campaigns. Changeovers cost hours, and where an allergen transition is involved the cost is large enough that the schedule organises itself around avoiding it, which AQ1 covers. What is missing from that calculation is that campaign length is being paid for twice: once in the stock it creates and once in the life it consumes.
The way to make the trade visible is to express the campaign in days of cover and compare it against the usable window. A campaign creating twenty four days of cover on a seventeen day window guarantees that some proportion of the run misses its primary customer. A campaign creating ten days of cover on the same window does not. That comparison is a single division and it belongs in the scheduling review, because it converts an argument about flexibility into an arithmetic one. What the changeover hours themselves are worth is EE1's subject, and how the batch size gets reset once the true setup cost is known belongs to EE3.
Forecast error interacts with this asymmetrically. Over-forecasting a product with a long window creates stock that sells late. Over-forecasting a product where days of cover already approach the usable window creates stock that cannot be sold at full price at all. The perishable inventory literature has treated this as a distinct problem since Nahmias's review in Operations Research in 1982, and the more recent survey by Karaesmen, Scheller-Wolf and Deniz in Planning Production and Inventories in the Extended Enterprise from Springer in 2011 is the better entry point for the multi-period versions. The practical implication is that the cost of over-forecasting on these items is not symmetric with the cost of under-forecasting, so a service target chosen for the rest of the range is the wrong target here.
The date code carries decisions made months earlier
Two decisions are frozen into the code printed on the pack, and both are usually made once and never revisited.
The first is the shelf life specification itself. It was set at launch, often from an accelerated study with a safety margin applied by a technologist who was being careful with limited data. Adding days to that specification does more for a shelf life constrained product than anything else on this list, because every extra day flows straight into the usable window. The technical work behind it is real, since it needs storage trials at the temperatures the product actually experiences, and the payoff is worth quantifying before the idea gets dismissed. WRAP's 2013 work on extending product life in UK grocery set out how much waste sits behind small increases in stated life, and the same arithmetic applies to a manufacturer's own write-offs.
The second is which kind of date is printed. EU Regulation 1169/2011 distinguishes use by, which is a safety limit, from best before, which is a quality indication, and the Codex General Standard for the Labelling of Prepackaged Foods, CXS 1-1985 as amended, makes the same distinction internationally. The planning consequence is that they behave differently past the date. Stock past a best before can still have routes available. Stock past a use by does not. A range where both codes are in use needs the code type carried into the planning system, because a single days-to-expiry field treats two very different situations identically.
There is a mundane data problem underneath this that causes real rejections. GS1 application identifiers separate best before, AI 15, from expiry, AI 17. When a customer's inbound systems read one and the warehouse encoded the other, the load is refused at the gate on a product that met the clause. It is worth confirming which identifier each major customer expects, because the failure looks like a shelf life problem and is a labelling one.
What to measure
Four figures make this manageable, and none of them requires new instrumentation.
Remaining life at despatch, as a distribution. The average is uninformative because the average pallet is fine. Plot the fifth percentile by customer and by SKU. That tail is where the rejections come from.
Rejection at gate rate, by customer. Loads refused on date code cost the freight twice, the handling twice, and often the units. Most businesses know this happens and few can state the annual number.
Days of cover divided by usable window, by SKU. Anything above one is a write-off in formation. This is the earliest available indicator and it can be computed from data every planning system already holds.
Share of production shipped inside the primary customer's clause. If eighty per cent of a run goes to the grocer and only sixty per cent of it arrives inside their window, the campaign structure is wrong regardless of what the service metric says.
Where this stops
The residual clause is a commercial term, and planning cannot change it. It is worth testing occasionally, because these clauses are often inherited from a category negotiation years earlier and applied uniformly to products with very different lives, but the answer is frequently no and the plan has to work inside it.
Shelf life extension is a technical exercise with real constraints. Some products cannot be extended without reformulation or a packaging change, and neither of those is a planning decision. The specification is worth challenging as a matter of routine, while any plan that depends on it moving is a plan with a technical dependency in it.
The framing also collapses at very short lives. Below about fourteen days the usable window stops being a planning parameter and becomes a daily ordering problem, where the decision is what to make tonight for tomorrow rather than how to structure a campaign. That is a different discipline and L5 covers the store facing end of it.
There is also a limit on precision. The usable window is a subtraction of four numbers, three of which are distributions rather than constants. Computing it to the day and then planning against that single day gives a false sense of control. The useful version carries a margin of a few days, sized against the variability of the release and transit times, and the margin should be measured rather than assumed.
Pull last quarter's despatch records for one shelf life constrained range, compute remaining life at receipt for each load against that customer's clause, and count what share cleared it by fewer than five days.
More on this in industry on the DemandLabs platform.




