Provide an exemption reason for a transaction not subject to VAT

Error BR-O-10 EN 16931

A VAT Breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language).

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

For category O, both ExemptionReason and ExemptionReasonCode are missing. The VAT breakdown must include an appropriate exemption reason as text or as a code.

What the rule means

The exemption reason explains why the VAT breakdown is treated as not subject to VAT. It must be provided either as the exemption reason text BT-120 or as the exemption reason code BT-121.

Affected fields BG-23 BT-118 BT-121 BT-120
Please add the exemption reason for the transaction not subject to VAT

No exemption reason is provided for the VAT breakdown with code O. You can add the reason as text or as a code.

What to do
  1. Add either ExemptionReason or ExemptionReasonCode to the affected ApplicableTradeTax.
  2. Provide the exemption reason for the transaction not subject to VAT.
  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:ApplicableTradeTax>
✓ Correct
<ram:ApplicableTradeTax>
  <ram:CategoryCode>O</ram:CategoryCode>
  <ram:ExemptionReason>Not subject to VAT</ram:ExemptionReason>
</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 CategoryCode O, the XPath checks whether at least one of the child elements ExemptionReason or ExemptionReasonCode is present.

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:ExemptionReason) or (ram:ExemptionReasonCode)