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 QuoteMessage / QuoteRequest

Flux d'appel d'offres B2B. Le QuoteRequest est émis par l'acheteur vers ses fournisseurs candidats ; le QuoteMessage est la proposition de prix renvoyée par chaque fournisseur — éventuellement plusieurs fois si l'enchère ou la négociation se prolonge.

Objet de la transaction

Le couple QuoteRequest/QuoteMessage matérialise un appel d'offres : l'acheteur publie son besoin (volumes, dates, spécifications), et un ou plusieurs fournisseurs répondent avec leurs propositions de prix et de délais. L'attribut type sur QuoteMessageHeader est #REQUIRED et prend cinq valeurs : accept (accepte la dernière proposition), reject, update (nouvelle proposition au cours d'une négociation), final (proposition finale une fois l'event clos), award (l'acheteur attribue le marché à ce fournisseur).

L'attribut quoteReceivingPreference sur le QuoteRequestHeader contrôle quand l'acheteur souhaite recevoir les QuoteMessage du système de sourcing : winningOnly, finalBidsFromAll, ou all (au fil de l'eau).

Structure XML

QuoteRequest

Le DTD : QuoteRequest (QuoteRequestHeader, QuoteItemOut*). Le contenu de QuoteRequestHeader : (Name?, SupplierSelector?, Total?, Description?, ShipTo?, Contact*, Comments?, QuoteHeaderInfo?, Extrinsic*, QuoteRequestHeaderIndustry?). Aucun élément n'est obligatoire par cardinalité.

Attributs #REQUIRED : requestID, requestDate, openDate, closeDate, currency, xml:lang. Donc tout RFQ a une fenêtre temporelle obligatoire et une langue+devise figées.

QuoteMessage

Le DTD : QuoteMessage (QuoteMessageHeader, QuoteItemIn*). Le QuoteMessageHeader contient : (OrganizationID, Total, ShipTo?, Contact*, QuoteRequestReference?, Comments?, QuoteHeaderInfo?, SupplierProductionFacilityRelations?, Extrinsic*). Deux éléments obligatoires : OrganizationID (l'identité du fournisseur qui soumet) et Total (le montant proposé).

Attributs #REQUIRED sur le QuoteMessageHeader : type, quoteID, quoteDate, currency, xml:lang.

QuoteItemIn

Le DTD : QuoteItemIn (ItemID?, ItemDetail, ShipTo?, Shipping?, Tax?, SpendDetail?, Total?, TermsOfDelivery?, ReferenceDocumentInfo*, Contact*, Comments?, Alternative?, SupplierProductionFacilityRelations?, Extrinsic*). Seul ItemDetail est obligatoire par cardinalité ; ItemID est optionnel mais en pratique fourni.

Attributs : type #REQUIRED (cinq valeurs identiques à QuoteMessageHeader), quantity #REQUIRED, lineNumber #IMPLIED, rank pour le classement si plusieurs fournisseurs sont comparés.

xml quote-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="260510.100000.qreq@buyer.example"
      timestamp="2026-05-10T10: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-sourcing/1.0</UserAgent>
    </Sender>
  </Header>
  <Request>
    <QuoteRequest>
      <QuoteRequestHeader requestID="RFQ-2026-0017"
                          requestDate="2026-05-10T10:00:00+02:00"
                          type="new"
                          openDate="2026-05-10T10:00:00+02:00"
                          closeDate="2026-05-17T18:00:00+02:00"
                          currency="EUR"
                          xml:lang="fr">
        <Name xml:lang="fr">Marché chaises de bureau Q3 2026</Name>
        <Description xml:lang="fr">Appel d'offres pour 500 chaises ergonomiques</Description>
      </QuoteRequestHeader>
      <QuoteItemOut quantity="500" lineNumber="1">
        <ItemID>
          <SupplierPartID>RFQ-LINE-1</SupplierPartID>
        </ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">0.00</Money></UnitPrice>
          <Description xml:lang="fr">Chaise de bureau ergonomique, soutien lombaire</Description>
          <UnitOfMeasure>EA</UnitOfMeasure>
          <Classification domain="UNSPSC">56101504</Classification>
        </ItemDetail>
      </QuoteItemOut>
    </QuoteRequest>
  </Request>
</cXML>
xml quote-message.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="260515.140000.qmsg@supplier.example"
      timestamp="2026-05-15T14:00:00+02:00"
      version="1.2.069">
  <Header>
    <From>
      <Credential domain="DUNS"><Identity>987654321</Identity></Credential>
    </From>
    <To>
      <Credential domain="DUNS"><Identity>123456789</Identity></Credential>
    </To>
    <Sender>
      <Credential domain="DUNS">
        <Identity>987654321</Identity>
        <SharedSecret>shared-secret-here</SharedSecret>
      </Credential>
      <UserAgent>supplier-sourcing/1.0</UserAgent>
    </Sender>
  </Header>
  <Message>
    <QuoteMessage>
      <QuoteMessageHeader type="final"
                          quoteID="Q-2026-0042"
                          quoteDate="2026-05-15T14:00:00+02:00"
                          currency="EUR"
                          xml:lang="fr">
        <OrganizationID>
          <Credential domain="DUNS"><Identity>987654321</Identity></Credential>
        </OrganizationID>
        <Total>
          <Money currency="EUR">12500.00</Money>
        </Total>
        <QuoteRequestReference requestID="17" requestDate="2026-05-10T10:00:00+02:00">
          <DocumentReference payloadID="260510.100000.qreq@buyer.example"/>
        </QuoteRequestReference>
      </QuoteMessageHeader>
      <QuoteItemIn type="update" quantity="500" lineNumber="1">
        <ItemID>
          <SupplierPartID>SKU-A100</SupplierPartID>
        </ItemID>
        <ItemDetail>
          <UnitPrice><Money currency="EUR">25.00</Money></UnitPrice>
          <Description xml:lang="fr">Chaise ergonomique noire — proposition fournisseur</Description>
          <UnitOfMeasure>EA</UnitOfMeasure>
          <Classification domain="UNSPSC">56101504</Classification>
          <LeadTime>14</LeadTime>
        </ItemDetail>
        <Total>
          <Money currency="EUR">12500.00</Money>
        </Total>
      </QuoteItemIn>
    </QuoteMessage>
  </Message>
</cXML>

Requis vs optionnel

  • QuoteRequestHeader — 6 attributs #REQUIRED : requestID, requestDate, openDate, closeDate, currency, xml:lang. type par défaut "new". Contenu : zéro élément obligatoire par cardinalité.
  • QuoteMessageHeader — 5 attributs #REQUIRED : type, quoteID, quoteDate, currency, xml:lang. Contenu : OrganizationID et Total obligatoires.
  • QuoteItemIntype et quantity #REQUIRED. Contenu : ItemDetail obligatoire.

Patterns courants

Négociation à plusieurs tours : chaque proposition intermédiaire est un QuoteMessage type="update". La proposition finale après clôture est type="final". L'attribution (validation par l'acheteur) se fait via un QuoteMessage type="award" émis par l'acheteur cette fois.

Lien vers le RFQ original : utiliser QuoteRequestReference avec son DocumentReference. La DTD accepte aussi un requestID et requestDate redondants pour permettre un traitement indépendant.

Variantes / alternatives : le fournisseur peut proposer un article différent via l'élément Alternative dans QuoteItemIn. Utile pour des chaises de remplacement ou des modèles de génération suivante.

Documentation