The short answer
BR-25 fails for a line whose cac:Item/cbc:Name is missing or empty. Put a short name for what was sold on every line.
The finding location points at the offending line, for example cac:InvoiceLine[2], and there is one finding for each line that lacks a name.
What the rule checks
The rule runs once for every cac:InvoiceLine or cac:CreditNoteLine and fails when the cbc:Name directly inside that line's cac:Item is absent or contains only whitespace. Two unnamed lines in one document give two findings.
cbc:Description is not an alternative. A line whose item has a description and no name still fails.
Missing versus empty: cac:Item itself is mandatory in the UBL schema, and a line without it is rejected by the XSD layer before any business rule runs. The cbc:Name inside it is optional in the schema, so a line that has an item without a name passes the XSD and reports BR-25 alone. With the name present but empty, as in the recorded example, PEPPOL-EN16931-R008 is reported too.
Nothing is checked about the text except that there is some. A name of - passes.
| Term | Meaning | UBL element |
|---|---|---|
| BT-153 | Item name | cac:InvoiceLine/cac:Item/cbc:Name |
| BG-25 | Invoice line | cac:InvoiceLine |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- Free-text lines such as carriage, a fee or a manual adjustment have an amount and no product behind them, so there is no product name to copy.
- The product was deleted or renamed after the sale and the name is looked up live rather than stored on the invoice line.
- The source system keeps a single long text per line and the mapping sends it to
cbc:Description, leavingcbc:Nameout. - Names are translated per customer language and the translation for this language is blank.
How to fix it
- Use the finding location to identify which lines fail.
- For product lines, map the product name as stored on the invoice line at the time of sale to
cac:Item/cbc:Name. - For lines with no product, write a short label of what the line is for. If the source has only one long text, put a sensible short form in
cbc:Nameand keep the full text incbc:Description. - In the XML,
cbc:Descriptioncomes beforecbc:Nameinsidecac:Item. Keep that order when adding the element, or the XSD layer will reject the line.
Validate your corrected invoice
Before and after
These are fragments, not complete documents. The complete synthetic documents they come from are linked below.
Line of the failing invoice: the item has an empty name
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name></cbc:Name>
<!-- tax category omitted from this fragment -->
</cac:Item>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>Line of the corrected invoice: the item is named
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="GBP">25.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Example service</cbc:Name>
<!-- tax category omitted from this fragment -->
</cac:Item>
<!-- price omitted from this fragment -->
</cac:InvoiceLine>Only cac:Item/cbc:Name on line 1 differs: empty in the failing invoice, Example service in the corrected one. The failing document also reports PEPPOL-EN16931-R008, located at the same cbc:Name, because Peppol rejects elements that carry no content. Writing the name clears both.
What the validator reported
- The failing invoice reports BR-25 and PEPPOL-EN16931-R008. The corrected document passes every layer with no findings.Download the failing XMLDownload the corrected XML
Recorded on phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, the engine behind the free validator, using synthetic data. A recorded result is regression evidence for these documents; it is not a certification.
Where it applies
- Applies to
cac:InvoiceLinein a UBLInvoiceand tocac:CreditNoteLinein aCreditNote. Thecac:Itemstructure is the same in both, and a credit note line with an empty or missing name behaves exactly as described above. - The rule is about the line item only. Names elsewhere in the document, such as party or contact names, use the same
cbc:Nameelement and are not read by it.
Related rules
- PEPPOL-EN16931-R008 is reported at the same element when the name is present but empty
- BR-27 checks the item net price on the same line
- BR-CL-23 checks the unit code of the line quantity
- PEPPOL-EN16931-R120 checks the line net amount against quantity and price
- Browse every rule in the reference
Scope and source
Written for Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, as applied to UBL 2.1 Invoice and CreditNote documents. Other profiles, syntaxes and releases can define this identifier differently. Guidance version 2026-09-20.1: source checked 2026-09-20, explanation last updated 2026-09-20.
The official definition of BR-25 carries the normative wording and test. This page is our explanation of it, not a copy.
Guidance does not change the engine verdict. Fixing this finding does not mean the document passes every layer, and validation does not certify legal or tax compliance or transmit a document over Peppol.
