Aller au contenu
Choisir la langue — Français

Le calcul de la TVA UE dans Magento

Le calcul de la TVA fait partie de ces domaines de Magento que l'on paramètre soigneusement une fois, en espérant ne plus avoir à y revenir. Trois classes de taxe et les règles de taxe qui les relient s'en chargent. Cet article parcourt cette configuration étape par étape, sous l'angle du commerce intracommunautaire. On y verra aussi pourquoi le groupe de clients pèse sur le taux appliqué à une commande, ce que son nom ne laisse pas deviner.

Les trois classes de taxe

Une classe de taxe n'est qu'une étiquette. Elle ne contient aucun pourcentage et ne détermine rien par elle-même, sinon l'appartenance à un groupe. Magento en distingue deux types, séparés dans la table tax_class par la colonne class_type, et les utilise à trois endroits :

Classe de taxe Type Gérée sous Valeur par défaut
Produit PRODUCT Produit → onglet Advanced Pricing, attribut tax_class_id Taxable Goods
Client CUSTOMER Stores → Customer Groups, champ tax_class_id Retail Customer
Livraison PRODUCT Stores → Configuration → Sales → Tax, section Tax Classes Taxable Goods

La livraison fait figure d'exception : elle n'a pas de type propre, mais reprend une classe de taxe produit que vous définissez de manière centrale dans la configuration et qui s'applique à tous les modes de livraison. Réglée sur None, les frais de port restent hors taxe alors que les articles du même panier sont taxés normalement. C'est l'une des causes les plus fréquentes lorsque le détail des lignes et le total ne concordent pas.

Pourquoi c'est le groupe de clients qui décide

Pour la classe de taxe produit, les choses sont simples : elle figure comme attribut sur l'article, vous la voyez dans le produit et vous pouvez l'y modifier. Pour la classe de taxe client, c'est différent, car elle ne se trouve pas sur le client. Elle se trouve sur son groupe de clients.

Chaque groupe sous Stores → Customer Groups porte exactement un champ tax_class_id, et tous les clients de ce groupe en héritent. Un second champ, qui permettrait de remplacer la classe pour un client, une adresse ou une commande donnée, n'existe pas dans le cœur de Magento.

Le groupe de clients est donc le fondement de tout le calcul de la TVA. Il détermine quelle classe de taxe accompagne un acheteur, et par là même quelles règles de taxe peuvent s'appliquer à lui et parmi quels taux Magento retiendra finalement celui de sa commande. Tout le reste s'appuie là-dessus.

La règle de taxe réunit classes et taux

Une classe de taxe seule ne déclenche aucun calcul. Seule la règle de taxe, sous Stores → Tax Rules, établit le lien, et elle se compose toujours des trois mêmes éléments :

  1. Une ou plusieurs classes de taxe client
  2. Une ou plusieurs classes de taxe produit
  3. Un ou plusieurs taux de taxe issus de Stores → Tax Zones and Rates, chacun accompagné d'un pays, d'une région et d'un code postal

Pour qu'une règle s'applique, trois conditions doivent être réunies en même temps : la classe de taxe client de l'acheteur figure dans la règle, la classe de taxe produit de la ligne également, et l'adresse déterminante se situe dans la zone de l'un des taux affectés. Si l'une de ces conditions n'est pas remplie, la règle ne s'applique pas. Et si aucune règle ne s'applique, Magento ne calcule tout simplement aucune taxe : il n'existe pas de taux par défaut sur lequel le système se rabattrait.

Priorité et ordre de tri

Lorsque plusieurs règles s'appliquent en même temps au même article, le champ Priority détermine la façon dont Magento les traite :

  • Les règles de priorité différente sont combinées : le chiffre le plus bas s'applique en premier, chaque règle suivante calcule son taux sur le total du calcul de taxe précédent (la case Calculate off Subtotal Only désactive ce comportement)
  • Les règles de même priorité sont ajoutées et portent ensemble sur le même montant hors taxes

Le second cas est voulu, par exemple lorsqu'un pays perçoit une taxe nationale et une taxe régionale côte à côte. Dans une boutique européenne, il s'agit le plus souvent d'un oubli : le taux normal et le taux réduit s'y distinguent par la classe de taxe produit, de sorte qu'une seule règle s'applique par article. Un coup d'œil s'impose dès qu'un taux se révèle plus élevé que prévu.

À ne pas confondre avec la priorité : le champ Sort Order. Magento 2 ne l'exploite nulle part — ni dans le calcul, ni pour l'affichage des lignes de taxe.

Reste à savoir quelle adresse est déterminante lorsque l'adresse de livraison et celle de facturation diffèrent. Vous le définissez sous Stores → Configuration → Sales → Tax avec le réglage Tax Calculation Based On, qui propose l'adresse de livraison, l'adresse de facturation et l'origine de l'expédition. Modifier ce seul réglage change le résultat de toute commande dont les deux adresses se trouvent dans des pays différents : il vaut la peine de savoir sur quoi il est positionné chez vous.

Quand l'adresse de facturation et celle de livraison diffèrent

Ce que ce choix d'adresse implique en pratique se voit le plus vite sur un exemple. Prenons une boutique établie en Allemagne. Deux taux sont enregistrés, l'Allemagne à 19 % et la France à 20 %, tous deux affectés à la même règle de taxe — avec la classe de taxe client Retail Customer et la classe de taxe produit Taxable Goods. Tous les clients se trouvent dans le groupe par défaut General. Quatre commandes ne diffèrent que par leurs adresses :

Adresse de facturation Adresse de livraison Based On : Shipping Address Based On : Billing Address
Allemagne Allemagne 19 % 19 %
Allemagne France 20 % 19 %
France Allemagne 19 % 20 %
France France 20 % 20 %

La première et la dernière ligne n'ont rien de surprenant : lorsque les deux adresses concordent, le réglage n'a aucune incidence. Les deux lignes du milieu sont plus intéressantes. La même commande y aboutit à des montants différents selon la valeur de Tax Calculation Based On — et il s'agit d'un réglage unique, valable pour toute la boutique, que l'on ne peut pas choisir commande par commande.

Le modifier ne change rien aux commandes déjà passées, mais modifie le calcul de chaque panier à venir. Un test avec deux adresses situées dans des pays différents montre en une minute laquelle des deux colonnes correspond à votre boutique.

Ce qui n'apparaît dans aucune des quatre lignes, c'est le client lui-même. Que l'adresse française soit celle d'un particulier ou d'une entreprise disposant d'un numéro de TVA valide au compte ne change rien au résultat : tous deux appartiennent au même groupe de clients, portent la même classe de taxe client et relèvent de la même règle. Le numéro de TVA n'est pas un élément d'une règle de taxe. Les distinguer suppose deux groupes de clients distincts. Magento sait répartir les acheteurs lui-même — nous y venons.

Magento sait faire l'affectation lui-même

Les groupes de clients n'ont pas à être gérés à la main. Sous Stores → Configuration → Customers → Customer Configuration → Create New Account Options se trouve le réglage Enable Automatic Assignment to Customer Group. Activé, Magento vérifie un numéro de TVA saisi auprès de VIES et affecte l'acheteur à l'un des quatre groupes que vous définissez juste en dessous :

Cas Quand il s'applique Réglage
National numéro valide, pays de l'acheteur = pays de la boutique Group for Valid VAT ID - Domestic
Intracommunautaire numéro valide, autre pays de l'UE Group for Valid VAT ID - Intra-Union
Invalide VIES répond mais ne connaît pas le numéro Group for Invalid VAT ID
Erreur VIES injoignable ou requête échouée Validation Error Group

Cela intervient à deux endroits. Lorsqu'un client connecté enregistre une adresse portant un numéro de TVA, Magento modifie son groupe de clients de façon durable — le numéro peut donc très bien être fourni après coup. Et dans le panier, le groupe est défini à chaque recalcul des totaux, y compris pour les invités sans compte. Un invité disposant d'un numéro valide d'un autre pays de l'UE obtient ainsi sa facture hors taxes sans aucune intervention.

Un seul levier pour tout

C'est confortable — à condition de savoir de quoi cela dépend. Car l'intervention de l'automatisme tient à une seule question : quelle adresse Magento examine. C'est Tax Calculation Based on, dans le même groupe de réglages, qui le détermine. Ce n'est pas le réglage homonyme de la section fiscale, qui fixe le taux — et les deux peuvent désigner des adresses différentes.

Si l'affectation se fonde sur l'adresse de facturation, un numéro de TVA porté par l'adresse de livraison reste sans effet. L'acheteur le saisit, le voit affiché dans la commande, et la taxe lui est facturée malgré tout. Le taux, lui, peut entre-temps être calculé d'après le pays de livraison. Qui n'a pas réglé les deux options en connaissance de cause dispose ici d'une source d'erreur silencieuse.

Le véritable écueil se situe cependant plus profond, et il tient à la conception même : Magento ne peut agir sur la taxe que par le groupe de clients. Toute affectation qu'il opère doit emprunter cette voie unique. Un numéro de TVA vérifié ne change donc pas seulement la taxation, mais tout ce qui dépend par ailleurs du groupe : prix catalogue, règles de panier, frais de port, contenus liés au groupe. Un client professionnel basculé dans le groupe B2B à cause de son numéro peut ainsi hériter de prix dégressifs qui ne lui étaient pas destinés — et, s'il est connecté, il y reste jusqu'à ce qu'un changement d'adresse l'en fasse sortir.

Séparer proprement la fiscalité suppose donc des groupes qui ne servent qu'à distinguer la taxe. C'est faisable, mais cela vous prive des groupes comme outil pour tout le reste.

S'ajoute ce que l'automatisme ne fait pas de lui-même :

  • Il existe exactement quatre groupes. Aucune gradation par pays, par taux ou par type de produit n'est prévue
  • Si VIES ne répond pas, l'acheteur atterrit dans le groupe d'erreur. Il n'y a pas de seconde tentative, et personne n'en est informé
  • Le résultat est mis en cache sur le panier. Sans Validate on Each Transaction, un numéro devenu invalide continue de produire son effet

Pour une boutique qui vend surtout sur son marché national et facture de temps à autre ailleurs dans l'UE, cela suffit. Qui y vend régulièrement rencontre ces limites plus tôt.

La classe de taxe sans ce détour

C'est précisément ce détour par le groupe que supprime notre extension EU VAT Enhanced. Elle détache la classe de taxe client du groupe de clients et la détermine à nouveau à chaque calcul — selon qu'il s'agit du marché intérieur ou de l'étranger, selon les adresses de livraison et de facturation, et selon le résultat de la vérification du numéro de TVA auprès de VIES. Pour notre exemple, cela signifie que les deux acheteurs français peuvent être traités différemment sans que personne ne touche à leurs groupes de clients.

La structure elle-même ne change pas. Les trois classes de taxe restent, les règles de taxe restent, et vous continuez à les gérer aux mêmes endroits. Simplement, la classe de taxe client n'est plus lue dans le groupe : elle est déduite, à chaque calcul, de l'adresse et du résultat de la vérification. Le groupe de clients redevient ainsi disponible pour ce à quoi vous en avez besoin par ailleurs — prix dégressifs, règles de panier, tout le reste. Les réglages prévus à cet effet sont décrits dans la documentation sur les classes de taxe et le calcul.

Cet article décrit la configuration d'une boutique Magento et ne constitue pas un conseil fiscal. Ni nous ni notre logiciel ne pouvons apprécier le traitement applicable à votre cas. Faites confirmer tout élément engageant par votre conseiller fiscal ou l'administration compétente.

Qu'est-ce qu'une classe de taxe dans Magento ?

Une étiquette sans pourcentage propre. Elle rattache un produit, un client ou la livraison à un groupe. Le taux ne vient que de la règle de taxe, qui relie une classe produit, une classe client et un taux.

Où se définit la classe de taxe d'un client ?

Pas sur le client, mais sur son groupe de clients sous Stores → Customer Groups. Chaque client hérite de la valeur de son groupe. Un champ qui remplacerait la classe pour une commande isolée n'existe pas dans le cœur de Magento.

Comment créer une nouvelle classe de taxe ?

Il n'existe pas de menu dédié. Ouvrez Stores → Tax Rules, créez une règle ou modifiez-en une, puis dépliez Additional Settings. Vous y ajoutez les classes de taxe produit et client via le signe plus. La classe produit apparaît ensuite dans le produit sous Advanced Pricing, la classe client dans le groupe de clients.

Et les ventes à des particuliers ailleurs dans l'UE ?

Elles ne passent pas par le numéro de TVA mais par le taux du pays de destination. Lequel enregistrer, et à partir de quand, relève du guichet unique — nous lui avons consacré un article distinct sur les taux de TVA OSS dans Magento.

Pourquoi aucune taxe n'est-elle calculée sur une commande ?

Parce qu'aucune règle de taxe ne s'applique. Le plus souvent, aucun taux n'est enregistré pour le pays de l'adresse déterminante, ou le taux existant n'est affecté à aucune règle. Magento ne se rabat alors pas sur un taux par défaut : il omet la ligne de taxe. L'adresse déterminante est fixée par Tax Calculation Based On.

Pourquoi la taxe est-elle facturée malgré un numéro de TVA valide ?

Magento bascule bien le groupe du panier de façon dynamique dès qu'un numéro vérifié est présent. Si la taxe demeure malgré tout, cela tient généralement à l'un de ces trois points : Enable Automatic Assignment to Customer Group n'est pas activé, le numéro figure sur l'adresse que Tax Calculation Based on n'examine pas, ou le groupe cible porte une classe de taxe pour laquelle une règle s'applique encore — comme dans le cas national, où aucun avantage n'est prévu non plus.

Post Comments

Soyez le premier à commenter cet article.

Envoyer le commentaire

Cette question sert à vérifier que vous êtes bien une personne.

Après vérification, votre commentaire est publié sous le nom que vous indiquez. En savoir plus dans notre politique de confidentialité

Champs obligatoires