Brazilian CLT payroll in Odoo - production-validated, now open source.
The CLT calculation (INSS, IRRF, FGTS, 13th salary, vacations, severance) ran in production for years at a Brazilian public agency. Now migrated to Odoo 16 and donated to OCA, with no per-employee license and no MDR on payroll.
When the eSocial layout changes, the fix lands on the OCA GitHub repo in days. You don't wait on a vendor's closed roadmap.
AGPL-3 · validated through years in production · 232 tests · in flight at OCA
Where the code comes from
KMEE built the CLT payroll module for ABGF (Agência Brasileira Gestora de Fundos), a federal Brazilian public agency that is a KMEE client. The system ran on Odoo 8.0 in production issuing monthly paychecks for years: progressive INSS, IRRF, FGTS, family allowance, 13th salary (1st and 2nd installments), vacations with art. 130, terminations with statutory pay items, 22 CLT leave types, payroll-based reimbursement and unions.
We are now modernizing that same code to Odoo 16 and donating it to OCA. The kmee-odoo-addons history on GitHub brings in 2,257 commits of that history via git merge --strategy=ours, preserving traceability. All the code was rewritten for the Odoo 16 API, with 232 automated tests and BDD specs in .feature files. The final destination is the OCA/l10n-brazil repository.
The result: KMEE-authored CLT calculation, validated through years of real production at a public agency, now in open source code, with no per-employee fee. The entire Brazilian Odoo community wins.
What's inside
Complete CLT payroll, eSocial transmitting, auditable code.
Production-validated CLT calculation
Progressive INSS, progressive IRRF, FGTS, family allowance, DSR, absences, 13th salary (1st and 2nd installments), CLT art. 130 vacations, severance with configurable pay items. Years of real paychecks issued at ABGF.
Documented ROUND_HALF_UP decimal handling
414 lines of tests guaranteeing correct rounding. Fixes the classic Python `round()` banker's-rounding bug. A technical differentiator rarely spelled out elsewhere.
BDD specs in .feature files
Calculations auditable in plain language (Gherkin). Your accountant can read them. Every scenario (hire, vacation, severance, 13th salary) has a reproducible test case.
eSocial transmission with A1 certificate
XML generation via the `esociallib` library, ICP-Brasil A1 (PFX) signing, direct submission to the federal eSocial environment. Batch <= 50 events (government rule), automatic classification by group.
Complete worker resources
22 CLT leave types, payroll-based reimbursement (`hr.expense -> payslip`), CLT art. 450 substitution, unions (CCT/ACT), populated official tables (CID 14k lines, FAP process 7k lines).
AGPL-3 - no per-employee license
No fee per issued payslip. No MDR on payroll. You run on your infra, audit the calculation, contribute back to OCA. Senior/TOTVS/ADP/Domínio charge per active employee.
eSocial coverage - layout S-1.3
eSocial events covered by the module, with ongoing evolution at OCA.
-
S-1000Employer -
S-1005Establishments -
S-1010Pay items table -
S-1020Tax allocation -
S-1070Process table -
S-1200RGPS compensation (monthly) -
S-1210Payments -
S-1299Period closing -
S-2200Hire / initial registration -
S-2205Worker data change
-
S-2206Contract change -
S-2210CAT (Workplace Accident Report) -
S-2220ASO (Occupational Health Cert.) -
S-2230Leave -
S-2240Hazardous agents -
S-2298Reinstatement -
S-2299Termination -
S-2300Worker without employment bond -
S-3000Event exclusion -
S-5001/5002/5003/5011Totalizers
Coverage for your scenario is presented in the free assessment.
Comparison with proprietary payrolls
Senior HCM, TOTVS RM Folha, Domínio/Onvio - 10 technical and commercial criteria.
| Criterion | Senior HCM | TOTVS RM Folha | Domínio/Onvio | Odoo + OCA (KMEE) |
|---|---|---|---|---|
| License model | Per employee | License + maintenance | Per employee | No license, no per-employee fee |
| Source code access | Closed (Senior X SDK) | Closed ADVPL | Closed | AGPL-3 - fork, audit, modify |
| Vendor lock-in | High | High | Medium | Zero |
| BDD .feature files | No | No | No | Yes |
| Tested ROUND_HALF_UP | Not documented | Not documented | Not documented | 414 lines of tests |
| eSocial events covered | Complete | Complete | Complete | Covered by the module, ongoing evolution at OCA |
| Employee portal | Out of the box | Out of the box | Out of the box | Via the Odoo portal, scoped per project |
| Native NF-e/SPED integration | Via ETL | Native | Via export | Same Odoo base |
| Speed of layout adaptation | Internal roadmap | Internal roadmap | Internal roadmap | GitHub commit in days |
| Real production validation | Hundreds of clients | Thousands of clients | Thousands of firms | ABGF (years on Odoo 8.0) |
We don't attack competitors. We present the open source alternative the Brazilian payroll market was missing.
Frequently asked questions
The most common questions we hear about payroll + eSocial in Odoo.
Is the Odoo+KMEE payroll in production?
Yes. KMEE built the CLT payroll module for ABGF (Agência Brasileira Gestora de Fundos), a KMEE client - the system has run in production on Odoo 8.0 for years issuing monthly paychecks. That same KMEE-authored code is the module donated to OCA, migrated to Odoo 16.
Which eSocial events does the module cover?
Tables (S-1000, S-1005, S-1010, S-1020, S-1070), worker events (S-2200, S-2205, S-2206, S-2210, S-2220, S-2230, S-2240, S-2298, S-2299, S-2300), periodic events (S-1200, S-1210, S-1299) and structural/totalizer events (S-3000, S-5001/5002/5003/5011), with ongoing evolution at OCA. Coverage for your scenario is presented in the assessment.
Does it cover Reinf?
Not directly in this stack. Reinf lives in a parallel, complementary OCA stack (`l10n_br_reinf`). For companies that need R-2010, R-2030, R-2040 (Reinf for legal entities), we work the integration separately.
Does it cover DCTFWeb?
DCTFWeb coverage depends on period closing (S-1299), the totalizers (S-5001/5002/5003/5011) and Reinf integration; the scope for your scenario is presented in the assessment.
Is it really AGPL-3?
Yes. The code is in github.com/kmee/kmee-odoo-addons (incubator) and on its way to github.com/OCA/l10n-brazil (final destination). You can run it, modify it, contribute. No per-employee fee, no MDR on payroll.
Who uses it today?
ABGF (federal public agency) has used it in production on Odoo 8.0 for years. New clients are starting to adopt as the 16.0 version stabilizes. If your company has a specific priority, KMEE can prioritize it with paid scope.
Which Odoo version does it run on?
The modernized version in the current PR is Odoo 16 + OCA l10n-brazil 16.0. ABGF runs Odoo 8.0 in production. OCA versions 17 and 18 don't yet have the full Brazilian account/sale/purchase stack, so payroll on 17/18 comes later.
How does it sign eSocial XMLs?
ICP-Brasil A1 (PFX), reusing OCA's `l10n_br_fiscal_certificate` module. The same A1 certificate that signs NF-e/CT-e/MDF-e signs eSocial events. Optional external vault (HashiCorp, AWS, Azure, GCP).
How does it transmit events?
Direct to the federal eSocial environment (homologation `tp_amb=2` or production `tp_amb=1`). The `esociallib` library handles parsing, XSD validation and SOAP. Batch <= 50 events (government rule), automatic classification by group (1=tables, 2=non-periodic, 3=periodic).
What if transmission fails?
The `l10n_br.esocial.ocorrencia` model logs errors per event. A state machine allows resending: `draft -> validated -> pending -> sent -> success | error | rectified`. If the government returns an error, the event goes back for correction without blocking the entire batch.
Is there an employee portal?
Via the Odoo portal, scoped per project. If your company needs a portal/digital paystub with QR Code, we discuss the scope in the assessment.
Is time tracking integrated?
Only Odoo core `hr.attendance`. Integrations with physical time clocks or apps are scoped per project.
Who reviewed the calculations?
Years of real use at ABGF + 232 automated tests + BDD specs in `.feature` files + OCA community review when the PR merges. It's calculation logic that paid real paychecks for years.
How much does it cost?
No per-employee license. You pay for implementation (scope defined after an adoption assessment) and ongoing monthly support. If an event has a specific priority for your operation, we can prioritize it with paid scope - that work benefits the whole OCA community.
Can I sponsor the evolution of an event or feature?
Yes. Sponsorship is a common path in OCA projects. If your company has a specific priority, we discuss scope, timeline and the contribution that goes back to the community. The code goes back to OCA - the entire Brazilian ecosystem wins.
Free adoption diagnosis
In 30 minutes we map your scenario (volume, required eSocial events, current ERP, HR team) and walk out with a realistic adoption plan or a recommendation to keep your existing system.
Tell us about your payroll
Headcount, current payroll system, critical eSocial events, timeline. We respond within one business day.
No spam, no list selling. LGPD-compliant. Privacy Policy.