AGPL-3 · validated through years in production · 232 tests · in flight at OCA

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.

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. PR #277 in kmee-odoo-addons 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

Full transparency: what is migrated to 16.0 today and what is in a migration sprint.

Migrated to Odoo 16

8 events covered today, validated in production:

  • S-1000 Employer ✓ migrated
  • S-1010 Pay items table ✓ migrated
  • S-1020 Tax allocation ✓ migrated
  • S-1200 RGPS compensation (monthly) ✓ migrated
  • S-2200 Hire / initial registration ✓ migrated
  • S-2206 Contract change ✓ migrated
  • S-2230 Leave ✓ migrated
  • S-2299 Termination ✓ migrated

In migration to Odoo 16

12 events with legacy ABGF code awaiting port to 16.0:

  • S-1005 Establishments
  • S-1070 Process table
  • S-1210 Payments
  • S-1299 Period closing
  • S-2205 Worker data change
  • S-2210 CAT (Workplace Accident Report)
  • S-2220 ASO (Occupational Health Cert.)
  • S-2240 Hazardous agents
  • S-2298 Reinstatement
  • S-2300 Worker without employment bond
  • S-3000 Event exclusion
  • S-5001/5002/5003/5011 Totalizers

Sponsorship welcome: if an event is critical to your operation, we can prioritize the port — code goes back to OCA.

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 8 migrated + remainder being ported
Employee portal Out of the box Out of the box Out of the box Roadmap
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 a beta?

No. KMEE built the CLT payroll module for ABGF (Agência Brasileira Gestora de Fundos), a KMEE client — the system ran in production on Odoo 8.0 for years issuing monthly paychecks. The current PR brings that same KMEE-authored code migrated to Odoo 16 and donated to OCA. The 'Beta' badge in the manifest reflects the migration + OCA review cycle, not method immaturity.

Which eSocial events are covered in the Odoo 16 migration today?

8 events: S-1000 (employer), S-1010 (pay items), S-1020 (tax allocation), S-1200 (monthly compensation), S-2200 (hire), S-2206 (contract change), S-2230 (leave), S-2299 (termination). The rest (S-1005, S-1070, S-1210, S-1299, S-2205, SST, S-3000, totalizers) are in migration — the legacy ABGF code exists, it's a port effort to 16.0.

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?

Not automated today. It depends on period closing (S-1299) + totalizers (S-5001/5002/5003/5011) + Reinf integration. Those components are in the migration queue.

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 needs an event still in migration, KMEE can prioritize the port 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?

Not native today. On the roadmap. If your company needs a portal/digital paystub with QR Code, we can scope custom development.

Is time tracking integrated?

Only Odoo core `hr.attendance`. Integrations with physical time clocks or apps are on the roadmap.

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 diagnosis) and ongoing monthly support. If an event still in migration is critical to your operation, we can prioritize the port with paid scope — that work benefits the whole OCA community.

Can I sponsor the migration of an event or feature?

Yes. Sponsorship is a common path in OCA projects. Does your company need S-1299 closing the period tomorrow? We can prioritize with you. 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.