Facturen die zichzelf opbergen: onze eigen factuurflow in n8n
Hoe Kuveco papieren facturen inscant en een n8n-flow de rest laat doen: tekst herkennen, leverancier en datum aflezen, het bestand een naam geven en archiveren.
Ook bij ons komen er nog facturen op papier binnen. Inscannen is snel gedaan. Wat daarna komt, is het vervelende deel: het bestand heet iets als scan_0047.pdf, en voor je het weet staat er een map vol scans waarvan niemand meer weet welke factuur welke is.
Daarom laten we dat over aan een kleine flow in n8n. We scannen de factuur in, en binnen het half uur staat ze in de juiste map, met een naam waaraan je ziet van wie ze is en van wanneer.
Van papier tot map in vijf stappen
- De printer scant de factuur en mailt de pdf naar onze mailbox.
- n8n kijkt elk half uur of er een nieuwe scan is.
- Tesseract zet de scan om naar gewone tekst.
- Een taalmodel, Gemini Flash van Google, leest uit die tekst de leverancier, het factuurnummer en de datum.
- Het bestand krijgt een nieuwe naam en verhuist naar de map met verwerkte facturen. Via Telegram krijgen we een bericht dat het gelukt is.
De scan komt binnen per mail
Onze Epson-printer kan een scan rechtstreeks mailen. Meer koppeling met de printer is er niet. In n8n start de flow met een Gmail Trigger die elke dertig minuten kijkt of er nieuwe mails zijn, maar alleen van het adres waarmee de printer zijn scans verstuurt. Andere mail laat hij met rust. De bijlage downloadt hij meteen mee.
Eerst controleert de flow of hij deze scan al eens gezien heeft. Hij zoekt in Google Drive (opent in een nieuw tabblad), in de map met scans, naar een bestand met dezelfde naam. Vindt hij er een, dan stopt hij en stuurt hij een kort bericht: deze factuur is al verwerkt. Zo niet, dan zet hij de scan in die map en gaat hij verder.
Eerst tekst, dan pas het taalmodel
Een scan is een afbeelding. Daar kan een computer niet in zoeken. Tesseract is een gratis, open-source programma voor tekstherkenning (OCR) dat via een extra node in n8n draait. Het maakt van de scan gewone tekst, met alle rommel die daarbij hoort: kolommen die door elkaar lopen, een logo dat als een reeks vreemde tekens terugkomt.
Pas die tekst gaat naar het taalmodel. Daarvoor gebruiken we de Information Extractor-node van n8n met Gemini Flash. Je vertelt die node in gewone woorden welke velden je zoekt, en het model vult ze in. Wij vragen er drie:
- de leverancier, beschreven als de naam van het bedrijf dat de factuur uitschrijft, "vaak bovenaan, soms in hoofdletters";
- het factuurnummer, herkenbaar aan het woord "factuur" of "invoice";
- de factuurdatum, herkenbaar aan "datum" of "invoice date".
Alle drie zijn verplichte velden: het model moet ze altijd invullen. Een taalmodel is hier goed in, omdat elke factuur er anders uitziet. Met vaste regels ("het nummer staat altijd rechtsboven") kom je niet ver; een taalmodel begrijpt dat "Factuurnr." en "Invoice no." hetzelfde betekenen.
Een naam die je kunt terugvinden
Met de leverancier en de datum maakt de flow een nieuwe bestandsnaam: de naam van de leverancier, een liggend streepje en de datum in cijfers. Omdat datums op facturen in alle vormen voorkomen, zet een stukje code maandnamen in het Nederlands en het Engels eerst om naar cijfers ("november" wordt 11) en houdt daarna alleen de cijfers over.
Dan maakt de flow een kopie van de scan met die nieuwe naam en zet hij die kopie in de map met verwerkte facturen. De originele scan blijft in de map met scans staan. Loopt er iets mis met de naam, dan is er dus niets verloren.
Als laatste stuurt de flow een bericht in Telegram met de nieuwe bestandsnaam en de factuurdatum. Zo'n bericht lees je in een paar seconden. Leest het model een keer een verkeerde naam, dan zien we dat meteen op onze telefoon en niet pas weken later in de boekhouding.
Wat de flow niet doet
Hij boekt niets en betaalt niets. Hij zorgt er alleen voor dat elke papieren factuur digitaal op dezelfde plaats staat, met een naam die je terugvindt. Facturen die al digitaal binnenkomen, bijvoorbeeld als e-factuur via Peppol, lopen niet langs deze flow; die zijn al leesbaar zonder scan.
De tools op een rij
| Onderdeel | Tool | Wat het doet |
|---|---|---|
| Scannen | Epson-printer met scan naar e-mail | Mailt de pdf naar onze mailbox. |
| Mailbox | Gmail, met de Gmail Trigger van n8n | Levert elke dertig minuten de nieuwe scans aan. |
| Tekstherkenning | Tesseract (OCR), als extra node in n8n | Zet de scan om naar tekst. |
| Lezen | Gemini Flash (Google), in de Information Extractor-node | Haalt leverancier, factuurnummer en datum uit de tekst. |
| Archief | Google Drive | Bewaart de originele scan en de kopie met de nieuwe naam. |
| Meldingen | Telegram | Bevestigt elke factuur en meldt dubbele scans. |
Is dit iets voor jouw bedrijf?
Het is een kleine flow, veertien nodes, en hij gebruikt programma's die veel KMO's al hebben: een printer die kan scannen, een mailbox en een plek in de cloud om bestanden te bewaren. Bij ons zijn dat Gmail en Google Drive, allebei onderdeel van Google Workspace (opent in een nieuw tabblad). Krijg je nog regelmatig facturen op papier, of zoek je te vaak in een map vol bestanden die scan_ heten, dan is dit een goede eerste automatisatie.