Quatre modèles attrapent toutes les erreurs franches d'une facture, et laissent passer la sur-livraison. 672 appels
Prix faux, ligne jamais commandée, référence fausse, devise fausse : attrapés 383 fois sur 383. Les dix-sept faux accords du test portent tous sur une seule condition, la sur-livraison, et un modèle a écrit l'écart avant de l'approuver.
Publié le
14 septembre 2026
Rubrique
Petite entreprise
Demandez à un modèle de rapprocher une facture fournisseur de son bon de commande : il attrapera un prix unitaire faux, une ligne jamais commandée, une référence de bon de commande fausse d'un chiffre et une devise qui ne correspond pas. À chaque fois. 383 cas sur 383, quatre modèles, aucune exception.
Puis il approuvera une facture de trois unités quand vous en aviez commandé une, en écrivant lui-même dans sa réponse que trois ont été facturées et une commandée.
Nous l'avons conduit. 672 appels, quatre modèles, 168 paires facture et bon de commande, 0,4672 USD réellement facturés. Voici ce qui revient, avant la méthode.
Les quatre écarts francs sont attrapés 100 % du temps. Prix unitaire faux, ligne absente du bon, référence fausse, devise fausse : 383 cas exploitables, 383 décisions justes, sur les quatre modèles. Il n'y a rien à corriger de ce côté.
Les dix-sept faux accords du test portent tous sur une seule condition. La sur-livraison : plus d'unités facturées que commandées. Zéro faux accord sur les six autres conditions. Pas un.
La cause est écrite dans les mots des modèles eux-mêmes. Notre consigne dit que la livraison partielle est acceptable, parce qu'elle l'est. Les modèles appliquent cette exception sans vérifier dans quel sens la quantité a bougé. gpt-4o a écrit Packing tape, 48mm, pack of 6: invoiced quantity is 3, ordered quantity is 1 dans sa liste d'écarts, puis a conclu : The invoice matches the purchase order except for a higher quantity of packing tape, which is acceptable.
Et la même clause échoue dans l'autre sens. Une vraie livraison partielle, moins d'unités au prix convenu, n'est approuvée que 33 fois sur 96. Deux factures correctes sur trois sont retenues pour un humain qui n'a rien à décider.
Le modèle haut de gamme est le meilleur au total et le pire là où ça coûte de l'argent.gpt-4o rend 154 décisions justes sur 168, contre 128, 134 et 141 pour les trois modèles économiques. Il commet aussi 8 faux accords contre 2, 3 et 4. Ce qu'il achète, c'est l'effondrement des faux rejets, de 23 à 37 vers 6. Ce qu'il vous vend en échange, ce sont des sur-livraisons qui passent.
La méthode, en bref
Test conduit le 2026-09-14 par la chaîne de test automatisée de ce site : le corpus, les appels aux modèles et l'analyse sont des scripts, publiés plus bas pour que n'importe qui puisse les rejouer et contester le résultat. Etienne signe cet article et en répond.
C'est le huitième test mesuré publié ici, et le premier où le modèle doit comparer deux documents au lieu d'en lire un.
Les factures n'ont pas été régénérées. Ce sont exactement les 24 publiées le 2026-08-13 sous le jeu de données d'extraction de factures, générées par script à graine fixe 20260810. Ce qui est neuf, c'est le bon de commande apparié à chacune.
Chaque facture reçoit sept bons de commande, un par condition, portant un écart et un seul. Deux des sept sont des approbations légitimes : sans elles, un modèle qui refuserait tout obtiendrait un score parfait.
Code
Écart introduit
Bonne réponse
Décisions justes
C0
aucun, la facture correspond au bon
APPROVE
62 / 96
C1
plus d'unités facturées que commandées
HOLD
79 / 96
C2
prix unitaire facturé supérieur au prix commandé
HOLD
96 / 96
C3
une ligne facturée n'est pas au bon de commande
HOLD
95 / 95
C4
livraison partielle : moins d'unités, prix justes
APPROVE
33 / 96
C5
référence du bon fausse d'un chiffre
HOLD
96 / 96
C6
devise du bon différente de celle de la facture
HOLD
96 / 96
C3 affiche 95 et non 96 parce qu'un appel sur 672 est revenu avec un JSON tronqué. Il n'est compté ni juste ni faux.
Les quatre modèles, et ce que chaque décision coûte
Modèle
Justes
Faux accords
Faux rejets
USD par paire
openai/gpt-4o-mini
128 / 168
3
37
0,000105
google/gemini-2.5-flash-lite
134 / 167
2
31
0,000096
anthropic/claude-haiku-4.5
141 / 168
4
23
0,000987
openai/gpt-4o
154 / 168
8
6
0,001593
Chaque coût ici est le montant réellement facturé pour l'appel, lu dans la réponse de l'API, jamais estimé depuis une grille tarifaire.
Là où la montée en gamme change vraiment quelque chose
Condition
gpt-4o-mini
gemini-2.5-flash-lite
claude-haiku-4.5
gpt-4o
C0, facture conforme
8 / 24
13 / 24
18 / 24
23 / 24
C4, livraison partielle
3 / 24
4 / 24
7 / 24
19 / 24
C1, sur-livraison
21 / 24
22 / 24
20 / 24
16 / 24
Lisez la dernière ligne contre les deux du dessus. La gamme qui apprend à cesser de refuser les factures correctes est la même qui se met à accepter la sur-livraison. Sur cette tâche, les deux ne sont pas indépendantes.
La consigne, mot pour mot
python
# La consigne envoyee aux quatre modeles, identique pour tous.# La clause sur la livraison partielle est celle qui produit les 17 faux# approve : les modeles l'appliquent sans verifier le SENS de l'ecart.
CONSIGNE = """You are checking a supplier invoice against the purchase order it refers to, for a small business accounts payable process.
Approve the invoice only if it is consistent with the purchase order. Partial delivery is normal and acceptable: fewer units than ordered, at the agreed unit price, is not a reason to hold.
Return ONLY a JSON object with exactly these keys:
- decision: string, either "APPROVE" or "HOLD"
- reason: string, one sentence
- discrepancies: array of strings, every difference you found between the invoice and the purchase order, empty if none
Purchase order:
---
%s
---
Invoice:
---
%s
---"""
Le champ discrepancies n'est pas décoratif. C'est lui qui sépare un modèle qui n'a pas vu l'écart d'un modèle qui l'a vu et a approuvé quand même. Sur les 17 faux accords, 16 arrivent avec une liste vide : ces modèles n'ont pas lu la quantité. Un seul, le cas gpt-4o cité plus haut, a listé l'écart et approuvé malgré tout. Le premier est un défaut de lecture. Le second est un défaut de jugement, et aucun modèle plus gros ne le corrige : seule une règle explicite le fait.
Ce que ce test ne prouve pas
24 factures générées par script ne sont pas un échantillon de factures réelles. Aucun scan, aucune langue étrangère, aucune mise en page exotique, aucun tampon manuscrit.
Un écart à la fois. Les factures réelles les cumulent, et rien ici ne dit que les modèles se comportent pareil quand deux problèmes se superposent.
Un seul format de bon de commande. Une autre mise en page peut très bien déplacer ces chiffres.
Du texte, pas du PDF. Les modèles ont reçu du texte brut, pas un document scanné.
Un appel par cas, à température 0, et notre test du 2026-08-25 a établi que la température 0 ne garantit pas la répétabilité.
Un défaut connu du corpus, mesuré plutôt que caché. Six des 24 factures portent deux lignes de même description à des prix unitaires différents, ce qui rend leur tableau ambigu avant tout écart introduit. Chaque chiffre par condition est donc publié deux fois, avec et sans ces six factures. L'écart est faible : C4 passe de 34,38 % à 36,11 %, C0 de 64,58 % à 63,89 %. La duplication n'explique pas le résultat.
Ce que nous en ferions
Pas « prendre un meilleur modèle ». La montée en gamme nous a acheté moins de faux rejets et plus de sur-livraisons qui passent, ce qui, sur un processus de comptabilité fournisseurs, est le mauvais arbitrage.
Ce que les chiffres désignent est plus étroit et moins cher : la comparaison des quantités ne devrait pas être laissée au jugement du modèle. Deux nombres, une soustraction, un signe. Calculez-le en code, donnez le signe au modèle, et les 17 faux accords de ce test disparaissent sans changer de modèle ni de prix. Tout ce que les modèles font bien ici, lire deux documents et apparier des lignes libellées différemment, ils continuent de le faire.
Télécharger le jeu de données : les 168 paires, les 672 réponses brutes, le générateur, le harnais et le script d'analyse, avec l'archive et sa somme de contrôle.
L'auto-vérification rattrape 97,6 % des extractions de factures fausses. Sur des fusions de contacts, où rien ne se recalcule, elle en rattrape 76,0 %. L'accord entre modèles tombe de 92,9 % à 62,9 %, et il marche le plus mal sur le modèle qui se trompe le moins.
Sur une facture propre, la montée en gamme n'achète rien : les six modèles sont à 100 %. Là où elle achète quelque chose, les trois fournisseurs achètent les mêmes 10 ou 11 factures justes sur 96, et le prix de ce gain identique varie d'un facteur 6,5. Coûts lus dans l'API, jamais dans une grille tarifaire.
Le contrôle arithmétique publié en août rattrape 59 % des erreurs et se déclenche sur 22 % des extractions justes. Nous avons posé quatre garde-fous différents sur les mêmes 288 extractions. Celui qui rattrape le plus est le pire à déployer, et l'accord entre modèles ne se déclenche jamais sur une facture propre.