Year-end closing is one of those processes that seems optional in Odoo until it isn't. Many SMB implementations run for years without formally closing fiscal years and get away with it - until they need audited financials, run into a tax authority asking for a locked trial balance, or discover that someone posted a backdated entry that changed last year's P&L after it was reported.
This guide covers what Odoo actually does during year-end, the steps in the correct order, and how to communicate the process to an accountant who has never used Odoo before.
Fiscal years and periods in Odoo#
Odoo derives fiscal years from the Lock Date settings, not from a separate "fiscal year" model (that model was removed in Odoo 13 when the accounting engine was rewritten). The fiscal year boundary is simply the date range between two lock dates.
Accounting → Configuration → Settings → Lock Date shows three lock fields:
- Lock Date for Non-Advisors - prevents ordinary accounting users from posting to dates on or before this date. Finance managers and advisors can still post.
- Lock Date for Advisors - prevents even advisors from posting to dates on or before this date.
- Tax Return Lock Date - prevents any posting to the locked period, including from the tax admin group.
For year-end purposes, set all three to the last day of the closed fiscal year after all adjusting entries are done.
Sequence of steps#
1. Review and post all outstanding entries#
Before closing, confirm:
- All bank statements for the period are imported and reconciled.
- All vendor bills and customer invoices for the period are posted (draft invoices do not affect the P&L).
- Accruals and prepayments have been reversed or posted.
- Depreciation entries for fixed assets are current.
- Any manual journal entries in draft are reviewed.
Run Accounting → Reporting → Trial Balance for the closing period. Export to XLSX. This is the baseline your accountant signs off on.
2. Run the tax report and file returns#
In Accounting → Reporting → Tax Report, set the date range to the fiscal year end and confirm all tax lines are correct. Most jurisdictions require the final period's tax return to be filed before the books are locked.
3. Post year-end adjusting entries#
Typical adjustments:
- Depreciation: if you use Odoo Assets, run Accounting → Accounting → Assets and confirm all depreciation boards are current. Each asset generates a journal entry per period; missing entries will leave fixed assets overstated.
- Inventory valuation: if using the Perpetual (AVCO or FIFO) costing method, confirm that the inventory valuation account matches the balance in the Balance Sheet. Any discrepancy indicates unreconciled landed costs or manual adjustments.
- Provisions and accruals: post any manual accrual entries for expenses incurred but not yet invoiced.
4. Reconcile all bank and cash accounts#
Accounting → Accounting → Bank Reconciliation should show zero outstanding lines for all bank accounts at the fiscal year-end date. Unreconciled bank lines that cross a year-end will cause the beginning balance for the next year to be wrong.
5. Close income and expense accounts (retained earnings)#
Unlike some accounting systems, Odoo does not automatically zero out income and expense accounts at year-end and transfer the net to retained earnings. This must be done with a manual closing entry.
The correct entry:
- Debit each revenue account for its closing balance (making it zero)
- Credit each expense account for its closing balance (making it zero)
- The net goes to the Retained Earnings account (typically a liability/equity account configured in Accounting → Configuration → Settings → Retained Earnings Account)
In practice, many Odoo accountants skip this entry because Odoo's P&L report already filters by date range and the Balance Sheet is calculated dynamically. The financial reports remain correct without the closing entry. However, skipping it means the income/expense account balances accumulate across years, which confuses accountants used to seeing zero balances in those accounts at the start of a new year.
Whether to post the closing entry is a policy decision. If your client is used to other accounting software, post it. If they are Odoo-native, the dynamic reports may be sufficient.
Year-end closing journal entry (example):
DR Revenue: Product Sales $500,000
DR Revenue: Services $120,000
CR COGS $310,000
CR Operating Expenses $180,000
CR Retained Earnings $130,0006. Set the lock date#
After all adjustments are posted and the trial balance is signed off:
- Accounting → Configuration → Settings
- Set Lock Date for Non-Advisors to December 31 (or your fiscal year end date)
- Set Lock Date for Advisors to the same date
- Set Tax Return Lock Date to the same date if your tax return for the period is filed
After locking, Odoo rejects any attempt to post a journal entry dated on or before the lock date. The only way to post to a locked period is to temporarily move the lock date backward - which creates an audit trail event.
7. Open the new fiscal year#
No explicit "open fiscal year" action is needed in Odoo. The new fiscal year starts automatically on the day after the lock date. Beginning balances in the new year are the ending balances from the closed year (for balance sheet accounts). Income/expense accounts start from zero in filtered reports (because the date filter in Odoo P&L reports is always a range, not cumulative).
Confirm opening balances by running Accounting → Reporting → Balance Sheet with the first day of the new year as the start date.
Opening entry for incoming clients#
When a client migrates to Odoo mid-year or at the start of a new fiscal year from another system, post an opening entry to set beginning balances:
- Create a journal of type Miscellaneous named "Opening Entry Journal"
- Post a journal entry dated the first day of the new fiscal year
- Debit each asset account and credit each liability/equity account to match the closing trial balance from the previous system
- The net difference goes to an Opening Differences account (a temporary equity account), which should net to zero if the import is complete
Odoo provides Accounting → Accounting → Miscellaneous → Opening Entries as a guided wizard for this in community editions. Enterprise editions have a dedicated onboarding wizard.
Multi-company year-end#
Each company in Odoo has independent lock dates. In a multi-company environment, close each company separately. Intercompany transactions that cross year-end require coordination - an intercompany invoice posted in company A after company B is locked will create a mismatch in intercompany reconciliation.
Set lock dates in a consistent order: close subsidiaries before the parent if the parent consolidates subsidiary financials.
Reporting after close#
Even after locking, Accounting → Reporting reports continue to work for historical date ranges. The lock date prevents new postings; it does not hide existing data. Your accountant can run any historical report at any time.
For comparative reports (this year vs last year in the P&L), Odoo's built-in P&L report has a "Comparison" option that shows two periods side by side. This is the report most auditors ask for.
Common mistakes#
Locking too early. If a lock date is set before all vendor bills for the period are received, late bills must be accrued manually or posted in the new period with a prior-period adjustment note. Do not set the lock date until your cutoff for late vendor bills has passed.
Forgetting to reconcile prepayments and deposits. Customer deposits and vendor prepayments that span year-end need to be reviewed. An unreleased deposit on a sale completed before year-end will overstate deferred revenue.
Not posting depreciation for the last period. Odoo's depreciation wizard posts up to "today". If you run depreciation on December 15 and forget to run it again on December 31, you will miss half a month for assets.
Misunderstanding the retained earnings configuration. If Retained Earnings Account is not configured, Odoo uses a fallback. Verify the correct equity account is selected before posting the closing entry, or the net income will land in the wrong place on the Balance Sheet.
For initial Odoo accounting setup, see the accounting journal entries for developers guide. For multi-company accounting rules, see the Odoo multi-company inter-company setup guide.

