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:
- A verba não é calculada se o
TipoProcessoforProvisoes(5). - A verba possui uma customização hardcoded para o cliente “Brabus” com CNPJ de empregador iniciando em “558226900” (identificado como Emova).
- Para Brabus/Emova:
- Verifica se existe um lançamento (
Lancamento) válido, se aQuantidadedo lançamento é1e se oTipoFolhaéRegular(1) ouRescisao(não especificado no contexto, mas geralmente um tipo de processo). - Se essas condições forem atendidas, define um
VlrMesde65.94. - A
Quantidadeda verba é definida como osVG_DiasTrab(dias trabalhados). - O
ValorTotalé calculado como o valor mensal (VlrMes) dividido por30, multiplicado pelosVG_DiasTrab, arredondado (Func_ArredondamentoPadrao) e tornado negativo (Negativo), pois é um desconto. - Se o valor calculado (em módulo,
Positivo) exceder oVlrMes(65.94), oValorTotalé limitado aoVlrMes(negativo). - Se as condições internas para Brabus/Emova não forem atendidas, a verba não é calculada (
return null).
- Verifica se existe um lançamento (
- 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.
- A verba não é calculada se o
- Fórmula matemática: Para Brabus/Emova, o cálculo base é
Valor = Negativo(ArredondamentoPadrao(65.94 ÷ 30 × VG_DiasTrab)), limitado aNegativo(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) ouRescisão, desde que exista um lançamento específico comQuantidadeigual a1. - Não é calculada para processos de
Provisão(5). - Não é calculada por esta fórmula para clientes que não sejam Brabus/Emova.
- É calculada automaticamente para o cliente Brabus/Emova em processos de
🧩 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çãoExecutarFormulaBeneficio, que pode incluir um cálculo prévio viaCalcularBeneficiose não for um benefício novo. -
Condições de Retorno Nulo Iniciais: Não possui a validação inicial para
EnumTipoProcessoBO.Provisoespresente 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_DiasTrabou 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_ArredondamentoPadraono 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 objetoBeneficio. -
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.CNPJEmpregadorcorresponder a uma das 15 filiais predefinidas da Corteva, verificada pela variávelTem19. - 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 comQuantidade = 1,ValorReferencia = 1eValorTotal = -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) comQuantidade >= 1M, o valor diário (VlrDia) é determinado por uma tabela interna que mapeia cada CNPJ da Corteva a um valor específico. OValorTotalé então calculado comoNegativo(Func_ArredondamentoPadrao(HoleriteVerba.Quantidade * HoleriteVerba.ValorReferencia)). - Geração de Memória de Cálculo: A regra para corteva inclui a geração de uma
MemoriaCalculodetalhada, 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
nullpara 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
nullse oSolicitacao.TipoProcessoforEnumTipoProcessoBO.Provisoes. A regra de CRASA não possui essa verificação inicial. -
Condições de Retorno Nulo Iniciais:
- A regra geral retorna
nullse não houver lançamento manual (Func_ValidarExistenciaLancamentofor falso) ou se aLancamento.Quantidadenão for1Mpara o cliente “brabus”. - A regra de CRASA possui condições de retorno
nullmais complexas, baseadas noEmpregado.TipoVinculo(Aprendiz ou Estagiário para CNPJs específicos), na existência de lançamento manual comLancamento.ValorTotal == 0M, ou para umEmpregado.CPFespecífico (83683364815).
- A regra geral retorna
-
Lógica de Cálculo Base:
- A regra geral utiliza um valor fixo mensal de
65.94M(VlrMes), prorrateado pelosVG_DiasTrabe limitado a esse valor mensal. - A regra de CRASA calcula o desconto com base em
BaseCalculoePercentualque variam conforme oEmpregador.CNPJEmpregador.21063590000171:BaseCalculo = 15.40M,Percentual = 3.00M.30975347000110:BaseCalculo = 16.50M,Percentual = 3.00M.21339831000405:BaseCalculo = 30.00M,Percentual = 1.00M.
- A regra geral utiliza um valor fixo mensal de
-
Cálculo de Faltas: A regra de CRASA incorpora
DiasFaltano cálculo, que é derivado da soma de quantidades de lançamentos das verbas6(Faltas) e466(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
nullse(VG_DiasTrabalhadosBeneficio - DiasFalta)for menor ou igual a0M. 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 empregadoTrabalhaDomingousando a funçãoSysFunc_RetornaBeneficioDiasTrabalho. SeTrabalhaDomingofor verdadeiro, osDiasConsideradossão ajustados (VG_DiasTrabalhadosBeneficio + VG_Saldo_Hs_Feriado_SegSex) e oHoleriteVerba.ValorTotalfinal é 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 comoSysFunc_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
MemoriaCalculodetalhada 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) e466(Atrasos) para calcular osDiasFalta. 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 emnull. - 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.94Me prorrateio porVG_DiasTrab). - Base de Cálculo: O valor total é calculado diretamente pela multiplicação de
Lancamento.QuantidadepeloLancamento.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
MemoriaCalculodetalhando 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.Provisoespresente 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 > 0MeLancamento.ValorTotal < 0M), formatando aDescricaoFinale calculando oValorTotaldiretamente do lançamento. -
Cálculo Condicional por Provento: Se não houver lançamento manual e
VG_TemAlgumProventofor verdadeiro, a verba é calculada com base em condições específicas deEmpregador.CNPJEmpregadoreCod_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 aQuantidadea partir daRecuperarValorTotalVerba("20"), aplica umPercentualde1.2Me oValorTotalé o resultado daQuantidademultiplicada peloPercentuale dividida por100M, arredondado e negativo. -
Cálculo para CNPJ “5445752000180” (ETT):
- Para contrato filho “1.1400.3” (Fertipar): Calcula
DiasDescRefeicaosomandoSaldoDiasSegSexeSaldoDiasSab, deduzDiasFaltaMes(calculado a partir das verbas “6” e “466”). OValorReferenciapor dia varia conforme aDataReferencia:3.98M(a partir de 01/10/2024) ou3.73M(até 01/09/2024). OValorTotalé o produto daQuantidadepeloValorReferencia, arredondado e negativo. - Para contrato filho “1.550.2” (Seara - Dourado): (a partir de 01/11/2023) Calcula
DiasDescontoa partir deVG_DiasTrabdeduzindoDiasFaltaMes. DefineVlrRefeicaoMescomo42.90M. OValorTotalé oVlrRefeicaoMesdividido por30Me multiplicado pelaQuantidade, arredondado e negativo. - Para contrato filho “1.11.25” (DHL - Esteio): (a partir de 01/02/2022)
HoleriteVerba.QuantidadeéRecuperarValorTotalVerba("20"). Aplica umPercentualde1.00M. OValorTotalé o produto daQuantidadepeloPercentualdividido por100M, 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.Quantidadecomo25.00M. OValorTotalé25.00Mdividido por30Me multiplicado porVG_DiasTrab, arredondado e negativo. - Para contrato filho “1.1080.1”: Calcula
DiasDescRefeicaoa partir deVG_GradeMesAtual.SaldoDiasSegSex. RetornanullseDiasDescRefeicaofor menor ou igual a0M. OValorReferenciapor dia varia conforme aDataReferencia:1.41M(a partir de 01/11/2025) ou1.33M(a partir de 01/03/2025). OValorTotalé o produto daQuantidadepeloValorReferencia, arredondado e negativo.
- Para contrato filho “1.1400.3” (Fertipar): Calcula
-
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
MemoriaCalculodetalhados para cada cenário de cálculo, o que não existe na regra geral. -
Dependências de Cálculo: A regra do cliente
employerpossui uma gama muito mais ampla de dependências, incluindoLancamento,VG_TemAlgumProvento,Empregador.CNPJEmpregador,SysFunc_TagPossuiConteudo,RecuperarValorTotalVerba("20"),VG_GradeMesAtual,SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual("6"),SysFunc_RecuperarSomaQuantidadeLancamentosMesAtual("466"),VG_HsMeseSysFunc_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), aQuantidadelançada for maior que zero (> 0M) e oValorTotallanç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) peloLancamento.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
MemoriaCalculodetalhando 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) ou31858881000100(MLC Infra Construção S/A), e somente se o sindicato for79776878000173(Sintrapav). - Validação de Centro de Resultado: Para o empregador
31858881000100, exige que a tagDES_CENTRO_RESULTADOdo empregado exista e que seus últimos 7 caracteres sejam1145006. 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 campoValorPisoGeralda tabelaSindicato.ListaSindicatoPisoGeralpara o sindicato79776878000173e 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ódigo6(convertidos para dias) e466. - 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
Valorbase19multiplicado 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
TipoFolhaforRescisaoComplementar. -
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_Refbaseado emVG_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 noSaldoDiasSegSexdo mês atual (VG_GradeMesAtual.SaldoDiasSegSex), subtraindo os dias de falta (verba 6), e limitada a 15 dias. A regra geral utilizaVG_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.Provisoespresente na regra geral. - Regra Específica por Cliente/CNPJ: Não contém a lógica condicional exclusiva para o cliente “brabus” e CNPJ
558226900presente na regra geral. - Lógica de Cálculo: O cálculo é baseado na multiplicação da
Lancamento.QuantidadepeloLancamento.ValorTotal, aplicandoFunc_ArredondamentoPadrao. A regra geral para “brabus” utiliza um valor fixo mensal (VlrMes) eVG_DiasTrab. - Validação de Quantidade: A verba é calculada se
Lancamento.Quantidade > 0M. A regra geral para “brabus” exigeLancamento.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.Provisoesou 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 verba859) 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_Fretadocom base na variávelVG_BaseParaRefeicaoFretadoe deduz horas da verba640(com complemento144), convertendo-as em dias. A regra geral utilizaVG_DiasTrab. -
Valores de Refeição Variáveis por Data e Categoria: Os valores de
VlrRefeicaoCategoriasão definidos por faixas deDataReferenciae pelaCategoriaRefeicaopara cada CNPJ específico. A regra geral usa um valor fixo de65.94M. -
Cálculo Específico para Gravataí: Para o CNPJ
55981351001941(Gravataí) e a partir de01/08/2018, a verba calculaQtdHsFaltassomando 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 diferentesVlrRefeicaoCategoriapor período. -
Geração de Memória de Cálculo: A verba gera uma
MemoriaCalculodetalhada (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,QtdHsFaltase funções comoSysFunc_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
Quantidadelançada na verba859(CategoriaRefeicao). - Dependência de Verba 640: A quantidade de
Hs640(verba640com complemento144) é 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.
- Dependência de Verba 859: O cálculo depende diretamente da
-
Variáveis de Sistema: Utiliza
VG_BaseParaRefeicaoFretado,VG_HsMeseVG_TemAlgumProventocomo 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
LancamentoManualDirectno 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 identificadorTAB_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 (6e466). 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