Format XML UBL 2.1

Le format technique derrière les factures PEPPOL. Comprenez comment vos données de facture sont structurées pour la communication de machine à machine.

Qu'est-ce que l'UBL ?

L'UBL (Universal Business Language) est une norme internationale de structuration des documents commerciaux tels que les factures. Considérez-le comme un modèle précis qui indique aux ordinateurs exactement où trouver chaque information — le numéro de facture, les montants, la TVA, les coordonnées du vendeur, etc.

Lorsque vous créez une facture dans aiDoks, nous convertissons automatiquement vos données dans ce format XML UBL. Cela garantit que tout système recevant votre facture peut la lire correctement, quel que soit le logiciel utilisé.

Vous n'avez pas besoin d'écrire de XML

aiDoks génère automatiquement un XML UBL parfait à partir de votre saisie. Cette page s'adresse à ceux qui veulent comprendre ce qui se passe en coulisses ou qui doivent travailler avec les fichiers bruts.

Structure de la facture en un coup d'œil

Chaque facture PEPPOL contient ces sections principales, dans cet ordre :

Informations d'en-têteNuméro de facture, dates, devise et identifiants PEPPOL
Vendeur (fournisseur)Le nom de votre entreprise, l'adresse, le numéro de TVA, l'identifiant PEPPOL
Acheteur (client)Les coordonnées de l'entreprise du client et son identifiant PEPPOL
Informations de paiementCompte bancaire, mode de paiement, conditions de paiement
Récapitulatif des taxesVentilation de la TVA par catégorie et par taux
TotauxTotal des lignes, total des taxes et montant dû
Lignes d'articlesChaque produit/service avec quantité, prix et TVA

Explication des éléments clés

Voici les parties les plus importantes d'une facture UBL et ce qu'elles contiennent :

Identifiants PEPPOL
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID> <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>

Ces identifiants indiquent aux systèmes destinataires qu'il s'agit d'une facture conforme à PEPPOL BIS 3.0. Ils sont toujours identiques pour les factures standard — aiDoks les ajoute automatiquement.

Détails de la facture
<cbc:ID>INV-2025-001</cbc:ID> <cbc:IssueDate>2025-01-29</cbc:IssueDate> <cbc:DueDate>2025-02-28</cbc:DueDate> <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode> <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

Votre numéro de facture, la date d'émission, la date d'échéance, le type (380 = facture standard) et la devise. Les dates doivent être au format AAAA-MM-JJ.

Informations sur le vendeur
<cac:AccountingSupplierParty> <cac:Party> <cbc:EndpointID schemeID="0191">EE123456789</cbc:EndpointID> <cac:PartyName> <cbc:Name>Your Company OÜ</cbc:Name> </cac:PartyName> <!-- Address, VAT number, registration... --> </cac:Party> </cac:AccountingSupplierParty>

Les coordonnées de votre entreprise. L'EndpointID avec schemeID est votre identifiant de participant PEPPOL — c'est ainsi que le réseau sait où livrer les réponses.

Ligne de facture
<cac:InvoiceLine> <cbc:ID>1</cbc:ID> <cbc:InvoicedQuantity unitCode="HUR">40</cbc:InvoicedQuantity> <cbc:LineExtensionAmount currencyID="EUR">3000.00</cbc:LineExtensionAmount> <cac:Item> <cbc:Name>Web Development Services</cbc:Name> </cac:Item> <cac:Price> <cbc:PriceAmount currencyID="EUR">75.00</cbc:PriceAmount> </cac:Price> </cac:InvoiceLine>

Chaque article que vous facturez. Comprend le numéro de ligne, la quantité (avec un code d'unité comme HUR pour les heures), le total de la ligne, la description de l'article et le prix unitaire. Vous pouvez avoir plusieurs éléments InvoiceLine.

Référence des codes courants

Schémas d'identifiant de participant PEPPOL

Identifiant de schémaPaysDescription
0191EstonieNuméro de TVA (EE + 9 chiffres)
0192EstonieCode du registre des entreprises (8 chiffres)
0193LettonieNuméro de TVA (LV + 11 chiffres)
0200LituanieNuméro de TVA (LT + 9 à 12 chiffres)
9915AutricheNuméro de TVA
9930ItalieNuméro de TVA

Codes de mode de paiement

30Virement bancaire (le plus courant)
58Virement SEPA
49Prélèvement automatique
48Carte de crédit

Comment fonctionne la validation

Avant qu'une facture puisse être envoyée via PEPPOL, elle doit passer plusieurs contrôles de validation :

Schéma XML (XSD)Automatique

Vérifie que la structure XML est correcte — tous les éléments requis sont présents, correctement imbriqués et utilisent les bons types de données.

Règles SchematronAutomatique

Valide les règles métier — par exemple, que les montants de TVA correspondent aux valeurs calculées, que les champs requis sont remplis selon le contexte et que les valeurs de code sont valides.

Listes de codes PEPPOLAutomatique

Vérifie que tous les codes (devise, pays, unité, catégorie de TVA) proviennent des listes officielles approuvées par PEPPOL.

Contrôle des calculsAutomatique

Confirme que les totaux de ligne s'additionnent correctement, que la TVA est calculée correctement et que le montant final à payer est exact.

La validation dans aiDoks

aiDoks exécute toutes ces validations avant l'envoi. En cas d'erreurs, vous verrez des messages spécifiques expliquant ce qui doit être corrigé — généralement un champ manquant ou une valeur incorrecte.

Exemple de fichier de facture

Vous voulez voir un exemple complet ? Voici une facture PEPPOL valide minimale :

XML
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
  <cbc:ID>INV-2025-001</cbc:ID>
  <cbc:IssueDate>2025-01-29</cbc:IssueDate>
  <cbc:DueDate>2025-02-28</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0191">EE123456789</cbc:EndpointID>
      <cac:PartyName><cbc:Name>Seller Company OÜ</cbc:Name></cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>Main Street 1</cbc:StreetName>
        <cbc:CityName>Tallinn</cbc:CityName>
        <cbc:PostalZone>10001</cbc:PostalZone>
        <cac:Country><cbc:IdentificationCode>EE</cbc:IdentificationCode></cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>EE123456789</cbc:CompanyID>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Seller Company OÜ</cbc:RegistrationName>
        <cbc:CompanyID>12345678</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0192">87654321</cbc:EndpointID>
      <cac:PartyName><cbc:Name>Buyer Company AS</cbc:Name></cac:PartyName>
      <cac:PostalAddress>
        <cbc:CityName>Tallinn</cbc:CityName>
        <cac:Country><cbc:IdentificationCode>EE</cbc:IdentificationCode></cac:Country>
      </cac:PostalAddress>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Buyer Company AS</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>

  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">220.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">220.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>22</cbc:Percent>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>

  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="EUR">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="EUR">1220.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">1220.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>

  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Name>Consulting Services</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>22</cbc:Percent>
        <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>