# EDIFACT INVRPT: Inventory Report Message Guide

> EDIFACT INVRPT explained: stock by location, batch and best-before, pallets by SSCC, with live EANCOM examples, quantity codes and the X12 846 mapping.

<QuickAnswer>
EDIFACT INVRPT is the inventory report message, the equivalent of the X12 846. It reports stock held or planned for each product: actual stock, stock in transit, quality-held stock, minimum and reorder levels. Each LIN carries a GTIN, and each INV group under it carries one quantity, optionally split by location, batch, best-before date or pallet SSCC.
</QuickAnswer>

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](https://www.gs1.org/sites/default/files/docs/eancom/ean02s3/part2/invrpt/toc.htm) 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](/edifact-inspector), and you can open each one in the full tool.

<EDIGuideCTA
  badge="For EDIFACT INVRPT"
  transactionType="846"
  headline="Read an INVRPT stock report in seconds"
  body="Paste an INVRPT into the free EDIFACT inspector to see each product, location and quantity explained, with UNT counts and GTIN, GLN and SSCC check digits verified. OrderSync processes EDIFACT, EANCOM and TRADACOMS orders alongside X12, PDF, CSV and email, straight into your ERP."
  secondaryHref="/edifact-inspector"
  secondaryLabel="Try the free EDIFACT inspector"
/>

## 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](/guides/edi/edifact-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](/guides/edi/edifact-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](/glossary/safety-stock), reorder points and [lead time](/glossary/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 `LOC` segment 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.

<EdifactSample
  title="Extended stock report: two products, two distribution centres"
  description="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)."
  label="EANCOM 2002 D.01B"
  raw="UNA:+.? '
UNB+UNOC:3+5011122000002:14+5067890000003:14+261012:0600+BS0092210++INVRPT'
UNH+1+INVRPT:D:01B:UN:EAN007'
BGM+35+BS-INV-261012+9'
DTM+137:20261012:102'
DTM+366:20261011:102'
NAD+GY+5011122000002::9'
NAD+SU+5067890000003::9'
LIN+1++5067890100017:SRV'
INV++++1'
QTY+145:1440'
LOC+18+5011122000101::9'
INV++++1'
QTY+145:612'
LOC+18+5011122000200::9'
INV++++1'
QTY+198:480'
LOC+18+5011122000200::9'
LIN+2++5067890100024:SRV'
INV++++1'
QTY+145:288'
LOC+18+5011122000101::9'
INV++++1'
QTY+145:96'
LOC+18+5011122000200::9'
INV++++1'
QTY+197:240'
LOC+18+5011122000200::9'
UNT+27+1'
UNZ+1+BS0092210'"
/>

| 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.

<EdifactSample
  title="Simple stock report split by batch and best-before date"
  description="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."
  label="EANCOM 2002 D.01B"
  raw="UNA:+.? '
UNB+UNOC:3+5034567000000:14+5067890000003:14+261012:0545+WL0007731++INVRPT'
UNH+1+INVRPT:D:01B:UN:EAN007'
BGM+35+WL-SR-261012+9'
DTM+137:20261012:102'
DTM+366:20261011:102'
NAD+GY+5034567000000::9'
NAD+GO+5067890000003::9'
LIN+1++5067890100116:SRV'
INV++++1'
QTY+145:180'
GIN+BX+FW26241'
DTM+361:20270601:102'
INV++++1'
QTY+145:420'
GIN+BX+FW26268'
DTM+361:20270628:102'
INV++++1'
QTY+89:40'
GIN+BX+FW26268'
DTM+361:20270628:102'
LIN+2++5067890100130:SRV'
INV++++1'
QTY+145:300'
GIN+BX+FW26275'
DTM+361:20270705:102'
UNT+25+1'
UNZ+1+WL0007731'"
/>

| 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".

<EdifactSample
  title="Stock split by shipping container, with SSCCs"
  description="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."
  label="EANCOM 2002 D.01B"
  raw="UNA:+.? '
UNB+UNOC:3+5034567000000:14+5067890000003:14+261012:0550+WL0007732++INVRPT'
UNH+1+INVRPT:D:01B:UN:EAN007'
BGM+35+WL-SR-261012P+9'
DTM+137:20261012:102'
NAD+GY+5034567000000::9'
NAD+GO+5067890000003::9'
LIN+1++5067890100116:SRV'
INV++++1'
QTY+145:240'
CPS+1'
PAC+2++201::9'
PCI+33E'
DTM+361:20270628:102'
GIN+BJ+350678900000004118+350678900000004125'
INV++++1'
QTY+145:120'
CPS+2'
PAC+1++201::9'
PCI+33E'
DTM+361:20270705:102'
GIN+BJ+350678900000004132'
UNT+21+1'
UNZ+1+WL0007732'"
/>

`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](/guides/edi/edifact-desadv) and our [SSCC glossary entry](/glossary/sscc).

## 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](/guides/edi/846-inventory-inquiry) for the X12 side, and [TRADACOMS file types](/guides/edi/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 `INV` for 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 `LOC` with agency `9`. 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

1. Agree the report shape (simple or extended), the quantity qualifiers and the cadence with your partner.
2. Confirm whether quantities are consumer units or cases, and use the matching GTIN.
3. Send a report for one product and one location and check the partner's figures match your stock system.
4. Add locations, batches and dates one at a time and recheck after each.
5. Test a zero-stock line: agree whether the partner wants `QTY+145:0` or the line omitted.
6. Check that the report runs after stock is booked, and that `DTM+366` matches the count time.
7. Paste each test message into the [EDIFACT inspector](/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](/guides/edi/edifact)**: syntax, envelopes and the full X12 mapping
- **[EDIFACT SLSRPT](/guides/edi/edifact-slsrpt)**: the sales report that usually travels with INVRPT in VMI
- **[EDIFACT PRICAT](/guides/edi/edifact-pricat)**: the catalogue that sets up the products being reported
- **[EDIFACT ORDERS](/guides/edi/edifact-orders)**: the replenishment order that follows
- **[EDIFACT DESADV](/guides/edi/edifact-desadv)**: SSCC pallets and the CPS structure in despatch
- **[EDI 846 inventory inquiry/advice](/guides/edi/846-inventory-inquiry)**: the X12 counterpart

## Sources

- [EANCOM 2002 S3: INVRPT inventory report message](https://www.gs1.org/sites/default/files/docs/eancom/ean02s3/part2/invrpt/toc.htm), GS1
- [UN/EDIFACT D.01B INVRPT message](https://service.unece.org/trade/untdid/d01b/trmd/invrpt_c.htm), UNECE
- [Serial Shipping Container Code (SSCC)](https://www.gs1.org/standards/id-keys/sscc), GS1
- [Global Location Number (GLN)](https://www.gs1.org/standards/id-keys/gln), GS1

Check your INVRPT structure, counts and GTIN, GLN and SSCC check digits in the free [EDIFACT inspector](/edifact-inspector).
