Skip to main content

Count DSCSA stock

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

Count DSCSA products with Odoo's Physical Inventory as usual. When a count changes the quantity of a DSCSA product, the software asks for the DataMatrix of each unit that is gone or found, so the package ledger knows exactly which units they were. A count that confirms the quantity, and any count of a product that isn't a DSCSA product, works as in standard Odoo.

Note

With Odoo Enterprise's Barcode app, see Count DSCSA stock in the Barcode app. For units a 3PL keeps for an owner, see Count an owner's stock and record the units that are gone.

Count stock and record the units that are gone​

When fewer units are on the shelf than Odoo shows, apply the count and scan the units that are gone. Their packages become Missing: not destroyed, because nobody saw them destroyed, so a later count can still find them.

Background: the modules keep one package per unit on hand, so the ledger has to learn which serials left stock.

Your procedure decides when to count, who counts, and what to investigate when units are missing; the software requires the Rx Tracking User right and one serial per missing unit.

Who: Rx Tracking User or Manager

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

Before you start:

  1. Go to Inventory ‣ Operations ‣ Physical Inventory.

    Result: the Inventory Adjustments list opens, filtered on My Counts.

  2. Remove the My Counts filter (the × on it), then search for the product, for example Samplostatin, and press Enter.

    Result: one line per location and lot, with On Hand Quantity.

  3. On the line of the lot, select the Counted Quantity cell and enter what you counted, for example 10 for lot BPSMS2508B where 12.00 are on hand.

    Result: Difference shows -2.00.

  4. At the end of the line, select Apply.

    Result: the DSCSA Serials dialog opens with one line per DSCSA count: Product, Lot/Serial Number, Location, On Hand, Counted, Difference (red) and Serials.

  5. Select the Serials cell of the line and scan the DataMatrix of each unit that is gone, one per line. You can also paste the lines.

    Screenshot of the DSCSA Serials dialog: Samplostatin lot BPSMS2508B, 12 on hand, 10 counted, two scans. The Difference, -2.00, is outlined.

  6. Select Apply.

    Result: the dialog closes and the line shows the new On Hand Quantity (10.00), with no counted quantity left.

Result: the stock is lowered and the named packages are Missing; they can't be shipped, scrapped or returned until a count finds them again. Records: the inventory move from the location to Virtual Locations/Inventory adjustment (reference "Product Quantity Updated", or your reason, see below), listed in Inventory ‣ Reporting ‣ Moves History; the packages, now Missing (the Missing filter of Inventory ‣ Rx Tracking ‣ Packages); a note in the lot's chatter: "Inventory count at WH/Stock: 2 package(s) recorded as missing: 500000007011, 500000007012."

Apply several counts at once, with a reason​

  1. Enter the counted quantities of several lines (steps 1–3), then select the lines' checkboxes.

  2. Select Apply at the top of the list (or Apply All for every counted line).

    Result: Odoo's Inventory Adjustment dialog opens, with Inventory Reason "Quantity Updated".

  3. Enter your reason, for example Cycle count 2026-09-27, and select Update Quantities.

    Result: the DSCSA Serials dialog opens with one line per DSCSA count that changes a quantity. Lines of other products are applied without serials.

  4. Scan the serials of each line and select Apply.

The reason becomes the reference of the inventory moves and the Registration Note of any package found.

From the product's Update Quantity list​

On a product form, Update Quantity opens a list where On Hand Quantity can be edited directly. For a DSCSA product, enter the new quantity and, in the same row, the scans of the units gone in DSCSA Serials, then save. The same checks apply when the row is saved. A count without serials is refused with the same message as in step 6.

Undoing a count​

Odoo's Revert Inventory Adjustment (in Inventory ‣ Reporting ‣ Moves History, which needs Inventory Administrator: select the move, then the ⚙ (Actions) menu) is refused for DSCSA products. Count the lot again and name the serials of the units found or gone instead. To drop a count you haven't applied yet, select Clear on its line.

If it doesn't work

Known issue

Known issue (PF-W10-01): the Serials column of the DSCSA Serials dialog is narrow, so each scan wraps over several lines and a long list is hard to check. The scans are read correctly. To check them, paste them from a text editor, where you can see one scan per line.

Next: Record units found in a count

Record units found in a count​

When more units are on the shelf than Odoo shows, apply the count and scan the units found. A unit whose package was recorded Missing comes back In Stock; a unit the ledger has never seen gets a new package with Origin Found in Inventory Count.

This adds packages without a receipt from a trading partner, so only an Rx Tracking Manager can apply it. Your procedure decides how a found unit's origin is investigated before it is put back into stock.

Who: Rx Tracking Manager

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

Before you start:

  1. Go to Inventory ‣ Operations ‣ Physical Inventory, remove the My Counts filter and search for the product.

  2. On the line of the lot, enter the Counted Quantity, for example 12 where 10.00 are on hand.

    Result: Difference shows 2.00 (green).

  3. Select Apply at the end of the line (or select the line and Apply at the top of the list, to give a reason, as in Apply several counts at once, with a reason).

    Result: the DSCSA Serials dialog opens, with Difference in green.

  4. In Serials, scan the DataMatrix of each unit found, one per line, for example a unit recorded Missing (500000007011) and a unit the ledger has never seen (500000007013).

  5. Select Apply.

    Result: the dialog closes and the line shows the new On Hand Quantity.

Result: the stock is raised, and every unit found has a package In Stock. Records: the inventory move from Virtual Locations/Inventory adjustment to the location; packages that were Missing back In Stock (their Origin is unchanged); for new serials, packages with Origin Found in Inventory Count, Registration Note = your reason (or "Inventory adjustment"), Registered At, Registered By and Registered On, listed under the Found in Inventory Count filter of Inventory ‣ Rx Tracking ‣ Packages; a note in the lot's chatter: "Inventory count at WH/Stock: 2 package(s) found: 500000007011, 500000007013."

Screenshot of package 500000007013, Samplostatin lot BPSMS2508B: Origin Found in Inventory Count (outlined), note Cycle count 2026-09-27.

A new serial is checked like an opening-balance scan: its GTIN must be the product's, its lot and expiry those of the line's lot. A lot whose quantity is negative must first be counted to zero.

If it doesn't work

Important

Go-live stock that was entered after its product became a DSCSA product can only be registered this way (Known issue PF-A04-02): the packages then show Found in Inventory Count, not Opening Balance. See Register the opening balance.