Inventory expiry: how to test lots and FEFO before accepting the system
An expiry alert does not prove the system prevents shipping that lot. Test dates, picking order and returns with quantities that reconcile.
Which date does your system use, and when does a lot stop being eligible?
Dates serve different purposes. Odoo 19's expiry documentation distinguishes expiry, best-before, removal and alert dates. A notification warns; separately test the picking block in the configuration and version you will use.
- Lot date: identify the source and compare it with the goods’ label or documentation. A period calculated from receipt needs validation; receiving a lot today does not extend its life.
- Picking rule: agree whether expiry or an earlier removal date takes priority, and how ties are resolved. Odoo’s FEFO strategy prioritizes the assigned removal date.
- Eligibility limit: define the blocking date, time and time zone. Also define remaining life at delivery if your customer requires it. A lot eligible today may not qualify for a future shipment.
- Missing data: decide what happens when the date is absent or differs from the label. Where expiry tracking is required, a blank date should await review under the agreed policy.
Write these rules with the people who receive, pick and approve exceptions. An expiry column alone is insufficient. Keep the inventory control guide for general receipts, counts and reorder levels; this article tests the decision about which lot may leave.
Why are some pieces in the warehouse unavailable to promise?
Expired goods, stock reserved for another order and goods awaiting review may still be physically present. In this guide’s model, available = on-hand - reserved - blocked. Reserved and blocked are separate groups: do not subtract one piece twice. If a reserved lot becomes blocked later, review the commitment and move the piece into the correct group.
Quarantine blocks goods while the responsible person reviews a return or discrepancy. It means neither disposal nor approval for sale. An alert alone does not move quantities. Inventory between warehouses explains transit and reservations; receipt does not remove an expiry block.
Worked example: 100 pieces, different receipt dates and an expired lot
| Lot | Received | Expiry and removal | On-hand | Blocked | Available |
|---|---|---|---|---|---|
| V-01 | Oct 2, 2026 | Oct 7, 2026 | 20 | 20 | 0 |
| P-01 | Oct 6, 2026 | Oct 10, 2026 | 30 | 0 | 30 |
| C-01 | Oct 1, 2026 | Nov 1, 2026 | 50 | 0 | 50 |
| C00 total | One warehouse | Test date: Oct 7 | 100 | 20 | 80 |
Order PED-45 needs 45 pieces. Reserve 30 from P-01 first, then 15 from C-01. C-01 arrived earlier but expires later; V-01 is blocked and excluded from picking. Because removal and expiry dates match in this exercise, both produce the same order. If you separate them in your system, repeat the test using the date that actually governs its strategy.
| Step | On-hand | Reserved | Blocked | Available |
|---|---|---|---|---|
| C00: initial state on Oct 7 | 100 | 0 | 20 | 80 |
| C01: reserve PED-45 (30 P-01 + 15 C-01) | 100 | 45 | 20 | 35 |
| C02: physically dispatch 45 reserved pieces (SAL-45) | 55 | 0 | 20 | 35 |
| C03: 5 P-01 pieces return; quarantine (DEV-05) | 60 | 0 | 25 | 35 |
| C04: repeat DEV-05 without another receipt | 60 | 0 | 25 | 35 |
| C05: review releases 3; 2 remain blocked | 60 | 0 | 22 | 38 |
| C06: Oct 10 arrives; the 3 released pieces expire | 60 | 0 | 25 | 35 |
| C07: try to reserve 36; reject the request | 60 | 0 | 25 | 35 |
| C08: authorized dispatch of 20 V-01 for disposal | 40 | 0 | 5 | 35 |
After SAL-45, 20 V-01 pieces and 35 C-01 pieces remain: 55 on-hand. DEV-05 adds 5 P-01 pieces, all quarantined. Review on October 7 releases 3 and leaves 2 blocked; 38 are available. On October 10 those 3 are no longer eligible, so availability returns to 35. Do not deduct the 2 quarantined pieces again when they reach expiry.
In C08, the documented V-01 dispatch reduces on-hand and blocked stock by 20 each; the 35 available pieces are unchanged. The final total reconciles: 100 initial - 45 shipped + 5 returned - 20 removed = 40. Blocking stock preserves the physical quantity; recording its actual dispatch reduces it. Deleting the lot is not a substitute for that movement.
When does a return become available again?
First record what physically returned: product, lot, quantity, unit, originating dispatch document and return reference. Under the exercise policy, it enters quarantine. The responsible person checks condition and dates before releasing some, retaining a block or recording an authorized dispatch. Changing the order status must neither recreate stock nor renew its expiry.
DEV-05 represents one receipt of 5 pieces. Resending the event after a connection failure must show the existing record without another receipt. A different return needs its own reference and evidence. Retaining the original dispatch also identifies the customers who received the rest of the lot.
Partial approval in C05 records who released 3, why and when, and why the other 2 remain blocked. If your business has different return or re-entry rules, replace them in writing before running the tests; do not assume every program behaves like this model.
What tests should the vendor pass before acceptance?
| Test under your rules | Evidence to inspect |
|---|---|
| Receipt and expiry dates in different orders | The eligible lot expiring or reaching removal first is picked first, even if received later |
| Alert without a block | Verify what prevents reservation or picking; the warning is insufficient |
| Removal earlier than expiry | Priority and eligibility follow the defined dates for that product and customer |
| Exact expiry boundary | Test before and from the cutoff, including a reservation made the previous day |
| Missing or corrected lot date | Visible review, permissions and reason; no silent allocation or erased date history |
| Order split across lots | Quantities and documents retain the actual lot for each dispatch |
| Return with partial release | Only received goods increase on-hand; only approved eligible goods increase availability |
| One event sent twice | One receipt or dispatch with the same reference and balance |
| Order above availability | Reject or mark pending explicitly; do not use expired lots to fill the gap |
| Goods dispatched for disposal | Authorized dispatch and reconciled balance; the lot history remains accessible |
Run the sequence with the receiving and picking staff on the intended devices. Keep references, expected balances, screenshots and discrepancies, and repeat the affected steps after a correction. The physical label must match the lot selected in the system. If data and balances need cleanup first, use the inventory migration plan from Excel.
Can you configure the software you already use?
Start by testing your current software: lot tracking, dates, picking strategy, permissions and blocking rules. Available features depend on the product, version and configuration. You do not need another system if configuration passes your tests. If sales, warehouse staff or the portal still see different balances, identify the missing integration or extension before replacing everything.
To review the scope of an inventory system, bring three representative lots, a return and your customers’ remaining-life rule. Our agribusiness software page explains traceability through receipt, transformation and shipment; FEFO adds another decision to test. A distributor can start with this process and connect orders later.
Bring the exercise to a free consultation to agree what the first stage must demonstrate. It is a proposed test for your operation, not a claim that Nightly has delivered these rules in a previous project. Odoo 19 sources were reviewed October 7, 2026; this operational acceptance guide does not certify sanitary, tax or regulatory compliance.
Frequently asked questions
No. This exercise picks eligible pieces expiring first. P-01 arrived after C-01 but expires earlier. If your software uses a configured removal date, verify that date and its priority rather than assuming it always matches expiry.
It does not prove a block. Alerts and blocks are different controls. Test reservation and picking with an expired lot and inspect the result in your product, version and configuration.
Not in this guide’s model. The 5 returned pieces physically enter the warehouse but remain quarantined. Only 3 become available after authorized review; the other 2 remain blocked.
There are 40 on-hand: 35 C-01 pieces available and 5 P-01 pieces blocked. The calculation is 100 initial minus 45 shipped, plus 5 returned, minus 20 removed. Repeating DEV-05 adds no other return.
Not necessarily. Configure and test your current system first. An integration or extension makes sense if a required rule is missing or other tools do not respect the same lots and balances.
Sources
Last updated: