Skip to content

PEPPOL-EN16931-R008: The invoice contains empty elements

Official message

[PEPPOL-EN16931-R008] Document MUST not contain empty elements. (still status warning)

Factur-X / ZUGFeRD EN 16931 · Warning · Message language: English · Version: Factur-X 1.08 / ZUGFeRD 2.4

[PEPPOL-EN16931-R008] Document MUST not contain empty elements.

XRechnung (CII) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[PEPPOL-EN16931-R008] Document MUST not contain empty elements.

XRechnung (UBL) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
Factur-X / ZUGFeRD EN 16931, XRechnung (CII), XRechnung (UBL)

What does this mean?

Document MUST not contain empty elements. At least one element has neither text nor child elements (e.g. an empty ram:Name or an element containing only spaces).
The rule originates from Peppol BIS Billing 3.0. In the XRechnung validation it is an error; in CII only ram:ApplicableHeaderTradeDelivery is exempt there. In the Factur-X/ZUGFeRD validation (EN 16931) it is reported as a warning.

Typical causes

An optional field was output empty instead of being omitted.
A field contains only spaces.
A program outputs all elements of a template, even without a value.

How to fix the error

Locate the empty element in the XML and either fill it with the correct value or omit it completely.
Fill or remove elements that only contain spaces in the same way.
Generate and validate the invoice again.

Example

Wrong

<ram:BuyerTradeParty>
  <ram:Name>Sample Corp</ram:Name>
  <ram:DefinedTradeContact>
    <ram:PersonName></ram:PersonName>
  </ram:DefinedTradeContact>
  ...
</ram:BuyerTradeParty>

Correct

<ram:BuyerTradeParty>
  <ram:Name>Sample Corp</ram:Name>
  ...
</ram:BuyerTradeParty>
For developers: test expression per syntax

Factur-X / ZUGFeRD EN 16931 (CII)

Technical ID in the source: FX-SCH-A-000372

Context: //*[not(*) and not(normalize-space())]

false

XRechnung (CII) (CII)

Context: //*[not(name() = 'ram:ApplicableHeaderTradeDelivery') and not(*) and not(normalize-space())]

false()

XRechnung (UBL) (UBL)

Context: //*[not(*) and not(normalize-space())]

self::cbc:ID[parent::cac:OrderReference]

Related validation rules

Last updated:
Explanation of the validation rule, not legal or tax advice.