Payroll compliance in India: what one salary actually triggers
Paying an employee ₹30,000 is never one transaction. It is a TDS computation, possibly a PF deposit and an ESI contribution, a state professional-tax entry, a payslip, and four government filings a year that must all agree with each other. Here is the whole machine, organised the only way it stays manageable — as a calendar.
The five deductions, and when each applies
| What | Applies when | The gist |
|---|---|---|
| TDS on salary (Sec 192) | Employee's annual tax liability > 0 | Estimate the year's income and tax (in the regime the employee declared), deduct one-twelfth monthly, true up in March. |
| Provident Fund (EPF) | Generally mandatory from 20 employees | 12% of basic+DA from the employee, matched by the employer (part of the employer's share goes to pension). Deposit + ECR return monthly. |
| ESI | From 10 employees (state-wise variations), for employees earning up to ₹21,000/month | 0.75% employee + 3.25% employer, funding medical cover. Monthly contribution. |
| Professional tax | State-specific (Maharashtra, Karnataka, WB, and others; not all states) | A small slab-based state levy the employer deducts and deposits on the state's own schedule. |
| Gratuity | Establishment with 10+ employees; paid on exit after 5 years' service | Not a monthly deduction but a real liability accruing every year — roughly 15 days' wages per year served. Budget it; don't discover it. |
The compliance calendar
| When | What is due |
|---|---|
| 7th of every month | Deposit last month's salary TDS (30 April for March's) |
| 15th of every month | PF deposit + ECR filing; ESI contribution |
| Quarterly — 31 Jul / 31 Oct / 31 Jan / 31 May | Form 24Q, the salary TDS return; Q4's includes Annexure II, every employee's full-year salary computation |
| 15 June | Form 16 to every employee, generated from TRACES after Q4's 24Q is processed |
| Start of the year (April) | Collect regime choices and investment declarations; they drive every month's TDS |
| January–February | Collect actual investment proofs; recompute; the March salary absorbs the difference |
The parts businesses get wrong
- Treating TDS as a March problem. Section 192 wants deduction spread across the year. A year of zero deduction and one crushing March salary is both illegal and cruel.
- Annexure II typed from memory. Q4's 24Q must state every employee's gross, exemptions, deductions and regime for the year — this becomes their Form 16 and pre-fills their ITR. If payroll and the return are two systems, they disagree here, in the employee's own tax record.
- PF on a "basic" engineered too low. Splitting salary so basic (and hence PF) is minimised has been litigated for years; allowances that are effectively universal count. Structure honestly.
- Missing the ESI exit-and-return: an employee crossing ₹21,000 mid-contribution-period stays covered till the period ends — dropping them the same month is a notice.
- Forgetting the states: professional tax registrations for each state you employ in, shops & establishment registrations, and state-specific leave rules travel with remote employees.
💡 The one-system rule: every payroll penalty story starts the same way — salary computed in one spreadsheet, TDS in another, the 24Q outsourced to a third party with a CSV. When one number changes (a mid-year hike, a joiner, a regime switch), the copies drift, and the drift is discovered by TRACES. Compute salary, TDS and the return from one place and the whole failure class disappears.
How Arthora ERP does this: payroll runs compute each employee's TDS from their declared regime and investments, month by month, with the March true-up built in. The 24Q — including Q4's Annexure II — is generated from the year's actual salary runs, not re-entered, and exports FVU-ready. PF and ESI amounts come out of the same runs, payslips carry the same numbers, and Form 16 Part B matches all of it because it has the same source. See the payroll module →
Payroll that files its own returns
Salary runs, TDS, 24Q with Annexure II, payslips and Form 16 — one system, one set of numbers. 7-day free trial, no card.