Skip to main content

Scan and ship deliveries

Core module For: Compliance manager, Warehouse staff Checked on 18.0.0.2.0

Scan the serial number of every DSCSA unit that leaves the warehouse, then validate the delivery. Validating checks the customer, the scans and the units once more, marks the units Shipped in the package ledger and posts the delivery's DSCSA document.

Scan the serials of a delivery and validate it​

Scan each unit's DataMatrix into the delivery's Scan DSCSA Serials dialog, then select Validate. Background: the modules follow the reading that the transaction information of a sale includes the product identifier of each package (GTIN, the Global Trade Item Number, serial number, lot and expiry) (FD&C Act § 582(c)(1)(A)(ii)–(iii), § 582(g)(1)(A)–(B); § 581(22), (24), (26), (27); see Compliance background).

Note

With Odoo Enterprise's Barcode app, see Ship DSCSA units in the Barcode app. For units that a 3PL holds for an owner, see Pick, scan and ship an owner order.

Who: Rx Tracking User or Manager

Requires: Rx Tracking (DSCSA). Works in Odoo Community and Enterprise.

Before you start:

  1. Go to Inventory ‣ Operations ‣ Deliveries and open the delivery, for example WH/OUT/00012 (source document S00025, 12 Demoprazole and 2 Adhesive Bandages).

    Screenshot of the delivery WH/OUT/00012 in the Ready state. The Scan Serials button is outlined.

  2. Select Scan Serials.

    Result: the Scan DSCSA Serials dialog opens. It shows the delivery (in a field labelled Picking), Already scanned (the units scanned so far) and Product for an unknown GTIN, above the scan box "Scan here...".

  3. Scan the DataMatrix of each unit you ship into the scan box, one per line. You can also paste lines.

    Screenshot of the Scan DSCSA Serials dialog on WH/OUT/00012 with twelve Demoprazole lines pasted. Register is outlined.

  4. Select Register.

    Result: the dialog closes. The DSCSA Packages tab lists each unit with its Serial Number, Product, Lot, Expiration Date and the State In Stock (the unit stays in stock until the delivery is Done). On the Operations tab, the Quantity of the product counts the units scanned. When you scan units of the lot Odoo reserved, as here, it equals the number of units scanned; lines of another lot that Odoo reserved stay on the tab and are counted too, but only the scanned units ship (Ship part of a delivery). The chatter says "12 DSCSA package(s) scanned.".

    Screenshot of the DSCSA Packages tab of WH/OUT/00012: twelve Demoprazole units In Stock, each with its Remove this scan icon.

  5. For the next batch, select Scan Serials again and repeat steps 3–4.

  6. When every DSCSA unit is scanned, select Validate.

    Result: the delivery is Done. The chatter says "DSCSA document DSCSA/OUT/2026/NNNNN posted for this transfer.", and the DSCSA Documents smart button appears.

Result: the DSCSA units are shipped and documented. Records: the delivery WH/OUT/NNNNN (Done); one package per unit, now Shipped to the company of the delivery address; one outbound DSCSA document DSCSA/OUT/YYYY/NNNNN (Posted) with its T3 report (Transaction Report) and EPCIS file (Open the DSCSA document a delivery posted). Lines of non-DSCSA products (the bandages) need no scan and ship as in standard Odoo. If the delivery email option is on, the confirmation email carries the two files (Send the DSCSA files with delivery confirmation emails).

On the delivery form, Alt+Shift+S also opens Scan Serials. Scanning a unit that is already on this delivery changes nothing.

Sealed cases (Known issue PF-F04-01): a sealed case can't be shipped from its case (SSCC, Serial Shipping Container Code) label. Open the case and scan every unit in it; a case label scanned on a delivery is refused. The EPCIS file of the delivery's document lists the units, not the case (The outbound EPCIS 1.2 file). A case label is accepted only when you receive the case with the supplier's EPCIS file (Error: "SSCC … is not a case the supplier's EPCIS file lists for this transfer").

An Inventory User without an Rx Tracking right sees neither Scan Serials nor the DSCSA Packages tab; they can validate the delivery once a colleague with the right has scanned the units, and the document is posted all the same.

If it doesn't work

Registering is all or nothing: if one line is wrong, "Nothing was registered. Fix these scans and try again:" lists every wrong line by its number, and none is registered. Select Close: the dialog keeps your lines, so you can correct or delete the wrong ones and select Register again.

Next: Open the DSCSA document a delivery posted

Ship part of a delivery, or ship in pick, pack and ship steps​

Only the units you validate now need a scan. Ship what is ready and leave the rest for a backorder; or, in a warehouse with several delivery steps, scan on the first step and validate each step in turn.

Who: Rx Tracking User or Manager

Requires: Rx Tracking (DSCSA). Works in Odoo Community and Enterprise.

Before you start:

Ship part of a delivery​

  1. Open the delivery, select Scan Serials, scan only the units you ship now, and select Register (OUT-03 steps 1–4).

    Result: the DSCSA Packages tab lists the units scanned. The Quantity on the Operations tab can still count units that Odoo reserved from another lot (for example 2.00 after one scan, for a Demand of 3 reserved from two lots). They aren't shipped: validating moves only the scanned units.

  2. Select Validate.

    Result: Odoo asks "Create Backorder?": "You have processed less products than the initial demand."

  3. Choose one:

    • Create Backorder: the rest ships later on a new delivery.
    • No Backorder: the rest is cancelled.

    Result: the delivery is Done and its DSCSA document lists the units shipped. With a backorder, the chatter says "The backorder WH/OUT/NNNNN has been created."

  4. When the rest is ready, open the backorder in Inventory ‣ Operations ‣ Deliveries and ship it as in OUT-03.

    Result: the backorder is Done and gets its own DSCSA document.

Don't lower the Quantity on the Operations tab by hand: a typed quantity has no scans, and validating is refused with "… 1 expected, 0 scanned." before the backorder question. What ships is what the DSCSA Packages tab lists: a typed quantity and lines of other lots stay on the Operations tab after you scan, but validating moves only the scanned units.

Ship in pick, pack and ship steps​

In a three-step warehouse (in the example database, the Albany Annex, WH2), confirming the order creates the Pick transfer. The next step is created when the previous one is Done.

  1. Go to Inventory ‣ Operations ‣ Internal and open the pick, for example WH2/PICK/00001. The Inventory ‣ Overview card Pick of the warehouse lists it too.

  2. Select Scan Serials, scan the units you pick, and select Register (OUT-03 steps 2–4).

  3. Select Validate.

    Result: the pick is Done. The pack transfer (WH2/PACK/NNNNN, also in Internal) is Ready, and its DSCSA Packages tab already lists the scanned units.

  4. Open the pack transfer and select Validate.

    Result: the pack is Done. The ship step (WH2/OUT/NNNNN, in Inventory ‣ Operations ‣ Deliveries) is Ready, with the same units.

  5. Open the ship step and select Validate.

    Result: the ship step is Done, and the chatter says "DSCSA document DSCSA/OUT/2026/NNNNN posted for this transfer.".

The pick and pack steps are moves inside the warehouse: they post no document and check neither the customer nor the serial count. The ship step, which sends the units to the customer, does all three.

Result: the units shipped are documented. Records: each delivery (or ship step) you shipped, Done, with one DSCSA document each; with a partial delivery, the backorder WH/OUT/NNNNN (Ready or Waiting) and, once shipped, its own document; the units Shipped.

If it doesn't work

Known issue

Known issue (PF-V02d-01): after a scan, the Quantity on the Operations tab still counts the lines of other lots that Odoo reserved, and a quantity typed by hand, so it can be higher than what ships. Check the DSCSA Packages tab instead: validating ships exactly the units it lists, and the DSCSA document lists the same units.

Correct the scans of an open delivery​

Remove a unit scanned by mistake, or scan another one instead, as long as the delivery isn't Done. Cancelling the delivery releases every scanned unit.

Who: Rx Tracking User or Manager

Requires: Rx Tracking (DSCSA). Works in Odoo Community and Enterprise.

Before you start:

  1. Open the delivery and select the DSCSA Packages tab.

  2. At the end of the unit's row, select the ✖ (Remove this scan) icon.

    Result: the row disappears, and the Quantity on the Operations tab drops by one. The unit stays In Stock and can be scanned on another delivery.

  3. To ship another unit instead, select Scan Serials, scan it and select Register (OUT-03 steps 2–4).

Result: the delivery lists only the units that ship. Records: the delivery's scans (DSCSA Packages tab); the removed unit's package, In Stock and free. The chatter keeps the earlier "N DSCSA package(s) scanned." lines.

Cancel the delivery​

  1. On the delivery, select Cancel.

    Result: "Are you sure you want to cancel this transfer?"

  2. Select Ok.

    Result: the delivery is Cancelled, and every unit scanned on it is released: it stays In Stock and can be scanned on another delivery.

If it doesn't work

Ship at lot level to an exempt small dispenser​

A customer flagged as a small business dispenser may receive lot-level transaction information until the company's exemption end date. You can validate its deliveries without scanning, and the document lists lots and quantities instead of serial numbers. Background: FDA's letter of 2026-08-06 exempts small business dispensers and their trading partners from certain requirements until 2027-11-27 (FD&C Act § 582(g)(1); FDA exemption letters of 2024-10-09 and 2026-08-06; see Compliance background).

Your procedure decides which customers are flagged and whether their deliveries are scanned anyway; the software requires the flag, an attestation date and an exemption end date in the future.

Who: Rx Tracking User or Manager

Requires: Rx Tracking (DSCSA). Works in Odoo Community and Enterprise.

Before you start:

  1. Go to Inventory ‣ Operations ‣ Deliveries and open the delivery, for example the delivery of 2 Demoprazole to Hillcrest Family Pharmacy.

  2. Without scanning, select Validate.

    Result: the delivery is Done. The chatter says "DSCSA document DSCSA/OUT/2026/NNNNN posted for this transfer.".

  3. Select the DSCSA Documents smart button.

    Result: the document has Lot Level selected, and only Download T3 (no EPCIS file, and no warning about it). The Products tab lists each product with its Lot and Quantity.

    Screenshot of a lot-level DSCSA document for Hillcrest Family Pharmacy: Lot Level selected, only Download T3 in the header.

Result: the delivery is shipped with lot-level information. Records: the delivery (Done); one outbound DSCSA document with Lot Level selected, whose T3 report lists lots and quantities without serial numbers and has no EPCIS file by design. The units shipped without a scan stay In Stock in the package ledger.

Scan anyway​

You may scan the units of a small dispenser's delivery. Once you scan one unit of a product, scan all the units of that product: the serial count then applies to it. The scanned units become Shipped, and the document is still lot level.

If it doesn't work

Known issue

Known issue (PF-A03-02): units shipped at lot level without a scan stay In Stock in the package ledger. A search by Serial in Documents or a trace request by serial doesn't find the lot-level sale, and the ledger shows the units as in stock. Search and trace such units by Lot. To keep the ledger in step, scan the units anyway (see Scan anyway).