What does BR-CO-19 mean?
If an invoicing period is used, the start or the end date must be set. That way the period is defined.
Common causes of BR-CO-19
- The period group 'ram:BillingSpecifiedPeriod' was created but without start and end date.
- The date was written into the wrong element instead of 'ram:StartDateTime' or 'ram:EndDateTime'.
- An empty period element was left over from the export.
How to fix BR-CO-19
- Find the faulty spot in the XML. Open the XML of the invoice and go to field BG-14 along this XPath:
//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod - Apply the fix. If the invoicing period (BG-14, 'ram:BillingSpecifiedPeriod' in the header) is used, at least the start date (BT-73, 'ram:StartDateTime') or the end date (BT-74, 'ram:EndDateTime') must be filled. Add one of the two dates or remove the empty period group altogether.
- Validate again. Save the file and validate it again to check that BR-CO-19 is no longer reported.
If the invoicing period (BG-14, 'ram:BillingSpecifiedPeriod' in the header) is used, at least the start date (BT-73, 'ram:StartDateTime') or the end date (BT-74, 'ram:EndDateTime') must be filled. Add one of the two dates or remove the empty period group altogether.
//ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriodBefore / after: the XML example
This is the spot in question before and after the fix (Cross Industry Invoice, ZUGFeRD/Factur-X).
<ram:BillingSpecifiedPeriod>
</ram:BillingSpecifiedPeriod>
<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-CO-19
Do I have to state both start and end date?
What is the date format in CII?
Related error codes
Check BR-CO-19 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.