All work

Tally Accounting Automation

End-of-day accounting, without re-keying.

Role
Lead developer
Status
Production
Stack
Python · Django · Tally XML

How it fits together

A simplified illustration. No company, ledger or financial data is shown.
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.