DEV Community

taxgarden
taxgarden

Posted on

Section 194Q as Code: The Rules Your Purchase Module Probably Ignores

If you build billing, procurement or ERP software for Indian companies, one tax rule quietly changes how a purchase ledger must behave: Section 194Q, TDS on purchase of goods. Here it is as logic.

``` def tds_194q(prev_year_turnover, seller_is_resident, seller_purchases_ytd, this_payment): if prev_year_turnover <= 10_00_00_000: return 0

if not seller_is_resident: return 0 # other sections apply excess = max(0, seller_purchases_ytd + this_payment - 50_00_000) - max(0, seller_purchases_ytd - 50_00_000) return excess * 0.001 # 0.1% if seller has PAN ```

The rules behind it:

The buyer's turnover in the preceding financial year must be above Rs 10 crore. FY 2025-26 turnover decides FY 2026-27.
The threshold is per seller, not overall: aggregate purchases from one resident seller above Rs 50 lakh in the year.
TDS applies only to the amount above Rs 50 lakh, at 0.1%. Total purchases of Rs 80 lakh from one seller means tax on Rs 30 lakh, which is Rs 3,000.
If the seller has no PAN, the rate jumps to 5%. Your vendor master needs a PAN field that is actually validated.
Deduction happens at the earlier of credit to the seller's account or payment. Booking an invoice can trigger it before any money moves.
Edge cases worth a ticket: purchase returns, GST shown separately on the invoice, and sellers where a different TDS section already applies. Test those with your finance team, not from a blog, since treatment can change with circulars.

Missing the deduction has a real cost for your customer: 30% of that purchase expenditure can be disallowed as a business expense under Section 40(a)(ia).

The section is being consolidated into Section 393 of the Income Tax Act 2025, effective 1 April 2026, so keep the section reference configurable in your reports instead of hard-coded. A fuller explanation of who counts as buyer and how the threshold works is in this Section 194Q TDS on purchase of goods guide.

Top comments (0)