VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.
24 <cbc:TaxAmount currencyID="EUR">66.66</cbc:TaxAmount> 25 <cac:TaxSubtotal> 26 <cbc:TaxableAmount currencyID="EUR">333.30</cbc:TaxableAmount>
The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).
27 <cbc:TaxAmount currencyID="EUR">66.66</cbc:TaxAmount> 28 <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>22</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory> 29 </cac:TaxSubtotal>
Business process MUST be provided.
3 xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 4 xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"> 5 <cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>
Business process MUST be in the format 'urn:fdc:peppol.eu:2017:poacc:billing:NN:1.0' where NN indicates the process number.
3 xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 4 xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"> 5 <cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>
A buyer reference or purchase order reference MUST be provided.
3 xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 4 xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"> 5 <cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>
Specification identifier MUST have the value 'urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0'.
3 xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 4 xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"> 5 <cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>
Seller electronic address MUST be provided
10 <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode> 11 <cac:AccountingSupplierParty><cac:Party> 12 <cac:PostalAddress><cac:Country><cbc:IdentificationCode>SI</cbc:IdentificationCode></cac:Country></cac:PostalAddress>
Buyer electronic address MUST be provided
15 </cac:Party></cac:AccountingSupplierParty> 16 <cac:AccountingCustomerParty><cac:Party> 17 <cac:PostalAddress><cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country></cac:PostalAddress>
Invoice line net amount MUST equal (Invoiced quantity * (Item net price/item price base quantity) + Sum of invoice line charge amount - sum of invoice line allowance amount
36 </cac:LegalMonetaryTotal> 37 <cac:InvoiceLine> 38 <cbc:ID>1</cbc:ID>
A PDF only works if it is Factur-X / ZUGFeRD — a PDF with the invoice XML attached inside it. A printed or scanned PDF has nothing in it to check. If you have the XML as a separate file, upload that.
No invoice to hand? Try a sample with a VAT rounding error or the same invoice against Peppol rules, or against XRechnung (Germany) — or see an invoice that is valid EU-wide and still rejected in Germany. Or grab a sample invoice to test your own code with.
Every EN 16931 and Peppol BIS rule has its own reference page with the cause and the fix.
Factur-X and ZUGFeRD PDFs are unpacked and the XML checked — plus the container itself: /AF, /AFRelationship and the XMP profile declaration, which almost nothing else looks at.
An invoice can be valid EN 16931 and still bounce off Peppol or XRechnung. The Peppol check adds the national rules for DE, DK, GR, IS, IT, NL, NO and SE automatically, from the seller's country.
Passes 1,142 of 1,142 assertions in CEN's own EN 16931 test suite — the same corpus the standard is validated with.
Country-by-country mandate deadlines — Belgium, Poland, France, Germany, Slovenia and the rest.