All Workflows

Expense Reimbursement

Extracts line items from employee receipts, flags duplicate submissions, validates against T&E policy thresholds, and exports approved claims to Zoho Expenses or the payroll register.

PROCURE-TO-PAY Expense Mgmt 2 document types
#expense-reimbursement #receipt-ocr #duplicate-detection #t&e-policy #zoho-expenses #gst-input-credit #expense-approval #per-diem-validation #reimbursement-recon #fbp-claims

The Problem

Mid-market finance teams process between 200 and 2,000 employee expense claims per month, and each claim arrives as a heterogeneous bundle: a photographed restaurant bill, a hotel folio PDF, an Uber email, a foreign-currency credit card slip. An AP clerk manually keys vendor name, GSTIN, date, amount, and tax split into the expense system, then cross-checks each line against a T&E policy PDF that runs 14 to 22 pages. At 200 claims a month and roughly 6 minutes per claim, this is 20 hours of pure data entry before a single approval is routed.

The error rate compounds the cost. Duplicate receipt submissions — the same cab bill claimed in March and again in April, or the email PDF and the camera photo of the same restaurant bill — slip through manual review at a rate of 2 to 4 percent. Each duplicate that pays out is a direct cash leak. Worse, B2B invoices above ₹50,000 that are missing the company GSTIN silently disqualify the GST component from input tax credit under Section 16(2) of the CGST Act, and the loss only surfaces during the GSTR-2B reconciliation two months later.

By the time the AP team scales past 50 active claimants, the controller is choosing between paying late, paying twice, or hiring a second clerk. None of these are acceptable.

Why It Matters: Context

Expense reimbursement sits at the intersection of three regulatory regimes that mid-market finance teams cannot ignore: input tax credit eligibility under Section 16(2)(aa) of the CGST Act for Indian B2B receipts, FX conversion using the RBI reference rate for foreign-currency claims under Ind AS 21, and the company's own T&E policy thresholds that the auditor will sample against during the year-end SA 530 substantive testing. A receipt without a valid GSTIN, an FX conversion done at the wrong rate, or a meal claim ₹400 over the cap are all audit findings waiting to happen.

The mid-market reality is that there is no dedicated T&E analyst. The same person who reconciles the bank statement on Monday is reviewing 80 expense claims on Tuesday and filing GSTR-3B on Wednesday. The policy lives in a Confluence page that was last updated 14 months ago, and the approver — usually a department head — rubber-stamps anything under ₹10,000 because reading every line is not realistic.

The consequence of this is that personal expenses embedded inside hotel folios (mini-bar, in-room movies, paid Wi-Fi for a spouse's laptop) get reimbursed alongside legitimate room charges, and the recovery from the employee never happens because no one tagged the line at intake.

What This Workflow Automates

  1. Classifies each uploaded file as a Reimbursement Bill or rejects it (contracts, brochures, and bank statements are filtered out at intake using the document classifier rules).
  2. Extracts vendor name, GSTIN, invoice number, receipt date, line-item descriptions, line amounts, tax breakup (CGST/SGST/IGST or US sales tax), and total payable from the receipt image or PDF.
  3. Computes a perceptual hash on the receipt image and a tuple match on (vendor, date, amount, last-4-of-bill-number) against every prior claim from the same employee in the trailing 180 days; blocks the second submission with a pointer to the original claim ID.
  4. Validates each line against the T&E policy threshold table — meal caps, hotel caps by city tier, mileage rates — and splits any over-cap amount into a non-reimbursable sub-line with the policy clause cited inline.
  5. Tags personal-expense line items inside itemized hotel folios (mini-bar, laundry, in-room entertainment) against the expense category map and marks them as employee-recoverable.
  6. For foreign-currency receipts, pulls the RBI reference rate or the corporate card posted rate for the receipt date, converts to INR, and stores both original and converted amounts on the claim line.
  7. For B2B invoices above ₹50,000, verifies the company GSTIN is present and parks the GST portion in a non-creditable expense GL if it is missing, with an automated fix-it request to the employee.
  8. Exports the approved claim lines to the Zoho Expenses CSV format with the correct category codes, tax columns, and FX-converted amounts, ready for payroll register ingestion.

All of this happens in roughly 8 seconds per claim with deterministic outputs every controller can audit.

Edge Cases We Simulate

The workflow ships with a battery of synthetic test scenarios that exercise every failure mode we have seen in real-world data. Each scenario produces a deterministic outcome that an auditor or controller can verify in seconds.

Scenario What's wrong Expected outcome
Duplicate Receipt Resubmission Employee submits the same restaurant or cab receipt across two reporting periods, or uploads both the email PDF and the photographed paper copy of the same bill. System computes a perceptual hash on the receipt image plus a tuple match on (vendor, date, amount, last-4-of-bill-number) and blocks the second claim with a reference to the original claim ID.
Missing GSTIN on B2B Invoice Hotel or travel invoice above ₹50,000 lacks the company GSTIN, which disqualifies the line from input tax credit under Section 16(2) of the CGST Act. Claim is auto-routed back to the employee with a fix-it request; the GST portion is parked in a non-creditable expense GL until a corrected invoice is uploaded.
Policy Threshold Breach Receipt total exceeds the per-meal or per-night cap defined in the T&E policy (e.g., ₹1,500 meal cap, $150 hotel cap for non-metro US travel). The excess amount is split into a non-reimbursable line, the within-cap portion is approved, and the approver sees both numbers with the policy clause cited inline.
Personal Expense Mixed in Itemized Bill Hotel folio contains room charges, official meals, and a mini-bar or in-room movie line that is non-reimbursable per company policy. Line-item extraction tags each row against the expense category map, marks personal lines as employee-recoverable, and reimburses only the policy-eligible subtotal.
Foreign Currency Receipt Without FX Rate Employee submits a USD or EUR receipt from overseas travel without specifying the conversion rate or card statement reference. System pulls the RBI reference rate or the corporate card posted rate for the receipt date, converts to INR, and stores both the original and converted amounts on the claim line for audit.
Stale Receipt Past Submission Window Receipt date is older than the policy submission window (commonly 60 or 90 days), which most companies bar from reimbursement. Claim is flagged as out-of-policy with the receipt date and policy clause shown, and routed for CFO-level override rather than the standard approver.

Sample Documents

Download or inspect the seeded sample files used to demonstrate this workflow:

File Document type Notes
hotel_folio_mumbai.pdf Reimbursement Bill Multi-line hotel folio with room, meals, and laundry — exercises line-item categorization and GST-on-services capture.
uber_ride_receipt.pdf Reimbursement Bill Cab receipt used to test duplicate detection across the email PDF and the photographed copy.
restaurant_bill_with_gst.jpg Reimbursement Bill Photographed restaurant bill with handwritten tip — demonstrates OCR tolerance and policy meal-cap enforcement.
international_hotel_usd.pdf Reimbursement Bill USD-denominated hotel invoice that triggers the FX conversion path using the RBI reference rate.
reimbursement_recon_report.xlsx Reconciliation Report System-generated summary matching submitted bills against the claim register before Zoho Expenses export.

Sample Results

On a representative batch of 240 claims processed in a single run, the workflow extracted line items from 100 percent of submitted receipts, blocked 7 duplicate submissions (2.9 percent of the batch) where the same vendor-date-amount tuple had been claimed in the prior 60 days, and flagged 14 line items that breached the ₹1,500 meal cap or the ₹6,500 non-metro hotel cap. Eleven claims contained foreign-currency amounts that were re-stated to INR using the RBI reference rate for the receipt date, with both the original and converted figures preserved on the claim line.

The workflow caught one specific exception class that manual review consistently misses: a hotel folio for ₹38,400 that contained a ₹1,200 mini-bar line and a ₹600 in-room movie charge embedded between legitimate room and meal lines. The line-item tagger flagged both as employee-recoverable, reduced the reimbursable amount to ₹36,600, and posted the ₹1,800 as a salary-recoverable receivable in the same export.

Why Automation Wins Here

The workflow takes a process that consumes roughly 6 minutes of clerk time per claim and reduces it to under 30 seconds of approver review on the exception lines only. For a 240-claim monthly volume, that converts 24 hours of AP labour into approximately 2 hours of exception handling, while eliminating the 2 to 4 percent duplicate-payment leakage that manual review consistently fails to catch.

Every claim leaves the workflow with a deterministic audit trail: the original receipt image, the extracted JSON, the duplicate-check hash, the policy clause cited for any threshold action, the FX rate source, and the final Zoho Expenses export row. The controller drops this bundle directly into the year-end audit file, where the SA 505 external confirmation sample and the SA 530 substantive sample on T&E both pull from the same artifact set without further preparation.

Frequently Asked Questions

Does this capture GST input tax credit on employee-incurred expenses?

Yes. For each receipt above the B2B threshold, the workflow extracts the supplier GSTIN, place of supply, and tax breakup, and posts the eligible CGST/SGST/IGST to the input credit ledger. Receipts missing the company GSTIN or carrying a blocked-credit category under Section 17(5) are routed to a non-creditable expense GL automatically.

How does duplicate detection actually work?

Each uploaded receipt is hashed on the image (perceptual hash) and on the extracted tuple of vendor name, date, amount, and bill or invoice number. A match on either dimension against any claim filed in the last 18 months blocks the new submission and shows the employee the original claim ID, approver, and payout date.

Can the workflow export to Zoho Expenses, SAP Concur, or our payroll system?

The default export is the Zoho Expenses CSV schema with employee ID, expense category, GST split, and approver chain. Concur, Fyle, and ERP-side connectors (Tally, NetSuite, SAP) consume the same canonical JSON, and the FBP component can be pushed directly to the payroll register for tax-exempt processing.

What audit trail is maintained for each claim?

Every claim stores the original file, the extracted JSON, the OCR confidence per field, the policy rules evaluated, the approver decisions with timestamps, and the final GL posting reference. This satisfies ICAI SA 230 working paper requirements and provides the immutable trail an internal auditor needs for sample testing.

Does it handle multi-currency receipts from international travel?

Yes. Foreign currency receipts are converted using the RBI reference rate on the receipt date, or the corporate card posted rate when a statement reference is available. Both the source currency amount and the INR-converted amount are retained on the line, which is the treatment expected under Ind AS 21 for short-term employee advances.

How is T&E policy enforced — is it hard-coded?

Policy lives in a structured rule set covering per-meal caps, hotel tiers by city class, mileage rates, per-diem matrices, and submission windows. Finance edits the rules through a console; the workflow re-evaluates pending claims on rule changes and cites the specific clause on every breach so approvers see why a line was flagged.

Try it

This workflow is deployed and live in our demo environment. Upload your own documents to see it in action.

Open the live workflow