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 ?
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.
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).
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 :
[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
└— < 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.
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 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
3 bonnes pratiques pour démarrer
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.
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.
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