Enable the Expiration Dates feature, turn on use_expiration_date on tracked products, and enter expiration_date and removal_date on stock.lot at receipt. Set stock.location removal strategy to FEFO so reservation picks the earliest removal_date quant. Monitor Expiration Dates reporting and quarantine expired lots before validation on outbound pickings.
Steps
- Activate product_expiry: Inventory → Settings → Traceability → Expiration Dates.
- On product.template with lot tracking, set Expiration Time, Best Before, and Alert days.
- On receipts, create lots with expiration_date; Odoo computes removal_date from product rules.
- Warehouse → Locations: set Removal Strategy to FEFO on pickable stock locations.
- Confirm delivery reservation chooses earliest removal_date via stock.quant removal logic.
- Use Reporting → Expiration Dates to export lots nearing alert thresholds.
- Route expired inventory to a blocked location or quality.check before scrap.
Common mistakes
- FIFO location strategy while expecting expiry-based picking.
- Missing removal_date because product expiry times were left at zero.
- Mixing expired and fresh lots under one lot name on receipt.
- Skipping FEFO on subcontracting locations tied to the same warehouse.
- Ignoring use_time alerts so planners never see dashboard warnings.
Odoo version notes
Expiration uses product_expiry in Community and Enterprise for versions 16–18. Enterprise barcode can prompt for expiry at scan time. FEFO is stock-level, not an Enterprise-only feature. Version 17 moved some inventory settings; verify removal_strategy on child locations after migration. Test reservation after any custom FIFO override on stock.move.line.
When to bring in help
If the fix touches custom modules, regulated traceability, or production outages, a focused rescue sprint beats months of trial and error. See our Odoo service.
See our industry practice