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:
- 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.ValorTotalfor exatamente-0.01M, oHoleriteVerba.ValorTotalé zerado. Caso contrário, o percentual e o valor total do lançamento manual são utilizados diretamente.
- Se sim, e o
- Validação Inicial (Sem Lançamento Manual): Se não houver lançamento manual, a verba só será calculada se
VG_SCFeriasG_limitefor 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). - Cálculo de Múltiplos Vínculos:
- A base de cálculo para múltiplos vínculos (
SC_Multiplos_Vinculos) é somada a partir deVG_MV_Empregado,VG_MV_ContribIndividualeVG_BaseINSS_RescPagasMesmoMesOutroVinculo. - Se
VG_MV_Empregadofor maior que zero, o INSS de múltiplos vínculos (INSS_Multiplos_Vinculos) é calculado pela funçãoFunc_Calcula_INSS_Outro_Vinculo. - Se
VG_MV_ContribIndividualfor maior que zero, o INSS de múltiplos vínculos é calculado truncando o resultado deSC_Multiplos_Vinculosmultiplicado pela alíquota de INSS pró-labore (VG_AliqINSSProLabore).
- A base de cálculo para múltiplos vínculos (
- 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 emSC_NossoMaisOutro. Este valor é limitado ao teto do INSS (VG_VlrTetoSCINSS). - 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 viaFunc_ArredondamentoPadrao. - Exceção de Alíquota: Se a alíquota
VG_AliqINSSEmpregado_Sal_FeG_APIfor7.50M, o cálculo utilizaFunc_Truncarem vez deFunc_ArredondamentoPadrao.
- O valor do INSS de férias (
- Ajuste para Múltiplos Vínculos: Se
INSS_Multiplos_Vinculosfor maior que zero, oINSS_FeG_VlrFinal_FL_Regé recalculado aplicando a alíquota sobre a base consolidada (SC_NossoMaisOutro) e subtraindo oINSS_Multiplos_Vinculos. A exceção de alíquota de7.50McomFunc_Truncaré aplicada novamente. - 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_Feriasfor menor que oINSS_FeG_VlrFinal_FL_Regcalculado, 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
ExibirPercentualDeVerbaComQuatroCasasDecimaisdo empregador. - A descrição final da verba é formatada para incluir o percentual.
- O
HoleriteVerba.ValorTotalé calculado comoINSS_Gerado_Fl_Ferias + VG_DescINSS687_RescPagasMesmoMesFEG - INSS_FeG_VlrFinal_FL_Reg. - Se o
HoleriteVerba.ValorTotalresultante for positivo, um erro crítico (SysFunc_Panico) é disparado, indicando uma inconsistência.
- O percentual da verba é definido pela alíquota do empregado, arredondado para 2 ou 4 casas decimais, dependendo do parâmetro
- O INSS de férias já gerado (
- Verificação de Lançamento Manual: A fórmula primeiro verifica se existe um lançamento manual (
-
Fórmula matemática:
SC_Multiplos_Vinculos = VG_MV_Empregado + VG_MV_ContribIndividual + VG_BaseINSS_RescPagasMesmoMesOutroVinculoINSS_Multiplos_Vinculos = Func_Truncar(SC_Multiplos_Vinculos * VG_AliqINSSProLabore / 100M)(para Contribuição Individual)SC_NossoMaisOutro = VG_SCFeriasG_limite + SC_Multiplos_Vinculos(limitado aVG_VlrTetoSCINSS)INSS_FeG_VlrFinal_FL_Reg = Func_ArredondamentoPadrao((SC_NossoMaisOutro - SC_Multiplos_Vinculos) * VG_AliqINSSEmpregado_Sal_FeG_API / 100M)(ouFunc_Truncarse alíquota for7.50M)INSS_FeG_VlrFinal_FL_Reg = Func_ArredondamentoPadrao(SC_NossoMaisOutro * VG_AliqINSSEmpregado_Sal_FeG_API / 100M) - INSS_Multiplos_Vinculos(seINSS_Multiplos_Vinculos > 0, com a mesma lógica de arredondamento/truncamento)INSS_Gerado_Fl_Ferias = Positivo(RecuperarValorTotalVerba("685")) + VG_DescINSS685_RescPagasMesmoMesFEG - VG_RestINSS287_RescPagasMesmoMesFEGHoleriteVerba.ValorTotal = INSS_Gerado_Fl_Ferias + VG_DescINSS687_RescPagasMesmoMesFEG - INSS_FeG_VlrFinal_FL_Reg
-
Variáveis Utilizadas:
LancamentoHoleriteVerbaVG_SCFeriasG_limiteVG_DescINSS685_RescPagasMesmoMesFEGVG_RestINSS287_RescPagasMesmoMesFEGINSS_Multiplos_VinculosVG_MV_EmpregadoVG_MV_ContribIndividualVG_BaseINSS_RescPagasMesmoMesOutroVinculoVG_VlrTetoSCINSS,VG_AliqINSSProLaboreSC_NossoMaisOutroVG_AliqINSSEmpregado_Sal_FeG_APIINSS_FeG_VlrFinal_FL_RegINSS_Gerado_Fl_FeriasEmpregadorCasasDecimais.
-
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.
- 685:
- 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.01passam 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