656 - Desc. Contrib. Associativa
Metadados
- Código: 656
- Tipo: Desconto
- INSS: ISE
- FGTS: ISE
- IRRF: ISE
- Natureza eSocial: -
- DSR: Não
- Médias: Não
- Impacto Financeiro: Sim
- Impacto Contábil: Sim
- Sequência: 190
🧮 Regra Geral
-
Lógica de Cálculo:
- A verba verifica se há um percentual de lançamento (
Lancamento.Percentual) maior que zero e se existem proventos (VG_TemAlgumProvento). - Se sim:
- A descrição final da verba no holerite é formatada para incluir o percentual.
- A quantidade da verba é definida como o valor do salário nominal (
VG_VlrSalNom). - O valor total é calculado como o salário nominal multiplicado pelo percentual lançado, dividido por 100, e o resultado é arredondado e tornado negativo.
- A memória de cálculo é registrada com os valores utilizados.
- Se não (e se o cliente for “syngenta” com condições específicas):
- A verba verifica se o cliente é “syngenta” (case-insensitive), se há rescisão no mês atual (
VG_PossuiRescisaoMesAtual) e se os dias pagos pelo empregador são menos de 15 (VG_DiasPagosEmpregador < 15M). - Se todas essas condições forem verdadeiras, a verba não é calculada (retorna
null).
- A verba verifica se o cliente é “syngenta” (case-insensitive), se há rescisão no mês atual (
- A verba verifica se há um percentual de lançamento (
-
Fórmula matemática:
ValorTotal = -(VG_VlrSalNom * Lancamento.Percentual / 100M)
-
Variáveis Utilizadas:
Lancamento.PercentualVG_TemAlgumProventoVG_VlrSalNomHoleriteVerba.DescricaoFinalHoleriteVerba.QuantidadeHoleriteVerba.ValorTotaldescricaoSolicitacao.ClienteVG_PossuiRescisaoMesAtualVG_DiasPagosEmpregador.
-
Condições Especiais:
- Cálculo por percentual:
if (Lancamento.Percentual > 0M && VG_TemAlgumProvento == true) - Exceção para Syngenta:
if (Solicitacao.Cliente.ToLower() == "syngenta" && VG_PossuiRescisaoMesAtual && VG_DiasPagosEmpregador < 15M)
- Cálculo por percentual:
🔔 Eventos/Gatilhos
- Quando a verba é calculada:
- Quando há um lançamento manual com um percentual definido (
Lancamento.Percentual > 0M) e existem proventos no holerite (VG_TemAlgumProvento). - Não é calculada para o cliente “syngenta” em cenários de rescisão com menos de 15 dias pagos pelo empregador no mês.
- Quando há um lançamento manual com um percentual definido (
🧩 Funções
Negativo(): Converte um valor numérico para negativo.Func_ArredondamentoPadrao(): Arredonda o valor para o padrão do sistema.string.Format(): Formata strings.ToString("N2"): Formata um número com duas casas decimais.Argumento(): Adiciona um valor à lista de argumentos para a memória de cálculo.EscreverMemoria(): Registra a memória de cálculo com uma descrição e os argumentos.Solicitacao.Cliente.ToLower(): Converte o nome do cliente para minúsculas para comparação.
🎯 Particularidades por Cliente/Setor
👤 Syngenta
- Se houver uma rescisão no mês atual (
VG_PossuiRescisaoMesAtual) e os dias pagos pelo empregador forem inferiores a 15 (VG_DiasPagosEmpregador < 15M), a verba não será calculada.
💡 Proposta de Novo Cálculo
Fórmula proposta (padronizada):
ValorTotal = Se( ExigeProventos == Verdadeiro E VG_TemAlgumProvento == Falso, 0.00, Se( IsentaRescisao == Verdadeiro E PossuiRescisao == Verdadeiro E DiasPagos < DiasMinimos, 0.00, Se( ExisteLancamento == Verdadeiro E ValorLancamento > 0, Func_ArredondamentoPadrao( Min( ValorLancamento, TetoMaximoConfigurado ) ), Se( PercentualAplicado > 0, Func_ArredondamentoPadrao( Min( (BaseCalculoContrib * PercentualAplicado) / 100, TetoMaximoConfigurado ) ), 0.00 ) ) ) ) * -1.00
1. Filtros de Elegibilidade e Isenções (Piso Seguro)
Se (Configuracao.RubricaInativa == Verdadeiro) { HoleriteVerba = null; InterromperCalculo(); }
Validação de Proventos no Holerite (Exige ao menos um provento para haver desconto) Se (Configuracao.ExigirProventosHolerite == Verdadeiro E VG_TemAlgumProvento == Falso) { HoleriteVerba = null; InterromperCalculo(); }
Isenção Automática em Rescisão por Proporcionalidade de Dias Trabalhados/Pagos Se (Configuracao.IsentarRescisaoDiasMinimos == Verdadeiro E VG_PossuiRescisaoMesAtual == Verdadeiro) { Se (VG_DiasPagosEmpregador < Configuracao.DiasMinimosPagosRescisao) { HoleriteVerba = null; InterromperCalculo(); } }
2. Determinação do Valor do Desconto e Base de Referência
Definir ExisteLancamento = Func_ValidarExistenciaLancamento(Lancamento); Definir ValorDescontoApurado = 0.00; Definir BaseCalculoContrib = 0.00; Definir PercentualAplicado = 0.00; Definir OrigemCalculo = “Nenhuma”;
Se (ExisteLancamento == Verdadeiro E Lancamento.ValorTotal > 0.00) { Priority Fallback 1: Lançamento manual direto informado em valor ValorDescontoApurado = Lancamento.ValorTotal; BaseCalculoContrib = Lancamento.ValorReferencia > 0.00 ? Lancamento.ValorReferencia : Empregado.SalarioNominal; OrigemCalculo = “ValorInformadoManual”; } Senao Se (ExisteLancamento == Verdadeiro E Lancamento.Percentual > 0.00) { Priority Fallback 2: Percentual informado via lançamento sobre a base configurada PercentualAplicado = Lancamento.Percentual; BaseCalculoContrib = Lancamento.ValorReferencia > 0.00 ? Lancamento.ValorReferencia : Func_ObterBaseCalculo(Configuracao.TipoBaseCalculo, Empregado.SalarioNominal); ValorDescontoApurado = (BaseCalculoContrib * PercentualAplicado) / 100.00; OrigemCalculo = “PercentualInformadoManual”; } Senao Se (Configuracao.PermitirCalculoAutomaticoAssociado == Verdadeiro E Empregado.SocioAssociacao == Verdadeiro) { Priority Fallback 3: Cadastro de Associado / Sindicato / Entidade BaseCalculoContrib = Func_ObterBaseCalculo(Configuracao.TipoBaseCalculo, Empregado.SalarioNominal); PercentualAplicado = Empregado.PercentualContribAssociacao > 0.00 ? Empregado.PercentualContribAssociacao : Configuracao.PercentualPadraoAssociacao;
Se (PercentualAplicado > 0.00) { ValorDescontoApurado = (BaseCalculoContrib * PercentualAplicado) / 100.00; } Senao { ValorDescontoApurado = Configuracao.ValorFixoPadraoAssociacao; } OrigemCalculo = “CadastroAssociadoAutomatizado”; }
Se (ValorDescontoApurado <= 0.00) { HoleriteVerba = null; InterromperCalculo(); }
3. Aplicação de Limites, Tetos e Customizaçã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 e Sobregravação do Rótulo no Holerite Se (Func_TextoNaoVazio(Configuracao.TextoDescricaoPersonalizada)) { HoleriteVerba.DescricaoFinal = Configuracao.TextoDescricaoPersonalizada; } Senao Se (PercentualAplicado > 0.00) { HoleriteVerba.DescricaoFinal = “Desc. Contrib. Associativa (” + PercentualAplicado.ToString(“N2”) + ”%)”; } Senao Se (ExisteLancamento == Verdadeiro E Func_TextoNaoVazio(Lancamento.Observacao)) { HoleriteVerba.DescricaoFinal = Lancamento.Observacao; }
4. Gravação de Rubrica e Memória de Cálculo
HoleriteVerba.Quantidade = Func_ArredondamentoPadrao(BaseCalculoContrib); HoleriteVerba.Percentual = PercentualAplicado; HoleriteVerba.ValorReferencia = Func_ArredondamentoPadrao(BaseCalculoContrib); HoleriteVerba.ValorTotal = Func_ArredondamentoPadrao(ValorFinalRubrica * -1.00);
Argumento(BaseCalculoContrib.ToString(“F2”)); Argumento(PercentualAplicado.ToString(“N2”)); Argumento(ValorFinalRubrica.ToString(“F2”)); Argumento(OrigemCalculo);
EscreverMemoria(“[DESC_CONTRIB_ASSOCIATIVA]”, “Base Calculo: 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] Exigir a existência de ao menos um provento no holerite para efetuar o desconto [X] Permitir Lançamento Manual (Valor / Percentual / Valor de Referência) [X] Permitir Apuração Automática via Cadastro de Associado/Sindicato
2. DIRETRIZES DE BASE DE CÁLCULO E ISENÇÕES EM RESCISÃO
Base de Cálculo Padrão: [ Salário Nominal (VG_VlrSalNom) v ] [X] Isentar desconto na Rescisão se os dias pagos pelo empregador forem inferiores ao limite └─ Quantidade Mínima de Dias Pagos para Incidência: [ 15 ] dias
Percentual Padrão para Cálculo Automático: [ 0.00 ] % Valor Fixo Padrão para Cálculo Automático: R$ [ 0.00 ]
3. CUSTOMIZAÇÃO DE EXIBIÇÃO E ROTULAGEM
[X] Exibir o percentual aplicado na descrição do holerite [ ] Permitir sobregravação de Descrição no Holerite via Configuração └─ Descrição Personalizada: [ Desc. Contrib. Associativa ] [X] Herdar descrição customizada do campo de observação do Lançamento (se preenchido)
4. LIMITES, TETOS E IMPACTOS OPERACIONAIS
[X] Aplicar Teto Máximo de Desconto por Colaborador └─ Valor Limite Máximo: R$ [ 0.00 ] [X] 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: [ 656 ] Natureza eSocial: [ 9299 - Outros descontos ] Incidência INSS: [ ISE - Isento ] DSR: [ Não ] Incidência FGTS: [ ISE - Isento ] Médias: [ Não ] Incidência IRRF: [ ISE - Isento ] Impacto Financeiro: [ Sim ]
Clientes com mesma regra
- Syngenta: A verba possuía uma validação hardcoded explícita direcionada ao cliente (
Solicitacao.Cliente.ToLower() == "syngenta") para abortar o cálculo em desligamentos onde os dias pagos pelo empregador fossem menores que 15. No Dynamic Engine, essa tratativa foi convertida no parâmetro configurávelIsentar desconto na Rescisão se os dias pagos pelo empregador forem inferiores ao limite(com gatilho padrão em 15 dias). Com a chave ativada para o cadastro da Syngenta, a regra é executada nativamente sem depender da verificação de nome do cliente. - Regra Geral / Demais Clientes: Processavam a verba exclusivamente via lançamento manual com percentual sobre o salário nominal quando houvesse proventos no holerite. A reestruturação unificada preserva integralmente esse fluxo no Priority Fallback 2 (Lançamento Manual em Percentual) e na trava global de verificação de proventos, permitindo ainda a liberação de lançamentos em valor fixo ou cálculo automático por cadastro de associado para outras empresas.
Status Documental
- Status: Documentada
- Origem: export do Notion + catálogo da wiki
- Fonte rastreável:
30dc75ea2e8381a2a105d6f10ea9dad7