Wiki / SuperCalculo ~6 min

47 - Horas de Paralisação

⚙️ Metadados

  • Código: 47
  • Tipo: Provento
  • INSS: SAL
  • FGTS: SAL
  • IRRF: SAL
  • Natureza eSocial: 1000 - Salário, vencimento, soldo
  • DSR: Não
  • Médias: Não
  • Impacto Financeiro: Não
  • Impacto Contábil: Sim
  • Sequência: 2

🧮 Regra Geral

  • Lógica de Cálculo:

    1. A verba é calculada apenas se houver um lançamento (Lancamento) para ela, validado pela função Func_ValidarExistenciaLancamento.
    2. É calculado um LimiteValor47 como o valor do salário nominal (VG_VlrSalNom) dividido pelas horas do mês (VG_HsMes), multiplicado pelas horas trabalhadas (VG_HsTrab), com arredondamento padrão.
    3. Cenário 1 (Lançamento apenas de Quantidade): Se Lancamento.Quantidade for maior que zero e Lancamento.ValorTotal for zero, a HoleriteVerba.Quantidade recebe o valor de Lancamento.Quantidade. O HoleriteVerba.ValorTotal é calculado como o salário nominal (VG_VlrSalNom) dividido pelas horas do mês (VG_HsMes), multiplicado pela Lancamento.Quantidade, com arredondamento padrão.
    4. Cenário 2 (Lançamento apenas de Valor): Se Lancamento.Quantidade for zero e Lancamento.ValorTotal for maior que zero, a HoleriteVerba.ValorTotal recebe o valor de Lancamento.ValorTotal, com arredondamento padrão.
    5. Cenário 3 (Lançamento de Quantidade e Valor): Se Lancamento.Quantidade e Lancamento.ValorTotal forem maiores que zero, a HoleriteVerba.Quantidade recebe o valor de Lancamento.Quantidade e o HoleriteVerba.ValorTotal recebe o valor de Lancamento.ValorTotal, com arredondamento padrão.
    6. Validação Final: Após o cálculo, se o HoleriteVerba.ValorTotal exceder o LimiteValor47 ou se as horas trabalhadas (VG_HsTrab) forem zero, o HoleriteVerba.ValorTotal é zerado e um erro de pânico (SysFunc_Panico) é disparado, indicando que o valor da verba excede o salário do mês.
  • Fórmula matemática:

    • LimiteValor47 = Func_ArredondamentoPadrao((VG_VlrSalNom / VG_HsMes) * VG_HsTrab)
    • ValorTotal (se Quantidade) = Func_ArredondamentoPadrao((VG_VlrSalNom / VG_HsMes) * Lancamento.Quantidade)
    • ValorTotal (se Valor) = Func_ArredondamentoPadrao(Lancamento.ValorTotal)
  • Variáveis Utilizadas:

    • Lancamento.Quantidade
    • Lancamento.ValorTotal
    • VG_VlrSalNom (Valor do Salário Nominal)
    • VG_HsMes (Horas do Mês)
    • VG_HsTrab (Horas Trabalhadas)
    • HoleriteVerba.Quantidade
    • HoleriteVerba.ValorTotal.
  • Condições Especiais:

    • if (Func_ValidarExistenciaLancamento(Lancamento) == true): A verba só é processada se houver um lançamento.
    • if (Lancamento.Quantidade > 0M && Lancamento.ValorTotal == 0M): Condição para cálculo baseado apenas na quantidade.
    • else if (Lancamento.Quantidade == 0M && Lancamento.ValorTotal > 0M): Condição para cálculo baseado apenas no valor.
    • else if (Lancamento.Quantidade > 0M && Lancamento.ValorTotal > 0M): Condição para cálculo baseado em quantidade e valor.
    • if (HoleriteVerba.ValorTotal > LimiteValor47 || VG_HsTrab == 0): Validação para zerar a verba e emitir erro se o valor exceder o limite ou se não houver horas trabalhadas.

🔗 Dependências

  • Verbas Relacionadas: Verbas 20 e 45.
  • Tipo de Relação: Geração/Afetação. O comentário no código indica que esta verba afeta o valor das verbas 20 e 45, sugerindo que o valor da verba 47 pode ser um insumo ou condição para o cálculo dessas outras verbas.

🧩 Funções

  • Func_ValidarExistenciaLancamento(Lancamento): Verifica se existe um lançamento para a verba no holerite atual.
  • Func_ArredondamentoPadrao(decimal): Arredonda um valor decimal para o padrão de precisão do sistema.
  • Argumento(object): Utilizada para registrar valores na memória de cálculo da verba.
  • EscreverMemoria(string, string): Formata e registra a memória de cálculo detalhada da verba.
  • SysFunc_Panico(string): Interrompe o processo de cálculo e exibe uma mensagem de erro crítica.

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

DivisorEfetivo = SE(SobrescreverDivisor == Verdadeiro, DivisorSobrescrito, HorasMes)

LimiteValor47 = Func_ArredondamentoPadrao((SalarioNominal / DivisorEfetivo) * HorasTrabalhadas)

ValorBruto = SE(Qtd > 0 E VlrTotal == 0, (SalarioNominal / DivisorEfetivo) * Qtd, VlrTotal)

ValorValidado = SE(ValidarTeto == Verdadeiro E (ValorBruto > LimiteValor47 OU HorasTrabalhadas == 0), 0, ValorBruto)

ValorFinal47 = Func_ArredondamentoPadrao(MAX(PisoMinimo, MIN(ValorValidado, SE(PossuiTeto == Verdadeiro, TetoMaximo, ValorValidado))))


1. Filtros de Elegibilidade e Isenções (Piso Seguro)

SE Config.PossuiDataVigenciaInicio E Solicitacao.DataReferencia < Config.DataVigenciaInicio ENTÃO RETORNAR NULO FIM_SE

SE Solicitacao.TipoProcesso == PROVISOES E NAO Config.PermitirCalculoEmProvisoes ENTÃO RETORNAR NULO FIM_SE

SE NAO Config.TiposFolhaPermitidos.Contem(Solicitacao.TipoFolha) ENTÃO RETORNAR NULO FIM_SE

SE Config.ExigirFiltroElegibilidadeEmpresa E NAO Config.EmpresasHabilitadas.Contem(Empregador.Id) ENTÃO RETORNAR NULO FIM_SE

SE NAO Config.TiposPagamentoPermitidos.Contem(Empregado.TipoPagamento) ENTÃO RETORNAR NULO FIM_SE

2. Determinação da Base de Cálculo, Lançamentos e Valoração

LancamentoManual = Holerite.ObterLancamento(“47”)

SE NAO Func_ValidarExistenciaLancamento(LancamentoManual) ENTÃO RETORNAR NULO FIM_SE

Proteção do Divisor Mensal e Salário Nominal DivisorAplicado = SE(Config.SobrescreverDivisorHoras, Config.ValorDivisorSobrescrito, Empregado.HorasMes) SE DivisorAplicado <= 0.0 ENTÃO DivisorAplicado = 220.0 FIM_SE

BaseSalarioNominal = Holerite.ObterValorBase(Config.IdentificadorBaseCalculo) SE BaseSalarioNominal <= 0.0 ENTÃO BaseSalarioNominal = Empregado.SalarioNominal FIM_SE

ValorHoraSalario = BaseSalarioNominal / DivisorAplicado HorasTrabalhadas = Empregado.HorasTrabalhadas

Tratamento de Horas Trabalhadas Zeradas (Substituição de SysFunc_Panico por Descarte/Alerta Seguro) SE HorasTrabalhadas <= 0.0 ENTÃO SE Config.TratarEntradaInvalidaComoAlerta ENTÃO GravarAlertaLog(“MENSAGEM_HORAS_TRABALHADAS_ZERO_47”, “Impossível calcular Horas de Paralisação: Empregado sem horas trabalhadas registradas no mês.”) FIM_SE RETORNAR NULO FIM_SE

Cálculo do Limite Máximo Permitido LimiteValorMaximo = Func_ArredondamentoPadrao(ValorHoraSalario * HorasTrabalhadas)

Avaliação dos Cenários de Lançamento (Quantidade vs Valor) QuantidadeCalculada = 0.0 ValorBrutoCalculado = 0.0

SE LancamentoManual.Quantidade > 0.0 E LancamentoManual.ValorTotal == 0.0 ENTÃO Cenário 1: Apuração por Quantidade Lançada QuantidadeCalculada = LancamentoManual.Quantidade ValorBrutoCalculado = ValorHoraSalario * QuantidadeCalculada

SENÃO SE LancamentoManual.Quantidade == 0.0 E LancamentoManual.ValorTotal > 0.0 ENTÃO Cenário 2: Apuração por Valor Lançado Direto QuantidadeCalculada = 0.0 ValorBrutoCalculado = LancamentoManual.ValorTotal

SENÃO SE LancamentoManual.Quantidade > 0.0 E LancamentoManual.ValorTotal > 0.0 ENTÃO Cenário 3: Apuração por Quantidade e Valor Lançados QuantidadeCalculada = LancamentoManual.Quantidade ValorBrutoCalculado = LancamentoManual.ValorTotal

SENÃO RETORNAR NULO FIM_SE

3. Aplicação de Limites, Tetos, Pisos e Validação de Estouro (Eliminação do SysFunc_Panico)

SE Config.ValidarTetoSalarioMes E ValorBrutoCalculado > LimiteValorMaximo ENTÃO SE Config.AcaoEstouroLimite == “BLOQUEAR_E_ALERTAR” ENTÃO GravarAlertaLog(“MENSAGEM_EXCEDE_SALARIO_47”, String.Format(“Valor das Horas de Paralisação (R$ {0}) excede o limite do salário do mês (R$ {1}). Verba desconsiderada.”, ValorBrutoCalculado.ToString(“N2”), LimiteValorMaximo.ToString(“N2”))) RETORNAR NULO SENÃO SE Config.AcaoEstouroLimite == “CORRAGEM_PARA_TETO” ENTÃO ValorBrutoCalculado = LimiteValorMaximo FIM_SE FIM_SE

SE Config.PossuiTetoMaximo E ValorBrutoCalculado > Config.ValorTetoMaximo ENTÃO ValorBrutoCalculado = Config.ValorTetoMaximo SENÃO SE Config.PossuiPisoMinimo E ValorBrutoCalculado < Config.ValorPisoMinimo ENTÃO ValorBrutoCalculado = Config.ValorPisoMinimo FIM_SE

ValorFinal47 = Func_ArredondamentoPadrao(ValorBrutoCalculado)

SE ValorFinal47 <= 0.0 E NAO Config.GravarVerbaZerada ENTÃO RETORNAR NULO FIM_SE

4. Gravação de Campos, Acumuladores Fiscais e Insumos para Verbas Correlacionadas (Verbas 20 e 45)

RubricaHorasParalisacao = CriarVerbaHoleriteBO(“47”, “Horas de Paralisação”) RubricaHorasParalisacao.TipoVerba = “P”

SE QuantidadeCalculada > 0.0 ENTÃO RubricaHorasParalisacao.Quantidade = Func_ArredondamentoPadrao(QuantidadeCalculada) FIM_SE

RubricaHorasParalisacao.ValorTotal = ValorFinal47

Disparo de Base de Insumo para Impactar Verbas Relacionadas (Verbas 20 e 45) Holerite.AcumularBase(“BASE_HORAS_PARALISACAO”, ValorFinal47) Holerite.AcumularBase(“QTD_HORAS_PARALISACAO”, QuantidadeCalculada)

Encargos Sociais Conforme Metadados (INSS: SAL, FGTS: SAL, IRRF: SAL) SE Config.TributarINSS ENTÃO Holerite.AcumularBase(“BASE_INSS_FOLHA”, ValorFinal47) SENÃO Holerite.AcumularBase(“BASE_INSS_ISENTA_FOLHA”, ValorFinal47) FIM_SE

SE Config.TributarFGTS ENTÃO Holerite.AcumularBase(“BASE_FGTS_FOLHA”, ValorFinal47) SENÃO Holerite.AcumularBase(“BASE_FGTS_ISENTA_FOLHA”, ValorFinal47) FIM_SE

SE Config.TributarIRRF ENTÃO Holerite.AcumularBase(“BASE_IRRF_FOLHA”, ValorFinal47) SENÃO Holerite.AcumularBase(“BASE_IRRF_ISENTA_FOLHA”, ValorFinal47) FIM_SE

Repercussão de Reflexos: DSR e Médias (DSR: Não, Médias: Não conforme Metadados) SE Config.ComporDSR E SysFunc_VerbaPossuiDSR(“47”) ENTÃO Holerite.AcumularBase(“BASE_HORAS_VARIAVEIS_DSR”, ValorFinal47) Func_DSR(“47”, “DSR s/ Horas de Paralisação”, “47”, ValorFinal47, RubricaHorasParalisacao, VERDADEIRO) FIM_SE

SE Config.IncorporaMedias ENTÃO Holerite.AcumularBase(“BASE_MEDIAS_13”, ValorFinal47) Holerite.AcumularBase(“BASE_MEDIAS_FERIAS”, ValorFinal47) Holerite.AcumularBase(“BASE_MEDIAS_RESCISAO”, ValorFinal47) FIM_SE

Holerite.ListaHoleriteVerba.Adicionar(RubricaHorasParalisacao)

Registro em memória de cálculo detalhada Argumento(“SALARIO_NOMINAL_47”, BaseSalarioNominal) Argumento(“DIVISOR_APLICADO_47”, DivisorAplicado) Argumento(“HORAS_TRABALHADAS_47”, HorasTrabalhadas) Argumento(“LIMITE_MAXIMO_47”, LimiteValorMaximo) Argumento(“VALOR_FINAL_47”, ValorFinal47)

EscreverMemoria(“HORAS_PARALISACAO”, String.Format(“Horas de Paralisação: Salário Nominal R$ {0} | Divisor {1} | Qtd {2}h | Limite Mês R$ {3} | Valor Final R$ {4}”, BaseSalarioNominal.ToString(“N2”), DivisorAplicado.ToString(“N2”), QuantidadeCalculada.ToString(“N2”), LimiteValorMaximo.ToString(“N2”), ValorFinal47.ToString(“N2”)))

RETORNAR RubricaHorasParalisacao

FIM


Parametrizações Propostas para Reestruturação

1. REGRAS DE ENTRADA E FILTROS DE ELEGIBILIDADE

Tipos de Folha Permitidos …: [X] Regular [ ] Férias [X] Rescisão [ ] Provisões

Tipos de Pagamento Elegíveis …: [X] Mensalista [X] Horista [ ] Comissionista

Modo de Entrada de Dados …: [ Permitir Quantidade, Valor ou Ambos v ]

Tratamento para Dados/Mês Inválidos …: [ Gravar Alerta no Log e Descartar Verba v ]

[ ] Exigir Filtro de Elegibilidade por Empresa / Estabelecimento / Cliente

2. DIRETRIZES DE CÁLCULO E SEGURANÇA

Identificador da Base de Cálculo …: [ SALARIO_NOMINAL v ]

[ ] Sobrescrever Divisor Mensal Padrão

Valor do Divisor Sobrescrito …: [ 220,00 ]

[X] Validar Limite do Salário do Mês (Limite = Horas Trabalhadas * Salário Hora)

Ação ao Estourar Limite …: [ Bloquear Verba e Registar Alerta (Sem Pânico) v ]

3. LIMITES E REPERCUSSÕES

[ ] Compor DSR (Descanso Semanal Remunerado)

[ ] Incorporar em Médias (13º, Férias e Rescisão)

[X] Alimentar Base de Insumo para Verbas Dependentes (Verbas 20 e 45)

[ ] Possui Teto Máximo R$ …: [ 0,00 ]

[ ] Possui Piso Mínimo R$ …: [ 0,00 ]

[ ] Gravar Verba quando Valor Final for Zero

4. ENCARGOS E NATUREZA ESOCIAL

Natureza eSocial …: [ 1000 - Salário, vencimento, soldo v ]

Incidência INSS …: [ Salário / Tributado Integral (SAL) ]

Incidência FGTS …: [ Salário / Tributado Integral (SAL) ]

Incidência IRRF …: [ Salário / Tributado Integral (SAL) ]

Afeta DSR …: [ ] Sim [X] Não (Conforme Metadados)

Incorpora Médias …: [ ] Sim [X] Não (Conforme Metadados)

Status Documental

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

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