Tally Accounting Automation
End-of-day accounting, without re-keying.
- Role
- Lead developer
- Status
- Production
- Stack
- Python · Django · Tally XML
How it fits together
01
Context
Invoices raised in an internal billing platform had to be entered into Tally by hand every day, voucher by voucher.
I led a pipeline that does this at the end of each day, from validated data through to posted vouchers.
02
Constraints
- Every voucher must land in the right ledger and in the right direction: a sale or a purchase.
- Tally can reject an entry, and a rejection must never pass silently.
- The job runs unattended, so failures have to be visible to someone who can act on them.
03
What I built
- An end-of-day job that turns the day’s invoices into Tally-compatible XML.
- Sales vouchers for client sales and purchase vouchers for vendor purchases, chosen by the direction of each transaction.
- Automatic creation of any ledgers a voucher needs.
- Posting through Tally’s integration port, with an alert that flags any rejected voucher and shows Tally’s own error message.
04
Tradeoff: Alert on rejection instead of retrying automatically
Most rejections come from data that needs a person’s judgement. Retrying them unchanged would only repeat the failure, so a clear alert with Tally’s error gets the right fix in faster.
05
Outcome
No manual voucher entry for the automated scope.