← Back to all articles

Trois nodes n8n, une archive prête pour la conformité

SealDoc Team · · 6 min read

Le plus difficile dans l’automatisation de la conformité, ce sont rarement les règles. C’est la plomberie qui relie ces règles aux systèmes qui font déjà tourner votre activité. Les règles disent que toute facture B2B doit être dans un format électronique structuré, archivée pendant dix ans, et reliée à une chain of custody infalsifiable. Votre logiciel comptable dit “vous avez une nouvelle pièce jointe dans la boîte partagée”. Faire le pont entre ces deux mondes, c’est là que la plupart des équipes calent.

Ce billet parcourt le plus petit flux de travail qui ferme réellement cet écart, construit avec n8n et le node communautaire n8n-nodes-sealdoc. Trois nodes connectés. Environ 200 lignes de JSON quand vous exportez le flux. Aucun code personnalisé.

Ce que nous construisons

Un flux qui, pour chaque PDF entrant, fait ce qui suit :

  1. Récupère le fichier depuis un trigger de votre choix (boîte mail, dossier surveillé, upload Slack, webhook externe, tout ce que n8n peut écouter).
  2. Le passe à SealDoc, qui le convertit en PDF/A-3, embarque le XML Factur-X à côté de la facture rendue, attache un horodatage RFC 3161, et regroupe le tout dans une archive téléchargeable.
  3. Stocke le résultat là où votre politique de rétention l’exige.

Ce que vous n’avez pas à construire vous-même : la conversion PDF/A-3, l’extraction du XML Factur-X, l’horodatage, la piste d’audit, le hash du manifeste de l’evidence pack, la logique de retry pour l’autorité d’horodatage. L’API de SealDoc fait ce travail derrière un unique endpoint HTTP.

Prérequis

  • Une instance n8n, self-hosted ou n8n Cloud. Le node communautaire fonctionne sur les deux.
  • Un compte SealDoc avec au minimum le plan Starter (les moat-features dont dépend ce flux, custody, horodatages et evidence packs, sont incluses dès Starter).
  • Une clé API SealDoc. Générez-en une dans le dashboard sous API keys, copiez le secret une seule fois (nous ne le réaffichons jamais).

Installez le node communautaire :

npm i n8n-nodes-sealdoc

Redémarrez n8n. Le node SealDoc apparaît désormais sous Nodes avec trois ressources : Job, Validator et Peppol.

Node 1, le trigger

Choisissez le trigger correspondant à l’endroit où vos factures arrivent aujourd’hui. Nous utiliserons Gmail Trigger pour ce parcours car c’est la forme la plus courante que nous rencontrons, mais le pattern est identique pour IMAP, OneDrive, SharePoint, une URL Webhook n8n ou un dossier surveillé.

Configurez le Gmail Trigger pour se déclencher à la réception de nouveaux messages avec une pièce jointe PDF dans un label précis, par exemple incoming-invoices. La sortie de ce node est le PDF binaire dans attachments[0].data.

Node 2, SealDoc Job · Create

Déposez un node SealDoc sur le canvas, mettez Resource sur Job et Operation sur Create. Configurez :

  • File : liez à {{ $binary.attachments_0 }} (le PDF du Node 1).
  • Embed Factur-X : ON. SealDoc détecte automatiquement les champs de la facture et génère le XML structuré ; si le PDF source contient déjà une pièce jointe XML, SealDoc la respecte et la valide plutôt que de l’écraser.
  • Timestamp : ON. Le PDF/A-3 produit portera un horodatage RFC 3161 émis par une TSA que nous opérons, interrogeable plus tard pour prouver à quel moment le document existait.
  • Retention category : choisissez celle que votre droit fiscal impose (la catégorie correspondante au Code de commerce français figure dans le dropdown).

Le node retourne immédiatement avec un jobId et un status à pending. N’attendez pas de manière synchrone ici. Une conversion Factur-X plus horodatage se termine en général en moins de cinq secondes pour une facture normale, mais le traitement PDF n’est pas déterministe, et vous ne voulez pas qu’un PDF de déclaration fiscale lent bloque toute votre file.

Node 3, SealDoc Job · Get

Ajoutez un autre node SealDoc. Mettez Resource sur Job et Operation sur Get. Liez Job ID à {{ $node["SealDoc Create"].json.jobId }}. Enveloppez le node dans la primitive Wait de n8n avec un délai de 2 secondes et un maximum de 10 itérations, en polling jusqu’à ce que status soit completed ou failed.

Quand completed, la réponse contient un downloadUrl valide cinq minutes. L’URL pointe vers le PDF/A-3 converti, désormais conforme Factur-X, horodaté, et enregistré dans notre chain of custody.

Vous obtenez aussi un evidencePackUrl si votre plan inclut les evidence packs. Ce ZIP contient le PDF d’origine, le PDF/A-3 converti, le XML Factur-X, le token RFC 3161, le fichier de hash du manifeste, et un reçu JSON qui énumère chaque étape. Les auditeurs adorent, car c’est autonome et vérifiable hors-ligne ; vous pouvez remettre une copie à un inspecteur des impôts qui pourra valider l’intégrité sans appeler nos serveurs.

Et les erreurs

SealDoc retourne des raisons d’échec structurées dans le champ failureReason. Les quatre que vous verrez en pratique :

  • validation_failed, le PDF source est mal formé ou protégé par mot de passe. À renvoyer à l’équipe qui l’a déposé.
  • unsupported_source, par exemple un PDF réellement chiffré que nous ne pouvons pas ouvrir. À renvoyer à l’expéditeur.
  • timestamp_unavailable, notre TSA a connu une panne. Nous retentons automatiquement ; si le budget de retry s’épuise, le job se termine en failed et vous pouvez le relancer.
  • quota_exceeded, le quota mensuel de jobs de votre plan est atteint. Soit upgrader, soit attendre le reset.

Dans n8n, routez la branche failed du node Get vers une notification Slack ou e-mail pour qu’un humain sache quand quelque chose est réellement bloqué.

Pourquoi trois nodes suffisent

Vous remarquerez que ce flux ne fait lui-même aucune logique de validation, de signature ou d’archivage. C’est le but. L’API SealDoc est la frontière ; votre flux n8n est le tissu conjonctif entre cette frontière et vos systèmes métier. Quand le mandat B2B belge entrera en vigueur, vous n’aurez pas à reconstruire ce flux. Quand l’obligation française de septembre 2026 démarrera, vous n’aurez pas à le reconstruire. Quand le régulateur mettra à jour le profil Factur-X en 2027, vous mettrez à jour la version du node SealDoc.

C’est la valeur du pattern connecteur : la friction réglementaire vit dans notre codebase, pas dans la vôtre.

Au-delà de n8n

Si vous n’utilisez pas n8n, chaque opération de ce tutoriel est aussi disponible directement via l’API REST de SealDoc, ou via Webhooks si vous préférez les notifications push au polling. Le menu complet vit sur notre page d’intégrations, avec des exemples copiables pour chaque surface. Les connecteurs Make, Zapier et Exact Online sont en cours de construction active ; si votre stack en utilise un, écrivez-nous pour un accès anticipé.

La plomberie de la conformité est résolue. Ce que vous faites du temps gagné, c’est à vous de voir.


← Back to all articles