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. - CalculaSal_Custo_Empresa,Remuneracao_BaseInsseSalarioNominalEmpregado. - 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 forFornecerSemDesconto(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 osdiasTrabalhadosBeneficioconsiderando datas de admissão, rescisão, vigência do benefício, feriados e dias de trabalho da escala. A lógica de contagem varia conformeTipoDescontoNaoUtilizado(Não Desconta, Desconta Dias Trabalhados, Desconta Dias do Mês) eEnumFrequenciaBeneficio. CalculaquantidadeNaoUtilizado. - 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 naFormaDesconto(Valor Fixo, Percentual do Salário, Percentual do Valor do Benefício ou Sem Desconto). - Calcula o teto do desconto (
valorTeto) com base noTipoTetoDesconto(Valor Fornecido, Percentual do Valor do Benefício, Valor Fixo ou Percentual da Base de Cálculo). - Cria um objeto
HoleriteVerbaBOpara o benefício. Se houver rescisão e o benefício estiver configurado para não descontar na rescisão, ovalorDescontoé zerado. - Adiciona a verba à lista temporária
HoleriteVerbaAgrupadoTelma(seAgrupaBeneficiosfor 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
valorDescontofinal entre os benefícios do grupo, arredondando o valor. - Se
AgrupaBeneficiosfor verdadeiro, consolida as verbas do grupo em uma únicaHoleriteVerbaBOe a adiciona àHolerite.ListaHoleriteVerba.
- Verifica afastamentos: Se houver afastamento com ação
- Identifica benefícios fornecidos (
-
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)(paraPercentualSalario)valorDesconto += (multiplicador × valorUnitario) × (vlrFaixaDesconto ÷ 100)(paraPercentualValorBeneficio)valorTeto += multiplicador × valorUnitario(paraValorFornecido)valorTeto = (multiplicador × valorUnitario) × (Beneficio.ValorTeto.Value ÷ 100)(paraPercValorBeneficio)valorTeto = valorSalario × Beneficio.ValorTeto.Value ÷ 100(paraPercBaseCalculo)b.ValorDesconto = Func_ArredondamentoPadrao(valorDesconto ÷ item.Count())(rateio)
-
Variáveis Utilizadas:
Solicitacao.ClienteEmpregado.Historico.ListaBeneficioFornecidoHoleriteVerba.Verba.CodigoSolicitacao.DataReferenciaVG_HsTrabVG_VlrSalNomVG_HsMesVG_SCSalarioVG_SCProLaboreVG_UtilizaDiasTrabalhoEscalaBNSalarioNominalEmpregadoSal_Custo_EmpresaRemuneracao_BaseInssBeneficio.QuantidadeFornecidoBeneficio.ValorUnitarioBeneficio.ListaAcaoTipoAfastamentoEmpregado.Historico.ListaAfastamentoExecucaoCalculo.ListaFeriadoVG_Desconta_Seguro_Vida_EspecialVG_PossuiRescisaoMesAtualEmpregado.DataAdmissaoEmpregado.Rescisao.DataUltimoDiaTrabalhadoEmpregado.Rescisao.DataRescisaoBeneficio.DataInicioVigenciaBeneficio.BeneficioManualBeneficio.DataInicioBeneficioManualBeneficio.DataFimBeneficioManualVG_DiasTrabalhadosBeneficioBeneficio.ValorTetoBeneficio.DescontaRescisaoVG_PossuiRescisaoVG_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
quantidadeNaoUtilizadoediasTrabalhadosBeneficio. - 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_PossuiRescisaoMesAtualfor verdadeiro eBeneficio.DescontaRescisaofor falso. - Agrupamento: A verba pode ser agrupada (
AgrupaBeneficios) ou lançada individualmente.
- Afastamentos: Condições para zerar o desconto com base no tipo de afastamento (
🔗 Dependências
- Verbas Relacionadas:
890: Mencionada em uma condição paraVG_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
BeneficioFornecidoBOdo 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) eBeneficioVerbaBO(para o registro detalhado do benefício).
- Dependência: O cálculo da verba 754 depende dos dados de
🧩 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
IdComplementoSistemaOrigemcomo “301” e oValorTotalcomo 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
IdComplementoSistemaOrigempara301e 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
7550e todos os metadados cadastrais: Tipo “Desconto”, ISENÇÃO de INSS, FGTS e IRRF (ISE), Natureza eSocial9299, 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