UBL 2.1-XML-formaat

Het technische formaat achter PEPPOL-facturen. Begrijp hoe uw factuurgegevens worden gestructureerd voor communicatie tussen systemen.

Wat is UBL?

UBL (Universal Business Language) is een internationale standaard voor het structureren van zakelijke documenten zoals facturen. Zie het als een nauwkeurig sjabloon dat computers precies vertelt waar elk gegeven staat — het factuurnummer, de bedragen, de btw, de gegevens van de verkoper, enzovoort.

Wanneer u in aiDoks een factuur maakt, zetten wij uw gegevens automatisch om in dit UBL-XML-formaat. Zo kan elk systeem dat uw factuur ontvangt hem correct lezen, ongeacht welke software het gebruikt.

U hoeft zelf geen XML te schrijven

aiDoks genereert automatisch perfecte UBL-XML op basis van uw invoer. Deze pagina is bedoeld voor wie wil begrijpen wat er achter de schermen gebeurt of met de ruwe bestanden moet werken.

De factuurstructuur in één oogopslag

Elke PEPPOL-factuur bevat deze hoofdonderdelen, in deze volgorde:

KopgegevensFactuurnummer, datums, valuta en PEPPOL-identificaties
Verkoper (leverancier)Naam, adres, btw-nummer en PEPPOL-ID van uw bedrijf
Koper (klant)Bedrijfsgegevens en PEPPOL-ID van de klant
BetaalgegevensBankrekening, betaalwijze, betalingsvoorwaarden
Btw-overzichtBtw-specificatie per categorie en tarief
TotalenRegeltotaal, belastingtotaal en te betalen bedrag
FactuurregelsElk product of elke dienst met aantal, prijs en btw

Belangrijke elementen uitgelegd

Dit zijn de belangrijkste onderdelen van een UBL-factuur en wat ze bevatten:

PEPPOL-identificaties
<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>

Deze identificaties vertellen ontvangende systemen dat dit een factuur is die aan PEPPOL BIS 3.0 voldoet. Voor gewone facturen zijn ze altijd hetzelfde — aiDoks voegt ze automatisch toe.

Factuurgegevens
<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>

Uw factuurnummer, factuurdatum, vervaldatum, type (380 = gewone factuur) en valuta. Datums moeten de notatie YYYY-MM-DD hebben.

Gegevens van de verkoper
<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>

De gegevens van uw bedrijf. De EndpointID met schemeID is uw PEPPOL-deelnemersidentificatie — daarmee weet het netwerk waar het antwoorden moet afleveren.

Factuurregel
<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>

Elk artikel dat u in rekening brengt. Bevat het regelnummer, het aantal (met een eenheidscode zoals HUR voor uren), het regeltotaal, de artikelomschrijving en de stuksprijs. U kunt meerdere InvoiceLine-elementen hebben.

Overzicht van veelgebruikte codes

Schema's voor PEPPOL-deelnemers-ID's

Schema-IDLandOmschrijving
0191EstlandBtw-nummer (EE + 9 cijfers)
0192EstlandHandelsregistercode (8 cijfers)
0193LetlandBtw-nummer (LV + 11 cijfers)
0200LitouwenBtw-nummer (LT + 9–12 cijfers)
9915OostenrijkBtw-nummer
9930ItaliëBtw-nummer

Codes voor betaalwijzen

30Overboeking (meest voorkomend)
58SEPA-overboeking
49Automatische incasso
48Creditcard

Hoe validatie werkt

Voordat een factuur via PEPPOL kan worden verstuurd, moet ze meerdere validatiecontroles doorstaan:

XML-schema (XSD)Automatisch

Controleert of de XML-structuur klopt — of alle vereiste elementen aanwezig zijn, correct genest zijn en de juiste gegevenstypen gebruiken.

Schematron-regelsAutomatisch

Valideert de bedrijfsregels — bijvoorbeeld of de btw-bedragen overeenkomen met de berekende waarden, of verplichte velden naar gelang de context zijn ingevuld en of codewaarden geldig zijn.

PEPPOL-codelijstenAutomatisch

Controleert of alle codes (valuta, land, eenheid, btw-categorie) uit de officieel door PEPPOL goedgekeurde lijsten komen.

RekencontroleAutomatisch

Bevestigt dat de regeltotalen correct optellen, dat de btw juist is berekend en dat het uiteindelijke te betalen bedrag klopt.

Validatie in aiDoks

aiDoks voert al deze validaties uit vóór verzending. Zijn er fouten, dan krijgt u concrete meldingen die uitleggen wat er moet worden hersteld — meestal een ontbrekend veld of een onjuiste waarde.

Voorbeeld van een factuurbestand

Wilt u een volledig voorbeeld zien? Dit is een minimale geldige PEPPOL-factuur:

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>