Pular para o conteúdo
Voltar ao Blog

A primeira folha CLT open source no Odoo: por que estamos doando à OCA

KMEE doa à OCA a primeira folha de pagamento CLT brasileira do Odoo: 51 mil linhas, 232 testes, INSS, IRRF, FGTS e eSocial S-1.3 testados.

Luis Felipe Miléo Luis Felipe Miléo Gestão Empresarial 5 min de leitura

Folha de pagamento brasileira no Odoo sempre foi terreno minado. Quem precisava da CLT no Odoo tinha duas opções: implementar do zero (caro, demorado, arriscado) ou contratar fornecedor proprietário com módulo fechado (caro, opaco, dependente). A KMEE acaba de mudar essa equação ao doar à OCA o primeiro conjunto de módulos de folha CLT open source para Odoo, com cobertura técnica suficiente para sair de papel.

O código está em revisão em kmee/kmee-odoo-addons#277: 51.000 linhas de código, 232 testes automatizados, e as rubricas, cálculos e estruturas que a folha brasileira exige.

De onde veio essa folha

A história começa em 2015. Um órgão público federal contratou a KMEE para implementar Odoo 8.0 incluindo folha de pagamento CLT completa. Nada de adaptar uma folha estrangeira: precisava ser folha brasileira de verdade, com INSS progressivo, IRRF, FGTS, 13o salário, férias, rescisões, dissídios e eventos eSocial.

Ao longo de uma década o código rodou em produção, processando folhas reais, gerando guias e transmitindo eventos. Cada bug encontrado em produção virou teste, cada mudança de tabela INSS virou migração e cada novo evento eSocial virou módulo.

O problema é que o código estava preso ao Odoo 8.0, e folha presa em versão antiga é dívida técnica que rende juros compostos.

A migração para 16.0

Em 2025 a KMEE iniciou a migração para Odoo 16.0 usando oca-port e odoo-module-migrator. Além de portar APIs (@api.multi para nada, _columns para fields.X, views XML reformatadas), o trabalho incluiu repensar a arquitetura à luz de tudo que aprendemos.

As escolhas estruturais que sobreviveram:

  • Função pura para cálculo: tools.br.calc_inss() recebe valor e retorna contribuição, sem ORM, sem efeito colateral, totalmente testável.
  • Rubricas configuráveis: hr.salary.rule integrado com natureza.rubrica do eSocial S-1.3.
  • Testes desde o primeiro commit: 232 testes garantindo INSS, IRRF, FGTS, salário-família, vale-transporte e proventos/descontos.
  • Separação locale/eSocial: l10n_br_hr (cadastros), l10n_br_hr_payroll (cálculo), l10n_br_hr_payroll_esocial (eventos).

Por que doar à OCA

A KMEE poderia ter mantido a folha como vantagem competitiva fechada, mas vendemos serviços, e não licenças: nosso negócio é implementar e manter Odoo. Quanto mais empresas usam Odoo no Brasil, maior o mercado para nós.

Além disso, folha de pagamento é infraestrutura, e não diferencial competitivo. Toda empresa precisa, e ninguém deveria pagar para reinventar o cálculo de INSS que está na lei. Calcular INSS errado é problema do empresário, do colaborador e da Receita; ninguém ganha quando isso é caixa-preta.

A OCA (Odoo Community Association) é o destino natural: +350 membros, +250 repositórios, governança transparente, releases coordenados com cada nova versão do Odoo. Doar ali significa que o código vai sobreviver à KMEE, vai ser melhorado por outros mantenedores e vai estar disponível para todo integrador Odoo no Brasil.

O que o módulo cobre

O módulo entrega:

  • Cadastros de funcionário com campos brasileiros (PIS, CTPS, dependentes, vínculo eSocial)
  • Folha mensal com 5 faixas progressivas de INSS (cobertura: 152 linhas de teste)
  • IRRF com decimal.ROUND_HALF_UP testado em 414 linhas (Python round() usa banker’s rounding e erra)
  • FGTS, salário-família, vale-transporte, proventos e descontos
  • 13o salário (1a e 2a parcela) e férias com 1/3 constitucional
  • Rescisões com aviso prévio, multa FGTS e saldos
  • Eventos eSocial S-1010 (rubricas), S-2200 (admissão), S-2299 (desligamento), S-1200 (remuneração)

Em evolução contínua na OCA:

  • S-1210 (pagamentos de rendimentos)
  • S-1299 (fechamento mensal): depende do S-1210
  • S-2210 (CAT, comunicação de acidente de trabalho)
  • Totalizadores S-5001/S-5002/S-5003/S-5011/S-5012/S-5013: recebimento dos retornos do eSocial
  • Conta-corrente de FGTS digital (DCTFWeb): depende de S-1299

A cobertura para o seu cenário é apresentada no diagnóstico.

O que muda para o mercado

Hoje quem vende Odoo no Brasil para folha CLT tem três opções: integrar com Senior/Totvs/Metadados (caro, complexo), contratar módulo proprietário (caro, fechado), ou implementar do zero (caro, demorado). Com a doação à OCA, a quarta opção passa a ser: usar l10n_br_hr_payroll da OCA, customizar o que precisa, e contribuir de volta.

Para o cliente final, isso significa folha auditável. Quer saber por que o INSS deu R$ 825,33 e não R$ 825,32? Abre o teste, vê o cálculo. Quer entender por que essa rubrica é base de FGTS mas não de INSS? Vê o salary_rule no código. É o oposto da caixa-preta dos sistemas proprietários.

Para o integrador, significa que folha deixa de ser projeto de meses e passa a ser configuração de semanas. Para a comunidade Odoo Brasil, significa um pedaço crítico do l10n-brazil que estava faltando.

Como ajudar

O código está em revisão na OCA. Se você é desenvolvedor Odoo, revise o código. Se você é cliente Odoo no Brasil que precisa de folha CLT, fale com a equipe KMEE: quanto mais empresas em produção, mais testado fica o módulo. Se você é da OCA, ajude a coordenar o aceite no repositório l10n-brazil.

Folha brasileira open source no Odoo deixou de ser promessa: o código existe, está testado e foi doado.

Saiba mais sobre folha de pagamento Odoo.

  • #folha
  • #esocial

Compartilhar

WhatsApp LinkedIn

Sobre o autor

Luis Felipe Miléo

Luis Felipe Miléo

CEO e sócio-fundador · KMEE

Sócio-fundador da KMEE e PSC da Odoo Community Association. Mantém com o seu time a localização fiscal brasileira do Odoo (l10n-brazil) e outros módulos da OCA desde 2012. Certificado Demand Driven Planner, escreve sobre ERP, open source, fiscal e IA aplicada às operações.

Ver perfil no LinkedIn

Artigos relacionados

Comece por um diagnóstico gratuito

Trinta minutos para entender a sua operação e dizer o que resolver primeiro, na ordem certa. Sem compromisso.