← Back to all articles

Drie n8n-nodes, één compliance-klaar archief

SealDoc Team · · 5 min read

Het lastigste aan compliance-automatisering zijn zelden de regels. Het is de loodgieterij die de regels verbindt met de systemen die je bedrijf al draaien. De regels zeggen dat elke B2B-factuur in een gestructureerd elektronisch formaat moet, tien jaar gearchiveerd, en herleidbaar tot een tamper-evident chain of custody. Je boekhoudsoftware zegt “je hebt een nieuwe bijlage in de gedeelde mailbox”. Die twee werelden overbruggen, daar lopen de meeste teams vast.

Dit artikel loopt door de kleinst mogelijke werkstroom die dat gat echt dicht, gebouwd met n8n en de n8n-nodes-sealdoc community node. Drie verbonden nodes. Ongeveer 200 regels JSON als je de werkstroom exporteert. Geen eigen code.

Wat we bouwen

Een werkstroom die het volgende doet bij elke binnenkomende pdf:

  1. Pakt het bestand op via een trigger naar keuze (mailbox, watch folder, Slack-upload, een externe webhook, alles waar n8n naar kan luisteren).
  2. Geeft het door aan SealDoc, dat het bestand omzet naar PDF/A-3, de Factur-X XML inbedt naast de gerenderde factuur, een RFC 3161-tijdstempel toevoegt, en het geheel bundelt in een downloadbaar archief.
  3. Slaat het resultaat op waar je bewaartermijnbeleid voorschrijft.

Wat je dus niet zelf hoeft te bouwen: de PDF/A-3-conversie, de extractie van Factur-X XML, het tijdstempelen, het audit trail, de manifest-hash van het evidence pack, de retry-logica voor de tijdstempelautoriteit. SealDoc’s API doet dat werk achter één HTTP-endpoint.

Vereisten

  • Een n8n-instantie, self-hosted of n8n Cloud. De community node werkt op beide.
  • Een SealDoc-account met minimaal het Starter-plan (de moat-features waar deze werkstroom op leunt, custody en tijdstempels en evidence packs, zitten vanaf Starter erin).
  • Een SealDoc API-sleutel. Genereer er een in het dashboard onder API keys, kopieer het geheim één keer (we tonen het nooit meer).

Installeer de community node:

npm i n8n-nodes-sealdoc

Herstart n8n. De SealDoc-node verschijnt nu onder Nodes met drie resources: Job, Validator en Peppol.

Node 1, de trigger

Kies de trigger die past bij waar je facturen vandaag binnenkomen. Wij gebruiken Gmail Trigger voor deze walkthrough omdat we die vorm het meest tegenkomen, maar het patroon is identiek voor IMAP, OneDrive, SharePoint, een n8n Webhook URL, of een gemonitorde map.

Configureer de Gmail Trigger om af te vuren bij nieuwe berichten met een pdf-bijlage in een specifiek label, bijv. incoming-invoices. De output van deze node is de binaire pdf in attachments[0].data.

Node 2, SealDoc Job · Create

Sleep een SealDoc-node op het canvas, zet Resource op Job en Operation op Create. Configureer:

  • File: bind aan {{ $binary.attachments_0 }} (de pdf uit Node 1).
  • Embed Factur-X: AAN. SealDoc detecteert de factuurvelden automatisch en genereert de gestructureerde XML; bevat de bron-pdf al een XML-bijlage, dan respecteert SealDoc die en valideert in plaats van overschrijven.
  • Timestamp: AAN. De uitgaande PDF/A-3 krijgt een RFC 3161-tijdstempel van een TSA die wij beheren, later opvraagbaar als bewijs van wanneer het document bestond.
  • Retention category: kies de categorie die je belastingwet voorschrijft (de Nederlandse Archiefwet-categorie staat in de dropdown).

De node retourneert direct een jobId en een status van pending. Wacht hier niet synchroon. Een Factur-X-conversie plus tijdstempel is voor een normale factuur meestal binnen vijf seconden klaar, maar pdf-verwerking is niet deterministisch en je wilt niet dat een trage belastingaangifte-pdf je hele wachtrij blokkeert.

Node 3, SealDoc Job · Get

Voeg nog een SealDoc-node toe. Zet Resource op Job en Operation op Get. Bind Job ID aan {{ $node["SealDoc Create"].json.jobId }}. Wikkel de node in n8n’s Wait-primitive met 2 seconden vertraging en max 10 iteraties, polling tot status completed of failed is.

Bij completed bevat het antwoord een downloadUrl die vijf minuten geldig is. De URL wijst naar de geconverteerde PDF/A-3, die nu Factur-X-compliant, getijdstempeld en geregistreerd is in onze chain of custody.

Je krijgt ook een evidencePackUrl als je plan evidence packs omvat. Dat ZIP-bestand bevat de originele pdf, de geconverteerde PDF/A-3, de Factur-X XML, het RFC 3161-token, het manifest-hashbestand, en een JSON-bonnetje dat elke stap opsomt. Auditors zijn er gek op want het is zelfdragend en offline verifieerbaar; je geeft een kopie aan een belastinginspecteur en die kan de integriteit valideren zonder onze servers te bellen.

En fouten dan

SealDoc geeft gestructureerde foutredenen terug in het failureReason-veld. De vier die je in de praktijk zal zien:

  • validation_failed, de bron-pdf is misvormd of met wachtwoord beveiligd. Geef terug aan het team dat hem uploadde.
  • unsupported_source, bijvoorbeeld een daadwerkelijk versleutelde pdf die wij niet kunnen openen. Stuur terug naar afzender.
  • timestamp_unavailable, onze TSA had een storing. We retryen automatisch; raakt het retry-budget op, dan eindigt de job op failed en kan je hem opnieuw starten.
  • quota_exceeded, de maandlimiet aan jobs van je plan is bereikt. Upgrade of wacht op de reset.

Route in n8n de failed-tak van de Get-node naar een Slack- of e-mailmelding zodat een mens weet wanneer iets echt vastzit.

Waarom drie nodes genoeg is

Je merkt dat deze werkstroom zelf geen validatie-, ondertekenings- of archiveringslogica bevat. Dat is precies de bedoeling. SealDoc’s API is de grens; je n8n-werkstroom is het bindweefsel tussen die grens en je bedrijfssystemen. Als het Belgische B2B-mandaat live gaat hoef je deze werkstroom niet opnieuw te bouwen. Als de Franse verplichting van september 2026 ingaat hoef je hem niet opnieuw te bouwen. Als de regelgever in 2027 het Factur-X-profiel bijwerkt, upgrade je de versie van de SealDoc-node.

Dat is de waarde van het connector-patroon: regelgevingschurn leeft in onze codebase, niet in die van jou.

Voorbij n8n

Gebruik je geen n8n, dan is elke operatie uit deze tutorial ook beschikbaar via SealDoc’s REST API rechtstreeks, of via Webhooks als je liever push-meldingen wilt dan polling. Het volledige menu staat op onze integratiespagina, met kant-en-klare voorbeelden per oppervlak. Make-, Zapier- en Exact Online-connectoren zijn in actieve bouw; gebruikt jouw stack een van die, laat het ons weten voor early access.

De compliance-loodgieterij is opgelost. Wat je doet met de tijd die je wint, is aan jou.


← Back to all articles