FinchContext
Run with

Build an EN 16931 / Peppol BIS Billing 3.0 e-Invoice (UBL)

Skill: Convert invoice data into the EU core-standard EN 16931 invoice via Peppol BIS Billing 3.0 (UBL)

Region: European Union (EU-wide standard) Category: E-Invoicing — EU core invoice standard (Directive 2014/55/EU) Does: Takes ordinary invoice data and produces an EN 16931-compliant UBL 2.1 Invoice in the Peppol BIS Billing 3.0 profile — the EU semantic standard for electronic invoicing and the technical foundation of the upcoming VAT in the Digital Age (ViDA) digital reporting requirements. Standard: EN 16931 (semantic model) · OASIS UBL 2.1 (syntax) · Peppol BIS Billing 3.0 (CIUS) · Directive 2014/55/EU (B2G mandate)

EN 16931 is the semantic core invoice model mandated for B2G across the EU and used as the basis for national CTC reforms (FR, IT, DE, PL, etc.). This skill emits the UBL syntax binding in the Peppol BIS Billing 3.0 profile, routed over the Peppol 4-corner network. The CII syntax (used by ZUGFeRD/Factur-X) carries the same BT/BG semantics. Validate against the EN 16931 + Peppol BIS schematron before sending.


When this applies


Input data required

Input EN 16931 term
Invoice number, issue date, due date, type code (380/381) BT-1, BT-2, BT-9, BT-3
Document currency BT-5
Process & specification identifiers (CustomizationID / ProfileID) BT-24, BT-23
Seller name, address, VAT ID, legal/electronic IDs BT-27, BG-5, BT-31, BT-30, Endpoint
Buyer name, address, VAT ID, electronic ID BT-44, BG-8, BT-48, Endpoint
Lines: name, quantity, net unit price, VAT category/rate BG-25, BT-153, BT-129, BT-146, BG-30
VAT breakdown per category BG-23
Document totals BG-22

Document structure (UBL Invoice)

Invoice
├── cbc:CustomizationID  (urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0)
├── cbc:ProfileID        (urn:fdc:peppol.eu:2017:poacc:billing:01:1.0)
├── cbc:ID / IssueDate / DueDate / InvoiceTypeCode / DocumentCurrencyCode
├── cac:AccountingSupplierParty  (seller: EndpointID schemeID, PartyTaxScheme VAT, PartyLegalEntity)
├── cac:AccountingCustomerParty  (buyer)
├── cac:TaxTotal                 (TaxSubtotal per VAT category — BG-23)
├── cac:LegalMonetaryTotal       (LineExtension, TaxExclusive, TaxInclusive, Payable — BG-22)
└── cac:InvoiceLine ...          (BG-25: quantity, LineExtensionAmount, Item, Price, ClassifiedTaxCategory)

VAT category codes (BT-151): S standard, Z zero, E exempt, AE reverse charge, K intra-EU, G export, O out of scope. Peppol endpoints use scheme IDs such as 0088 (GLN), 9930 (DE VAT), 0192 (NO org), etc. (Peppol EAS code list).


Calculation rules


Worked example (one line, standard-rated)

<?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-2026-001</cbc:ID>
  <cbc:IssueDate>2026-01-15</cbc:IssueDate>
  <cbc:DueDate>2026-02-14</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty><cac:Party>
    <cbc:EndpointID schemeID="9930">DE123456789</cbc:EndpointID>
    <cac:PartyTaxScheme><cbc:CompanyID>DE123456789</cbc:CompanyID><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:PartyTaxScheme>
    <cac:PartyLegalEntity><cbc:RegistrationName>Muster GmbH</cbc:RegistrationName></cac:PartyLegalEntity>
  </cac:Party></cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty><cac:Party>
    <cbc:EndpointID schemeID="0192">991825827</cbc:EndpointID>
    <cac:PartyLegalEntity><cbc:RegistrationName>Kunde AS</cbc:RegistrationName></cac:PartyLegalEntity>
  </cac:Party></cac:AccountingCustomerParty>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="EUR">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="EUR">190.00</cbc:TaxAmount>
      <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</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">1190.00</cbc:TaxInclusiveAmount>
    <cbc:PayableAmount currencyID="EUR">1190.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</cbc:Name>
      <cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</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>

Validation checklist


Last updated: 2026-06-04 — confirm the active Peppol BIS Billing version, EAS code list, and EN 16931 schematron (and any ViDA digital-reporting profile) against the current CEN / OpenPeppol / European Commission specifications before use.