← Zurück zu allen Artikeln

Drei n8n-Nodes, ein compliancefähiges Archiv

SealDoc Team · · 5 Min. Lesedauer

Das Schwierigste an Compliance-Automatisierung sind selten die Regeln. Es ist die Klempnerei, die die Regeln mit den Systemen verbindet, mit denen Ihr Unternehmen bereits arbeitet. Die Regeln verlangen, dass eine Rechnung über die gesamte Aufbewahrungsfrist lesbar, echt und unversehrt bleibt, samt einem Nachweis darüber, was mit ihr geschehen ist. Ihr Postfach sagt “Sie haben einen neuen Anhang”. Diese beiden Welten zu verbinden, ist die Stelle, an der die meisten Teams steckenbleiben.

Dieser Beitrag führt durch den kleinsten Workflow, der diese Lücke schließt, gebaut mit n8n und dem Community-Node n8n-nodes-sealdoc. Drei verbundene Nodes, null eigener Code.

Was wir bauen

Einen Workflow, der mit jedem eingehenden PDF Folgendes tut:

  1. Er holt die Datei über einen Trigger Ihrer Wahl ab: ein Postfach, einen Slack-Upload, ein Cloud-Laufwerk, einen externen Webhook, alles, worauf n8n hören kann.
  2. Er übergibt sie an SealDoc, das sie in PDF/A-3 konvertiert, die PDF/A-Konformität prüft, einen RFC 3161-Zeitstempel anfordert und jeden Schritt in einem hash-verketteten Audit Trail aufzeichnet.
  3. Er speichert das Ergebnis dort, wo es laut Ihrer Aufbewahrungsrichtlinie hingehört.

Was Sie nicht selbst bauen: die PDF/A-3-Konvertierung, die Zeitstempelung samt Wiederholungsversuchen, den Audit Trail, das Evidence Pack. SealDoc erledigt diese Arbeit hinter einem einzigen API-Aufruf.

Voraussetzungen

  • Eine selbst gehostete n8n-Instanz mit aktivierten Community-Nodes.
  • Ein SealDoc-Workspace mit mindestens dem Starter-Plan. Ab Starter sind Zeitstempel und Evidence Packs dabei, und dieser Workflow ist auf beides angewiesen. Siehe Preise.
  • Ein SealDoc-API-Schlüssel, angelegt in der SealDoc-App unter Integration → API Keys. Kopieren Sie ihn sofort: Er wird nur einmal angezeigt.

Installieren Sie den Node in n8n unter Settings → Community nodes → Install mit dem Paketnamen n8n-nodes-sealdoc. Installieren Sie Nodes stattdessen von Hand, führen Sie Folgendes in Ihrem n8n-Nodes-Ordner aus (meist ~/.n8n/nodes) und starten Sie n8n danach neu:

npm i n8n-nodes-sealdoc

Legen Sie die Credential unter Credentials → New → SealDoc API an und fügen Sie Ihren Schlüssel in API Key ein. Der SealDoc-Node bietet nun fünf Ressourcen: Document, Invoice, Job, Peppol Check und Validator. Dieser Workflow verwendet Job.

Node 1, der Trigger

Wählen Sie den Trigger, der zu dem Ort passt, an dem Ihre Rechnungen heute landen. Wir verwenden hier den Gmail Trigger, weil er ein gängiger Ausgangspunkt ist; das Muster ist dasselbe für IMAP, OneDrive, eine n8n-Webhook-URL oder jede andere Quelle, die eine Datei liefert.

Konfigurieren Sie den Gmail Trigger so, dass er bei neuen Nachrichten unter einem Label wie incoming-invoices auslöst, und aktivieren Sie Download Attachments. n8n legt den ersten Anhang dann in der Binäreigenschaft attachment_0 ab.

Node 2, SealDoc · Job · Create

Fügen Sie einen SealDoc-Node hinzu, benennen Sie ihn in Archive um und setzen Sie Resource auf Job und Operation auf Create:

  • Input Binary Field: attachment_0. Das ist der Name der Binäreigenschaft aus Node 1, als reiner Text eingetragen.
  • Run OCR: optional. Schalten Sie es bei gescannten Dokumenten ein, damit das PDF/A-3 eine durchsuchbare Textebene erhält.

Der Zeitstempel braucht keine Einstellung: Ab dem Starter-Plan fordert SealDoc für jeden Job einen RFC 3161-Zeitstempel an.

Der Node lädt die Datei hoch und kehrt sofort mit der Job-ID zurück:

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

Die Konvertierung läuft im Hintergrund, sodass ein langsames PDF nie Ihre Queue blockiert.

Node 3, SealDoc · Job · Get

Fügen Sie einen Wait-Node von wenigen Sekunden hinzu, danach einen weiteren SealDoc-Node mit Resource Job, Operation Get und Job ID {{ $('Archive').item.json.jobId }}. Lassen Sie darauf einen IF-Node auf status folgen:

  • queued oder processing: zurück zum Wait-Node. Führen Sie in der Schleife einen Zähler mit, damit ein feststeckender Job sie nicht endlos laufen lässt.
  • completed: Das PDF/A-3 ist fertig.
  • failed: Schicken Sie den Job auf die Fehlerroute weiter unten.

Ein abgeschlossener Job zeigt seinen Nachweis in der Antwort: timestampedAt und timestampTokenBase64 für den Zeitstempel, outputHash für das Ergebnis, isPdfACompliant für die Konformitätsprüfung.

Um die Datei abzurufen, fügen Sie einen HTTP Request-Node hinzu: GET https://api.sealdoc.eu/api/download/{{ $json.id }}, mit Header Auth (X-Api-Key und Ihr Schlüssel) und Response Format File. Geben Sie die Datei dann an Ihren Speicher-Node weiter.

Jeder Job hat außerdem ein Legal Evidence Pack: GET /api/jobs/{id}/evidence-pack, mit demselben Header. Dieses ZIP enthält immer compliance_passport.json, MANIFEST.json und manifest.sha256, dazu, soweit vorhanden, das Dokument, chain_of_custody.json, ledger.json mit public-keys.jwk und das RFC 3161-Token timestamp_token.tsr. Es ist in sich geschlossen und offline verifizierbar: Ein Steuerprüfer kann die Integrität prüfen, ohne unsere Server zu kontaktieren. SealDoc stellt es direkt nach dem Job zusammen; fragen Sie in den ersten Augenblicken danach, antwortet die API mit 409 und einem Retry-After-Header.

Was ist mit Fehlern

Zwei Arten, zu zwei Zeitpunkten:

  • Beim Einreichen. Eine fehlende Datei oder ungültige OCR-Sprachen ergeben eine 400, ein Plan ohne die Funktion eine 402 und ein aufgebrauchtes Monatskontingent eine 409 quota_reached. In diesen Fällen wird kein Job angelegt, und der SealDoc-Node stoppt den Workflow. Stellen Sie seine Einstellung On Error auf Weiterlaufen mit einem Fehlerausgang, wenn Sie diese Fälle weiterleiten möchten.
  • Während der Verarbeitung. Der Job endet mit dem Status failed, und errorMessage sagt, warum, zum Beispiel bei einer Datei, die sich nicht öffnen lässt. Leiten Sie den failed-Zweig Ihres IF-Nodes an Slack oder per E-Mail weiter, damit ein Mensch weiß, dass etwas Aufmerksamkeit braucht.

Eine Zeitstempelautorität, die nicht antwortet, lässt den Job nicht scheitern. Der Job wird abgeschlossen, und compliance.rfc3161Timestamp in der Get-Antwort zeigt, ob der Zeitstempel vorhanden ist.

Warum drei Nodes ausreichen

Dieser Workflow enthält keine eigene Konvertierungs-, Zeitstempel- oder Archivierungslogik. Genau das ist der Punkt. SealDocs API ist die Grenze; Ihr n8n-Workflow ist das Bindegewebe zwischen dieser Grenze und Ihren Geschäftssystemen. Wenn sich die Regeln oder die Formate weiterentwickeln, entwickelt sich SealDoc hinter demselben API-Aufruf mit, und Sie aktualisieren die Node-Version.

Dieser Workflow archiviert die Dokumente, die Sie empfangen. Für die Rechnungen, die Sie versenden, hat derselbe Node die Ressource Invoice, die aus strukturierten Daten eine Factur-X-, XRechnung- oder Peppol BIS-Rechnung macht. Siehe wie Sie mit n8n eine konforme E-Rechnung erzeugen.

Jenseits von n8n

Alles aus diesem Tutorial ist auch direkt über die SealDoc REST API verfügbar. Ab dem Growth-Plan senden Webhooks job.processing, job.completed und job.failed an Ihren eigenen Endpunkt, sodass Sie die Polling-Schleife komplett weglassen können. Alle Anbindungsmöglichkeiten finden Sie auf unserer Integrationsseite.

Die Compliance-Klempnerei ist gelöst. Was Sie mit der gewonnenen Zeit anfangen, bleibt Ihnen überlassen.


← Zurück zu allen Artikeln