AttestwireRule referenceBR-AG-07

BR-AG-07 A Ceuta and Melilla IPSI charge must state a rate of zero or more

noun · EN 16931 · fatal · BT-103

For a sample invoice, the library reports: 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.

Business term
BT-103
Severity
fatal

The 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.

A passing value

the shape this field expects
"vatCategory": "M", "vatRate": 10

What the library returns

The full error returned by @attestwire/en16931. It includes the rule ID, affected field and suggested correction. Developers can use this object in their application:

TeachingError
{
  "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 is always a UBL path. On a CII invoice, look for the matching CII field instead.