Aller au contenu
Toutes les études de cas

2026

7 min de lecture

La pile de factures que l'on ressaisissait à la main

L'équipe commerciale ressaisissait les lignes de machines et de véhicules d'un dossier de factures scannées dans un modèle Word, un PDF à la fois. Un outil de traitement par lots sous Windows lit chaque PDF, ne conserve que les lignes admissibles et exporte une facture finalisée nommée d'après son numéro BOE — avec un recours à l'IA pour les scans que le texte brut n'atteint pas.

Chargé de support informatique · Bright Industrial Park — Commercial Department

Voir le code source sur GitHub
3
fournisseurs d'IA pour les scans illisibles
1
PDF propre par facture source
0
valeurs inventées en cas de doute

Le travail avant le script

Le service commercial recevait les factures douanières sous forme d'un dossier de PDF scannés — un par déclaration en douane, chacun nommé d'après son numéro BOE. Il fallait ouvrir chaque fichier, parcourir les lignes et ne recopier que les entrées de machines et de véhicules dans une copie neuve d'une facture Word de référence, en écartant les pièces, les pièces détachées, les accessoires et tout élément ambigu.

Puis les totaux : additionner les lignes admissibles en un montant FOB, en déduire le fret et l'assurance, et enregistrer le document finalisé en PDF nommé d'après le numéro BOE. Multipliez cela par un dossier entier et c'est un après-midi de recopie minutieuse et répétitive, où un seul montant mal saisi donne une facture erronée.

Rien de difficile. Tout est lent, et le travail manuel lent est le terreau des erreurs. La tâche était un travail de machine occupant l'après-midi d'une personne.

Ne conserver que ce qui est admissible

Le cœur de l'outil est un classificateur qui décide, ligne par ligne, si un article est une machine ou un véhicule. Il confronte chaque description à une liste configurable de mots-clés d'inclusion, qu'une liste d'exclusion supplante — ainsi « huile moteur » est écartée bien que « moteur » aurait correspondu.

Il est délibérément prudent. Les articles ambigus ou mal décrits sont exclus plutôt que devinés. Sur une facture commerciale, une inclusion erronée est un défaut que quelqu'un devra rattraper en aval, tandis qu'une ligne manquante est visible et facile à rajouter — l'outil penche donc vers l'omission, et le fait de manière évidente.

Les règles résident dans un fichier JSON, non dans le code : le vocabulaire peut donc être ajusté aux formulations d'un nouveau fournisseur sans toucher à l'analyseur.

Un modèle neuf à chaque fois

Chaque facture est construite à partir d'une copie propre du modèle Word de référence plutôt qu'en modifiant la sortie précédente, de sorte que rien ne se propage d'un fichier au suivant. L'outil repère le tableau des lignes grâce aux libellés de son en-tête, copie la mise en forme d'une ligne d'exemple et remplit une ligne par article admissible, dans l'ordre d'origine.

Les métadonnées et les totaux vont dans des marqueurs nommés — numéro de facture, référence, et les trois montants calculés : le FOB comme somme des totaux de lignes, le fret à un pourcentage fixe du FOB, l'assurance déduite du FOB majoré du fret. Le calcul est identique à chaque fois, ce qui est précisément la raison pour laquelle une personne ne devrait pas s'en charger.

L'export passe par Word lui-même plutôt que par une bibliothèque PDF, car la facture finalisée doit reproduire exactement la mise en page du modèle, et le moyen le plus sûr de le garantir est de laisser l'application qui possède le format produire le PDF.

Quand le PDF est une photographie

Certaines factures arrivent sous forme de scans — une image sans couche de texte que l'analyseur puisse lire. Plutôt que d'échouer sur celles-ci, l'outil peut se rabattre sur un modèle de vision, et il le traite en dernier recours : il exécute d'abord l'analyseur de texte ordinaire et n'appelle un modèle que lorsqu'il ne parvient pas à trouver avec certitude des articles admissibles.

Trois fournisseurs sont pris en charge — OpenAI, Gemini et Claude — car un service peut déjà payer l'un et non les autres. On demande au modèle de ne renvoyer que les articles dont il est sûr, chacun avec une description lisible, un total unitaire, un total de ligne et un numéro de page, et d'exclure tout élément incertain plutôt que d'inventer une valeur.

Cette dernière règle est l'essentielle. Un outil qui devine un montant sur une facture douanière est pire qu'un outil qui laisse un vide : le recours à l'IA est donc tenu à la même exigence de prudence que le classificateur par mots-clés — dans le doute, on s'abstient et on laisse un humain voir le vide.

Conçu pour être interrompu

Un lot qui s'exécute sur un dossier volumineux, en pilotant Word pour chaque fichier, finira par en rencontrer un qui bloque. Si cela imposait de reprendre tout le dossier, l'outil serait un handicap précisément sur les traitements pour lesquels il a été conçu.

Il enregistre donc des points de reprise. L'état de chaque fichier source est écrit dans le dossier de sortie au fur et à mesure — traité, ignoré, échoué — aux côtés d'un journal d'événements en ajout seul et d'un CSV par fichier. Relancez sur le même dossier et il reprend là où il s'était arrêté : les fichiers terminés sont laissés tels quels, ceux en échec ou interrompus sont réessayés, et une option force une exécution propre lorsqu'on le souhaite.

C'est la partie ingrate, et c'est ce qui distingue une démonstration d'un outil que le service commercial peut réellement laisser tourner.

Ce que je referais autrement

La dépendance à Word lie l'outil à une machine Windows dotée d'Office. C'était le bon choix là où il s'exécute, mais cela signifie que l'étape d'export ne peut migrer vers un serveur sans changer de moteur — j'isolerais cette frontière plus proprement afin qu'un moteur de rendu sans interface puisse s'y substituer.

Le classificateur repose sur des mots-clés, ce qui est transparent et facile à auditer mais aveugle aux synonymes qu'on ne lui a pas indiqués. Le recours à l'IA compense discrètement ce point sur les scans ; la version honnête de la conception appliquerait le même raisonnement fondé sur un score de confiance au traitement du texte également, plutôt que deux mécanismes distincts pour un même jugement.

Et comme les articles incertains sont exclus par principe, l'outil suppose toujours qu'un humain vérifie ce qu'il a laissé de côté. C'est le comportement par défaut correct, mais le récapitulatif qu'il produit pourrait mieux faire ressortir quelles lignes ont été écartées et pourquoi, afin que cette vérification soit un contrôle de deux minutes plutôt qu'une relecture de l'original.

PythonAutomationpdfplumberpython-docxVision AIWindows