INVRPT — Inventory Report Message (D.96A)
Le message INVRPT communique, dans un sens ou dans l'autre entre partenaires commerciaux, l'état d'un inventaire : stocks disponibles, en transit, réservés, ventilés par lieu et par référence.
Objet du message
Selon la définition officielle UN/CEFACT, INVRPT est « un message spécifiant des informations relatives à des inventaires détenus. Le message Inventory Report est destiné à être utilisé dans un sens ou dans l'autre entre partenaires commerciaux ».
Le standard précise que les informations échangées portent sur des inventaires de matières premières, d'articles manufacturés ou d'autres stocks. Le cas d'usage le plus courant est le VMI (Vendor Managed Inventory) : l'acheteur ou le dépositaire envoie quotidiennement un INVRPT à son fournisseur, qui décide lui-même du réapprovisionnement et émet un ORDERS D.96A en auto-promotion. INVRPT supporte aussi la valorisation financière (prix), pour les déclarations légales, audits ou réclamations de protection de prix.
Structure segmentaire
INVRPT D.96A se découpe en deux sections nominales : Header (groupes SG1 à SG5) et Detail (groupes SG6 à SG17 — séquences d'emballage et lignes inventaire). Il n'y a pas de section Summary formelle : l'UNT vient directement après le dernier loop article.
Header
Au niveau du header, les segments mandataires sont : UNH M , BGM M , et DTM M .
Suivent les groupes :
- SG1
RFF+DTM— références (RFF+CT contrat-cadre, RFF+ON commande). - SG2
NAD+LOC— parties (acheteur, fournisseur, lieu de stockage) avec SG3RFF+DTMet SG4CTA+COM. - SG5
CUX+DTM— devise (utile pour la valorisation financière).
Detail (positions de stock)
La section Detail s'ouvre par le groupe SG6 CPS (Consignment Packing Sequence, jusqu'à 9 999 occurrences). CPS
permet d'identifier le contexte d'emballage, mais n'est pas obligatoire en pratique
quand l'inventaire ne dépend pas du conditionnement.
Le sous-groupe SG7 PAC+PCI décrit l'emballage et son
identification, contenant SG8 QTY+GIN+DTM — Quantity + Goods Identity
Number (SSCC) + Date.
Le cœur métier est le loop SG9 (jusqu'à 9 999 occurrences) construit autour de : LIN M , PIA C , IMD C , MEA C , ALI C , LOC C , et DTM C .
Sous chaque LIN s'imbriquent les groupes :
- SG10
RFF+DTM— références ligne. - SG11
QTY+INV+GIN+LOC+DTM+STS— position de stock, le loop central (jusqu'à 9 999 occurrences). C'est ici que se trouve la quantité (QTY) qualifiée par INV , le GIN (n° de lot, série), le LOC (sous-emplacement), la date d'observation et le STS (statut). - SG12
NAD+LOC— partie associée à la position (transporteur, dépositaire). - SG13
PRI+CUX+DTM— prix unitaire pour valorisation. - SG14
RFF+DTM— références complémentaires. - SG15
CPSavec SG16PAC+MEA+QTYet SG17PCI+RFF+DTM+GIN— séquences d'emballage internes à la ligne.
Le segment QTY est qualifié par un code (élément 6063) qui change tout :
145 stock available, 59 in transit, 9
delivered quantity, 17 quantity on hand, 21 ordered
quantity, 192 free goods, etc. Bien choisir ce qualifier est le sujet
n°1 d'un INVRPT.
Trailer
INVRPT n'a pas de section Summary formelle : pas de UNS, pas de CNT. Après le dernier SG9 vient directement UNT M .
Obligatoire / conditionnel
Quatre segments structurels sont strictement mandataires dans tout INVRPT D.96A :
UNH— ouvre le message.BGM— précise la fonction (33 = Inventory enquiry response / 31 = Inventory enquiry) et le numéro.DTMau header — au moins une date (DTM+137 émission, DTM+356 date du snapshot).UNT— ferme le message.
En pratique métier, il faut aussi : NAD+SU et NAD+BY
(parties), au moins un LIN dans SG9, et au moins un QTY dans
SG11 par ligne — sinon le rapport est vide. Pour un VMI sérieux, il faut une
LOC par ligne (site de stockage) et un DTM de snapshot pour
distinguer la photo de stock à une date/heure précise.
Exemple réel
Un snapshot d'inventaire envoyé par un dépositaire à un fournisseur dans un dispositif VMI : deux références, sur le même site, avec leurs niveaux de stock disponible et en transit.
UNB+UNOC:3+5410000000456:14+5410000000123:14+260513:0700+CTRL000050'
UNH+1+INVRPT:D:96A:UN:EAN008'
BGM+33+INVRPT-2026-05-13+9'
DTM+137:20260513:102'
DTM+356:20260513:102'
RFF+CT:CONTRACT-2026-VMI-08'
NAD+SU+5410000000456::9'
NAD+BY+5410000000123::9'
LIN+1++3520000001234:EN'
LOC+18+WH-PARIS-NORD'
QTY+145:1240'
INV++1::145'
QTY+59:200'
INV++1::59'
DTM+8:202605130600:203'
LIN+2++3520000005678:EN'
LOC+18+WH-PARIS-NORD'
QTY+145:850'
INV++1::145'
DTM+8:202605130600:203'
UNT+19+1'
UNZ+1+CTRL000050' BGM+33+INVRPT-2026-05-13+9— type 33 (Inventory report), numéro INVRPT-2026-05-13, statut 9 (Original).DTM+137— date émission.DTM+356— date d'inventaire (snapshot business date).RFF+CT— rattachement au contrat VMI CONTRACT-2026-VMI-08.NAD+SU/NAD+BY— Supplier et Buyer.- Première ligne (GTIN 3520000001234) :
LOC+18+WH-PARIS-NORD(entrepôt), puis deuxQTY+INV— 1240 disponibles (qualifier 145) et 200 en transit (qualifier 59). - Seconde ligne : 850 unités disponibles.
DTM+8— date/heure exacte de la photo de stock (qualifier 203 horodaté).UNT+19+1— 19 segments, référence « 1 » cohérente avec UNH.
Erreurs fréquentes
- QTY sans qualifier inventaire — un QTY sans son
INVou un qualifier QTY[0] ambigu (par exemple, oublier le code 145) rend l'inventaire inutilisable. Le fournisseur ne sait pas si la quantité est disponible, réservée, en transit, ou périmée. - LOC absent — un INVRPT sans
LOCest interprété comme « tous sites confondus », ce qui interdit toute logique de réapprovisionnement par entrepôt en multi-sites. Au moins un LOC+18 (warehouse) ou LOC+11 (place of delivery) par ligne en pratique. - DTM de snapshot oublié — sans
DTM+356ouDTM+8indiquant la date/heure de la photo, l'inventaire est temporellement flou. Critique pour les calculs de couverture (stock / consommation / horizon). - Pas de UNS — INVRPT n'a pas de UNS. Ne pas en ajouter par mimétisme avec ORDERS/INVOIC.
- BGM fonction code mal choisi — 33 (Original Inventory Report) en mode VMI quotidien, vs 4 (Change) pour des ajustements ponctuels. Envoyer toujours « 33 Original » en delta empêche le fournisseur de calculer correctement les flux entrants/sortants.
- Confusion GTIN ↔ référence interne — le LIN doit porter le GTIN (qualifier EN). Si l'inventaire est référencé par une SKU interne fournisseur, utilisez
PIA+5en plus, jamais en remplacement du GTIN.
Messages liés
INVRPT s'inscrit dans une boucle de réapprovisionnement :
- ORDERS D.96A — la commande de réapprovisionnement émise par le fournisseur ou l'acheteur en réponse au snapshot.
- DESADV D.96A — l'avis d'expédition correspondant.
- RECADV D.96A — l'avis de réception qui ajustera l'inventaire.
- DELFOR D.96A — le programme de livraison construit à partir des projections inventaire.
- PRICAT D.96A — le catalogue prix, pour la valorisation financière des stocks.
- CONTRL D.96A — l'accusé syntaxique automatique.
Équivalent JSON
Projection JSON correspondant à l'exemple ci-dessus. Ce mapping n'est pas normatif : c'est une convention ediverse pour faciliter l'intégration en TypeScript / Python.
{
"interchange": {
"controlRef": "CTRL000050",
"from": { "id": "5410000000456", "qualifier": "14" },
"to": { "id": "5410000000123", "qualifier": "14" },
"datetime": "2026-05-13T07:00:00Z",
"syntax": { "id": "UNOC", "version": "3" }
},
"message": {
"ref": "1",
"type": "INVRPT",
"version": { "syntax": "D", "release": "96A", "agency": "UN", "association": "EAN008" }
},
"inventoryReport": {
"number": "INVRPT-2026-05-13",
"function": "33",
"status": "9",
"issueDate": "2026-05-13",
"snapshotDate": "2026-05-13",
"contract": "CONTRACT-2026-VMI-08",
"parties": {
"supplier": { "gln": "5410000000456" },
"buyer": { "gln": "5410000000123" }
},
"lines": [
{
"ref": 1,
"gtin": "3520000001234",
"location": "WH-PARIS-NORD",
"snapshotAt": "2026-05-13T06:00:00Z",
"positions": [
{ "qualifier": 145, "label": "stock available", "value": 1240 },
{ "qualifier": 59, "label": "in transit", "value": 200 }
]
},
{
"ref": 2,
"gtin": "3520000005678",
"location": "WH-PARIS-NORD",
"snapshotAt": "2026-05-13T06:00:00Z",
"positions": [{ "qualifier": 145, "label": "stock available", "value": 850 }]
}
]
}
}