Automatisation IA avec Mistral : extraire 500 factures par semaine sans toucher à l’ERP

Et si votre service comptabilité n’avait plus à saisir manuellement une seule facture fournisseur ? C’est exactement ce qu’une ETI industrielle de 80 personnes a mis en place en moins de trois semaines, grâce à l’API Mistral. Voici comment.

Le problème : 4 heures par jour perdues sur la saisie de factures

Notre client — une ETI du secteur agroalimentaire — reçoit en moyenne 120 factures fournisseurs par semaine. PDF scannés, e-mails avec pièces jointes, formats hétérogènes selon les fournisseurs. Une assistante comptable passait chaque matin près de 4 heures à extraire manuellement les données (fournisseur, montant HT, TVA, numéro de facture, date d’échéance) pour les saisir dans leur ERP.

Les erreurs de saisie représentaient environ 3 % des factures, soit des litiges réguliers avec les fournisseurs. L’objectif : automatiser l’extraction et la pré-saisie à 95 % de fiabilité minimum, avec un humain qui valide uniquement les cas ambigus.

Pourquoi Mistral plutôt qu’un autre modèle ?

🇫🇷 Souveraineté des données

Les données financières ne quittent pas le territoire européen. Hébergement certifié, conformité RGPD native. Décisif pour les données comptables.

⚡ Performance documents

Mistral Large excelle sur l’extraction d’entités nommées et la compréhension de tableaux dans des PDFs mixtes (natifs et scannés).

💶 Coût prévisible

Tarification à l’usage (tokens). Mistral Small utilisable sur les cas simples. Budget mensuel maîtrisable même à 500 factures/semaine.

Le cas d’usage : extraction automatique de factures fournisseurs

Architecture du flux

Le pipeline fonctionne sans intervention humaine pour 95 % des factures :

# Flux automatisé — Traitement factures fournisseurs

[E-mail / Google Drive]
    → Détection nouvelle pièce jointe (n8n / Make)
    → Extraction texte PDF (pdfplumber + Tesseract OCR)
    → Appel API Mistral Large (extraction JSON structurée)
    → Lecture score « confiance »
        ├— ≥ 0.95 → Pré-saisie automatique ERP
        &#x2514;— < 0.95 → File de validation humaine (Slack alert)

Le prompt d’extraction — version production

Le cœur du système : un prompt structuré envoyé à Mistral avec le contenu brut de la facture.

# extraction_facture.py

from mistralai import Mistral
import json

client = Mistral(api_key=« votre_clé_api_mistral »)

SYSTEM_PROMPT = «  » »
Tu es un assistant spécialisé dans l extraction de factures.
Extrait les champs suivants et retourne UNIQUEMENT un JSON valide,
sans texte avant ni après.

Format JSON attendu :
{
  « fournisseur »: « Nom société émettrice »,
  « siret »: « SIRET ou null »,
  « numero_facture »: « référence »,
  « date_facture »: « YYYY-MM-DD »,
  « date_echeance »: « YYYY-MM-DD ou null »,
  « montant_ht »: 0.00,
  « taux_tva »: 20.0,
  « montant_ttc »: 0.00,
  « devise »: « EUR »,
  « confiance »: 0.95
}
Le champ « confiance » est ton estimation de fiabilité (0 à 1).
«  » »

def extraire_facture(texte: str) -> dict:
    response = client.chat.complete(
        model=« mistral-large-latest »,
        messages=[
            {« role »: « system », « content »: SYSTEM_PROMPT},
            {« role »: « user », « content »: texte}
        ],
        temperature=0,  # Déterministe = fiable
        response_format={« type »: « json_object »}
    )
    return json.loads(response.choices[0].message.content)

# Exemple d utilisation
data = extraire_facture(texte_brut_facture)
if data[« confiance »] >= 0.95:
    envoyer_vers_erp(data)  # Automatique
else:
    envoyer_vers_validation(data)  # Humain dans la boucle

Extraction texte depuis PDF scanné

Pour les PDF scannés (images), on ajoute une étape OCR avant l’envoi à Mistral :

import pdfplumber
import pytesseract
from pdf2image import convert_from_path

def extraire_texte_pdf(chemin: str) -> str:
    # 1. Essayer extraction texte native
    with pdfplumber.open(chemin) as pdf:
        texte =  » « .join(p.extract_text() or «  » for p in pdf.pages)

    # 2. Si vide → PDF image → OCR Tesseract
    if len(texte.strip()) < 50:
        images = convert_from_path(chemin, dpi=300)
        texte = « \n ».join(
            pytesseract.image_to_string(img, lang=« fra »)
            for img in images
        )
    return texte

Résultats après 6 semaines en production

97,4%
de factures traitées automatiquement
3h45
économisées chaque jour
0,3%
d’erreurs résiduelles (vs 3% avant)
~90€
de coût API/mois pour 500 factures/semaine

3 bonnes pratiques pour démarrer

1
Toujours mettre temperature=0 pour l’extraction

L’extraction ne demande aucune créativité. À 0, le modèle est déterministe : mêmes données en entrée = mêmes données en sortie. Les hallucinations chutent drastiquement.

2
Forcer le mode json_object

Mistral garantit alors une sortie JSON valide. Fini les parsers fragiles basés sur des regex. json.loads() ne plante plus jamais en production.

3
Demander un score de confiance dans le prompt

Inclure un champ "confiance" que le modèle auto-évalue permet de router automatiquement les cas ambigus vers une validation humaine. Simple à implémenter, très efficace en production.

Ce qu’on retient

Ce projet illustre la philosophie d’une automatisation IA réussie : un cas d’usage précis, une mesure claire du gain, un humain dans la boucle pour les exceptions. Pas de refonte de l’ERP, pas de big-bang à 6 mois.

Mistral s’impose ici comme le choix naturel pour les PME et ETI françaises soucieuses de la confidentialité de leurs données financières — avec des performances et un coût qui rendent le ROI quasi immédiat.

Vous avez un processus similaire ?

On identifie vos cas d’usage automatisables gratuitement

Diagnostic gratuit · Sans engagement · Réponse sous 24h

Demander un diagnostic

Retour en haut