BR-AG-07 The document level charge at charges[0] uses VAT category M (Tax on production, services and imports in Ceuta and Melilla (IPSI)), so its VAT rate (BT-103) must be 0 (zero) or greater than zero, but it is missing
The document level charge at charges[0] uses VAT category M (Tax on production, services and imports in Ceuta and Melilla (IPSI)), so its VAT rate (BT-103) must be 0 (zero) or greater than zero, but it is missing. IPSI is charged, so the adjustment carries a rate, and that rate may be 0 as well as positive — the Ceuta and Melilla tariffs include a zero band. An absent rate would leave the adjustment untethered from the tax the document says applies to it.
This rule is implemented and its error payload below is real, but the long-form write-up — normative text, worked example, divergence note — is not written yet. Everything the library knows about this rule is on this page. Ask and we will prioritise it.
- Business term
BT-103- Severity
fatal
What the library returns
The exact object in result.errors when this rule fires.
Generated by running @attestwire/en16931, not transcribed:
{
"rule": "BR-AG-07",
"field": "BT-103",
"severity": "fatal",
"message": "The document level charge at charges[0] uses VAT category M (Tax on production, services and imports in Ceuta and Melilla (IPSI)), so its VAT rate (BT-103) must be 0 (zero) or greater than zero, but it is missing. IPSI is charged, so the adjustment carries a rate, and that rate may be 0 as well as positive — the Ceuta and Melilla tariffs include a zero band. An absent rate would leave the adjustment untethered from the tax the document says applies to it.",
"fix": "Set charges[0].vatRate to the IPSI percentage the adjusted supply bears, as a number. Zero is a legal value here — unlike category S — but the term must be present, because a missing rate and a rate of zero are different claims about a tax that is genuinely levied.",
"example": "\"vatCategory\": \"M\", \"vatRate\": 10",
"xpath": "/ubl:Invoice/cac:AllowanceCharge[3]/cac:TaxCategory/cbc:Percent",
"docsUrl": "https://attestwire.com/rules/BR-AG-07"
}
xpath locates the element in the generated UBL document,
which is where a KoSIT or Peppol validator will report the same problem.
A passing value
"vatCategory": "M", "vatRate": 10The fix
Set charges[0].vatRate to the IPSI percentage the adjusted supply bears, as a number. Zero is a legal value here — unlike category S — but the term must be present, because a missing rate and a rate of zero are different claims about a tax that is genuinely levied.