Quarantine and holds
Core module 3PL add-on Odoo Enterprise: Quality app For: Administrator, Compliance manager, Warehouse staff Checked on 18.0.0.2.0, 18.0.1.0.0
A hold stops DSCSA units from being reserved or shipped while something about them is unresolved: a suspicion, a receiving discrepancy, a missing statement, a returned unit nobody has checked yet. Some holds are placed by a manager, others by the software itself; this page explains how they fit together and who can lift each one.
What a hold is
Rx Tracking holds stock by lot. A lot of a DSCSA product has a Quarantine status on its form: Not Quarantined, Quarantined or Released. While a lot is Quarantined, its packages that were In Stock or Returned are Quarantined too, and:
- the lot is never reserved for an order, and the reservations it had move to other lots;
- validating a delivery, a return to the supplier, or a move to a transit location or another company refuses the lot (a non-saleable return to the supplier is the exception);
- scanning one of its units onto a delivery is refused ("… can't be used here: it is Quarantined.");
- receipts into the lot, internal moves (for example to a quarantine shelf) and scrapping stay possible.
The units stay in stock and in Odoo's on-hand quantities. The lot keeps the reason, who placed the hold and when, and the same for the release; Inventory ‣ Rx Tracking ‣ Quarantined Lots lists the lots on hold now. See Quarantine a lot so it can't be reserved or shipped and Review the lots on hold, and why they are held.
A released lot can be reserved and shipped again, and each package gets back the state it had before the hold. Nothing is reserved at the moment of release: open deliveries pick the lot up at their next availability check.
The kinds of hold
| Hold | Placed by | What it holds | Lifted by |
|---|---|---|---|
| A manager's quarantine | an Rx Tracking Manager's Quarantine on the lot, with a reason | the whole lot | a Manager's Release, with a reason (EXC-02) |
| A receiving discrepancy (missing, extra, duplicate serial, wrong product, lot or expiry) | the software, when the receipt becomes Done | the lots of the receipt the discrepancy names; a duplicate serial holds both lots | resolving the discrepancy (User or Manager) never releases the lot; a Manager releases it once nothing else holds it (DISC-08) |
| A missing Transaction Statement | the software, when a receipt whose supplier file has no affirmed statement becomes Done | every DSCSA lot of the receipt | recording the statement releases the lots automatically, unless another hold remains (DISC-07) |
| Returns to Verify (not a lot hold) | the software, when a customer return becomes Done | each returned unit (package Returned) until a decision | a Manager verifies the unit for resale or rejects and destroys it (RET-02) |
The lot form's Held Outside Discrepancies says whether the lot also has a hold that didn't come from a receiving discrepancy, such as a manager's own quarantine. That is why recording a missing statement can leave a lot Quarantined: the other hold still applies, and each Rx Tracking Manager gets a Lot still quarantined activity to review it.
With the Suspect Product add-on (Odoo Enterprise)
Every lot that enters quarantine, by a manager or by the software, opens a Suspect product investigation for it (unless it already has an open one, or the setting is cleared). An investigation can also quarantine and release its lot itself (Quarantine Lot, Release Lot); these use the same lot status and the same reason. See Follow the investigation a lot quarantine opens automatically. Without Enterprise, the lot's quarantine is the hold and its chatter the running record: see Suspect product without Odoo Enterprise.
With the 3PL add-on
A lot can hold your units and several owners' units at once. Two more rules apply:
- Every hold of a lot that holds owner units notifies each owner with units of it in your custody, and releasing such a lot needs each owner's release instruction when its profile says Required. See Put a lot that holds owner units on hold and Release a lot that holds owner units, with each owner's release instruction.
- An owner hold holds one owner's units only. With the company's Hold scope set to Per owner for documentation holds, a documentation problem on an owner's receipt (a missing statement, missing supplier data, a transaction-information mismatch) places an owner hold instead of quarantining the whole lot. It is listed in Owner Holds (3PL ‣ Operations) and is lifted automatically when the missing documentation is recorded, or by a Manager's Release Owner Hold with the owner's instruction. See Choose the hold scope: whole lot or per owner and Follow and release owner holds.
An owner's goods that arrive before their supplier data are held under a Supplier Data Pending discrepancy until the data or the owner's confirmation is recorded (Receive an owner's goods before their data). A recall holds the owner's lots on its recall instruction (Recall an owner's lots on its recall instruction).
How holds combine
A unit is free only when no hold applies to it:
- One lot has one Quarantine status, whatever placed it. Lifting one cause (resolving a discrepancy, recording a statement) doesn't release a lot that another cause still holds.
- With 3PL, a lot released while an owner hold is still active frees every unit except that owner's; an owner hold released while the lot is still quarantined leaves the owner's units Quarantined until the lot is released too.
The complete rules, including which releases need an owner's instruction, are in What an owner hold blocks, how holds combine, and when a release needs the owner's instruction.
Who can release what
Placing a hold never needs anyone's approval. Releasing one does:
| To release | Who | Also needed |
|---|---|---|
| A lot (any lot hold) | Rx Tracking Manager | a reason; with 3PL, each owner's Release from hold instruction when its profile says Required |
| A lot held only for a missing Transaction Statement | nobody: it is released when the statement is recorded (Rx Tracking User or Manager) | the statement's source and evidence |
| A returned unit | Rx Tracking Manager (verify for resale, or reject and destroy) | — |
| An owner hold | automatic when the documentation is recorded, or Rx Tracking Manager | the owner's instruction when its profile says Required |
| A lot from its investigation (Enterprise) | Rx Tracking Manager (Release Lot) | a reason |
Why it exists
Background: Odoo can move suspect product to a shelf, but nothing stops it from being reserved, so the modules add a lot quarantine that blocks reservation. The modules follow the reading that product with a receiving discrepancy isn't sold on until the discrepancy is resolved (FD&C Act § 582(c)(1)(A)(i), § 582(g)(1); FDA interoperable exchange guidance (September 2023); see Compliance background), that suspect product is quarantined while it is investigated and released if it is cleared (FD&C Act § 582(c)(4); FDA suspect-product guidance (June 2021); Form FDA 3911; see Compliance background), and that returned product is verified before it is resold (FD&C Act § 582(c)(1)(B), § 582(c)(4)(D); see Compliance background). For owner stock, every hold that touches owner units notifies each affected owner, and the reach of a hold is left to the business (FD&C Act § 582(c)(4); FDA suspect-product guidance (June 2021); Form FDA 3911; see Compliance background).
Your procedure decides when a lot is quarantined, who investigates it, and who may release it on what evidence; the software requires the Rx Tracking Manager right and a reason for every manual hold and release.