Realtime upload of B2B invoices to the Hungarian tax authority via NAV Online Szamla v3.0 is no longer a novelty, it is the baseline requirement. What is less well understood is what full VAT-process automation actually looks like inside a 25-person company, where the accountant's reconciliation spreadsheet still arrives weekly by email.
What the Netorigo module automates
Our VAT module works in three layers. The first watches the Prisma invoice table; a BullMQ-backed nav-online-uploader worker picks up a new invoice and uploads it to the NAV v3.0 endpoint within 30 seconds. The NestJS controller uses an outbox pattern so we never lose an upload, even if NAV returns a 502 mid-flight. The second layer polls the NAV invoiceQuery endpoint every minute and writes any failed upload into a failed_uploads table for the accountant to review.
The third layer is the most useful: a monthly VAT-return draft, exported as PDF or XLSX, with every invoice aggregated per VAT line (27%, 18%, 5%, 0%, exempt, out-of-scope, EU reverse-charge, EU acquisition, third country). This draft lands in the accountant's inbox as an email attachment, ready to be imported into their professional software.
The silent edge case
Reverse-charge VAT. More than 40 Hungarian SZJ commodity codes (waste, construction labour, grain, steel, mobile phone shipments) fall under domestic reverse charge. The naive implementation just sets taxRate=0 on the invoice line, but NAV will reject that invoice outright because it is missing the lineNatureIndicator=PRODUCT field plus the vatRateModifier=DOMESTIC_REVERSE_CHARGE parameter. On top of that, the buyer company must also be registered with NAV for that SZJ category, otherwise NAV responds with a VEVO_NEM_ALANYA error code.
We solve this in a tax-classifier.service.ts that resolves the SZJ code via two lookups (a local cache plus a NAV buyer query) and assembles the right XML fields. The classification runs in 4 ms warm and 280 ms cold.
Against the accountant's spreadsheet
On the last working day of every month, the Netorigo module generates an accountant spreadsheet (matching the conventions of RLB, Forras-NET and Konyvelo Plusz) containing every NAV upload, with two summary rows: total invoiced amount plus VAT, and a list of failed uploads. This file is one-to-one comparable with the accountant's monthly reconciliation, and across eight partners we have hit a single discrepancy in 14 months. That one was a NAV-side timing drift: NAV recorded the invoice at 23:59, we recorded it at 00:01 of the next day.
Time saved
A 25-person company typically spends 14 hours a month on VAT administration: collecting invoices, manual NAV uploads, reconciliation with the accountant, error correction. With the Netorigo module that drops to about 1.5 hours per month, almost all of it spent triaging the two or three failed invoices. The 12.5 hours saved multiplied by 12 months equals 150 hours per year, which at a 5,000 HUF per-hour admin rate is 750,000 HUF saved annually.
And that is not the full picture. NAV imposes penalties for late or incorrect VAT filings, typically 80,000 to 150,000 HUF per incident. One of our partners has booked zero penalties over the last 18 months, versus an average of two per year in the period before automation.
What we do not automate
We deliberately do not file the final VAT return for the client via the NAV portal. The accountant does that, because the final adjustments (deductible vs. non-deductible VAT, R&D credit, reduced-rate categories) are a professional judgement an automated system should not touch unsupervised. We deliver the draft; the accountant owns the submission.
This is a worthwhile alliance: we handle the 99% of repetitive work, the accountant handles the 1% that requires judgement. On total cost of operation it pays for both sides.