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.

cXML OrderRequest

La commande formelle cXML. Envoyée par l'ERP de l'acheteur au fournisseur après validation interne du panier — qu'il vienne d'un punchout, d'un catalogue local ou d'une saisie manuelle. Équivalent fonctionnel d'un PO papier ou d'un message EDIFACT ORDERS.

Objet de la transaction

Le OrderRequest est l'instruction d'achat formelle : l'acheteur s'engage à payer si le fournisseur livre les ItemOut au prix et aux conditions transmis. Il existe trois variantes de cycle de vie via l'attribut type sur OrderRequestHeader : new (par défaut), update (modifier une commande déjà émise), delete (annuler une commande).

L'attribut orderType sur le même header introduit cinq régimes d'utilisation : regular (par défaut), release (release order sur un master agreement existant), blanket (commande cadre), stockTransport (transfert de stock entre sites), stockTransportRelease (release d'un scheduling agreement de transport).

Structure XML

OrderRequest

Le DTD est concis : OrderRequest (OrderRequestHeader, ItemOut+). Le header rassemble tout ce qui s'applique globalement à la commande ; ItemOut est répétable, avec au moins un article.

OrderRequestHeader

Le contenu complet : OrderRequestHeader (Total, ShipTo?, BillTo, BusinessPartner*, LegalEntity?, OrganizationalUnit*, Shipping?, Tax?, Payment?, PaymentTerm*, Contact*, Comments*, Followup?, ControlKeys?, DocumentReference?, SupplierOrderInfo?, TermsOfDelivery?, DeliveryPeriod?, IdReference*, OrderRequestHeaderIndustry?, Extrinsic*). Deux éléments sont obligatoires par cardinalité : Total et BillTo.

Côté attributs : orderID et orderDate sont #REQUIRED. type et orderType ont des valeurs par défaut (new, regular). Tout le reste est #IMPLIED : orderVersion, requisitionID, shipComplete, effectiveDate, expirationDate, agreementID, parentAgreementID, pickUpDate, requestedDeliveryDate, etc.

ItemOut

Le DTD : ItemOut (ItemID, Path?, (ItemDetail|BlanketItemDetail)?, (SupplierID | SupplierList)?, ShipTo?, Shipping?, Tax?, SpendDetail?, Distribution*, Contact*, TermsOfDelivery?, Comments*, Indicator*, Tolerances?, ControlKeys?, ScheduleLine*, (MasterAgreementReference | MasterAgreementIDInfo)?, ItemOutIndustry?, Packaging*, ReleaseInfo?, Batch?). Seul ItemID est strictement obligatoire au contenu ; ItemDetail est optionnel mais quasi systématiquement présent.

Côté attributs : quantity et lineNumber sont obligatoires en pratique (le DTD les déclare #REQUIRED dans la plupart des contextes hors blanket order).

xml order-request.cxml.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.069/cXML.dtd">
<cXML payloadID="260513.160000.order@buyer.example"
      timestamp="2026-05-13T16:00:00+02:00"
      version="1.2.069">
  <Header>
    <From>
      <Credential domain="DUNS"><Identity>123456789</Identity></Credential>
    </From>
    <To>
      <Credential domain="DUNS"><Identity>987654321</Identity></Credential>
    </To>
    <Sender>
      <Credential domain="DUNS">
        <Identity>123456789</Identity>
        <SharedSecret>shared-secret-here</SharedSecret>
      </Credential>
      <UserAgent>ediverse-buyer/1.0</UserAgent>
    </Sender>
  </Header>
  <Request>
    <OrderRequest>
      <OrderRequestHeader orderID="PO-2026-00789"
                          orderDate="2026-05-13T16:00:00+02:00"
                          type="new">
        <Total>
          <Money currency="EUR">129.97</Money>
        </Total>
        <ShipTo>
          <Address>
            <Name xml:lang="fr">Acheteur SA — Site Paris</Name>
            <PostalAddress>
              <Street>10 rue de la Paix</Street>
              <City>Paris</City>
              <PostalCode>75002</PostalCode>
              <Country isoCountryCode="FR">France</Country>
            </PostalAddress>
          </Address>
        </ShipTo>
        <BillTo>
          <Address>
            <Name xml:lang="fr">Acheteur SA — Comptabilité</Name>
            <PostalAddress>
              <Street>1 avenue des Champs-Élysées</Street>
              <City>Paris</City>
              <PostalCode>75008</PostalCode>
              <Country isoCountryCode="FR">France</Country>
            </PostalAddress>
          </Address>
        </BillTo>
        <Contact role="buyer">
          <Name xml:lang="fr">Marie Dupont</Name>
          <Email>marie.dupont@acheteur.example</Email>
        </Contact>
      </OrderRequestHeader>
      <ItemOut quantity="3" lineNumber="1">
        <ItemID>
          <SupplierPartID>SKU-A100</SupplierPartID>
        </ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">29.99</Money></UnitPrice>
          <Description xml:lang="fr">Chaise de bureau ergonomique noire</Description>
          <UnitOfMeasure>EA</UnitOfMeasure>
          <Classification domain="UNSPSC">56101504</Classification>
        </ItemDetail>
      </ItemOut>
      <ItemOut quantity="2" lineNumber="2">
        <ItemID>
          <SupplierPartID>SKU-B200</SupplierPartID>
        </ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">20.00</Money></UnitPrice>
          <Description xml:lang="fr">Repose-pieds réglable</Description>
          <UnitOfMeasure>EA</UnitOfMeasure>
          <Classification domain="UNSPSC">56121601</Classification>
        </ItemDetail>
      </ItemOut>
    </OrderRequest>
  </Request>
</cXML>

Requis vs optionnel

Vue minimale d'un OrderRequest valide :

  • Racine cXML avec payloadID, timestamp et version.
  • Header > From, To, Sender (chacun avec Credential+).
  • Request > OrderRequest.
  • OrderRequestHeader avec orderID et orderDate en attributs, Total et BillTo dans le contenu.
  • Au moins un ItemOut avec quantity, lineNumber et un ItemID > SupplierPartID.

Le ShipTo au niveau header est optionnel (un même ShipTo peut être défini par ItemOut), mais en pratique on le met au header par défaut.

Patterns courants

Le couple orderID (côté acheteur) + SupplierOrderInfo/orderID (côté fournisseur, optionnel) est la clé de corrélation. Pour les commandes issues d'un punchout, le SupplierOrderInfo permet à l'ERP fournisseur de retrouver le panier d'origine.

Codes UNSPSC dans Classification : même si le DTD permet n'importe quel domain, l'usage Ariba/SAP Business Network impose UNSPSC pour les catégories produit. C'est ce qui permet aux acheteurs d'agréger les achats par famille.

Modifications post-émission : utiliser type="update" avec un DocumentReference qui pointe le payloadID de la précédente version. Le contenu doit être complet — la nouvelle version remplace, elle ne fusionne pas.

Documentation