What will go to the books
Corto is not the book of record. Nothing moves until you have seen it.
Postings
3invoice cinv-1001 → Tally
posteda file the accountant imports · ₹10,83,240 · key corto:cinv-1001:v1
- Sharma Traders — salessales:manufactured_goods₹9,18,000landed
- Output GST 18%tax:output_gst₹1,65,240landed
Ramesh saw this before it went.
Tally import log, 30 Jul, 2 vouchers accepted
invoice cinv-1002 → Tally
previeweda file the accountant imports · ₹3,39,840 · key corto:cinv-1002:v1
- Beta Forgings — salessales:manufactured_goods₹2,88,000
- Output GST 18%tax:output_gst₹51,840
Ramesh saw this before it went.
payment rcp-1 → Tally
rejecteda file the accountant imports · ₹5,00,000 · key corto:rcp-1:v1
- Receipt — Sharma Tradersbank:hdfc_current₹5,00,000did not land
Ramesh saw this before it went.
Refused — Tally import log: ledger “HDFC Current A/c” not found. The ledger in Tally is named “HDFC C/A 5521” — Tally matches by exact name and will not create one.
How each package takes it
Tally
filenever written to directlyDuplicates: None. The GUID tag is not checked for duplicates, and voucher-number dedup only fires if that voucher type uses manual numbering with Prevent Duplicate. Corto's own posting ledger is the only memory.
A line becomes: A ledger matched by EXACT NAME. No safe auto-create — a name that does not exist is a refusal.
A refusal: A batch-level import log with counts, not per-field errors, and a multi-voucher file can partly succeed.
Zoho Books
APIDuplicates: Opt-in, via the unique-identifier and upsert headers. Without them a resend creates a second invoice.
A line becomes: An account id.
A refusal: Structured JSON with a code and a message.
Xero
APIDuplicates: An Idempotency-Key header, but its lifetime is undocumented — treat as good for an immediate retry and nothing more.
A line becomes: A GL account code, directly on the line.
A refusal: Machine-readable, per element, and a bulk submission CAN partly succeed.
QuickBooks Online
APIDuplicates: A RequestID parameter that does not expire — safe to keep permanently beside our own record.
A line becomes: An ITEM, which carries the income account. The line cannot name an account directly.
A refusal: Machine-readable Fault. Whether it is per-line or atomic is not established.