Odoo 19's financial reports (P&L, balance sheet, cash flow, general ledger, trial balance, aged receivables and payables, and the tax report) come from the Enterprise module account_reports. Fixed assets need the Enterprise Accounting app. A reliable month-end in Odoo 19 follows a fixed order: bank, receivables and payables, deferrals and depreciation, currency revaluation, tax return, then lock dates. No year-end closing entry is needed, because the balance sheet works out current-year earnings itself.
The reports Odoo 19 gives you
All of these are live reports. You can unfold any line down to journal items, compare periods and export to PDF or XLSX. They sit under Reporting:
| Menu | Reports | Use it for |
|---|---|---|
| Statement Reports | Balance Sheet, Profit and Loss, Cash Flow Statement | Monthly management pack, board reporting |
| Ledgers | General Ledger, Trial Balance | Checking balances, auditor requests |
| Partner Reports | Partner Ledger, Aged Receivable, Aged Payable | Collections, vendor statements, payment runs |
| Taxes & Fiscal | Tax Report (with country variants such as GSTR-3B) | Preparing the tax return |
| Management | Executive Summary, Invoice Analysis, Analytic Report | KPIs and margin by project or department |
For Indian companies, the Enterprise Indian reports module (l10n_in_reports) adds an India-specific Profit and Loss variant and GSTR-1, GSTR-2B and GSTR-3B. Community has Invoice Analysis but none of the statutory statements. That is usually the deciding point for a company whose auditors expect the books to come out of Odoo.
Fixed assets and depreciation
Assets come from account_asset, which depends on the Enterprise Accounting app, not on Invoicing alone. Assets live under Accounting › Assets & Liabilities, and Asset Models under Configuration › Accounting.
Each asset or model sets:
- Method: Straight Line, Declining (with a declining factor), or Declining then Straight Line.
- Duration and period: a number of periods of one month or one year.
- Prorata: No Prorata, Constant Periods, or Based on days per period, for assets bought mid-period.
- Accounts: the fixed asset, accumulated depreciation and depreciation expense accounts, and the journal.
The quickest setup is to link an asset model to each fixed asset account. On that account's Automation tab, Automate Asset can be set to Create in draft or Create and validate, so a vendor bill posted to that account creates the asset for you. Once an asset is confirmed, its depreciation entries are scheduled and post on their dates. Modify, Pause, Resume, Sell and Dispose handle the changes, and Sell and Dispose post the gain or loss.
For India, l10n_in_asset installs automatically with assets. It changes the Declining method so the salvage value is respected, which is how written-down-value depreciation with a residual value is usually computed in India. Income-tax block-of-assets depreciation is a separate calculation. Keep that one in your tax working papers, not in the books.
Deferred revenue and deferred expenses
You don't need a separate module for deferrals. In Enterprise, an invoice or bill line gets Start Date and End Date fields. Fill them on a yearly AMC invoice or a prepaid insurance bill, and Odoo spreads the amount over the period.
Settings has a Deferred expense entries block and a Deferred revenue entries block. Each sets the journal, the deferral account, when entries are generated (On bill validation, or Manually & Grouped) and how the amount is spread (Days, Months or Full Months). The Indian chart already has deferred revenue and deferred expense accounts.
Our default: generate on validation for companies with few deferrals. Use Manually & Grouped when there are hundreds, so month-end posts one grouped entry per account, not one per invoice. Either way, the Deferred Revenues and Deferred Expenses reports under Review › Regularization Entries show what is still to be recognised.
A month-end closing sequence for Odoo 19
The order matters more than speed. Each step relies on the one before:
- Bank. Import or sync every bank journal to the last day and reconcile. Bank Suspense should be empty.
- Receivables and payables. All sales invoices and vendor bills for the month posted, and outstanding receipts and payments cleared.
- Inventory and payroll. Stock valuation and payroll entries posted, if those apps are in use.
- Deferrals and depreciation. Generate grouped deferral entries and check that the month's depreciation entries have posted.
- Accruals. Post accruals for goods received but not billed, and expenses incurred but not invoiced.
- Currency revaluation. For foreign-currency balances, run the Currencies report under Review › Regularization Entries and post the adjustment.
- Tax return. Under Accounting › Closing › Tax Returns, take the return through Review and Submit, then set the tax return lock date.
- Review and lock. Check the trial balance, P&L and balance sheet, then set Lock Everything for the month in Lock Dates….
A return that still has failing checks can't be submitted. The same menu also holds an Audit return type for year-end work, with 33 ready-made audit checks such as empty suspense accounts, bank statements and clearing of internal transfer accounts. Go through them once with your auditor and drop the ones that don't apply.
A month is closed when it is locked, not when the report has been sent.
Year-end in Odoo 19
At year end there is no closing entry to post. The balance sheet shows Current Year Unallocated Earnings and Previous Years Unallocated Earnings, computed from the P&L accounts, and the P&L starts from zero in the new fiscal year. What remains is judgement: provisions, the auditors' adjustments, allocating the result to reserves with a journal entry if your company does that, and finally a Hard Lock once the accounts are signed.
Build the checklist once, give each step an owner, and run it the same way every month. Next in the series: employees and HR records in Odoo 19. If your close takes longer than it should, we can look at it with you.
Questions we get asked
Does Odoo 19 Community have a balance sheet and P&L report?
No. The Balance Sheet, Profit and Loss, Cash Flow Statement, General Ledger, Trial Balance, aged reports and tax report all come from account_reports, an Enterprise module. Community includes Invoice Analysis and the underlying journal items, so you can export data to a spreadsheet, but it has no statutory financial statements that can be drilled into.
How does Odoo 19 calculate depreciation?
Odoo 19 Enterprise's Assets app supports Straight Line, Declining and Declining then Straight Line methods over monthly or yearly periods. Prorata can be off, based on constant periods, or based on days. Confirmed assets schedule depreciation entries that post on their dates. For Indian companies, the l10n_in_asset module adjusts declining depreciation so the salvage value is respected.
Do I need to post a year-end closing entry in Odoo?
No. Odoo computes the year's result on the balance sheet as Current Year Unallocated Earnings and carries earlier years as Previous Years Unallocated Earnings. Income and expense accounts start the new fiscal year at zero automatically. You only post entries for real decisions, such as moving the result into reserves, then lock the year with the lock dates wizard.
How are deferred revenue and prepaid expenses handled in Odoo 19?
In Odoo 19 Enterprise you enter a Start Date and End Date on the invoice or bill line, and Odoo spreads the amount over that period using the deferral accounts in Settings. Entries can be generated when the document is validated, or manually in a grouped entry at month end. Deferred Revenues and Deferred Expenses reports show the balance still to be recognised.