FAQ
The questions asked most often about Egypt ETA e-Invoice, answered.
Has this been tested against the real ETA?
No call has ever been made to the Egyptian Tax Authority from this module. There is no ETA-issued Client ID or eSeal certificate on our development account, so nothing has reached a real ETA environment — not even pre-production.
What is verified, over real HTTP against a mock ETA service (a real server, not a patched library): authentication, token refresh before expiry, the document structure against the published schema, local validation, accepted and rejected submissions, duplicate submission, status polling and unrecognised statuses.
Verified in shape only: the outgoing request body matches the documented structure, but nobody has watched ETA accept it.
We would rather say this here than have you discover it after paying. If you have a live account and are willing to test with us, get in touch — that is how this answer gets shorter.
Why does a 202 not mean the invoice is filed?
Because ETA says received, then validates afterwards. A document that got a 202 can still come back Invalid.
An integration that treats 202 as success will eventually tell an accountant a tax document is lodged when it is not, and they will find out at the end of the period. This module records Submitted and polls for the real answer.
Why do I need a separate signing service?
ETA requires a CAdES-BES signature from an eSeal certificate, and two facts follow:
- The certificate lives on a USB token or HSM from an accredited Egyptian provider. Odoo cannot hold it — it is hardware on purpose.
- ETA's own signing toolkit runs outside the ERP, as a container, a library or a CLI.
The shape is fixed by the Authority, not chosen by us. There is no version of this integration without it, and this module says so plainly rather than failing mysteriously when it is not configured.
Can it file automatically when an invoice is posted?
No, and it will not be made to. A filed document cannot be unfiled, and submitting on validation would file every draft mistake somebody posted. An accountant presses the button.
Why is the ETA document a separate record from the invoice?
Because building and filing are different acts with different states, and the document keeps what was actually sent. When ETA rejects something, you need the payload as submitted, not a reconstruction from an invoice that has since been edited.
What if ETA rejects a document?
The reasons are shown verbatim, in ETA's own phrasing. Correct the invoice and build a new document; the rejected one keeps its record of what was sent and why it was refused.
Rejection text is not paraphrased on purpose — paraphrasing a tax authority's error message leaves you searching their documentation for a string that does not exist.
Why are amounts recalculated instead of taken from Odoo?
ETA works to five decimal places and recalculates from the document, so the document has to agree with itself under ETA's own arithmetic. This module re-derives at five places and rounds the unit price before multiplying, which is the order the Authority uses.
There is a limit: Odoo's own decimal precision. If you need genuine five-decimal unit prices, raise the Product Price precision in Odoo. No module can recover precision Odoo has already discarded.
Which document types are covered?
Customer invoices, credit notes and debit notes, at document version 1.0.
Vendor documents and export documents are not built. Other document versions exist and are not claimed.
Does it do POS receipts?
No — that is technovision_eta_ereceipt, a separate module. A receipt is not an invoice with a new label: different structure, different endpoint, a per-device chain.
Is there a QR code on the PDF?
Not yet. longId is captured, which is what a QR code encodes, but the report is not extended.
Can I test without filing anything?
Yes — pre-production files nothing. And the connection refuses to be set to Production while it still points at a pre-production address, so you cannot accidentally do the expensive version of this in either direction.
Which Odoo versions?
18.0 only. A 19.0 port is not claimed until it has been tested there.
Are you affiliated with ETA?
No. Not affiliated with or endorsed by the Egyptian Tax Authority.