Skip to content

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-1000 Employer
  • S-1005 Establishments
  • S-1010 Pay items table
  • S-1020 Tax allocation
  • S-1070 Process table
  • S-1200 RGPS compensation (monthly)
  • S-1210 Payments
  • S-1299 Period closing
  • S-2200 Hire / initial registration
  • S-2205 Worker data change
  • S-2206 Contract change
  • S-2210 CAT (Workplace Accident Report)
  • S-2220 ASO (Occupational Health Cert.)
  • S-2230 Leave
  • S-2240 Hazardous agents
  • S-2298 Reinstatement
  • S-2299 Termination
  • S-2300 Worker without employment bond
  • S-3000 Event exclusion
  • S-5001/5002/5003/5011 Totalizers

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.