# PEPPOL-EN16931-R007: Use an approved business process identifier

`cbc:ProfileID` must name a business process the Peppol rules recognise; for Billing, `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0`, not a version.

- Layer: Peppol BIS Billing
- Severity: fatal (the document is invalid)
- Topics: Process and references
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R007/
- Explanation last updated: 2026-09-24

## The short answer

`PEPPOL-EN16931-R007` fails when the text of `cbc:ProfileID` is not one of the business process identifiers built into the Peppol rules. For Peppol BIS Billing, write `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0` exactly.

The recorded example wrote `urn:fdc:peppol.eu:2017:poacc:billing:3.0`, which is the tail of the specification identifier in `cbc:CustomizationID`, not a process. The two elements carry different values, and neither can stand in for the other.

## What the rule checks

The Peppol rules derive a profile from `cbc:ProfileID` under the root. After trimming surrounding whitespace, the value must equal one of four identifiers: `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0`, `urn:peppol:bis:billing_with_response`, `urn:peppol:france:billing:regulated` or `urn:peppol:france:billing:non-regulated`. Anything else counts as unknown, and unknown fails.

The comparison is exact and case-sensitive, with no prefix matching. When tried, the Billing identifier in upper case, the same identifier with extra text after it, the BIS 2 identifier `urn:www.cenbii.eu:profile:bii04:ver2.0`, the self-billing identifier and the full specification identifier were all reported.

A missing `cbc:ProfileID` also counts as unknown, so it reports this rule beside `PEPPOL-EN16931-R001`. An empty one reports this rule beside `PEPPOL-EN16931-R008`.

Other rules depend on the result. The Peppol type code checks `PEPPOL-EN16931-P0100` and `PEPPOL-EN16931-P0101` run only for a recognised process, so they stay silent while this rule fails.

| Term | Meaning | UBL element |
|---|---|---|
| BT-23 | Business process type | `cbc:ProfileID` |

## How an integration ends up here

Possible causes, from the shape of the rule rather than from measured usage:

- The specification version (`billing:3.0`) was taken for the process identifier and used in both header elements.
- The identifier was retyped with a change of case or an added suffix.
- A configuration carried over from Peppol BIS 2 still sends the BIS 2 profile identifier.
- The value of `cbc:CustomizationID` was copied into `cbc:ProfileID`.

## How to fix it

1. Set `cbc:ProfileID` to `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0` for Peppol BIS Billing invoices and credit notes, copied rather than retyped.
2. Use one of the other recognised identifiers only if the exchange you are part of calls for it; each names a different arrangement, not a version of the same one.
3. Leave `cbc:CustomizationID` as the specification identifier, `urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0`. It plays no part in this rule.
4. Validate again after the fix: a type code outside the Peppol list is reported only once the process is recognised.

## Before and after

These are fragments, not complete documents. The complete synthetic documents they come from are linked below.

Fragment of the failing invoice: the business process element holds the specification version

```xml
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:ProfileID>
<cbc:ID>EXAMPLE-INV-001</cbc:ID>
<!-- rest of the document omitted from this fragment -->
```

Fragment of the corrected invoice: the Peppol BIS Billing process identifier

```xml
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>EXAMPLE-INV-001</cbc:ID>
<!-- rest of the document omitted from this fragment -->
```

Only `cbc:ProfileID` differs: `urn:fdc:peppol.eu:2017:poacc:billing:3.0` in the failing invoice and `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0` in the corrected one. The failing document reports only `PEPPOL-EN16931-R007`, located at the document root. EN 16931 does not constrain the business process value, so that layer passes.

### What the validator reported

- The failing invoice reports **PEPPOL-EN16931-R007**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/PEPPOL-EN16931-R007-invalid.xml)
  - [Download the corrected XML](https://ironfang.uk/finance/rule-examples/invoice-minimal.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 UBL `Invoice` and `CreditNote` alike; a credit note with the same wrong value reported this rule when tried.
- This is a Peppol rule. The set of recognised identifiers belongs to the pinned Peppol release and can change from one release to the next.
- A self-billing process identifier is rejected by these Billing rules. A self-billed document belongs to the Peppol self-billing specification; relabelling its process identifier does not make it a Billing document.

## Related rules

- [PEPPOL-EN16931-R001 reports a business process element that is missing, and fires with this rule](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R001.md)
- [PEPPOL-EN16931-R004 checks the specification identifier that is easily confused with this one](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R004.md)
- [PEPPOL-EN16931-P0100 checks the invoice type code only once this rule passes](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-P0100.md)
- [PEPPOL-EN16931-R008 is reported with this rule when the business process element is empty](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R008.md)

## 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-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.

[The official definition of PEPPOL-EN16931-R007](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R007/) 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.

## Links

- [This rule as a web page](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R007)
- [Free Peppol invoice validator](https://ironfang.uk/tools/peppol-validator)
- [Rule index](https://ironfang.uk/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.uk/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.uk/mcp
