La vérification d’un numéro de TVA intracommunautaire auprès du service européen VIES est simple sur le papier : un appel, une réponse valide ou invalide. En production, elle se heurte à un service dont la disponibilité varie selon les États membres, à des formats de numéros hétérogènes, et à un client qui attend une réponse pendant que la page tourne.
Cet article traite l’implémentation. Les conditions fiscales de l’exonération relèvent d’un autre sujet, et la vérification n’en est qu’une des quatre.
Où placer le champ
Deux emplacements possibles, avec des conséquences différentes.
À l’inscription, dans le formulaire de création de compte professionnel. La vérification se fait une fois, le résultat est stocké sur le client, et le checkout reste fluide. C’est l’approche recommandée dès que vous validez les comptes professionnels.
Au checkout, dans le formulaire d’adresse de facturation. Plus souple pour les clients qui commandent sans compte, mais la vérification intervient au pire moment : une lenteur ou une erreur à cette étape coûte une commande.
Dans les deux cas, le champ se rattache à l’adresse de facturation, jamais à l’adresse de livraison. Le numéro appartient à l’entité qui achète, pas au lieu où le colis arrive.
Les formats, première source d’échec
Un numéro de TVA intracommunautaire commence par un code pays à deux lettres, suivi d’une chaîne dont la longueur et la composition varient d’un État à l’autre. La France utilise deux caractères de clé puis neuf chiffres, l’Allemagne neuf chiffres, l’Espagne une combinaison de lettres et de chiffres, l’Irlande admet plusieurs formats historiques.
Trois traitements à faire avant tout appel.
- Normaliser la saisie. Retirer les espaces, points, tirets et passer en majuscules. Un client sur trois saisit son numéro avec des séparateurs.
- Séparer le code pays du reste. Le service attend les deux séparément, et le client saisit souvent tout d’un bloc.
- Valider la forme avant d’appeler. Un contrôle de format par pays évite d’interroger le service pour une saisie manifestement erronée, et permet un message immédiat.
Attention au cas de la Grèce, dont le code pays TVA diffère de son code pays ISO, et à celui de l’Irlande du Nord, qui dispose d’un préfixe distinct depuis le retrait du Royaume-Uni.
Validation TVA Intracommunautaire VIES & Autoliquidation B2BTVA intracommunautaire vérifiée, autoliquidation automatique, preuves d'audit horodatées.€79.00
L’appel au service
Le service européen interroge, pour chaque requête, la base nationale de l’État concerné. Deux conséquences directes.
La latence varie fortement selon le pays interrogé. Une vérification allemande répond en général rapidement, d’autres administrations sont nettement plus lentes.
La disponibilité est indépendante d’un État à l’autre. Le service peut fonctionner pour la Belgique et être indisponible pour l’Italie au même moment. Un test réussi ne garantit donc pas que toutes les vérifications aboutiront.
Fixez un délai maximal d’attente, cinq à dix secondes, au-delà duquel vous considérez le service comme indisponible. Un appel sans limite de temps bloque la page.
Le comportement dégradé
C’est le point qui distingue une implémentation utilisable d’une implémentation fragile. Trois états à distinguer, et non deux.
Numéro valide. Vous enregistrez le résultat, l’horodatage, et vous appliquez vos règles fiscales.
Numéro invalide. Message clair au client, avec la possibilité de corriger. Ne bloquez pas la commande : le client peut acheter avec la TVA et régulariser ensuite.
Service indisponible. Le cas le plus mal traité. La commande doit passer, avec TVA appliquée, et la vérification doit être mise en file pour une nouvelle tentative. Traiter l’indisponibilité comme une invalidité fait perdre des commandes ; la traiter comme une validité vous expose fiscalement.
Une file de revérification qui repasse automatiquement les numéros non vérifiés quelques heures plus tard règle ce cas sans intervention.
Les messages au client
Ils comptent autant que la mécanique. Trois formulations à préparer.
Sur un numéro invalide, expliquez ce qui peut expliquer le refus : numéro récent pas encore enregistré dans la base européenne, entreprise non assujettie, ou erreur de saisie. Un simple « numéro invalide » laisse le client sans issue.
Sur une indisponibilité, dites la vérité : la vérification n’a pas pu aboutir, la commande peut être passée avec TVA, et vous reviendrez vers lui. C’est plus rassurant qu’un message d’erreur technique.
Sur un succès, confirmez visuellement, avec le nom de l’entreprise retourné par le service quand il est disponible. Cette confirmation réduit les erreurs de saisie sur un numéro appartenant à une autre société.
Conserver la preuve
Le service européen fournit un numéro de consultation pour chaque requête. Enregistrez-le, avec la date, l’heure, le numéro testé et la réponse complète.
C’est cette trace qui vous permet de démontrer, deux ans plus tard, que le numéro était valide au moment de la vente. Sans elle, vous ne pouvez pas justifier une exonération, même si la vérification a bien eu lieu.
Rattachez cette preuve à la commande, pas seulement au client : un client peut changer de numéro, et c’est l’état au moment de la transaction qui compte.
Cache et revérification
Deux réglages complémentaires.
Ne rappelez pas le service à chaque page. Une vérification réussie peut être conservée quelques jours sans risque, ce qui évite d’interroger le service à chaque rechargement du panier.
Revérifiez périodiquement les clients récurrents. Un numéro retiré en cours d’année reste valide dans votre base si personne ne repasse. Une revérification mensuelle des comptes actifs suffit.
Le module Validation TVA Intracommunautaire VIES gère cette chaîne sur PrestaShop 8 et 9 : normalisation et contrôle de format par pays, appel au service avec délai maximal, comportement dégradé avec file de revérification, conservation du numéro de consultation et revérification périodique des comptes.