Skip to content

BR-25Give every line an item name

Each invoice or credit note line needs a non-empty cac:Item/cbc:Name. It is checked per line, and an item description does not stand in for it.

EN 16931Fatal: the document is invalidCore fieldsLines and prices

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.

TermMeaningUBL element
BT-153Item namecac:InvoiceLine/cac:Item/cbc:Name
BG-25Invoice linecac: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, leaving cbc:Name out.
  • Names are translated per customer language and the translation for this language is blank.

How to fix it

  1. Use the finding location to identify which lines fail.
  2. For product lines, map the product name as stored on the invoice line at the time of sale to cac:Item/cbc:Name.
  3. 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:Name and keep the full text in cbc:Description.
  4. In the XML, cbc:Description comes before cbc:Name inside cac: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

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:InvoiceLine in a UBL Invoice and to cac:CreditNoteLine in a CreditNote. The cac:Item structure 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:Name element and are not read by it.

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.