What it means
The rule checks every cac:Price/cac:AllowanceCharge on invoice and credit note lines for cbc:PerUnitAmount. The price discount amount (BT-147) and price before the discount (BT-148) are separate fields. This check does not test their calculation.
Why it matters
EN 16931 represents the price discount through BT-147, not an additional PerUnitAmount element.
How to fix it
Remove cbc:PerUnitAmount from cac:AllowanceCharge inside cac:Price in each affected cac:InvoiceLine or cac:CreditNoteLine. If you use a price discount, check that the price before the discount (BT-148) minus the discount amount (BT-147) equals the unit price after the discount (BT-146). These prices exclude VAT. Export the corrected file and recheck it.
Once the file is corrected, check it again for free: Validate an invoice against EN 16931
Or fix the invoice in a form and download the corrected file, for 1 credit: Fix a rejected e-invoice
The rule as published
A UBL invoice should not include the InvoiceLine Item Price AllowanceCharge PerUnitAmount Where this rule applies
| Rule set | Version |
|---|---|
| EN 16931 (UBL) | 1.3.17 |
| EN 16931 (UBL credit note) | 1.3.17 |
| XRechnung 3.0 (UBL) | 3.0.2 |
| XRechnung 3.0 (UBL credit note) | 3.0.2 |
| Peppol BIS Billing 3.0 (invoice) | 2026.5 |
| Peppol BIS Billing 3.0 (credit note) | 2026.5 |
| SI-UBL 2.0 / NLCIUS (invoice) | 2.0.3.13 |
| SI-UBL 2.0 / NLCIUS (credit note) | 2.0.3.13 |
| France CTC (UBL invoice) | 1.4.0-04 |
| France CTC (UBL credit note) | 1.4.0-04 |
| CIUS-RO UBL Invoice 1.0.9 | 1.0.9 |
| CIUS-RO UBL Credit Note 1.0.9 | 1.0.9 |
Check your file
Drop your e-invoice to see whether UBL-CR-640 still fails, and which other rules do.
Related rules
- UBL-CR-641 A VAT category does not belong on a discount inside the line price
- UBL-CR-642 A VAT total does not belong on a discount inside the line price
- UBL-CR-643 Payment means do not belong on a discount inside the line price
- UBL-CR-644 A line price should not carry an exchange rate
- UBL-CR-645 Lines should not have their own delivery terms
- UBL-CR-646 Lines should not contain SubInvoiceLine blocks