ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

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.

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 SG3 RFF+DTM et SG4 CTA+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+STSposition 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 CPS avec SG16 PAC+MEA+QTY et SG17 PCI+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.
  • DTM au 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.

edifact invrpt-d96a-example.edi
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 deux QTY+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 INV ou 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 LOC est 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+356 ou DTM+8 indiquant 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+5 en 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.

json invrpt-d96a-equivalent.json
{
  "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 }]
      }
    ]
  }
}