Software Developers
How is a UBL invoice document structured for e-invoicing compliance?
UBL (Universal Business Language) 2.1 is an OASIS standard XML format used as the basis for Peppol BIS Billing 3.0 and the EN 16931 European standard. A UBL invoice document is organized into header information (parties, dates, currency), tax totals, monetary totals, and invoice lines. Understanding the UBL structure is essential for developers implementing e-invoice generation or integration.
What are the key elements of a UBL Invoice document?
UBL Invoice document structure by section:
- Header: CustomizationID (profile identifier), ProfileID, ID (invoice number), IssueDate, InvoiceTypeCode, DocumentCurrencyCode
- Parties: AccountingSupplierParty and AccountingCustomerParty with PostalAddress, PartyTaxScheme (VAT number), PartyLegalEntity
- Payment: PaymentMeans (PayeeFinancialAccount with IBAN/BIC) and PaymentTerms
- TaxTotal: TaxAmount and TaxSubtotal with TaxCategory (VAT rate, taxable amount, tax amount)
- LegalMonetaryTotal: LineExtensionAmount, TaxExclusiveAmount, TaxInclusiveAmount, PayableAmount
- InvoiceLine: ID, InvoicedQuantity, LineExtensionAmount, Item (Name, SellersItemIdentification), Price
- Line TaxTotal: Per-line tax amount and category for detailed per-line VAT breakdown
Frequently Asked Questions
- What is the CustomizationID in a UBL invoice?
- The CustomizationID in a UBL Peppol invoice identifies the specific customization or profile that the invoice conforms to. For Peppol BIS Billing 3.0, the CustomizationID is the standard string 'urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0'. This identifier tells receiving systems which validation rules to apply. Incorrect or missing CustomizationID is a common technical error in new Peppol implementations.
- How does UBL handle invoices with multiple VAT rates?
- UBL handles multiple VAT rates through the TaxSubtotal element within TaxTotal. Each applicable VAT rate requires a separate TaxSubtotal instance containing: TaxableAmount (the total amount subject to that rate), TaxAmount (the VAT due at that rate), and TaxCategory (which specifies the rate, code, and tax scheme). The sum of all TaxSubtotal TaxAmounts equals the total TaxAmount in TaxTotal. At the line level, each InvoiceLine specifies its own TaxTotal indicating which rate applies to that line.