Account
English

PEPPOL-EN16931-R043: ChargeIndicator is not exactly 'true' or 'false'

Peppol BIS Billing 3.0 rule · Error · UBL / CII

StandardPeppol BIS Billing 3.0 (OpenPeppol)SeverityError: the invoice is rejectedSyntaxUBL, CIIApplies toInvoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well.

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:AllowanceCharge

Test (XPath):

normalize-space(cbc:ChargeIndicator/text()) = 'true' or normalize-space(cbc:ChargeIndicator/text()) = 'false'

CII

ram:SpecifiedTradeAllowanceCharge
ram:AppliedTradeAllowanceCharge

Test (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.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

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.