Voltar ao Blog Gestão Empresarial

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

· 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 PR está aberto 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. Cada novo evento eSocial virou módulo.

O problema: 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. O trabalho não foi só de portar APIs (@api.multi para nada, _columns para fields.X, views XML reformatadas): foi de 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. Vendemos serviços, não licenças. Nosso negócio é implementar e manter Odoo, não cobrar por código. E quanto mais empresas usam Odoo no Brasil, maior o mercado para nós.

Mais importante: folha de pagamento não é diferencial competitivo. É infraestrutura. Toda empresa precisa, 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 está pronto, o que ainda falta

O PR #277 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)

O que ainda falta — e estamos sendo honestos:

  • S-1210 (pagamentos de rendimentos) — em desenvolvimento
  • S-1299 (fechamento mensal) — depende do S-1210
  • S-2210 (CAT — comunicação de acidente de trabalho) — pouca demanda no piloto
  • Totalizadores S-5001/S-5002/S-5003/S-5011/S-5012/S-5013 — recebimento dos retornos da Receita
  • Conta-corrente de FGTS digital (DCTFWeb) — depende de S-1299

Esses são os próximos sprints. A roadmap completa está no PR #277.

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 PR #277 está em revisão. 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 robusto 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. Está em código, está testada, está doada.

Saiba mais sobre folha de pagamento Odoo.

#folha #esocial

Compartilhar

Sobre o autor

Luis Felipe Miléo

Luis Felipe Miléo

Desenvolvedor Odoo · KMEE

Desenvolvedor especializado em localização fiscal e projetos open source no ecossistema Odoo/OCA, com foco em integrações para o mercado latino-americano.

Ver perfil no LinkedIn