Wiki / SuperCalculo ~9 min

754 - Desc. Benefício [BN]

⚙️ Metadados

  • Código: 754
  • Tipo: Desconto
  • INSS: ISE
  • FGTS: ISE
  • IRRF: ISE
  • Natureza eSocial: 9299 - Outros descontos
  • DSR: Não
  • Médias: Não
  • Impacto Financeiro: Não
  • Impacto Contábil: Sim
  • Sequência: 7550

🧮 Regra Geral

  • Lógica de Cálculo: A verba 754 calcula o desconto de benefícios fornecidos ao empregado.

    • Identifica benefícios fornecidos (ListaBeneficioFornecido) associados à verba 754, que sejam novos (BeneficioNovo) e do mês de referência. - Calcula Sal_Custo_Empresa, Remuneracao_BaseInss e SalarioNominalEmpregado. - Agrupa os benefícios por tipo, frequência, base de cálculo de desconto e faixa de desconto. - Para cada benefício dentro do grupo:
      • Verifica afastamentos: Se houver afastamento com ação ManterPlanoSemDesconto (e não for seguro de vida especial com remuneração base INSS > 0), o desconto é zerado e o benefício é ignorado. Se a ação for FornecerSemDesconto (para VA/VR), calcula os dias afastados; se houver dias afastados, o desconto é zerado.
      • Verifica rescisão: Se houver rescisão no mês (VG_PossuiRescisaoMesAtual), calcula os diasTrabalhadosBeneficio considerando datas de admissão, rescisão, vigência do benefício, feriados e dias de trabalho da escala. A lógica de contagem varia conforme TipoDescontoNaoUtilizado (Não Desconta, Desconta Dias Trabalhados, Desconta Dias do Mês) e EnumFrequenciaBeneficio. Calcula quantidadeNaoUtilizado.
      • Determina a base de cálculo (valorSalario) do desconto (Salário Nominal, Salário Nominal Proporcional, Remuneração, Salário Dias Trabalhados ou Nenhuma).
      • Calcula o valor do desconto (valorDesconto) com base na FormaDesconto (Valor Fixo, Percentual do Salário, Percentual do Valor do Benefício ou Sem Desconto).
      • Calcula o teto do desconto (valorTeto) com base no TipoTetoDesconto (Valor Fornecido, Percentual do Valor do Benefício, Valor Fixo ou Percentual da Base de Cálculo).
      • Cria um objeto HoleriteVerbaBO para o benefício. Se houver rescisão e o benefício estiver configurado para não descontar na rescisão, o valorDesconto é zerado.
      • Adiciona a verba à lista temporária HoleriteVerbaAgrupadoTelma (se AgrupaBeneficios for verdadeiro) ou diretamente à Holerite.ListaHoleriteVerba.
      • Cria e adiciona um BeneficioVerbaBO à Holerite.ListaBeneficioVerba. - Após processar todos os benefícios de um grupo:
      • Aplica o teto ao valorDesconto: valorDesconto = valorDesconto > valorTeto ? valorTeto : valorDesconto;.
      • Rateia o valorDesconto final entre os benefícios do grupo, arredondando o valor.
      • Se AgrupaBeneficios for verdadeiro, consolida as verbas do grupo em uma única HoleriteVerbaBO e a adiciona à Holerite.ListaHoleriteVerba.
  • Fórmula matemática:

    • Sal_Custo_Empresa = Func_ArredondamentoPadrao(VG_HsTrab × (VG_VlrSalNom ÷ VG_HsMes))
    • Remuneracao_BaseInss = Func_ArredondamentoPadrao(VG_SCSalario + VG_SCProLabore)
    • valorDesconto = valorSalario × (vlrFaixaDesconto ÷ 100) (para PercentualSalario)
    • valorDesconto += (multiplicador × valorUnitario) × (vlrFaixaDesconto ÷ 100) (para PercentualValorBeneficio)
    • valorTeto += multiplicador × valorUnitario (para ValorFornecido)
    • valorTeto = (multiplicador × valorUnitario) × (Beneficio.ValorTeto.Value ÷ 100) (para PercValorBeneficio)
    • valorTeto = valorSalario × Beneficio.ValorTeto.Value ÷ 100 (para PercBaseCalculo)
    • b.ValorDesconto = Func_ArredondamentoPadrao(valorDesconto ÷ item.Count()) (rateio)
  • Variáveis Utilizadas:

    • Solicitacao.Cliente
    • Empregado.Historico.ListaBeneficioFornecido
    • HoleriteVerba.Verba.Codigo
    • Solicitacao.DataReferencia
    • VG_HsTrab
    • VG_VlrSalNom
    • VG_HsMes
    • VG_SCSalario
    • VG_SCProLabore
    • VG_UtilizaDiasTrabalhoEscalaBN
    • SalarioNominalEmpregado
    • Sal_Custo_Empresa
    • Remuneracao_BaseInss
    • Beneficio.QuantidadeFornecido
    • Beneficio.ValorUnitario
    • Beneficio.ListaAcaoTipoAfastamento
    • Empregado.Historico.ListaAfastamento
    • ExecucaoCalculo.ListaFeriado
    • VG_Desconta_Seguro_Vida_Especial
    • VG_PossuiRescisaoMesAtual
    • Empregado.DataAdmissao
    • Empregado.Rescisao.DataUltimoDiaTrabalhado
    • Empregado.Rescisao.DataRescisao
    • Beneficio.DataInicioVigencia
    • Beneficio.BeneficioManual
    • Beneficio.DataInicioBeneficioManual
    • Beneficio.DataFimBeneficioManual
    • VG_DiasTrabalhadosBeneficio
    • Beneficio.ValorTeto
    • Beneficio.DescontaRescisao
    • VG_PossuiRescisao
    • VG_DiasAfastAcum.
  • Condições Especiais:

    • Afastamentos: Condições para zerar o desconto com base no tipo de afastamento (ManterPlanoSemDesconto, FornecerSemDesconto).
    • Rescisão: Lógica específica para cálculo de dias e desconto em caso de rescisão no mês.
    • Tipo de Desconto Não Utilizado: Diferenciação do cálculo de quantidadeNaoUtilizado e diasTrabalhadosBeneficio.
    • Base de Cálculo, Forma de Desconto e Teto de Desconto: Múltiplas condições (if/else if) para determinar o valor e o limite do desconto com base nas configurações do benefício.
    • Desconto em Rescisão: O desconto é zerado se _VG_PossuiRescisaoMesAtual for verdadeiro e Beneficio.DescontaRescisao for falso.
    • Agrupamento: A verba pode ser agrupada (AgrupaBeneficios) ou lançada individualmente.

🔗 Dependências

  • Verbas Relacionadas:
    • 890: Mencionada em uma condição para VG_Desconta_Seguro_Vida_Especial, indicando uma regra específica para seguro de vida.
  • Tipo de Relação:
    • Dependência: O cálculo da verba 754 depende dos dados de BeneficioFornecidoBO do empregado, configurações de afastamento (AfastamentoBO), feriados (ExecucaoCalculo.ListaFeriado) e dados de rescisão (Empregado.Rescisao).
    • Geração: A verba 754 gera instâncias de HoleriteVerbaBO (para o holerite) e BeneficioVerbaBO (para o registro detalhado do benefício).

🧩 Funções

  • CriarVerbaHoleriteVerbaBO: Cria um objeto de verba para o holerite.
  • Negativo: Converte um valor para negativo.
  • Func_ArredondamentoPadrao: Arredonda um valor para o padrão do sistema.
  • SysFunc_MesmoMesAno: Verifica se duas datas estão no mesmo mês e ano.
  • AdicionarMensagemInfoPublicaCalculo: Adiciona mensagens informativas ao log de cálculo.
  • SysFunc_RecuperaFaixaDescontoBN: Recupera a faixa de desconto do benefício.
  • SysFunc_UltimoDiaMes: Retorna o último dia do mês de uma data.
  • SysFunc_RetornaBeneficioDiasTrabalho: Retorna os dias de trabalho para cálculo de benefício.
  • CriarBeneficioVerbaBO: Cria um objeto de verba de benefício.
  • SysFunc_Verifica_PlanoC_Beneficio_Verba: Função para verificar Plano C de benefício-verba.

🎯 Particularidades por Cliente/Setor

👤 Minipreco
  • Se o cliente for “minipreco”, a verba busca benefícios que contenham “BRASIL CONVÊNIOS”. Para cada benefício encontrado, cria uma verba de holerite 754, define a descrição como “Desc. Benefício [BN] Cartão de Crédito”, atribui o IdComplementoSistemaOrigem como “301” e o ValorTotal como o valor fornecido do benefício (Beneficio.VlrFornecido), negativado e arredondado. As incidências de INSS, FGTS e IRRF são definidas como isentas (ISE). Após processar todos os benefícios, a execução da fórmula é encerrada para este cliente.

  • Condições Especiais:

    • Customização “minipreco”: Lógica exclusiva para o cliente “minipreco” no início da fórmula.

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

BaseCalculo = SE(TipoBase == “SALARIO_NOMINAL”, SalarioNominal, SE(TipoBase == “SALARIO_PROPORCIONAL”, (SalarioNominal / 30) * DiasPagos, SE(TipoBase == “REMUNERACAO_INSS”, RemuneracaoINSS, ValorFornecido)))

ValorItem = SE(FormaDesconto == “VALOR_FIXO”, ValorFixo, SE(FormaDesconto == “PERCENTUAL_SALARIO”, BaseCalculo * (Percentual / 100), ValorFornecido * (Percentual / 100)))

ValorItemAjustado = SE(EhRescisao E Proporcionalizar, (ValorItem / 30) * DiasTrabalhados, ValorItem)

ValorDescontoFinal = ARREDONDAR(MINIMO(SOMATORIO(ValorItemAjustado), TetoCalculado))


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

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

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

SE Empregado.Historico.ListaBeneficioFornecido == NULO OU Empregado.Historico.ListaBeneficioFornecido.EstaVazia() ENTÃO RETORNAR NULO FIM_SE

2. Processamento e Filtro da Lista de Benefícios

ListaBeneficiosElegiveis = VAZIO

PARA CADA Beneficio EM Empregado.Historico.ListaBeneficioFornecido FAÇA SE Beneficio.CodVerba == “754” E Beneficio.IsAtivoNoMes(Solicitacao.DataReferencia) ENTÃO

Avaliação de Regras de Afastamento SE Empregado.PossuiAfastamentoMesAtual ENTÃO AcaoAfastamento = Config.ObterAcaoAfastamento(Empregado.TipoAfastamento) SE AcaoAfastamento == “MANTER_SEM_DESCONTO” OU AcaoAfastamento == “FORNECER_SEM_DESCONTO” ENTÃO EscreverMemoria(“DESC_BENEFICIO”, String.Format(“Benefício {0} suspenso por afastamento ({1}).”, Beneficio.Nome, Empregado.TipoAfastamento)) CONTINUAR FIM_SE FIM_SE

Avaliação de Regras de Rescisão SE (Empregado.PossuiRescisaoMesAtual OU Solicitacao.TipoFolha == “RESCISAO”) E NAO Config.PermitirDescontoNaRescisao ENTÃO EscreverMemoria(“DESC_BENEFICIO”, String.Format(“Benefício {0} suspenso por regra de rescisão.”, Beneficio.Nome)) CONTINUAR FIM_SE

ListaBeneficiosElegiveis.Adicionar(Beneficio) FIM_SE FIM_PARA

SE ListaBeneficiosElegiveis.EstaVazia() ENTÃO RETORNAR NULO FIM_SE

3. Determinação da Base de Cálculo, Apuração de Valores e Agrupamento

GruposBeneficios = ListaBeneficiosElegiveis.AgruparPor(b => b.ChaveAgrupamento)

PARA CADA Grupo EM GruposBeneficios FAÇA ValorGrupoCalculado = 0.0 ValorTetoGrupo = 0.0

PARA CADA ItemBeneficio EM Grupo.Itens FAÇA BaseCalculoItem = 0.0

Resolução Dinâmica da Base de Cálculo ESCOLHA ItemBeneficio.TipoBaseCalculo CASO “SALARIO_NOMINAL”: BaseCalculoItem = Empregado.SalarioNominal CASO “SALARIO_PROPORCIONAL”: BaseCalculoItem = (Empregado.SalarioNominal / 30.0) * Empregado.DiasPagosEmpregador CASO “REMUNERACAO_INSS”: BaseCalculoItem = Holerite.ObterValorAcumulado(“REMUNERACAO_BASE_INSS”) CASO “VALOR_FORNECIDO”: BaseCalculoItem = ItemBeneficio.QuantidadeFornecida * ItemBeneficio.ValorUnitario PADRÃO: BaseCalculoItem = 0.0 FIM_ESCOLHA

Cálculo do Valor Bruto por Forma de Desconto ValorItemBruto = 0.0 ESCOLHA ItemBeneficio.FormaDesconto CASO “VALOR_FIXO”: ValorItemBruto = ItemBeneficio.ValorFixo CASO “PERCENTUAL_SALARIO”: ValorItemBruto = BaseCalculoItem * (ItemBeneficio.PercentualFaixa / 100.0) CASO “PERCENTUAL_BENEFICIO”: ValorFornecido = ItemBeneficio.QuantidadeFornecida * ItemBeneficio.ValorUnitario ValorItemBruto = ValorFornecido * (ItemBeneficio.PercentualFaixa / 100.0) PADRÃO: ValorItemBruto = 0.0 FIM_ESCOLHA

Proporcionalização por Dias Trabalhados/Não Utilizados na Rescisão SE Empregado.PossuiRescisaoMesAtual E ItemBeneficio.ProporcionalizarRescisao ENTÃO DiasUteisTrabalhados = SysFunc_RetornaBeneficioDiasTrabalho(Empregado, Solicitacao.DataReferencia) ValorItemBruto = (ValorItemBruto / 30.0) * DiasUteisTrabalhados FIM_SE

Apuração do Teto Individual/Grupo ESCOLHA ItemBeneficio.TipoTetoDesconto CASO “VALOR_FORNECIDO”: ValorTetoGrupo = ValorTetoGrupo + (ItemBeneficio.QuantidadeFornecida * ItemBeneficio.ValorUnitario) CASO “PERCENTUAL_VALOR_BENEFICIO”: ValorTetoGrupo = ValorTetoGrupo + ((ItemBeneficio.QuantidadeFornecida * ItemBeneficio.ValorUnitario) * (ItemBeneficio.ValorTeto / 100.0)) CASO “PERCENTUAL_BASE_CALCULO”: ValorTetoGrupo = ValorTetoGrupo + (BaseCalculoItem * (ItemBeneficio.ValorTeto / 100.0)) CASO “VALOR_FIXO”: ValorTetoGrupo = ValorTetoGrupo + ItemBeneficio.ValorTeto FIM_ESCOLHA

ValorGrupoCalculado = ValorGrupoCalculado + ValorItemBruto

Registro de BeneficioVerbaBO para rastreabilidade individual BeneficioVerba = CriarBeneficioVerbaBO(ItemBeneficio.Id, “754”, ValorItemBruto) Holerite.ListaBeneficioVerba.Adicionar(BeneficioVerba) FIM_PARA

Application do Teto Máximo e Rateio do Grupo SE ValorTetoGrupo > 0.0 E ValorGrupoCalculado > ValorTetoGrupo ENTÃO ValorGrupoCalculado = ValorTetoGrupo FIM_SE

4. Aplicação de Limites Globais e Arredondamento

ValorAbsoluto = Func_Absoluto(ValorGrupoCalculado)

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

ValorDescontoFinal = Func_ArredondamentoPadrao(ValorAbsoluto)

SE ValorDescontoFinal <= 0.0 E NAO Config.GravarVerbaZerada ENTÃO CONTINUAR FIM_SE

5. Gravação de Campos, Acumuladores e Registro da Verba (754)

NovaVerba = CriarVerbaHoleriteBO(“754”, Config.ObterDescricaoFinal(Grupo)) NovaVerba.TipoVerba = “D” // Tipo: Desconto NovaVerba.ValorBase = ValorGrupoCalculado NovaVerba.Quantidade = Grupo.Itens.Somar(i => i.QuantidadeFornecida) NovaVerba.ValorTotal = ValorDescontoFinal NovaVerba.DescricaoFinal = Config.ObterDescricaoFinal(Grupo)

SE Config.DefinirIdComplementoOrigem ENTÃO NovaVerba.IdComplementoSistemaOrigem = Config.CodigoComplementoOrigem FIM_SE

NovaVerba.TipoIncidenciaINSS = Config.IncidenciaINSS // Padrão: ISE (Isento) NovaVerba.TipoIncidenciaFGTS = Config.IncidenciaFGTS // Padrão: ISE (Isento) NovaVerba.TipoIncidenciaIRRF = Config.IncidenciaIRRF // Padrão: ISE (Isento) NovaVerba.NaturezaeSocial = Config.NaturezaeSocial // Padrão: 9299 - Outros descontos

CopiarIncidencias(VerbaOriginal(“754”), NovaVerba)

NovaVerba.ImpactoFinanceiro = Config.ImpactoFinanceiro // Conforme ficha técnica: Não NovaVerba.ImpactoContabil = Config.ImpactoContabil // Conforme ficha técnica: Sim

SE Config.AtualizarAcumuladorBeneficios ENTÃO VG_TotalDescontoBeneficiosGerais = VG_TotalDescontoBeneficiosGerais + ValorDescontoFinal FIM_SE

Memória de Cálculo Auditável EscreverMemoria(“DESC_BENEFICIO”, String.Format(“Desconto Benefício Grupo {0}: Itens = {1}, Base/Bruto = R$ {2}, Desconto Final = R$ {3}”, Grupo.Chave, Grupo.Itens.Count(), ValorGrupoCalculado.ToString(“N2”), ValorDescontoFinal.ToString(“N2”)))

Holerite.ListaHoleriteVerba.Adicionar(NovaVerba)

FIM_PARA

FIM


Parametrizações Propostas para Reestruturação

1. REGRAS DE ENTRADA E FILTROS DE ELEGIBILIDADE

[ ] Permitir Execução no Processo de Provisões

Tipos de Folha Permitidos …: [X] Regular [X] Rescisão [X] Complementar

[X] Processar Via Lista de Benefícios Fornecidos (ListaBeneficioFornecido)

[X] Validar Status de Afastamento do Empregado

[X] Permitir Agrupamento Automático de Benefícios por Categoria/Frequência

2. MODO DE CÁLCULO, BASES E REGRAS DE RESCISÃO

Base de Cálculo Padrão …: [ Dynamic conforme Tabela do Benefício v ]

Tratamento na Rescisão …: [ Proporcionalizar por Dias Trabalhados v ]

[ ] Descontar Benefícios Não Utilizados na Rescisão

Tratamento para Afastamentos …: [ Suspender Desconto conforme Tabela de Afastamento v ]

3. REGRAS CUSTOMIZADAS E CAPTURA DE CONVÊNIOS (EX: MINIPREÇO)

[ ] Ativar Filtro Especial por Palavra-Chave / Nome de Convenio

Palavra-Chave de Busca …: [ BRASIL CONVÊNIOS ]

Descrição Customizada do Holerite …: [ Desc. Benefício [BN] Cartão de Crédito ]

Código de Complemento de Origem …: [ 301 ]

4. DIRETRIZES DE PROTEÇÃO, LIMITES E TETO

Tipo de Teto do Desconto …: [ Dynamic por Benefício / Menor entre Custo e Teto v ]

[ ] Aplicar Teto Máximo Global de Desconto

Valor Teto Máximo Global …: [ 0,00 ]

Regra de Arredondamento/Ajuste …: [ Arredondamento Padrão (Func_ArredondamentoPadrao) v ]

[ ] Permitir Gravação da Rubrica com Valor Zerado

5. FORMATAÇÃO E IMPACTOS

Descrição Padrão da Rubrica …: [ Desc. Benefício [BN] ]

Tipo da Rubrica …: [ Desconto ]

Impacto Financeiro …: [ ] Sim [X] Não

Impacto Contábil …: [X] Sim [ ] Não

[X] Gerar Registros Individuais de Rastreabilidade (BeneficioVerbaBO)

6. TRIBUTAÇÃO E ENVIOS ESOCIAL

Natureza eSocial …: [ 9299 - Outros descontos ]

Incidência INSS …: [ Isento (ISE) ]

Incidência FGTS …: [ Isento (ISE) ]

Incidência IRRF …: [ Isento (ISE) ]

Clientes com mesma regra

  • Regra Geral / Padrão do Sistema: Toda a complexidade de regras de afastamento (ManterPlanoSemDesconto, FornecerSemDesconto), tratamentos de rescisão com contagem de dias úteis/trabalhados, múltiplas bases de cálculo (Salário Nominal, Remuneração INSS, Valor Fornecido) e aplicação de tetos dinâmicos por grupo/frequência é absorvida nativamente pelo motor configurável.
  • Minipreco: A particularidade do cliente “minipreco” --- que identificava benefícios com a string “BRASIL CONVÊNIOS”, alterava a descrição para “Desc. Benefício [BN] Cartão de Crédito”, definia o IdComplementoSistemaOrigem para 301 e aplicava desconto do valor fornecido --- é integralmente coberta ativando o bloco de Regras Customizadas e Captura de Convênios via parâmetros de tela.
  • Preserva a sequência de execução 7550 e todos os metadados cadastrais: Tipo “Desconto”, ISENÇÃO de INSS, FGTS e IRRF (ISE), Natureza eSocial 9299, DSR “Não”, Médias “Não”, Impacto Financeiro “Não” e Impacto Contábil “Sim”.

Status Documental

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

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