Tally, Zoho and QuickBooks
The day leaves the books once and says where it went: Tally vouchers with the party and the GST fields, Zoho journals and invoices by API, a CSV QuickBooks reads — and a webhook for anything else.
The first Tally export was a button and an XML file, and nobody knew afterwards which days had gone or whether Tally took them. Send a day twice and Tally had it twice.
A batch is a record
A set of journals for a period leaves the books as one batch with a number, a hash and a status. The batch says which days it holds and what the receiving system called it. A day in a sent batch is not sent again; a batch that failed is resent whole.
Tally
Sales vouchers with the party, the GSTIN and the sales ledger with its rate — so Tally's own GSTR-1 reads them — and journal vouchers for the rest, with the ledger names mapped once. Each voucher carries a reference Tally uses to refuse a duplicate.
Zoho Books
Journals as journals, invoices as invoices with their GST fields, receipts as customer payments with the TDS withheld, credit notes, vendor bills — by API, with Zoho's chart read back into the mapping so nothing is typed twice.
QuickBooks and everybody else
A CSV in the shape QuickBooks imports, and the same lines for a spreadsheet or a warehouse. And a webhook: every posted day, every payment, delivered signed to a URL that wants to know without polling.