Skip to content
Contact

Guide · Payroll

Mexican payroll in Odoo 20: what it computes, how payslips are stamped and how to set it up

Author
Fabio Soto, Business Analyst
Published
Updated
Version
Odoo 20

In short

Yes: Odoo 20 has a native Mexican payroll localization, built from Odoo's own modules and described in its official documentation. It computes salaries with employee and employer payroll taxes, handles social security (IMSS) contributions, INFONAVIT housing and FONACOT consumer credits, the aguinaldo year-end bonus, vacation with its premium, savings funds and vouchers, and issues each payslip as a CFDI, Mexico's electronic invoice format, to be stamped. It runs on Odoo Enterprise's Payroll app and relies on the Mexican fiscal localization for stamping.

What Odoo’s Mexican payroll is

Odoo’s Mexican payroll is the localization the Payroll app uses to compute salaries, withholdings and contributions under Mexican rules. For a company arriving from abroad, two features of the Mexican system are worth knowing first: payroll contributions go to several public institutions, and every payslip is itself an electronic tax document, stamped like an invoice. The official Odoo 20 documentation sums up the localization’s scope in one sentence:

“The Mexico payroll localization covers salary computations for employees, including employee and employer payroll taxes.”

Odoo, “Mexico”, official Odoo 20.0 documentation, payroll localizations, accessed October 17, 2026.

It is native: these are Odoo modules, listed in the documentation with their technical names, not third-party apps. Payroll is an Odoo Enterprise app whose code is not public, so everything below comes from the official version 20 documentation.

The Mexican payroll modules in Odoo 20
ModuleTechnical nameWhat it adds
Mexico - Payrolll10n_mx_hr_payrollFields to manage employee payroll and time off data
Mexico - Payroll with Accountingl10n_mx_hr_payroll_accountRules and parameters for local payroll calculations
Mexico - Payroll CFDIl10n_mx_hr_payroll_account_ediSigning payroll CFDI documents with the government
Documents - Mexican Payrolldocuments_l10n_mx_hr_payroll_account_ediCFDI XML and PDF files attached to payslip emails

Installing the payroll CFDI module automatically installs the other two payroll modules. Mexico was already on the payroll localization list of the 18.0 documentation, has had its own page since 19.0, and the 20.0 documentation adds two things: the Documents module that sends the XML and PDF to the employee, and generating the CFDI from the pay run.

IMSS
Instituto Mexicano del Seguro Social, the Mexican Social Security Institute, to which the company pays social security contributions.
INFONAVIT
Instituto del Fondo Nacional de la Vivienda para los Trabajadores, the government housing fund that grants mortgage credits to employees.
FONACOT
Fondo Nacional para el Consumo de los Trabajadores, a government program that gives employees low-cost loans.
ISR
Impuesto sobre la renta, Mexico’s income tax, withheld from wages and salaries.
Aguinaldo
The annual year-end bonus, called Christmas bonus in Odoo.
Payroll CFDI
The payslip issued as a CFDI, Mexico’s electronic invoice format, with the SAT payroll complement.

What it covers, item by item

What Odoo 20’s Mexican payroll does and where it is configured
ItemWhat Odoo 20 doesWhere it is configured
Employee dataRequires an 11-digit social security number (NSS), a 13-character RFC tax ID, an 18-character CURP population ID and at least one trusted bank accountEmployee, personal tab
ContractContract type, fixed or hourly wage, the «Mexico: Employee» pay category and the hiring regime, which drives benefits, taxes and social securityEmployee, payroll tab
IMSSUses the company’s employer IMSS ID, risk type and occupational risk premium, and shows IMSS contributions and the CEAV old-age contribution (cesantía en edad avanzada y vejez) on every payslipPayroll settings and rule parameters
Income tax (ISR)Withholds wage and salary income tax and accepts ISR adjustments as payslip inputsPayslip
State taxesThe state of the work address decides which salary rules Odoo applies when computing taxesEmployee, work tab
INFONAVITDeducts employee credits as a fixed fee, a percentage or a discount factor, with their monthly insurance, and posts contributions to accountingEmployee, Infonavit / Fonacot tab
FONACOTDeducts the monthly credit amount and any extra contributionsEmployee, Infonavit / Fonacot tab
AguinaldoIts own salary structure, with a minimum of 15 days of payRule parameters
VacationThe table of days by years of service and the vacation premium rate on base salaryRule parameters and employee
Savings fund and vouchersThe monthly savings fund contribution and meal, transport and gasoline vouchersEmployee, payroll tab
AccountingTwenty-two accounts from the Mexican chart of accounts for payroll entriesChart of accounts
Payroll CFDIGenerates the CFDI from the payslip or from the pay runPayslip or pay run

Every row comes from the official Odoo 20.0 documentation, payroll localizations, Mexico (see Sources).

Those twenty-two accounts include wage and salary income tax withholding, the employment subsidy to apply, the IMSS withholding and employer provision, contributions to the retirement savings system (SAR) and to INFONAVIT, provisions for vacation, aguinaldo and savings fund, and FONACOT credits. If a salary rule has no account assigned, Odoo uses the salary expenses account for the entry.

How a payroll run works in Odoo 20

The flow Odoo documents is the same for all regular payroll:

  1. Validate the period’s work entries: approved time off, overtime and resolved conflicts.
  2. Create draft payslips, one by one or in batches, which Odoo calls pay runs; grouping them by wage type, pay schedule or department is common.
  3. Review each payslip’s worked days and inputs, and add missing ones such as commissions, bonuses or ISR adjustments.
  4. Check the totals —gross pay, vouchers, IMSS contributions, CEAV and taxes—, recompute the sheet if anything changed and validate.
  5. Generate the journal entries as drafts, per payslip or per batch, and post them.
  6. Register the payments, which require a trusted employee bank account.
  7. Generate the CFDI of each payslip, or of the whole pay run, and close the period’s payroll.

The aguinaldo follows the same flow with its own salary structure, «Mexico: Christmas Bonus», which the localization installs alongside the regular pay structure.

The payslip as a CFDI

Since January 1, 2022, version 1.2 of the payroll complement has been integrated with CFDI version 4.0, in its revision C. With that change, the SAT made the recipient’s RFC, name, fiscal regime and tax address ZIP code mandatory on the payroll document (SAT), so each employee’s tax data has to be complete before stamping.

Like every CFDI, the payslip is certified by an authorized certification provider (PAC) before it reaches Mexico’s tax administration (SAT). That is why the documentation asks for the CFDI to be configured before the first payroll run: the Payroll settings hold the employer IMSS ID and the company’s risk type, and the documentation points to the Mexican fiscal localization, where the PAC and the digital seal certificate are configured (see the guide to the Mexican localization in Odoo).

Once payroll is processed and paid, the CFDI is generated from the individual payslip or from the pay run. Odoo logs the submission in the payslip’s chatter, and if the Documents module is installed, it emails the employee a link to the folder with the payslip’s XML and PDF. The trusted bank account matters here too: without it, Odoo does not generate the CFDI files.

What to review at setup and every year

The localization ships with almost every parameter loaded, and the Odoo 20 documentation points out the ones each company adjusts:

  • Occupational risk premium. The IMSS sets it for each company based on its accident rate, so it is always updated when payroll is configured.
  • Aguinaldo days. The parameter ships with the 15-day minimum; a company that pays more changes it, and the value applies equally to all of its employees.
  • Vacation table. It defines vacation days by years of service and is adjusted to the company’s paid vacation policy.

Odoo loads the updated rule parameters for the current calendar year. Its documentation advises against editing the others unless a national or state parameter has changed and differs from the one Odoo created, and against changing any of them before checking local and national regulations.

Two more decisions come before the first run. Each employee’s work address must be complete, because its state decides which salary rules apply; by default it is the company’s address. And the company decides whether journal entries are posted per payslip or per batch, because the documentation asks for that choice before payroll is run.

Work entries for Mexican payroll are created from each employee’s assigned working schedule, and overtime logged in the Attendances app is added when that option is enabled for the employee.

If the company has not set up electronic invoicing yet, the starting point is the guide to the Mexican localization in Odoo 20, because payroll CFDI depends on it.

Frequently asked questions

Does Odoo have payroll for Mexico?

Yes. Odoo 20 has a Mexican payroll localization built from Odoo’s own modules: it computes salaries with employee and employer payroll taxes and issues each payslip as a CFDI. It runs on the Payroll app, which is part of Odoo Enterprise.

How is payroll stamped as a CFDI in Odoo?

With the payroll CFDI module installed and the fiscal localization configured, payroll is processed and paid, and the CFDI is then generated from each payslip or from the whole pay run. Odoo logs it on the payslip, and with the Documents module it emails each employee a link to their XML and PDF.

Does Odoo payroll handle IMSS and INFONAVIT?

Yes. The localization uses each company’s IMSS occupational risk premium, shows the IMSS contributions on every payslip and posts the withholding and the employer provision to accounting. Employees’ INFONAVIT credits are deducted as a fixed fee, a percentage or a discount factor.

How is the aguinaldo paid in Odoo?

With the Christmas bonus salary structure the localization installs, following the same flow as regular payroll. The aguinaldo days parameter ships with the 15-day minimum and is raised if the company pays more; in Odoo it applies equally to all of the company’s employees.

What is needed before stamping payroll in Odoo?

The Mexican fiscal localization configured with its PAC and digital seal certificate; the employer IMSS ID and risk type in the Payroll settings; and, on each employee, their social security number, RFC, CURP and a bank account marked as trusted.

By industry

Planning to run your Mexican payroll in Odoo? See our Mexico localization and compliance service, or write to us.

Sources

  1. Odoo S.A., “Mexico”, official Odoo 20.0 documentation, payroll localizations, odoo.com/documentation/20.0/applications/hr/payroll/payroll_localizations/mexico.html. Accessed .
  2. Odoo S.A., “Payroll localizations”, official Odoo 20.0 documentation, odoo.com/documentation/20.0/applications/hr/payroll/payroll_localizations.html. Accessed .
  3. Odoo S.A., “Mexico”, official Odoo 20.0 documentation, fiscal localizations, odoo.com/documentation/20.0/applications/finance/fiscal_localizations/mexico.html. Accessed .
  4. Servicio de Administración Tributaria, “Recibo de nómina”, sat.gob.mx, omawww.sat.gob.mx/tramitesyservicios/Paginas/complemento_nomina.htm. Accessed .