Wiki / SuperCalculo ~7 min

685 - Desc. INSS Férias

Metadados

  • Código: 685
  • 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: 7561

🧮 Regra Geral

  • Lógica de Cálculo:

    1. A verba verifica a existência de lançamentos futuros de rateio de férias (VG_ListaLancamentoFuturoRateioFeriasMestre). Se não houver, o cálculo é interrompido.
    2. Recupera a base de cálculo de INSS de férias do empregado (SC_INSS_Ferias) a partir da verba 3121 (“Sal. Contrib. INSS Férias (Empregado, até limite)”). Se a verba 3121 não for encontrada, um erro crítico (SysFunc_Panico) é disparado.
    3. Se a base de INSS de férias (vlr_SC_INSS_Ferias_Empregado) for maior que zero, o cálculo prossegue.
    4. Calcula o TotalINSSParaDescontar aplicando a alíquota de INSS do empregado (VG_AliqINSSEmpregado_Sal_FeG_API) sobre o limite de salário de contribuição de férias (VG_SCFeriasG_limite), e arredonda o valor (Func_ArredondamentoPadrao).
    5. Ajusta o TotalINSSParaDescontar subtraindo valores de INSS de férias já descontados em rescisões ou no mesmo mês (VG_DescINSS685_RescPagasMesmoMesFEG, VG_685_INSS_FEG_MesmoMes).
    6. Recupera uma lista de verbas 325 (SysFunc_RecuperarListaHoleriteVerba("325")), que representam os períodos de rateio de férias.
    7. Define o número de casas decimais para o percentual da verba (2 ou 4), com base no parâmetro ExibirPercentualDeVerbaComQuatroCasasDecimais do empregador.
    8. Itera sobre cada período de férias na lista da verba 325 (excluindo Percentual == 999).
    9. Para cada período, cria uma nova verba de holerite para o desconto de INSS de férias, definindo seu número de período de rateio, percentual (alíquota de INSS arredondada) e descrição final.
    10. Calcula a BaseINSSdestePeriodo e o descontoINSSdestePeriodo proporcionalmente aos dias de férias do período atual (hvFerias.Quantidade) em relação ao total de dias de férias do período de referência (VG_PeriodoFeriasReferencia.DiasFerias). O desconto é truncado (Func_Truncar).
    11. Se for um período intermediário (não o último), atribui a BaseINSSdestePeriodo à Quantidade da nova verba e o valor negativo de descontoINSSdestePeriodo ao ValorTotal.
    12. Se for o último período, atribui o SaldoBaseINSS restante à Quantidade e o SaldoINSSParaDescontar restante (negativo) ao ValorTotal, garantindo que o total seja descontado.
    13. Define as incidências de INSS, FGTS e IRRF da nova verba com base nas incidências da verba original 685.
    14. Cria um lançamento futuro (SysFunc_CriarLancamentoFuturo) para a nova verba, associando-o à data de referência do período de férias e ao tipo de folha “Regular”.
    15. Popula a memória de cálculo (MemoriaCalculo) com detalhes do cálculo, adicionando uma tabela se a data de referência for a partir de 01/03/2020.
    16. Adiciona a nova verba à lista de verbas do holerite.
  • Fórmula matemática:

    • TotalINSSParaDescontar = Func_ArredondamentoPadrao((VG_SCFeriasG_limite - Deducao_SC) * VG_AliqINSSEmpregado_Sal_FeG_API / 100M)
    • TotalINSSParaDescontar = TotalINSSParaDescontar - VG_DescINSS685_RescPagasMesmoMesFEG - VG_685_INSS_FEG_MesmoMes
    • BaseINSSdestePeriodo = Func_ArredondamentoPadrao(vlr_SC_INSS_Ferias_Empregado / VG_PeriodoFeriasReferencia.DiasFerias * hvFerias.Quantidade)
    • descontoINSSdestePeriodo = Func_Truncar(TotalINSSParaDescontar / VG_PeriodoFeriasReferencia.DiasFerias * hvFerias.Quantidade)
    • ValorTotal (períodos intermediários) = Negativo(descontoINSSdestePeriodo)
    • ValorTotal (último período) = Negativo(SaldoINSSParaDescontar)
  • Variáveis Utilizadas:

    • VG_ListaLancamentoFuturoRateioFeriasMestre
    • SC_INSS_Ferias
    • vlr_SC_INSS_Ferias_Empregado
    • VG_SCFeriasG_limite
    • VG_AliqINSSEmpregado_Sal_FeG_API
    • VG_DescINSS685_RescPagasMesmoMesFEG
    • VG_685_INSS_FEG_MesmoMes
    • lista325
    • VG_PeriodoFeriasReferencia.DiasFerias
    • hvFerias.Quantidade
    • hvFerias.Percentual,
    • Empregador.PossuiParametro
    • Solicitacao.DataReferencia
    • VG_MC_DescINSS_SAL_FeG_API.
  • Condições Especiais:

    • A verba só é calculada se houver lançamentos futuros de rateio de férias (VG_ListaLancamentoFuturoRateioFeriasMestre não nulo/vazio) e se a base de INSS de férias (verba 3121) for encontrada e positiva.
    • O número de casas decimais para o percentual da verba pode ser 2 ou 4, dependendo de um parâmetro do empregador (ExibirPercentualDeVerbaComQuatroCasasDecimais).
    • Há uma lógica diferenciada para o cálculo do valor e base do INSS entre os períodos intermediários e o último período de rateio de férias.
    • A memória de cálculo é formatada de forma diferente para datas de referência a partir de 01/03/2020.

🔗 Dependências

  • Verbas Relacionadas:
    • 3121: “Sal. Contrib. INSS Férias (Empregado, até limite)”
    • 325: Verba utilizada para identificar e iterar sobre os períodos de rateio de férias.
  • Tipo de Relação:
    • 3121: Dependência. A verba 685 utiliza o valor da verba 3121 como sua base de cálculo. A ausência da verba 3121 resulta em um erro crítico.
    • 325: Dependência. A verba 685 itera sobre os registros da verba 325 para determinar os períodos e dias de férias a serem rateados.

🧩 Funções

  • RecuperarHoleriteBase("3121"): Recupera um objeto de base de holerite para a verba especificada.
  • Func_ArredondamentoPadrao(): Realiza o arredondamento padrão de valores monetários.
  • SysFunc_RecuperarListaHoleriteVerba("325"): Obtém uma lista de verbas de holerite com o código especificado.
  • CriarVerbaHoleriteVerbaBO(): Instancia um novo objeto de verba de holerite.
  • Negativo(): Converte um valor para seu equivalente negativo.
  • Func_Truncar(): Trunca um valor decimal, removendo as casas decimais excedentes sem arredondar.
  • SysFunc_CriarLancamentoFuturo(): Cria um registro de lançamento futuro para a verba.
  • SysFunc_Panico(): Dispara um erro crítico que interrompe o processamento.
  • SysFunc_NovaData(): Cria um objeto DateTime a partir de dia, mês e ano.
  • Argumento(), EscreverMemoria(): Funções para construção e formatação da memória de cálculo.

💡 Proposta de Novo Cálculo

Fórmula proposta (padronizada):

  • TotalINSSDescontar = Arredondar((Minimo(BaseINSS_3121, TetoINSS) * AliqEfetiva / 100)) - INSS_Ja_Descontado_Resc_MesmoMes

  • DescontoINSS_Periodo_Intermediario = Truncar((TotalINSSDescontar / TotalDiasFerias) * DiasFerias_Periodo)

  • DescontoINSS_Ultimo_Periodo = TotalINSSDescontar - Somatorio(DescontoINSS_Periodos_Anteriores)


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]”, “Cálculo cancelado: Tipo de folha (” + Solicitacao.TipoFolha + ”) não habilitado.”); HoleriteVerba = null; InterromperCalculo(); }

Validação de Existência de Lançamento Futuro / Rateio Ativo Definir ListaRateio = ObterLancamentosFuturosRateioFerias(); Se (ListaRateio == null OU ListaRateio.Tamanho == 0) { EscreverMemoria(“[DESC_INSS_FERIAS]”, “Cálculo interrompido: Ausência de lançamentos futuros para rateio de férias.”); HoleriteVerba = null; InterromperCalculo(); }

2. Determinação da Base de Cálculo do INSS de Férias e Deduções Preliminares

Definir CodigoBaseINSS = Configuracao.CodigoBaseINSSFerias > 0 ? Configuracao.CodigoBaseINSSFerias : 3121; Definir InstanciaBaseINSS = RecuperarHoleriteBase(CodigoBaseINSS);

Fallback Seguro sem Pânico Se (InstanciaBaseINSS == null) { EscreverMemoria(“[DESC_INSS_FERIAS]”, “ALERTA: Base de INSS Férias (Código ” + CodigoBaseINSS + ”) não localizada. Assumindo valor zerado sem interrupção de pânico.”); HoleriteVerba = null; InterromperCalculo(); }

Definir BaseINSSTotalFerias = Positivo(InstanciaBaseINSS.Valor); Se (BaseINSSTotalFerias <= 0.00) { EscreverMemoria(“[DESC_INSS_FERIAS]”, “Base de INSS Férias zerada ou negativa. Desconto cancelado.”); HoleriteVerba = null; InterromperCalculo(); }

Apuração do Teto, Alíquota Progressiva e Deduções de Períodos Anteriores/Mesmo Mês Definir TetoSalarioContribuição = Positivo(VariaveisGlobais.VG_SCFeriasG_limite); Definir AliquotaEfetivaINSS = Positivo(VariaveisGlobais.VG_AliqINSSEmpregado_Sal_FeG_API);

Definir BaseSujeitaIncidencia = Minimo(BaseINSSTotalFerias, TetoSalarioContribuição); Definir TotalINSSBrutoApurado = Func_ArredondamentoPadrao((BaseSujeitaIncidencia * AliquotaEfetivaINSS) / 100.00);

Abatimento de INSS Férias Já Descontados em Rescisões ou Processamentos Paralelos do Mês Definir DescontosAnteriores = Positivo(VariaveisGlobais.VG_DescINSS685_RescPagasMesmoMesFEG) + Positivo(VariaveisGlobais.VG_685_INSS_FEG_MesmoMes); Definir TotalINSSParaDescontar = TotalINSSBrutoApurado - DescontosAnteriores;

Se (TotalINSSParaDescontar <= 0.00) { EscreverMemoria(“[DESC_INSS_FERIAS]”, “Total de INSS Férias a descontar zerado após dedução de processamentos anteriores (R$ ” + DescontosAnteriores + ”).”); HoleriteVerba = null; InterromperCalculo(); }

3. Iteração do Rateio Proporcional entre Períodos de Férias

Definir CodigoRubricaIteracao = Configuracao.CodigoRubricaDiasRateio > 0 ? Configuracao.CodigoRubricaDiasRateio : 325; Definir ListaPeriodosFerias = SysFunc_RecuperarListaHoleriteVerba(CodigoRubricaIteracao);

Definir TotalDiasFerias = Positivo(VariaveisGlobais.VG_PeriodoFeriasReferencia.DiasFerias); Se (TotalDiasFerias <= 0) { TotalDiasFerias = 1; // Prevenção contra divisão por zero }

Definir SaldoBaseINSSRestante = BaseINSSTotalFerias; Definir SaldoINSSParaDescontarRestante = TotalINSSParaDescontar; Definir CasasDecimaisPercentual = Configuracao.ExibirPercentualComQuatroCasas == Verdadeiro ? 4 : 2;

Definir IndiceAtual = 0; Definir TotalPeriodos = ListaPeriodosFerias.Tamanho;

Para Cada HvFerias em ListaPeriodosFerias { Ignorar períodos marcados como cancelados/inválidos (ex: Percentual == 999) Se (HvFerias.Percentual == 999) { Continuar; }

IndiceAtual = IndiceAtual + 1; Definir EhUltimoPeriodo = (IndiceAtual == TotalPeriodos);

Definir DiasFeriasPeriodo = Positivo(HvFerias.Quantidade); Definir BaseINSSPeriodo = 0.00; Definir DescontoINSSPeriodo = 0.00;

Se (Nao EhUltimoPeriodo) { BaseINSSPeriodo = Func_ArredondamentoPadrao((BaseINSSTotalFerias / TotalDiasFerias) * DiasFeriasPeriodo); DescontoINSSPeriodo = Func_Truncar((TotalINSSParaDescontar / TotalDiasFerias) * DiasFeriasPeriodo);

SaldoBaseINSSRestante = SaldoBaseINSSRestante - BaseINSSPeriodo; SaldoINSSParaDescontarRestante = SaldoINSSParaDescontarRestante - DescontoINSSPeriodo; } Senao { Alocação integral do saldo restante no último período para ajuste de dízima/arredondamento BaseINSSPeriodo = SaldoBaseINSSRestante; DescontoINSSPeriodo = SaldoINSSParaDescontarRestante; }

4. Instanciação e Gravação da Verba de Desconto Rateada no Holerite e Lançamento Futuro

RubricaGerada = CriarInstanciaRubrica(Configuracao.CodigoRubricaDestino); RubricaGerada.PeriodoRateio = HvFerias.PeriodoRateio; RubricaGerada.Percentual = Func_Arredondamento(AliquotaEfetivaINSS, CasasDecimaisPercentual); RubricaGerada.Quantidade = BaseINSSPeriodo; RubricaGerada.ValorTotal = Negativo(DescontoINSSPeriodo);

Incidências Fiscais Conforme Metadados da Verba (INSS: ISE, FGTS: ISE, IRRF: ISE - Isento na competência de destino) RubricaGerada.IncideINSS = EnumIncidencia.ISENTO; RubricaGerada.IncideFGTS = EnumIncidencia.ISENTO; RubricaGerada.IncideIRRF = EnumIncidencia.ISENTO;

AdicionarAoHolerite(RubricaGerada);

Disparo de Lançamento Futuro para Integração na Folha Mensal/Competência Específica SysFunc_CriarLancamentoFuturo(RubricaGerada, “Regular”, HvFerias.DataReferenciaPeriodo); }

5. Registro Estruturado da Memória de Cálculo

EscreverMemoria(“[DESC_INSS_FERIAS]”, “Rateio de INSS Férias processado em ” + TotalPeriodos + ” período(s). Base Total: R$ ” + BaseINSSTotalFerias + ” | Desconto Total: R$ ” + TotalINSSParaDescontar);


Parametrizações Propostas para Reestruturação

1. REGRAS DE BASE DE CÁLCULO E DEPENDÊNCIAS DE RUBRICAS

[ ] Inativar Rubrica (Desativa o cálculo globalmente) Código da Base de Salário de Contribuição INSS Férias: [ 3121 ] Código da Rubrica de Identificação de Períodos/Dias Rateio: [ 325 ]

Tratamento para Ausência de Base de Cálculo: (*) CANCELAR_CALCULO_SILENCIOSO (Registra alerta em memória sem derrubar a folha) ( ) PARAR_PROCESSAMENTO_PANICO (Emite erro fatal de sistema)

2. REGRAS DE PRECISÃO, CASAS DECIMAIS E ARREDONDAMENTO

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

Método de Distribuição de Arredondamento do Rateio: (*) AJUSTE_SALDO_NO_ULTIMO_PERIODO (Garante batimento exato do valor total) ( ) ARREDONDAMENTO_PADRAO_TODOS_PERIODOS

3. DEDUÇÕES DE PROCESSAMENTOS PARALELOS E ANTERIORES

[X] Deduzir Valores de INSS Férias Descontados em Rescisões no Mesmo Mês [X] Deduzir Valores de INSS Férias Já Apurados em Outros Holerites no Mesmo Mês

4. LANÇAMENTOS FUTUROS E TIPOS DE FOLHA PERMITIDOS

[X] Gerar Lançamento Futuro Automático na Competência do Rateio Tipo de Folha Destino do Lançamento Futuro: [ Regular ]

Tipos de Processamento Habilitados para Apuração: [X] Férias / Recesso Remunerado [X] Regular / Mensal [X] Rescisão / Desligamento

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 calcula o desconto do INSS sobre férias rateado proporcionalmente aos dias de cada período de férias (identificados via verba 325), obtendo a base da verba 3121 e aplicando ajuste de saldo de arredondamento no último período. O mecanismo dynamic absorve a regra integralmente. O tratamento de precisão das casas decimais do percentual (2 ou 4 casas) e as deduções de pagamentos no mesmo mês passam a ser administrados por flags diretas de configuração.

Status Documental

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

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