All Insights
Odoo implementation4 min read

Reconcile open receivables and payables before cutover

Check remaining amounts, counterparties, due dates and control totals before migrating open items to Odoo. Includes a worked reconciliation example.

Illustrative receivables: invoice A has 800 dollars open, B has 500, and a 100-dollar credit produces a 1,200-dollar net position.
Original DATUM calculation with invented amounts. The finance owner determines the migration treatment. Open full-size diagram

Move open receivables and payables only after the finance owner can reconcile the remaining amount on each item, the total by customer or vendor and the relevant control balance at the same cutoff. A matching grand total is necessary, but it can conceal the wrong document, due date or counterparty.

This is a cutover acceptance worksheet. The finance owner must choose the accounting treatment and migration method. Importing every original invoice and also loading an opening balance can duplicate amounts if the design does not account for both.

Freeze a definition before you freeze a file

Write down the company, cutoff timestamp, currency basis and source reports. Decide which items are open at that moment and who handles receipts, payments, credits or corrections that arrive after the extract.

The phrase “open invoice” needs care. An invoice may have a partial payment, an unapplied credit or a dispute. An unpaid vendor bill may share a supplier reference with another partial bill. Odoo 19.0 expressly notes that multiple bills can share a Bill Reference when a supplier issues partial bills or requests a deposit. The reference alone is therefore a poor migration identifier. Odoo 19.0 vendor bills.

Give each source item a stable identifier and preserve its relationship to the original document. Odoo's import documentation explains the use of External IDs for identifying records and updating previously imported data. Test the selected identifiers on the actual import model rather than assuming a visible invoice number performs the same function. Odoo 19.0 import documentation.

Reconcile from the detail upward

Use a separate sheet for receivables and payables. Keep different currencies separate until the finance owner defines the reporting basis.

CheckLegacy evidenceOdoo rehearsal evidenceRelease requirement
Item identitySource ID and original documentTarget record and preserved referenceOne intended target per source item
Open amountResidual at cutoffResidual after migration stepsAgrees on the chosen currency basis
CounterpartyCustomer or vendor identityCorrect target contactNo accidental name-based merge
Due dateOriginal terms and adjustmentsTarget due dateAging bucket has an explanation
AdjustmentsCredits, partial payments, disputesTheir intended migrated treatmentNothing silently omitted or counted twice
Control totalApproved source reconciliationMatching target reportFinance owner explains every difference

An invented receivables example shows why the detail matters. Invoice A originally totaled $1,200 and has $400 paid, leaving $800. Invoice B has $500 open. An unapplied customer credit is $100. On a deliberately simplified net basis, the position is $800 + $500 − $100 = $1,200.

A single $1,200 opening item might match that net total yet lose the two invoices, their different due dates and the credit. Whether summary or detailed migration is appropriate is the finance owner's decision. The test must verify the detail that collection and payment work will require afterward.

Use the rehearsal to expose changes at the boundary

Run the selected method in a disposable test database. Odoo warns that imports are permanent and cannot be undone; its Test action checks validity before import. A valid file is still not a reconciled ledger. Odoo 19.0 import documentation.

Test a fully open item, a partially paid item, a credit and two similarly named counterparties. Then repeat the agreed update process with the same source identifiers and check that it produces the intended update rather than duplicates.

Finally, simulate a payment received after the source extract. Name which system records it, how the migration delta captures it and how the team proves it was applied once. Repeat that check for a late supplier bill or correction.

Save the source reports, target reports, mapping version and difference log together. Release requires an accountable finance owner to explain the remaining differences, not a migration operator to report that all rows imported. The broader data migration rehearsal covers dependencies; this worksheet makes the open-item reconciliation explicit.

How we research and review these articles