Étude de cas · IA utile & BTP

Moulinette : rendre du temps aux équipes du bâtiment grâce à l’IA utile

Une plateforme interne rassemble des calculateurs métier, des traitements documentaires et des utilitaires quotidiens afin de réduire les ressaisies et laisser les professionnels se concentrer sur le contrôle et la décision.

Node.jsPythonOCR localPDFExcelFactur-XDocker / systemd

Dans une entreprise du bâtiment, une part importante du temps ne disparaît pas dans les grands projets, mais dans une succession de petites opérations : recalculer une quantité, extraire le texte d'un PDF, vérifier une TVA, convertir des fichiers, préparer une facture électronique ou rechercher un indice de révision de prix.

Pris séparément, chacun de ces gestes semble anodin. Répétés chaque semaine par plusieurs collaborateurs, ils représentent pourtant des heures de travail à faible valeur ajoutée, des changements constants d'outil et autant d'occasions d'introduire une erreur.

Moulinette est née de ce constat. Cette application interne rassemble dans une interface unique des calculateurs métier, des traitements documentaires et des outils de production courante. Son objectif n'est pas de remplacer les équipes, mais de leur rendre du temps pour contrôler, décider, conseiller et exercer leur savoir-faire.

Le projet en bref

ÉlémentRéponse apportée
ContexteÉquipe BTP et patrimoine confrontée à des tâches numériques répétitives et dispersées
ProblèmeMultiplication des fichiers, ressaisies, calculs manuels et outils isolés
SolutionUne plateforme Web interne réunissant calculs métier, OCR, PDF, Excel, Factur-X, indices BTP et utilitaires
PrincipeAutomatiser la préparation, conserver la validation humaine
ArchitectureFrontend Web léger, serveur Node.js, moteurs Python locaux, API HTTP authentifiée
DéploiementLinux, Docker ou service systemd derrière un reverse proxy HTTPS
DonnéesTraitement principalement local, fichiers temporaires supprimés après opération

Le point de départ : trop de temps perdu entre les outils

Avant une plateforme unifiée, un collaborateur peut devoir ouvrir un tableur pour un calcul, chercher un convertisseur en ligne, lancer un logiciel PDF, recopier le résultat dans un autre document, puis recommencer pour le dossier suivant.

Ce fonctionnement crée plusieurs coûts invisibles :

  • du temps de navigation et de ressaisie ;
  • une dépendance à des services en ligne disparates ;
  • des méthodes de calcul qui varient d'une personne à l'autre ;
  • des erreurs de transcription difficiles à repérer ;
  • une perte de traçabilité sur les hypothèses utilisées ;
  • une charge mentale disproportionnée par rapport à la valeur de la tâche.

Moulinette transforme ces micro-frictions en parcours courts et reproductibles. L'utilisateur fournit les paramètres ou les fichiers, l'application prépare le résultat, puis le professionnel vérifie et décide de son utilisation.

Une IA qui assiste les équipes au lieu de les remplacer

Le projet illustre une approche pragmatique de l'IA. Il ne cherche pas à confier une décision métier à un agent autonome. Il combine trois niveaux complémentaires :

  1. Développement assisté par IA : l'IA accélère l'exploration, le prototypage, l'écriture des tests et l'amélioration successive des modules.
  2. Automatisation et reconnaissance documentaire : l'OCR transforme un PDF scanné en texte exploitable et aide à préremplir certaines informations.
  3. Règles métier explicites : les calculs thermiques, métrés, TVA et révisions de prix reposent sur des formules lisibles, testables et modifiables.

Cette séparation est essentielle. L'IA et l'automatisation préparent le travail ; elles ne remplacent ni le diagnostic d'un bâti ancien, ni la validation d'une facture, ni l'interprétation d'un marché public.

La valeur n'est pas de supprimer le rôle humain, mais de supprimer une partie de l'attente, de la ressaisie et des manipulations répétitives qui entourent ce rôle.

Ce que Moulinette fait concrètement

Calculs métier

  • résistance thermique de pierres, terres et bétons de chanvre, avec lambda modifiable ;
  • métrés chaux-chanvre et ouvertures ;
  • enduits à la chaux et rejointoiement de pierre ;
  • taille de pierre, échafaudage et évacuation de gravats ;
  • déboursé sec et calcul de prix de vente ;
  • calcul de TVA classique ou inversé ;
  • estimation du coût salarié à partir du brut mensuel ou horaire ;
  • actualisation et révision de prix selon une formule de marché et un indice BT.

Documents et fichiers

  • conversion d'images au format WebP ;
  • extraction de texte d'un PDF natif ou scanné ;
  • OCR local avec Poppler et Tesseract sous Linux ;
  • ajout d'un filigrane personnalisable sur un PDF ;
  • traitement groupé de protections PDF et Excel lorsque les conditions d'accès sont réunies ;
  • préparation de documents Factur-X au profil EN16931 ;
  • export de plusieurs résultats dans une archive ZIP.

Utilitaires quotidiens

  • génération et lecture de QR Codes ;
  • intégration d'un logo dans un QR Code avec correction d'erreur élevée ;
  • conversion de nombres en lettres ;
  • génération de mots de passe ;
  • glisser-déposer sur les zones de fichiers.

Où se situe le gain de temps ?

Le gain vient moins d'une fonction spectaculaire que de l'enchaînement fluide de nombreuses opérations courtes.

TâcheAvantAvec MoulinetteCe que l'humain conserve
Extraire un PDF scannéRecherche d'un outil, import, copie du texteDépôt du PDF, OCR et restitution du texteRelecture et correction du contenu
Préparer une facture Factur-XRessaisie de nombreuses donnéesAnalyse, préremplissage et génération structuréeValidation des champs et des montants
Réviser un prix BTPRecherche de l'indice et calcul manuelSélection de l'indice, récupération ou saisie, application de la formuleChoix de la règle contractuelle et contrôle du résultat
Réaliser un métréTableurs ou calculatrice séparéeFormulaire métier et résultat instantanéMesures, hypothèses et validation chantier
Traiter plusieurs fichiersOpération répétée fichier par fichierDépôt multiple et export groupéSélection des documents et contrôle final
Produire un QR Code de marqueOutil externe et retouchesGénération, styles, couleurs et logo dans la même interfaceChoix graphique et test de lecture

Un exemple de calcul de ROI

Les gains réels doivent être mesurés sur les usages de l'équipe. Une simulation simple permet néanmoins d'en comprendre l'ordre de grandeur.

Si une automatisation économise 8 minutes sur une opération réalisée 20 fois par semaine, elle restitue environ :

8 minutes × 20 opérations × 52 semaines = 8 320 minutes
8 320 minutes ÷ 60 = environ 139 heures par an

Ces 139 heures ne correspondent pas à un poste supprimé. Elles peuvent être réinvesties dans la relation client, la préparation des chantiers, la qualité documentaire, le contrôle des devis ou l'accompagnement des équipes.

Une architecture simple, locale et évolutive

flowchart LR
    U[Collaborateur] --> UI[Interface Web responsive]
    UI --> B[Outils exécutés dans le navigateur]
    UI --> API[API Node.js authentifiée]
    API --> M[Modules métier JavaScript]
    API --> P[Scripts Python locaux]
    P --> OCR[Poppler et Tesseract]
    P --> DOC[PDF, Excel et Factur-X]
    API --> INSEE[API Insee pour les indices BT]
    API --> TMP[Stockage temporaire]
    TMP --> CLEAN[Suppression après traitement]

Frontend

L'interface est réalisée en HTML, CSS et JavaScript sans framework lourd. Elle reste responsive, lisible sur mobile et organisée par outils. Certains traitements, comme la TVA, les conversions simples, les QR Codes ou plusieurs calculateurs, sont exécutés directement dans le navigateur.

Backend Node.js

Le serveur Node.js :

  • sert l'interface ;
  • gère la connexion et la session ;
  • expose l'API métier ;
  • valide les entrées et les fichiers ;
  • orchestre les traitements Python ;
  • renvoie du JSON, des PDF ou des archives ZIP selon l'opération.

Moteurs Python locaux

Python prend en charge les opérations documentaires spécialisées avec notamment pypdf, openpyxl, msoffcrypto-tool, reportlab et Pillow. Poppler et Tesseract complètent l'ensemble pour l'OCR des documents scannés.

Ce choix évite de transmettre automatiquement les documents métier à une plateforme d'IA externe. Il facilite également le déploiement sur une infrastructure Linux maîtrisée par l'entreprise.

L'API de Moulinette

L'API actuelle est une API interne, non versionnée, destinée à l'interface Moulinette. Elle utilise une session par cookie HTTP. À l'exception de la connexion, de l'état de session et du contrôle de santé, les routes métier nécessitent une authentification.

Principales routes

MéthodeRouteUsageFormat principal
GET/healthzÉtat de santé, version et durée de fonctionnementJSON
GET/api/sessionVérification de la session couranteJSON
POST/api/loginOuverture d'une sessionJSON
POST/api/logoutFermeture de la sessionJSON
GET/api/materialsMatériaux et lambdas du calcul thermiqueJSON
POST/api/calculateCalcul de résistance thermiqueJSON
GET/api/btp-indexRecherche d'un indice BT pour un mois donnéJSON
POST/api/unlock-pdfsTraitement groupé de PDFmultipart/form-data, ZIP en sortie
POST/api/pdf-ocrExtraction de texte et OCRmultipart/form-data, JSON en sortie
POST/api/pdf-watermarkApplication d'un filigranemultipart/form-data, PDF en sortie
POST/api/unlock-excelsTraitement groupé de classeursmultipart/form-data, ZIP en sortie
POST/api/facturx/analyzeAnalyse et préremplissage d'une facturemultipart/form-data, JSON en sortie
POST/api/facturx/generateGénération du PDF Factur-XJSON, PDF en sortie
GET/api/facturx/document/:idPrévisualisation temporaire du PDF sourcePDF

Exemple : ouverture de session

Les identifiants ne doivent pas être inscrits dans un client public. Ils sont configurés côté serveur avec les variables d'environnement APP_USERNAME et APP_PASSWORD.

curl -c cookies.txt \
  -H "Content-Type: application/json" \
  -d '{"username":"<utilisateur>","password":"<mot-de-passe>"}' \
  http://localhost:5000/api/login

Exemple : calcul thermique

curl -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{"thickness":30,"unit":"cm","lambda":0.075}' \
  http://localhost:5000/api/calculate

Réponse simplifiée :

{
  "result": {
    "thicknessMeters": 0.3,
    "lambda": 0.075,
    "resistance": 4,
    "transmittance": 0.25
  }
}

Exemple : recherche d'un indice BT

curl -b cookies.txt \
  "http://localhost:5000/api/btp-index?code=BT01&month=2026-01"

Lorsque l'indice ou le mois n'est pas disponible en ligne, l'interface laisse l'utilisateur saisir la valeur manuellement. L'automatisation accélère la recherche sans masquer l'exception métier.

Exemple : OCR d'un PDF

curl -b cookies.txt \
  -F "pdf=@document.pdf" \
  -F "password=" \
  http://localhost:5000/api/pdf-ocr

Le moteur tente d'abord d'extraire la couche texte. Pour un scan image, il utilise Poppler et Tesseract lorsque ces composants sont disponibles.

Exemple : parcours Factur-X

Le parcours Factur-X se déroule volontairement en deux temps :

  1. /api/facturx/analyze extrait les informations et renvoie un brouillon modifiable ;
  2. le collaborateur vérifie les champs et les lignes de facture ;
  3. /api/facturx/generate valide les données, construit factur-x.xml au profil EN16931 et l'embarque dans le PDF.

Cette étape de validation humaine est un choix de conception, pas une limitation à contourner.

Sécurité et confidentialité

Moulinette privilégie un traitement local et temporaire :

  • les routes métier sont protégées par une session ;
  • le cookie de session est HttpOnly et SameSite=Lax ;
  • la taille maximale d'envoi est configurable avec MAX_UPLOAD_MB ;
  • les dossiers temporaires sont supprimés après les traitements ;
  • les PDF Factur-X en cours sont conservés en mémoire pendant une heure au maximum ;
  • les réponses documentaires utilisent Cache-Control: no-store lorsque nécessaire ;
  • les fichiers ne sont pas transmis à une API d'IA externe par défaut.

Pour une exposition au-delà d'un intranet, plusieurs renforcements sont recommandés : comptes individuels, gestion des rôles, journal d'audit, protection contre les tentatives répétées, rotation des secrets, HTTPS obligatoire, analyse antivirus des dépôts et politique de conservation formalisée.

Déploiement en production

L'application est conçue pour fonctionner sous Linux avec :

  • Node.js 20 ;
  • Python 3 et un environnement virtuel ;
  • Poppler et Tesseract pour l'OCR ;
  • Nginx, Caddy ou Traefik comme reverse proxy HTTPS ;
  • un service systemd ou un conteneur Docker ;
  • un endpoint /healthz pour la supervision.

Le dépôt fournit un Dockerfile, un exemple de service systemd et une configuration Nginx. Les délais du proxy sont adaptés aux traitements OCR longs et la limite d'envoi peut être alignée avec celle de l'application.

Les avantages du projet

Pour les équipes

  • moins de ressaisies et de changements d'outil ;
  • des opérations groupées sur plusieurs fichiers ;
  • une interface commune et cohérente ;
  • des calculs reproductibles ;
  • davantage de temps consacré au contrôle et au conseil ;
  • une adoption facilitée par des parcours courts et spécialisés.

Pour l'entreprise

  • centralisation d'outils auparavant dispersés ;
  • capitalisation des règles métier ;
  • réduction des erreurs de manipulation ;
  • meilleure maîtrise des documents sensibles ;
  • déploiement possible sur une infrastructure interne ;
  • évolution progressive, module par module.

Pour la direction technique

  • architecture lisible et peu dépendante de services externes ;
  • séparation entre interface, règles métier et traitements documentaires ;
  • tests automatisés sur les calculs principaux ;
  • API réutilisable par d'autres interfaces internes ;
  • déploiement reproductible avec Docker ou systemd.

Les limites font partie du produit

Une application responsable explique aussi ce qu'elle ne fait pas :

  • l'OCR peut confondre des caractères et doit être relu ;
  • les valeurs thermiques sont indicatives et doivent être adaptées au matériau réel ;
  • une formule de révision de prix doit correspondre au marché concerné ;
  • un mot de passe d'ouverture chiffré inconnu n'est pas contourné ;
  • les anciens fichiers Excel .xls nécessitent un environnement compatible ou une conversion ;
  • un document Factur-X doit être validé avant émission ;
  • les calculateurs assistent l'estimation mais ne remplacent ni le relevé, ni l'étude, ni la responsabilité professionnelle.

Cette transparence renforce la confiance : l'utilisateur sait où l'outil accélère le travail et où son jugement reste indispensable.

Comment mesurer le succès

Le suivi peut reposer sur quelques indicateurs simples :

  • durée moyenne avant et après automatisation pour chaque tâche ;
  • nombre d'opérations réalisées par semaine ;
  • taux de correction nécessaire après OCR ou préremplissage ;
  • nombre de fichiers traités en lot ;
  • erreurs évitées ou détectées avant livraison ;
  • taux d'utilisation par module ;
  • disponibilité du service ;
  • satisfaction des collaborateurs ;
  • temps réinvesti dans des activités métier à plus forte valeur.

L'indicateur le plus important n'est pas le nombre de clics automatisés. C'est la capacité de l'équipe à consacrer davantage de temps à la qualité, au client et au chantier.

Pourquoi ce cas est représentatif d'une IA utile

Moulinette ne cherche pas à impressionner par une démonstration abstraite. Elle part de situations concrètes, parfois modestes, mais répétées chaque jour. Son intérêt vient de l'assemblage : calculs fiables, automatisation documentaire, OCR local, API métier et interface adaptée aux usages réels.

Ce projet montre qu'une transformation par l'IA peut être progressive, sobre et profondément humaine. L'entreprise ne demande pas à la machine de devenir experte à la place de ses collaborateurs. Elle lui confie la préparation, la répétition et la mise en forme afin que les professionnels restent concentrés sur ce qu'ils font de mieux : comprendre le contexte, arbitrer et agir.

Une bonne automatisation ne retire pas l'humain du processus. Elle lui rend de l'espace dans le processus.

Projet similaire

Transformer un processus métier en système exploitable

CagedMonster peut cadrer les données, les règles métier, les contrôles et la place utile d’une IA locale ou hébergée.

Décrire votre processus