How to Manage TDS/TCS Threshold Limits in Odoo 20 · Calibre Consulting

Manage TDS thresholds in Odoo 20 on the bill.

Odoo 20 has no TDS threshold setting. This tutorial shows how to apply TDS only after a vendor crosses the limit, using the tax on each vendor bill.

This guide shows Indian businesses on Odoo 20 how to deduct TDS only after a vendor crosses the legal threshold. Odoo 20 has no threshold setting and does not track cumulative totals for you, so you control TDS on each vendor bill: keep the TDS tax on the bill lines once a vendor has crossed the limit, and leave it off while the vendor is below it.

Before you start

How TDS works in Odoo 20

In Odoo 20, a TDS tax is a withholding tax: a purchase tax with a negative rate and the Withhold box ticked on the tax form. A withholding tax does not reduce the amount due when the bill is confirmed. The bill keeps the full amount open, and the deduction is recorded later, when you click Pay on the bill.

The Pay window then offers three options:

Odoo picks the default from the bill. With an open withholding amount and a net amount to pay, it opens on Withhold and Pay; with only the withholding left open, on Withhold Only; with no withholding tax, on Payment Only, with the Withholdings tab hidden. So whether TDS applies to a bill depends on one thing: whether its lines carry a TDS tax.

Apply TDS only above the threshold, step by step

  1. Open the Invoicing app (Accounting in Enterprise) and go to Configuration > Settings. In the Indian Integration section, tick TDS. A TAN field appears below it and is required: enter your Tax Deduction Account Number, then click Save. Turning TDS on activates the TDS taxes that ship with the Indian localization.
  2. Go to Configuration > Accounting > Taxes and find the TDS tax for the type of expense, for example by searching "TDS". The taxes shipped with Odoo 20 are named by the newer section numbering, such as "10% TDS 393(1) SI.6(iii) D(b) PROF P" for professional services. Open one and the Withhold box is ticked. A tax named after an older section, such as "2% TDS 194J", was created in your database or carried over from an earlier version.
  3. Go to Vendors > Bills and create or open the vendor's draft bill. On the Invoice Lines tab, look at the Taxes column of each line.
  4. If the vendor is still below the threshold for the financial year, remove the TDS tax from the Taxes column of each line, then click Confirm. The bill has no withholding amount, so it can be paid in full.
  5. If the vendor has crossed the threshold, keep the TDS tax on the lines (add it if it is missing) and click Confirm.
  6. Click Pay. For a bill with TDS, the window opens on Withhold and Pay, and the Withholdings tab lists the withholding base, the tax and the withholding amount. The Net Amount field shows what the vendor actually receives. Click Create Payment.

To know which vendors have crossed the limit, filter Vendors > Bills on the vendor and the financial year's bill dates, and read the total of the Tax Excluded column at the bottom of the list.

Check that it worked

Run this test in a test copy of your database rather than on live books. Create two test bills for the same product: one with the TDS tax on the line and one without it. Confirm both and click Pay on each.

Where the TDS tax comes from

A bill line takes its default taxes from the product's Purchase Taxes field, or from the company's Default Purchase Tax setting when no product tax applies. A TDS tax set as a default there lands on every new bill line for that product, including bills from vendors below the threshold. For sections with a threshold, it is usually simpler to leave TDS out of the product defaults and add it on the bill line once the vendor qualifies.

What changed from Odoo 19

In Odoo 19, a TDS/TCS Section held a per-transaction limit, an aggregate limit and an aggregate period (monthly or financial yearly), and was linked to the account on the line. Even then, the threshold did not switch TDS on or off: when a bill crossed a limit, Odoo showed a warning such as "It's advisable to deduct TDS u/s 194J on this transaction", and the accountant decided whether to add the tax. Odoo 20 removed the section limits and that warning, with no replacement field.

TCS follows the same rule

The TCS taxes shipped with Odoo 20 are not withholding taxes: they have a positive rate and are added to the customer invoice total like any other tax. Turn them on with the TCS box in the same Indian Integration section. There is no threshold check for TCS either, so leave the TCS tax off the invoice lines while the customer is below the limit and add it once the customer crosses it. Odoo 20 still warns on the invoice when a TCS tax is used and the customer has no PAN record, advising the higher rate.

Pitfalls that follow from the design

Steps verified on Odoo 20. Menus and labels can differ on other versions.

Common questions

Does Odoo 20 have a TDS threshold limit setting?

No. Odoo 20 has no field for a TDS or TCS threshold. The TDS/TCS Section that held per-transaction and aggregate limits in Odoo 19 was removed, and the withholding flow that replaced it has no threshold setting.

Does Odoo 20 apply TDS automatically once a vendor crosses the threshold?

No. In Odoo 20, TDS applies when the vendor bill line carries a TDS tax, and Odoo does not add or remove that tax based on the vendor's running total. Doing this automatically requires customization.

Did Odoo 19 apply TDS automatically above the threshold?

No. Odoo 19 showed a warning on the bill advising the user to deduct TDS under the section, and the accountant decided whether to add the tax.

Can I choose Payment Only in Odoo 20 to skip TDS on a vendor bill?

Not if the bill carries a TDS withholding tax. Payment Only pays the bill total minus the withholding amount and leaves the withheld part open on the bill, so the tax has to be removed from the bill lines before the bill is confirmed.

Does setting TDS Deduction to No on a vendor's PAN record stop TDS in Odoo 20?

Not in standard Odoo 20. The field is stored on the PAN record, but nothing on vendor bills reads it, so TDS is still controlled by the tax on the bill lines.

Talk to the team.

If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.

Book the call →