Tous les articles
Petite entreprise 7 min de lecture

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.

Composition geometrique abstraite en deux tons, illustration de couverture
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.

A lire dans la même rubrique

Recevoir le prochain article par e-mail

Un e-mail quand un article paraît. Pas d'outil de la semaine, pas de liste d'affiliation, aucune transmission de votre adresse à qui que ce soit.