Skip to content

BR-CO – Conditions and calculations

BR-CO-03: VAT point date (BT-7) and date code (BT-8) both given

ErrorEN 16931 business rule (CEN)

Official message

[BR-CO-03]-Value added tax point date (BT-7) and Value added tax point date code (BT-8) are mutually exclusive.

Source: CEN EN 16931, version 1.3.16

How to fix it

Remove one of the two: in UBL either cbc:TaxPointDate or cbc:DescriptionCode under cac:InvoicePeriod, in CII either ram:TaxPointDate or ram:DueDateTypeCode in the ApplicableTradeTax. A concrete date is usually the clearer choice.

Before – invalid
<cbc:TaxPointDate>2026-02-27</cbc:TaxPointDate>
<cac:InvoicePeriod>
  <cbc:DescriptionCode>35</cbc:DescriptionCode>
</cac:InvoicePeriod>
After – corrected
<cbc:TaxPointDate>2026-02-27</cbc:TaxPointDate>

What the message means

Your invoice states when the VAT becomes chargeable, and does so twice: as a concrete date and as a code that derives the date from the delivery or invoice date. The norm EN 16931 allows only one of the two, because they could contradict each other. The error usually arises when a template always writes the code and the software fills in the date as well. Keep the detail your case really needs and remove the other.

Common causes

  • The template hard-codes the code 35 or 432 while the date comes from the order data.
  • A mapping fills both fields from the same source.
  • The tax point date was added afterwards without deleting the code.

Frequently asked

What do the codes 3, 35 and 432 mean?

3 stands for the invoice date, 35 for the delivery date and 432 for the receipt of payment as the time VAT becomes chargeable, per code list UNTDID 2005.

Do I need either of the two at all?

No, both are optional. In Germany the delivery date is usually enough; the tax point date is only needed when VAT becomes chargeable at another time.

Fields concerned

  • BT-7
  • BT-8

Related rules

Check your invoice

The EN 16931 validator reports this rule with the line number and location – right in your browser, without upload.

Open the EN 16931 validator

Technical details
UBL · Context (XPath)
/ubl:Invoice | /cn:CreditNote
UBL · Schematron test
(exists(cbc:TaxPointDate) and not(cac:InvoicePeriod/cbc:DescriptionCode)) or (not(cbc:TaxPointDate) and exists(cac:InvoicePeriod/cbc:DescriptionCode)) or (not(cbc:TaxPointDate) and not(cac:InvoicePeriod/cbc:DescriptionCode))
CII · Context (XPath)
//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax
CII · Schematron test
((//ram:TaxPointDate) and not(//ram:DueDateTypeCode)) or (not (//ram:TaxPointDate) and (//ram:DueDateTypeCode)) or (not (//ram:TaxPointDate) and not (//ram:DueDateTypeCode))

Explanation written on 14 September 2026