UBL Invoice — allowances and charges, line and document level
A valid Peppol BIS 3.0 UBL invoice carrying discounts and charges at BOTH levels: a line allowance (BG-27), a line charge (BG-28), a document-level discount (BG-20) and a freight charge (BG-21). The chain the totals must satisfy is the whole point — BT-106 = 1 520.00 is the sum of the NET line amounts, and BT-109 = 1 530.00 = BT-106 - BT-107 + BT-108 (BR-CO-13), so 19 % VAT is charged on 1 530.00, not on 1 520.00.
UBL 2.1 Invoice — Valid
A valid Peppol BIS 3.0 UBL invoice carrying discounts and charges at BOTH levels: a line allowance (BG-27), a line charge (BG-28), a document-level discount (BG-20) and a freight charge (BG-21). The chain the totals must satisfy is the whole point — BT-106 = 1 520.00 is the sum of the NET line amounts, and BT-109 = 1 530.00 = BT-106 - BT-107 + BT-108 (BR-CO-13), so 19 % VAT is charged on 1 530.00, not on 1 520.00.
What this file shows
A valid Peppol BIS 3.0 UBL invoice carrying discounts and charges at BOTH levels: a line allowance (BG-27), a line charge (BG-28), a document-level discount (BG-20) and a freight charge (BG-21). The chain the totals must satisfy is the whole point — BT-106 = 1 520.00 is the sum of the NET line amounts, and BT-109 = 1 530.00 = BT-106 - BT-107 + BT-108 (BR-CO-13), so 19 % VAT is charged on 1 530.00, not on 1 520.00.
| Transactions | 2 |
|---|---|
| Total | €1,820.70 |
Every party, IBAN and amount below is fictitious. The IBANs are structurally valid — they pass the mod-97 check — but they belong to no real account.
File content
<?xml version="1.0" encoding="UTF-8"?>
<!--
ValidateFin sample file — UBL invoice, Peppol BIS Billing 3.0 (EN 16931).
Allowances and charges at BOTH levels: a line discount (BG-27), a line charge
(BG-28), a document-level discount (BG-20) and a document-level charge (BG-21).
Expected validation result: VALID — 2 lines, 1 820.70 EUR including VAT.
Line net amounts: 1 200.00 - 100.00 = 1 100.00 and 400.00 + 20.00 = 420.00.
BT-106 = 1 520.00; BT-107 = 20.00; BT-108 = 30.00; BT-109 = 1 530.00;
VAT 19 % = 290.70; BT-112 = BT-115 = 1 820.70.
All parties and account numbers are fictitious.
Reference page: https://validatefin.com/en/resources/samples/ubl-invoice-allowance-charge
License: CC-BY-4.0
-->
<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>NWL-2026-0412</cbc:ID>
<cbc:IssueDate>2026-03-02</cbc:IssueDate>
<cbc:DueDate>2026-04-01</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:Note>Discount and freight charge applied at document level.</cbc:Note>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>PO-2026-8841</cbc:BuyerReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9930">DE123456789</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Nordwind Logistik GmbH</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Speicherstrasse 12</cbc:StreetName>
<cbc:CityName>Hamburg</cbc:CityName>
<cbc:PostalZone>20457</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>DE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>DE123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Nordwind Logistik GmbH</cbc:RegistrationName>
<cbc:CompanyID>HRB 98765</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Rechnungsstelle</cbc:Name>
<cbc:Telephone>+49 40 555 0100</cbc:Telephone>
<cbc:ElectronicMail>[email protected]</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9930">DE987654321</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Kessler Handel GmbH</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Marktplatz 3</cbc:StreetName>
<cbc:CityName>Leipzig</cbc:CityName>
<cbc:PostalZone>04109</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>DE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>DE987654321</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Kessler Handel GmbH</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cbc:PaymentID>NWL-2026-0412</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>DE89370400440532013000</cbc:ID>
<cbc:Name>Nordwind Logistik GmbH</cbc:Name>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>Net 30 days.</cbc:Note>
</cac:PaymentTerms>
<!-- Document level allowance (BG-20) -->
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">20.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>19</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<!-- Document level charge (BG-21) -->
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Freight</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">30.00</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>19</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">290.70</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1530.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">290.70</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">1520.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1530.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1820.70</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">20.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">30.00</cbc:ChargeTotalAmount>
<cbc:PayableAmount currencyID="EUR">1820.70</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<!-- Line 1: quantity x price = 1 200.00, minus a 100.00 line discount -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1100.00</cbc:LineExtensionAmount>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>160 / 206 lines shown — the complete file is in the download above.
How we know these results hold
Every file in this library is run through the site's own validator on each build. The expected result stated above is asserted by an automated test — if a file stopped matching what this page claims, the build would fail. Two inherited fixtures were repaired this way before publication: three IBANs failed the mod-97 check and several names used characters outside the basic SEPA character set.
UBL invoice (Peppol BIS 3.0)
- UBL Invoice — valid Peppol BIS 3.0
- UBL Credit Note — valid Peppol BIS 3.0
- UBL Invoice — BR-CO-10 violation
- UBL Invoice — malformed seller VAT identifier
- UBL Invoice — reverse charge (VAT category AE)
- UBL Invoice — VAT exempt (category E) with exemption reason
- UBL Invoice — intra-Community supply (VAT category K)
- UBL Invoice — two VAT rates, one breakdown per rate
- UBL Invoice — BR-CO-10, line sum does not equal BT-106
- UBL Invoice — exempt VAT without an exemption reason (BR-E-10) and a wrong exempt base (BR-E-08)
- UBL Invoice — BR-CO-17, VAT amount does not equal base x rate