Kennisbank
Wat is UBL (Universal Business Language)?
UBL is een open XML-standaard van OASIS voor handelsdocumenten: order, pakbon, factuur, creditnota en tientallen andere. De Nederlandse e-factuur (SI-UBL 2.0) en de Peppol-factuur zijn allebei UBL 2.1 met extra regels erbovenop. UBL is het bestandsformaat, Peppol het netwerk waarover het bestand kan reizen.
Bijgewerkt op
UBL in twee zinnen
UBL, voluit Universal Business Language, is een verzameling XML-schema's voor handelsdocumenten, beheerd door de standaardenorganisatie OASIS. Elk document, van offerteaanvraag tot creditnota, heeft een vaste structuur met vaste elementnamen, zodat het systeem van de ontvanger weet waar het factuurnummer, het bedrag en het ordernummer staan.
UBL 2.1 is ook vastgelegd als ISO/IEC 19845. Die versie is de basis van de Nederlandse e-factuur SI-UBL 2.0 en van Peppol BIS Billing 3.0. Hoe die twee zich tot elkaar en tot de Europese norm verhouden, staat in wat is e-facturatie. Deze pagina gaat over UBL zelf.
Versies en documenten
| Versie | Status bij OASIS | Documentsoorten |
|---|---|---|
| UBL 2.1 | OASIS Standard, 4 november 2013 | 65 |
| UBL 2.4 | OASIS Standard, 20 juni 2024 | |
| UBL 2.5 | OASIS Standard, 12 augustus 2026 | 101 |
UBL is achterwaarts compatibel binnen versie 2: een document dat geldig is onder 2.1, is ook geldig onder 2.5. Nieuwe versies voegen documentsoorten en elementen toe, en maken soms een verplicht element optioneel. UBL 2.5 voegde acht documenten toe, waaronder DeliveryNote, InvoiceStatusRequest en InvoiceStatusResponse.
Voor facturen in Nederland en over Peppol telt alleen 2.1. Peppol BIS Billing 3.0 waarschuwt bij elke UBLVersionID die niet 2.1 is (regel UBL-CR-002). Een factuurmodule die "UBL 2.3" of "UBL 2.5" als pluspunt noemt, maakt de factuur daarmee niet beter geschikt voor Peppol.
Hoe een UBL-document is opgebouwd
Een UBL-factuur is een XML-bestand met het element Invoice als wortel. Daaronder staan twee soorten elementen, elk met een eigen namespace:
cbc:(common basic components): één waarde, zoalscbc:ID,cbc:IssueDateofcbc:PayableAmount.cac:(common aggregate components): een groep elementen, zoalscac:AccountingCustomerPartymet naam, adres en identificatie van de koper.
UBL zelf is ruim. Peppol BIS maakt er een smal profiel van:
UBL 2.1 Invoice |
Peppol BIS Billing 3.0 | |
|---|---|---|
Elementen direct onder Invoice |
54 | 31 |
| Daarvan verplicht | 6 | 11 |
| Extra verplicht in BIS | CustomizationID, ProfileID, InvoiceTypeCode, DocumentCurrencyCode, TaxTotal |
|
| Uitgesloten UBL-elementen | 678 regels UBL-CR |
De zes elementen die UBL 2.1 zelf verplicht stelt, zijn ID, IssueDate, AccountingSupplierParty, AccountingCustomerParty, LegalMonetaryTotal en minstens één InvoiceLine. Een bestand met alleen die zes is geldige UBL en wordt door elk Peppol-access point afgekeurd. Daarom zegt "we leveren UBL" weinig zonder de naam van het profiel erbij, en dat profiel staat in CustomizationID.
Elk bedrag heeft een verplicht attribuut currencyID; dat eist het UBL-schema zelf. Peppol voegt eraan toe dat alle bedragen dezelfde valuta hebben als de factuur (regel PEPPOL-EN16931-R051). Bedragen en datums volgen XML: 302.28 met een punt, 2026-10-02 als datum.
Rekenvoorbeeld: de totalen van een vooraf betaalde webshoporder
Een zakelijke klant bestelt in een webshop 12 × 17,08 en 3 × 10,12, gebruikt een kortingscode van 10,00, betaalt 14,50 verzendkosten en rekent bij de checkout af met iDEAL. De factuur volgt later uit de boekhouding. In UBL komen korting en verzendkosten op documentniveau in cac:AllowanceCharge, met ChargeIndicator false voor een korting en true voor een toeslag:
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Kortingscode</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">10.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID><cbc:Percent>21</cbc:Percent>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">235.32</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">239.82</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">290.18</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">10.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">14.50</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">290.18</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
De som, stap voor stap, met de regel die hem controleert:
- Regels: 204,96 + 30,36 = 235,32 (
BR-CO-10). - Exclusief btw: 235,32 - 10,00 + 14,50 = 239,82 (
BR-CO-13). - Btw: 239,82 × 0,21 = 50,3622, afgerond 50,36.
- Inclusief btw: 239,82 + 50,36 = 290,18 (
BR-CO-15). - Te betalen: 290,18 - 290,18 vooraf betaald = 0,00 (
BR-CO-16).
Twee dingen gaan hier in de praktijk mis. Een boekhoudpakket dat de webshopbetaling niet kent, zet PayableAmount op 290.18 en de klant krijgt een factuur voor een bedrag dat al betaald is, met een aanmaning erachteraan. En een korting zonder reden wordt afgekeurd: elke korting op documentniveau heeft een reden of redencode nodig (BR-33) en een btw-categorie (BR-32). Hoe btw per regel of per totaal wordt afgerond, staat in bedragen en btw mappen.
UBL of EDIFACT
UBL en EDIFACT doen hetzelfde werk in een andere vorm. Een factuur kan als UBL-XML of als EANCOM-INVOIC worden verstuurd:
| UBL | EDIFACT (EANCOM) | |
|---|---|---|
| Vorm | XML met elementnamen | Tekst met segmenten van drie letters |
| Een datum | <cbc:IssueDate>2026-10-02</cbc:IssueDate> |
DTM+137:20261002:102' |
| Beheer | OASIS, ISO/IEC 19845 | Verenigde Naties, GS1 voor EANCOM |
| Controle | XML-schema plus regels met een nummer | Syntaxcontrole, CONTRL en APERAK |
| Waar je het tegenkomt | E-factuur, Peppol | Retail-EDI: order, pakbon, factuur |
De velden zijn grotendeels dezelfde: ordernummer, GLN of KVK-nummer, GTIN, aantallen, bedragen. Een koppeling die een EANCOM-factuur kan opbouwen, heeft de gegevens voor een UBL-factuur dus al. Het verschil zit in de regels: welke velden verplicht zijn en hoe bedragen moeten optellen. Hoe EDIFACT-berichten zijn opgebouwd, staat in EDIFACT-berichten.
Waar een UBL-bestand op wordt afgekeurd
| Wat er in het bestand staat | Gevolg | Regel |
|---|---|---|
Bedrag zonder currencyID |
Ongeldig volgens het UBL-schema | XSD |
Bedrag als 302,28 |
Geen geldig decimaal getal in XML | XSD |
UBLVersionID 2.3 |
Waarschuwing | UBL-CR-002 |
Eigen uitbreidingen in UBLExtensions |
Waarschuwing | UBL-CR-001 |
| Totaal klopt niet met regels, korting en toeslag | Afgekeurd | BR-CO-13 |
| Korting zonder reden | Afgekeurd | BR-33 |
Eenheid PCE |
Onbekende code; een stuk is H87 of C62 |
codelijst |
De eerste twee komen bij zelfgebouwde exports het vaakst voor: een sjabloon dat bedragen met de Nederlandse komma schrijft, of de valuta alleen bovenaan vermeldt. Een waarschuwing houdt de factuur niet tegen, een afkeuring wel.
Wat betekent dit voor je koppeling?
UBL is de vorm; wat erin moet staan, bepaalt het profiel. Voor een Nederlandse afnemer of over Peppol is dat UBL 2.1 met de regels van SI-UBL 2.0 of Peppol BIS, en die regels raken gegevens die uit je webshop en je ERP moeten komen: de betaling bij de checkout, de korting met een reden, de verzendkosten als toeslag en het ordernummer van de klant.
Wij bouwen de koppeling die die gegevens bij elkaar brengt, zodat je boekhoudpakket of ERP een factuur maakt die bij de eerste validatie door komt, en we bewaken hem daarna. Een afgekeurde factuur staat met het nummer van de regel in het dashboard. Meer op Peppol koppeling. Vertel vanuit welk pakket je factureert, dan hoor je wat er voor UBL en Peppol nog ontbreekt.
Veelgestelde vragen
Is UBL hetzelfde als Peppol?
Nee. UBL is het formaat van het bestand, Peppol het netwerk en de afspraken waarover het verstuurd wordt. Een UBL-factuur kan ook per e-mail of via een portaal gaan; AFAS Profit heeft bijvoorbeeld een verstrekkingswijze "E-mail PDF + E-factuur (UBL)" naast die voor Peppol. Over Peppol gaat wel altijd een UBL-bestand volgens Peppol BIS. Zie wat is Peppol.
Wat is het verschil tussen UBL en SI-UBL?
UBL is de algemene OASIS-standaard. SI-UBL 2.0 is de Nederlandse invulling ervan voor facturen: UBL 2.1 volgens de Europese norm EN 16931 plus de Nederlandse regels van de NLCIUS, zoals KVK-nummer en een gesplitst adres. Elke SI-UBL-factuur is UBL, niet elke UBL-factuur is SI-UBL. Meer in wat is e-facturatie.
Welke UBL-versie moet ik gebruiken?
Voor facturen in Nederland en over Peppol: UBL 2.1. Peppol BIS Billing 3.0 verwacht in UBLVersionID 2.1 of geen waarde en geeft bij een andere versie een waarschuwing. Nieuwere versies (2.5 sinds augustus 2026) voegen documentsoorten en elementen toe en zijn achterwaarts compatibel, maar de afspraken van Peppol en SI-UBL zijn op 2.1 gebouwd.
Kan ik een UBL-bestand openen?
Ja, het is XML en elke teksteditor of browser toont het. Een pdf-weergave zit er niet standaard in; een factuur kan wel een pdf als bijlage meedragen in AdditionalDocumentReference. Het systeem van de ontvanger leest de XML, niet de pdf.
Bestaat er ook een UBL-order?
Ja. UBL 2.1 heeft documenten voor de hele keten, waaronder Order, OrderResponse, DespatchAdvice en ReceiptAdvice. OpenPeppol gebruikt die voor zijn order- en pakbonberichten. In de Nederlandse retail gaan order en pakbon meestal nog als EANCOM; zie Peppol of EDI.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk