Wiki / SuperCalculo ~12 min

85 - Adicional de Periculosidade

⚙️ Metadados

  • Código: 85
  • Tipo: Provento
  • INSS: SAL
  • FGTS: SAL
  • IRRF: SAL
  • Natureza eSocial: 1203 - Adicional de periculosidade
  • DSR: Sim
  • Médias: Sim
  • Impacto Financeiro: Não
  • Impacto Contábil: Sim
  • Sequência: 201

🧮 Regra Geral

ID: 86

  • Lógica de Cálculo:

    1. O sistema verifica se existe um lançamento manual para a verba e se o percentual informado é maior que zero.
    2. Valida se o percentual lançado é estritamente 20%, 30% ou 40%. Caso contrário, o cálculo é abortado com erro (Panico).
    3. Define a Base de Cálculo (BC_Peric), que por padrão é o Salário Nominal do empregado (VG_VlrSalNom).
    4. Define as horas de incidência (HsIncidePeric), que por padrão são as horas proporcionais do trabalhador (VG_HorasParaVerbasProp).
    5. Calcula o Valor de Referência: Base de Cálculo multiplicada pelo percentual lançado.
    6. Calcula o Valor Total: Divide o Valor de Referência pela carga horária mensal (VG_HsMes) e multiplica pelas horas de incidência (HsIncidePeric), aplicando arredondamento padrão.
  • Variáveis Utilizadas:

    • Lancamento.Percentual: Percentual informado no lançamento da verba.
    • VG_VlrSalNom: Valor do Salário Nominal (Variável Global).
    • VG_HorasParaVerbasProp: Horas proporcionais para cálculo de verbas.
    • VG_HsMes: Carga horária mensal do empregado.
    • BC_Peric: Variável local que armazena a Base de Cálculo.
    • HsIncidePeric: Variável local que armazena as horas de incidência.
  • Condições Especiais: O código possui validações rígidas de percentual (PercentualValido) e bloqueios/alterações específicas baseadas no nome do cliente (detalhado na seção 9).

🔔 Eventos/Gatilhos

  • Condição de Ativação: Adicional de Periculosidade.
  • Quando a verba é calculada: O cálculo é disparado durante o processamento da Folha Regular (IdProcesso 1), exclusivamente quando há um lançamento prévio da verba contendo um percentual válido (> 0).

🔗 Dependências

  • Verbas Relacionadas:
    • Verba 1151, 5, 55, 1161, 1140: Mencionadas no código para compor a base de cálculo de clientes específicos (Hardcoded).
    • Verba 55 (DSR): Gerada a partir desta verba para um cliente específico.
  • Tipo de Relação:
    • Dependência: A verba 85 depende do cálculo prévio do Salário Nominal e, em casos de clientes hardcoded, depende do cálculo das verbas 5, 55, 1140, 1151 e 1161.
    • Geração: Gera a verba 55 (DSR) em cenário específico.
  • Fluxo de Cálculo: Esta verba deve ser processada após o cálculo do salário base e das verbas que compõem sua base de cálculo customizada, mas antes do cálculo de DSR e Médias.

🧩 Funções

  • Func_ValidarExistenciaLancamento: Verifica se a verba foi lançada para o funcionário.
  • SysFunc_Panico: Interrompe o cálculo da folha e exibe uma mensagem de erro ao usuário.
  • Func_ArredondamentoPadrao: Aplica regras contábeis de arredondamento de casas decimais.
  • SysFunc_RecuperarSomaPercentualLancamentosMesAtual / SysFunc_RecuperarSomaValorLancamentosMesAtual: Busca valores/percentuais de outras verbas lançadas no mês.
  • RecuperarValorTotalVerba / Func_RecuperarSomaValorTotalHoleriteVerba: Busca o valor calculado de outras verbas no holerite atual.
  • RecuperarVlrTotal_InformandoVerbaOrigemDSR: Busca o valor de um DSR específico.
  • SysFunc_NovaData: Cria um objeto de data para validação.
  • EscreverMemoria: Grava o passo a passo do cálculo para auditoria (Memória de Cálculo).
  • Func_DSR: Função encapsulada que realiza o cálculo e geração da verba de DSR.

🎯 Particularidades por Cliente/Setor

👤 Acal
  • Cálculo do Divisor de Horas: O divisor é proporcional aos dias do mês: VG_HsMes / 30M * VG_LimitadorDiasMes.

  • Variáveis Específicas:

    • HorasParaDivisor: Recalcula a carga horária mensal baseada na quantidade de dias do mês atual (28, 29, 30 ou 31 dias).
  • Condições Exclusivas:

    • Bloqueio para Aprendiz: Existe um IF exclusivo que dispara um erro (SysFunc_Panico) se houver tentativa de pagar periculosidade para um funcionário com vínculo de Aprendiz (Empregado.TipoVinculo == EnumTipoVinculoBO.Aprendiz).
  • Dependências Específicas do Cliente:

    • Verbas Relacionadas:
      • Verba 12 e o DSR da Verba 12.
    • Ordem de Processamento: A sequência foi movida de 201 para 622.
    • Impacto no Fluxo: O objetivo da mudança de sequência é garantir que a Verba 12 seja calculada antes da Verba 85. Atenção: Embora o comentário afirme que a Verba 12 deve entrar na base de cálculo da 85, o código C# atual do cliente acal (decimal VlrBasePericulosidade = VG_VlrSalNom;) não está somando a Verba 12. Isso indica uma possível falha de implementação ou que a Verba 12 compõe o salário nominal por outra via do sistema.

Sequência: 622

👤 Angelus
  • Base de Cálculo: Dependendo do CNPJ e da flag VG_PericSefesp, soma as verbas 5, 55, 1161 e 1140 à base de cálculo.
👤 Brasilservice
  • Base de Cálculo: Adiciona à base o Salário Nominal multiplicado pelo percentual da verba 1151.
👤 Bundy
  • Base de Cálculo: A base de cálculo é uma somatória complexa de diversas verbas variáveis (Horas Extras, Adicional Noturno, DSR) deduzida de faltas e atrasos.

  • Separação por Tipo de Pagamento: Divide o cálculo em dois blocos distintos: um para Mensalistas e outro para Horistas. A Regra Geral não faz essa distinção.

  • Proporcionalidade: Para Mensalistas, o valor é pago integralmente sobre a base calculada, sem rateio de horas. Para Horistas, o código calcula o valor direto (Vlr_BC_Peric * Percentual), embora a Memória de Cálculo descreva erroneamente um rateio.

  • Sequência de Processamento: Foi alterada para 1010.

  • Variáveis Específicas:

    • Empregado.TipoPagamento: Usada para separar a lógica (Mensalista vs Horista).   -  Valor_55 / Vlr_55: Variável criada para somar especificamente o DSR (Verba 55), excluindo o DSR gerado pela verba 17 (Sobreaviso).
  • Condições Exclusivas:

    • if (Empregado.TipoPagamento == EnumTipoPagamentoBO.Mensalista)
    • if (Empregado.TipoPagamento == EnumTipoPagamentoBO.Horista)
    • Filtro LINQ exclusivo: v.Verba.Codigo == "55" && v.VerbaOrigemDSR.Codigo != "17"
  • Dependências Específicas do Cliente:

    • Verbas Relacionadas: O cálculo do bundy depende da existência prévia de uma vasta lista de verbas:
      • Proventos: 11, 12, 13, 20, 45, 53, 55, 93, 113, 118, 222.
      • Descontos: 6, 7, 175, 467, 640.
    • Ordem de Processamento: A sequência foi alterada de 201 para 1010.
    • Impacto no Fluxo: Essa mudança de sequência é obrigatória para que a fórmula funcione. A verba 85 precisa esperar que o sistema calcule todas as horas extras, adicionais noturnos, faltas e, principalmente, o DSR (verba 55), para só então somar tudo e aplicar o percentual de periculosidade.

Sequência: 1010

👤 Ecobulk
  • Exceção Pontual: Para um CPF específico, em uma data específica (01/02/2026), força o percentual para 40%.
👤 Influx
  • Se o cliente for “influx”, a fórmula aborta com erro (Panico), impedindo o cálculo.
👤 Jmalucelli
  • Desconto de Atestados: Desconta as horas de atestado médico do cálculo do adicional de periculosidade. A regra geral paga o adicional sobre todas as horas proporcionais (VG_HorasParaVerbasProp), enquanto a jmalucelli subtrai as horas de afastamento por atestado dessa base.

  • Ausência de Exceções de Outros Clientes: A base é estritamente o Salário Nominal (VG_VlrSalNom).

  • Variáveis Específicas:

    • DiasAtestado: Variável criada para somar os dias de afastamento por atestado médico (comum e isento de CPP).
    • horasatestado: Variável que converte os dias de atestado em horas e soma com a quantidade lançada na verba 10036.
  • Condições Exclusivas:

    • O uso das funções RecuperarDiasAfastamento(EnumTipoAfastamentoBO.AtestadoMedico) e RecuperarDiasAfastamento(EnumTipoAfastamentoBO.AtestadoMedicoIsentoCPP) para buscar atestados no sistema.
    • A busca pela verba específica 10036 (SysFunc_RecuperarListaHoleriteVerba("10036")) para somar ao total de horas de atestado a serem descontadas.
  • Dependências Específicas do Cliente:

    • Verbas Relacionadas: Verba 10036. O código busca a quantidade (horas) lançada nesta verba para somar ao desconto de atestados.
    • Ordem de Processamento: A verba 10036 deve obrigatoriamente ser calculada/lançada antes da verba 85.
    • Impacto no Fluxo: Se a verba 10036 for processada depois da 85, o sistema não encontrará as horas para descontar, resultando em um pagamento a maior (indevido) de periculosidade para o funcionário.
👤 PlasticosPR
  • Geração de DSR: Força a geração da verba 55 sobre o valor calculado.
👤 Tiautomotive
  • Base de Proporcionalidade: Calcula a periculosidade baseada em dias, fazendo o rateio exato de dias trabalhados no mês (divide por 30 e multiplica pelos dias com direito à periculosidade).

  • Desconto de Afastamentos: Possui um bloco extenso e exclusivo que varre o histórico do empregado em busca de 15 tipos específicos de afastamentos não remunerados (Auxílio Doença, Licença Maternidade, Layoff, Prisão, etc.) que ocorreram no mês de cálculo, descontando esses dias da base de cálculo.

  • Tratamento de Férias, Admissão e Demissão: Desconta explicitamente os dias de férias (VG_DiasFeriasNoMesReferencia) e calcula os dias exatos em casos de admissão ou demissão no meio do mês, ajustando inclusive a regra para meses com 31 dias.

  • Variáveis Específicas:

    • AfastNaoRemun: Lista que armazena os afastamentos do mês.
    • DiasNãoRemun: Contador de dias em que o funcionário esteve afastado.
    • DiasAntesAdm_DiasAposDeslig: Contador de dias fora do contrato de trabalho no mês.
    • DiasParaPeric: Variável final que define quantos dias o funcionário efetivamente tem direito a receber o adicional.
  • Condições Exclusivas:

    • Validação de meses completos de ausência: Se a soma de dias não remunerados e férias for igual aos dias do mês (ex: 28/29 em fevereiro, ou 30 nos demais), a fórmula retorna null e não paga a verba.
    • Ajuste de Sequência: Há um comentário no código indicando que a sequência de processamento para este cliente foi alterada para 750 (após o cálculo de horas extras), diferente da sequência 201 da regra geral.
  • Dependências Específicas do Cliente:

    • Verbas Relacionadas: Verba 55 (DSR - Descanso Semanal Remunerado).
    • Ordem de Processamento: Conforme documentado no código ([ EXCLUSIVA ] Sequencia alterada para 750), a verba é processada mais tarde no fluxo da TiAutomotive do que na Regra Geral (Sequência 201).
    • Impacto no Fluxo: Mudar a sequência para 750 garante que todas as verbas base (como horas extras e faltas) já tenham sido calculadas. Isso é crucial para garantir que o DSR gerado a partir desta periculosidade reflita o cenário final da folha do funcionário.

Sequência: 750

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

  • Se Tipo = IntegralMensalista (Bundy): ValorFinal = BaseCalculo * (Perc / 100)

  • Se Tipo = PorDiasTrabalhados (TiAutomotive): ValorDiario = (BaseCalculo * (Perc / 100)) / DivisorDias

    DiasConsiderados = DivisorDias - Soma(DiasAusências)

    ValorFinal = ValorDiario * DiasConsiderados

  • Se Tipo = PadraoHoras (Geral/JMalucelli): ValorHora = (BaseCalculo * (Perc / 100)) / DivisorHoras

    HorasConsideradas = VG_HorasParaVerbasProp - HorasAtestado

    ValorFinal = ValorHora * HorasConsideradas


INÍCIO Processar_Adicional_Periculosidade_Geral (DadosEmpregado, DadosLancamento, ParametrosSistema)

1. Validação de Ativação e Alíquota de Entrada (Substitui Validações de Runtime de Alíquotas Fixas)

SE Func_ValidarExistenciaLancamento(DadosLancamento) == FALSE OU DadosLancamento.Percentual <= 0 ENTÃO RETORNAR FIM SE

PerfilConfig = ParametrosSistema.ConfiguracaoVerba.ObterPerfilPericulosidade(HoleriteVerba.Verba.Codigo)

2. Filtros de Elegibilidade e Trava de Compliance (Substitui Travas Hardcoded de Clientes e Influx)

SE PerfilConfig.BloquearClienteIntegral == TRUE ENTÃO RegistrarCriticaAuditoria(DadosEmpregado.Id, “Cálculo de Periculosidade suspenso para as diretrizes deste cliente.”) RETORNAR FIM SE

SE DadosEmpregado.Categoria == EnumCategoria.Aprendiz E PerfilConfig.PermitirAprendiz == FALSE ENTÃO RegistrarCriticaAuditoria(DadosEmpregado.Id, “Restrição Cadastral: Aprendizes não possuem direito ao Adicional de Periculosidade.”) RETORNAR FIM SE

3. Sobrescrita de Exceções Temporárias (Substitui Hardcode do Caso Ecobulk)

PercentualAdicional = DadosLancamento.Percentual SE PerfilConfig.PossuiExcecaoCPF(DadosEmpregado.CPF, ParametrosSistema.Global.DataReferencia) == TRUE ENTÃO PercentualAdicional = PerfilConfig.ObterPercentualExcecaoCPF(DadosEmpregado.CPF, ParametrosSistema.Global.DataReferencia) FIM SE

4. Determinação da Base de Cálculo Dinâmica (Salário Seco vs. Composição Multiverbas)

BaseCalculoFinanceira = 0.0000

SE PerfilConfig.ModoComposicaoBase == EnumModoBase.SalarioNominalPuro ENTÃO BaseCalculoFinanceira = ParametrosSistema.Global.VG_VlrSalNom SENÃO // Modo Bucket Expandido (Requisito Angelus, Brasilservice e Bundy) BaseCalculoFinanceira = MóduloBases.ObterValorBucket(DadosEmpregado.Id, PerfilConfig.IdBucketBaseExpandida) FIM SE

ValorReferenciaBase = BaseCalculoFinanceira * (PercentualAdicional / 100.0000)

5. Apuração da Proporcionalidade de Jornada e Matriz de Abatimento de Afastamentos

ValorFinalCalculado = 0.0000

SE PerfilConfig.TipoProporcionalidade == EnumProporcionalidade.IntegralMensalista E DadosEmpregado.TipoPagamento == EnumTipoPagamento.Mensalista ENTÃO // Requisito Bundy (Mensalista): Pago de forma integral sobre a base, sem cortes de dias/horas ValorFinalCalculado = ValorReferenciaBase

SENÃO_SE PerfilConfig.TipoProporcionalidade == EnumProporcionalidade.PorDiasTrabalhados ENTÃO // Requisito TiAutomotive: Rateio exato por dias de direito no mês civil DiasMesCivil = MóduloCalendario.ObterDiasMesCivil(ParametrosSistema.Global.DataReferencia) DivisorDias = PerfilConfig.RegraDivisorDias == EnumDivisorDias.Fixo30 ? 30.0000 : DiasMesCivil // Tratamento Acal vs TiAutomotive

Deduz dias fora do contrato (Admissão/Demissão/Férias) e Afastamentos Parametrizados (15 tipos) DiasAfastaDedutivel = MóduloAfastamento.CalcularDiasAfastaPorMatriz(DadosEmpregado.Id, PerfilConfig.ListaTiposAfastamentoAbatidos) DiasCortadosContrato = MóduloContrato.ObterDiasForaContrato(DadosEmpregado.Id, ParametrosSistema.Global.DataReferencia) DiasFeriasNoMes = ParametrosSistema.Global.VG_DiasFeriasNoMesReferencia

DiasParaPeric = DivisorDias - (DiasAfastaDedutivel + DiasCortadosContrato + DiasFeriasNoMes)

Validação de Ausência de Dias de Direito (Retorna Nulo conforme TiAutomotive) SE (DiasAfastaDedutivel + DiasFeriasNoMes) >= DiasMesCivil ENTÃO RETORNAR FIM SE

ValorFinalCalculado = (ValorReferenciaBase / DivisorDias) * DiasParaPeric

SENÃO // Padrão Geral / Horistas / Acal / JMalucelli DivisorHoras = ParametrosSistema.Global.VG_HsMes SE PerfilConfig.AjustarDivisorAcal == TRUE ENTÃO DivisorHoras = (ParametrosSistema.Global.VG_HsMes / 30.0000) * ParametrosSistema.Global.VG_LimitadorDiasMes FIM SE

HorasIncidePeric = ParametrosSistema.Global.VG_HorasParaVerbasProp

Abatimento de Horas de Atestado Médico (Requisito JMalucelli / Verba 10036) SE PerfilConfig.AbaterHorasAtestado == TRUE ENTÃO DiasAtestado = MóduloAfastamento.ObterDiasAtestado(DadosEmpregado.Id) HorasAtestadoPrisma = DiasAtestado * (ParametrosSistema.Global.VG_HsMes / 30.0000) HorasLancadasVerba10036 = MóduloLancamentos.ObterHorasVerba(DadosEmpregado.Id, “10036”)

TotalHorasAtestado = HorasAtestadoPrisma + HorasLancadasVerba10036

SE HorasIncidePeric <= 0 OU HorasIncidePeric <= TotalHorasAtestado ENTÃO RETORNAR FIM SE HorasIncidePeric = HorasIncidePeric - TotalHorasAtestado FIM SE

SE DivisorHoras > 0 ENTÃO ValorFinalCalculado = (ValorReferenciaBase / DivisorHoras) * HorasIncidePeric FIM SE FIM SE

6. Consolidação Contábil e Disparo Automático do DSR Reflexo

HoleriteVerba.Quantidade = HorasIncidePeric HoleriteVerba.ValorReferencia = Func_ArredondamentoPadrao(ValorReferenciaBase) HoleriteVerba.ValorTotal = Func_ArredondamentoPadrao(ValorFinalCalculado)

Tratamento de Geração Automática de DSR (Requisito PlasticosPR e Bundy) SE HoleriteVerba.ValorTotal > 0 E PerfilConfig.GerarDSRAutomatico == TRUE ENTÃO Func_DispararDSRReflexo(HoleriteVerba.Verba.Codigo, HoleriteVerba.ValorTotal) // Executa motor DSR (Gera Verba 55) FIM SE

FIM


Impactos

  • Migração das listas de verbas (Bundy/Angelus) para uma tabela de “Composição de Base”.
  • Substituição de SysFunc_Panico por validações em tela no momento do lançamento.

Benefícios

  • Rastreabilidade: Memória de cálculo exibindo exatamente quais verbas compuseram a base.
  • Flexibilidade: Configuração de descontos de afastamentos por tipo (Atestado, Layoff, etc.) via parâmetro.

Parametrizações Propostas para Reestruturação

  1. Composição da Base de Cálculo:

    • Seleção múltipla de verbas que compõem a base (Ex: Salário Nominal + Verba 5 + Verba 11, etc.).
    • Opção para dedução automática de verbas de falta/atraso da base.
  2. Elegibilidade e Bloqueios:

    • Configuração de bloqueio por Tipo de Vínculo (Ex: Aprendiz).
    • Configuração de bloqueio por Categoria/Empresa (Ex: Influx).
  3. Regra de Proporcionalidade:

    • Escolha entre: Dias do Mês (30 fixo), Dias Reais do Mês (28-31), ou Horas Mensais.
    • Checklist de afastamentos que devem descontar da base (Ex: Atestados, Licenças, Faltas).
  4. Configuração de Redução (DSR):

    • Flag para “Gerar DSR sobre Periculosidade” (Sim/Não).

Clientes com mesma regra

A transição do motor de periculosidade para uma estrutura paramétrica de dados extingue a árvore de scripts em C# e centraliza a folha de pagamento sob regras universais de tela.

  • Acal: Perfeitamente integrada ao fixar a Sequência em 750 (que cumpre o requisito de rodar após a Verba 12), ativar o divisor de horas proporcionalizado via flag da Seção 2, e assinalar a trava de bloqueio de Aprendizes na Seção 4.
  • Angelus, Brasilservice e Bundy: Totalmente assistidas pelo gerenciador de buckets da Seção 1. A somatória customizada de proventos variáveis deduzida de faltas e atrasos deixa de ser processada via query LINQ e passa a responder nativamente ao bucket relacional de verbas unificadas. O caso específico de mensalistas da Bundy é isolado e assistido pelo seletor de proporcionalidade integral do bloco 2.
  • Ecobulk: Atendida de forma limpa pela matriz de exceções por CPF da Seção 4, permitindo que o RH estipule alíquotas forçadas com prazo de validade na folha de competência sem mexer na estrutura do código core.
  • Influx: Resguardada e bloqueada via parâmetro visual direto na Seção 4.
  • Jmalucelli: Coberta em sua totalidade pela ativação da flag de abatimento de atestados médicos (Seção 3), realizando a leitura e dedução conjunta com a Verba 10036 de forma encadeada.
  • PlasticosPR: Assistida pela ativação global da caixa de seleção [X] Gerar reflexo de DSR automaticamente localizada na Seção 5.
  • TiAutomotive: Absorvida em sua totalidade pela combinação das Seções 2 e 3. O cálculo baseado no calendário civil desconta de forma preditiva os dias de férias, admissões/demissões e os 15 tipos de afastamentos cadastrados, cessando o pagamento caso o funcionário passe o mês completo em ausência legal.

Status Documental

  • Status: Documentada
  • Origem: export do Notion + catálogo da wiki
  • Fonte rastreável: 30dc75ea2e8381f0b185fa3687292042

Voltar ao catálogo

Digite para pesquisar...

Scroll para zoom · Esc para fechar

⌨️ Atalhos de teclado
Navegação
Ctrl K Pesquisar na wiki
Ctrl F Buscar na página
? Ver atalhos
Visualização
Ctrl Shift F Modo foco
A+ / A− Tamanho da fonte
Ctrl D Alternar tema
Ações
Ctrl B Favoritar página
Esc Fechar dialogs