🎁 Early Access Open: Get 1 Month of Growth Tier Free when you sign up

FinanceOps · AP-to-GL

Match one ₹18 lakh payment to fifteen vendor bills.
Net of TDS.

Last reviewed·ReconPe Editorial

Upload your AP aging and GL payment extract. ReconPe’s ACRE engine runs exact-key, then Levenshtein / Jaccard fuzzy, then subset-sum aggregation on the unmatched pool — finding the subset of vendor bills that sums to each payment within tolerance. Matched on the net post-TDS amount, partitioned by vendor and date window, scored 0–100 with Fellegi-Sunter. One aggregation candidate per payment, not one unmatched row per bill. Goods received but not invoiced get a draft accrual into the approval inbox — AI proposes, an approver disposes.

ACRE · Subset-sum

12 vendor bills (net of TDS), summed to one batch payment — within tolerance.

Running sum
0
BILL-001
1,75,000
BILL-002
1,42,000
BILL-003
1,98,500
BILL-004
1,21,000
BILL-005
1,65,000
BILL-006
2,10,000
BILL-007
96,500
BILL-008
1,58,000
BILL-009
1,34,500
BILL-010
1,89,000
BILL-011
1,12,000
BILL-012
98,500
ΣSUM_AGGREGATE
General ledger · Vendor payment
PMT-2026-04-118
18,00,000
Matched · residual ₹0
Stage 1.5·tolerance ±0.5% or ±₹100
Searching subsets…

Where AP-to-GL tie-out actually breaks

One payment, fifteen bills

A single batch payment of ₹18 lakh clears fifteen vendor bills that should net to that figure. The GL books one credit; your AP sub-ledger holds fifteen open items. VLOOKUP dies the moment one payment settles many invoices — which is how most vendors are actually paid.

TDS withholding leaves residuals

You book a vendor bill gross, but you pay net of TDS. A 10% deduction on a ₹2 lakh bill leaves the payment short by ₹20,000 against the gross sub-ledger. Match on the wrong amount column and every aggregation overshoots; the real break hides under withholding noise.

Bills and payments split across cycles

Bills raised in March may be paid in two tranches — half on 31-Mar, half on 07-Apr. Closing a March book against an unbounded AP file produces phantom unpaid balances that resolve next week, but not before someone's spent the morning chasing them.

Vendor master data drifts

AP file says 'Global Textiles Pvt Ltd', the GL says 'GLOBAL TEXTILES PRIVATE LIMITED', a third export says 'Global Textiles P. Ltd.'. Same vendor, three spellings — and if the master row was reassigned mid-period, half the legs point one way and half the other. Pure-string match drops legitimate ties.

What the engine gives you

Subset-sum matching, bounded by reality

ACRE searches for the subset of vendor bills that sums to your GL payment within tolerance, after an exact-key then Levenshtein / Jaccard fuzzy pass. Currency, vendor, and date-window pruning keep the search bounded — thousands of open bills against hundreds of payments in seconds.

Tolerance that absorbs TDS and GST

Match on the net (post-TDS) amount, not gross, so withholding doesn't blow the residual. Default tolerance absorbs GST input adjustments and bank-rounding noise; configure it per rule so high-value vendors run tight and small-amount books run wide.

GRNI accruals drafted for approval

Goods or services received but not yet invoiced surface as accrual-class breaks. The accruals agent drafts a balanced Dr expense / Cr accrued-expenses journal entry per break into the approval inbox — anchored to the break as backup, reversing next period when the invoice posts. AI proposes; an approver disposes.

Fellegi-Sunter confidence per group

Each aggregation candidate gets a 0–100 composite score combining per-row matching with a residual penalty. Auto-confirm high-confidence groups, surface the middle band for review, and flag the rest for investigation — so reviewers spend time only where it's earned.

AP aging + GL extract, no preprocessing

Upload your vendor aging and GL payment extract as-is — CSV, Excel, JSON, or XML. Schema detection identifies bill number, vendor, gross, net, TDS, and amount fields automatically, with Tally Prime, Zoho Books, QuickBooks, and SAP shapes recognised on the first run.

Cross-period exception memory

A bill that didn't clear this month doesn't vanish. ReconPe fingerprints the exception and links it to next month's settling payment automatically, and learns counterparty patterns — 'this vendor settles late, avg lag 5 days'. Close the loop across runs, not just within one.

Frequently asked

How does subset-sum matching work for AP-to-GL?

After the exact-key and Levenshtein / Jaccard fuzzy passes, ACRE runs an aggregation stage on the unmatched pool. For each unmatched GL payment, it searches the unmatched vendor-bill pool for a subset whose net amounts sum to the payment within tolerance — pruned by currency, vendor, and date window. The search uses a depth-first algorithm with overshoot pruning. Each candidate group is scored 0–100 using a Fellegi-Sunter composite and emitted as a single aggregation candidate for human confirmation, not one break per bill.

Does it match on gross or net of TDS?

Net. You book a vendor bill gross but pay it net of TDS withholding, and the GL records the net payment. ReconPe prefers the net / paid / settled amount column as the aggregation source, so a 10% TDS deduction doesn't push every group into overshoot. Where withholding still leaves a residual, default tolerance absorbs it; for teams that want explicit TDS reconciliation as a line item, that's a layer on top of the same engine. The wedge case — many bills summing to one net payment — works today.

What about GRNI — goods received but not invoiced?

GRNI surfaces as an accrual-class break: the goods or service was received and sits in the GL, but no vendor invoice has posted. The accruals agent reads those breaks and drafts a balanced journal entry — debit the item's expense account, credit accrued expenses — into the same approval inbox the recurring and AI-proposed entries use. The draft is anchored to the break as backup and set to reverse next period when the invoice arrives. It is a proposal: an approver reviews and disposes. ReconPe never posts to your books on its own.

Can it handle debit notes, credit notes, and advances?

Yes — these are exactly why cardinality stops being one-to-one. A payment may net a set of bills against a credit note or an advance adjustment, and the subset-sum stage treats the signed amounts as part of the group it's searching for. Where a residual remains after aggregation, the classifier tags the likely cause (debit/credit note, advance, TDS, GST, timing) so a reviewer sees why the group didn't tie cleanly rather than a bare unmatched row.

How does it deal with vendor master-data drift?

Fuzzy matching using Levenshtein and Jaccard similarity ties 'Global Textiles Pvt Ltd', 'GLOBAL TEXTILES PRIVATE LIMITED', and 'Global Textiles P. Ltd.' to one vendor without you cleaning the file first. When a master row is reassigned mid-period — half the legs referencing the old ID, half the new — the classifier flags it as system drift rather than mis-mapping a single row, so you fix the master once instead of chasing each leg.

Will it work with Tally, Zoho Books, QuickBooks, NetSuite, or SAP?

ReconPe ingests CSV, Excel, JSON, and XML extracts from any source system today, and schema detection recognises common AP aging shapes (bill number, vendor, gross, net, TDS, balance) and GL payment shapes without manual mapping. Approved journal entries export as Tally XML. Direct connectors to NetSuite, QuickBooks, and Zoho are on the way; for now the export-and-upload flow gets a clean reconciliation in the first session.

Is the audit trail strong enough for SOX or Big Four review?

Every aggregation match exports its source bill keys, the target payment key, the residual, the 0–100 confidence, and the rule that fired. Reruns are deterministic given the same inputs. Drafted accruals and other journal entries carry the AI reasoning, the originating break, the approver, and the timestamp. The exception memory pool keeps a per-organisation fingerprint history with 180-day aging, so you can answer 'why did we accrue and then reverse this in March?' in October.

Riya at her desk in a navy shirt, looking at a laptop with a two-pane view: left pane shows one GL journal entry for ₹25,00,000 from Customer X dated 31 March, right pane shows twelve AR invoices for the same customer with amounts ranging from ₹85,000 to ₹4,60,000.
Finance Manga · EP04

Subset-sum: matching ₹25 lakh to twelve invoices

The GL posts one ₹25,00,000 journal entry. The AR aging has twelve open invoices for that customer. Which subset matches? Humans give up at n=8. Riya walks through the deterministic answer.

Read

Every sub-ledger ties out in the same close

Same ACRE engine, same cross-period memory, same AI-proposes / finance-approves flow — across all six tie-outs of a month-end close.

Close the AP sub-ledger in an afternoon, not a week.

Free tier reconciles 1 entity with up to 50 transactions per month against your GL — enough to run the wedge case on your own vendor data.

Request early access