The challenge
Four data sources have to agree for order-to-cash integrity to hold at a global technology manufacturer's India business: the order platform, the accounting entries in the ERP, the payment gateway settlement report and the bank statement. Nothing matched them automatically. Confirming that every sale had been recorded, settled and banked meant working across several reports by hand, which put a limit on how often anyone could ask the question. The objective set for the work was a reconciliation cycle measured in hours rather than days, and a break that names where in the chain it happened instead of reporting that the totals do not agree.
What we built
Four chained reconciliations. The order platform against the ERP payment and invoice documents, matching the payment ID to the ERP reference field. The order platform against the gateway settlement, validating the order value against the gateway gross. The ERP invoice documents against the gateway settlement, confirming invoices were closed against the right settlement. The gateway settlement against the bank statement, matching on a payment voucher number extracted by pattern from a free-text field — where the difference between net settlement and bank deposit is gateway charges and tax rather than a break. Refund consolidation runs before any matching, and all matching is bi-directional.
The result
A break is localised rather than merely detected. Recorded but not settled, settled but not banked, banked for an amount that does not match the order — each is a different exception with a different owner, and the chain says which one applies. Refunds no longer distort the comparison, because several refunded entries against one order are consolidated into a single record before matching, flagged as consolidated so the original rows remain traceable. Duplicate orders, blank keys, unmatched records on either side and captured-then-refunded lifecycles are reported by type rather than gathered into one list of differences.

