Wiki / SuperCalculo ~9 min

687 - Desc. INSS Férias (complem.)

Metadados

  • Código: 687
  • Tipo: Desconto
  • INSS: ISE
  • FGTS: ISE
  • IRRF: ISE
  • Natureza eSocial: 9201 - Contribuição Previdenciária
  • DSR: Não
  • Médias: Não
  • Impacto Financeiro: Sim
  • Impacto Contábil: Sim
  • Sequência: 7565

🧮 Regra Geral

  • Lógica de Cálculo:

    1. Verificação de Lançamento Manual: A fórmula primeiro verifica se existe um lançamento manual (Lancamento) para a verba.
      • Se sim, e o Lancamento.ValorTotal for exatamente -0.01M, o HoleriteVerba.ValorTotal é zerado. Caso contrário, o percentual e o valor total do lançamento manual são utilizados diretamente.
    2. Validação Inicial (Sem Lançamento Manual): Se não houver lançamento manual, a verba só será calculada se VG_SCFeriasG_limite for diferente de zero OU se o valor do INSS gerado (verba 685 + ajustes) for diferente de zero. Caso contrário, o cálculo é abortado (return null).
    3. Cálculo de Múltiplos Vínculos:
      • A base de cálculo para múltiplos vínculos (SC_Multiplos_Vinculos) é somada a partir de VG_MV_Empregado, VG_MV_ContribIndividual e VG_BaseINSS_RescPagasMesmoMesOutroVinculo.
      • Se VG_MV_Empregado for maior que zero, o INSS de múltiplos vínculos (INSS_Multiplos_Vinculos) é calculado pela função Func_Calcula_INSS_Outro_Vinculo.
      • Se VG_MV_ContribIndividual for maior que zero, o INSS de múltiplos vínculos é calculado truncando o resultado de SC_Multiplos_Vinculos multiplicado pela alíquota de INSS pró-labore (VG_AliqINSSProLabore).
    4. Base de Cálculo Consolidada: A base de cálculo do empregado (VG_SCFeriasG_limite) é somada à base de múltiplos vínculos (SC_Multiplos_Vinculos), resultando em SC_NossoMaisOutro. Este valor é limitado ao teto do INSS (VG_VlrTetoSCINSS).
    5. Cálculo do INSS de Férias (Complemento):
      • O valor do INSS de férias (INSS_FeG_VlrFinal_FL_Reg) é calculado aplicando a alíquota do empregado (VG_AliqINSSEmpregado_Sal_FeG_API) sobre a diferença entre a base consolidada e a base de múltiplos vínculos (SC_NossoMaisOutro - SC_Multiplos_Vinculos). O resultado é arredondado via Func_ArredondamentoPadrao.
      • Exceção de Alíquota: Se a alíquota VG_AliqINSSEmpregado_Sal_FeG_API for 7.50M, o cálculo utiliza Func_Truncar em vez de Func_ArredondamentoPadrao.
    6. Ajuste para Múltiplos Vínculos: Se INSS_Multiplos_Vinculos for maior que zero, o INSS_FeG_VlrFinal_FL_Reg é recalculado aplicando a alíquota sobre a base consolidada (SC_NossoMaisOutro) e subtraindo o INSS_Multiplos_Vinculos. A exceção de alíquota de 7.50M com Func_Truncar é aplicada novamente.
    7. Comparação e Geração do Valor Final:
      • O INSS de férias já gerado (INSS_Gerado_Fl_Ferias) é calculado a partir da verba 685 e ajustes de rescisão.
      • Se o INSS_Gerado_Fl_Ferias for menor que o INSS_FeG_VlrFinal_FL_Reg calculado, a verba 687 é ativada.
        • O percentual da verba é definido pela alíquota do empregado, arredondado para 2 ou 4 casas decimais, dependendo do parâmetro ExibirPercentualDeVerbaComQuatroCasasDecimais do empregador.
        • A descrição final da verba é formatada para incluir o percentual.
        • O HoleriteVerba.ValorTotal é calculado como INSS_Gerado_Fl_Ferias + VG_DescINSS687_RescPagasMesmoMesFEG - INSS_FeG_VlrFinal_FL_Reg.
        • Se o HoleriteVerba.ValorTotal resultante for positivo, um erro crítico (SysFunc_Panico) é disparado, indicando uma inconsistência.
  • Fórmula matemática:

    • SC_Multiplos_Vinculos = VG_MV_Empregado + VG_MV_ContribIndividual + VG_BaseINSS_RescPagasMesmoMesOutroVinculo
    • INSS_Multiplos_Vinculos = Func_Truncar(SC_Multiplos_Vinculos * VG_AliqINSSProLabore / 100M) (para Contribuição Individual)
    • SC_NossoMaisOutro = VG_SCFeriasG_limite + SC_Multiplos_Vinculos (limitado a VG_VlrTetoSCINSS)
    • INSS_FeG_VlrFinal_FL_Reg = Func_ArredondamentoPadrao((SC_NossoMaisOutro - SC_Multiplos_Vinculos) * VG_AliqINSSEmpregado_Sal_FeG_API / 100M) (ou Func_Truncar se alíquota for 7.50M)
    • INSS_FeG_VlrFinal_FL_Reg = Func_ArredondamentoPadrao(SC_NossoMaisOutro * VG_AliqINSSEmpregado_Sal_FeG_API / 100M) - INSS_Multiplos_Vinculos (se INSS_Multiplos_Vinculos > 0, com a mesma lógica de arredondamento/truncamento)
    • INSS_Gerado_Fl_Ferias = Positivo(RecuperarValorTotalVerba("685")) + VG_DescINSS685_RescPagasMesmoMesFEG - VG_RestINSS287_RescPagasMesmoMesFEG
    • HoleriteVerba.ValorTotal = INSS_Gerado_Fl_Ferias + VG_DescINSS687_RescPagasMesmoMesFEG - INSS_FeG_VlrFinal_FL_Reg
  • Variáveis Utilizadas:

    • Lancamento
    • HoleriteVerba
    • VG_SCFeriasG_limite
    • VG_DescINSS685_RescPagasMesmoMesFEG
    • VG_RestINSS287_RescPagasMesmoMesFEG
    • INSS_Multiplos_Vinculos
    • VG_MV_Empregado
    • VG_MV_ContribIndividual
    • VG_BaseINSS_RescPagasMesmoMesOutroVinculo
    • VG_VlrTetoSCINSS, VG_AliqINSSProLabore
    • SC_NossoMaisOutro
    • VG_AliqINSSEmpregado_Sal_FeG_API
    • INSS_FeG_VlrFinal_FL_Reg
    • INSS_Gerado_Fl_Ferias
    • Empregador
    • CasasDecimais.
  • Condições Especiais:

    • if (Func_ValidarExistenciaLancamento(Lancamento)): Verifica lançamento manual.
    • if (Lancamento.ValorTotal == -0.01M): Condição específica para zerar o valor em caso de lançamento manual com -0.01M.
    • if (VG_SCFeriasG_limite == 0M && (...) == 0M): Condição de validação para abortar o cálculo.
    • if (VG_MV_Empregado > 0M): Ativa cálculo de INSS para múltiplos vínculos de empregado.
    • if (VG_MV_ContribIndividual > 0M): Ativa cálculo de INSS para múltiplos vínculos de contribuinte individual.
    • if (SC_NossoMaisOutro > VG_VlrTetoSCINSS): Limita a base de cálculo ao teto do INSS.
    • if (VG_AliqINSSEmpregado_Sal_FeG_API == 7.50M): Altera o método de arredondamento para truncamento.
    • if (INSS_Multiplos_Vinculos > 0M): Ativa o ajuste do INSS de férias para múltiplos vínculos.
    • if (INSS_Gerado_Fl_Ferias < INSS_FeG_VlrFinal_FL_Reg): Condição principal para a ativação e cálculo do complemento.
    • if (Empregador.PossuiParametro("ExibirPercentualDeVerbaComQuatroCasasDecimais") && Empregador.RecuperaValorParametro("ExibirPercentualDeVerbaComQuatroCasasDecimais") == "1"): Define o número de casas decimais para o percentual.
    • if (HoleriteVerba.ValorTotal > 0M): Dispara um erro crítico se o valor final do complemento for positivo.

🔔 Eventos/Gatilhos

  • Quando a verba é calculada:
    • É calculada automaticamente no processo de Folha Regular (IdProcesso 1).
    • Disparada quando o INSS de férias já gerado (principalmente pela verba 685) é menor do que o INSS de férias devido, considerando a base de cálculo consolidada e múltiplos vínculos.
    • Pode ser influenciada por lançamentos manuais.

🔗 Dependências

  • Verbas Relacionadas:
    • 685: RecuperarValorTotalVerba("685") - Verba de INSS de Férias principal.
    • 287: VG_RestINSS287_RescPagasMesmoMesFEG - Verba de restituição de INSS.
  • Tipo de Relação:
    • Dependência: A verba 687 depende do valor total da verba 685 e de ajustes relacionados à verba 287 para determinar se um complemento é necessário.
  • Fluxo de Cálculo: A verba 685 deve ser calculada antes da verba 687, pois seu valor é um dos componentes para determinar o complemento.

🧩 Funções

  • Func_ValidarExistenciaLancamento(Lancamento): Verifica se há um lançamento manual para a verba.
  • Positivo(decimal valor): Retorna o valor se for positivo, ou 0 se negativo/nulo.
  • RecuperarValorTotalVerba("código"): Obtém o valor total de uma verba específica já calculada.
  • Func_Calcula_INSS_Outro_Vinculo(SC_Multiplos_Vinculos): Calcula o INSS para múltiplos vínculos de empregado (fórmula 41828).
  • Func_Truncar(decimal valor): Trunca um valor decimal para o número de casas decimais padrão.
  • Func_ArredondamentoPadrao(decimal valor): Arredonda um valor decimal usando o padrão do sistema.
  • SysFunc_Panico("mensagem"): Dispara um erro crítico no sistema, interrompendo o processamento.
  • Empregador.PossuiParametro("nome"): Verifica a existência de um parâmetro configurado para o empregador.
  • Empregador.RecuperaValorParametro("nome"): Recupera o valor de um parâmetro configurado para o empregador.
  • String.Format("{0} {1}%", ...): Formata uma string para exibição.

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

  • BaseConsolidada = Minimo(BaseFerias + BaseMultiplosVinculos, TetoINSS)

  • INSSDevido = Se(INSS_MV > 0, AplicarArredondamento(BaseConsolidada * Aliq / 100) - INSS_MV, AplicarArredondamento((BaseConsolidada - BaseMV) * Aliq / 100))

  • ValorTotal = Negativo(Absoluto(Minimo(0, (INSS_685_Gerado + INSS_687_Resc) - INSSDevido)))


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

Se (Configuracao.RubricaInativa == Verdadeiro OU Solicitacao.HoleriteSimulado == Verdadeiro OU Solicitacao.TipoProcesso == EnumTipoProcessoBO.Provisoes) { HoleriteVerba = null; InterromperCalculo(); }

Restrição por Tipo de Folha Processada Se (Configuracao.ListaTiposFolhaPermitidos.Tamanho > 0 E Nao Configuracao.ListaTiposFolhaPermitidos.Contem(Solicitacao.TipoFolha)) { EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “Cálculo cancelado: Tipo de folha (” + Solicitacao.TipoFolha + ”) não habilitado.”); HoleriteVerba = null; InterromperCalculo(); }

Trata Lançamento Manual (Sobregravação Direta ou Zeramento via Flag de Desativação -0.01) Definir PossuiLancamentoManual = Func_ValidarExistenciaLancamento(Lancamento); Se (PossuiLancamentoManual == Verdadeiro) { Se (Lancamento.ValorTotal == -0.01) { EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “Lançamento manual de neutralização (-0.01) detectado. Zerando verba.”); HoleriteVerba = null; InterromperCalculo(); } Senao { RubricaGerada = CriarInstanciaRubrica(Configuracao.CodigoRubricaDestino); RubricaGerada.Percentual = Lancamento.Percentual; RubricaGerada.ValorTotal = Negativo(Positivo(Lancamento.ValorTotal)); AdicionarAoHolerite(RubricaGerada); EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “Valor processado via Lançamento Manual Exclusivo: R$ ” + RubricaGerada.ValorTotal); InterromperCalculo(); } }

2. Determinação das Bases de Cálculo, Múltiplos Vínculos e INSS Devido

Definir BaseFeriasEmpresa = Positivo(VariaveisGlobais.VG_SCFeriasG_limite); Definir CodigoRubricaINSS685 = Configuracao.CodigoRubricaINSSFeriasPrincipal > 0 ? Configuracao.CodigoRubricaINSSFeriasPrincipal : 685; Definir INSSFeriasJaGerado = Positivo(RecuperarValorTotalVerba(CodigoRubricaINSS685)) + Positivo(VariaveisGlobais.VG_DescINSS685_RescPagasMesmoMesFEG) - Positivo(VariaveisGlobais.VG_RestINSS287_RescPagasMesmoMesFEG);

Se (BaseFeriasEmpresa <= 0.00 E INSSFeriasJaGerado <= 0.00) { EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “Cálculo cancelado: Ausência de base de INSS Férias e de INSS já gerado.”); HoleriteVerba = null; InterromperCalculo(); }

Consolidação de Múltiplos Vínculos (Outras Empresas / Contribuição Individual) Definir BaseMVEmpregado = Positivo(VariaveisGlobais.VG_MV_Empregado); Definir BaseMVProLabore = Positivo(VariaveisGlobais.VG_MV_ContribIndividual); Definir BaseMVRescisaoOutroVinculo = Positivo(VariaveisGlobais.VG_BaseINSS_RescPagasMesmoMesOutroVinculo);

Definir BaseMultiplosVinculosTotal = BaseMVEmpregado + BaseMVProLabore + BaseMVRescisaoOutroVinculo; Definir ImpostoMultiplosVinculos = 0.00;

Se (BaseMVEmpregado > 0.00 OU BaseMVRescisaoOutroVinculo > 0.00) { ImpostoMultiplosVinculos = ImpostoMultiplosVinculos + Func_Calcula_INSS_Outro_Vinculo(BaseMVEmpregado + BaseMVRescisaoOutroVinculo); } Se (BaseMVProLabore > 0.00) { Definir AliqProLabore = VariaveisGlobais.VG_AliqINSSProLabore > 0.00 ? VariaveisGlobais.VG_AliqINSSProLabore : 11.00; ImpostoMultiplosVinculos = ImpostoMultiplosVinculos + Func_Truncar((BaseMVProLabore * AliqProLabore) / 100.00); }

Apuração da Base Total Consolidada Limitada ao Teto da Previdência Definir TetoINSSGeral = Positivo(VariaveisGlobais.VG_VlrTetoSCINSS); Definir BaseConsolidadaBruta = BaseFeriasEmpresa + BaseMultiplosVinculosTotal; Definir BaseConsolidadaTeto = Minimo(BaseConsolidadaBruta, TetoINSSGeral);

Cálculo do INSS Férias Devido com Aplicação de Alíquota e Truncamento de Borda (Exceção 7,50%) Definir AliquotaEmpregado = Positivo(VariaveisGlobais.VG_AliqINSSEmpregado_Sal_FeG_API); Definir INSSFeriasDevidoFinal = 0.00;

Se (ImpostoMultiplosVinculos > 0.00) { Definir ImpostoBrutoConsolidado = 0.00; Se (AliquotaEmpregado == 7.50 E Configuracao.TruncarAliquotaSeteMeio == Verdadeiro) { ImpostoBrutoConsolidado = Func_Truncar((BaseConsolidadaTeto * AliquotaEmpregado) / 100.00); } Senao { ImpostoBrutoConsolidado = Func_ArredondamentoPadrao((BaseConsolidadaTeto * AliquotaEmpregado) / 100.00); } INSSFeriasDevidoFinal = ImpostoBrutoConsolidado - ImpostoMultiplosVinculos; } Senao { Definir BasePropriaLiquida = BaseConsolidadaTeto - BaseMultiplosVinculosTotal; Se (AliquotaEmpregado == 7.50 E Configuracao.TruncarAliquotaSeteMeio == Verdadeiro) { INSSFeriasDevidoFinal = Func_Truncar((BasePropriaLiquida * AliquotaEmpregado) / 100.00); } Senao { INSSFeriasDevidoFinal = Func_ArredondamentoPadrao((BasePropriaLiquida * AliquotaEmpregado) / 100.00); } }

INSSFeriasDevidoFinal = Maximo(0.00, INSSFeriasDevidoFinal);

3. Apuração da Diferença Complementar e Validação de Consistência (Sem Pânico)

Se (INSSFeriasJaGerado >= INSSFeriasDevidoFinal) { EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “INSS já recolhido/gerado (R$ ” + INSSFeriasJaGerado + ”) cobre o INSS devido (R$ ” + INSSFeriasDevidoFinal + ”). Complemento desnecessário.”); HoleriteVerba = null; InterromperCalculo(); }

Definir ComplementoCalculado = INSSFeriasJaGerado + Positivo(VariaveisGlobais.VG_DescINSS687_RescPagasMesmoMesFEG) - INSSFeriasDevidoFinal;

Substituição da Exceção de Pânico por Tratativa Elegante Se (ComplementoCalculado > 0.00) { EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “ALERTA: Valor complementar apurado foi positivo (R$ ” + ComplementoCalculado + ”), o que geraria um provento indevido. Operação neutralizada com segurança.”); HoleriteVerba = null; InterromperCalculo(); }

Definir ValorDescontoFinal = Absoluto(ComplementoCalculado);

4. Gravação dos Dados no Holerite e Enquadramento Fiscal

Definir CasasDecimaisPercentual = Configuracao.ExibirPercentualComQuatroCasas == Verdadeiro ? 4 : 2;

RubricaGerada = CriarInstanciaRubrica(Configuracao.CodigoRubricaDestino); RubricaGerada.Quantidade = BaseFeriasEmpresa; RubricaGerada.Percentual = Func_Arredondamento(AliquotaEmpregado, CasasDecimaisPercentual); RubricaGerada.ValorTotal = Negativo(ValorDescontoFinal);

Enquadramento Fiscal Conforme Metadados (Natureza 9201 - Contribuição Previdenciária / INSS: ISE, FGTS: ISE, IRRF: ISE) RubricaGerada.IncideINSS = EnumIncidencia.ISENTO; RubricaGerada.IncideFGTS = EnumIncidencia.ISENTO; RubricaGerada.IncideIRRF = EnumIncidencia.ISENTO;

AdicionarAoHolerite(RubricaGerada);

Registro Estruturado da Memória de Cálculo EscreverMemoria(“[DESC_INSS_FERIAS_COMPL]”, “Desconto de INSS Férias Complementar apurado com sucesso. Base Férias: R$ ” + BaseFeriasEmpresa + ” | INSS Devido Total: R$ ” + INSSFeriasDevidoFinal + ” | INSS Anterior: R$ ” + INSSFeriasJaGerado + ” | Desconto Complementar: R$ ” + RubricaGerada.ValorTotal);


Parametrizações Propostas para Reestruturação

1. REGRAS DE BASE DE CÁLCULO E VÍNCULO DE RUBRICAS

[ ] Inativar Rubrica (Desativa o cálculo globalmente) Código da Rubrica de INSS Férias Principal: [ 685 ] [X] Considerar Deduções de Rescisão de Férias Pagas no Mesmo Mês (Verba 287) [X] Permitir Lançamento Manual de Neutralização Direta com Valor (-0,01)

2. DIRETRIZES DE ARREDONDAMENTO E EXCEÇÕES DE ALÍQUOTA

Casas Decimais para Exibição do Percentual de Alíquota: ( ) 2 Casas Decimais (ex: 7,50%) (*) 4 Casas Decimais (ex: 7,5000%)

[X] Utilizar Truncamento (Func_Truncar) para Alíquota Inicial de 7,50% └─ Caso desmarcado, utiliza o arredondamento padrão do sistema para todas as faixas.

3. CONSISTÊNCIA DE CÁLCULO E PREVENÇÃO DE ERROS

Ação para Inconsistência de Sinal (Quando Resultado Apurado for Provento/Positivo): (*) NEUTRALIZAR_E_REGISTRAR_ALERTA (Cancela a verba com segurança sem derrubar a folha) ( ) INTERROMPER_PROCESSAMENTO_PANICO (Emite erro fatal de sistema)

4. AMBIENTE E TIPOS DE FOLHA PERMITIDOS

Tipos de Processamento Habilitados: [X] Regular / Mensal (IdProcesso 1) [X] Rescisão / Desligamento [X] Rescisão Complementar [ ] Férias / Recesso Remunerado

5. ENCARGOS E ENQUADRAMENTO FISCAL

Enquadramento Fiscal eSocial (Natureza 9201 - Contribuição Previdenciária): INSS: [ ISE - Isento ] FGTS: [ ISE - Isento ] IRRF: [ ISE - Isento ]

Clientes com mesma regra

  • Todos os Clientes (Padrão e Específicos): A especificação original determina o cálculo do complemento de INSS sobre férias comparando o imposto devido consolidado (incluindo teto e múltiplos vínculos) com o imposto já descontado pela verba 685. O mecanismo dynamic absorve a regra integralmente. O tratamento específico para a alíquota de 7,50% (truncamento em vez de arredondamento) e o lançamento de neutralização com valor -0.01 passam a ser controlados por parâmetros nativos da interface.

Status Documental

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

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