HomeError code lexicon › BR-30
BR-30 Field BT-135 EN 16931 core rules (BR)

Fix BR-30: Invoice line period end date is before the start date

[BR-30] If both Invoice line period start date (BT-134) and Invoice line period end date (BT-135) are given then the Invoice line period end date (BT-135) shall be later or equal to the Invoice line period start date (BT-134)

BR-30 in your own invoice? Upload the file and find every error in seconds.

What does BR-30 mean?

If an invoice line gives both an invoice line period start date (BT-134) and an end date (BT-135), the end date must be the same as the start date or later. The rule only applies when both dates are present. If one of them is missing, BR-30 checks nothing. A period that ends before it begins is impossible and gets rejected.

Common causes of BR-30

How to fix BR-30

  1. Find the faulty spot in the XML. Open the XML of the invoice and go to field BT-135 along this XPath://rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString
  2. Apply the fix. Set a date in ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString (format="102", YYYYMMDD) that is the same as or later than the start date in ram:StartDateTime. Check whether start and end were swapped.
  3. Validate again. Save the file and validate it again to check that BR-30 is no longer reported.
Concrete fix

Set a date in ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString (format="102", YYYYMMDD) that is the same as or later than the start date in ram:StartDateTime. Check whether start and end were swapped.

XPath//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString

Before / after: the XML example

This is the spot in question before and after the fix (Cross Industry Invoice, ZUGFeRD/Factur-X).

Wrong
<ram:SpecifiedLineTradeSettlement>
  <ram:BillingSpecifiedPeriod>
    <ram:StartDateTime>
      <udt:DateTimeString format="102">20260401</udt:DateTimeString>
    </ram:StartDateTime>
    <ram:EndDateTime>
      <udt:DateTimeString format="102">20260331</udt:DateTimeString>
    </ram:EndDateTime>
  </ram:BillingSpecifiedPeriod>
</ram:SpecifiedLineTradeSettlement>
Correct
<ram:SpecifiedLineTradeSettlement>
  <ram:BillingSpecifiedPeriod>
    <ram:StartDateTime>
      <udt:DateTimeString format="102">20260401</udt:DateTimeString>
    </ram:StartDateTime>
    <ram:EndDateTime>
      <udt:DateTimeString format="102">20260430</udt:DateTimeString>
    </ram:EndDateTime>
  </ram:BillingSpecifiedPeriod>
</ram:SpecifiedLineTradeSettlement>

Frequent questions about BR-30

May the end date equal the start date?
Yes. For a period of one day you set start and end to the same value. BR-30 only requires that the end is not before the start.
Do I have to give a period for every line?
No. The invoice line period is optional. But if you give it, the dates must fit together.
Which format do the dates need?
The attribute format="102" stands for YYYYMMDD, so 20260430 for 30 April 2026.

Related error codes

Check BR-30 automatically

Instead of digging through the XML by hand you can validate your ZUGFeRD or XRechnung file online – upload the PDF or the XML and you get every error with rule ID, affected field, fix and XPath, as a readable report or as JSON through the API.

Find every error automatically instead of searching by hand

Upload your ZUGFeRD, Factur-X or XRechnung file – you get every violation back with rule ID, field, fix and XPath.

Validate online for free
Check invoice