Rapprocher la base imposable de la catégorie M

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

[BR-FXEXT-AG-08ini] - Dans une ventilation de la TVA (BG-23) où le code de catégorie de TVA (BT-118) est égal à « M » (« Impôt sur la production, les services et l'importation à Ceuta et Melilla (IPSI) »), 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)) <= 0,01 * ((Nombre des montants nets des lignes de facture (BT-131) + Nombre des montants des remises au niveau du document (BT-92) + Nombre des montants des charges ou frais au niveau du document (BT-99) + Nombre des 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 « Impôt sur la production, les services et l'importation à Ceuta et Melilla (IPSI) » (M), 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 de la somme des montants des lignes de facture, remises, majorations et montants logistiques associés. Le rapprochement utilise la catégorie M et le taux ; pour les lignes de facture, seules les entrées avec DETAIL ou sans ram:LineStatusReasonCode sont comptées.

Ce que signifie la règle

La base imposable de catégorie M doit correspondre aux montants de facture associés à cette catégorie et à ce taux. 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 `M`

La base imposable de la ventilation de TVA M diffère des montants associés à la même catégorie et au même taux. Vous pouvez reconstituer le rapprochement à partir des lignes de facture et des montants au niveau du document.

Que faire ?
  1. Comparez ram:BasisAmount aux montants des lignes de facture, remises, majorations et montants logistiques de catégorie M et de même taux.
  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

Compare ram:BasisAmount à la somme des montants de catégorie M et de même taux. Les motifs d’exonération ne servent pas de filtre pour les montants additionnés dans ce test ; la tolérance 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 M dans ram:ApplicableHeaderTradeSettlement.

Message d'origine du Schematron
[BR-FXEXT-AG-08ini] - In a VAT breakdown (BG-23) where VAT category code (BT-118) is equal to “M” ("Ceuta and Mellita tax"), 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 "Ceuta and Mellita tax" (M), 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='M'][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 = 'M' 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='M' 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='M' 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 = 'M' 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='M' 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='M' 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='M' and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate ])) return abs($basisAmount - $calculatedAmountBT131ini + $allowancesAmountBT92ini - $chargesAmountBT99ini - $logisticChargeAmountini) le 0.01 * ($nbLineItemsini + $nbAllowancesOrChargesini + $nblogisticChargeini) )