ValidateFin

UBL Invoice — reverse charge (VAT category AE)

Une facture d’autoliquidation valide en UBL : un prestataire français facture des services à une entreprise allemande, la TVA est due par le preneur, donc taux à 0 % et aucune TVA facturée. La catégorie AE apporte quatre règles : les deux numéros de TVA (BR-AE-02, BR-AE-03), le taux à 0 % (BR-AE-05), un montant de TVA de 0,00 (BR-AE-09) et un motif d’exonération (BR-AE-10), ici VATEX-EU-AE et la mention « Reverse charge ».

UBL 2.1 Invoice — Valide

Une facture d’autoliquidation valide en UBL : un prestataire français facture des services à une entreprise allemande, la TVA est due par le preneur, donc taux à 0 % et aucune TVA facturée. La catégorie AE apporte quatre règles : les deux numéros de TVA (BR-AE-02, BR-AE-03), le taux à 0 % (BR-AE-05), un montant de TVA de 0,00 (BR-AE-09) et un motif d’exonération (BR-AE-10), ici VATEX-EU-AE et la mention « Reverse charge ».

Facture UBL (Peppol BIS 3.0) UBL 2.1 Invoice EN 16931 / Peppol BIS 3.0Résultat attendu: Valide

Ce que montre ce fichier

Une facture d’autoliquidation valide en UBL : un prestataire français facture des services à une entreprise allemande, la TVA est due par le preneur, donc taux à 0 % et aucune TVA facturée. La catégorie AE apporte quatre règles : les deux numéros de TVA (BR-AE-02, BR-AE-03), le taux à 0 % (BR-AE-05), un montant de TVA de 0,00 (BR-AE-09) et un motif d’exonération (BR-AE-10), ici VATEX-EU-AE et la mention « Reverse charge ».

Transactions2
Total2 500,00 €
Dernière vérification: Licence: CC-BY-4.0

Toutes les parties, IBAN et montants ci-dessous sont fictifs. Les IBAN sont structurellement valides — ils passent le mod-97 — mais ne correspondent à aucun compte réel.

Contenu du fichier

<?xml version="1.0" encoding="UTF-8"?>
<!--
  ValidateFin sample file — UBL invoice, Peppol BIS Billing 3.0 (EN 16931).
  REVERSE CHARGE (VAT category AE): a French supplier invoices services to a German
  business; VAT is accounted for by the customer, so the rate is 0 % and no VAT is
  charged. BR-AE-02 requires BOTH VAT identifiers, BR-AE-05 the 0 % rate, BR-AE-09
  a VAT category tax amount of 0.00 and BR-AE-10 an exemption reason.
  Expected validation result: VALID — 2 lines, 2 500.00 EUR, VAT 0.00 EUR.

  All parties and account numbers are fictitious.
  Reference page: https://validatefin.com/en/resources/samples/ubl-invoice-reverse-charge
  License: CC-BY-4.0
-->
<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>ATL-2026-0157</cbc:ID>
  <cbc:IssueDate>2026-03-04</cbc:IssueDate>
  <cbc:DueDate>2026-04-03</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:Note>Reverse charge — VAT to be accounted for by the customer (Article 196 of Council Directive 2006/112/EC).</cbc:Note>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>PO-2026-3310</cbc:BuyerReference>

  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9957">FR40303265045</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Atlas Consulting SAS</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>18 rue de la Boetie</cbc:StreetName>
        <cbc:CityName>Paris</cbc:CityName>
        <cbc:PostalZone>75008</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>FR</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>FR40303265045</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Atlas Consulting SAS</cbc:RegistrationName>
        <cbc:CompanyID>303265045</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Service facturation</cbc:Name>
        <cbc:Telephone>+33 1 55 00 12 12</cbc:Telephone>
        <cbc:ElectronicMail>[email protected]</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="9930">DE987654321</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Kessler Handel GmbH</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>Marktplatz 3</cbc:StreetName>
        <cbc:CityName>Leipzig</cbc:CityName>
        <cbc:PostalZone>04109</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>DE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>DE987654321</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Kessler Handel GmbH</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>

  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
    <cbc:PaymentID>ATL-2026-0157</cbc:PaymentID>
    <cac:PayeeFinancialAccount>
      <cbc:ID>FR7630006000011234567890189</cbc:ID>
      <cbc:Name>Atlas Consulting SAS</cbc:Name>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>

  <cac:PaymentTerms>
    <cbc:Note>Net 30 days.</cbc:Note>
  </cac:PaymentTerms>

  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">2500.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>AE</cbc:ID>
        <cbc:Percent>0</cbc:Percent>
        <cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
        <cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>

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

  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="DAY">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">2000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Supply chain audit, on-site engagement</cbc:Description>
      <cbc:Name>Consulting services</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>AE</cbc:ID>
        <cbc:Percent>0</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">200.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>

  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="HUR">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="EUR">500.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Remote follow-up workshops</cbc:Description>
      <cbc:Name>Workshop hours</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>AE</cbc:ID>
        <cbc:Percent>0</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="EUR">50.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>

160 / 162 lines shown — the complete file is in the download above.

Comment nous savons que ces résultats tiennent

Chaque fichier de cette bibliothèque passe dans le validateur du site à chaque build. Le résultat attendu annoncé ci-dessus est vérifié par un test automatisé : si un fichier cessait de correspondre à ce que cette page affirme, le build échouerait. Deux fixtures héritées ont été réparées ainsi avant publication : trois IBAN échouaient au mod-97 et plusieurs libellés utilisaient des caractères hors du jeu SEPA de base.

Facture UBL (Peppol BIS 3.0)