BlogMarch 1, 2026

De 5 minutes à 30 secondes : extraction d'offres de prêt avec OCR et IA

Lucas Negro Castro
De 5 minutes à 30 secondes : extraction d'offres de prêt avec OCR et IA
Chez Réassurez-moi, les conseillers traitent chaque jour des dizaines d'offres de prêt issues de banques différentes. Pour proposer la meilleure assurance emprunteur à un client, il faut d'abord extraire manuellement les données clés du document PDF fourni par la banque — montant, durée, taux, garanties — puis les saisir dans le formulaire de tarification. Ce processus prenait en moyenne 5 minutes par dossier. Multiplié par le nombre de dossiers quotidiens, c'est un volume de travail répétitif, source d'erreurs et peu valorisant pour les conseillers. L'objectif était simple : automatiser cette extraction pour que le formulaire se remplisse seul à partir du PDF.
Les offres de prêt bancaires sont des PDFs hétérogènes : mise en page différente selon chaque banque, données parfois dans des tableaux, parfois en prose, parfois scannées (donc non sélectionnables). Une extraction par regex ou parsing PDF classique ne fonctionnerait pas de manière fiable. Il fallait une solution capable de comprendre le document, pas seulement de le lire.
La première étape consiste à transformer le PDF en texte structuré exploitable, même si le document est scanné. Mistral OCR excelle pour extraire un contenu fidèle, y compris depuis des documents numérisés, avec une bonne gestion des tableaux et de la mise en page.
Typescript
const ocrResult = await mistral.ocr.process({
  model: "mistral-ocr-latest",
  document: {
    type: "document_url",
    documentUrl: pdfUrl,
  },
});

const extractedText = ocrResult.pages
  .map((page) => page.markdown)
  .join("\n\n");
Le résultat est un texte markdown structuré, fidèle à la mise en page originale du document. Le texte extrait est ensuite envoyé à Claude Sonnet 4.6 avec un prompt structuré qui lui demande d'identifier et retourner les champs nécessaires au formulaire.
Typescript
const message = await anthropic.messages.create({
  model: "claude-sonnet-4-6",
  max_tokens: 1024,
  messages: [
    {
      role: "user",
      content: `Voici le contenu d'une offre de prêt immobilier.
Extrais les informations suivantes au format JSON strict :
- montant_pret (number, en euros)
- duree_pret (number, en mois)
- taux_nominal (number, en %)
- type_pret (string: "immobilier" | "consommation" | "professionnel")
- quotite (number, en %)
- date_effet (string, format YYYY-MM-DD)
- garanties (array of strings)

Contenu du document :
${extractedText}`,
    },
  ],
});

const loanData = JSON.parse(extractedContent);
Claude retourne un JSON structuré, prêt à être injecté directement dans le formulaire. Les données extraites sont mappées sur les champs du formulaire de tarification. Le conseiller n'a plus qu'à vérifier et valider — plus à saisir.
Typescript
const formData = {
  montant: loanData.montant_pret,
  duree: loanData.duree_pret,
  taux: loanData.taux_nominal,
  typePret: loanData.type_pret,
  quotite: loanData.quotite,
  dateEffet: loanData.date_effet,
  garanties: loanData.garanties,
};

await fillTarificationForm(formData);
| Métrique | Avant | Après | |---|---|---| | Temps de saisie | ~5 min | ~30 sec | | Taux d'erreur de saisie | ~8% | <1% | | Satisfaction conseillers | — | +40% | Le gain de temps est immédiat, mais le gain en fiabilité est tout aussi important : les erreurs de saisie manuelle (mauvais montant, durée erronée) sont quasi éliminées.
Mistral OCR + Claude est une combinaison redoutable pour ce type de cas d'usage. Mistral gère la partie extraction de texte brut avec une excellente fidélité, même sur des PDFs scannés. Claude prend ensuite le relais pour comprendre le document en contexte et structurer la réponse. Quelques points d'attention :
  • La qualité du prompt est déterminante : spécifier le format JSON attendu et les types de données évite les réponses ambiguës.
  • Prévoir un fallback : sur les documents très dégradés ou atypiques, un mode de saisie manuelle assistée reste nécessaire.
  • Valider côté serveur : le JSON retourné par le LLM doit toujours être validé (Zod ou équivalent) avant injection dans le formulaire.
Ce projet a ouvert la voie à d'autres automatisations chez Réassurez-moi, notamment un MCP (Model Context Protocol) permettant de déclencher une tarification complète directement depuis un LLM, et une App GPT publique accessible depuis ChatGPT. L'IA n'est pas là pour remplacer les conseillers — elle est là pour leur enlever les tâches sans valeur ajoutée, pour qu'ils se concentrent sur ce qui compte vraiment : le conseil et la relation client.
Share this post:
On this page