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:
- 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. - 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. - Se a base de INSS de férias (
vlr_SC_INSS_Ferias_Empregado) for maior que zero, o cálculo prossegue. - Calcula o
TotalINSSParaDescontaraplicando 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). - Ajusta o
TotalINSSParaDescontarsubtraindo valores de INSS de férias já descontados em rescisões ou no mesmo mês (VG_DescINSS685_RescPagasMesmoMesFEG,VG_685_INSS_FEG_MesmoMes). - Recupera uma lista de verbas 325 (
SysFunc_RecuperarListaHoleriteVerba("325")), que representam os períodos de rateio de férias. - Define o número de casas decimais para o percentual da verba (2 ou 4), com base no parâmetro
ExibirPercentualDeVerbaComQuatroCasasDecimaisdo empregador. - Itera sobre cada período de férias na lista da verba 325 (excluindo
Percentual == 999). - 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.
- Calcula a
BaseINSSdestePeriodoe odescontoINSSdestePeriodoproporcionalmente 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). - Se for um período intermediário (não o último), atribui a
BaseINSSdestePeriodoàQuantidadeda nova verba e o valor negativo dedescontoINSSdestePeriodoaoValorTotal. - Se for o último período, atribui o
SaldoBaseINSSrestante àQuantidadee oSaldoINSSParaDescontarrestante (negativo) aoValorTotal, garantindo que o total seja descontado. - Define as incidências de INSS, FGTS e IRRF da nova verba com base nas incidências da verba original 685.
- 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”. - 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. - Adiciona a nova verba à lista de verbas do holerite.
- A verba verifica a existência de lançamentos futuros de rateio de férias (
-
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_MesmoMesBaseINSSdestePeriodo = 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_ListaLancamentoFuturoRateioFeriasMestreSC_INSS_Feriasvlr_SC_INSS_Ferias_EmpregadoVG_SCFeriasG_limiteVG_AliqINSSEmpregado_Sal_FeG_APIVG_DescINSS685_RescPagasMesmoMesFEGVG_685_INSS_FEG_MesmoMeslista325VG_PeriodoFeriasReferencia.DiasFeriashvFerias.QuantidadehvFerias.Percentual,Empregador.PossuiParametroSolicitacao.DataReferenciaVG_MC_DescINSS_SAL_FeG_API.
-
Condições Especiais:
- A verba só é calculada se houver lançamentos futuros de rateio de férias (
VG_ListaLancamentoFuturoRateioFeriasMestrenã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.
- A verba só é calculada se houver lançamentos futuros de rateio de férias (
🔗 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 objetoDateTimea 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