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:
- 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
ProvisoesouEncargos. - 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(...)).
- Não houver lançamento manual da verba (
- Se houver lançamento manual com quantidade
1M, a lógica de desconto é avaliada:- Inicialmente, a flag
descontaré definida comofalse. - Desconto em Março: Se o mês da data de referência for março (
Solicitacao.DataReferencia.Month == 3), a flagdescontaré definida comotrue. - Desconto no Mês Seguinte à Admissão (Abril a Dezembro): Se
descontarainda forfalsee 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 comotrue. - Para admissões em outros meses,
descontaré definido comotrue.
- Se a admissão foi em dezembro (
- Desconto Pós-Março para Retorno de Afastamento: Se
descontarainda forfalse, 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 comotrue.
- Inicialmente, a flag
- Se a flag
descontarfortrueapó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.
- A quantidade da verba é definida como
- A verba não é calculada e retorna nulo se:
-
Fórmula matemática:
Valor = Negativo(ArredondamentoPadrao(VG_VlrSalNom / 30M))
-
Variáveis Utilizadas:
LancamentoVG_TemAlgumProventoSolicitacao.TipoFolhaSolicitacao.TipoProcessoSolicitacao.DataReferenciaEmpregado.ListaContribuicaoSindicalCPFEmpregado.DataAdmissaoVG_VlrSalNomHoleriteVerba.QuantidadeHoleriteVerba.ValorTotal.
-
Condições Especiais:
- Verifica a existência e quantidade de lançamento manual.
- Condições de
return nullpara 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
acalnão inclui a condiçãoSolicitacao.TipoProcesso == EnumTipoProcessoBO.Encargosno bloco inicial dereturn null. Isso significa que a verba pode ser calculada para processos do tipoEncargosno clienteacal, enquanto na regra geral seria ignorada. -
Base de Cálculo para Comissionados Puros: A regra do cliente
acalintroduz uma lógica específica para empregados comEmpregado.TipoPagamento == EnumTipoPagamentoBO.ComissaoPura.- Inicialmente, a base de cálculo (
BC_ContribSindical) é definida comoVG_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
Codigofor5(Comissão), oValorTotaldessa verba é adicionado àBC_ContribSindical. - Se, após essa verificação,
BC_ContribSindicalainda for0M, a regra tenta recuperar oValorTotalda verba5(Comissão) do holerite atual. - Se
BC_ContribSindicalpermanecer0Mapó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.
- Inicialmente, a base de cálculo (
-
Cálculo Final do Valor Total: O
ValorTotalda verba é calculado usando aBC_ContribSindical(que pode incluir comissões) dividida por 30:Negativo(Func_ArredondamentoPadrao(BC_ContribSindical / 30M)). Na regra geral, o cálculo é feito diretamente comVG_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órmula10999, diferentemente da regra geral que menciona o salário nominal e a fórmula35.
👤 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.TipoProcessoforEnumTipoProcessoBO.Encargos. - Tipo Literal de Quantidade: Nas comparações de
Lancamento.Quantidade, o código do cliente bundy utiliza o literal1(inteiro) em vez de1M(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.Encargosno bloco inicial dereturn 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 peloVG_VlrSalNom(Valor Salário Nominal) somado a umVlrATSLegado.- 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"ePercentual > 0M. - Se encontrado,
VlrATSLegadoé calculado comoVG_VlrSalNom * (lanc.Percentual / 100M)e arredondado. Se houver múltiplos lançamentos da verba 97 no mesmo mês, apenas o último será considerado paraVlrATSLegado. - A fórmula final para
HoleriteVerba.ValorTotalutilizaVlrBaseContribSindem vez de apenasVG_VlrSalNom.
- O
- Memória de Cálculo: A memória de cálculo (
HoleriteVerba.MemoriaCalculo) é customizada para refletir a inclusão doVlrATSLegadona base de cálculo, detalhando a soma do salário nominal com o ATS Legado e referenciando aFórmula 16026. - Literais Decimais: Utiliza
1em vez de1Mpara representar o valor decimal1em algumas comparações deLancamento.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.Encargoscomo 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.DataReferenciaa 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.TipoProcessoforEnumTipoProcessoBO.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.Emptye “Financiamento”).
- Aplicação de Garantia Salarial: Se o valor da
VG_VlrGarantiaSalariofor maior que zero e exceder aBC_ContribSindcalculada, aBC_ContribSindé substituída pelo valor da garantia salarial. - Cálculo do Valor Total: O
HoleriteVerba.ValorTotalé calculado com base naBC_ContribSindcustomizada, dividida por 30. - Memória de Cálculo: A memória de cálculo (
HoleriteVerba.MemoriaCalculo) reflete a utilização daBC_ContribSindcustomizada 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