Odoo 19 Payroll is an Enterprise app, and its Indian Payroll localisation (l10n_in_hr_payroll) installs automatically for Indian companies. It ships four salary structures with rules for Basic, HRA, allowances, PF, ESI, Professional Tax, Labour Welfare Fund, gratuity and a monthly TDS deduction, plus EPF, ESI and salary register reports. It is a solid base for a standard CTC payroll, but tax slabs, PT states and TDS need checking before your first pay run: several values are shipped as fixed defaults and some statutory work still happens outside Odoo.
How Odoo 19 payroll is put together
Payroll sits on top of the employee records from part 24. In Odoo 19 there is no separate contract model: wage, pay category (the salary structure type) and all Indian salary components live on the employee's version. The chain is:
- Structure type on the employee's version (for example India: Employee Pay), which sets the default structure and working schedule.
- Work entries, generated from the schedule, approved time off and, if you use it, attendance. They decide paid and unpaid days.
- Structure, a set of salary rules evaluated in sequence (Payroll > Configuration > Salary > Structures).
- Rule parameters, dated values the rules read, such as the PF wage ceiling (Configuration > Salary > Rule Parameters).
- Payslips, grouped into Pay Runs, which are confirmed and posted to accounting.
One-off additions and recurring deductions, such as a loan recovery or salary advance, go in Salary Adjustments rather than being typed onto each payslip.
What the Indian localisation ships
The module creates four structure types, each with a default structure:
| Structure type | Default structure | What it contains |
|---|---|---|
| India: Employee Pay | India: Regular Pay | Basic, HRA, standard allowance, performance bonus, LTA, fixed allowance, phone, internet, meal vouchers, company transport; PT, PF (employee and employer), medical insurance, gratuity, ESI, LWF, TDS |
| India: Non-Executives | Non-Executive Employee | A longer list: child education and hostel allowances, city allowances, NPS contributions, food coupons, group term insurance and more |
| India: Worker | Worker Pay | Basic, conveyance, special allowance, Professional Tax |
| India: Intern | Stipend | Stipend with deductions and reimbursements only |
Most companies should start from India: Regular Pay. Its 28 rules follow the usual CTC split, and the amounts come from fields on the employee's Payroll tab: basic salary as a percentage or amount, HRA, standard allowance, bonus, LTA and so on, with the fixed allowance absorbing the balance. Settings under Payroll > Configuration > Settings hold the company's EPF Employer ID, ESIC IP number, PT number and LWF number, and switch each scheme on or off.
PF, ESI, PT and LWF: what the rules actually do
- Provident Fund. Employee and employer PF are computed on basic at 12% (the
l10n_in_pf_percentparameter). Per employee you choose either "Restrict contribution to ₹15,000 of PF Wage" or a percentage of actual PF wages. The EPS share (8.33%) is also a parameter. - ESI. Employee and employer ESIC percentages are set on each employee and applied to gross. The ₹21,000 gross ceiling exists as a parameter and is checked by the Non-Executive structure; in Regular Pay, eligibility is controlled by whether you fill the percentages, so clear them when someone crosses the ceiling.
- Professional Tax. Each employee gets a Professional Tax slab. Slabs are shipped for Gujarat, Maharashtra (with separate male and female slabs), Karnataka, West Bengal and Andhra Pradesh. Other states, including Tamil Nadu, need their own rule parameter before PT will compute.
- Labour Welfare Fund. Fixed employee and employer amounts on the employee, with a Labour Welfare Fund report.
TDS on salary: what is and is not covered
This is where expectations most need setting. The TDS rule deducts the fixed monthly amount entered in the employee's TDS Deduction field. The localisation includes a TDS computation that projects annual income and applies the slab chart, standard deduction, Section 87A rebate, surcharge and 4% health and education cess to propose a monthly figure, but it models the new regime only.
What we did not find in the 19.0 source: an old-versus-new regime choice per employee, investment declarations and proof collection (80C, 80D, HRA exemption), automatic re-computation of TDS as the year progresses, Form 16 generation, or a Form 24Q return file. Plan for those to stay with your tax consultant or a specialised tool, and update the monthly TDS figure on each employee when their projection changes.
Pay runs, payslips and reports
A monthly cycle in Odoo 19 looks like this:
- Resolve work entry conflicts for the month. Unpaid leave work entries are what reduce pay in the Regular Pay structure, so make sure approved leave is in before you generate payslips.
- Create a pay run under Payroll > Payslips > Pay Runs and click Generate Payslips for the employees in scope.
- Review payslips, add inputs where needed, and recompute. Compare totals with last month's register before going further.
- With Payroll Accounting installed, Create Draft Entry produces the journal entry in draft for finance to check and post.
- Use Payment Report to produce the bank payment file. For India the default format is a Payment Advice, exported as Excel, which you can adapt to your bank's bulk salary upload.
- Mark as Paid once the bank has processed it.
Under Payroll > Reporting > India you get the EPF Report, ESI Report, Salary Register, Salary Statement Report, Yearly Salary by Employee and the Labour Welfare Fund Report. The EPF and ESI reports are Excel exports of the month's contribution data, not the portal upload files themselves, so the ECR and ESIC returns still need a formatting step.
Accounting: where payroll posts
Payroll Accounting (hr_payroll_account, Enterprise) adds a Salary Journal on each structure and debit and credit accounts on each salary rule. The India - Payroll with Accounting module installs automatically and maps the Regular Pay structure to accounts in the Indian chart of accounts: salary expense, HRA, allowance and bonus expenses, PF employee and employer payables, Professional Tax payable and salary payable.
Check the mapping before your first pay run. In the source we read, ESI, TDS, gratuity, LWF and medical insurance rules are not given accounts by default, and the Worker and Non-Executive structures are not mapped either. Rules without accounts do not post, which leaves statutory liabilities missing from the balance sheet. Set Batch Account Move Lines in settings if you want one summarised entry per period instead of per-employee lines; it anonymises the entry but prevents individual payments.
Payroll > Configuration > Settings EPF, ESIC, PT, LWF numbers Payroll > Configuration > Salary > Rule Parameters PF ceiling, PT slabs, tax chart Payroll > Configuration > Salary > Structures account mapping per rule Payroll > Payslips > Pay Runs monthly cycle
Our rule for moving payroll from Tally, Excel or a payroll bureau: run at least two months in parallel and reconcile net pay, PF, ESI, PT and TDS to the rupee before switching. Expenses can also be reimbursed through payslips, which we cover next in expenses and reimbursements. If you want help setting up structures and parameters, talk to us.
Questions we get asked
Does Odoo 19 support Indian payroll?
Yes, in Enterprise. The Indian Payroll module installs automatically with Payroll for Indian companies and provides salary structures and rules for Basic, HRA, allowances, Provident Fund, ESI, Professional Tax, Labour Welfare Fund, gratuity and a monthly TDS deduction. It includes EPF, ESI, salary register and yearly salary reports, and an Excel payment advice for bank uploads. Payroll is not available in Community.
Does Odoo 19 calculate TDS on salary automatically?
Partly. The payslip deducts a fixed monthly TDS amount stored on the employee. The localisation includes a new-regime computation with standard deduction, 87A rebate, surcharge and cess to propose that amount, but there is no old regime option, no investment declaration workflow, and no Form 16 or 24Q output. The shipped tax parameters should be updated for the current financial year.
Which states' Professional Tax does Odoo 19 include?
The Indian localisation ships Professional Tax slabs for Gujarat, Maharashtra (separate male and female slabs), Karnataka, West Bengal and Andhra Pradesh, selected per employee. Other states, such as Tamil Nadu, Telangana or Kerala, are not shipped. You can add them as rule parameters in Payroll configuration, following the same slab format, before PT is computed for those employees.
How is PF calculated in Odoo 19 Indian payroll?
Employee and employer Provident Fund are 12% of basic salary by default. For each employee you choose whether contributions are restricted to a PF wage of ₹15,000 or calculated on actual PF wages. The percentage, the ceiling and the 8.33% EPS share are rule parameters, so they can be updated with a new dated value if the statutory rates change.