Official rule text
[PEPPOL-EN16931-R043] Allowance/charge ChargeIndicator value MUST equal 'true' or 'false'
Why this error occurs
The charge indicator tells whether an cac:AllowanceCharge is a charge (true) or an allowance (false), and Peppol insists on the literal lowercase values. The rule checks cbc:ChargeIndicator at document and line level (UBL) or ram:ChargeIndicator/udt:Indicator (CII) for exactly true or false. It fails on 1/0, True/FALSE, yes/no or values with whitespace, which usually come from a boolean being serialised with the programming language's default formatting.
How to fix it
Serialise the indicator as the lowercase strings true or false, with no surrounding whitespace. In UBL cbc:ChargeIndicator is the first child of cac:AllowanceCharge; in CII the structure is ram:ChargeIndicator/udt:Indicator. Use true for charges (freight, packaging, fees) and false for allowances (discounts, rebates). Fix the mapping once in the serialiser rather than per document.
Example (valid)
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Freight</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">5.90</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>
What the validator checks
Checked element (context):
UBL
ubl-invoice:Invoice/cac:AllowanceCharge | ubl-invoice:Invoice/cac:InvoiceLine/cac:AllowanceCharge | ubl-creditnote:CreditNote/cac:AllowanceCharge | ubl-creditnote:CreditNote/cac:CreditNoteLine/cac:AllowanceChargeTest (XPath):
normalize-space(cbc:ChargeIndicator/text()) = 'true' or normalize-space(cbc:ChargeIndicator/text()) = 'false'CII
ram:SpecifiedTradeAllowanceCharge
ram:AppliedTradeAllowanceChargeTest (XPath):
normalize-space(ram:ChargeIndicator/udt:Indicator/text()) = 'true' or normalize-space(ram:ChargeIndicator/udt:Indicator/text()) = 'false'
Check your invoice
Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.
Same check via API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validateRelated rules
PEPPOL-EN16931-R001Business process identifier (BT-23) is missingPEPPOL-EN16931-R002No more than one note is allowed on document level, unless both the buyer and seller…PEPPOL-EN16931-R003Neither buyer reference nor purchase order reference givenPEPPOL-EN16931-R004Specification identifier is not the Peppol BIS Billing 3.0 identifierPEPPOL-EN16931-R005VAT accounting currency equals the invoice currencyPEPPOL-EN16931-R006Only one invoiced object is allowed on document levelPEPPOL-EN16931-R007Business process identifier has the wrong formatPEPPOL-EN16931-R008Document contains empty elements
Frequently asked questions
What does PEPPOL-EN16931-R043 mean?
PEPPOL-EN16931-R043 is a peppol bis billing 3.0 rule: Allowance/charge ChargeIndicator value MUST equal 'true' or 'false'
Will my invoice be rejected because of PEPPOL-EN16931-R043?
Yes. PEPPOL-EN16931-R043 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.
Which formats does PEPPOL-EN16931-R043 apply to?
Invoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well. Syntax: UBL and CII.
Source: Peppol BIS Billing 3.0.20 (November 2025). Catalogue generated from the official schematron on 2026-10-14.