01 โ Two amounts that look alike
netAmount, not totalSalesAmount
totalSalesAmount is the sum of the lines before the
document discount; netAmount is after it. Take the first and the
discount you granted quietly reappears in your ledger โ the row still balances
against nothing in particular, and the error is the size of the discount.
02 โ Two taxes that are not the same tax
Only T1 is VAT
taxTotals holds every tax on the document. T1 is VAT;
T4 is withholding, which is not yours to reclaim and does not belong
in a VAT column. Summing the array puts them together and inflates the VAT you
would report.
The currency is not where you would look
There is no currency field on the document. It lives on each line, in
unitValue.currencySold โ so an Egyptian-pound invoice says EGP a hundred
times and never once at the top. A reader that only looks at the header leaves the
column empty, and an empty currency quietly lands in the "no currency" bucket when
totals are grouped.
Both identifiers come through: internalID is the number your supplier
knows the document by, and uuid is what the ETA answers to.
What is not done here
Nothing is submitted to or queried from the ETA, and no signature is verified: the file is read inside the browser and stays there. This is not an integrator โ it reads the documents you already have.
The printed representation without the JSON is a different problem. If a file carries no structured data, the row comes out empty and marked, never invented.
Trying it
Drop files on the main page โ up to 10 invoices per export and 20 a day, free, no account, and the count resets at midnight. Pro lifts both limits for 29 โฌ once, with no renewal.
Nothing is uploaded
Files are read in the browser. There is no server they could go to, and it takes two minutes to check: open developer tools, the Network tab, and drop an invoice โ not one request goes out. Which countries are read.