VAT in Exports

AI Finance Team has four export destinations, and they do not treat VAT the same way. Most of what follows is about the Ledger export, because it is the only one that carries the full VAT picture. Start with the table, so nothing below surprises you.

LedgerRLBHessynKettősBusiness Central
Non-deductibility setting appliesyesno, it always folds it innot applicable, sales onlyno
Incomplete-VAT invoices held backyesnonono
The VAT code in the fileyours, as you wrote ityours, but blanked for two pseudo-codes, plus a rate-derived RLB codederived by AI Finance Team, not yoursBusiness Central's own code

What The Ledger Export Contains

Two shapes: an Excel workbook, or a CSV bundle as a zip. Either way, five datasets: invoice headers, invoice lines, bank transactions, partners and companies. You can export the whole ledger or only the tab you are looking at.

Where VAT actually sits:

  • Invoice lines carry the product/service group, the rate and the calculation method, plus direction. The partner VAT group is not here: it is on the headers and partners sheets. So a line shows four of the five elements.
  • Invoice headers carry the VAT date, the posting date, the partner VAT group, the VAT recognition method and the VAT reporting currency. There is no header VAT summary column.
  • Partners carry each partner's VAT group and tax ID.
  • Companies carry the VAT recognition method, the VAT reporting currency, the exemption dates and the pro-rata percentage. No tax ID. Note the sheet itself is named Entities, even though the tab you exported from says Companies.
  • Bank transactions are in the same file and carry no VAT at all.

There is a flag called VAT Consistent, and it means the opposite of what you might assume. It is false when a code is still assigned but the line's elements no longer resolve to it. A line you corrected by hand comes out true, because correcting it rewrites the elements to match. Blank reads as true.

Over 50 000 rows the export asks you to confirm; over 200 000 it refuses and asks you to narrow the filters.

The VAT code is not the same string everywhere

The Ledger export prints your code exactly as you authored it. The others do not:

  • RLB blanks two pseudo-codes. If your table uses NL or - to mean "fully non-deductible" or "not on the return", the return-line cell comes out empty. It also writes its own rate-derived code alongside, which is an RLB package number rather than anything from your table.
  • HessynKettős never reads your codes. It derives its own from the rate element: exempt, small-business exempt, reverse charge, cross-border service, or the plain rate.
  • Business Central sends a code from its own mirrored mapping.

The AIFT VAT Code column appears only when the workspace uses AIFT-internal codes. In that mode the accounting code becomes optional, so the plain VAT Code column can legitimately be empty while the AIFT one carries the value.

Non-Deductible VAT

Some VAT is not fully deductible: half on passenger-car costs, all of it on representation. Accounting systems disagree on how they want that expressed, so Settings → VAT settings offers three handlings. They apply to the Ledger export only.

  • Native for 100% only (the default). A fully non-deductible line is passed through as it is, for the target to route by GL account. A partly non-deductible line has its non-deductible VAT folded into the net.
  • Native: target system handles all non-deductibility. Nothing is folded in; the percentage rides along and the target splits it. For systems that can, such as Business Central with the non-deductible VAT feature, or DATEV.
  • Pre-roll always. Everything is folded in, including the 100% case that the default leaves alone. For systems that cannot express non-deductibility at all.

"Folded in" means the exported net is larger than the invoice's net. That is the whole point, and it is the one thing to know before you build an import mapping: the non-deductible VAT is moved into the net figure, not merely reported beside it.

A line that is 50% non-deductible, on the default setting (Native for 100% only).

On the invoice

Net Amount
100.00
VAT Amount
27.00
13.50 moves

In the export

Net Amount Exported
113.50
VAT Amount Deductible
13.50

Nothing is invented: the gross is 127.00 either way, and the VAT still adds up. The non-deductible half has moved out of the VAT column and into the net.

What "folded in" does to one line. The amounts are an example.

Changing the setting needs the "Edit master data" permission. Reaching the exports at all needs "Run accounting exports", which is a different permission.

Two sets of columns that disagree

The invoice-lines sheet carries the amounts twice, from two different engines, and on the default setting they give different answers.

For one fully non-deductible line of 100 net plus 27 VAT:

NetDeductible VATNon-deductible VAT
Net Amount Exported / VAT Amount Deductible / VAT Amount Non-Deductible100270
Booking Net Amount / Booking VAT Amount127027

The first set follows the setting above and is what your accounting system should read. The second always folds in, and is what the app's own screens and reports use. Take the first set for an import mapping, and do not mix the two.

Pro-rata input VAT % is exported as a column on the Companies sheet and changes no amount anywhere. The app says so itself on the field.

Invoices Held Back For Missing VAT Codes

The Ledger export leaves out any invoice with a line that has no VAT code, because it would import as an unbookable fragment. RLB and Hessyn do not: they will ship an un-coded invoice with an empty return-line cell.

The file still downloads. Afterwards a note tells you how many invoices went and how many were left out, with a link that takes you to the export's own Invoice Headers tab, filtered to exactly those invoices. It does not take you to the invoice list.

One thing the gate does not catch: a default-coded line has a code, so its invoice exports normally, carrying the fallback code. The invoice list flags those separately as VAT: default-coded.

To find them without running an export, filter the invoice list by VAT codes incomplete.

Fixing a batch

  1. Use the link after the export to see which invoices were held back.
  2. Open one and look at the line reading - missing - on its Lines & VAT tab.
  3. Add the missing combination under Master data → VAT codes.
  4. Run Re-run VAT coding from the invoice list, which fills only the lines whose code is missing.
  5. Export again.

See VAT codes on invoices for what to do on a single invoice.

How Stable Is The Format

Stable enough to map once, with two honest exceptions, both on the invoice-lines sheet and both in the middle rather than at the end:

  • the AIFT VAT Code column appears and disappears with the workspace setting, and
  • a Reporting Line column exists per report your workspace has defined, so adding a report shifts the columns along.

Two workspaces therefore do not get identical columns. Match on the header text, not the column position.

CSV specifics, if you are scripting against it: UTF-8 with a byte-order mark, comma-separated, quoted per RFC 4180, dot decimal separator, ISO dates.