HomeError code lexicon › BR-29
BR-29 Field BT-74 EN 16931 core rules (BR)

Fix BR-29: Invoicing period end date is before the start date

[BR-29] If both Invoicing period start date (BT-73) and Invoicing period end date (BT-74) are given then the Invoicing period end date (BT-74) shall be later or equal to the Invoicing period start date (BT-73)

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

What does BR-29 mean?

If the invoice carries both an invoicing period start date (BT-73) and an invoicing period end date (BT-74), the end must be the same as or later than the start. Both dates sit in ram:BillingSpecifiedPeriod as udt:DateTimeString in format 102 (YYYYMMDD). The rule only applies when both dates are set.

Common causes of BR-29

How to fix BR-29

  1. Find the faulty spot in the XML. Open the XML of the invoice and go to field BT-74 along this XPath://rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString
  2. Apply the fix. Correct ram:EndDateTime (BT-74) in ram:BillingSpecifiedPeriod so that it is the same as or later than ram:StartDateTime (BT-73). Both values in format 102 (YYYYMMDD), for example 20260430.
  3. Validate again. Save the file and validate it again to check that BR-29 is no longer reported.
Concrete fix

Correct ram:EndDateTime (BT-74) in ram:BillingSpecifiedPeriod so that it is the same as or later than ram:StartDateTime (BT-73). Both values in format 102 (YYYYMMDD), for example <udt:DateTimeString format="102">20260430</udt:DateTimeString>.

XPath//rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/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: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>
Correct
<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>

Frequent questions about BR-29

May the end be the same as the start?
Yes. A period of a single day is allowed, start and end date may be equal. Only an end before the start is invalid.
Which format do the dates use?
As udt:DateTimeString with format='102', that is YYYYMMDD without separators, for example 20260430.
What if I only have one date?
Then the rule does not apply. It only checks the case where start (BT-73) and end (BT-74) are both set.

Related error codes

Check BR-29 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