Skip to content

HCM — Recursos Humanos

O módulo HCM ("Human Capital Management") cobre o ciclo completo de gestão de pessoal: cadastro CLT/MEI, cálculo automático de folha (INSS/IRRF/FGTS 2026), ponto eletrônico, solicitações de férias/licença e o portal de autoatendimento do colaborador (ESS). Integra-se com o módulo Contábil via BullMQ para geração automática de lançamentos na aprovação da folha.

Visão Geral

CaracterísticaDetalhe
Módulo backendbackend/src/hr/
Módulo eSocialbackend/src/esocial/
Portal ESSbackend/src/ess/
PermissãoAdmin ou Superadmin (leitura: Staff nas rotas de ponto)
Rota principal/t/:slug/admin/hr
Portal ESS/t/:slug/ess

Schemas

SchemaDescriçãoArquivo
EmployeeFuncionário CLT ou prestador MEI. PII (CPF, conta bancária, salário) criptografados com AES-256-GCMschemas/employee.schema.ts
PayrollRunCompetência de folha de pagamento — draft → approved → paidschemas/payroll-run.schema.ts
PayrollLineLinha de folha por funcionário — proventos, descontos INSS/IRRF/VT, encargos patronaisschemas/payroll-line.schema.ts
TimesheetPonto diário (entrada/saída) — um registro por funcionário por diaschemas/timesheet.schema.ts
LeaveRequestSolicitação de férias/licença — pending → approved → rejectedschemas/leave-request.schema.ts
LeaveAccrualSaldo acumulado de férias (acréscimo automático via cron mensal)schemas/leave-accrual.schema.ts

Employee — campos principais

CampoTipoDescrição
workerTypeclt | meiRegime de trabalho
cpfHashstringSHA-256(cpf + tenantSalt) — índice único e lookup
cpfEncryptedEncryptedFieldCPF em AES-256-GCM (ver Security PII)
bankAccountEncryptedEncryptedFieldDados bancários criptografados
baseSalaryCipherEncryptedFieldSalário-base em centavos, criptografado
baseSalaryCentsnumberSalário bruto em centavos (campo legado — removido após migração PII)
pisNitstringPIS/NIT — obrigatório para eSocial
cboCupationstringCBO — obrigatório para eSocial
esocialCategorystringCategoria eSocial (ex: 101 = empregado geral)
statusactive | on_leave | terminated | inactive
lgpdRetentionExpiresAtDateData a partir da qual o cron LGPD pode anonimizar (5 anos após demissão — CLT Art. 11)

PayrollRun — ciclo de vida

draft  ──→  approved  ──→  paid

     JournalEntry gerada automaticamente
     (conta Folha a Pagar / Encargos Patronais)

O campo journalEntryId liga a folha aprovada ao lançamento contábil criado pelo PayrollAccountingBridge.

PayrollLine — estrutura de descontos

CampoDescrição
baseCentsSalário-base do período
grossCentsBruto = base + adicionais (additions[])
netCentsLíquido = bruto − descontos
deductions[]Array: inss, irrf, vt, pensao, other
deductionsCipherMesmo array JSON-stringified + AES-256-GCM criptografado
inssPatronalCentsINSS patronal (20% geral / 0% Simples)
fgtsCentsFGTS (8% do bruto)
sistemaSCentsSistema S — SENAI/SESC/SEBRAE (3,3% restaurantes)
ratFapCentsRAT base 1% × FAP

Serviços

ServiçoResponsabilidadeArquivo
HrServiceCRUD de Employee, LeaveRequest; termination (seta lgpdRetentionExpiresAt)hr.service.ts
PayrollServiceGeração de PayrollRun + PayrollLine; aprovação com bridge contábilpayroll.service.ts
TimesheetServiceClock-in/out; agregação mensal; correção administrativatimesheet.service.ts
LeaveAccrualCronCron @Cron('0 1 1 * *') — adiciona dias de férias todo dia 1 do mêsleave-accrual.cron.ts

Tabelas Tributárias 2026

Arquivo: backend/src/hr/payroll-tables.ts

INSS Empregado 2026 (progressivo)

Faixa salarial (R$)Alíquota
0,01 a 1.518,007,5%
1.518,01 a 2.793,009,0%
2.793,01 a 4.190,0012,0%
4.190,01 a 7.786,0214,0%
Acima de 7.786,02Teto R$ 908,86

Modelo progressivo (destravado): cada faixa é calculada separadamente, não o salário todo na alíquota do topo.

IRRF 2026 (Lei 14.663/2023 + correção projetada)

Base de cálculo = bruto − INSS − dedução por dependente (R$ 235,47/dep.)

Base de cálculo (R$)AlíquotaParcela a deduzir
Até 2.824,00Isento
2.824,01 a 3.751,057,5%R$ 211,80
3.751,06 a 4.664,6815%R$ 492,97
4.664,69 a 5.831,9522,5%R$ 842,27
Acima de 5.831,9527,5%R$ 1.133,87

Encargos Patronais

EncargoTaxaObservação
INSS patronal20%Regime Geral; 0% no Simples Nacional (absorvido pelo DAS)
FGTS8%Sobre bruto CLT
Sistema S3,3%Restaurantes CNAE 56.11 (SENAI 1% + SESC 1,5% + SEBRAE 0,6% + outros 0,2%)
RAT/FAP1% × FAPGrau de Risco 1 para restaurantes; FAP padrão = 1,0
VT (desconto empregado)6% do salárioLimitado ao custo real do VT

MEI — retenções

RetençãoTaxa
ISS municipal3% (padrão)
CSLL (quando obrigatório)1%

Endpoints

Funcionários

MétodoRotaPermissãoDescrição
GET/t/:slug/admin/hr/employeesAdminListar (filtros: status, branchId, department)
POST/t/:slug/admin/hr/employeesAdminCadastrar funcionário
GET/t/:slug/admin/hr/employees/:idAdminDetalhe
PUT/t/:slug/admin/hr/employees/:idAdminAtualizar
PATCH/t/:slug/admin/hr/employees/:id/terminateAdminDemitir (define dismissalDate, dismissalReason, status = terminated, lgpdRetentionExpiresAt)

Folha de Pagamento

MétodoRotaPermissãoDescrição
GET/t/:slug/admin/hr/payrollAdminListar competências (filtros: year, status)
POST/t/:slug/admin/hr/payroll/runAdminGerar folha para período { month, year }
GET/t/:slug/admin/hr/payroll/:idAdminDetalhe da folha
GET/t/:slug/admin/hr/payroll/:id/linesAdminLinhas individuais por funcionário
POST/t/:slug/admin/hr/payroll/:id/approveAdminAprovar folha → gera JournalEntry via bridge

Ponto (Timesheet)

MétodoRotaPermissãoDescrição
GET/t/:slug/admin/hr/timesheetAdminListar registros
POST/t/:slug/admin/hr/timesheet/clock-inAdmin/StaffBater ponto entrada
POST/t/:slug/admin/hr/timesheet/clock-outAdmin/StaffBater ponto saída
GET/t/:slug/admin/hr/timesheet/monthly/:employeeIdAdminAgregado mensal (?month=&year=)
PATCH/t/:slug/admin/hr/timesheet/:id/correctAdminCorrigir registro (intervalo, horas esperadas)

Férias e Licenças

MétodoRotaPermissãoDescrição
GET/t/:slug/admin/hr/leavesAdminListar (filtros: employeeId, status)
POST/t/:slug/admin/hr/leavesAdmin/StaffCriar solicitação
PATCH/t/:slug/admin/hr/leaves/:id/statusAdminAprovar/rejeitar

Portal ESS (Employee Self-Service)

Rotas sob /t/:slug/ess/* — requerem autenticação do próprio funcionário.

MétodoRotaDescrição
GET/t/:slug/ess/mePerfil do funcionário logado
GET/t/:slug/ess/timesheet/todayRegistros de ponto do dia
POST/t/:slug/ess/timesheet/clock-inBater entrada
POST/t/:slug/ess/timesheet/clock-outBater saída
GET/t/:slug/ess/payslipsHolerites (PayrollLine) do funcionário
GET/t/:slug/ess/leavesSolicitações de férias/licença do funcionário
POST/t/:slug/ess/leavesAbrir nova solicitação

Bridge Folha → Contabilidade (BullMQ)

Quando PayrollService.approvePayrollRun() é chamado, publica um job na fila accounting-queue:

PayrollService.approvePayrollRun()

  accounting-queue (BullMQ/Redis)

AccountingAutomationService.processPayroll()

  JournalEntry:
    Débito  — 5.1.X Folha de Salários
    Débito  — 5.1.X Encargos Patronais (FGTS, INSS)
    Crédito — 2.1.X Salários a Pagar
    Crédito — 2.1.X FGTS a Recolher

O hook é fire-and-forget com @Optional() — o módulo HR funciona mesmo sem Redis configurado.

Componentes Frontend

ViewRota adminDescrição
EmployeesView/admin/hr/employeesLista e cadastro de funcionários
PayrollRunView/admin/hr/payrollGerar, visualizar e aprovar folhas
TimesheetAdminView/admin/hr/timesheetPonto administrativo e correções
LeaveApprovalView/admin/hr/leavesAprovar/rejeitar solicitações
EssHomeView/t/:slug/essPortal ESS — dashboard do funcionário
EssPontoView/t/:slug/ess/pontoClock-in / clock-out self-service
EssHolritesView/t/:slug/ess/holritesHolerites do funcionário
EssFeriasView/t/:slug/ess/feriasSolicitar e acompanhar férias

Relacionados

  • eSocial — Eventos XML (S-2200/S-1200/S-2299) gerados a partir de Employee + PayrollRun
  • LGPD — RH — Exportar e anonimizar PII de funcionários
  • Security PII — Criptografia AES-256-GCM dos campos sensíveis
  • Contabilidade — Bridge folha → lançamento contábil

Lançado sob a licença MIT.