Most of the Odoo month-end close problems we get called in to fix are not accounting problems. They are sequencing problems. Someone reconciled the bank before the last vendor bill landed. A lock date got set a day too early. Now a credit note cannot be posted without a support ticket. We have run this close with enough clients across Bangkok, New York and Delhi NCR to settle on an order that avoids most of that. This post walks through it step by step.
None of this requires custom code. It is configuration, discipline, and knowing which Odoo screen to open first. Here is the one honest caveat we will repeat more than once: Odoo will let you close out of order if you are not careful. The lock date is the only thing that actually stops a backdated entry once people start working from memory instead of a checklist.
Why the Odoo month-end close order matters more than the tasks
Every accountant knows the individual tasks. Reconcile the bank. Post accruals. Release deferrals. Check the trial balance. Lock the period. The mistake we see most often is doing them in whatever order is convenient that day. Lock the period before all vendor bills are entered, and you either reopen the lock, which defeats its purpose, or push a real expense into next month. That quietly understates this month's profit and overstates the next.
The sequence we use, every month, every client:
- Freeze the input window and chase missing documents
- Complete bank reconciliation
- Post accruals for expenses incurred but not billed
- Release or create deferrals for prepaid income and expenses
- Review the trial balance and fix misclassifications
- Run and review the draft P&L and balance sheet
- Set the accounting lock date
- Set the tax lock date (if different, after VAT or PND filing)
We will go through the parts that cause the most friction.
Bank reconciliation first, not last
Bank reconciliation has to be substantially done before accruals. Unmatched bank lines are often the evidence that an accrual is missing in the first place. In Odoo Accounting, we work from the Bank Reconciliation view. We match statement lines to existing vendor bills, customer invoices and miscellaneous entries, flagging anything with no counterpart yet.
For clients on PromptPay in Thailand, this step has its own shape. Incoming PromptPay settlements often batch multiple customer payments into a single bank line. Point-of-sale or Shopee and Lazada payouts can net out fees before the funds ever hit the account. We handle that with a dedicated clearing account and reconciliation models rather than forcing one-to-one matching, because that is where most "why doesn't this balance" tickets come from.
A genuine limitation here: Odoo's auto-reconciliation suggestions are only as good as the reconciliation models you configure. Out of the box, they miss recurring patterns specific to your bank's statement format. Someone has to tune those rules once before they save real time.
Odoo month-end close accruals: the step people skip under time pressure
Accruals are for cost or revenue that belongs in this period but has no invoice yet: a shipment received but not billed, a service delivered but not yet confirmed by the vendor. We post these as manual journal entries dated the last day of the month, usually to an "accrued expenses" or "accrued income" account. We reverse them automatically on the first day of the next month, so the real bill, when it arrives, does not double count.
The practical rule we give clients: if you are not sure whether something needs an accrual, ask whether the expense or revenue economically happened this month regardless of when the paperwork shows up. Freight that arrived on the 29th but gets invoiced on the 3rd of next month belongs in this month's close.
Deferrals: spreading what spans more than one period
Deferrals run the opposite direction from accruals. A twelve-month software license paid up front, or an annual customer subscription invoiced in full, should not hit the P&L in a single month. Odoo Accounting's deferred expense and deferred revenue models let you set a recognition schedule. The system posts automatically each period instead of relying on someone to remember a manual journal entry every month.
We set these up at the point the original invoice is recorded, not during close. Retrofitting a deferral schedule after three months have already gone through the P&L means manually correcting those months too. If your team is not using the deferral models today, month-end close is a reasonable prompt to set them up for the arrangements you know are recurring.
Trial balance review and the accounts that always need a second look
Before anything gets locked, we pull the trial balance and walk a short list of accounts that tend to hide problems:
| Account type | What we check |
|---|---|
| Suspense / undeposited funds | Should be at or near zero after reconciliation |
| Accrued expenses | Matches the list of accruals posted this month |
| Deferred revenue | Balance moves in line with the recognition schedule |
| Input/output VAT | Reconciles to the VAT return before filing |
| Withholding tax receivable | Matches PND 3 / PND 53 certificates issued |
This is also where we catch miscoded transactions: a vendor bill posted to the wrong expense account, a customer payment sitting in a clearing account instead of being matched. Catching these before the lock date is far cheaper than unwinding them after.
Odoo month-end close lock dates: the control that actually holds
Odoo Accounting supports separate lock dates for different purposes, commonly an overall accounting lock date and a tax lock date set independently. We set the accounting lock date only after the trial balance review is signed off. We set it to the last day of the closed month, not a date in the future, so any attempt to post or edit an entry before that date is blocked for every user except someone with the right access rights.
The tax lock date usually comes a few days later, once the VAT return (PP.30) or the PND withholding filings are actually submitted. Adjustments sometimes surface during the filing review itself. Locking both on the same day is tempting but has bitten clients who found a withholding tax certificate mismatch the day after filing, with no clean way to correct it without reopening the full accounting lock.
One trade-off worth naming plainly: lock dates are a control, not a guarantee. A user with administrator rights can still change them. If that access is not restricted, the control is theoretical. Part of what we check during an Odoo ERP support engagement is exactly that: who can move a lock date, and whether that list matches who should be able to.
Why the first Odoo month-end close after go-live matters most
We stay engaged through a client's first full month-end close after go-live. Not because the configuration is exotic, but because the first close is where people discover which habits from their old system do not map cleanly onto Odoo. A spreadsheet-based accrual process, for instance, or a bank reconciliation workflow that assumed one-to-one matching. That first close is also usually where we tune reconciliation models and set up any deferral schedules the client did not flag during implementation.
If your close routine today relies on one person remembering the right order, fix that before it becomes a problem during an audit or a tax filing review. A written checklist, lock dates actually enforced, and reconciliation models tuned to your bank's statement format will do more for close accuracy than any accounting knowledge gap ever will.
For teams running Odoo accounting support or Odoo consultancy services, the close routine is one of the first things worth auditing. It tells you more about day-to-day data quality than almost any other single process in the system.



