← Retour à tous les articles

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

SealDoc Team · · 6 min de lecture

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 qu’une facture doit rester lisible, authentique et intacte pendant toute la durée de conservation, avec une trace de ce qui lui est arrivé. Votre boîte mail dit “vous avez une nouvelle pièce jointe”. Faire le pont entre ces deux mondes, c’est là que la plupart des équipes calent.

Ce billet parcourt le plus petit flux qui comble cet écart, construit avec n8n et le node communautaire n8n-nodes-sealdoc. Trois nodes connectés, zéro code personnalisé.

Ce que nous construisons

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

  1. Récupère le fichier depuis le trigger de votre choix : une boîte mail, un upload Slack, un drive cloud, un webhook externe, tout ce que n8n peut écouter.
  2. Le confie à SealDoc, qui le convertit en PDF/A-3, vérifie la conformité PDF/A, demande un horodatage RFC 3161 et enregistre chaque étape dans une piste d’audit à chaîne de hachage.
  3. Stocke le résultat là où votre politique de rétention l’exige.

Ce que vous ne construisez pas vous-même : la conversion PDF/A-3, l’horodatage et ses nouvelles tentatives, la piste d’audit, l’evidence pack. SealDoc fait ce travail derrière un seul appel API.

Prérequis

  • Une instance n8n self-hosted avec les nodes communautaires activés.
  • Un espace de travail SealDoc sur le plan Starter ou supérieur. C’est à partir de Starter que commencent les horodatages et les evidence packs, et ce flux s’appuie sur les deux. Consultez les tarifs.
  • Une clé API SealDoc, créée dans l’application SealDoc sous Integration → API Keys. Copiez-la immédiatement : elle n’est affichée qu’une seule fois.

Installez le node dans n8n via Settings → Community nodes → Install, avec le nom de paquet n8n-nodes-sealdoc. Si vous installez plutôt vos nodes à la main, exécutez ceci dans votre dossier de nodes n8n (généralement ~/.n8n/nodes), puis redémarrez n8n :

npm i n8n-nodes-sealdoc

Créez l’identifiant via Credentials → New → SealDoc API et collez votre clé dans API Key. Le node SealDoc propose alors cinq ressources : Document, Invoice, Job, Peppol Check et Validator. Ce flux utilise Job.

Node 1, le trigger

Choisissez le trigger qui correspond à l’endroit où vos factures arrivent aujourd’hui. Nous utilisons ici le Gmail Trigger, car c’est un point de départ courant ; le pattern est identique pour IMAP, OneDrive, une URL Webhook n8n ou toute autre source qui livre un fichier.

Configurez le Gmail Trigger pour qu’il se déclenche à chaque nouveau message sous un label tel que incoming-invoices, et activez Download Attachments. n8n place alors la première pièce jointe dans la propriété binaire attachment_0.

Node 2, SealDoc · Job · Create

Ajoutez un node SealDoc, renommez-le Archive, puis mettez Resource sur Job et Operation sur Create :

  • Input Binary Field : attachment_0. C’est le nom de la propriété binaire issue du Node 1, saisi en texte brut.
  • Run OCR : facultatif. Activez-le pour les documents scannés, afin que le PDF/A-3 reçoive une couche de texte interrogeable.

L’horodatage ne demande aucun réglage : sur un plan Starter ou supérieur, SealDoc demande un horodatage RFC 3161 pour chaque job.

Le node envoie le fichier et rend la main immédiatement avec l’ID du job :

{ "jobId": "8b1e4c3a-2f7d-4e9a-b6c5-0d4f2a7e9c13" }

La conversion s’exécute en arrière-plan : un PDF lent ne bloque jamais votre file.

Node 3, SealDoc · Job · Get

Ajoutez un node Wait de quelques secondes, puis un autre node SealDoc avec Resource Job, Operation Get et Job ID {{ $('Archive').item.json.jobId }}. Faites-le suivre d’un node IF sur status :

  • queued ou processing : bouclez vers le node Wait. Gardez un compteur dans la boucle, pour qu’un job bloqué ne puisse pas la faire tourner indéfiniment.
  • completed : le PDF/A-3 est prêt.
  • failed : envoyez le job vers la route d’erreur décrite plus bas.

Un job terminé présente ses preuves dans la réponse : timestampedAt et timestampTokenBase64 pour l’horodatage, outputHash pour le résultat, isPdfACompliant pour le contrôle de conformité.

Pour récupérer le fichier, ajoutez un node HTTP Request : GET https://api.sealdoc.eu/api/download/{{ $json.id }}, avec Header Auth (X-Api-Key et votre clé) et Response Format File. Transmettez-le ensuite à votre node de stockage.

Chaque job dispose aussi d’un Legal Evidence Pack : GET /api/jobs/{id}/evidence-pack, avec le même en-tête. Ce ZIP contient toujours compliance_passport.json, MANIFEST.json et manifest.sha256, ainsi que, lorsqu’ils existent, le document, chain_of_custody.json, ledger.json avec public-keys.jwk, et le token RFC 3161 timestamp_token.tsr. Il est autonome et vérifiable hors ligne : un inspecteur des impôts peut en contrôler l’intégrité sans appeler nos serveurs. SealDoc l’assemble juste après le job ; demandez-le dans les tout premiers instants et l’API répond 409 avec un en-tête Retry-After.

Et les erreurs

Deux sortes, à deux moments :

  • À la soumission. Un fichier manquant ou des langues OCR invalides donnent un 400, un plan sans la fonctionnalité donne un 402, et une limite mensuelle épuisée donne un 409 quota_reached. Dans ces cas, aucun job n’est créé et le node SealDoc arrête le flux. Réglez son paramètre On Error pour continuer avec une sortie d’erreur si vous voulez router ces cas.
  • Pendant le traitement. Le job se termine avec le statut failed, et errorMessage en donne la raison, par exemple un fichier impossible à ouvrir. Routez la branche failed de votre node IF vers Slack ou un e-mail, pour qu’une personne sache que quelque chose demande son attention.

Une autorité d’horodatage qui ne répond pas ne fait pas échouer le job. Le job se termine, et compliance.rfc3161Timestamp dans la réponse de Get indique si l’horodatage est présent.

Pourquoi trois nodes suffisent

Ce flux ne contient aucune logique propre de conversion, d’horodatage ou d’archivage. C’est tout l’intérêt. L’API de SealDoc est la frontière ; votre flux n8n est le tissu conjonctif entre cette frontière et vos systèmes métier. Quand les règles ou les formats évoluent, SealDoc évolue derrière le même appel API, et vous mettez à jour la version du node.

Ce flux archive les documents que vous recevez. Pour les factures que vous envoyez, le même node propose la ressource Invoice, qui transforme des données structurées en facture Factur-X, XRechnung ou Peppol BIS. Voir comment générer une facture électronique conforme avec n8n.

Au-delà de n8n

Tout ce que couvre ce tutoriel est aussi disponible directement via l’API REST de SealDoc. À partir du plan Growth, les webhooks poussent job.processing, job.completed et job.failed vers votre propre endpoint, et vous pouvez supprimer entièrement la boucle de polling. Toutes les façons de se connecter sont sur notre page d’intégrations.

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


← Retour à tous les articles