Wiki / SuperCalculo ~7 min

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

    1. 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.
    2. 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.
    3. 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 CalcularBeneficio e adicionado ao dicionário.
      • Se múltiplos benefícios forem encontrados, seus valores são agregados pela função SysFunc_FornecimentoMultiplosBeneficios e adicionados ao dicionário.
    4. 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ção ExecutarFormulaBeneficio, utilizando os dados do benefício e o dicionário de valores.
    5. Arredondamento e Sinal: O valor final é arredondado pela função Func_ArredondamentoPadrao e tornado negativo pela função Negativo, pois se trata de um desconto.
    6. Memória de Cálculo: Detalhes do cálculo (valor unitário, dias fornecidos, percentual) são registrados na memória de cálculo.
    7. 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.CNPJEmpregador
    • Solicitacao.TipoFolha
    • Empregado.Historico.ListaBeneficioFornecido
    • HoleriteVerba.Verba.Codigo
    • Solicitacao.DataReferencia
    • VG_VlrSalNom
    • VG_HsMes
    • VG_HsTrab
    • Beneficio.ValorDesconto
    • Beneficio.ValorUnitario
    • Beneficio.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() == 1 ou beneficio.Count() > 1).
    • Verificação se o benefício não é novo (beneficio.FirstOrDefault<BeneficioFornecidoBO>().BeneficioNovo == false).

🧩 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 (Regular ou Rescisao) 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 grupo Regra 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

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