Odoo 20 makes eight accounting changes for India. The ones that matter most are a TDS flow built around the Pay button, support for Composition taxpayers with CMP-08 and GSTR-4, Schedule III Division I financial statements, and the QRMP scheme. The others are a bill of entry flow for imports, price-adjustment credit notes, Reverse Charge self-invoices and a count of invoices waiting for e-invoicing on the dashboard. Indian payroll gets its own list, including monthly TDS challans and the new quarterly Form 138.
If you are still on Odoo 19, our GST compliance in Odoo 19 guide describes the starting point.
The India changes at a glance
| Odoo 20 change (release notes) | In the 20.0 India docs? |
|---|---|
| TDS with "TDS & Payment", "TDS Only" or "Payment Only" | Yes |
| Composition taxpayers, with CMP-08 and GSTR-4 | Not yet |
| Financial statements under Schedule III, Division I of the Companies Act | Not yet |
| QRMP scheme: quarterly GSTR-1, with IFF for the first two months | Not yet |
| Bill of entry flow for imports, with duty in inventory cost | Yes |
| Credit notes for price adjustments | Yes |
| GST-compliant self-invoices under Reverse Charge | Not yet |
| Invoices pending e-invoicing shown on the Accounting Dashboard | Not yet |
TDS in Odoo 20: deducted through the Pay button
In Odoo 19, a posted bill had a TDS Entry button. In Odoo 20, TDS taxes are marked Withhold. They don't reduce the bill's amount due. Instead, the bill shows TDS Due and Net Due under the totals once it's confirmed, and you record the deduction from the Pay button.
Setting it up
Under Accounting › Configuration › Settings, in the Indian Integration section, enable TDS or TCS. TDS needs the company's TAN. Then, under Default Accounts › India TDS Control, set a TDS Journal (a miscellaneous journal) and a TDS Control Account. The default is TDS (Withholding Control). TDS purchase taxes also take an optional TDS Sequence in their advanced options, to number TDS lines automatically.
How the base is computed
TDS is computed on the amount before GST, and TCS on the amount including GST. The documentation's examples:
- A vendor bill line of ₹100 with 18% GST and 10% TDS: GST ₹18, TDS ₹10.
- A customer invoice line of ₹100 with 18% GST and 1% TCS: GST ₹18, TCS ₹1.18.
Recording TDS on a bill
- Add the TDS tax on the bill line and confirm the bill.
- Click Pay and choose an option. TDS Only, the default, records the TDS entry without paying the vendor. TDS and Pay records both, paying the net amount. Payment Only pays the vendor later, after TDS has been booked.
- Check the Withholdings tab, which is pre-filled from the bill's TDS taxes. You can change the base or the tax, or add a line.
- Click Create Payment.
TDS Only at booking, then Payment Only at payment, is the sequence most finance teams want when TDS has to be deducted at the earlier of credit or payment. The same flow works on customer invoices when a customer deducts TDS from what they pay you. Two limits from the documentation: TDS options aren't available when one payment covers several bills, so record TDS bill by bill. TDS can also be deducted on advance payments. When the advance is later reconciled with a bill carrying the same TDS tax, it reduces that bill's TDS Due.
Reports are under Accounting › Reporting › Tax Report, as the TDS I.T. Act 25 Report and TCS I.T. Act 25 Report. Both group amounts by section of the Income-tax Act, 2025, which replaced the 1961 Act from 1 April 2026. Check with your CA that the section mapping matches how you report transactions that straddle the changeover.
Composition scheme support in Odoo 20
The release notes say: "GST compliance has been extended to Composition Taxpayers, with dedicated support for the Composition Scheme and its statutory returns, CMP-08 and GSTR-4." CMP-08 is the composition dealer's quarterly statement and GSTR-4 the annual return.
Odoo 19 already let you mark a customer or vendor as Composition in their GST treatment. The new wording is about your company being the composition taxpayer. That matters for small traders and manufacturers registered under the scheme. The 20.0 documentation doesn't yet explain how to set it up, which menus produce CMP-08 and GSTR-4, or whether this sits in Community or in the Enterprise reports module. Until it does, work through it on a test database with your CA:
- Does an invoice from a composition company carry the declaration and tax treatment your CA expects?
- Do the CMP-08 figures match your turnover by rate for the quarter?
- Does the GSTR-4 output cover inward supplies, including reverse charge?
Schedule III financial statements
The release notes say Odoo 20 lets you "prepare financial statements with the prescribed presentation, classification, and disclosures as required under Schedule III, Division I of the Companies Act". Division I is the format for companies that prepare accounts under the Companies (Accounting Standards) Rules. Companies on Ind AS use Division II, which the release notes don't mention. If you are on Ind AS, don't assume the new statements apply to you.
Odoo 19 and 20 both include a Profit and Loss (IN) report showing opening and closing stock, for companies using continental accounting. The Schedule III statements are new. Have your auditor compare their layout and notes with last year's signed accounts before you rely on them.
QRMP, credit notes, imports and self-invoices
QRMP
Odoo 20 adds the Quarterly Return Monthly Payment scheme, with "quarterly GSTR-1 filing and IFF for the first and second months of the quarter". IFF, the Invoice Furnishing Facility, lets QRMP taxpayers upload B2B invoices monthly so their customers can claim input credit sooner.
Price-adjustment credit notes
A credit or debit note now has an Adjustment Type in its Other Info tab. Standard is for quantity changes such as returns. Price Adjustment is for amount-only changes. For a price adjustment, Odoo reports the quantity and unit price as zero in the e-invoice, leaves the note out of the GSTR-1 HSN quantity summary and doesn't change the invoiced quantity on the sales order. In the documentation's example, a ₹500 post-sale discount gives a taxable value of ₹500 and GST of ₹90, and the order still shows all 10 units invoiced.
Bill of entry for imports
The new Indian - Bill Of Entry module (l10n_in_boe) creates a customs vendor bill and spreads the duty across stock receipts through landed costs. Imported products must use FIFO or AVCO costing. From a posted vendor bill with GST Treatment set to Overseas and a matched purchase order, click Bill Of Entry. Then pick the received transfers, enter the bill of entry number, date and port code, and fill in the assessable value, customs duty and purchase taxes per line. Odoo creates a draft bill for the duty and import tax, and a linked landed cost.
Reverse Charge self-invoices and e-invoice backlog
Odoo 20 can generate and print GST-compliant self-invoices where you, as recipient, must issue one under Reverse Charge. The Accounting Dashboard now shows how many invoices are waiting for e-invoicing. Clicking the count opens them, and you can send them one by one or in bulk.
Indian payroll changes in Odoo 20
Payroll is an Enterprise app. The release notes list these India payroll items:
- Employees can generate and print their TDS declarations from their own profile.
- Monthly TDS challans to record and deposit TDS deducted from salaries.
- Form 138, generated quarterly, to report salary TDS deducted and deposited. Tax press reports that Form 138 replaces Form 24Q under the Income-tax Rules, 2026. Confirm this with your CA.
- A Gratuity Calculation Report, an EPF Summary report, and sandwich-leave options (weekends, company holidays, or both).
- A Notice Period tab when ending a contract, a salary configurator for applicants, and HDFC eNET salary files.
For the Odoo 19 baseline, see running Indian payroll in Odoo 19.
How to test the India changes before go-live
- Upgrade a copy of your Odoo 19 database and post a month of real bills with TDS through the new Pay options.
- Compare the TDS report with your last filed return for the same period.
- If you are a composition or QRMP taxpayer, produce a quarter's returns in Odoo and have your CA compare them line by line.
- Reconcile one import end to end with a bill of entry and check the product cost after the landed cost.
- Print the Schedule III statements for last year and give them to your auditor.
- Pick a go-live date away from your GST and TDS filing dates.
The general upgrade steps are in upgrading from Odoo 19 to 20. For an India setup review, talk to us.
Questions we get asked
How does TDS work in Odoo 20?
In Odoo 20, TDS taxes on a bill are withholding taxes: they do not reduce the amount due but show TDS Due and Net Due under the totals. You record TDS from the Pay button with TDS Only, TDS and Pay, or Payment Only, reviewing the lines in the Withholdings tab. TDS can also be deducted on advance payments, and reports group amounts by section of the Income-tax Act, 2025.
Does Odoo 20 support the GST Composition scheme?
According to the Odoo 20 release notes, yes. GST compliance has been extended to Composition taxpayers, with dedicated support for the Composition Scheme and its statutory returns, CMP-08 and GSTR-4. As of November 2026, Odoo's 20.0 India documentation does not yet describe the setup or menus, so test the returns on a copy of your database with your CA.
Can Odoo 20 produce Schedule III financial statements?
The Odoo 20 release notes say it can prepare financial statements with the presentation, classification and disclosures required under Schedule III, Division I of the Companies Act. Division I applies to companies following the Companies (Accounting Standards) Rules. Companies on Ind AS report under Division II, which the release notes do not mention. Have your auditor review the output before using it.
What is the bill of entry flow in Odoo 20?
The Indian Bill Of Entry module, l10n_in_boe, records customs duty on imported goods. From a posted overseas vendor bill matched to a purchase order, you open the Bill of Entry wizard, select the receipts, enter the bill of entry number, date, port code, assessable values and duty. Odoo creates a draft customs bill and a landed cost that adds the duty to inventory cost.