Wiki / SuperCalculo ~22 min

19 - Desc. Refeição

Metadados

  • Código: 19
  • Tipo: Desconto
  • INSS: ISE
  • FGTS: ISE
  • IRRF: ISE
  • Natureza eSocial: 9243 - Cesta básica ou refeição, vinculada ao PAT - Desconto
  • DSR: Não
  • Médias: Não
  • Impacto Financeiro: Não
  • Impacto Contábil: Sim
  • Sequência: 761

🧮 Regra Geral

  • Lógica de Cálculo:
    1. A verba não é calculada se o TipoProcesso for Provisoes (5).
    2. A verba possui uma customização hardcoded para o cliente “Brabus” com CNPJ de empregador iniciando em “558226900” (identificado como Emova).
    3. Para Brabus/Emova:
      • Verifica se existe um lançamento (Lancamento) válido, se a Quantidade do lançamento é 1 e se o TipoFolha é Regular (1) ou Rescisao (não especificado no contexto, mas geralmente um tipo de processo).
      • Se essas condições forem atendidas, define um VlrMes de 65.94.
      • A Quantidade da verba é definida como os VG_DiasTrab (dias trabalhados).
      • O ValorTotal é calculado como o valor mensal (VlrMes) dividido por 30, multiplicado pelos VG_DiasTrab, arredondado (Func_ArredondamentoPadrao) e tornado negativo (Negativo), pois é um desconto.
      • Se o valor calculado (em módulo, Positivo) exceder o VlrMes (65.94), o ValorTotal é limitado ao VlrMes (negativo).
      • Se as condições internas para Brabus/Emova não forem atendidas, a verba não é calculada (return null).
    4. Para clientes que não são Brabus/Emova: A fórmula não possui lógica de cálculo explícita. Isso significa que, para esses clientes, a verba 19 não será calculada por esta “REGRA GERAL”, a menos que haja outra regra específica ou um lançamento manual.
  • Fórmula matemática: Para Brabus/Emova, o cálculo base é Valor = Negativo(ArredondamentoPadrao(65.94 ÷ 30 × VG_DiasTrab)), limitado a Negativo(65.94).
  • Variáveis Utilizadas: Solicitacao.TipoProcesso, Solicitacao.Cliente, Empregador.CNPJEmpregador, Lancamento, Lancamento.Quantidade, Solicitacao.TipoFolha, VG_DiasTrab, VlrMes, HoleriteVerba.Quantidade, HoleriteVerba.ValorTotal.
  • Condições Especiais:
    • if (Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes): Exclui o cálculo para processos de provisão.
    • if (Solicitacao.Cliente.ToLower() == "brabus" && Empregador.CNPJEmpregador.Trim().StartsWith( "558226900")): Ativa a lógica de cálculo específica para o cliente Brabus/Emova.
    • if (Func_ValidarExistenciaLancamento(Lancamento) == true && Lancamento.Quantidade == 1M && (Solicitacao.TipoFolha == EnumTipoFolhaBO.Regular || Solicitacao.TipoFolha == EnumTipoFolhaBO.Rescisao)): Condições adicionais para o cálculo dentro do bloco Brabus/Emova.
    • if (Positivo(HoleriteVerba.ValorTotal) > VlrMes): Condição para aplicar o teto do desconto.

🔔 Eventos/Gatilhos

  • Condição de Ativação: Desc. Refeição
  • Quando a verba é calculada:
    • É calculada automaticamente para o cliente Brabus/Emova em processos de Folha Regular (1) ou Rescisão, desde que exista um lançamento específico com Quantidade igual a 1.
    • Não é calculada para processos de Provisão (5).
    • Não é calculada por esta fórmula para clientes que não sejam Brabus/Emova.

🧩 Funções

  • Func_ValidarExistenciaLancamento(Lancamento): Verifica a existência e validade de um lançamento.
  • Func_ArredondamentoPadrao(decimal valor): Realiza o arredondamento padrão do sistema.
  • Negativo(decimal valor): Retorna o valor como negativo.
  • Positivo(decimal valor): Retorna o valor como positivo (módulo).

🎯 Particularidades por Cliente/Setor

👤 Acal
  • Abordagem de Cálculo: A regra para acal não contém lógica de cálculo hardcoded. Em vez disso, ela busca benefícios de refeição registrados no histórico do empregado (Empregado.Historico.ListaBeneficioFornecido) para o mês de referência. Para cada benefício encontrado, a verba é calculada executando uma fórmula específica associada ao próprio benefício através da função ExecutarFormulaBeneficio, que pode incluir um cálculo prévio via CalcularBeneficio se não for um benefício novo.

  • Condições de Retorno Nulo Iniciais: Não possui a validação inicial para EnumTipoProcessoBO.Provisoes presente na regra geral.

  • Lógica Específica por Cliente: Não contém blocos de código condicional para clientes específicos (como o bloco para “brabus” na regra geral).

  • Cálculo Baseado em Dias Trabalhados: Não utiliza VG_DiasTrab ou uma divisão por 30 para proporcionalizar o desconto. O valor é determinado pela fórmula configurada no benefício.

  • Arredondamento Explícito: Não há uma chamada explícita a Func_ArredondamentoPadrao no código fornecido para acal. O arredondamento pode ser implícito na fórmula do benefício.

  • Geração de Verbas Adicionais: A regra para acal pode gerar múltiplas instâncias da verba 19 (ou verbas relacionadas) se houver múltiplos benefícios de refeição configurados para o empregado, adicionando-os à Holerite.ListaHoleriteVerba.

  • Dependências de Dados: A regra para acal depende fortemente do Empregado.Historico.ListaBeneficioFornecido, que armazena os benefícios configurados para o empregado. A lógica de cálculo real é externalizada para a fórmula definida dentro de cada objeto Beneficio.

  • Geração de Verbas: A regra para acal pode adicionar múltiplas entradas para a verba 19 (ou verbas com o mesmo código) na lista de verbas do holerite (Holerite.ListaHoleriteVerba), uma para cada benefício encontrado.

👤 Brabus
  • CNPJ iniciando em “558226900”, identificado como Emova: A lógica de cálculo principal da verba 19, incluindo o valor mensal de 65.94 e a forma de cálculo proporcional aos dias trabalhados com um teto mensal, é exclusiva para este cliente dentro da “REGRA GERAL”. Para outros clientes, esta “REGRA GERAL” não efetua nenhum cálculo para a verba 19.
👤 Corteva
  • Validação por CNPJs Específicos: A verba é calculada apenas se o Empregador.CNPJEmpregador corresponder a uma das 15 filiais predefinidas da Corteva, verificada pela variável Tem19.
  • Cálculo Automático para Ausência de Lançamento: Se a verba não possuir um lançamento manual (Func_ValidarExistenciaLancamento(Lancamento) == false), e for um processo de Folha Regular ou Rescisão, ela é calculada automaticamente com Quantidade = 1, ValorReferencia = 1 e ValorTotal = -1.00M.
  • Cálculo Baseado em Lançamento Manual e Tabela de Valores Diários: Se houver um lançamento manual (Func_ValidarExistenciaLancamento(Lancamento) == true) com Quantidade >= 1M, o valor diário (VlrDia) é determinado por uma tabela interna que mapeia cada CNPJ da Corteva a um valor específico. O ValorTotal é então calculado como Negativo(Func_ArredondamentoPadrao(HoleriteVerba.Quantidade * HoleriteVerba.ValorReferencia)).
  • Geração de Memória de Cálculo: A regra para corteva inclui a geração de uma MemoriaCalculo detalhada, explicando a quantidade de refeições, o valor unitário e o valor total.
👤 Crasa
  • Escopo de Aplicação: A regra geral se aplica exclusivamente ao cliente “brabus” (Emova), retornando null para qualquer outro cliente. A regra de CRASA, por sua vez, é ativada para CNPJs específicos (21063590000171, 30975347000110, 21339831000405), fornecendo um cálculo detalhado onde a regra geral não o faria.

  • Verificação de Tipo de Processo: A regra geral verifica e retorna null se o Solicitacao.TipoProcesso for EnumTipoProcessoBO.Provisoes. A regra de CRASA não possui essa verificação inicial.

  • Condições de Retorno Nulo Iniciais:

    • A regra geral retorna null se não houver lançamento manual (Func_ValidarExistenciaLancamento for falso) ou se a Lancamento.Quantidade não for 1M para o cliente “brabus”.
    • A regra de CRASA possui condições de retorno null mais complexas, baseadas no Empregado.TipoVinculo (Aprendiz ou Estagiário para CNPJs específicos), na existência de lançamento manual com Lancamento.ValorTotal == 0M, ou para um Empregado.CPF específico (83683364815).
  • Lógica de Cálculo Base:

    • A regra geral utiliza um valor fixo mensal de 65.94M (VlrMes), prorrateado pelos VG_DiasTrab e limitado a esse valor mensal.
    • A regra de CRASA calcula o desconto com base em BaseCalculo e Percentual que variam conforme o Empregador.CNPJEmpregador.
      • 21063590000171: BaseCalculo = 15.40M, Percentual = 3.00M.
      • 30975347000110: BaseCalculo = 16.50M, Percentual = 3.00M.
      • 21339831000405: BaseCalculo = 30.00M, Percentual = 1.00M.
  • Cálculo de Faltas: A regra de CRASA incorpora DiasFalta no cálculo, que é derivado da soma de quantidades de lançamentos das verbas 6 (Faltas) e 466 (Atrasos), divididos por uma base de horas mensais. A regra geral não considera faltas ou atrasos dessa forma.

  • Condição de Retorno por Dias Trabalhados: A regra de CRASA retorna null se (VG_DiasTrabalhadosBeneficio - DiasFalta) for menor ou igual a 0M. A regra geral não possui essa condição.

  • Lógica para Trabalhadores de Domingo: A regra de CRASA inclui uma lógica específica para o CNPJ 21339831000405 (CRASA - Cocalinho - MT) que verifica se o empregado TrabalhaDomingo usando a função SysFunc_RetornaBeneficioDiasTrabalho. Se TrabalhaDomingo for verdadeiro, os DiasConsiderados são ajustados (VG_DiasTrabalhadosBeneficio + VG_Saldo_Hs_Feriado_SegSex) e o HoleriteVerba.ValorTotal final é multiplicado por 2. A regra geral não possui essa complexidade.

  • Variáveis e Funções Adicionais: A regra de CRASA utiliza variáveis como BaseCalculo, Percentual, DiasFalta, VG_DiasTrabalhadosBeneficio, VG_HsMes, VG_Saldo_Hs_Feriado_SegSex, DiasConsiderados, e funções como SysFunc_RetornaBeneficioDiasTrabalho, SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual, SysFunc_UltimoDiaMes, Argumento, EscreverMemoria. A regra geral utiliza um conjunto mais limitado de variáveis e funções.

  • Memória de Cálculo: A regra de CRASA gera uma MemoriaCalculo detalhada com os argumentos utilizados no cálculo. A regra geral não possui essa funcionalidade.

  • Dependências de Verbas: A regra de CRASA depende das verbas 6 (Faltas) e 466 (Atrasos) para calcular os DiasFalta. A regra geral não possui dependências de outras verbas para seu cálculo.

👤 Dex
  • Condições de Retorno Nulo Iniciais: Não possui a validação para Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes, que na regra geral resultaria em null.
  • Lógica Específica de Cliente: Não aplica a lógica de cálculo exclusiva para o cliente “brabus” (que envolve validação de CNPJ, valor fixo mensal de 65.94M e prorrateio por VG_DiasTrab).
  • Base de Cálculo: O valor total é calculado diretamente pela multiplicação de Lancamento.Quantidade pelo Lancamento.ValorTotal (valor unitário lançado), sem considerar um valor mensal fixo ou dias trabalhados.
  • Customização da Descrição: A HoleriteVerba.DescricaoFinal é formatada para incluir o valor unitário (Lancamento.ValorTotal) do desconto.
  • Memória de Cálculo: Inclui um bloco de MemoriaCalculo detalhando a operação de multiplicação da quantidade pelo valor unitário.
👤 Employer
  • Condições de Retorno Nulo Iniciais: Não possui a validação de Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes presente na regra geral.

  • Lógica Específica por Cliente/CNPJ: Não contém a lógica exclusiva para o cliente “brabus” (CNPJ iniciado em “558226900”) presente na regra geral.

  • Cálculo Baseado em Lançamento Manual: Prioriza o cálculo com base em lançamentos manuais (Func_ValidarExistenciaLancamento(Lancamento) == true, Lancamento.Quantidade > 0M e Lancamento.ValorTotal < 0M), formatando a DescricaoFinal e calculando o ValorTotal diretamente do lançamento.

  • Cálculo Condicional por Provento: Se não houver lançamento manual e VG_TemAlgumProvento for verdadeiro, a verba é calculada com base em condições específicas de Empregador.CNPJEmpregador e Cod_Contrato_Filho.

  • Cálculo para CNPJ “29980869000121” (Staff): Ativa-se para contratos filhos específicos ("2.21.4", "2.21.6", "2.21.17", "2.230.13", "2.230.19"). Calcula a Quantidade a partir da RecuperarValorTotalVerba("20"), aplica um Percentual de 1.2M e o ValorTotal é o resultado da Quantidade multiplicada pelo Percentual e dividida por 100M, arredondado e negativo.

  • Cálculo para CNPJ “5445752000180” (ETT):

    • Para contrato filho “1.1400.3” (Fertipar): Calcula DiasDescRefeicao somando SaldoDiasSegSex e SaldoDiasSab, deduz DiasFaltaMes (calculado a partir das verbas “6” e “466”). O ValorReferencia por dia varia conforme a DataReferencia: 3.98M (a partir de 01/10/2024) ou 3.73M (até 01/09/2024). O ValorTotal é o produto da Quantidade pelo ValorReferencia, arredondado e negativo.
    • Para contrato filho “1.550.2” (Seara - Dourado): (a partir de 01/11/2023) Calcula DiasDesconto a partir de VG_DiasTrab deduzindo DiasFaltaMes. Define VlrRefeicaoMes como 42.90M. O ValorTotal é o VlrRefeicaoMes dividido por 30M e multiplicado pela Quantidade, arredondado e negativo.
    • Para contrato filho “1.11.25” (DHL - Esteio): (a partir de 01/02/2022) HoleriteVerba.Quantidade é RecuperarValorTotalVerba("20"). Aplica um Percentual de 1.00M. O ValorTotal é o produto da Quantidade pelo Percentual dividido por 100M, arredondado, com um limite máximo de desconto de R$ 55,00 (negativo).
    • Para contrato filho “1.955.1”: (a partir de 01/10/2023) Define HoleriteVerba.Quantidade como 25.00M. O ValorTotal é 25.00M dividido por 30M e multiplicado por VG_DiasTrab, arredondado e negativo.
    • Para contrato filho “1.1080.1”: Calcula DiasDescRefeicao a partir de VG_GradeMesAtual.SaldoDiasSegSex. Retorna null se DiasDescRefeicao for menor ou igual a 0M. O ValorReferencia por dia varia conforme a DataReferencia: 1.41M (a partir de 01/11/2025) ou 1.33M (a partir de 01/03/2025). O ValorTotal é o produto da Quantidade pelo ValorReferencia, arredondado e negativo.
  • Cálculo Genérico de Benefício: Se nenhuma das condições específicas de CNPJ/contrato filho for atendida, utiliza a função SysFunc_GeraDescontoBeneficio(HoleriteVerba).

  • Memória de Cálculo: Inclui blocos de MemoriaCalculo detalhados para cada cenário de cálculo, o que não existe na regra geral.

  • Dependências de Cálculo: A regra do cliente employer possui uma gama muito mais ampla de dependências, incluindo Lancamento, VG_TemAlgumProvento, Empregador.CNPJEmpregador, SysFunc_TagPossuiConteudo, RecuperarValorTotalVerba("20"), VG_GradeMesAtual, SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual("6"), SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual("466"), VG_HsMes e SysFunc_GeraDescontoBeneficio.

👤 Froneri
  • Condições de Retorno Nulo Iniciais: Não possui a validação para Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes, o que significa que a verba pode ser calculada em processos de provisão para este cliente.
  • Lógica Específica de Cliente: Não contém o bloco de código condicional para o cliente “brabus” e seu CNPJ específico.
  • Condições de Ativação do Cálculo: A verba é calculada se houver um lançamento (Func_ValidarExistenciaLancamento(Lancamento) == true), a Quantidade lançada for maior que zero (> 0M) e o ValorTotal lançado for diferente de zero (!= 0M).
  • Base de Cálculo: O valor total da verba é determinado pela multiplicação da Lancamento.Quantidade (quantidade lançada) pelo Lancamento.ValorTotal (valor unitário lançado), aplicando-se o arredondamento padrão (Func_ArredondamentoPadrao).
  • Customização da Descrição: A descrição final da verba no holerite (HoleriteVerba.DescricaoFinal) é customizada para incluir a quantidade e o valor unitário lançado, formatado como “Descrição (R$X,XX cada)”.
  • Memória de Cálculo: Inclui um bloco de MemoriaCalculo detalhando a operação de multiplicação da quantidade pelo valor unitário.
👤 Jmalucelli
  • Validação de Tipo de Processo: Não possui a validação inicial que impede o cálculo da verba para EnumTipoProcessoBO.Provisoes.
  • Regra Específica de Cliente: Não contém a lógica de cálculo específica para o cliente “brabus” presente na regra geral.
  • Condições de Ativação: A verba é calculada apenas para empregadores com CNPJs 53100355000119 (Consorcio Afonso Pena) ou 31858881000100 (MLC Infra Construção S/A), e somente se o sindicato for 79776878000173 (Sintrapav).
  • Validação de Centro de Resultado: Para o empregador 31858881000100, exige que a tag DES_CENTRO_RESULTADO do empregado exista e que seus últimos 7 caracteres sejam 1145006. Caso contrário, a verba não é calculada ou gera um erro (SysFunc_Panico).
  • Base de Cálculo Dinâmica: O valor base diário (Valorbase19) é obtido do campo ValorPisoGeral da tabela Sindicato.ListaSindicatoPisoGeral para o sindicato 79776878000173 e para o mês de referência.
  • Cálculo de Dias de Falta: Calcula os dias de falta (DiasFalta) somando a quantidade de lançamentos de código 6 (convertidos para dias) e 466.
  • Condição de Cálculo por Dias Trabalhados: A verba só é calculada se a diferença entre os dias trabalhados para benefício (VG_DiasTrabalhadosBeneficio) e os dias de falta for maior que zero.
  • Fórmula de Cálculo do Valor Total: O valor total é calculado como o Valorbase19 multiplicado pela diferença entre os dias trabalhados para benefício e os dias de falta, arredondado e negativo.
  • Memória de Cálculo: Gera uma memória de cálculo detalhada (MemoriaCalculo) com os valores utilizados na fórmula.
👤 Monsanto
  • Condições de Retorno Nulo Iniciais: A verba não é calculada se o TipoFolha for RescisaoComplementar.

  • Lógica de Cálculo Exclusiva: A regra para monsanto é completamente diferente da regra geral, que possui um bloco específico para o cliente “brabus” e um CNPJ específico. A regra de monsanto é exclusiva e não contém essas validações de cliente/CNPJ.

  • Base de Cálculo Variável: O valor do desconto (Vlr_Ref) é determinado por faixas salariais (BC_Ref baseado em VG_VlrSalNom), diferentemente da regra geral que utiliza um valor fixo mensal.

  • Cálculo da Quantidade de Dias: A quantidade de dias para desconto (HoleriteVerba.Quantidade) é calculada com base no SaldoDiasSegSex do mês atual (VG_GradeMesAtual.SaldoDiasSegSex), subtraindo os dias de falta (verba 6), e limitada a 15 dias. A regra geral utiliza VG_DiasTrab.

  • Condição de Retorno por Dias de Refeição: A verba não é calculada se os dias de refeição calculados (DiasRefeicao) forem menores ou iguais a zero.

  • Memória de Cálculo Detalhada: Inclui uma seção explícita para gerar a memória de cálculo (MemoriaCalculo), detalhando os valores utilizados na base de cálculo, valor unitário, dias remunerados e valor total.

  • Dependência de Verba de Faltas: A fórmula de monsanto depende do valor da verba 6 (Faltas) para calcular os dias de refeição a serem descontados, através da função SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual("6"). A regra geral não possui essa dependência de valor de outra verba.

👤 Syngenta
  • Condições de Retorno Nulo Iniciais: Não possui a verificação de Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes presente na regra geral.
  • Regra Específica por Cliente/CNPJ: Não contém a lógica condicional exclusiva para o cliente “brabus” e CNPJ 558226900 presente na regra geral.
  • Lógica de Cálculo: O cálculo é baseado na multiplicação da Lancamento.Quantidade pelo Lancamento.ValorTotal, aplicando Func_ArredondamentoPadrao. A regra geral para “brabus” utiliza um valor fixo mensal (VlrMes) e VG_DiasTrab.
  • Validação de Quantidade: A verba é calculada se Lancamento.Quantidade > 0M. A regra geral para “brabus” exige Lancamento.Quantidade == 1M.
  • Validação de Tipo de Folha: Não possui a validação de Solicitacao.TipoFolha (Regular ou Rescisão) presente na regra geral para “brabus”.
  • Teto de Desconto: Não aplica um teto máximo de desconto baseado em um valor mensal fixo (VlrMes), como ocorre na regra geral para “brabus”.
  • Memória de Cálculo: Inclui uma seção explícita de MemoriaCalculo (#region MC-A) para detalhar o cálculo, que não está presente na regra geral.
  • Cálculo Automático: Um comentário no código indica que o cálculo automático foi desligado em 02/07/2018, sugerindo que a verba é primariamente lançada manualmente.
👤 Tiautomotive
  • Condições de Retorno Nulo Iniciais: Não possui as condições de retorno nulo para EnumTipoProcessoBO.Provisoes ou para clientes específicos (brabus / Emova) presentes na regra geral.

  • Lógica de Cálculo Baseada em Categorias e CNPJs: O cálculo é altamente parametrizado por CategoriaRefeicao (obtida da verba 859) e pelo CNPJ do empregador, com valores e lógicas distintas para diferentes filiais (São José dos Campos, Juatuba e Gravataí). A regra geral utiliza um valor fixo mensal.

  • Determinação de Dias de Refeição: Calcula Dias_Refeicao_Fretado com base na variável VG_BaseParaRefeicaoFretado e deduz horas da verba 640 (com complemento 144), convertendo-as em dias. A regra geral utiliza VG_DiasTrab.

  • Valores de Refeição Variáveis por Data e Categoria: Os valores de VlrRefeicaoCategoria são definidos por faixas de DataReferencia e pela CategoriaRefeicao para cada CNPJ específico. A regra geral usa um valor fixo de 65.94M.

  • Cálculo Específico para Gravataí: Para o CNPJ 55981351001941 (Gravataí) e a partir de 01/08/2018, a verba calcula QtdHsFaltas somando quantidades de diversas verbas de falta/afastamento (6, 270, 466, 640, 10035) e dias de atestado. O valor final depende se há faltas ou não, com diferentes VlrRefeicaoCategoria por período.

  • Geração de Memória de Cálculo: A verba gera uma MemoriaCalculo detalhada (HoleriteVerba.MemoriaCalculo) com os valores e a fórmula aplicada (MC-A, MC-B, MC-C, MC-E, MC-H, MC-I). A regra geral não possui essa funcionalidade.

  • Variáveis e Funções Adicionais: Utiliza variáveis como CategoriaRefeicao, QtdeDiasMes, VlrRefeicaoCategoria, Dias_Refeicao_Fretado, Hs640, QtdHsFaltas e funções como SysFunc_UltimoDiaMes, SysFunc_MesmoMesAno, SysFunc_RecuperarLancamento, SysFunc_NovaData, SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual, RecuperarDiasAfastamento. A regra geral usa um conjunto mais limitado de variáveis e funções.

  • Verbas Relacionadas:

    • Dependência de Verba 859: O cálculo depende diretamente da Quantidade lançada na verba 859 (CategoriaRefeicao).
    • Dependência de Verba 640: A quantidade de Hs640 (verba 640 com complemento 144) é utilizada para deduzir dias de refeição.
    • Dependência de Verbas de Falta/Afastamento: Para a filial de Gravataí, o cálculo considera a soma das quantidades das verbas 6 (Falta), 270 (Falta Abonada), 466 (Falta dia), 10035 (Atestado) e dias de afastamento por atestado médico.
  • Variáveis de Sistema: Utiliza VG_BaseParaRefeicaoFretado, VG_HsMes e VG_TemAlgumProvento como variáveis de sistema para o cálculo.

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

ValorTotal = -1 * Min( ( ( (BaseDias - DiasFalta) * CustoUnitario ) * FatorDomingo ), TetoMaximoDesconto )


1. Filtros de Elegibilidade, Exclusões e Controle de Processo

Se (Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes OU Solicitacao.TipoFolha == EnumTipoFolhaBO.RescisaoComplementar) { HoleriteVerba = null; InterromperCalculo(); }

// Validação de Exclusão por Tipo de Vínculo (Atende Crasa: Aprendiz/Estagiário) Se (Configuracao.ExcluirTipoVinculo == Verdadeiro E (Empregado.TipoVinculo == EnumTipoVinculoBO.Aprendiz Ou Empregado.TipoVinculo == EnumTipoVinculoBO.Estagiario)) { HoleriteVerba = null; InterromperCalculo(); }

// Validação de Lotação / Centro de Resultado por Tag (Atende Jmalucelli) Se (Configuracao.ExigirCentroResultado == Verdadeiro) { Definir TagCR = SysFunc_ObterTagEmpregado(“DES_CENTRO_RESULTADO”); Definir UltimosCaracteresValidos = SysFunc_SubString(TagCR, TagCR.Comprimento - 7, 7); Se (UltimosCaracteresValidos != Configuracao.ValorCentroResultadoObrigatorio) { SysFunc_Panico(“Verba 19 - Colaborador não pertence ao Centro de Resultado permitido para desconto de refeição.”); } }

// Validação de Existência de Proventos (Atende Employer) Se (Configuracao.ExigirProventos == Verdadeiro E VG_TemAlgumProvento == Falso) { HoleriteVerba = null; InterromperCalculo(); }

2. Modo de Cálculo: Lançamento Manual Direto (Atende Dex, Froneri, Syngenta e Employer manual)

Definir ExisteLancamento = Func_ValidarExistenciaLancamento(Lancamento);

Se (Configuracao.ModoCalculo == “LancamentoManualDirect”) { Se (ExisteLancamento == Verdadeiro E Lancamento.Quantidade > 0.00) { HoleriteVerba.Quantidade = Lancamento.Quantidade; HoleriteVerba.ValorReferencia = Lancamento.ValorTotal; // Trata valor total lançado como o valor unitário HoleriteVerba.ValorTotal = Negativo(Func_ArredondamentoPadrao(Lancamento.Quantidade * Lancamento.ValorTotal));

Se (Configuracao.CustomizarDescricaoLote == Verdadeiro) { HoleriteVerba.DescricaoFinal = “Desc. Refeição (R$ ” + Lancamento.ValorTotal.ToString(“F2”) + ” cada)”; }

AdicionarAoHolerite(HoleriteVerba); InterromperCalculo(); } Senao { HoleriteVerba = null; InterromperCalculo(); } }

3. Apuração do Absenteísmo e Dias de Direito (Atende Crasa, Employer, Jmalucelli, Monsanto, Tiautomotive)

Definir DiasFaltaAbsoluta = 0.00; Se (Configuracao.AbaterAbsenteismo == Verdadeiro) { Definir QtdFaltas = SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual(“6”); Definir QtdAtrasos = SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual(“466”);

// Tratamento de Faltas Extras / Afastamentos (Atende Tiautomotive Gravataí) Se (Configuracao.AbaterAfastamentosExtras == Verdadeiro) { QtdFaltas = QtdFaltas + SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual(“270”) + SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual(“640”) + SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual(“10035”) + RecuperarDiasAfastamento(); }

DiasFaltaAbsoluta = Func_ArredondamentoPadrao((QtdFaltas + QtdAtrasos) / (VG_HsMes / 30.00)); }

// Determinação do Calendário de Dias de Direito Base Definir DiasBaseCalendario = 0.00; Escolha (Configuracao.TipoCalendarioDireito) { Caso “DiasTrabalhados”: DiasBaseCalendario = VG_DiasTrabalhadosBeneficio; FimCaso; Caso “SaldoDiasSegSex”: DiasBaseCalendario = VG_GradeMesAtual.SaldoDiasSegSex; FimCaso; Caso “SaldoDiasUteisCompleto”: DiasBaseCalendario = VG_GradeMesAtual.SaldoDiasSegSex + VG_GradeMesAtual.SaldoDiasSab; FimCaso; Caso “FixoCalendario”: DiasBaseCalendario = Configuracao.QuantidadeDiasFixa; // Atende DHL / DHL Esteio FimCaso; Padrao: DiasBaseCalendario = VG_DiasTrab; FimCaso; }

Definir DiasDireito = DiasBaseCalendario - DiasFaltaAbsoluta;

// Validação de limite máximo de dias (Atende Monsanto: máximo 15 dias) Se (Configuracao.LimitarDiasDireito == Verdadeiro E DiasDireito > Configuracao.MaximoDiasDireito) { DiasDireito = Configuracao.MaximoDiasDireito; }

Se (DiasDireito <= 0.00) { HoleriteVerba = null; InterromperCalculo(); }

4. Determinação do Valor do Desconto conforme Modalidade de Custeio

Definir ValorCalculado = 0.00; Definir ValorUnitarioReferencia = 0.00;

Escolha (Configuracao.ModalidadeCusteio) { Caso “MensalProporcional”: // Atende Brabus/Emova e Employer Seara Definir VlrMensalBase = Configuracao.ValorMensalCusteio; ValorCalculado = (VlrMensalBase / 30.00) * DiasDireito; ValorUnitarioReferencia = VlrMensalBase / 30.00;

Se (ValorCalculado > VlrMensalBase) { ValorCalculado = VlrMensalBase; } FimCaso;

Caso “DiariaFixa”: // Atende Corteva, Employer Fertipar, Employer Staff, Jmalucelli Definir PrecoDiario = ObterValorHistoricoCusteioDiario(Empregador.CNPJEmpregador, Solicitacao.DataReferencia); Se (PrecoDiario == 0.00) { PrecoDiario = Configuracao.ValorDiarioCusteioPadrao; } ValorCalculado = DiasDireito * PrecoDiario; ValorUnitarioReferencia = PrecoDiario; FimCaso;

Caso “PercentualConvenio”: // Atende Crasa (Alíquota sobre piso do sindicato) Definir BaseCalculoSindicato = ObterValorPisoSindicato(Sindicato.CNPJ, Solicitacao.DataReferencia); Definir AliquotaPercentual = Configuracao.PercentualAliquotaSindicato; ValorCalculado = (BaseCalculoSindicato * AliquotaPercentual) / 100.00; ValorUnitarioReferencia = BaseCalculoSindicato; FimCaso;

Caso “FaixaSalarial”: // Atende Monsanto (Base salarial regressiva/progressiva) Definir FaixaCusteio = ObterCusteioPorFaixaSalarial(VG_VlrSalNom); ValorCalculado = DiasDireito * FaixaCusteio; ValorUnitarioReferencia = FaixaCusteio; FimCaso;

Caso “CategoriaFretadoTiautomotive”: // Atende Tiautomotive (Categoria da verba 859 + Custo Fretado) Definir CategoriaRefeicao = RecuperarValorTotalVerba(“859”); Definir ValorCategoria = ObterCustoTiautomotivePorCNPJeCategoria(Empregador.CNPJEmpregador, CategoriaRefeicao, Solicitacao.DataReferencia);

// Desconto de Horas da verba 640 convertidas em dias Definir HorasFretado = RecuperarSomaHorasVerbaComComplemento(“640”, “144”); Definir DiasFretado = HorasFretado / (VG_HsMes / 30.00);

DiasDireito = DiasDireito - DiasFretado; Se (DiasDireito <= 0.00) { HoleriteVerba = null; InterromperCalculo(); }

ValorCalculado = DiasDireito * ValorCategoria; ValorUnitarioReferencia = ValorCategoria; FimCaso; }

5. Ajuste Especial: Fator Domingo (Atende Crasa Cocalinho MT)

Se (Configuracao.AplicarFatorDomingo == Verdadeiro) { Definir TrabalhaDomingo = SysFunc_RetornaBeneficioDiasTrabalho(Empregado.CPF, “DOMINGO”); Se (TrabalhaDomingo == Verdadeiro) { ValorCalculado = ValorCalculado * 2.00; } }

6. Aplicação de Limite / Teto Geral de Desconto (Atende DHL - Limite R$ 55,00)

Se (Configuracao.AplicarTetoGeralDesconto == Verdadeiro E ValorCalculado > Configuracao.ValorTetoMaximoDesconto) { ValorCalculado = Configuracao.ValorTetoMaximoDesconto; }

Definir ValorFinalDesconto = Negativo(Func_ArredondamentoPadrao(ValorCalculado));

7. Geração de Rubrica Adicional Automatizada para Ausência de Lançamentos (Atende Corteva)

Se (ExisteLancamento == Falso E Configuracao.GerarAutomaticoAusenciaLancamento == Verdadeiro) { HoleriteVerba.Quantidade = 1.00; HoleriteVerba.ValorReferencia = 1.00; HoleriteVerba.ValorTotal = -1.00; } Senao { HoleriteVerba.Quantidade = DiasDireito; HoleriteVerba.ValorReferencia = ValorUnitarioReferencia; HoleriteVerba.ValorTotal = ValorFinalDesconto; }

8. Auditoria e Rastreabilidade (Memória de Cálculo Centralizada)

Argumento(DiasBaseCalendario.ToString(“F2”)); Argumento(DiasFaltaAbsoluta.ToString(“F2”)); Argumento(DiasDireito.ToString(“F2”)); Argumento(ValorUnitarioReferencia.ToString(“F2”)); Argumento(ValorFinalDesconto.ToString(“F2”));

EscreverMemoria(“[DESC_REFEICAO_DYNAMIC]”, “Dias Base: {0} | Abatimentos: {1} | Dias Efetivos: {2} | Custo Unitário: R$ {3} | Total Desconto: R$ {4}”);

AdicionarAoHolerite(HoleriteVerba);


Parametrizações Propostas para Reestruturação

1. REGRAS DE ENTRADA, EXCLUSÕES E ELEGIBILIDADE

[X] Bloquear cálculo em processos de Provisões [X] Bloquear cálculo em processos de Rescisão Complementar [X] Exigir existência de proventos na Folha de Pagamento para descontar [X] Ativar exclusão por Categoria/Vínculo Contratual: └─ Selecione as Categorias Isentas: [ Aprendiz, Estagiário ] [X] Restringir por Lotação / Centro de Resultado (Tag de Cadastro): ├─ Nome da Tag de Filtro: [ DES_CENTRO_RESULTADO ] └─ Exigir últimos 7 dígitos iguais a: [ 1145006 ]

2. APURAÇÃO DOS DIAS DE DIREITO E ABSENTEÍSMO

Selecione o Calendário de Dias de Direito Base: ( ) Dias Trabalhados de Benefício (VG_DiasTrabalhadosBeneficio) ( ) Saldo de Dias de Segunda a Sexta (VG_GradeMesAtual.SaldoDiasSegSex) ( ) Saldo de Dias Úteis Completo (Seg-Sex + Sábados) (X) Quantidade de Dias Fixa Mensal: [ 25.00 ] dias (Caso DHL / 1.955.1)

[X] Abater dias de absenteísmo automaticamente da base de cálculo: ├─ Rubricas de Faltas/Atrasos consideradas: [ 6, 466 ] └─ [X] Incluir Afastamentos / Licenças: [ 270, 640, 10035 ] [X] Limitar o saldo máximo de dias de direito permitidos para desconto: └─ Quantidade Máxima de Dias: [ 15.00 ] dias (Atende Monsanto)

3. DIRETRIZES DE CUSTEIO E TARIFAÇÃO SINDICAL / FILIAL

Selecione a Modalidade de Custeio da Verba: ( ) Modo LancamentoManualDirect (Apenas processa o que for lançado em lote) ( ) Mensal Proporcional: Valor Fixo Mensal: R$ [ 65.94 ] (Proporcionaliza /30) (X) Diária Fixa (Busca da Tabela de Custeio Histórico por Estabelecimento): └─ Valor Padrão de Fallback (Caso não localize): R$ [ 3.98 ] ( ) Percentual sobre Piso do Sindicato: ├─ Alíquota do Desconto: [ 3.00 ] % └─ Código do Piso no Cadastro do Sindicato: [ SINDICATO_PISO_GERAL ] ( ) Faixas de Custeio Regressivas/Progressivas (Tabela de Faixas sobre Salário): ├─ Faixa 1: Salário até R$ [ 1500.00 ] ──> Valor do Desconto Diário: R$ [ 1.00 ] ├─ Faixa 2: Salário até R$ [ 3000.00 ] ──> Valor do Desconto Diário: R$ [ 3.00 ] └─ Faixa 3: Salário Acima de R$ [ 3000.00 ] ──> Valor do Desconto Diário: R$ [ 5.00 ]

[X] Ativar Fator de Dobro para Trabalhadores de Domingo (Fator Domingo - Crasa) [X] Ativar Abatimento de Horas Fretado Integrado (Rubrica 640 - C. Tiautomotive)

4. LIMITADORES DE CONTROLE E PROTEÇÃO

[X] Aplicar Teto Geral Máximo de Desconto por Folha: └─ Valor Limite Máximo por Holerite: R$ [ 55.00 ] [X] Gerar lançamento automático de subsistência (R$ -1.00) caso não haja lançamento [X] Customizar Descrição da Rubrica no Holerite incluindo Valor Unitário: └─ Exemplo de Saída: “Desc. Refeição (R$ [ValorUnitario] cada)”

5. ENCARGOS ESOCIAL E CONFIGURAÇÃO TRIBUTÁRIA

Código da Rubrica Destino: [ 19 ] Natureza eSocial: [ 9243 - Cesta básica ou PAT ] Incidência INSS: [ ISE - Isento ] DSR: [ Não ] Incidência FGTS: [ ISE - Isento ] Médias: [ Não ] Incidência IRRF: [ ISE - Isento ] Impacto Financeiro: [ Não ]

Clientes com mesma regra

  • Dex / Froneri / Syngenta: Passam a ser atendidos de forma homogênea selecionando a modalidade LancamentoManualDirect no motor unificado. Os scripts que continham apenas lógicas simples de multiplicação e strings dinâmicas na descrição foram eliminados, e a formatação customizada da descrição (Descrição (R$X,XX cada)) foi incorporada diretamente no pipeline de saída do motor global.
  • Brabus (Emova) / Employer (Seara): Compartilham a mesma regra unificada de custeio MensalProporcional. A proporcionalização pela divisão por 30 aplicada sobre os dias de direito limpos de faltas e a trava de segurança para o desconto não furar o valor do teto mensal estabelecido (R$ 65,94 para Brabus e R$ 42,90 para Seara) são resolvidas pela mesma árvore de equações do motor.
  • Corteva / Employer (Fertipar, DHL, Staff): Foram consolidadas sob a modalidade de DiariaFixa. O motor unificado substitui as buscas por strings de contratos filhos (1.1400.3, 1.1080.1, etc.) e as tabelas de preços em hardcode por consultas indexadas ao banco através do identificador TAB_CUSTEIO_DIARIO_PAT, localizando o preço unitário correto de acordo com a filial logada e a data de fechamento da folha.
  • Crasa / Monsanto: Foram unificadas sob a regra de PercentualFaixaSindicato. Ambas calculam o desconto aplicando uma alíquota progressiva sobre a faixa salarial do trabalhador e deduzem o absenteísmo apurado do grupo de faltas (6 e 466). O diferencial da Crasa (multiplicação da base para quem trabalha aos domingos) e o diferencial da Monsanto (limitar os dias de direito a 15) foram transformados em flags de acionamento cadastral ativadas exclusivamente para suas respectivas empresas.
  • Acal: Sua necessidade de listagem histórica e encadeamento foi sanada através da arquitetura de múltiplos sub-IDs de verba. Ao rodar o fechamento, o sistema itera sobre a ListaBeneficioFornecido, alimenta o motor unificado com os parâmetros de cada benefício e realiza a inserção limpa das instâncias na folha sem risco de sobreposição ou duplicação de códigos de rubricas.

Status Documental

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

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