Ce qui prend du temps n’est pas ce qu’on croit
Le remplissage lui-même dure dix minutes. La relecture en dure autant, et elle est mécanique : vérifier que le nom du client précédent n’est pas resté en page trois, que le montant a bien été changé partout, que la date d’effet correspond.
Cette relecture-là est un aveu. On ne relit pas parce que le document est complexe, on relit parce que la méthode — dupliquer le dernier document et modifier ce qui change — produit structurellement ce type d’erreur.
Et quand elle échoue, le coût n’est pas de dix minutes. Un contrat envoyé avec le nom d’un autre client est un problème commercial. Une attestation avec une mauvaise période est un problème administratif qui revient six mois plus tard.
Ce qu’on automatise
La récupération des données. Depuis votre CRM, votre logiciel de gestion, un tableur, ou le formulaire que quelqu’un vient de remplir. Une seule source par donnée, jamais deux.
Le remplissage. Champs simples, tableaux à nombre de lignes variable, montants calculés, dates dérivées les unes des autres.
Les variations conditionnelles. Clauses optionnelles, annexes, mentions obligatoires qui dépendent du cas.
La conversion et le nommage. PDF, format éditable, nom de fichier selon votre convention.
Le rangement et l’envoi. Dans le dossier du client, et en pièce jointe d’un message préparé — préparé, pas envoyé, tant que vous n’avez pas décidé que ce type de document part seul.
Comment ça marche techniquement — pour qui veut le détail
Le format du modèle. Un fichier .docx est une archive ZIP contenant du XML. On peut donc y injecter des données sans passer par Word, et sans serveur Windows. Les bibliothèques de type docxtemplater (Node) ou python-docx-template (Python, moteur Jinja2) traitent les balises {nom_client}, les boucles {#lignes}…{/lignes} et les conditions {#si_clause}…{/si_clause} directement dans le XML, en préservant la mise en forme d’origine.
Le PDF. Trois voies, par ordre de robustesse décroissante. LaTeX ou Typst quand la mise en page est stable et qu’on veut un rendu typographique irréprochable et parfaitement reproductible. HTML rendu par un navigateur sans interface — Chromium via Playwright, page.pdf() — quand le document ressemble à une page web ou qu’on veut réutiliser une charte CSS. LibreOffice en mode headless (soffice --convert-to pdf) quand on part d’un .docx et qu’on veut garder le modèle Word comme source de vérité. Cette dernière voie est la plus simple à mettre en place et la plus sensible aux polices : il faut les installer dans le conteneur, sinon les substitutions décalent la mise en page.
Les polices et la reproductibilité. Le conteneur qui produit les documents embarque ses polices. C’est une contrainte qu’on découvre toujours trop tard : le même modèle produit deux rendus différents sur deux machines si les polices diffèrent.
La validation avant production. Un schéma de données — Zod, Pydantic, JSON Schema — décrit ce qu’un document exige : champs obligatoires, formats, cohérences (date de fin postérieure à la date de début, total égal à la somme des lignes). Si la validation échoue, aucun fichier n’est écrit. C’est ce qui garantit qu’on ne produit jamais un document troué.
Les montants et les dates. Les montants se manipulent en entiers de centimes, jamais en flottants — 0.1 + 0.2 ne vaut pas 0.3 en virgule flottante, et un centime d’écart sur une facture est une conversation pénible. Les dates se stockent en ISO 8601 avec fuseau explicite et se formatent au dernier moment, à l’affichage.
L’archivage à valeur probante. Quand le document doit tenir dans le temps, on vise le profil PDF/A, on incorpore les polices, et on stocke une empreinte SHA-256 du fichier produit avec les données qui ont servi à le produire. On peut alors rejouer la génération des années plus tard et prouver que le document n’a pas bougé.
L’orchestration. Un flux n8n déclenché par un webhook, un changement de statut dans le CRM ou un dépôt de formulaire ; appel du service de génération ; dépôt du fichier ; journalisation en PostgreSQL de l’identifiant du dossier, de la version du modèle utilisée et de l’empreinte produite. La version du modèle compte : savoir quel document a été produit avec quelle version des conditions générales est exactement le genre de question qu’on se pose en litige.