INVRPT is how stock positions move between companies without anyone emailing a spreadsheet. A retailer sends it so a supplier can see what is sitting in each distribution centre. A third-party warehouse sends it so the goods owner can see stock by batch and date. When it is accurate and on time, replenishment can run on data instead of guesswork; when it is stale, every decision built on it is a day behind.
This guide follows the GS1 EANCOM 2002 INVRPT layout (directory D.01B, subset version EAN007). Every example is live: it is parsed in your browser by the same engine as our EDIFACT inspector, and you can open each one in the full tool.
What is an EDIFACT INVRPT?
INVRPT (inventory report) is the UN/EDIFACT message for reporting inventories that are held, and inventories that are planned or targeted, for each product. GS1 states that it can be "used in either direction between trading partners": manufacturer to distributor, retailer to supplier, warehouse to goods owner, or head office to a service provider.
The quantities it can carry fall into three groups:
- Held stock: opening stock, actual stock, quality-control held stock, damaged stock.
- Movements: receipts into and withdrawals out of inventory over a period.
- Planning levels: model or target stock, minimum and maximum stock, and the reordering point.
Each quantity can be broken down further by location, batch, production or best-before date, and by the pallets or cases it is stored on.
Where INVRPT fits: replenishment and VMI
INVRPT is a data message, not an instruction. It does not order or ship anything. Its value is what the receiver does with it.
| Flow | Sender | Receiver | What the receiver does |
|---|---|---|---|
| Retailer stock report | Retailer | Supplier | Plans production and deliveries; in VMI, raises the orders |
| Supplier availability | Supplier | Retailer or distributor | Sees what can be ordered before ordering it |
| Warehouse stock report | Third-party warehouse | Goods owner | Reconciles stock by batch and date, plans rotation |
| Consignment stock | Consignment holder | Owner | Tracks stock it owns but does not hold |
In vendor-managed inventory (VMI), the supplier takes responsibility for keeping the buyer's stock between agreed levels. The buyer sends INVRPT with stock positions, often together with SLSRPT sales data, and the supplier decides what to send. GS1's INVRPT introduction describes exactly this: actual and target inventories "used in combination with actual sales data" (SLSRPT) and sales forecasts (SLSFCT) to keep stock close to target or to trigger reordering. Whether the supplier then raises an ORDERS message on the buyer's behalf, or the buyer raises it, is set by the VMI agreement.
The planning concepts behind the codes, such as safety stock, reorder points and lead time, are covered in our glossary.
Simple and extended reports
The EANCOM manual describes two shapes of INVRPT:
- Simple: one stock-holding location for the whole report. The location is identified in the header, usually as the sender's own
NAD. - Extended: several locations. Each quantity carries a
LOCsegment saying which site holds it.
Both shapes can split quantities by batch (GIN+BX), by date (DTM+361 best before, DTM+94 production) or by shipping container (a CPS group with SSCCs). The functions are not mutually exclusive, so a single report can split a location's stock by batch and list the pallets carrying each batch.
INVRPT segment reference
Status is M (mandatory) or C (conditional) and repeats are the maximum the EANCOM 2002 manual allows. The key structural fact: every quantity lives in its own INV group (SG11), and each INV group carries exactly one QTY. To report three different quantities for one product, repeat the INV group three times.
| Segment | Name | Status | Repeats | Carries | X12 846 equivalent |
|---|---|---|---|---|---|
UNH | Message header | M | 1 | Message reference, INVRPT:D:01B:UN:EAN007 | ST |
BGM | Beginning of message | M | 1 | Report type (35, 78), report number, function | BIA |
DTM | Date/time/period | M | 10 | Message date (137), inventory report date (366), period | BIA03, DTM |
RFF (SG1) | Reference | C | 10 | References for the whole report | REF |
NAD (SG2) | Name and address | C | 20 | Reporting party, supplier, goods owner, warehouse | N1 loop |
CUX (SG5) | Currencies | C | 5 | Currency for any prices given | CUR |
LIN (SG9) | Line item | C | 9999999 | The product's GTIN with SRV | LIN |
PIA | Additional product id | C | 10 | Supplier's or buyer's item code | LIN qualifier pairs |
IMD | Item description | C | 10 | Description, if the partner wants it | PID |
INV (SG11) | Inventory management details | M | 1 | Snapshot balance (INV++++1) or movement in or out | No direct equivalent |
QTY | Quantity | M | 1 | One quantity: actual stock, in transit, held, target | QTY |
GIN | Goods identity number | C | 9999 | Batch (BX) or serial (BN) numbers for that quantity | LIN lot qualifier or REF |
LOC | Place/location | C | 5 | Warehouse (18) or location of goods (14) | SDQ or N1 |
DTM | Date/time/period | C | 5 | Best before (361), production (94), expiry (36) | DTM |
STS | Status | C | 9 | Status of that stock, for example available or not | Partner-specific |
PRI (SG13) | Price details | C | 5 | Price used to value the stock | CTP |
CPS (SG15) | Consignment packing sequence | C | 9999 | Opens the shipping-container breakdown | No direct equivalent |
PAC / PCI / GIN | Package, marking, SSCC | C | per group | Number of pallets and their SSCCs (GIN+BJ) | MAN (in other X12 sets) |
UNT | Message trailer | M | 1 | Segment count and message reference | SE |
Like PRICAT, EANCOM INVRPT has no UNS or CNT: after the last INV group comes UNT.
Example 1: stock by location for VMI
The fictional retailer Brackenfield Stores reports stock of two products from the fictional supplier Fenwold Foods at its two distribution centres, as counted at the end of 11 October. This is an extended report: each quantity has a LOC. All GLNs and GTINs are made up with valid check digits.
Extended stock report: two products, two distribution centres
BGM+35 inventory report, DTM+366 report date, and one INV group per quantity: actual stock (QTY+145) per warehouse, stock in transit (QTY+198) and a reorder level (QTY+197).
INVRPT · Inventory report · ref 1
- Document
- Inventory report
- Document number
- BS-INV-261012
- Message function
- Original
- Document/message date/time
- 2026-10-12
- Date (366)
- 2026-10-11
Parties
| Role | Identifier | Name and address |
|---|---|---|
| GY GY | 5011122000002GS1 (GLN) | - |
| Supplier SU | 5067890000003GS1 (GLN) | - |
Lines (2)
| # | GTIN | Codes | Description | Actual stock | Price | Amount |
|---|---|---|---|---|---|---|
| 1 | 5067890100017 | - | - | 612 | - | - |
| 2 | 5067890100024 | - | - | 96 | - | - |
Interchange (UNB)
- Sender
- 5011122000002GS1 GLN
- Recipient
- 5067890000003GS1 GLN
- Prepared
- 2026-10-12 06:00
- Control reference
- BS0092210
- Syntax
- UNOC version 3
- Messages
- 1
| Segment | What it says |
|---|---|
BGM+35+BS-INV-261012+9' | Document 35 (inventory report), number BS-INV-261012, original |
DTM+366:20261011:102' | The stock position is as at 11 October 2026 |
NAD+GY | The inventory reporting party: the retailer |
NAD+SU | The supplier the report is for |
LIN+1++5067890100017:SRV' | Product 1 by GTIN; INVRPT lines have no action code |
INV++++1' | Fourth element 1: a book-keeping inventory balance (a snapshot) |
QTY+145:1440' + LOC+18+5011122000101::9' | 1,440 units actually in stock at warehouse 5011122000101 |
QTY+198:480' | 480 units in transit to the second warehouse |
QTY+197:240' | The reorder level for product 2 at that warehouse is 240 |
UNT+27+1' | 27 segments from UNH to UNT inclusive |
Read product 2 at the second warehouse (GLN 5011122000200): 96 in stock against a reorder level of 240. In a VMI programme, that line is the reason the supplier plans a delivery today. Quantities are in the unit identified by the GTIN in LIN, so if the GTIN is a consumer unit, the numbers are consumer units, not cases.
Example 2: warehouse stock by batch and best-before date
The fictional warehouse operator Wrenfield Logistics stores cases for Fenwold Foods and reports them as a simple, single-location report. Fenwold is the goods owner (NAD+GO). Each batch is its own INV group with a batch number and a best-before date, and 40 cases from one batch are on quality hold.
Simple stock report split by batch and best-before date
Warehouse to goods owner. Each INV group pairs one quantity with a GIN+BX batch number and a DTM+361 best-before date; QTY+89 reports quality-control held stock.
INVRPT · Inventory report · ref 1
- Document
- Inventory report
- Document number
- WL-SR-261012
- Message function
- Original
- Document/message date/time
- 2026-10-12
- Date (366)
- 2026-10-11
Parties
| Role | Identifier | Name and address |
|---|---|---|
| GY GY | 5034567000000GS1 (GLN) | - |
| GO GO | 5067890000003GS1 (GLN) | - |
Lines (2)
| # | GTIN | Codes | Description | Actual stock | Price | Amount |
|---|---|---|---|---|---|---|
| 1 | 5067890100116 | - | - | 420 | - | - |
| 2 | 5067890100130 | - | - | 300 | - | - |
Interchange (UNB)
- Sender
- 5034567000000GS1 GLN
- Recipient
- 5067890000003GS1 GLN
- Prepared
- 2026-10-12 05:45
- Control reference
- WL0007731
- Syntax
- UNOC version 3
- Messages
- 1
| Segment | What it says |
|---|---|
NAD+GY+5034567000000::9' | The warehouse is the reporting party |
NAD+GO+5067890000003::9' | Fenwold owns the goods |
LIN+1++5067890100116:SRV' | The case GTIN, so quantities are cases |
GIN+BX+FW26241' | Batch FW26241 |
DTM+361:20270601:102' | Best before 1 June 2027 |
QTY+89:40' | 40 cases of batch FW26268 are held for quality control |
Batch and date sit in the same INV group as the quantity they describe. The order inside the group is fixed by the message structure: INV, QTY, GIN, LOC, DTM, then STS. GS1 notes that if the goods do not all belong to the same owner, the owner is identified at line level, not in the header.
Example 3: stock on SSCC-labelled pallets
The same warehouse reports one product's stock by pallet. A CPS group under the INV group lists how many pallets hold that quantity and their SSCCs. This is the third function in GS1's simple report table: "total stock quantity divided in sub-quantities according to shipping container".
Stock split by shipping container, with SSCCs
Under each INV group, CPS opens a packing group: PAC gives the number and type of pallets, PCI+33E says they carry SSCC labels, DTM+361 gives their best-before date and GIN+BJ lists the SSCCs.
INVRPT · Inventory report · ref 1
- Document
- Inventory report
- Document number
- WL-SR-261012P
- Message function
- Original
- Document/message date/time
- 2026-10-12
- Best before date
- 2027-06-28
- Best before date
- 2027-07-05
- Packages
- 3
Parties
| Role | Identifier | Name and address |
|---|---|---|
| GY GY | 5034567000000GS1 (GLN) | - |
| GO GO | 5067890000003GS1 (GLN) | - |
Lines (1)
| # | GTIN | Codes | Description | Actual stock | Price | Amount |
|---|---|---|---|---|---|---|
| 1 | 5067890100116 | - | - | 240 | - | - |
Interchange (UNB)
- Sender
- 5034567000000GS1 GLN
- Recipient
- 5067890000003GS1 GLN
- Prepared
- 2026-10-12 05:50
- Control reference
- WL0007732
- Syntax
- UNOC version 3
- Messages
- 1
GIN+BJ can list several SSCCs in one segment, one per element, as the first pallet group shows. The PCI+33E marking code comes from the EANCOM manual's own INVRPT example; check your partner's guide in case it expects a different code. For SSCC rules and labelling, see the DESADV guide and our SSCC glossary entry.
Code tables
BGM document name
| Code | Meaning |
|---|---|
35 | Inventory report: actual inventory at the time of the report |
78 | Inventory movement advice: movements in and out during a period |
172 | Authorisation to plan and suggest orders |
173 | Authorisation to plan and ship orders |
263 | Inventory adjustment status report |
The message function (third element) is 9 original, 7 duplicate or 31 copy. EANCOM gives INVRPT no change or replace function, so a correction goes out as a new report. Agree with your partner how it treats the earlier one.
INV: snapshot or movement
| Usage | Meaning |
|---|---|
INV++++1' | Book-keeping inventory balance (snapshot) |
INV++++2' | Formal inventory balance, for example a physical count |
INV+1' | Movement out of inventory |
INV+2' | Movement into inventory |
GS1's note on the segment: use the first element for movements and the fourth for snapshots.
QTY qualifiers you will meet most
| Code | Meaning |
|---|---|
145 | Actual stock |
198 | Quantity in transit |
89 | Quality control held |
124 | Damaged goods |
66 | Committed quantity |
157 | Opening stock balance |
199 | Inventory withdrawal quantity |
97 / 98 | Minimum / maximum inventory |
146 | Model or target stock |
197 | Reordering level |
The full EANCOM list has around 30 codes, including consignment stock and promotional quantities. Partners normally use a handful; their guide lists which.
LOC and DTM in the INV group
| Segment | Code | Meaning |
|---|---|---|
LOC | 18 | Warehouse |
LOC | 14 | Location of goods |
LOC | 19 | Factory or plant |
DTM | 361 | Best before date |
DTM | 94 | Production or manufacture date |
DTM | 36 | Expiry date |
DTM | 366 | Inventory report date for this sub-quantity |
Timing and frequency
The standard sets no schedule. Common patterns:
- Daily, overnight after stock is booked, for VMI and fast-moving lines.
- Weekly for slower lines or where INVRPT supports planning rather than daily replenishment.
- On request or at month end for consignment and third-party warehouse reconciliation.
Whatever the cadence, DTM+366 should say when the stock was counted. A report sent on Monday describing Saturday night's position is fine, as long as both sides know it is Saturday's.
INVRPT vs the X12 846
| Data | EDIFACT INVRPT | X12 846 |
|---|---|---|
| Report type and number | BGM document code and number | BIA |
| Report date | DTM+366 | BIA03, DTM |
| Parties | NAD with GLNs (GY, SU, GO, WH) | N1 loop |
| Item | LIN with GTIN and SRV | LIN with qualifier pairs |
| Quantity and its type | One QTY per INV group, typed by qualifier | QTY with qualifier |
| Location breakdown | LOC inside each INV group | SDQ or location-level loops |
| Batch or lot | GIN+BX | Lot qualifier in LIN, or REF, by partner |
| Dates per quantity | DTM inside the INV group | DTM |
| Pallet SSCCs | CPS group with GIN+BJ | Not usual in an 846 |
| Line count | None | CTT |
The difference that trips up mappers is grouping. In an 846, a line can carry several QTY segments in a row. In INVRPT, each quantity needs its own INV group, and its location, batch and date belong to that group. Converting one to the other is a restructure, not a rename. See the EDI 846 guide for the X12 side, and TRADACOMS file types for the TRADACOMS stock report, SNPSTS.
Common errors and fixes
- Two QTY segments in one INV group. The structure allows one. Repeat
INVfor each quantity. - No report date. Without
DTM+366, the receiver uses the message date and may compare stock to the wrong day's sales. - Mixed units. Reporting a consumer-unit GTIN with case quantities, or the reverse. The quantity follows the GTIN in
LIN. - Locations as free text. Use GLNs in
LOCwith agency9. Store names and internal codes break matching. - Sub-quantities that do not add up. If you report a total and a breakdown, the parts must equal the total. Receivers check.
- Stale reports sent on schedule. A report generated before stock is booked looks valid and is wrong. Run it after the stock update.
- Invalid check digits. Validate every GTIN, GLN and SSCC before sending.
Testing checklist
- Agree the report shape (simple or extended), the quantity qualifiers and the cadence with your partner.
- Confirm whether quantities are consumer units or cases, and use the matching GTIN.
- Send a report for one product and one location and check the partner's figures match your stock system.
- Add locations, batches and dates one at a time and recheck after each.
- Test a zero-stock line: agree whether the partner wants
QTY+145:0or the line omitted. - Check that the report runs after stock is booked, and that
DTM+366matches the count time. - Paste each test message into the EDIFACT inspector to check structure and counts before sending.
Frequently Asked Questions
What is an INVRPT message used for?
INVRPT reports inventory: actual stock, stock in transit, held or damaged stock, movements, and planning levels such as minimum, target and reorder stock. Retailers use it to share stock with suppliers, and warehouses use it to report stock to the goods owner.
Is INVRPT the same as the X12 846?
They serve the same purpose. The 846 is the X12 inventory inquiry/advice; INVRPT is the UN/EDIFACT and EANCOM equivalent. The structure differs: INVRPT puts each quantity in its own INV group with its location, batch and dates.
What does QTY+145 mean?
145 is the qualifier for actual stock. QTY+145:1440' means 1,440 units are in stock, in the unit identified by the GTIN in the preceding LIN.
How do I report stock for several warehouses in one INVRPT?
Use the extended structure. Under each LIN, repeat the INV group once per warehouse, each with its QTY and a LOC+18 segment carrying the warehouse GLN.
Does INVRPT replace purchase orders in VMI?
No. INVRPT reports stock; it does not order anything. GS1 is explicit for sales reports that they never replace business transactions such as orders, and the same logic applies here. In VMI, an ORDERS message still follows, raised by whichever party the agreement names.
Does INVRPT need UNS and CNT?
No. The EANCOM 2002 INVRPT has no summary segments other than UNT.
Related guides
- EDIFACT explained: syntax, envelopes and the full X12 mapping
- EDIFACT SLSRPT: the sales report that usually travels with INVRPT in VMI
- EDIFACT PRICAT: the catalogue that sets up the products being reported
- EDIFACT ORDERS: the replenishment order that follows
- EDIFACT DESADV: SSCC pallets and the CPS structure in despatch
- EDI 846 inventory inquiry/advice: the X12 counterpart
Sources
- EANCOM 2002 S3: INVRPT inventory report message, GS1
- UN/EDIFACT D.01B INVRPT message, UNECE
- Serial Shipping Container Code (SSCC), GS1
- Global Location Number (GLN), GS1
Check your INVRPT structure, counts and GTIN, GLN and SSCC check digits in the free EDIFACT inspector.