Until this change, an invoice in CheckERP waited on the fiscal interface before it completed. On a bad connection that meant a queue at the counter, and at two sites it meant staff writing sales in a book until the system came back.
Invoices are now numbered and completed locally, then submitted by a background job. The till shows a count of anything unsent. Each submission carries an idempotency key, so a retry after a timeout cannot create a second fiscal document.
- Rejections go to a named queue with the error visible, rather than to a log.
- The full response is stored against the invoice and kept.
- A reconciliation job finds documents the service accepted that were never marked accepted locally.
The reasoning is written up in what fiscalisation requires of your accounting system. Existing sites were migrated without downtime; there is nothing for a site administrator to do.