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.
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:
Belangrijke elementen uitgelegd
Dit zijn de belangrijkste onderdelen van een UBL-factuur en wat ze bevatten:
<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.
<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.
<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.
<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-ID | Land | Omschrijving |
|---|---|---|
0191 | Estland | Btw-nummer (EE + 9 cijfers) |
0192 | Estland | Handelsregistercode (8 cijfers) |
0193 | Letland | Btw-nummer (LV + 11 cijfers) |
0200 | Litouwen | Btw-nummer (LT + 9–12 cijfers) |
9915 | Oostenrijk | Btw-nummer |
9930 | Italië | Btw-nummer |
Codes voor betaalwijzen
30Overboeking (meest voorkomend)58SEPA-overboeking49Automatische incasso48CreditcardHoe validatie werkt
Voordat een factuur via PEPPOL kan worden verstuurd, moet ze meerdere validatiecontroles doorstaan:
Controleert of de XML-structuur klopt — of alle vereiste elementen aanwezig zijn, correct genest zijn en de juiste gegevenstypen gebruiken.
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.
Controleert of alle codes (valuta, land, eenheid, btw-categorie) uit de officieel door PEPPOL goedgekeurde lijsten komen.
Bevestigt dat de regeltotalen correct optellen, dat de btw juist is berekend en dat het uiteindelijke te betalen bedrag klopt.
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 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>