Rapprocher le total hors TVA des lignes et des ajustements

Erreur BR-FXEXT-CO-13 Factur-X

Valeur absolue de (Montant total de la facture hors TVA (BT-109) - ∑ Montants nets des lignes de facture (BT-131) + Σ Montants de remise au niveau du document (BT-92) - Σ Montants de charge ou frais au niveau du document (BT-99)) <= 0,01 * (Nombre de montants nets des lignes de facture (BT-131) + Nombre de montants de remise au niveau du document (BT-92) + Nombre de montants de charge ou frais au niveau du document (BT-99)).

Règle obligatoire : tant qu'elle n'est pas respectée, la facture est invalide et sera rejetée par les validateurs.
Ce qui ne va pas

ram:TaxBasisTotalAmount doit être égal aux montants nets des lignes de facture prises en compte, diminués des remises et augmentés des charges au niveau du document. L’écart absolu autorisé est de 0,01 par ligne de facture, remise ou charge prise en compte.

Ce que signifie la règle

BT-109 est le total de la facture hors TVA. Il rapproche les montants nets des lignes de facture (BT-131) des remises (BT-92) et des charges (BT-99) au niveau du document.

Champs concernés BT-109 BT-131 BT-92 BT-99
Veuillez rapprocher le total de la facture hors TVA

Le total de la facture hors TVA ne correspond pas suffisamment aux montants nets des lignes de facture prises en compte et aux remises et charges au niveau du document. Vérifiez le total à partir de ces montants.

Que faire ?
  1. Comparez ram:TaxBasisTotalAmount aux valeurs ram:LineTotalAmount des lignes de facture prises en compte.
  2. Tenez compte des remises et charges au niveau du document à l’aide de ram:ActualAmount, et des frais de services logistiques à l’aide de ram:AppliedAmount.
  3. Vérifiez les valeurs concernées à l’aide de TaxBasisAmount, LineTotalAmount et ActualAmount.
  4. Générez à nouveau la facture et vérifiez-la de nouveau.
À vérifier dans FactoorSharp
  • AbstractTradeAllowanceCharge.ActualAmount (Document level allowance: BT-92; Document level charge: BT-99)
  • FacturXInvoice.TaxBasisAmount (BT-109)
  • TradeLineItem.LineTotalAmount (BT-131)
Détails techniques

Le test calcule la somme des valeurs ram:LineTotalAmount des lignes de facture sans ram:LineStatusReasonCode ou dont la valeur est DETAIL, ajoute les remises de ram:ActualAmount et soustrait les charges de ram:ActualAmount ainsi que les frais de services logistiques de ram:AppliedAmount. L’écart absolu autorisé par rapport à ram:TaxBasisTotalAmount est de 0,01 multiplié par le nombre de lignes, remises et charges prises en compte.

Où la règle s'applique

S’applique à ram:TaxBasisTotalAmount dans le récapitulatif monétaire et le compare aux montants nets des lignes de facture ainsi qu’aux remises et charges au niveau du document.

Message d'origine du Schematron
Absolute Value of (Invoice total amount without VAT (BT-109) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99)) <= 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)).
Contexte (rule/@context)
//ram:SpecifiedTradeSettlementHeaderMonetarySummation
Expression de contrôle (assert/@test)
for $BT109 in xs:decimal(ram:TaxBasisTotalAmount), $BT131Sum in xs:decimal(round(sum(../../ram:IncludedSupplyChainTradeLineItem[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ]/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ ram:LineTotalAmount) * xs:decimal(100)) div xs:decimal(100)), $BT92Sum in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='false']/ram:ActualAmount)* 10 * 10 ) div 100), $BT99Sum in xs:decimal(xs:decimal(round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='true']/ram:ActualAmount)* 100 ) div 100)+ xs:decimal(round(sum(/ rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100)), $nbLineItems in xs:decimal(count(../../ram:IncludedSupplyChainTradeLineItem[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ])), $nbAllowanceItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='false'])), $nbChargeItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='true']) + count(../ram:SpecifiedLogisticsServiceCharge)), $tolerance in xs:decimal(0.01), $maxTolerance in $tolerance * ($nbLineItems + $nbAllowanceItems + $nbChargeItems), $diff in xs:decimal($BT109 - $BT131Sum + $BT92Sum - $BT99Sum), $abs in xs:decimal(abs($diff)) return $abs le $maxTolerance