Ventilation de la TVA pour la catégorie M

Erreur BR-FXEXT-AG-01 Factur-X

Une facture qui contient une Ligne de facture (BG-25) pour laquelle le « Sous-type de la ligne de facture » (BT-X-8) a la valeur « DETAIL » ou n’est pas spécifié, une Remise au niveau du document (BG-20), des Charges ou Frais ou une taxe au niveau du document (BG-21), ou des Frais de service logistique (BG-X-42), pour lesquels le code de catégorie de TVA (BT-151, BT-95, BT-102 ou BT-X-273) est « M » (« Impôt sur la production, les services et l'importation à Ceuta et Melilla (IPSI) »), doit contenir dans la Ventilation de la TVA (BG-23) au moins un code de catégorie de TVA (BT-118) égal à « M » (« Impôt sur la production, les services et l'importation à Ceuta et Melilla (IPSI) »).

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

Si la ventilation de la TVA dans ApplicableHeaderTradeSettlement contient un ApplicableTradeTax avec CategoryCode M, la règle doit également trouver un CategoryCode M dans au moins un des éléments vérifiés ApplicableTradeTax, CategoryTradeTax ou AppliedTradeTax. Aucun élément de ce type n’est trouvé.

Ce que signifie la règle

Le code M désigne la catégorie de taxe de Ceuta et Melilla. La ventilation de la TVA doit indiquer cette catégorie de manière cohérente avec les informations fiscales associées.

Veuillez harmoniser la ventilation de la TVA pour `M`

La ventilation de la TVA contient la catégorie M, mais les informations fiscales vérifiées ne la contiennent pas. Vous pouvez harmoniser les informations fiscales de la facture.

Que faire ?
  1. Vérifiez la catégorie de taxe M dans ApplicableTradeTax, CategoryTradeTax et AppliedTradeTax.
  2. Vérifiez la correspondance des catégories de taxe avec TaxCategoryCodes.
  3. Vérifiez si AddApplicableTradeTax(...) représente la ventilation de la TVA de manière cohérente.
  4. Générez à nouveau la facture et vérifiez-la.
À vérifier dans FactoorSharp
  • TaxCategoryCodes (BT-151; BT-95; BT-102; BT-118)
  • AssociatedDocument.LineStatusReasonCode (BT-X-8)
  • FacturXInvoice.AddApplicableTradeTax(basisAmount, percent, taxAmount, typeCode, categoryCode, allowanceChargeBasisAmount, exemptionReasonCode, exemptionReason, lineTotalBasisAmount) (BG-23)
  • FacturXInvoice.AnyApplicableTradeTaxes() (BG-23)
  • FacturXInvoice.GetApplicableTradeTaxes() (BG-23)
Détails techniques

Le test réussit si aucun CategoryCode M n’apparaît dans les zones vérifiées, ou si un ApplicableTradeTax avec CategoryCode M au niveau du document est accompagné de ce code dans au moins un des éléments vérifiés de ligne ou de groupe de taxes.

Où la règle s'applique

La règle s’applique à la ventilation de la TVA dans ApplicableHeaderTradeSettlement et la compare à ApplicableTradeTax sur les lignes de facture ainsi qu’à CategoryTradeTax et AppliedTradeTax.

Message d'origine du Schematron
An Invoice that contains an Invoice line (BG-25) where the "Subtype of invoice line item" (BT-X-8) has the value "DETAIL" or is not specified, a Document level allowance (BG-20) or a Document level charge or tax (BG-21) or a Logistics Service Charge ( BG-X-42) where the VAT category code (BT-151, BT-95, BT-102, or BT-X-273) is “M” ("Ceuta and Mellita tax") shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with “M” ("Ceuta and Melilla tax").
Contexte (rule/@context)
/rsm:CrossIndustryInvoice
Expression de contrôle (assert/@test)
( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])=0 and count(//ram:SpecifiedLineTradeSettlement[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ]/ram:ApplicableTradeTax[ram:CategoryCode='M'])=0 and count(//ram:CategoryTradeTax[ram:CategoryCode='M'])=0 and count(//ram:AppliedTradeTax[ram:CategoryCode='M'])=0 ) or ( count(//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='M'])>=1 and ( exists(//ram:SpecifiedLineTradeSettlement[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ]/ram:ApplicableTradeTax[ram:CategoryCode='M']) or exists(//ram:CategoryTradeTax[ram:CategoryCode='M']) or exists(//ram:AppliedTradeTax[ram:CategoryCode='M']) ) )