746 - Desc. Vale-Refeição
Metadados
- Código: 746
- Tipo: Desconto
- INSS: ISE
- FGTS: ISE
- IRRF: ISE
- Natureza eSocial: 9220 - Alimentação - desconto
- DSR: Não
- Médias: Não
- Impacto Financeiro: Não
- Impacto Contábil: Sim
- Sequência: 181
🧮 Regra Geral
-
- Busca de Benefícios: Caso contrário, o sistema busca na lista de benefícios fornecidos do empregado por registros da verba 746 que correspondam ao mês e ano de referência da solicitação.
- Cálculo de Salário Proporcional: Um valor de salário proporcional é calculado usando a fórmula
(VG_VlrSalNom / VG_HsMes) * VG_HsTrab. Este valor é armazenado em um dicionário para uso posterior. - Tratamento de Benefícios Encontrados:
- Se um único benefício for encontrado e ele não for um “Benefício Novo”, o valor base do benefício é calculado usando a função
CalcularBeneficioe adicionado ao dicionário. - Se múltiplos benefícios forem encontrados, seus valores são agregados pela função
SysFunc_FornecimentoMultiplosBeneficiose adicionados ao dicionário.
- Se um único benefício for encontrado e ele não for um “Benefício Novo”, o valor base do benefício é calculado usando a função
- Cálculo Final do Desconto: Se houver qualquer benefício encontrado, uma nova verba de holerite é criada. O percentual de desconto é obtido do benefício (
Beneficio.ValorDesconto). O valor total do desconto é então calculado pela funçãoExecutarFormulaBeneficio, utilizando os dados do benefício e o dicionário de valores. - Arredondamento e Sinal: O valor final é arredondado pela função
Func_ArredondamentoPadraoe tornado negativo pela funçãoNegativo, pois se trata de um desconto. - Memória de Cálculo: Detalhes do cálculo (valor unitário, dias fornecidos, percentual) são registrados na memória de cálculo.
- Adição ao Holerite: A verba de desconto calculada é adicionada à lista de verbas do holerite.
-
Fórmula matemática:
valorS = (VG_VlrSalNom / VG_HsMes) * VG_HsTrab- O valor final do desconto é determinado por
ExecutarFormulaBeneficio(Beneficio, DicionarioM).
-
Variáveis Utilizadas:
Empregador.CNPJEmpregadorSolicitacao.TipoFolhaEmpregado.Historico.ListaBeneficioFornecidoHoleriteVerba.Verba.CodigoSolicitacao.DataReferenciaVG_VlrSalNomVG_HsMesVG_HsTrabBeneficio.ValorDescontoBeneficio.ValorUnitarioBeneficio.QuantidadeDiasFornecidos.
-
Condições Especiais:
- Verificação do CNPJ do empregador (
Empregador.CNPJEmpregador == "5445752000180"), tag de contrato (SysFunc_TagPossuiConteudo("Cod_Contrato_Filho", new List<string>() { "1.1405.2"} )) e tipo de folha (Solicitacao.TipoFolha == EnumTipoFolhaBO.Regular || Solicitacao.TipoFolha == EnumTipoFolhaBO.Rescisao) para aplicação de desconto fixo. - Condições baseadas na quantidade de registros de benefício (
beneficio.Count() == 1oubeneficio.Count() > 1). - Verificação se o benefício não é novo (
beneficio.FirstOrDefault<BeneficioFornecidoBO>().BeneficioNovo == false).
- Verificação do CNPJ do empregador (
🧩 Funções
SysFunc_TagPossuiConteudo: Verifica a existência e conteúdo de uma tag específica.SysFunc_MesmoMesAno: Compara se duas datas pertencem ao mesmo mês e ano.CalcularBeneficio: Função externa para calcular o valor base de um benefício.SysFunc_FornecimentoMultiplosBeneficios: Função de sistema para consolidar valores de múltiplos benefícios.CriarVerbaHoleriteVerbaBO: Cria um novo objeto de verba de holerite.ExecutarFormulaBeneficio: Executa a fórmula de cálculo específica associada a um benefício.Negativo: Converte um valor para seu equivalente negativo.Func_ArredondamentoPadrao: Arredonda um valor numérico para o padrão definido.Argumento,EscreverMemoria: Utilizadas para construir a memória de cálculo da verba.
🎯 Particularidades por Cliente/Setor
👤 Employer
- A verba verifica se o empregador possui o CNPJ “5445752000180” (identificado como ETT). Se sim, e se a tag “Cod_Contrato_Filho” contém “1.1405.2” e o tipo de folha é Regular ou Rescisão, o valor do desconto é fixado em R$20,00. O cálculo é encerrado neste ponto.
💡 Proposta de Novo Cálculo
Fórmula proposta (padronizada):
ValorTotal = Se( RegraExcecaoFixa == Verdadeiro, ValorDescontoFixo, Se( ExisteLancamentoManual == Verdadeiro E ValorLancamento > 0, Func_ArredondamentoPadrao( Min( ValorLancamento, TetoMaximoConfigurado ) ), ExecutarFormulaBeneficio( Beneficio, DicionarioValores ) ) ) * -1.00
1. Filtros de Elegibilidade e Isenções (Piso Seguro)
Se (Configuracao.RubricaInativa == Verdadeiro) { HoleriteVerba = null; InterromperCalculo(); }
Trava de Tipo de Folha Elegível Se (Configuracao.ValidarTipoFolha == Verdadeiro E Solicitacao.TipoFolha != EnumTipoFolhaBO.Regular E Solicitacao.TipoFolha != EnumTipoFolhaBO.Rescisao) { HoleriteVerba = null; InterromperCalculo(); }
2. Apuração de Exceções de Desconto Fixo por Contrato/Estabelecimento
Eliminando a checagem hardcoded de CNPJ “5445752000180” e Tag “1.1405.2” (Employer) Definir PossuiRegraExcecaoFixa = Falso; Definir ValorDescontoFixo = 0.00;
Se (Configuracao.HabilitarDescontoFixoPorContrato == Verdadeiro) { Se (Func_ValidarContratoOuEstabelecimentoElegivel(Empregador.CNPJEmpregador, Empregado.CodContratoFilho)) { PossuiRegraExcecaoFixa = Verdadeiro; ValorDescontoFixo = Configuracao.ValorDescontoFixoExcecao; // Ex: R$ 20,00 } }
Definir ValorDescontoApurado = 0.00; Definir BaseCalculoBeneficio = 0.00; Definir PercentualAplicado = 0.00; Definir OrigemCalculo = “Nenhuma”;
Se (PossuiRegraExcecaoFixa == Verdadeiro) { Aplicador de Exceção Parametrizada ValorDescontoApurado = ValorDescontoFixo; BaseCalculoBeneficio = ValorDescontoFixo; OrigemCalculo = “ExcecaoDescontoFixoContrato”; } Senao {
3. Determinação da Base e Cálculo do Benefício Fornecido (Regra Geral)
Definir ExisteLancamentoManual = Func_ValidarExistenciaLancamento(Lancamento);
Se (ExisteLancamentoManual == Verdadeiro E Lancamento.ValorTotal > 0.00) { Priority Fallback 1: Lançamento manual direto informado em valor ValorDescontoApurado = Lancamento.ValorTotal; BaseCalculoBeneficio = Lancamento.ValorReferencia > 0.00 ? Lancamento.ValorReferencia : Empregado.SalarioNominal; OrigemCalculo = “ValorInformadoManual”; } Senao { Priority Fallback 2: Processamento via Módulo de Benefícios Definir ListaBeneficiosElegiveis = Empregado.Historico.ListaBeneficioFornecido .Onde(b => b.CodVerba == Configuracao.CodigoRubrica E Func_MesmoMesAno(b.DataReferencia, Solicitacao.DataReferencia));
Se (ListaBeneficiosElegiveis.PossuiItens() == Verdadeiro) { Apuração do Salário Proporcional para o Dicionário de Cálculo Definir SalarioProporcional = (Empregado.SalarioNominal / Empregado.HorasMes) * Empregado.HorasTrabalhadas; Definir DicionarioM = Func_CriarDicionarioValores(); DicionarioM.Adicionar(“valorS”, SalarioProporcional);
Se (ListaBeneficiosElegiveis.Contar() == 1 E ListaBeneficiosElegiveis.Primeiro().BeneficioNovo == Falso) { Definir BeneficioUnico = ListaBeneficiosElegiveis.Primeiro(); BaseCalculoBeneficio = Func_CalcularBeneficio(BeneficioUnico); DicionarioM.Adicionar(“BaseBeneficio”, BaseCalculoBeneficio); PercentualAplicado = BeneficioUnico.ValorDesconto; ValorDescontoApurado = Func_ExecutarFormulaBeneficio(BeneficioUnico, DicionarioM); } Senao { BaseCalculoBeneficio = SysFunc_FornecimentoMultiplosBeneficios(ListaBeneficiosElegiveis); DicionarioM.Adicionar(“BaseBeneficio”, BaseCalculoBeneficio); PercentualAplicado = ListaBeneficiosElegiveis.Primeiro().ValorDesconto; ValorDescontoApurado = Func_ExecutarFormulaBeneficio(ListaBeneficiosElegiveis.Primeiro(), DicionarioM); } OrigemCalculo = “ModuloBeneficiosFornecidos”; } } }
Se (ValorDescontoApurado <= 0.00) { HoleriteVerba = null; InterromperCalculo(); }
4. Aplicação de Limites, Tetos e Formatação de Rótulo
Definir ValorFinalRubrica = Func_ArredondamentoPadrao(ValorDescontoApurado);
Se (Configuracao.AplicarTetoMaximoDesconto == Verdadeiro E Configuracao.ValorTetoMaximo > 0.00) { Se (ValorFinalRubrica > Configuracao.ValorTetoMaximo) { ValorFinalRubrica = Configuracao.ValorTetoMaximo; } }
Formatação Final do Rótulo no Holerite Se (Func_TextoNaoVazio(Configuracao.TextoDescricaoPersonalizada)) { HoleriteVerba.DescricaoFinal = Configuracao.TextoDescricaoPersonalizada; } Senao Se (PercentualAplicado > 0.00) { HoleriteVerba.DescricaoFinal = “Desc. Vale-Refeição (” + PercentualAplicado.ToString(“N2”) + ”%)”; }
5. Gravação de Rubrica e Memória de Cálculo
HoleriteVerba.Quantidade = 1.00; HoleriteVerba.Percentual = PercentualAplicado; HoleriteVerba.ValorReferencia = Func_ArredondamentoPadrao(BaseCalculoBeneficio); HoleriteVerba.ValorTotal = Func_ArredondamentoPadrao(ValorFinalRubrica * -1.00);
Argumento(BaseCalculoBeneficio.ToString(“F2”)); Argumento(PercentualAplicado.ToString(“N2”)); Argumento(ValorFinalRubrica.ToString(“F2”)); Argumento(OrigemCalculo);
EscreverMemoria(“[DESC_VALE_REFEICAO]”, “Base Benefício: R$ {0} | % Aplicado: {1}% | Desconto Final: R$ {2} | Origem: {3}”);
AdicionarAoHolerite(HoleriteVerba);
Parametrizações Propostas para Reestruturação
1. STATUS DA RUBRICA E DIRETRIZES DE ENTRADA
[ ] Inativar Rubrica (Desativa o cálculo globalmente no sistema) [X] Validar tipos de folha permitidos para cálculo (Padrão: Regular e Rescisão) [X] Permitir Lançamento Manual (Prevalece sobre o módulo de benefícios) [X] Processar integração automática com Módulo de Benefícios Fornecidos
2. REGRA DE EXCEÇÃO E DESCONTO FIXO POR CONTRATO / ESTABELECIMENTO
[X] Habilitar regra de Desconto Fixo por Contrato/Estabelecimento ├─ Lista de CNPJs do Empregador Elegíveis: [ 5445752000180 ] ├─ Lista de Códigos de Contrato Filho Elegíveis: [ 1.1405.2 ] └─ Valor Fixo do Desconto: R$ [ 20.00 ]
3. DIRETRIZES DE CÁLCULO DE BENEFÍCIOS E PROPORCIONALIDADE
Fórmula de Salário Proporcional: [ (Salário Nominal / Horas Mês) * Horas Trabalhadas ] [X] Permitir consolidação de múltiplos benefícios fornecidos no mês [X] Respeitar percentual de desconto configurado no cadastro do benefício (Beneficio.ValorDesconto)
4. CUSTOMIZAÇÃO DE EXIBIÇÃO, LIMITES E IMPACTOS OPERACIONAIS
[ ] Permitir sobregravação de Descrição no Holerite via Configuração └─ Descrição Personalizada: [ Desc. Vale-Refeição ] [X] Exibir percentual aplicado na descrição final do holerite [X] Aplicar Teto Máximo de Desconto por Colaborador └─ Valor Limite Máximo: R$ [ 0.00 ] [ ] Ativar Impacto Financeiro (Ajuste para Liquidação/Pagamento Líquido do Holerite) [X] Ativar Impacto Contábil (Lançamento de Débito/Crédito)
5. ENCARGOS ESOCIAL E CONFIGURAÇÃO TRIBUTÁRIA
Código da Rubrica Destino: [ 746 ] Natureza eSocial: [ 9220 - Alimentação - desconto ] 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
- Employer: A tratativa legada possuía uma verificação hardcoded direcionada ao CNPJ do empregador (
5445752000180), ao contrato filho (1.1405.2) e ao tipo de folha (RegularouRescisao) para aplicar um valor fixo de R$ 20,00 e abortar o restante da regra. No Dynamic Engine, essa regra específica foi abstraída no grupoRegra de Exceção e Desconto Fixo por Contrato / Estabelecimento. Ao cadastrar o CNPJ, o contrato e o valor de R$ 20,00 na interface administrativa, a operação para a Employer permanece 100% preservada de forma declarativa e sem desvios em código. - Regra Geral / Demais Clientes: Processavam a verba via busca do histórico de benefícios fornecidos do empregado, apurando o salário proporcional, consolidando múltiplos registros (se existente) e aplicando a fórmula de cálculo associada ao benefício. O fluxo unificado absorve integralmente esse processamento através do Priority Fallback 2 e da execução dinâmica do Módulo de Benefícios.
Status Documental
- Status: Documentada
- Origem: export do Notion + catálogo da wiki
- Fonte rastreável:
30dc75ea2e8381e6943bf5653dab2ee5