Tous les articles
Petite entreprise 10 min de lecture

Extraction de factures par IA : 288 tests sur les erreurs qui reviennent propres

Trois modèles bon marché, 24 factures, quatre niveaux de texte dégradé. L'exactitude est le chiffre facile. Celui qui coûte de l'argent, c'est la part des extractions fausses qui ne signalent rien.

Composition geometrique abstraite en deux tons, illustration de couverture
Publié le
11 août 2026
Rubrique
Petite entreprise

Une PME qui reçoit ses factures fournisseurs en PDF préfère les faire lire par un modèle plutôt que de les ressaisir. Savoir si cela marche n'est pas vraiment la question. Sur des documents propres, cela marche, et nous l'avons mesuré aussi. La question est ce qui se passe le jour où cela ne marche pas, et si quelqu'un s'en aperçoit.

Nous avons conduit 288 extractions pour le savoir. Voici les résultats, avant la méthode.

Sur du texte propre, et sur du texte dont la mise en colonnes a été détruite, trois modèles bon marché rendent 144 extractions justes sur 144. Perdre l'alignement d'un copier coller de PDF n'a rien coûté du tout. Le conseil courant qui consiste à « bien nettoyer le document avant » n'est pas soutenu par cette mesure.

Quand le bloc des totaux est remis dans le désordre, ou privé de ses libellés, l'exactitude tombe à 51 sur 72 à chacun de ces deux niveaux, et les modèles se taisent exactement là où ils auraient dû parler. Au niveau le plus difficile, 47,6 % des réponses fausses reviennent sans le moindre signalement, contre 14,3 % au niveau précédent. Le silence augmente avec la difficulté.

Huit extractions sur 288 sont fausses, ne portent aucun signalement, et passent le contrôle d'arithmétique censé les attraper. Les huit sont des factures avec un acompte déjà versé, et à chaque fois le modèle rend le total facturé au lieu du solde dû. Une entreprise qui paierait sur cette base paierait l'acompte deux fois, entre 252,95 et 602,26 USD par facture, médiane 489,83 USD, sans que rien nulle part ne le signale.

La méthode, en bref

Test conduit le 2026-08-10 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 chacun puisse les rejouer et contester le résultat. Etienne signe cet article et répond de son contenu.

Le corpus est construit, pas collecté. 24 factures fournisseurs générées par script avec une graine fixe, de sorte que la vérité terrain est connue sans discussion possible et que le corpus se régénère à l'identique. Aucune facture réelle, aucun fournisseur réel, aucune donnée d'entreprise réelle. C'est un choix assumé : un corpus de vraies factures aurait exigé de trancher à la main 168 valeurs, avec nos propres erreurs de lecture dans la référence.

Sept champs sont extraits de chaque facture : numéro de facture, date de facture, date d'échéance, devise, sous-total, taxe, montant dû.

Chaque facture a été présentée à quatre niveaux de dégradation du texte. Nous dégradons la structure, jamais les chiffres : corrompre un montant rendrait la facture réellement fausse et punirait un modèle de l'avoir bien lue. À chaque niveau, la bonne réponse reste dérivable du document.

Niveau Ce qui est dégradé
N1 propre rien, colonnes alignées
N2 colonnes perdues tous les blancs multiples réduits à un espace
N3 totaux mélangés N2, plus le bloc des totaux rendu dans l'ordre inverse, libellés intacts
N4 libellés perdus N2, plus le bloc des totaux réduit à une colonne de nombres nus

Trois modèles, choisis parmi ceux qu'une PME emploierait réellement pour leur prix : openai/gpt-4o-mini, google/gemini-2.5-flash-lite, anthropic/claude-haiku-4.5. Accès par OpenRouter, température 0, une seule exécution par couple facture, niveau et modèle. 288 appels, 0 échec technique, 0 réponse JSON invalide, coût total des appels 0,11951 USD. La consigne était identique mot pour mot pour les trois modèles, et elle autorisait explicitement le modèle à signaler une ambiguïté dans un champ notes. C'est ce champ qui rend le taux d'échec silencieux mesurable.

Ce que ce test ne prouve pas. L'entrée est du texte, pas une image scannée : il ne dit rien des erreurs de caractères d'un OCR, qui ne peuvent qu'aggraver le résultat. Chaque facture tient sur une page et est en anglais. Chaque couple n'a été exécuté qu'une fois. C'est un test sur 24 documents synthétiques, pas un banc d'essai de production. La liste complète des limites est à la fin, et elle mérite d'être lue avant de citer un chiffre d'ici.

Quatre pièges, et celui sur lequel nous nous trompions

Quatre difficultés ont été insérées, chacune résolue par le document lui-même, pour qu'il existe une seule bonne réponse défendable.

Piège Factures Fausses à N1 N2 N3 N4
Acompte déjà versé et déduit : le montant dû n'est pas le total facturé 6 0/18 0/18 12/18 6/18
Remise de 10 % appliquée avant taxe : le sous-total attendu est le montant net 6 0/18 0/18 9/18 15/18
Symbole $ ambigu, devise CAD dite en toutes lettres 4 0/12 0/12 3/12 5/12
Date au format ambigu 02/04/2026, levée en toutes lettres à la ligne suivante 6 0/18 0/18 0/18 0/18
Aucun piège 4 0/12 0/12 0/12 0/12

La date ambiguë n'a jamais trompé personne, à aucun niveau, sur aucun modèle : 0 erreur sur 72 extractions. C'est le piège que nous pensions le plus dangereux en écrivant le corpus. Nous nous trompions, et nous laissons la ligne ici plutôt que de la retirer discrètement.

Les factures sans aucun piège n'ont jamais cassé non plus. Toutes les erreurs de ce test, sans exception, tombent sur une facture où il y a réellement de l'argent en jeu.

Résultats bruts

Exactitude : factures entièrement justes, sur 24

Modèle N1 N2 N3 N4
gpt-4o-mini 24/24 24/24 21/24 14/24
gemini-2.5-flash-lite 24/24 24/24 18/24 19/24
claude-haiku-4.5 24/24 24/24 12/24 18/24
Tous modèles confondus 72/72 72/72 51/72 51/72

Le classement s'inverse entre N3 et N4. gpt-4o-mini est le meilleur à N3 et le pire à N4 ; claude-haiku-4.5 fait l'inverse. Choisir un modèle sur un seul niveau de dégradation ne dit rien de son comportement sur un autre.

Échec silencieux

Niveau Extractions fausses Fausses sans aucun signalement Part
N1 0 0 sans objet
N2 0 0 sans objet
N3 21 3 14,3 %
N4 21 10 47,6 %

Le contrôle le moins cher : sous-total + taxe = montant dû

Niveau Fausses rattrapées Taux de rattrapage Justes signalées à tort Taux de fausse alerte
N1 0 sans objet 18 25,0 %
N2 0 sans objet 18 25,0 %
N3 10 47,6 % 6 11,8 %
N4 15 71,4 % 12 23,5 %

Les fausses alertes ne sont pas du bruit aléatoire. Ce sont exactement les factures à acompte, où sous-total plus taxe vaut le total facturé et non le solde dû. Le contrôle y est arithmétiquement juste et opérationnellement faux, ce qu'il vaut mieux savoir avant de le brancher sur une alerte.

Quel champ casse

Champ N1 N2 N3 N4
numéro, date de facture, date d'échéance, devise 0 0 0 0
sous-total 0 0 0 17
taxe 0 0 0 3
montant dû 0 0 21 10

À N3, les 21 erreurs portent toutes sur un seul champ, le montant dû. Rien d'autre ne bouge. Les identifiants et les dates survivent à tous les niveaux de dégradation que nous leur avons infligés.

L'angle mort

Trois choses doivent s'aligner pour qu'une erreur atteigne la comptabilité sans être contestée : l'extraction est fausse, le modèle ne dit rien, et le contrôle d'arithmétique passe. C'est arrivé 8 fois sur 288.

Facture Niveau Montant dû réel Montant rendu Trop-payé
F04 N3 1329,54 1899,35 569,81
F04 N4 1329,54 1899,35 569,81
F08 N4 1062,38 1315,33 252,95
F12 N3 1405,28 2007,54 602,26
F12 N4 1405,28 2007,54 602,26
F16 N3 914,84 1306,91 392,07
F16 N4 914,84 1306,91 392,07
F20 N4 956,31 1366,16 409,85

Huit extractions, cinq factures distinctes, toutes des factures portant un acompte, et les huit produites par le même modèle, gpt-4o-mini. Nous rapportons ce dernier point parce qu'il est dans les données, et nous le relativisons dans la même phrase : avec une seule exécution par couple, une affirmation sur un modèle appuyée sur huit cas est une observation, pas un résultat. Ce qui est un résultat, c'est la forme. Chaque cas est la même erreur, sur le même type de document, sur le seul champ où le contrôle d'arithmétique ne peut rien, parce que le chiffre rendu est cohérent avec lui-même. Il répond simplement à une autre question que celle qui était posée.

La règle utilisable

Deux choses sortent de ce test, et les deux coûtent peu.

Faites le contrôle sous-total + taxe = montant dû. Il tient en trois lignes de code et rattrape la moitié à deux tiers des erreurs. Acceptez qu'il signale environ un quart de vos factures parfaitement justes aux niveaux propres, et envoyez celles-là à un humain plutôt que de chercher à le régler finement.

Routez systématiquement vers un humain toute facture portant un acompte, un avoir ou une remise. C'est là que tombent 100 % des erreurs de ce test, et c'est le seul endroit où le contrôle d'arithmétique est à la fois inutile et trompeur. Repérer ces documents ne demande aucun modèle : les mots sont dans le texte.

Ce que vous pouvez arrêter de faire, c'est de dépenser de l'effort sur la mise en page du PDF avant l'extraction. Sur ce corpus, cela n'a rien rapporté.

Pour la version plus large de ce raisonnement, nous avons écrit sur les tâches où l'IA échoue sans le dire et sur les modes de panne des flux automatisés. Ce test en est une instance mesurée.

Limites, franchement

  • 24 factures synthétiques. Un test sur 24 cas est un test sur 24 cas.
  • Une seule exécution par couple, à température 0. Les modèles ne sont pas parfaitement déterministes pour autant. Les écarts d'un ou deux points entre modèles ne doivent pas être lus comme significatifs. Les écarts de dix points et plus, et surtout la structure des erreurs, toujours le même champ et le même type de facture, le sont.
  • Entrée en texte, pas en image. Un vrai scan ajoute des erreurs de caractères que ce test ne mesure pas, et qui ne peuvent qu'aggraver le résultat.
  • Anglais seulement.
  • Trois modèles d'entrée de gamme. Rien ici ne dit ce que feraient les modèles les plus chers. C'est une question ouverte qui mérite son propre test.
  • Le corpus est de nous. Il est publié pour que le désaccord soit possible.

Rejouer le test

Tout ce que ce test a produit est ici, pas résumé : les scripts qui ont généré le corpus et l'ont dégradé, les 24 factures avec leur vérité terrain, les 288 réponses brutes telles que les modèles les ont rendues, et le script qui en tire les chiffres ci-dessus.

Sept fichiers, 393777 octets : le générateur du corpus avec sa graine fixe, les 24 factures et leur vérité terrain, les quatre niveaux de dégradation, le script qui a appelé les modèles et comparé champ par champ, les 288 réponses brutes avec la consigne employée, et l'analyse qui produit chacun des chiffres ci-dessus. La page de données les détaille un par un avec ce que chacun contient.

Le générateur emploie une graine fixe : le corpus que vous produirez est celui que nous avons employé.

bash
python3 generer-corpus.py --sortie corpus.json
python3 conduire-test.py --corpus corpus.json --sortie resultats-bruts.json \
    --niveaux 1 2 3 4 \
    --modeles openai/gpt-4o-mini google/gemini-2.5-flash-lite anthropic/claude-haiku-4.5
python3 analyser.py --resultats resultats-bruts.json --sortie chiffres.json

La clé d'API est lue dans une variable d'environnement et n'apparaît nulle part dans ces fichiers.

Télécharger le jeu de données (zip, 27,8 Kio, 7 fichiers, avec l'inventaire complet et la somme de contrôle).

Si vous rejouez ce test et obtenez autre chose, nous voulons le savoir. Il y a un formulaire de contact, et les corrections sont publiées sur l'article lui-même, datées, comme le disent les règles éditoriales de ce site.

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.