Wiki / SuperCalculo ~11 min

650 - Desc. Contrib. Sindical

Metadados

  • Código: 650
  • Tipo: Desconto
  • INSS: ISE
  • FGTS: ISE
  • IRRF: ISE
  • Natureza eSocial: 9230 - Contribuição sindical laboral
  • DSR: Não
  • Médias: Não
  • Impacto Financeiro: Sim
  • Impacto Contábil: Sim
  • Sequência: 1071

🧮 Regra Geral

  • Lógica de Cálculo:

    1. A verba não é calculada e retorna nulo se:
      • Não houver lançamento manual da verba (Func_ValidarExistenciaLancamento(Lancamento) == false).
      • Houver lançamento manual, mas a quantidade for diferente de 1M.
      • Não houver nenhum provento (VG_TemAlgumProvento == false).
      • O tipo de folha for RescisaoComplementar.
      • O tipo de processo for Provisoes ou Encargos.
      • A data de referência for fevereiro (Solicitacao.DataReferencia.Month == 2).
      • O empregado já tiver registro de Contribuição Sindical no ano corrente após fevereiro (Empregado.ListaContribuicaoSindicalCPF.Any(...)).
    2. Se houver lançamento manual com quantidade 1M, a lógica de desconto é avaliada:
      • Inicialmente, a flag descontar é definida como false.
      • Desconto em Março: Se o mês da data de referência for março (Solicitacao.DataReferencia.Month == 3), a flag descontar é definida como true.
      • Desconto no Mês Seguinte à Admissão (Abril a Dezembro): Se descontar ainda for false e o mês da data de referência for o mês seguinte à admissão do empregado:
        • Se a admissão foi em dezembro (Empregado.DataAdmissao.Month == 12), verifica se o empregado já teve desconto de Contribuição Sindical no ano corrente após janeiro. Se sim, a verba não é calculada e retorna nulo. Caso contrário, descontar é definido como true.
        • Para admissões em outros meses, descontar é definido como true.
      • Desconto Pós-Março para Retorno de Afastamento: Se descontar ainda for false, o mês da data de referência for posterior a março (Solicitacao.DataReferencia.Month > 3) e não for o mês de admissão do empregado:
        • É criada uma grade de cálculo para o mês anterior à data de referência.
        • São adicionados diversos tipos de afastamentos não remunerados (Auxílio Doença, Acidente de Trabalho, Aposentadoria por Invalidez, Outros Afastamentos, Licença Não Remunerada, Mandato Sindical, Serviço Militar, Suspensão de Contrato, Carcere, MP936, etc.) a essa grade.
        • Calcula-se o total de dias não trabalhados no mês anterior, incluindo licença maternidade (adotante).
        • Se o total de dias não trabalhados for igual ou superior ao número total de dias do mês anterior, a verba não é calculada e retorna nulo. Caso contrário, descontar é definido como true.
    3. Se a flag descontar for true após todas as verificações:
      • A quantidade da verba é definida como 1M.
      • O valor total da verba é calculado como o salário nominal dividido por 30, arredondado e tornado negativo.
      • É gerada uma memória de cálculo detalhando o valor do salário nominal e o valor final do desconto.
  • Fórmula matemática:

    • Valor = Negativo(ArredondamentoPadrao(VG_VlrSalNom / 30M))
  • Variáveis Utilizadas:

    • Lancamento
    • VG_TemAlgumProvento
    • Solicitacao.TipoFolha
    • Solicitacao.TipoProcesso
    • Solicitacao.DataReferencia
    • Empregado.ListaContribuicaoSindicalCPF
    • Empregado.DataAdmissao
    • VG_VlrSalNom
    • HoleriteVerba.Quantidade
    • HoleriteVerba.ValorTotal.
  • Condições Especiais:

    • Verifica a existência e quantidade de lançamento manual.
    • Condições de return null para tipos de folha/processo específicos, mês de fevereiro, e desconto já realizado no ano.
    • Lógica condicional baseada no mês da DataReferencia (março, mês seguinte à admissão, ou meses posteriores a março com retorno de afastamento).
    • Verificação de afastamentos não remunerados no mês anterior para desconto posterior a março.
    • Condição especial para admissões em dezembro.

🧩 Funções

  • Func_ValidarExistenciaLancamento(Lancamento): Verifica se existe um lançamento manual para a verba.
  • SysFunc_MesmoMesAno(date1, date2): Compara se duas datas pertencem ao mesmo mês e ano.
  • SysFunc_PrimeiroDiaMes(date): Retorna o primeiro dia do mês de uma data.
  • SysFunc_UltimoDiaMes(date): Retorna o último dia do mês de uma data.
  • SysProc_AdicionarAfastamentosGradeCalculoDiasMes(Grade, TipoAfastamento): Adiciona tipos de afastamento a uma grade de cálculo de dias do mês.
  • SysFunc_DiasAfastamentoSubMesPeriodo(dataGrade, EnumTipoAfastamentoBO.LicencaMaternidade, EnumSubTipoAfastamentoBO.LM_INSSAdotante): Calcula dias de afastamento específicos (licença maternidade adotante) em um período.
  • Negativo(value): Converte um valor para negativo.
  • Func_ArredondamentoPadrao(value): Aplica o arredondamento padrão do sistema.
  • Argumento(value): Utilizada para formatar argumentos na memória de cálculo.
  • EscreverMemoria(tag, text): Gera a string da memória de cálculo.

🎯 Particularidades por Cliente/Setor

👤 Acal
  • Condições de Retorno Nulo Iniciais: A regra do cliente acal não inclui a condição Solicitacao.TipoProcesso == EnumTipoProcessoBO.Encargos no bloco inicial de return null. Isso significa que a verba pode ser calculada para processos do tipo Encargos no cliente acal, enquanto na regra geral seria ignorada.

  • Base de Cálculo para Comissionados Puros: A regra do cliente acal introduz uma lógica específica para empregados com Empregado.TipoPagamento == EnumTipoPagamentoBO.ComissaoPura.

    • Inicialmente, a base de cálculo (BC_ContribSindical) é definida como VG_VlrSalNom.
    • Se o empregado for comissionado puro, a regra busca o holerite do mês anterior (MesBase = Solicitacao.DataReferencia.AddMonths(-1)).
    • Para cada verba no holerite do mês anterior, se o Codigo for 5 (Comissão), o ValorTotal dessa verba é adicionado à BC_ContribSindical.
    • Se, após essa verificação, BC_ContribSindical ainda for 0M, a regra tenta recuperar o ValorTotal da verba 5 (Comissão) do holerite atual.
    • Se BC_ContribSindical permanecer 0M após todas as tentativas, a regra dispara um erro (SysFunc_Panico).
    • A regra geral não possui essa lógica de cálculo de base para comissionados puros, utilizando diretamente VG_VlrSalNom.
  • Cálculo Final do Valor Total: O ValorTotal da verba é calculado usando a BC_ContribSindical (que pode incluir comissões) dividida por 30: Negativo(Func_ArredondamentoPadrao(BC_ContribSindical / 30M)). Na regra geral, o cálculo é feito diretamente com VG_VlrSalNom.

  • Memória de Cálculo: A memória de cálculo gerada para o cliente acal é customizada para refletir a base de cálculo da contribuição sindical e a fórmula 10999, diferentemente da regra geral que menciona o salário nominal e a fórmula 35.

👤 Bundy
  • Condição de Retorno Nulo para Processo de Encargos: A verba para o cliente bundy não possui a condição que anula o cálculo se o Solicitacao.TipoProcesso for EnumTipoProcessoBO.Encargos.
  • Tipo Literal de Quantidade: Nas comparações de Lancamento.Quantidade, o código do cliente bundy utiliza o literal 1 (inteiro) em vez de 1M (decimal). Embora funcionalmente idêntico, é uma inconsistência de tipo literal.
  • Referência na Memória de Cálculo: A memória de cálculo gerada para o cliente bundy faz referência à Fórmula 16119, que é o ID da fórmula específica do cliente.
👤 Jmalucelli
  • Condições de Retorno Nulo Iniciais: A regra de jmalucelli não inclui a condição Solicitacao.TipoProcesso == EnumTipoProcessoBO.Encargos no bloco inicial de return null. Isso significa que a verba pode ser calculada em processos do tipo “Encargos” para este cliente, enquanto na regra geral seria ignorada.
  • Base de Cálculo da Contribuição Sindical: A regra de jmalucelli introduz um cálculo para VlrBaseContribSind. Este valor é composto pelo VG_VlrSalNom (Valor Salário Nominal) somado a um VlrATSLegado.
    • O VlrATSLegado é determinado pela busca de lançamentos históricos (Empregado.Historico.ListaLancamento) no mesmo mês e ano da solicitação.
    • Especificamente, ele procura por lançamentos com CodigoVerbaLancamento == "97" e Percentual > 0M.
    • Se encontrado, VlrATSLegado é calculado como VG_VlrSalNom * (lanc.Percentual / 100M) e arredondado. Se houver múltiplos lançamentos da verba 97 no mesmo mês, apenas o último será considerado para VlrATSLegado.
    • A fórmula final para HoleriteVerba.ValorTotal utiliza VlrBaseContribSind em vez de apenas VG_VlrSalNom.
  • Memória de Cálculo: A memória de cálculo (HoleriteVerba.MemoriaCalculo) é customizada para refletir a inclusão do VlrATSLegado na base de cálculo, detalhando a soma do salário nominal com o ATS Legado e referenciando a Fórmula 16026.
  • Literais Decimais: Utiliza 1 em vez de 1M para representar o valor decimal 1 em algumas comparações de Lancamento.Quantidade.
👤 Syngenta (ID da Fórmula 16645)
  • Condição de Não Desconto em Rescisão: A verba não é calculada se o empregado estiver em rescisão no mês atual (VG_PossuiRescisaoMesAtual) e tiver menos de 15 dias pagos pelo empregador (VG_DiasPagosEmpregador < 15).
  • Exclusão de Processo de Encargos: A regra de syngenta não considera o EnumTipoProcessoBO.Encargos como uma condição para não calcular a verba.
  • Período de Aplicação da Regra: A lógica principal de cálculo da verba é aplicada apenas para Solicitacao.DataReferencia a partir de 01/01/2018.
  • Desconto em Mês de Admissão (Pós-Março): Para meses posteriores a março, a regra permite o desconto da contribuição sindical mesmo que o mês de referência seja o mês de admissão do empregado, removendo a validação SysFunc_MesmoMesAno(Empregado.DataAdmissao, Solicitacao.DataReferencia) == false.
👤 Veibras
  • Condições de Retorno Nulo Iniciais: A verba não retorna nulo se o Solicitacao.TipoProcesso for EnumTipoProcessoBO.Encargos, ao contrário da regra geral.
  • Base de Cálculo da Contribuição Sindical: A base de cálculo (BC_ContribSind) é customizada para incluir, além do salário nominal (VG_VlrSalNom), os valores de:
    • Verba 5 (Comissão).
    • Verba 55 (DSR Comissão), que é o DSR da verba 5.
    • Verba 172 (Bônus) com diversos complementos específicos (“Metas de Financiamento”, “Referente Meta Alcançada”, “Gratificação”, “Metas”, string.Empty e “Financiamento”).
  • Aplicação de Garantia Salarial: Se o valor da VG_VlrGarantiaSalario for maior que zero e exceder a BC_ContribSind calculada, a BC_ContribSind é substituída pelo valor da garantia salarial.
  • Cálculo do Valor Total: O HoleriteVerba.ValorTotal é calculado com base na BC_ContribSind customizada, dividida por 30.
  • Memória de Cálculo: A memória de cálculo (HoleriteVerba.MemoriaCalculo) reflete a utilização da BC_ContribSind customizada e faz referência à “Fórmula 17264”.

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

BC_ContribSind = VG_VlrSalNom + VlrAdicionaisHistoricos + VlrRubricasComposicao[MêsAnterior/Atual]

ValorTotal = -1 * Func_ArredondamentoPadrao(MAX(BC_ContribSind, VG_VlrGarantiaSalario) / 30)


1. FILTROS DE ELEGIBILIDADE E VALIDAÇÕES GERAIS (PISO SEGURO)

SE (Func_ValidarExistenciaLancamento(Lancamento) == FALSE) ENTAO RETORNAR_VALOR_NULO FIM_SE

// Unificação de tipos literais (suporta inteiro e decimal) SE (Lancamento.Quantidade != 1.0) ENTAO RETORNAR_VALOR_NULO FIM_SE

SE (VG_TemAlgumProvento == FALSE OU Solicitacao.TipoFolha == “RescisaoComplementar”) ENTAO RETORNAR_VALOR_NULO FIM_SE

// Validação Dinâmica de Perfil de Processo ElegivelProcesso = TRUE SE (Solicitacao.TipoProcesso == “Provisoes”) ENTAO ElegivelProcesso = FALSE SENAO SE (Solicitacao.TipoProcesso == “Encargos” E Parametros.PermitirCalculoEmProcessoEncargos == FALSE) ENTAO ElegivelProcesso = FALSE FIM_SE

SE (ElegivelProcesso == FALSE) ENTAO RETORNAR_VALOR_NULO FIM_SE

// Prevenção de duplicidade anual AnoCorrente = Solicitacao.DataReferencia.Year MesRef = Solicitacao.DataReferencia.Month

SE (MesRef == 2 OU Empregado.PossuiDescontoSindicalNoAno(AnoCorrente) == TRUE) ENTAO RETORNAR_VALOR_NULO FIM_SE

2. AVALIAÇÃO DAS JANELAS DE DESCONTO (MARÇO / ADMISSÃO / RETORNO AFASTAMENTO)

Descontar = FALSE

SE (MesRef == 3) ENTAO Descontar = TRUE SENAO SE (MesRef == Func_ObterMesSubsequente(Empregado.DataAdmissao.Month)) ENTAO SE (Empregado.DataAdmissao.Month == 12 E Empregado.PossuiDescontoSindicalNoAno(AnoCorrente) == TRUE) ENTAO RETORNAR_VALOR_NULO SENAO Descontar = TRUE FIM_SE SENAO SE (MesRef > 3) ENTAO

// Validação Temporal de Admissão EhMesAdmissao = SysFunc_MesmoMesAno(Empregado.DataAdmissao, Solicitacao.DataReferencia)

SE (EhMesAdmissao == TRUE E Parametros.PermitirDescontoNoMesAdmissaoPosMarco == TRUE) ENTAO Descontar = TRUE SENAO SE (EhMesAdmissao == FALSE) ENTAO // Validação de Dias Efetivos Trabalhados (Mapeamento de Afastamentos) DiasNaoTrabalhados = Func_CalcularDiasAfastadosMesAnterior(Solicitacao.DataReferencia) DiasDoMesAnterior = Func_ObterDiasTotaisMesAnterior(Solicitacao.DataReferencia)

SE (DiasNaoTrabalhados < DiasDoMesAnterior) ENTAO Descontar = TRUE FIM_SE FIM_SE FIM_SE

// Trava de Exceção para Desconto em Rescisão (Atende: Syngenta) SE (Descontar == TRUE E Parametros.ValidarDiasMinimosPagosNaRescisao == TRUE) ENTAO SE (VG_PossuiRescisaoMesAtual == TRUE E VG_DiasPagosEmpregador < 15) ENTAO Descontar = FALSE FIM_SE FIM_SE

SE (Descontar == FALSE) ENTAO RETORNAR_VALOR_NULO FIM_SE

3. COMPOSIÇÃO DINÂMICA DA BASE DE CÁLCULO SINDICAL

BC_ContribSind = VG_VlrSalNom

// Módulo A: Injeção de Adicionais Históricos por Percentual (Atende: Jmalucelli - ATS Legado Verba 97) SE (Parametros.IncluirAdicionaisHistoricosPercentual == TRUE) ENTAO BC_ContribSind = BC_ContribSind + Func_CalcularAdicionaisFixosHistoricos(Parametros.CodigoVerbaHistorica) FIM_SE

// Módulo B: Injeção de Rubricas de Variáveis do Mês Anterior (Atende: Acal - Comissões) SE (Parametros.SomarRubricasVariaveisMesAnterior == TRUE) ENTAO BC_ContribSind = BC_ContribSind + Func_SomarRubricasComposicaoSindicato(Solicitacao.DataReferencia.AddMonths(-1), Parametros.ListaRubricasComposicao)

// Fallback para o mês atual se a base calculada for nula para comissionados puros SE (Empregado.TipoPagamento == “ComissaoPura” E BC_ContribSind == VG_VlrSalNom) ENTAO BC_ContribSind = BC_ContribSind + Func_SomarRubricasComposicaoSindicato(Solicitacao.DataReferencia, Parametros.ListaRubricasComposicao) FIM_SE FIM_SE

// Módulo C: Injeção de Rubricas de Variáveis do Mês Atual (Atende: Veibras - Comissões, DSR, Bônus) SE (Parametros.SomarRubricasVariaveisMesAtual == TRUE) ENTAO BC_ContribSind = BC_ContribSind + Func_SomarRubricasComposicaoSindicato(Solicitacao.DataReferencia, Parametros.ListaRubricasComposicao) FIM_SE

// Módulo D: Aplicação de Piso / Garantia Salarial (Atende: Veibras) SE (Parametros.AtivarTetoGarantiaSalarial == TRUE OU VG_VlrGarantiaSalario > 0.0) ENTAO SE (VG_VlrGarantiaSalario > BC_ContribSind) ENTAO BC_ContribSind = VG_VlrGarantiaSalario FIM_SE FIM_SE

4. VALIDAÇÃO DE SEGURANÇA E FECHAMENTO DO EVENTO

SE (BC_ContribSind <= 0.0) ENTAO SysFunc_RegistrarAvisoLog(“650_CRITICO”, “Base de cálculo da contribuição sindical zerada ou negativa.”) SysFunc_Panico(“Execução interrompida: Base Sindical inválida obtida nos parâmetros do contrato.”) FIM_SE

// Gravação dos resultados e emolduramento do desconto (1 dia de salário) ValorCalculado = Func_ArredondamentoPadrao(BC_ContribSind / 30.0)

HoleriteVerba.ValorTotal = ValorCalculado * (-1.0) HoleriteVerba.Quantidade = 1.0 HoleriteVerba.ValorReferencia = BC_ContribSind

RETORNAR_VALOR_PROCESSADO


Impactos

  • Erradicação de Lógicas Proprietárias no Core: Desvios para capturar valores de verbas fixas (Verba 5, 55, 97, 172) e tratamento de bônus por strings textuais são eliminados definitivamente do motor de cálculo.
  • Estabilidade de Processamento: A validação unificada remove o risco de quebras inesperadas no processamento de lotes normais ou de encargos.

Benefícios

  • Configuração Centralizada por Sindicato: Toda a composição da base de cálculo (se inclui comissões do mês anterior, bônus ou adicionais por tempo de serviço) passa a ser configurável na tela de regras do Sindicato, dando autonomia ao usuário do sistema.
  • Isolamento de Regras Fiscais: Facilidade para ativar ou desativar as travas de dias mínimos trabalhados em meses de rescisão ou cenários de admissão tardia no final do ano.

Parametrizações Propostas para Reestruturação

1. Configuração de Regras Processuais e Janelas de Desconto:

[x] Permitir o cálculo da contribuição sindical em processos de [ Encargos ] (Atende: Acal, Bundy, Jmalucelli, Veibras)

[x] Barrar desconto em rescisões caso os dias pagos pelo empregador sejam menores que [ 15 ] dias (Atende: Syngenta)

[x] Permitir desconto no mês de admissão para contratações ocorridas pós-março

2. Painel de Composição da Base de Cálculo Sindical (Substituição de Acal, Jmalucelli e Veibras):

Selecione as rubricas e origens que compõem a Base de Cálculo (BC_ContribSind):

[x] Incluir Adicionais de Histórico por Percentual (Atende: ATS Legado Verba 97 / Jmalucelli)

[x] Buscar e somar verbas de comissão/bônus do MÊS ANTERIOR (Atende: Verba 5 Comissão / Acal)

[x] Buscar e somar verbas de comissão/bônus do MÊS ATUAL (Atende: Verba 5, 55, 172 / Veibras)

  • Códigos das Rubricas Atuais Integradas: [ 5, 55, 172 ]

3. Regra de Garantia Salarial e Pisos (Substituição de Veibras):

[x] Ativar teto de garantia salarial (Substituir pela VG_VlrGarantiaSalario se esta for maior)

4. Regulação Cadastral de Encargos (eSocial):

Natureza da Rubrica Homologada: [ 9230 - Contribuição sindical laboral ]

[x] INSS: ISE (Isento) [x] FGTS: ISE (Isento) [x] IRRF: ISE (Isento)

Clientes com mesma regra

  • Acal: Totalmente suportada. O recálculo da base para comissionados puros buscando as verbas de comissão do mês anterior migra para o painel de composição dinâmica da base sindical.
  • Bundy e Jmalucelli: Mantêm seus comportamentos preservados. A permissão para rodar em processos de encargos e a integração do ATS Legado via percentual histórico passam a ser processadas através das flags de interface corporativa.
  • Syngenta: Adequada ao motor unificado. A trava de segurança de 15 dias mínimos pagos em meses de rescisão é controlada diretamente pelo parâmetro de janelas de desconto.
  • Veibras: Plenamente integrada. A soma das comissões, bônus e DSR do mês corrente, bem como o confronto com a garantia mínima de salário (VG_VlrGarantiaSalario), passam a ser configurados na matriz de composição do sindicato.
  • Regra Geral: Uniformizada, opera o script comum realizando o desconto correspondente a um dia de trabalho sobre o salário contratual nominal.

Status Documental

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

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