Expiry Date Management in Odoo Inventory#
For food, pharmaceuticals, and other perishable products, expiry date tracking is both a quality requirement and a regulatory obligation. Odoo enforces FEFO (First Expiry First Out) picking and alerts you to near-expired inventory automatically.
Prerequisites#
Inventory → Configuration → Settings → enable:
- Lots & Serial Numbers
- Expiration Dates
Configuring Expiry Tracking on a Product#
Product → Inventory tab:
- Tracking: By Lot (required for expiry tracking)
- Expiration Time: number of days the product is valid from the production/receipt date
- Best Before Time: advisory date (product is still safe but quality degrades)
- Removal Date: Odoo removes this lot from FEFO consideration (for over-aged stock)
Recording Expiry Dates at Receipt#
When receiving a lot-tracked product:
Receipt → Detailed Operations tab → Lot/Serial Numbers:
- Lot Number: LOT2027-09-001
- Expiration Date: 2028-03-31 (enter manually or from vendor label)
- Best Before Date: 2028-02-28
If a lot is received without an expiry date: Odoo calculates it automatically using the product's Expiration Time setting: Receipt Date + Expiration Days.
FEFO Picking Enforcement#
Inventory → Configuration → Locations → WH/Stock → Removal Strategy: FEFO
When a delivery is generated:
- Odoo selects lots by expiry date (soonest expiry first)
- Picker assigned to the lot that expires first - regardless of when it was received
- This prevents accumulation of expired stock behind newer stock
Near-Expiry Alerts#
Inventory → Configuration → Settings → Removal Date → enable email alerts:
- Alert X days before expiry (e.g., 30 days)
- Notification: "Lot LOT2027-09-001 of Product X expires on 2028-03-31 - 25 units remaining"
Expired Lot Quarantine#
Inventory → Products → Lots/Serial Numbers → [Lot] → when past expiry date:
- Status: Expired (Odoo prevents this lot from being auto-picked)
- Manual transfer required: move to Quarantine for disposition
- Disposition: scrap or return to vendor
Reporting on Expiry#
Inventory → Reporting → Expiration Dates:
- All lots sorted by expiry date
- Filter: expiring in next 30/60/90 days
- Stock value at risk of expiry (valuable for write-off provisioning)

