Tax amount must be zero for VAT category Z

Error BR-Z-09 EN 16931

The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Zero rated" shall equal 0 (zero).

Mandatory rule: As long as it is violated, the invoice is invalid and will be rejected by validators.
What is wrong

The VAT breakdown is marked with VAT category code Z, but ram:CalculatedAmount is not equal to zero.

What the rule means

For VAT category Z, the reported tax amount must be zero.

Affected fields BT-117 BG-23 BT-118
Please set the tax amount for category `Z` to zero

The invoice reports a non-zero tax amount for VAT category Z. The amount can be aligned with the category.

What to do
  1. Find the VAT breakdown with ram:CategoryCode equal to Z.
  2. Check its corresponding ram:CalculatedAmount value.
  3. Set the tax amount to zero.
  4. Generate the invoice again and validate it again.
What it looks like
✗ Triggers the message
<ram:ApplicableTradeTax>
  <ram:CalculatedAmount>10.00</ram:CalculatedAmount>
  <ram:CategoryCode>Z</ram:CategoryCode>
</ram:ApplicableTradeTax>
✓ Correct
<ram:ApplicableTradeTax>
  <ram:CalculatedAmount>0.00</ram:CalculatedAmount>
  <ram:CategoryCode>Z</ram:CategoryCode>
</ram:ApplicableTradeTax>
Check in FactoorSharp
  • TaxCategoryCodes (BT-118)
  • FacturXInvoice.AddApplicableTradeTax(basisAmount, percent, taxAmount, typeCode, categoryCode, allowanceChargeBasisAmount, exemptionReasonCode, exemptionReason, lineTotalBasisAmount) (BG-23)
  • FacturXInvoice.AnyApplicableTradeTaxes() (BG-23)
  • FacturXInvoice.GetApplicableTradeTaxes() (BG-23)
  • FacturXInvoice.Taxes (BG-23)
Technical details

For ram:ApplicableTradeTax with ram:CategoryCode equal to Z, the test checks whether the parent ram:CalculatedAmount is numerically zero.

Where the rule applies

The rule applies to ram:CalculatedAmount in a VAT breakdown ram:ApplicableTradeTax whose ram:CategoryCode has the value Z.

Context (rule/@context)
//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode[. = 'Z']
Test expression (assert/@test)
../ram:CalculatedAmount = 0