VAT amount for a transaction not subject to VAT is zero

Error BR-O-09 EN 16931

The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where the VAT category code (BT-118) is "Not subject to VAT" shall be 0 (zero).

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

In a VAT breakdown with CategoryCode O, the amount in CalculatedAmount is not zero. For this category, the VAT amount BT-117 must be zero.

What the rule means

Code O denotes a transaction not subject to VAT. The corresponding VAT amount in the VAT breakdown must therefore be zero.

Affected fields BT-117 BG-23 BT-118
Please set the VAT amount for the transaction not subject to VAT to zero

The VAT breakdown is marked as not subject to VAT but contains a non-zero tax amount. You can adjust the amount in the invoice.

What to do
  1. Check the CategoryCode and the amount in CalculatedAmount of the affected ApplicableTradeTax.
  2. Set the tax amount for code O to 0.
  3. Check the call to AddApplicableTradeTax(...).
  4. Generate the invoice again and validate it.
What it looks like
✗ Triggers the message
<ram:ApplicableTradeTax>
  <ram:CategoryCode>O</ram:CategoryCode>
  <ram:CalculatedAmount>10</ram:CalculatedAmount>
</ram:ApplicableTradeTax>
✓ Correct
<ram:ApplicableTradeTax>
  <ram:CategoryCode>O</ram:CategoryCode>
  <ram:CalculatedAmount>0</ram:CalculatedAmount>
</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

The rule applies when CategoryCode has the value O and checks whether the child element CalculatedAmount has the numeric value 0.

Where the rule applies

The rule applies to a document-level VAT breakdown ApplicableTradeTax when its CategoryCode is O.

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