- Rolle
- Designet og bygget af mig i n8n
- Til
- Selvstændige, der kan nok regnskab til at drive deres virksomhed
Resumé
Et AI-workflow i n8n, der gør en almindelig mail til en bogført transaktion. En sprogmodel (gpt-4o-mini) læser mailen og returnerer struktureret output: én linje i kassekladden med en kategori fra en lukket liste på elleve. Alt derefter er regelbaseret. Formler i Google Sheets beregner resultatopgørelse, moms og AM-bidrag, og totalerne sendes retur på mail. Uklare linjer markeres som ukendte og overlades til et menneske (human-in-the-loop), modellen ser kun mails fra godkendte afsendere (dataminimering, GDPR), og intet indberettes automatisk til Skat, hvilket holder det som minimal risiko under EU's AI-forordning.
Problem
Ejere af en enkeltmandsvirksomhed fører selv deres regnskab. De fleste kan nok regnskab til at gøre det rigtigt. Det, der koster dem, er tiden: hver kvittering skal tastes ind, kategoriseres og føres videre til moms, resultatopgørelse og skatteestimat. Da jeg førte regnskabet hos CACommunications, tog en bogføringsrunde omkring en arbejdsdag, 6 til 8 timer. Med dette workflow tager den samme runde 10 til 20 minutter, inklusive at tjekke linjerne og indtaste tallene hos Skat.
Hvad jeg byggede
Et n8n-workflow omkring en kassekladde i Google Sheets. Du sender en mail i almindelige ord, for eksempel "købt printerpapir 349 kr inkl. moms". Workflowet tjekker først afsenderen mod en liste over godkendte afsendere, så kun de kommer igennem.
En sprogmodel (gpt-4o-mini) omsætter derefter mailen til struktureret output: én linje med år, beskrivelse, beløb, kontant eller kredit, en kategori fra en lukket liste på elleve, og om der er moms på. Linjen føjes til kassekladden. Derfra er alt regelbaseret: regnearkets egne formler omsætter kassekladden til årets resultatopgørelse, moms og skatteestimat, og workflowet sender de vigtigste totaler retur som en kort opsummering.
Tankerne bag
Det er en hybrid arkitektur: probabilistisk, hvor sprog skal forstås, deterministisk, hvor tal skal være rigtige. Det er hovedfundet fra mit speciale omsat til praksis: brug kun AI der, hvor dens output er billigt at efterprøve. Modellen har én opgave, at gøre en sætning til en kategori og et beløb, og det kan et menneske tjekke på sekunder pr. linje. Summerne, momsen og skatten er regelbaseret regnearkslogik, der aldrig gætter.
Listen over kategorier er lukket med vilje. Modellen skal vælge en af elleve kategorier eller "ukendt", og det fungerer som et værn: en tvivlsom linje bliver markeret til gennemsyn af et menneske i stedet for stille at blive fejlplaceret.
Kontroller bygget ind i kassekladden
Arket tjekker sit eget input, før noget når en total. Et dublettjek markerer enhver linje, der gentager en anden, som mulig dublet, og på testdataene fangede det 18. Et kategoritjek sender alt uden for de elleve kategorier til "ukendt", så et menneske kan sortere det. Moms holdes i sin egen kolonne, så hver total er netto, og købsmoms trækkes aldrig fra to gange. Resultatopgørelsen og momstallene beregnes begge fra de samme linjer i kassekladden, så de stemmer pr. konstruktion.
Regnskabsmæssig behandling
Alle tal er ekskl. moms. Salgsmoms og købsmoms følges hver for sig, og kun omkostninger med fradragsberettiget moms bærer købsmoms. Resten bogføres brutto. Skattelinjen er AM-bidrag på 8 procent: på dette indkomstniveau ligger overskuddet under personfradraget, så der forfalder endnu ikke indkomstskat. Indberetningen bliver hos ejeren, der taster momstallene i momsangivelsen hos Skat.
Status
Det kører fra ende til anden. En mail i almindelige ord bliver til en linje i kassekladden, resultatopgørelse, moms og skat opdaterer sig selv, og totalerne kommer retur på mail, uden at nogen åbner regnearket. Det virker på mine egne testtransaktioner. Det, der mangler nu, er finjustering.
Hvad der forbliver manuelt, og hvad der er næste skridt
Med vilje: alt, der er markeret "ukendt", sorteres af et menneske, listen over godkendte afsendere vedligeholdes i hånden, og at indberette moms og skat bliver hos virksomhedsejeren. Systemet forbereder tallene og indsender aldrig noget.
Næste skridt mod en version, andre kan stole på, er at læse PDF-kvitteringer ud over mailtekst, et kort gennemsyn af linjer med lav sikkerhed, før de når kassekladden, og et større testsæt at justere kategorierne mod.

Resultatopgørelse
| Nettoomsætning | 108.000 |
| Andre driftsomkostninger | (41.800) |
| Personaleomkostninger | (17.000) |
| EBITDA | 49.200 |
| Af- og nedskrivninger | 0 |
| EBIT | 49.200 |
| Finansielle indtægter | 640 |
| EBT | 49.840 |
| Skat (AM-bidrag, 8 %) | (3.987,20) |
| Årets resultat | 45.852,80 |
Resultatopgørelsen, som arket beregner den, fra en testkørsel på opdigtede transaktioner. Beløb i DKK, alle ekskl. moms. Omkostninger i parentes.
Momsangivelse
| Salgsmoms | 27.000 |
| Købsmoms | (10.400) |
| Moms at betale | 16.600 |
Samme testkørsel, stillet op som tallene går ind i Skats momsangivelse. Beløb i DKK.
Teknologi: n8n, OpenAI (gpt-4o-mini), Google Sheets, Gmail.
Kode: Ved henvendelse.