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
- Start date and end date were swapped.
- A typo in the day, month or year of one of the two entries.
- A wrong date format, so the values cannot be compared as dates.
- The end set to the previous day instead of the end of the period.
How to fix BR-30
- 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 - 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.
- Validate again. Save the file and validate it again to check that BR-30 is no longer reported.
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.
//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeStringBefore / after: the XML example
This is the spot in question before and after the fix (Cross Industry Invoice, ZUGFeRD/Factur-X).
<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>
<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?
Do I have to give a period for every line?
Which format do the dates need?
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.