Rapprocher la base imposable au taux zéro

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

[BR-FXEXT-Z-08ini] - Dans une ventilation de la TVA (BG-23) pour laquelle le code de catégorie de TVA (BT-118) est égal à « Z » (« Taux zéro »), la 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)) doit être <= 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)), lorsque le code de catégorie de TVA (BT-151, BT-95, BT-102, BT-X-273) est « Taux zéro » (Z), 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 de ram:BasisAmount diffère au-delà de la tolérance d’arrondi admise des montants des lignes de facture, remises, charges et frais logistiques correspondants. Le rapprochement inclut les lignes portant DETAIL ou sans motif de statut et regroupe les montants par code de catégorie Z et taux de taxe.

Ce que signifie la règle

La base imposable doit regrouper correctement les valeurs nettes des éléments de facture correspondants au taux zéro. Z désigne ces opérations ; le regroupement par taux identique limite le calcul à la catégorie de taxe correspondante.

Veuillez rapprocher la base imposable pour `Z`

La base imposable au taux zéro ne correspond pas suffisamment aux éléments de facture associés. Ce rapprochement regroupe les montants par taux de taxe et par catégorie.

Que faire ?
  1. Comparez ram:BasisAmount aux montants nets des lignes de facture, remises, charges et frais logistiques concernés.
  2. Vérifiez TradeLineItem.LineTotalAmount et AbstractTradeAllowanceCharge.ActualAmount pour la catégorie Z et le même taux de taxe.
  3. Ne prenez en compte que les lignes portant DETAIL ou sans motif de statut ; le total n’est pas regroupé en plus par motif d’exonération.
  4. Générez de nouveau la facture et vérifiez-la une nouvelle fois.
À 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

Le test totalise les montants par ram:RateApplicablePercent et par catégorie Z, sans utiliser les motifs d’exonération comme critères de regroupement. Les sommes sont arrondies à deux décimales ; l’écart admis est de 0,01 par ligne, remise ou charge, ou frais logistique pris en compte.

Où la règle s'applique

La règle s’applique à chaque ventilation de la TVA au niveau du document dans ram:ApplicableTradeTax, avec le code de catégorie Z et le type de taxe VAT. Elle compare la base imposable aux éléments de facture ayant le même taux de taxe.

Message d'origine du Schematron
[BR-FXEXT-Z-08ini] - In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “Z” ("Zero Rated"), 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 "Zero Rated" (Z), 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='Z'][upper-case(ram:TypeCode) = 'VAT']
Expression de contrôle (assert/@test)
( for $rate in xs:decimal(ram:RateApplicablePercent), $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 = 'Z' and ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate ]/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='Z' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate ]/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 ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate 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='Z' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate ]/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 = 'Z' and ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate ])), $nbAllowancesOrChargesini in xs:decimal(count(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedTradeAllowanceCharge[ ram:CategoryTradeTax/ram:CategoryCode='Z' and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate ])), $logisticChargeAmountini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/ rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedLogisticsServiceCharge[ ram:AppliedTradeTax/ram:CategoryCode='Z' and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate ]/xs:decimal(ram:AppliedAmount)) * 100) div 100), $nblogisticChargeini in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge[ ram:AppliedTradeTax/ram:CategoryCode='Z' and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate ])) return abs($basisAmount - $calculatedAmountBT131ini + $allowancesAmountBT92ini - $chargesAmountBT99ini - $logisticChargeAmountini) le 0.01 * ($nbLineItemsini + $nbAllowancesOrChargesini + $nblogisticChargeini) )