781 - Desc. Assist. Médica Taxa Adesão [BN]
Metadados
- Código: 781
- Tipo: Desconto
- INSS: ISE
- FGTS: ISE
- IRRF: ISE
- Natureza eSocial: 9219 - Desconto de assistência médica ou odontológica - Plano coletivo empresarial
- DSR: Não
- Médias: Não
- Impacto Financeiro: Não
- Impacto Contábil: Sim
- Sequência: 191
🧮 Regra Geral
-
Lógica de Cálculo:
- A verba busca na lista de lançamentos de benefício saúde do empregado (
Empregado.Historico.ListaLancamentoBeneficioSaude) por registros que correspondam ao código da verba (781) e sejam do tipoTaxaAdesao. - Para cada lançamento encontrado (
objBeneficioSaude): a. Verifica se aDataReferenciada solicitação está dentro do período de vigência (DataInicioVigenciaeDataFimVigencia) do lançamento. b. Confere se oValorLancamentodo benefício é diferente de zero. c. Se as condições acima forem atendidas, busca o complemento da verba (objComplemento) na lista de complementos da verba 781, utilizando oidComplementoVerbado lançamento. d. Determina a descrição final do complemento: se as datas de início e fim de vigência do lançamento estiverem no mesmo mês e ano (SysFunc_MesmoMesAno), usa a descrição original do complemento; caso contrário, adiciona ” - Parcelado” à descrição. e. Cria um novo item de verba para o holerite (HoleriteVerbaBO). f. Atribui a descrição final formatada (Descrição da Verba - Complemento) e o ID do complemento de origem. g. Define oValorTotalcomo o negativo doValorLancamentodo benefício. h. Adiciona esta verba ao holerite do empregado.
- A verba busca na lista de lançamentos de benefício saúde do empregado (
-
Fórmula matemática:
ValorTotal = -1 * objBeneficioSaude.ValorLancamento
-
Variáveis Utilizadas:
codigo(781)descricao(“Desc. Assist. Médica Taxa Adesão [BN]”)Empregado.Historico.ListaLancamentoBeneficioSaudeobjBeneficioSaude.CodVerbaobjBeneficioSaude.TipoLancamentoEnumBeneficioSaudeBO.TaxaAdesaoSolicitacao.DataReferenciaobjBeneficioSaude.DataInicioVigenciaobjBeneficioSaude.DataFimVigenciaobjBeneficioSaude.ValorLancamentoobjBeneficioSaude.idComplementoVerbaExecucaoCalculo.ListaVerbaobjVerba.ListaComplementoVerbaobjComplemento.IdSistemaOriginalobjComplemento.Descricao.
-
Condições Especiais:
- Filtro de lançamentos:
r.CodVerba.ToString() == codigo && r.TipoLancamento == EnumBeneficioSaudeBO.TaxaAdesao. - Validação de vigência:
Solicitacao.DataReferencia >= objBeneficioSaude.DataInicioVigencia && Solicitacao.DataReferencia <= objBeneficioSaude.DataFimVigencia. - Validação de valor:
objBeneficioSaude.ValorLancamento != 0M. - Condição de parcelamento:
SysFunc_MesmoMesAno(objBeneficioSaude.DataInicioVigencia, objBeneficioSaude.DataFimVigencia).
- Filtro de lançamentos:
🧩 Funções
SysFunc_MesmoMesAno(DateTime data1, DateTime data2): Verifica se duas datas estão no mesmo mês e ano.CriarVerbaHoleriteVerbaBO(int codigo, string descricao): Função auxiliar para instanciar um objetoHoleriteVerbaBO.Negativo(decimal valor): Função auxiliar para retornar o valor negativo de um decimal.
💡 Proposta de Novo Cálculo
Fórmula proposta (padronizada):
ValorTotalDesconto = Negativo(Arredondar(Minimo(Soma(ValoresLancamentosTaxaAdesaoSaude), Minimo(TetoMaximoDesconto, Maximo(0, TotalProventos - TotalOutrosDescontos)))))
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 Tipos de Folha Permitidos para Processamento Se (Nao Configuracao.TiposFolhaPermitidos.Contem(Solicitacao.TipoFolha)) { EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Cálculo ignorado: Tipo de folha (” + Solicitacao.TipoFolha + ”) não habilitado para a verba 781.”); HoleriteVerba = null; InterromperCalculo(); }
Trava de Re-processamento (Se valor total já foi recalculado ou fixado externamente) Se (HoleriteVerba != null E HoleriteVerba.ValorTotal != 0.00 E Nao Configuracao.PermitirRecalculo) { Retornar HoleriteVerba; }
2. Determinação da Base e Captação dos Lançamentos de Taxa de Adesão
Definir ListaLancamentosProcessar = NovaLista(); Definir ValorDescontoBrutoTotal = 0.00;
Busca primária no Histórico de Benefícios de Saúde (Assistência Médica / Taxa de Adesão) Definir LancamentosAdesao = Empregado.Historico.ListaLancamentoBeneficioSaude .Filtrar(b => (b.CodVerba == Configuracao.CodigoRubricaDestino OU b.TipoLancamento == EnumBeneficioSaudeBO.TaxaAdesao) E b.ValorLancamento != 0.00 E (Solicitacao.DataReferencia >= b.DataInicioVigencia E Solicitacao.DataReferencia <= b.DataFimVigencia));
Se (LancamentosAdesao != null E LancamentosAdesao.Tamanho > 0) { Para Cada itemAdesao Em LancamentosAdesao { ListaLancamentosProcessar.Adicionar(itemAdesao); ValorDescontoBrutoTotal = ValorDescontoBrutoTotal + itemAdesao.ValorLancamento; } EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Captação efetuada do histórico de saúde (Taxa Adesão). Total apurado: R$ ” + ValorDescontoBrutoTotal); } Fallback para Lançamento Manual Direto (Movimento Mensal) Senao Se (Configuracao.PermitirLancamentoManual == Verdadeiro E Solicitacao.PossuiLancamentoManual(Configuracao.CodigoRubricaDestino)) { Definir ValorManual = Positivo(Solicitacao.ObterValorLancamentoManual(Configuracao.CodigoRubricaDestino)); Se (ValorManual > 0.00) { ValorDescontoBrutoTotal = ValorManual; EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Utilizando valor de lançamento manual direto: R$ ” + ValorDescontoBrutoTotal); } }
Se (ValorDescontoBrutoTotal <= 0.00) { EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Cálculo interrompido: Nenhum lançamento de taxa de adesão médica ativo ou informado.”); HoleriteVerba = null; InterromperCalculo(); }
3. Aplicação de Limites, Tetos e Proteção de Margem Líquida
Definir ValorDescontoAjustadoTotal = ValorDescontoBrutoTotal;
Aplicação de Teto Máximo Parametrizado por Competência Se (Configuracao.TetoMaximoDesconto > 0.00 E ValorDescontoAjustadoTotal > Configuracao.TetoMaximoDesconto) { ValorDescontoAjustadoTotal = Configuracao.TetoMaximoDesconto; EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Valor total de taxa de adesão limitado ao teto parametrizado: R$ ” + ValorDescontoAjustadoTotal); }
Proteção de Margem Líquida (Garantia de Não-Negativação do Holerite) Definir ProventoLiquidoDisponivel = Positivo(Holerite.ObterTotalProventos()) - Positivo(Holerite.ObterTotalDescontosExceto(Configuracao.CodigoRubricaDestino));
Se (Configuracao.RespeitarMargemLiquida == Verdadeiro E ProventoLiquidoDisponivel < ValorDescontoAjustadoTotal) { Se (Configuracao.AcaoExcessoSaldo == EnumAcaoExcesso.LimitarAoProventoLiquido) { ValorDescontoAjustadoTotal = Maximo(0.00, ProventoLiquidoDisponivel); EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Desconto limitado pela margem disponível (Bruto: R$ ” + ValorDescontoBrutoTotal + ” | Permissível: R$ ” + ValorDescontoAjustadoTotal + ”).”); } Senao Se (Configuracao.AcaoExcessoSaldo == EnumAcaoExcesso.LancarInsuficienciaSaldo) { Definir SaldoDevedor = ValorDescontoAjustadoTotal - ProventoLiquidoDisponivel; ValorDescontoAjustadoTotal = Maximo(0.00, ProventoLiquidoDisponivel); AtualizarOuCriarVerbaInformacao(Configuracao.CodigoRubricaInsuficienciaSaldo, SaldoDevedor); EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Insuficiência de Saldo gerada para Taxa de Adesão Médica: R$ ” + SaldoDevedor); } }
4. Gravação dos Itens no Holerite e Formatação de Descrições
Se (ValorDescontoAjustadoTotal > 0.00) { Proporcionalização do valor ajustado entre os lançamentos caso tenha havido corte por teto ou margem Definir FatorAjuste = ValorDescontoAjustadoTotal / ValorDescontoBrutoTotal;
Se (ListaLancamentosProcessar.Tamanho > 0) { Para Cada item Em ListaLancamentosProcessar { Definir ValorItemCalculado = Func_ArredondamentoPadrao(item.ValorLancamento * FatorAjuste);
Se (ValorItemCalculado > 0.00) { Definir TextoComplemento = ""; Se (item.idComplementoVerba != null) { Definir ObjetoComplemento = ObterComplementoVerba(item.idComplementoVerba); Se (ObjetoComplemento != null E NaoVazio(ObjetoComplemento.Descricao)) { TextoComplemento = ObjetoComplemento.Descricao; } }
Definir DescricaoFinal = Configuracao.DescricaoRubrica; Se (NaoVazio(TextoComplemento)) { DescricaoFinal = DescricaoFinal + ” - ” + TextoComplemento; }
Identificação de Parcelamento (Se vigência abrange meses/anos distintos) Definir EhParcelado = Nao Func_MesmoMesAno(item.DataInicioVigencia, item.DataFimVigencia); Se (EhParcelado E Configuracao.DestacarParcelamentoDescricao == Verdadeiro) { DescricaoFinal = DescricaoFinal + ” - ” + Configuracao.SufixoParcelado; }
RubricaGerada = CriarInstanciaRubrica(Configuracao.CodigoRubricaDestino); RubricaGerada.Quantidade = item.Quantidade > 0 ? item.Quantidade : 1.00; RubricaGerada.Percentual = 0.00; RubricaGerada.ValorTotal = Negativo(ValorItemCalculado); RubricaGerada.Descricao = DescricaoFinal; RubricaGerada.IdComplementoSistemaOrigem = item.idComplementoVerba;
Metadados Fiscais (Natureza eSocial 9219 | INSS: ISE, FGTS: ISE, IRRF: ISE) RubricaGerada.IncideINSS = EnumIncidencia.ISENTO; RubricaGerada.IncideFGTS = EnumIncidencia.ISENTO; RubricaGerada.IncideIRRF = EnumIncidencia.ISENTO;
AdicionarAoHolerite(RubricaGerada); } } } Senao { Gravação direta de lançamento manual RubricaGerada = CriarInstanciaRubrica(Configuracao.CodigoRubricaDestino); RubricaGerada.Quantidade = 1.00; RubricaGerada.Percentual = 0.00; RubricaGerada.ValorTotal = Negativo(Func_ArredondamentoPadrao(ValorDescontoAjustadoTotal)); RubricaGerada.Descricao = Configuracao.DescricaoRubrica;
RubricaGerada.IncideINSS = EnumIncidencia.ISENTO; RubricaGerada.IncideFGTS = EnumIncidencia.ISENTO; RubricaGerada.IncideIRRF = EnumIncidencia.ISENTO;
AdicionarAoHolerite(RubricaGerada); }
EscreverMemoria(“[DESC_MEDICA_TAXA_ADESAO]”, “Verba 781 processada com sucesso. Valor total descontado: R$ ” + ValorDescontoAjustadoTotal); } Senao { HoleriteVerba = null; InterromperCalculo(); }
Parametrizações Propostas para Reestruturação
1. REGRAS DE CAPTAÇÃO E INTEGRAÇÃO DO BENEFÍCIO
[ ] Inativar Rubrica (Desativa o cálculo globalmente) Origem Primária dos Dados: (*) Histórico de Benefícios de Saúde (Empregado.Historico.ListaLancamentoBeneficioSaude) ( ) Lançamento Manual no Movimento Mensal (Valor em R$)
Filtro do Tipo de Benefício na Fonte: (*) Apenas Lançamentos do Tipo Taxa de Adesão (EnumBeneficioSaudeBO.TaxaAdesao) ( ) Todos os Lançamentos Vinculados ao Código da Rubrica
[X] Permitir Sobregravação / Fallback via Lançamento Manual na Folha
Tipos de Folha Permitidos para Processamento: [X] Regular / Mensal [X] Rescisão / Desligamento [X] Rescisão Complementar [ ] Folha de 13º Salário
2. FORMATAÇÃO DE DESCRIÇÃO E DETALHAMENTO DE EXIBIÇÃO
Descrição Base da Rubrica: [ Desc. Assist. Médica Taxa Adesão [BN] ]
[X] Concatenar Descrição com o Complemento da Verba (Ex: Plano / Operadora) [X] Destacar Operações Parceladas na Descrição da Verba └─ Sufixo para Lançamentos Parcelados: [ Parcelado ] └─ Regra de Detecção de Parcelamento: Vigência com mês ou ano divergentes (Func_MesmoMesAno == Falso)
3. LIMITES, MARGEM E PROTEÇÃO DO LÍQUIDO
Teto Máximo de Desconto por Competência (R$): [ 0.00 ] (0,00 = Sem Teto)
[X] Respeitar Margem Limite do Provento Líquido (Impedir Holerite Negativo)
Ação em Caso de Insuficiência de Provento Líquido: (*) Limitar o desconto proporcionalmente ao saldo líquido disponível ( ) Cancelar o desconto integralmente e emitir aviso de pendência ( ) Limitar o desconto e gerar Rubrica Informativa de Insuficiência de Saldo
Código da Rubrica Informativa de Insuficiência de Saldo: [ ]
4. OBRIGAÇÕES FISCAIS E ESOCIAL
Natureza eSocial: [ 9219 - Desconto de assistência médica ou odontológica - Plano coletivo empresarial ]
Incidências Oficiais: INSS: [ ISE - Isento ] FGTS: [ ISE - Isento ] IRRF: [ ISE - Isento ]
Clientes com mesma regra
- Todos os Clientes (Processamento de Taxa de Adesão de Assistência Médica com Detecção de Parcelado): A regra geral atual consulta os lançamentos no histórico de benefícios de saúde filtrados por
EnumBeneficioSaudeBO.TaxaAdesaoe código 781, valida o intervalo de vigência da solicitação, recupera o complemento da verba, insere a tag ”- Parcelado” quando as datas cobrirem meses/anos distintos (viaSysFunc_MesmoMesAno) e gera o desconto com sinal negativo no holerite. O fluxo dynamic unificado absorve integralmente esse comportamento de forma nativa e parametrizável por interface, sem necessidade de hardcode.
Status Documental
- Status: Documentada
- Origem: export do Notion + catálogo da wiki
- Fonte rastreável:
30dc75ea2e8381428be6e5f0a0be8948