Odoo consultants for regulated manufacturers · code you keep

Inventory · Odoo guide

How do I set up expiration dates and FEFO in Odoo?

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.

By Chase Robbins, Operator & Founder at The ERP Firm · Last updated October 24, 2026

Steps

  1. Activate product_expiry: Inventory → Settings → Traceability → Expiration Dates.
  2. On product.template with lot tracking, set Expiration Time, Best Before, and Alert days.
  3. On receipts, create lots with expiration_date; Odoo computes removal_date from product rules.
  4. Warehouse → Locations: set Removal Strategy to FEFO on pickable stock locations.
  5. Confirm delivery reservation chooses earliest removal_date via stock.quant removal logic.
  6. Use Reporting → Expiration Dates to export lots nearing alert thresholds.
  7. 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.

FAQ

Follow-up questions

What field drives FEFO?
removal_date on stock.lot and stock.quant; expiration_date is informational for consumption limits.
Can FEFO be overridden on one order?
Users with rights can manually pick lots in Detailed Operations, but audit logs should capture overrides for regulated industries.
Does manufacturing respect FEFO?
Component reservations from stock locations using FEFO will prefer earliest removal dates unless manually changed on MO move lines.

Book a scoping call for your Odoo environment.

Bring your version, user count, and the workflow that is blocked today.

Book a scoping call