Rapprocher la base imposable de la catégorie O

Avertissement BR-FXEXT-O-08ini Factur-X

[BR-FXEXT-O-08ini] - Dans une ventilation de la TVA (BG-23) où le code de catégorie de TVA (BT-118) est égal à « O » (« Non soumis à la TVA »), Valeur absolue de (montant taxable de la catégorie de TVA (BT-116) - ∑ montants nets des lignes de facture (BT-131) + Σ montants des remises au niveau du document (BT-92) - Σ montants des charges ou frais au niveau du document (BT-99) - Σ montants des frais de service logistique (BT-x-272)) <= 0,01 * ((Nombre de montants nets des lignes de facture (BT-131) + Nombre de montants des remises au niveau du document (BT-92) + Nombre de montants des charges ou frais au niveau du document (BT-99) + Nombre de montants des frais de service logistique (BT-X-272)), où le code de catégorie de TVA (BT-151, BT-95, BT-102, BT-X-273) est « Non soumis à la TVA » (O), mais uniquement pour les lignes pour lesquelles le « Sous-type de la ligne de facture » (BT-X-8) a la valeur « DETAIL » ou n’est pas spécifié.

Recommandation : la facture reste valide, mais devrait être corrigée afin de pouvoir être traitée automatiquement.
Ce qui ne va pas

Le montant ram:BasisAmount diffère au-delà de la tolérance de la somme des montants associés aux lignes de facture, remises, majorations et services logistiques. Le rapprochement utilise les montants de catégorie O ; les lignes de facture dont ram:LineStatusReasonCode est différent de DETAIL sont exclues.

Ce que signifie la règle

La base imposable des montants non soumis à la TVA doit être calculée à partir des montants de catégorie O. La règle tolère un écart d’arrondi de 0,01 par montant pris en compte.

Veuillez rapprocher la base imposable de la catégorie `O`

La base imposable de la ventilation de TVA O ne correspond pas suffisamment aux montants associés de catégorie O. Vérifiez les lignes de facture ainsi que les remises, majorations et montants logistiques au niveau du document.

Que faire ?
  1. Comparez ram:BasisAmount aux montants des lignes de facture, remises, majorations et montants logistiques de catégorie O.
  2. Vérifiez TaxCategoryCodes, TradeLineItem.LineTotalAmount et AbstractTradeAllowanceCharge.ActualAmount.
  3. Vérifiez que AssociatedDocument.LineStatusReasonCode ou LineStatusReasonCodes vaut DETAIL ou est absent.
  4. Générez de nouveau la facture et vérifiez-la à nouveau.
À vérifier dans FactoorSharp
  • TaxCategoryCodes (BT-151; BT-95; BT-102; BT-118)
  • AbstractTradeAllowanceCharge.ActualAmount (Document level allowance: BT-92; Document level charge: BT-99)
  • AssociatedDocument.LineStatusReasonCode (BT-X-8)
  • LineStatusReasonCodes (BT-X-8)
  • TradeLineItem.LineTotalAmount (BT-131)
Détails techniques

Additionne les montants de catégorie O sans filtrer selon les motifs d’exonération et compare le résultat à ram:BasisAmount. L’écart autorisé est de 0,01 par montant pris en compte.

Où la règle s'applique

La règle s’applique à la ventilation de TVA ram:ApplicableTradeTax de catégorie O dans ram:ApplicableHeaderTradeSettlement.

Message d'origine du Schematron
[BR-FXEXT-O-08ini] - In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “O” ("Not subject to VAT"), Absolute Value of (VAT category taxable amount (BT-116) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99) - Σ Logistics Service fee amounts (BT-x-272)) <= 0,01 * ((Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99) + Number of Logistics Service fee amounts (BT-X-272)), where the VAT category code (BT-151, BT-95, BT-102, BT-X-273) is "Not subject to VAT" (O), but only for lines where the "Subtype of invoice item" (BT-X-8) has the value "DETAIL" or is not specified.
Contexte (rule/@context)
//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='O'][upper-case(ram:TypeCode) = 'VAT']
Expression de contrôle (assert/@test)
( for $exempReasonText in normalize-space(ram:ExemptionReason), $exempReasonCode in normalize-space(ram:ExemptionReasonCode), $basisAmount in xs:decimal(ram:BasisAmount), $calculatedAmountBT131ini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ]/ram:SpecifiedLineTradeSettlement[ram:ApplicableTradeTax/ram:CategoryCode = 'O']/ ram:SpecifiedTradeSettlementLineMonetarySummation/xs:decimal(ram:LineTotalAmount)) * 100) div 100), $allowancesAmountBT92ini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ ram:ChargeIndicator/udt:Indicator=false() and ram:CategoryTradeTax/ram:CategoryCode='O' ]/xs:decimal(ram:ActualAmount)) * 100) div 100), $chargesAmountBT99 in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='S' and normalize-space(ram:CategoryTradeTax/ram:ExemptionReasonCode) = $exempReasonCode and normalize-space(ram:CategoryTradeTax/ram:ExemptionReason) = $exempReasonText ]/xs:decimal(ram:ActualAmount)) * 100) div 100), $chargesAmountBT99ini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ ram:ChargeIndicator/udt:Indicator=true() and ram:CategoryTradeTax/ram:CategoryCode='O' ]/xs:decimal(ram:ActualAmount)) * 100) div 100), $nbLineItemsini in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:IncludedSupplyChainTradeLineItem[ ( not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ) and ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode = 'O' ])), $nbAllowancesOrChargesini in xs:decimal(count(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ram:CategoryTradeTax/ram:CategoryCode='O'])), $logisticChargeAmountini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedLogisticsServiceCharge[ram:AppliedTradeTax/ram:CategoryCode='O']/ xs:decimal(ram:AppliedAmount)) * 100) div 100), $nblogisticChargeini in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge[ram:AppliedTradeTax/ ram:CategoryCode='O'])) return abs($basisAmount - $calculatedAmountBT131ini + $allowancesAmountBT92ini - $chargesAmountBT99ini - $logisticChargeAmountini) le 0.01 * ($nbLineItemsini + $nbAllowancesOrChargesini + $nblogisticChargeini) )