Closing the Month in Odoo 20: A Finance Team Walkthrough

Month-end close in Odoo differs from the ERP systems many accountants grew up on, because Odoo posts almost everything straight to the general ledger — journal entries are created as the business happens, not summarised in later. That removes the classic reconciliation between modules, but not the close itself: the month-end job in Odoo 20 is verification, cut-off, and locking, in that order. This walkthrough follows a sequence a finance team can run every month, adapted from Odoo's official year-end closing guidance in the 20.0 documentation, with the Odoo 20 changes that genuinely affect the routine.

What “closing” means in Odoo — and what it does not

There is no monthly period object to flip from open to closed. Instead, Odoo controls the past with lock dates. Setting a lock date prevents modifications to posted journal entries with an accounting date on or before that date, and prevents posting new entries dated on or before it; if an entry is dated too early, the system moves its accounting date to the day after the lock date. Administrators can configure a time-boxed exception when a correction is genuinely needed, and the exception — who, for whom, how long, and why — is logged in the chatter of the company record. The Hard Lock date is the exception to exceptions: it is irreversible, intended for inalterability requirements in certain countries, and most teams should reserve it for finalised year-ends, not monthly closes. A monthly close, then, is a rolling lock that advances one month at a time — but only after the verification work below is done. Locking first and verifying later is how teams lock their errors in.

Step 1: Finish the month's operational entry

Cut-off failures are the largest source of month-end noise. Before any reconciliation, make sure the month is complete: all customer invoices and vendor bills for the period created, and every draft entry deliberately confirmed or cancelled — the documentation's year-end checklist makes this point for December, and it applies twelve times a year. Chase the operational sources — uninvoiced deliveries, receipts without bills, and, new in the Odoo 20 flow, approved expenses, which now generate draft bills because the standalone Employee Expenses menu item was removed. A month is not ready to close while expense bills sit unreviewed in draft.

Two Odoo 20 tools shorten this step. Bill line prediction suggests the product, account, tax, and analytic distribution on vendor bill lines from history and labels, so late bills get encoded faster — while values already entered manually are preserved. And duplicate invoice detection should be swept before posting the final batch: yellow warnings only exist before posting, so the last entry session of the month is the last chance to use them; red warnings, which mark highly likely duplicates, persist on posted documents and belong in the pre-payment sweep described below.

Step 2: Reconcile the bank — completely

Odoo 20 raises the stakes here. Under the new bank consistency rule, every journal entry affecting a bank account must originate from a bank transaction; manual journal entries directly on bank accounts are no longer allowed. That eliminates an old category of month-end fudge — the hand-keyed “bank adjustment” — and means your bank position is only as good as your statement import and reconciliation discipline. Work the reconciliation until every statement line for the month is matched, use the refined statement validation feedback to find balance inconsistencies, and then prove the result with the new bank reconciliation summary report, which shows reconciled and unreconciled transactions as at the end date of the selected period. The close standard from the official checklist is simple: ending book balances must match bank statement balances, and anything unexplained gets a name and an owner, not a plug entry. While you work, note the renamed payment statuses in current Odoo — what was “In Process” is now “Paid”, and what was “Paid” is now “Reconciled” — so aged open items are read correctly during review.

Step 3: Clear suspense and reconcile receivables and payables

Close all suspense accounts: by month-end, every suspense balance should be explained and reclassified to its real home, because suspense is where cut-off errors hide. Then run the aged receivables and aged payables reports, and match outstanding payments and credits against open invoices and bills so the aged listings reflect reality. The documentation adds a review habit worth adopting monthly: examine receivables and payables aged over 60 days and assess whether an allowance for doubtful accounts or a provision for uncertain liabilities is needed. Doing that monthly makes the year-end version a formality. If your company reports in multiple currencies, also glance at the new Cumulative Translation Adjustment (CTA) line, now an auditable line on the balance sheet, trial balance, and general ledger balancing differences between historical and closing exchange rates.

Step 4: Book the period's systematic entries

With the operational month complete and reconciled, post the entries that belong to the period rather than to a transaction: depreciation, deferred revenue and expense recognition, accruals for obligations incurred but not yet billed, loan interest, and payroll-related postings. Confirm loans are properly registered so amortisation calculates automatically. Inventory deserves its own moment: in perpetual accounting, accrual entries for Bills To Receive, Billed Not Received, Invoices To Be Issued, and Invoiced Not Delivered can be generated directly from the inventory valuation closing report, hitting the valuation account directly. Stock-keeping teams should treat that report as a standard month-end stop, not a year-end discovery.

Step 5: Tax check

Run the tax report for the period and verify it before the numbers harden. Check that taxes collected and paid agree with the underlying invoices and bills, and that no draft documents are carrying tax that belongs in the return. Catching a tax error in the close is an adjustment; catching it after filing is a correspondence file.

Step 6: Review, adjust, then lock

Now read the month as a whole: trial balance, balance sheet, and profit and loss, scanned by a human who knows the business. The documentation reserves this stage for manual adjustments, work in progress, reclassifications, and corrections — entries that should be few, referenced, and explained. Only when the review is clean do you advance the lock date to the last day of the month, and communicate it first: the user whose late entry gets pushed to the following month should hear it from finance, not discover it from the system. If a correction surfaces afterwards, use the administrator exception mechanism — scoped, time-limited, reason recorded, logged in the company chatter — rather than quietly removing the lock.

The month-end checklist

StageTaskWhat “done” looks likeOdoo 20 note
Cut-offCreate all invoices and bills for the period; confirm or cancel every draftNo unexplained drafts dated in the monthApproved expenses now arrive as draft bills — include them in the sweep
Cut-offSweep duplicate warnings before final postingRed warnings corrected; yellow warnings investigated and notedYellow disappears after posting; red remains on posted documents
BankImport and reconcile all bank statements to month-endBook balance equals statement balance; exceptions namedBank consistency: bank entries must originate from bank transactions
BankRun the bank reconciliation summary reportReconciled vs unreconciled position proven at period end dateNew report in Odoo 20
AR / APMatch payments and credits to open invoices and bills; clear suspense accountsAged listings reflect real open items; suspense at zeroPayment statuses renamed: Paid and Reconciled
AR / APReview items aged over 60 daysAllowance / provision decision documentedStraight from the official closing checklist
Period entriesDepreciation, deferrals, accruals, loan interestAll systematic entries posted for the periodLoans registered for automatic amortisation
InventoryRun the inventory valuation closing report (perpetual accounting)Bills To Receive / Invoiced Not Delivered accruals postedEntries now hit the valuation account directly
TaxRun and verify the tax reportFiling position explainable; no tax stranded in draftsVerify before locking, not after filing
ReviewRead trial balance, balance sheet, and P&L; post final adjustmentsFew, referenced, explained adjustments onlyCheck the CTA line if you report multi-currency
LockAdvance the lock date to the last day of the monthPeriod protected; exceptions only via administrator, logged in chatterKeep Hard Lock for final year-ends — it is irreversible

Making it a routine instead of a monthly emergency

The difference between a two-day close and a two-week close is rarely effort; it is timing. Reconcile bank activity weekly so step 2 is a confirmation, not a reconstruction. Give operational teams a published cut-off and hold it kindly but firmly. Keep the checklist above as a living document, annotated each month with whatever surprised you — surprises repeat until the checklist absorbs them. And respect what Odoo 20 has changed in your favour: bank consistency removes a class of manual-entry drift, the reconciliation summary report turns proof into a click, and duplicate detection front-loads its soft warnings to when you can still act. A close built on those tools is mostly verification — and verification, unlike reconstruction, fits in a day.

Further reading

Leave a Comment