Skip to main content

DSCSA documents: T3, EPCIS file and transaction history

Core module For: Compliance manager Checked on 18.0.0.2.0

What an outbound DSCSA document holds, and how its T3 report (Transaction Report, PDF), its EPCIS file (Electronic Product Code Information Services, XML) and its transaction history are built. The tables use GLN (Global Location Number), GTIN (Global Trade Item Number), NDC (National Drug Code) and SSCC (Serial Shipping Container Code); every term is in the glossary. The documents are listed in Inventory ‣ Rx Tracking ‣ Documents; to open, download or send one, see Open the DSCSA document a delivery posted and Find, view, download and print DSCSA documents.

A delivery of DSCSA products to a customer, and an unflagged return to a supplier (Return saleable product to the supplier), post one outbound document when they become Done. Its content is frozen at that moment, its two files are rendered once from the frozen content and stored with a checksum, and it is added to the company's hash chain. Nothing regenerates the files later. A customer return, a non-saleable return to the supplier and a delivery of non-DSCSA products only post no document.

DocumentWhen it is createdWhere to find itWho receives it
T3 Report (DSCSA), T3-DSCSA-OUT-YYYY-NNNNN.pdfwhen the delivery or return to the supplier becomes Donethe document's Files tab, Download T3, ⚙ (Actions) ‣ T3 Report (DSCSA), and the chatter's 📎 (Attach files) list, where selecting the file opens it in Odoo's file viewerthe buyer: in the customer portal, by a document link, or attached to the delivery email (Send the DSCSA files with delivery confirmation emails)
EPCIS file, EPCIS-DSCSA-OUT-YYYY-NNNNN.xmlat the same moment; none for a lot-level document or when data is missing (OUT-10)the Files tab and Download EPCISthe buyer, the same ways

The T3 report, and why a validated delivery can't be edited​

The T3 report is a US Letter PDF. Its sections, in order:

SectionWhat it shows
Heading"DSCSA Transaction Report (T3)", "Transaction Information, Transaction History and Transaction Statement"; at the right the Document number, the Transaction Date and the Ship Date (the day the delivery became Done)
Transaction InformationPO #: the customer's purchase order (the order's Customer Reference), else the sales order number; for a return to a supplier, your purchase order. Invoice #: the order's customer invoices posted before the delivery became Done, else "-". Shipment #: the delivery. Transaction #: the document number. Then Seller (your company), Ship From (the warehouse), Buyer (the company of the delivery address) and Ship To (the delivery address), each with its address, phone, email and GLN
Productsone block per product and lot: Product Name, Lot, NDC (with the NDC-11 form when it differs), Expiration, Strength, Quantity, Dosage Form, GTIN, Container Size, Manufacturer; then "Serial numbers (N)", with the SSCC of the case the units were received in, and the serial numbers
Transaction Statement (FD&C Act Sec. 581(27)(A)-(G))"Seller:" and your company's name, then the statement as set in the settings when the document was posted (Review the Transaction Statement and the EPCIS legal notice); for a direct purchase, a Direct purchase statement
Transaction Historya table with Date, Seller, Buyer, References (PO #, Invoice #, Transaction #) and Notes (the kind of each sale, and "Direct purchase"), oldest sale first, ending with this document's sale (OUT-14). With several chains, one table per chain, headed "History N: applies to lot LOT"
Licensesthe seller's and the buyer's licenses in force on the transaction date: Type, Number, State, Expires. DEA registrations are not listed
Last line"Document NUMBER of DATE, frozen when the shipment was validated and stored unchanged."

Screenshot of the stored T3 report of DSCSA/OUT/2026/00001 in Odoo's file viewer: heading, Transaction Information, the first product.

A lot-level document, for an exempt small dispenser (Ship at lot level to an exempt small dispenser), adds "Lot-level transaction information (small-dispenser exemption): package serial numbers are not listed." to the heading, and its products have no serial numbers.

Screenshot of the stored T3 report of the lot-level document DSCSA/OUT/2026/00003 for Hillcrest Family Pharmacy, in the file viewer.

⚙ (Actions) ‣ T3 Report (DSCSA) and Download T3 serve the stored file; downloading it twice gives the same file. On a supplier's (inbound) document the print is refused (Known issue PF-A03-04, see Find, view, download and print DSCSA documents).

Known issue

Known issue (PF-W08-04): the T3 report is rendered when the delivery becomes Done, with the report styles that Odoo loads from its own web address. If Odoo can't reach that address at that moment (for example when deliveries are made Done by a script while the web server is stopped), the report is stored with a plain serif font and without bold text. Its content is complete, but it keeps that look, because the file is never generated again. If your stored T3 reports look plain, ask your Odoo administrator to check Odoo's report address setting (Odoo's report.url system parameter) before more deliveries become Done.

Why a validated delivery can't be edited​

When a delivery (or a receipt, or a return) with DSCSA products is Done, its DSCSA lines are history: the package ledger and the DSCSA document record them. Even after an Inventory Administrator unlocks the transfer (⚙ (Actions) ‣ Lock/Unlock), saving a change to a DSCSA line's quantity, lot, locations or product is refused, and so is adding a DSCSA line:

PRODUCT: this done DSCSA operation can't be edited (quantity, lot, locations or product): the package ledger and the DSCSA documents record it as validated. Use a return, a scrap or an inventory count instead.
PRODUCT can't be added to TRANSFER-NUMBER: it is done, and DSCSA units must go through the checks of a validation (serials, trading partner, quarantine, documents). Put the extra units on a new transfer instead.

Lines of other products stay editable as in standard Odoo. To correct a shipment, take the units back (Receive a saleable customer return with its serials) and ship them again on a new delivery, or use a scrap or an inventory count. The document itself can't be edited or deleted by anyone. For the error entry, see Error: "… this done DSCSA operation can't be edited …".

The outbound EPCIS 1.2 file​

The EPCIS file carries the same sale as the T3 report in the GS1 EPCIS 1.2 format, following the GS1 US DSCSA guideline R1.3, so that the buyer's system can read it. Its parts:

PartContent
Header (SBDH)Sender: your company's GLN. Receiver: the buyer's GLN. InstanceIdentifier: the document number
Master data: productsone entry per product (by its GTIN): NDC-11, product name, manufacturer, dosage form, strength and container size
Master data: locationsone entry per site (by its SGLN, the GLN of a site): your warehouse or company and the buyer's, with name and address
Transaction statementguidelineVersion "GS1 US DSCSA R1.3", affirmTransactionStatement true and the legalNotice from the settings (CFG-05)
Commissioning eventsone per lot: the units (SGTINs) with their lot number and expiry date
Shipping eventevery shipped unit (SGTIN), listed loose (no case aggregation); the event time is the time the delivery became Done, with its time-zone offset; the ship-from site; the source (you) and destination (the buyer and the ship-to site)
Business transactionspo: the customer's purchase order (the order's Customer Reference) with the buyer's GLN, only when the order has one; for a return to a supplier, your purchase order with your GLN. inv: customer invoices posted before the delivery became Done. desadv: your delivery number. The sales order number is never sent
QualifiersdropShipment false; directPurchase true only for a direct purchase (OUT-14)

An excerpt of the file of DSCSA/OUT/2026/00001 (3 Demoprazole to Riverside Community Pharmacy, customer PO RCP-PO-4390); … marks lines left out:

<epcis:EPCISDocument xmlns:epcis="urn:epcglobal:epcis:xsd:1" … schemaVersion="1.2" creationDate="2026-09-27T06:15:34.000Z">
<EPCISHeader>
<sbdh:StandardBusinessDocumentHeader>
<sbdh:Sender><sbdh:Identifier Authority="GS1">0614141000012</sbdh:Identifier></sbdh:Sender>
<sbdh:Receiver><sbdh:Identifier Authority="GS1">0614141000029</sbdh:Identifier></sbdh:Receiver>
<sbdh:DocumentIdentification>
<sbdh:InstanceIdentifier>DSCSA/OUT/2026/00001</sbdh:InstanceIdentifier>
…
</sbdh:StandardBusinessDocumentHeader>
<extension><EPCISMasterData><VocabularyList>
<Vocabulary type="urn:epcglobal:epcis:vtype:EPCClass">
<VocabularyElement id="urn:epc:idpat:sgtin:0399990.010130.*">
<attribute id="urn:epcglobal:cbv:mda#additionalTradeItemIdentification">99990010130</attribute>
<attribute id="urn:epcglobal:cbv:mda#regulatedProductName">Demoprazole 20 mg Delayed-Release Capsules, 30 count</attribute>
…
</VocabularyList></EPCISMasterData></extension>
<gs1ushc:guidelineVersion>GS1 US DSCSA R1.3</gs1ushc:guidelineVersion>
<gs1ushc:dscsaTransactionStatement>
<gs1ushc:affirmTransactionStatement>true</gs1ushc:affirmTransactionStatement>
<gs1ushc:legalNotice>Seller has complied with each applicable subsection of FDCA Sec. 581(27)(A)-(G).</gs1ushc:legalNotice>
</gs1ushc:dscsaTransactionStatement>
</EPCISHeader>
<EPCISBody><EventList>
<ObjectEvent> <!-- commissioning: one per lot -->
…
<bizStep>urn:epcglobal:cbv:bizstep:commissioning</bizStep>
<extension><ilmd>
<cbvmda:lotNumber>BPDPZ2508K</cbvmda:lotNumber>
<cbvmda:itemExpirationDate>2028-03-31</cbvmda:itemExpirationDate>
</ilmd></extension>
</ObjectEvent>
<ObjectEvent> <!-- shipping -->
<eventTime>2026-09-27T06:15:34.000Z</eventTime>
<eventTimeZoneOffset>-07:00</eventTimeZoneOffset>
<epcList>
<epc>urn:epc:id:sgtin:0399990.010130.200000000001</epc>
<epc>urn:epc:id:sgtin:0399990.010130.200000000002</epc>
<epc>urn:epc:id:sgtin:0399990.010130.200000000003</epc>
</epcList>
<action>OBSERVE</action>
<bizStep>urn:epcglobal:cbv:bizstep:shipping</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_transit</disposition>
<readPoint><id>urn:epc:id:sgln:0614141.00001.0</id></readPoint>
<bizTransactionList>
<bizTransaction type="urn:epcglobal:cbv:btt:po">urn:epcglobal:cbv:bt:0614141000029:RCP-PO-4390</bizTransaction>
<bizTransaction type="urn:epcglobal:cbv:btt:desadv">urn:epcglobal:cbv:bt:0614141000012:WH%2FOUT%2F00013</bizTransaction>
</bizTransactionList>
<extension>
<sourceList>…urn:epc:id:sgln:0614141.00001.0…</sourceList>
<destinationList>…urn:epc:id:sgln:0614141.00002.0…</destinationList>
</extension>
<gs1ushc:dropShipment>false</gs1ushc:dropShipment>
</ObjectEvent>
</EventList></EPCISBody>
</epcis:EPCISDocument>

A direct purchase adds <gs1ushc:directPurchase>true</gs1ushc:directPurchase> after dropShipment.

A document has no EPCIS file when it is lot level, or when data the file needs was missing when the delivery became Done (a GLN, an address field, an NDC, a GS1 company prefix length): see Handle a document posted without an EPCIS file.

How the transaction history and the direct-purchase flag are built​

The transaction history lists every sale of the shipped units back to the manufacturer, as far as your records go. It is built when the document is posted, and then frozen with it. It is on the document's Transaction History tab (columns Chain, Position, Kind, Seller, Buyer, Transaction Date, PO Number, Invoice Number, Transaction Number and the lots), and in the T3 report's Transaction History section.

Each row (a hop) is one sale. Position 1 is always your own sale. The rows before it come from where the shipped units were received:

KindWhere it comes fromWhat it records
This Document's Transactionthis documentyour sale to the buyer: the document number as Transaction Number, the customer's PO
Received from Trading Partnerthe supplier's posted inbound document (its EPCIS file) that lists the unit, else the inbound document of the receipt the unit came in onthe supplier's own history, copied: its sale to you (your PO, the supplier's document reference as Transaction Number) and any earlier sales it recorded
Reconstructed from Receiptthe receipt, when it has no inbound document (the goods were received without a supplier file)one sale from the receipt's vendor to you: the receipt's validation date, your purchase order, and the supplier document reference (or the receipt number) as Transaction Number. Without a vendor, the seller is "Unknown supplier (receipt WH/IN/NNNNN)"
  • Several sources, several chains. When the shipped units came from different receipts or supplier files, the history has one chain per source, each listing the lots it applies to. The tab then says "The product of this document came through different prior owners: each chain is one complete history and lists the lots it applies to.", and the T3 report heads each table "History N: applies to lot LOT".
  • Lot-level documents take every receipt of the shipped lots, since their units can't be told apart.
  • Order. The tab lists your own sale first (position 1); the T3 report lists the oldest sale first.

Direct Purchase is selected on the document only when, in every chain, the sale to you (position 2) was a direct purchase: a reconstructed hop is a direct purchase when the vendor's DSCSA role is Manufacturer, and a copied hop when the supplier's file says so. The T3 report then adds the Direct purchase statement ("This wholesale distributor, or a member of the affiliate of such wholesale distributor, purchased the product directly from the manufacturer, exclusive distributor of the manufacturer, or the repackager that purchased the product directly from the manufacturer.") and the EPCIS file directPurchase true. Background: the modules follow the reading that a seller's transaction statement carries the direct-purchase statement when it bought directly from the manufacturer (FD&C Act § 582(c)(1)(A)(i), § 582(g)(1); FDA interoperable exchange guidance (September 2023); see Compliance background). The direct-purchase statement is fixed in the modules (no setting changes it) and has not been reviewed by counsel. See the disclaimer.

Examples from the example database:

DocumentShipped units came fromHistoryDirect Purchase
DSCSA/OUT/2026/00001 (Riverside)P10001, received with Bluepeak's EPCIS file1 chain: This Document's Transaction, Received from Trading Partner (Bluepeak, transaction BP-ASN-20260910-0388)not selected: Bluepeak's file doesn't state a direct purchase
a delivery of 1 Samplostatin to Mercy Valley Hospital PharmacyP10003, received from Bluepeak (manufacturer) without its file1 chain: This Document's Transaction, Reconstructed from Receipt (WH/IN/00009)selected
a delivery of 2 Samplostatin to Mercy Valley Hospital Pharmacyone unit of P10007 (with file) and one of P10003 (without)2 chains, "applies to lot BPSMS2508B" and "applies to lot BPSMS2509C"not selected: one chain isn't a direct purchase

The history is part of the frozen document: its rows can't be edited, and an Rx Tracking Manager's integrity check reports any change (Verify the integrity of the DSCSA documents).