Make stock value tie to the ledger.
Movement by movement.
Last reviewed·ReconPe Editorial
Upload your stock valuation report and GL inventory extract. ReconPe runs subset-sum aggregation on the unmatched pool — finding the subset of stock movements that nets to each inventory control-account posting within tolerance. SKU, location, and date-window partitioning keep search bounded. Quantity breaks, weighted-average-vs-FIFO residuals, and cut-off items get their own class — and GRNI accruals land in an approval inbox, not your live ledger.
12 stock movements, netted to one GL inventory posting.
Where inventory-to-GL tie-out actually breaks
Many movements, one GL posting
Hundreds of stock receipts, issues, and transfers net down to a single ₹40 lakh inventory control-account posting. The sub-ledger has the detail; the GL has the summary. VLOOKUP fails the moment cardinality stops being 1-to-1 — and inventory is never 1-to-1.
Goods received, not yet invoiced
Stock landed in the warehouse on 29-Mar; the supplier invoice arrives 06-Apr. The sub-ledger shows the receipt, the GL inventory and payables don't yet reflect it. GRNI is the classic accrual that quietly distorts both inventory value and creditors at close.
Cut-off: received this period, invoiced next
A goods receipt note dated 31-Mar against an invoice posted 04-Apr lands as a ghost mismatch when you close March against an unbounded movement file. Cut-off violations look like real breaks until someone re-runs a week later — after they've burned the morning on them.
Weighted-average vs FIFO residuals
The warehouse system values on weighted-average; the ledger was posted on FIFO. Same physical stock, two valuation methods, a residual that isn't an error and isn't a clean tie either. Pure-value matching flags every line; you need tolerance that knows the difference.
What the engine gives you
Subset-sum aggregation, bounded by reality
The engine searches for the subset of stock movements summing to each GL inventory posting within tolerance. SKU partition, location partition, and date-window pruning keep search bounded — thousands of movement lines against the period's control-account entries, scored not brute-forced.
Quantity breaks, separated from value breaks
Inventory carries two axes the GL doesn't: quantity and value. When the SKU and value tie but the units don't, that's a quantity break — surfaced as its own class, not buried in an amount mismatch. Shrinkage, write-downs, and miscounts each get their own residual line.
GRNI accruals drafted for approval
Goods-received-not-invoiced breaks are read off the period and drafted into the approval inbox as proposed journal entries — Dr the item's inventory / expense account, Cr Accrued Expenses, anchored to the originating break. The AI proposes the accrual; an admin approves, edits, or rejects. Never auto-posted.
Tolerance that absorbs valuation drift
Configurable per-rule tolerance absorbs weighted-average-vs-FIFO residuals, rounding, and unit-cost rounding without surfacing them as breaks — while a systematic divergence (a real valuation-method disagreement) still pushes the residual past the band and gets flagged.
Cut-off and stock-in-transit testing
Cut-off testing flags movements received before period-end but invoiced after, and the stock-in-transit items sitting between dispatch and receipt. In-flight items don't disappear at close — exception memory carries them to next period and links them to the settling posting when it lands.
Audit-grade explainability + Tally XML export
Every aggregation match exports its source movement rows, target GL row, residual, Fellegi-Sunter confidence, and the rule that fired. Reruns are deterministic. Approved journal entries export as Tally XML, and the workpaper hands your reviewer the subset of movements — not a black box.
Frequently asked
How does subset-sum matching work for inventory?
After the exact-key and fuzzy (Levenshtein / Jaccard) passes match what they can, the engine runs an aggregation stage on the unmatched pool. For each unmatched GL inventory posting, it searches the unmatched movement pool for a subset of stock receipts, issues, and transfers whose values sum to the GL amount within tolerance — pruned by SKU, location, and date window. The group is then emitted as a single aggregation candidate with a 0-100 Fellegi-Sunter confidence for human confirmation, instead of one MISSING_TARGET per movement line.
Can ReconPe handle GRNI accruals automatically?
It drafts them, it does not post them. Goods-received-not-invoiced breaks (the fee-or-accrual class) are read off the close period and a balanced journal entry is proposed — Dr the item's inventory or expense account, Cr Accrued Expenses — into the same approval inbox the recurring JEs and AI proposals use, anchored to the originating break as transaction-level backup. An admin approves, edits-then-approves, or rejects. Nothing touches the live ledger until a human signs off. AI proposes, the controller disposes.
How do you deal with valuation-method differences like weighted-average vs FIFO?
Valuation-method differences leave a residual that is neither a clean tie nor an error. Configurable per-rule tolerance absorbs the expected drift between weighted-average and FIFO costing, unit-cost rounding, and conversion noise — so they don't flood the exception queue — while a residual that exceeds the band (a systematic valuation disagreement, not rounding) is still surfaced as a break for investigation. You set tighter tolerance on high-value SKUs and wider on small-value consumables.
What is a quantity break, and why does it matter for inventory?
Inventory reconciliation has an axis the GL alone doesn't — physical quantity. ReconPe classifies a row pair where the SKU and value agree but the units differ as a quantity break, distinct from an amount break (value differs) or a timing break (dates differ). That separation is what lets shrinkage, write-downs, and physical-count variances be reviewed as inventory events rather than mislabelled as posting errors.
How does cut-off and stock-in-transit testing work?
Cut-off testing scans for movements received before period-end but invoiced (or posted) after it, and for stock-in-transit sitting between dispatch and receipt at the boundary. Rather than letting those land as ghost breaks against an unbounded movement file, they're flagged as cut-off candidates and carried in the unmatched pool with an age attribute. The memory layer fingerprints them and links the cross-period pair when the settling invoice or posting arrives next period — no manual carryforward.
Will it work with Tally, Zoho Books, QuickBooks, or NetSuite?
Today the flow is export-and-upload: ReconPe ingests CSV, Excel, JSON, and XML extracts — your stock valuation report and GL inventory extract — plus bank and ledger files with built-in templates, and exports approved journal entries as Tally XML. Schema detection recognises common stock-ledger shapes (SKU, warehouse, quantity, unit cost, value) and GL extract shapes without manual mapping. 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 statutory or Big Four review?
Every aggregation match exports its source movement row keys, target GL row key, residual, composite Fellegi-Sunter confidence, and the rule that triggered. Reruns are deterministic given the same inputs. The per-organisation exception memory pool keeps a fingerprint history with 180-day aging, so you can answer 'why did we close this GRNI break in March?' in October — with who decided, when, and why captured as a first-class audit trail.

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.
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.
Tie inventory to the 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 inventory tie-out on your own stock data.
Request early access