Wiki / SuperCalculo ~6 min

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:

    1. 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 tipo TaxaAdesao.
    2. Para cada lançamento encontrado (objBeneficioSaude): a. Verifica se a DataReferencia da solicitação está dentro do período de vigência (DataInicioVigencia e DataFimVigencia) do lançamento. b. Confere se o ValorLancamento do 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 o idComplementoVerba do 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 o ValorTotal como o negativo do ValorLancamento do benefício. h. Adiciona esta verba ao holerite 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.ListaLancamentoBeneficioSaude
    • objBeneficioSaude.CodVerba
    • objBeneficioSaude.TipoLancamento
    • EnumBeneficioSaudeBO.TaxaAdesao
    • Solicitacao.DataReferencia
    • objBeneficioSaude.DataInicioVigencia
    • objBeneficioSaude.DataFimVigencia
    • objBeneficioSaude.ValorLancamento
    • objBeneficioSaude.idComplementoVerba
    • ExecucaoCalculo.ListaVerba
    • objVerba.ListaComplementoVerba
    • objComplemento.IdSistemaOriginal
    • objComplemento.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).

🧩 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 objeto HoleriteVerbaBO.
  • 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.TaxaAdesao e 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 (via SysFunc_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

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