Tři uzly n8n, jeden archiv připravený na compliance
Nejtěžší částí automatizace compliance jsou málokdy samotná pravidla. Je to instalatérská práce, která ta pravidla propojuje se systémy, na nichž už váš byznys běží. Pravidla říkají, že faktura musí po celou dobu uchovávání zůstat čitelná, věrohodná a neporušená, se záznamem o tom, co se s ní dělo. Vaše poštovní schránka říká “máte novou přílohu”. Postavit most mezi těmito dvěma světy je místo, kde většina týmů uvázne.
Tento článek vás provede nejmenším workflow, který tu mezeru uzavře, postaveným v n8n s komunitním uzlem n8n-nodes-sealdoc. Tři propojené uzly, žádný vlastní kód.
Co stavíme
Workflow, který s každým příchozím PDF udělá toto:
- Vyzvedne soubor z triggeru dle vašeho výběru: poštovní schránka, upload do Slacku, cloudový disk, externí webhook, cokoli, co n8n umí poslouchat.
- Předá ho SealDocu, který ho převede na PDF/A-3, ověří shodu s PDF/A, vyžádá časové razítko RFC 3161 a každý krok zaznamená do auditní stopy v hašovém řetězci.
- Uloží výsledek tam, kam podle vaší politiky uchovávání patří.
Co sami stavět nemusíte: převod na PDF/A-3, časové razítkování včetně opakovaných pokusů, auditní stopu, evidence pack. Tuhle práci odvede SealDoc za jediným voláním API.
Předpoklady
- Self-hosted instance n8n se zapnutými komunitními uzly.
- Pracovní prostor SealDoc v plánu Starter nebo vyšším. Od Starteru začínají časová razítka a evidence packy a tento workflow stojí na obojím. Viz ceník.
- API klíč SealDoc, vytvořený v aplikaci SealDoc v části Integration → API Keys. Hned ho zkopírujte: zobrazí se jen jednou.
Nainstalujte uzel v n8n v části Settings → Community nodes → Install pod názvem balíčku n8n-nodes-sealdoc. Pokud uzly instalujete ručně, spusťte ve složce s uzly n8n (obvykle ~/.n8n/nodes) tento příkaz a restartujte n8n:
npm i n8n-nodes-sealdoc
Vytvořte přihlašovací údaje v části Credentials → New → SealDoc API a vložte klíč do pole API Key. Uzel SealDoc teď nabízí pět zdrojů: Document, Invoice, Job, Peppol Check a Validator. Tento workflow používá Job.
Uzel 1, trigger
Vyberte trigger, který odpovídá místu, kam vám dnes přicházejí faktury. Zde použijeme Gmail Trigger, protože je to běžný výchozí bod; vzorec je stejný pro IMAP, OneDrive, URL Webhooku n8n nebo jakýkoli jiný zdroj, který dodá soubor.
Nakonfigurujte Gmail Trigger tak, aby se spouštěl při nových zprávách s labelem, například incoming-invoices, a zapněte Download Attachments. n8n pak první přílohu vloží do binární vlastnosti attachment_0.
Uzel 2, SealDoc · Job · Create
Přidejte uzel SealDoc, přejmenujte ho na Archive a nastavte Resource na Job a Operation na Create:
- Input Binary Field:
attachment_0. Je to název binární vlastnosti z Uzlu 1, zapsaný jako prostý text. - Run OCR: volitelné. Zapněte ho u naskenovaných dokumentů, aby PDF/A-3 dostalo prohledávatelnou textovou vrstvu.
Časové razítko žádné nastavení nepotřebuje: v plánu Starter nebo vyšším SealDoc vyžádá časové razítko RFC 3161 pro každý job.
Uzel nahraje soubor a hned se vrátí s ID jobu:
{ "jobId": "8b1e4c3a-2f7d-4e9a-b6c5-0d4f2a7e9c13" }
Převod běží na pozadí, takže pomalé PDF nikdy nezablokuje vaši frontu.
Uzel 3, SealDoc · Job · Get
Přidejte uzel Wait na několik sekund a za něj další uzel SealDoc s Resource Job, Operation Get a Job ID {{ $('Archive').item.json.jobId }}. Za ním zařaďte uzel IF na status:
queuedneboprocessing: smyčka zpět na uzel Wait. Ve smyčce veďte počítadlo, aby ji uvázlý job nemohl držet v chodu donekonečna.completed: PDF/A-3 je připravené.failed: pošlete job do chybové větve popsané níže.
Dokončený job ukazuje svůj důkaz přímo v odpovědi: timestampedAt a timestampTokenBase64 pro časové razítko, outputHash pro výsledek, isPdfACompliant pro kontrolu shody.
Ke stažení souboru přidejte uzel HTTP Request: GET https://api.sealdoc.eu/api/download/{{ $json.id }}, s Header Auth (X-Api-Key a váš klíč) a Response Format File. Pak soubor předejte uzlu úložiště.
Každý job má také svůj Legal Evidence Pack: GET /api/jobs/{id}/evidence-pack se stejnou hlavičkou. Ten ZIP vždy obsahuje compliance_passport.json, MANIFEST.json a manifest.sha256 a k tomu, pokud existují, dokument, chain_of_custody.json, ledger.json s public-keys.jwk a RFC 3161 token timestamp_token.tsr. Je samostatný a ověřitelný offline: daňový inspektor může zkontrolovat jeho integritu, aniž by volal naše servery. SealDoc ho sestaví hned po dokončení jobu; zeptáte-li se v prvních okamžicích, API odpoví 409 s hlavičkou Retry-After.
Co s chybami
Dva druhy, ve dvou okamžicích:
- Při odeslání. Chybějící soubor nebo neplatné jazyky OCR vrátí 400, plán bez dané funkce vrátí 402 a vyčerpaný měsíční limit vrátí 409
quota_reached. V těchto případech se žádný job nevytvoří a uzel SealDoc workflow zastaví. Chcete-li tyto chyby směrovat dál, nastavte jeho volbu On Error na pokračování s chybovým výstupem. - Během zpracování. Job skončí se stavem
failedaerrorMessageuvádí proč, například u souboru, který nelze otevřít. Nasměrujte větevfailedvašeho uzlu IF do Slacku nebo e-mailu, aby člověk věděl, že něco vyžaduje pozornost.
Autorita časového razítka, která neodpovídá, nezpůsobí selhání jobu. Job se dokončí a compliance.rfc3161Timestamp v odpovědi Get ukáže, zda je časové razítko k dispozici.
Proč tři uzly stačí
Tento workflow neobsahuje žádnou vlastní logiku převodu, časového razítkování ani archivace. Přesně o to jde. API SealDoc je hranice; váš workflow v n8n je pojivová tkáň mezi touto hranicí a vašimi byznys systémy. Když se vyvíjejí pravidla nebo formáty, SealDoc se vyvíjí za stejným voláním API a vy jen aktualizujete verzi uzlu.
Tento workflow archivuje dokumenty, které přijímáte. Pro faktury, které odesíláte, má stejný uzel zdroj Invoice, který ze strukturovaných dat vytvoří fakturu Factur-X, XRechnung nebo Peppol BIS. Viz jak generovat vyhovující e-fakturu pomocí n8n.
Za hranicemi n8n
Vše z tohoto tutoriálu je dostupné i přímo přes REST API SealDoc. Od plánu Growth posílají webhooky události job.processing, job.completed a job.failed na váš vlastní endpoint, takže smyčku pollingu můžete úplně vypustit. Všechny způsoby připojení najdete na naší stránce integrací.
Instalatérská práce kolem compliance je vyřešená. Co uděláte s ušetřeným časem, je na vás.