Official rule text
[PEPPOL-EN16931-R008] Document MUST not contain empty elements.
Why this error occurs
Peppol forbids elements that have neither child elements nor text content, because an empty element is ambiguous (is the value missing or intentionally blank?) and breaks downstream processing. The rule flags every element matching //*[not(*) and not(normalize-space())], in CII with an exception for ram:ApplicableHeaderTradeDelivery, which may be empty. Empty elements almost always come from templates that emit every optional tag and fill it only when data exists, e.g. <cbc:Note/>, <cbc:Telephone></cbc:Telephone> or an empty <cac:Delivery/>.
How to fix it
Generate optional elements only when you have a value: wrap each optional tag in a condition in your template or serialiser. Remove whitespace-only values, as they count as empty. Check containers too: a <cac:Contact/> with no children or a <cac:PartyIdentification><cbc:ID/></cac:PartyIdentification> both fail. Run the output through the validator again, since removing one empty child can leave an empty parent.
Example (valid)
<cac:Contact>
<cbc:Name>Accounts receivable</cbc:Name>
<cbc:ElectronicMail>invoice@muster-gmbh.de</cbc:ElectronicMail>
</cac:Contact>
What the validator checks
Checked element (context):
UBL
//*[not(*) and not(normalize-space())]Test (XPath):
false()CII
//*[not(name() = 'ram:ApplicableHeaderTradeDelivery') and not(*) and not(normalize-space())]Test (XPath):
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-R010Buyer electronic address (BT-49) is missing
Frequently asked questions
What does PEPPOL-EN16931-R008 mean?
PEPPOL-EN16931-R008 is a peppol bis billing 3.0 rule: Document MUST not contain empty elements.
Will my invoice be rejected because of PEPPOL-EN16931-R008?
Yes. PEPPOL-EN16931-R008 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-R008 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.