PF, ESI, Professional Tax,
and TDS — all in one place
Payroll is the most-deferred module in every Indian Odoo implementation. The statutory complexity is real — but so is Odoo’s capability to handle all of it natively. This guide covers the complete configuration sequence, the 2025–26 Labour Code changes that affect your setup, and the five mistakes that trigger government notices.
When a business is evaluating Odoo for the first time, payroll is almost always moved to a later phase. The reasoning is understandable — get the core transaction flow stable first, then add HR. What happens in practice is that “later” becomes twelve months away, and the business continues running payroll in a disconnected Excel sheet or a standalone software while everything else runs in Odoo.
The cost of this split is real. Payroll data that does not flow into Odoo’s accounting means salary journals are being entered manually, PF and ESI liability accounts are being reconciled by hand, and the finance team has no single source of truth for employee cost. For a business with 50 to 500 employees, that is a meaningful operational drag every month.
The reason payroll gets deferred is not that Odoo cannot handle Indian payroll. It can — and in Odoo 19, the Indian payroll module handles EPF, ESI, Professional Tax, TDS on salary, Labour Welfare Fund, gratuity, and all statutory reporting natively. The reason it gets deferred is that the configuration is more involved than other modules, and most implementation partners treat it as a specialised workstream.
This guide walks through every step of that configuration, what changed with the 2025 Labour Codes, and what the compliance failure modes look like in practice.
Two major changes affect Indian payroll from 2026. First, the four Labour Codes were implemented in November 2025, consolidating 29 older laws. The critical payroll impact: basic salary plus dearness allowance must now be at least 50% of total CTC — the 50% wage rule. This directly increases EPF and gratuity contributions. Second, the Income Tax Act 2025 came into force on April 1, 2026, replacing old section and form references: TDS on salary now falls under Section 392(1), the quarterly return is Form 138, and the annual employee certificate is Form 130. Any payroll system still using old form numbers will fail validation on the income tax portal.
Before configuration, it is worth mapping out the full statutory landscape that Odoo needs to cover. Indian payroll is ranked 12th globally in compliance complexity — the layers of central and state law are genuine, and each has its own registration, calculation, and filing requirement.
- EPF employee and employer contributions
- ESI employee and employer contributions
- State-based Professional Tax slabs
- TDS on salary (old and new tax regime)
- Labour Welfare Fund (state-specific)
- Gratuity calculation
- EPF, ESI, LWF export reports (XLSX)
- UAN, ESIC number, PAN fields on employee
- EPF employer ID in company settings
- ESIC employer code in company settings
- PT registration number per state
- PF cap choice (₹15,000 or actual basic)
- Salary structure with 50% wage rule
- TDS regime declaration per employee
- HRA, 80C, 80D declarations in contracts
- LWF applicability per state of operation
Follow this order exactly. Each step activates features used in the next. Skipping steps or working out of sequence creates conflicts that require manual correction after payslips have been generated.
These are the current PT slabs for the most common states. PT is not levied in all states — Delhi, Haryana, Rajasthan, and several others do not impose PT. Always verify the current slab from your state’s Commercial Tax Department for the active financial year.
Once payslips are confirmed each month, Odoo generates all statutory reports directly from the Payroll module. These reports are formatted for portal upload — no manual reformatting is required.
| Report | Path in Odoo | Format | Frequency |
|---|---|---|---|
| EPF ECR file | Payroll → Reporting → EPF Report | XLSX | Monthly — upload to EPFO portal by 15th |
| ESI contribution report | Payroll → Reporting → ESI Report | XLSX | Monthly — upload to ESIC portal by 21st |
| Labour Welfare Fund report | Payroll → Reporting → Labour Welfare Fund Report | XLSX | Per state schedule (monthly / half-yearly) |
| TDS summary (Form 138) | Payroll → Reporting → TDS Report | XLSX / PDF | Quarterly — income tax portal filing |
| Form 130 (employee TDS certificate) | Generated per employee from payslip | Annual — issue by June 15 | |
| Payslips | Payroll → Payslips → Batch print | Monthly — distribute to employees |
From April 1, 2026, the Income Tax Act 2025 replaced the old Act. TDS on salary now falls under Section 392(1) instead of Section 192. The quarterly return is Form 138 (previously Form 24Q). The annual employee certificate is Form 130 (previously Form 16). If your Odoo version or payroll configuration still references the old form numbers, update them before the first quarterly filing of the 2026–27 year. Filing with old form numbers will fail portal validation.
One of the strongest reasons to run payroll inside Odoo rather than a standalone tool is the accounting integration. When a payslip batch is confirmed in Odoo, the system automatically creates journal entries that debit employee cost accounts and credit the corresponding liability accounts — EPF payable, ESI payable, TDS payable, PT payable, salary payable — without any manual journal entry.
This means the finance team has real-time visibility of payroll liabilities before the statutory deposits are made. When the deposits are processed, the Odoo payment reconciles against the liability account, closing the cycle cleanly. At month-end, the trial balance reflects actual salary expense and statutory liabilities without any manual intervention from the accounts team.
“When payroll runs inside Odoo, the accounts team stops entering salary journals manually. Statutory liability accounts update automatically. The trial balance is correct from day one of the month, not day ten.”
For businesses with multiple cost centres, departments, or project-based billing, Odoo’s salary structure can tag each payslip line to an analytic account — allocating employee cost to the correct project or department automatically. This is the feature that makes Odoo payroll genuinely useful for professional services, manufacturing, and project-based businesses where employee cost allocation matters for profitability analysis.
Need help configuring Odoo payroll for your Indian business?
ochre.digital configures PF, ESI, PT, TDS, and salary structures for businesses across India — with CA involvement before go-live. We get it right the first time so you are not correcting statutory reports after the fact.