Error codes · Peppol BIS 3.0
Document must not contain empty elements
This is the rejection, word for word: „[PEPPOL-EN16931-R008] PEPPOL-EN16931-R008 fires when your invoice XML contains empty elements — tags with no text content and no children. Peppol requires that if an element is present, it must have a value. This is one of the most frequent Peppol errors because many ERP systems emit optional fields as empty tags rather than omitting them entirely.“
The Peppol Schematron rule PEPPOL-EN16931-R008 asserts not(*[not(node())]) on every element in the document, effectively rejecting any element that has neither text content nor child elements. Self-closing tags like <cbc:Note/> and open/close pairs like <cbc:OrderReference></cbc:OrderReference> both count as empty. Whitespace-only content (spaces, tabs, newlines) also fails because Schematron treats normalize-space() as empty. The rule fires per empty element, so a single invoice can produce many R008 messages.
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:ID>INV-2026-0842</cbc:ID>
<cbc:IssueDate>2026-08-12</cbc:IssueDate>
<cbc:Note/>
<cbc:BuyerReference></cbc:BuyerReference>
<cac:OrderReference>
<cbc:ID/>
</cac:OrderReference>
<cbc:AccountingCost> </cbc:AccountingCost>
</Invoice><Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:ID>INV-2026-0842</cbc:ID>
<cbc:IssueDate>2026-08-12</cbc:IssueDate>
<cbc:BuyerReference>CC-2410-DE-04</cbc:BuyerReference>
<cac:OrderReference>
<cbc:ID>PO-2026-000442</cbc:ID>
</cac:OrderReference>
<!-- empty cbc:Note and cbc:AccountingCost removed -->
</Invoice>