Drie n8n-nodes, één compliance-klaar archief
Het lastigste aan compliance-automatisering zijn zelden de regels. Het is de loodgieterij die de regels verbindt met de systemen waarop je bedrijf al draait. De regels zeggen dat een factuur de hele bewaartermijn leesbaar, authentiek en integer moet blijven, met een vastlegging van wat ermee is gebeurd. Je mailbox zegt “je hebt een nieuwe bijlage”. Die twee werelden overbruggen, daar lopen de meeste teams vast.
Dit artikel loopt door de kleinste werkstroom die dat gat dicht, gebouwd met n8n en de community-node n8n-nodes-sealdoc. Drie verbonden nodes, geen regel eigen code.
Wat we bouwen
Een werkstroom die met elke binnenkomende pdf het volgende doet:
- Pakt het bestand op via een trigger naar keuze: een mailbox, een Slack-upload, een clouddrive, een externe webhook, alles waar n8n naar kan luisteren.
- Geeft het door aan SealDoc, dat het omzet naar PDF/A-3, de PDF/A-conformiteit controleert, een RFC 3161-tijdstempel aanvraagt en elke stap vastlegt in een hashgekoppelde audittrail.
- Slaat het resultaat op waar je bewaarbeleid zegt dat het hoort.
Wat je niet zelf bouwt: de PDF/A-3-conversie, het tijdstempelen met de herhaalpogingen die erbij horen, de audittrail, het evidence pack. SealDoc doet dat werk achter één API-aanroep.
Vereisten
- Een zelfgehoste n8n-instantie met community-nodes ingeschakeld.
- Een SealDoc-werkruimte op het Starter-plan of hoger. Vanaf Starter zitten tijdstempels en evidence packs erin, en deze werkstroom leunt op allebei. Zie de prijzen.
- Een SealDoc-API-sleutel, aangemaakt in de SealDoc-app onder Integration → API Keys. Kopieer hem meteen: hij wordt maar één keer getoond.
Installeer de node in n8n via Settings → Community nodes → Install, met de pakketnaam n8n-nodes-sealdoc. Installeer je nodes liever met de hand, voer dan dit uit in je n8n-nodesmap (meestal ~/.n8n/nodes) en herstart n8n:
npm i n8n-nodes-sealdoc
Maak de credential aan via Credentials → New → SealDoc API en plak je sleutel in API Key. De SealDoc-node biedt nu vijf resources: Document, Invoice, Job, Peppol Check en Validator. Deze werkstroom gebruikt Job.
Node 1, de trigger
Kies de trigger die past bij waar je facturen vandaag binnenkomen. Wij gebruiken hier de Gmail Trigger, omdat dat een gangbaar startpunt is; het patroon is hetzelfde voor IMAP, OneDrive, een n8n Webhook URL of elke andere bron die een bestand aanlevert.
Stel de Gmail Trigger zo in dat hij afgaat bij nieuwe berichten onder een label zoals incoming-invoices, en zet Download Attachments aan. n8n zet de eerste bijlage dan in de binaire property attachment_0.
Node 2, SealDoc · Job · Create
Voeg een SealDoc-node toe, hernoem hem naar Archive en zet Resource op Job en Operation op Create:
- Input Binary Field:
attachment_0. Dat is de naam van de binaire property uit Node 1, getypt als gewone tekst. - Run OCR: optioneel. Zet het aan voor gescande documenten, zodat de PDF/A-3 een doorzoekbare tekstlaag krijgt.
De tijdstempel hoeft niet ingesteld te worden: op een Starter-plan of hoger vraagt SealDoc voor elke job een RFC 3161-tijdstempel aan.
De node uploadt het bestand en komt meteen terug met de job-ID:
{ "jobId": "8b1e4c3a-2f7d-4e9a-b6c5-0d4f2a7e9c13" }
De conversie draait op de achtergrond, dus een trage pdf houdt je wachtrij nooit op.
Node 3, SealDoc · Job · Get
Voeg een Wait-node van een paar seconden toe, daarna nog een SealDoc-node met Resource Job, Operation Get en Job ID {{ $('Archive').item.json.jobId }}. Zet daarachter een IF-node op status:
queuedofprocessing: terug naar de Wait-node. Houd in de lus een teller bij, zodat een vastgelopen job hem niet eindeloos kan laten draaien.completed: de PDF/A-3 is klaar.failed: stuur de job naar de foutroute hieronder.
Een afgeronde job laat zijn bewijs in het antwoord zien: timestampedAt en timestampTokenBase64 voor de tijdstempel, outputHash voor het resultaat, isPdfACompliant voor de conformiteitscontrole.
Om het bestand op te halen voeg je een HTTP Request-node toe: GET https://api.sealdoc.eu/api/download/{{ $json.id }}, met Header Auth (X-Api-Key en je sleutel) en Response Format File. Geef het daarna door aan je opslagnode.
Elke job heeft ook een Legal Evidence Pack: GET /api/jobs/{id}/evidence-pack, met dezelfde header. Dat ZIP-bestand bevat altijd compliance_passport.json, MANIFEST.json en manifest.sha256, plus, waar ze bestaan, het document, chain_of_custody.json, ledger.json met public-keys.jwk, en het RFC 3161-token timestamp_token.tsr. Het is zelfdragend en offline verifieerbaar: een belastinginspecteur kan de integriteit controleren zonder onze servers te benaderen. SealDoc stelt het direct na de job samen; vraag je het in de eerste momenten op, dan antwoordt de API met 409 en een Retry-After-header.
En fouten dan
Twee soorten, op twee momenten:
- Bij het indienen. Een ontbrekend bestand of ongeldige OCR-talen geven een 400, een plan zonder de functie geeft een 402, en een opgebruikte maandlimiet geeft 409
quota_reached. In die gevallen wordt er geen job aangemaakt en stopt de SealDoc-node de werkstroom. Zet de instelling On Error op doorgaan met een foutuitvoer als je deze fouten wilt doorsturen. - Tijdens de verwerking. De job eindigt met status
failed, enerrorMessagezegt waarom, bijvoorbeeld een bestand dat niet te openen is. Stuur defailed-tak van je IF-node naar Slack of e-mail, zodat iemand weet dat er iets aandacht nodig heeft.
Een tijdstempelautoriteit die niet antwoordt, laat de job niet mislukken. De job wordt afgerond, en compliance.rfc3161Timestamp in het Get-antwoord laat zien of de tijdstempel er is.
Waarom drie nodes genoeg is
Deze werkstroom bevat zelf geen conversie-, tijdstempel- of archiveringslogica. Dat is precies de bedoeling. De API van SealDoc is de grens; je n8n-werkstroom is het bindweefsel tussen die grens en je bedrijfssystemen. Veranderen de regels of de formaten, dan verandert SealDoc mee achter dezelfde API-aanroep, en werk jij de versie van de node bij.
Deze werkstroom archiveert de documenten die je ontvangt. Voor de facturen die je verstuurt heeft dezelfde node de resource Invoice, die gestructureerde gegevens omzet in een Factur-X-, XRechnung- of Peppol BIS-factuur. Lees hoe je een conforme e-factuur genereert met n8n.
Voorbij n8n
Alles in deze tutorial kan ook rechtstreeks via de REST API van SealDoc. Vanaf het Growth-plan sturen webhooks job.processing, job.completed en job.failed naar je eigen endpoint, zodat je de pollinglus helemaal kunt schrappen. Alle manieren om te koppelen staan op onze integratiepagina.
De compliance-loodgieterij is opgelost. Wat je doet met de tijd die je wint, is aan jou.