What BR-IC-12 checks
BR-IC-12 requires that an invoice containing a VAT breakdown (BG-23) with category code K, Intra-community supply, state the destination of the goods: the deliver-to country code (BT-80) must not be blank. The code sits in the deliver-to address (BG-15) inside the delivery information group (BG-13). In UBL that is cac:Delivery/cac:DeliveryLocation/cac:Address/cac:Country/cbc:IdentificationCode; in CII it is ram:ShipToTradeAddress/ram:CountryID.
Layer and formats
The rule fires in the en16931 core layer for every syntax and profile. It is the counterpart of BR-IC-11: one rule pins down when the supply happened, this one pins down where it went. Both trigger on the mere presence of a K breakdown group, independent of any amounts.
Why it fails in practice
- No delivery block at all. The export writes seller, buyer and lines but never emits BG-13, because domestic invoices validate fine without it.
- Delivery address without a country. Street and city are mapped from the shipping address, but the country field of the source record is empty or not exported.
- The buyer address is assumed to cover it. The buyer's country (BT-55) is present, and the integration assumes that satisfies the rule; BR-IC-12 reads only BT-80.
How to fix it
Emit the deliver-to address with its country code:
<cac:Delivery>
<cac:DeliveryLocation>
<cac:Address>
<cac:Country>
<cbc:IdentificationCode>FR</cbc:IdentificationCode>
</cac:Country>
</cac:Address>
</cac:DeliveryLocation>
</cac:Delivery>
In an InvoiceXML create request the field is invoice.delivery.deliveryAddress.country, an ISO 3166-1 alpha-2 code. Set it whenever a line or breakdown uses VAT category K.
The raw rejection vs the InvoiceXML finding
The Schematron report quotes the rule prose:
<svrl:failed-assert id="BR-IC-12" flag="fatal"
location="/*:Invoice[namespace-uri()='...']/cac:TaxTotal[1]/cac:TaxSubtotal[1]">
<svrl:text>[BR-IC-12]-In an Invoice with a VAT breakdown (BG-23) where the
VAT category code (BT-118) is "Intra-community supply" the Deliver to
country code (BT-80) shall not be blank.</svrl:text>
</svrl:failed-assert>
The InvoiceXML finding for the same failure:
{
"rule": "BR-IC-12",
"layer": "en16931",
"line": null,
"message": "An invoice with an Intra-community supply VAT breakdown must state where the goods were delivered. Add the deliver-to country code.",
"btCodes": ["BT-80"],
"fields": ["delivery.deliveryAddress.country"],
"raw": "[BR-IC-12] EN16931: In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is \"Intra-community supply\" the Deliver to country code (BT-80) shall not be blank."
}
The message names the missing field in plain terms, and fields points at the exact request path, three levels deep, that a form should highlight.
Check or generate intra-community invoices
Validate a document in the UBL validator or the XRechnung validator to see the whole category K package at once. Generating via POST /v1/create/ubl or POST /v1/create/facturx validates every document against the full rule set before delivery. The VAT category model is part of EN 16931 explained.
Related rules
- BR-IC-11, the delivery date or invoicing period requirement of the same K package
- BR-IC-02 and BR-IC-03, the seller and buyer VAT identifier requirements for intra-community supplies
- BR-IC-05, BR-IC-08 and BR-IC-10, the 0% rate, zero tax amount and exemption reason constraints
- BR-E-10, the exemption reason requirement of the exempt category