ProcessMyBill
Author : CA Arpit Jain
ICAI USE CASE PRESENTED ON 07-10-2026 ProcessMyBill (AI Reimbursement Agent)
Employee reimbursement still runs on forms, portals and emails. Employees spend 10+ minutes per claim and rarely know what is claimable; approvers sign off without context; finance keys in every bill, checks policy from memory and chases missing documents for days; and the accountant re-keys the entry. The result: duplicates and over-cap items get paid, GST input credit is lost, and the audit trail is weak.
ProcessMyBill takes a claim from a WhatsApp chat to a posted journal entry in Zoho Books. It is not "AI deciding". AI does one job: it reads each bill into a fixed schema (vendor, GSTIN, invoice no., date, tax, amount, line items). Python rules then decide - every GST and policy check is deterministic code, and every company number comes from the company's own policy table. People make the final call: the employee confirms, the approver approves, and finance validates before anything is posted.
AI reads. Python rules check. People decide.
| Check | What the employee sees |
| Hotel limit | "Hotel ₹9,440/night is above your ₹6,000 limit for Mumbai (clause 3.1). Claim ₹12,000 for 2 nights?" |
| Duplicate | "This lunch bill is already in this claim" - refused; same bill in an earlier claim: "Remove it?" |
| Not reimbursable | "Dinner includes beer ₹300 (clause 8.1). Remove it?" |
| Outside trip | "Dinner on 3 Oct is outside your trip (29 Sep - 2 Oct). Keep it with a reason?" |
| Daily meal cap | "Meals on 30 Sep total ₹1,260 against ₹1,000/day. The excess needs a reason." |
| GST credit lost | "Your flight invoice is in your name, so the company loses ₹312.50 GST credit. Next time give the company GSTIN." |
| Documents | "Please send the boarding pass for this flight (clause 2.5)." |
| Area | Checks |
| Is it a valid bill? | Unreadable image; not an invoice (booking confirmation, estimate); air ticket without tax invoice; handwritten bill; marked "sample/specimen"; future-dated bill |
| Is it correct? | Arithmetic (lines, tax, total); GSTIN checksum - both re-verified by a second AI read; employee corrections flagged to finance |
| GST | Blocked credit u/s 17(5) (meals, cab, club); supplier not registered; company GSTIN present / missing / wrong; hotel credit only where the company is registered; credit lost on employee-name invoices shown to employee and finance |
| Whose bill? | Billed to someone other than the employee or company; sender not a registered employee; exited employee held for review |
| Trip | Bill outside the trip window (taken from ticket dates); bill from a place the trip never went; boarding pass matched to ticket (passenger, date, route) |
| Duplicates | Same file re-sent; same vendor + invoice no. + amount in the claim; already claimed earlier by self or another employee; same invoice no. with a changed amount |
| Area | Rules (Demo company values) |
| Travel | City tiers (1.3); air and rail class by grade (2.1, 2.3); flight below 600 km needs a reason (2.2); ticket + boarding pass required (2.5); travel invoice in company name (2.6); cancellation charges need a reason (2.7) |
| Hotel | Cap per night by grade and city tier, incl. GST - e.g. M2 Tier-1 ₹6,000 (3.1); company GSTIN on hotel invoice (3.2); breakfast already in tariff (4.2) |
| Meals | Daily cap across bills by grade - M2 ₹1,000 (4.1); client meal ₹2,500 per head with attendee names (4.4) |
| Local and other | Mileage ₹12/km car, ₹5/km two-wheeler, 1,000 km/month (5.3); home-office commute (5.4); laundry ₹500/day on trips over 3 days (6.1); mobile cap by grade - M2 ₹750 (7.1) |
| Not allowed | Alcohol, tobacco, minibar, spa, gifts, fines, family members, etc. (8.1); asset purchases (8.5); expenses the company already paid (8.7) |
| Documents and timing | Invoice required (9.1); GST invoice above ₹1,000 (9.2); bill older than 30 days needs a reason, 60 days refused (9.3); approver is the reporting manager, no auto-approval (10.1) |
Every check returns one outcome - Pass, Fix, Explain, Cap, Educate, Refuse, Silent (finance only) or Review - with the reason and clause. Changing a limit means editing the policy table, not the code.
| Layer | Technology | Role |
| Server | Python 3.11, FastAPI, SQLite, APScheduler | Runs on our server; nine modules; append-only audit log; reminders |
| AI (reading only) | Gemini 3.6 Flash; GPT-5.5; Sarvam | Bill to fixed schema; second read when a check fails; Hindi voice |
| Channels | WhatsApp Cloud API; Gmail API | Employee chat; approver emails with signed links |
| Accounting | Zoho Books India API | Journal with GST lines and bills attached |
| Finance UI | Jinja2, Tabler, HTMX, Chart.js | Review queue, claim page, journal preview, analytics |
The server is already deployed; WhatsApp and approval links reach it over a secure HTTPS endpoint. A company is onboarded with one masters workbook (employees, grades, approvers, expense heads to GL, policy rules) and its policy text. Only the bill image goes to the AI; masters and data stay on the server. AI reading costs well under ₹1 per bill.
| ~3 min | 20+ | 23 | 9 | ~800 | 1-Click |
| To submit a 5-6 bill claim | Generic checks | Company policy rules | Modules | Automated tests | Posting to Zoho |