On this page
The short answer
BR-30 fails when the cac:InvoicePeriod of an invoice or credit note line has a cbc:EndDate that falls before its cbc:StartDate. Correct the service dates of that line so the start is the first day it covers and the end the last, as in the corrected invoice: 2026-08-01 to 2026-08-15.
The finding names the line, such as cac:InvoiceLine[1]/cac:InvoicePeriod[1], so on a long invoice it tells you exactly which service dates to recheck.
What the rule checks
The rule visits every line period and compares its two dates as calendar dates, but only when both are present. When tried, a line period with only a start date and one with only an end date each passed.
Equal dates are accepted. When tried, a line period starting and ending on 2026-08-15 passed every layer, and moving the end back by one day to 2026-08-14 reported BR-30.
The line is judged on its own two dates. When tried, the reversed line period reported BR-30 just the same after the document-level invoicing period had been removed.
Peppol compares each line date with the document period on its own, and a reversed line period can pass both of those comparisons. When tried, a line period from 2026-09-10 back to 2026-07-20, in an invoicing period for August, reported BR-30 but neither PEPPOL-EN16931-R110 nor PEPPOL-EN16931-R111, because its start is after 1 August and its end before 31 August.
| Term | Meaning | UBL element |
|---|---|---|
| BT-134 | Invoice line period start date | cac:InvoiceLine/cac:InvoicePeriod/cbc:StartDate (cac:CreditNoteLine/cac:InvoicePeriod/cbc:StartDate in a credit note) |
| BT-135 | Invoice line period end date | cac:InvoiceLine/cac:InvoicePeriod/cbc:EndDate (cac:CreditNoteLine/cac:InvoicePeriod/cbc:EndDate in a credit note) |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- The line template maps the start and end values to each other's elements, while the document period is mapped correctly.
- Line dates held as text are read month first when the source writes day first: a line covering 12 July to 3 August, stored as 12/07/2026 and 03/08/2026, becomes 7 December to 8 March.
- A usage or subscription line computes its end date from a start date and a duration, and a cancellation produces a negative duration.
- A reversal line built from an earlier invoice line swaps its dates to show the reversal, instead of keeping the period and negating the quantity.
How to fix it
- Open the line named in the finding and look up the service period it bills in the source record.
- Write the first day of that period to
cbc:StartDateand the last day tocbc:EndDateinside the linecac:InvoicePeriod, both asYYYY-MM-DD. - Parse text dates with an explicit format that matches the source, never with a locale default.
- For a credit or reversal, keep the period in its natural order and let the negative quantity or amount express the reversal.
- Recheck the line against the document period: its start must not precede it (
PEPPOL-EN16931-R110) and its end must not go beyond it (PEPPOL-EN16931-R111).
Validate your corrected invoice
Before and after
These are fragments, not complete documents. The complete synthetic documents they come from are linked below.
Fragment of the failing invoice: line 1 runs from 15 August back to 1 August
<cac:InvoicePeriod>
<cbc:StartDate>2026-08-01</cbc:StartDate>
<cbc:EndDate>2026-08-31</cbc:EndDate>
</cac:InvoicePeriod>
<!-- parties, VAT and totals omitted from this fragment -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<!-- quantity and line net amount omitted from this fragment -->
<cac:InvoicePeriod>
<cbc:StartDate>2026-08-15</cbc:StartDate>
<cbc:EndDate>2026-08-01</cbc:EndDate>
</cac:InvoicePeriod>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>Fragment of the corrected invoice: line 1 covers 1 to 15 August
<cac:InvoicePeriod>
<cbc:StartDate>2026-08-01</cbc:StartDate>
<cbc:EndDate>2026-08-31</cbc:EndDate>
</cac:InvoicePeriod>
<!-- parties, VAT and totals omitted from this fragment -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<!-- quantity and line net amount omitted from this fragment -->
<cac:InvoicePeriod>
<cbc:StartDate>2026-08-01</cbc:StartDate>
<cbc:EndDate>2026-08-15</cbc:EndDate>
</cac:InvoicePeriod>
<!-- item and price omitted from this fragment -->
</cac:InvoiceLine>The two line dates have swapped places: 2026-08-15 to 2026-08-01 in the failing invoice, 2026-08-01 to 2026-08-15 in the corrected one. The document period for August is the same in both, and BR-30 is the only finding; each line date on its own still lies inside that period, so the Peppol line period rules have nothing to report.
What the validator reported
- The failing invoice reports BR-30. 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
InvoiceandCreditNote. In a credit note the line iscac:CreditNoteLine, with its period element still namedcac:InvoicePeriod; when tried, a reversed period there reportedBR-30atcac:CreditNoteLine[1]/cac:InvoicePeriod[1]. - An EN 16931 rule, reported in that layer only.
- The document-level period has its own rule for the same comparison,
BR-29. - A line date with a time zone, such as
2026-08-15Z, passes the XSD and is rejected byPEPPOL-EN16931-F001. When tried with both reversed dates suffixed that way,BR-30and twoPEPPOL-EN16931-F001findings were reported.
Related rules
- BR-29 makes the same comparison for the invoicing period of the whole document
- BR-CO-20 rejects a line period with no dates at all, the case this rule does not look at
- PEPPOL-EN16931-R110 rejects a line period that starts before the invoicing period
- PEPPOL-EN16931-R111 rejects a line period that ends after the invoicing period
- Browse every rule in the reference
- Background: Understanding EN 16931 validation errors
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-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.
The official definition of BR-30 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.

