1. O que é o Monitor de Inadimplência?

O Monitor de Inadimplência é uma ferramenta desenvolvida para permitir que usuários visualizem, acompanhem e registrem informações sobre beneficiários de planos de saúde que possuem faturas vencidas. O sistema também identifica aqueles que se enquadram na RN nº 593 da ANS, norma que regulamenta o cancelamento de contratos por inadimplência.

2. Funcionalidades do Sistema

3. Parâmetros (SX6)

A rotina leva em consideração dois parâmetros para retornar os títulos:

4. Estrutura da Interface

> Parte Superior: Dados do Beneficiário

> Parte Inferior Esquerda: Títulos em Atraso

> Parte Inferior Direita: Contatos Realizadas

5. Passo a Passo das Funcionalidades

Opção de Menu Novo Filtro

  1. Clique no botão Novo Filtro.

  2. Uma janela com um formulário será exibida.

  3. Preencha os dados conforme a necessidade.

  4. Clique em OK.

Importante: Quanto menos parâmetros informados, maior pode ser o tempo de processamento devido à quantidade de registros retornados.

Opção de Menu Atualizar Dados

  1. Clique no botão Atualizar Dados.

  2. O sistema irá recarregar os dados com base nos parâmetros preenchidos anteriormente.

Importante: Utilize esta funcionalidade sempre após registrar uma interação manualmente, garantindo a atualização correta dos filtros da RN 593. Sempre que uma interação for inserida manualmente, uma mensagem será exibida no topo da tela como lembrete para atualizar os dados.


Opção de Menu Enviar Notificação de Inadimplência

  1. Selecione uma ou mais linhas na tabela da esquerda.

  2. Clique no botão Enviar Notificação de Inadimplência.


     3. Clicando em Não! O sistema exibira uma lista contendo os beneficiários e os clientes que estão com alguma não conformidade no e-mail. No caso abaixo, o e-mail não foi configurado.

 


      4. Ao confirmar a ação clicando em 'Sim', o sistema exibirá uma janela solicitando que o usuário escolha se o envio dos e-mails deve ser feito apenas para o titular ou para o titular e o cliente.


      5. Clicando em uma das opções, o sistema iniciará o processo de envio dos e-mails. 




Importante:  Toda configuração relacionada ao layout do e-mail, remetente e assunto do e-mail são configurados na rotina Gerenciador de Contas de E-mail, clique no link para acessar a documentação completa DT Gerenciador de Contas de E-mail.

Opção de Menu Documentação

Opção de Menu Filtros RN 593

📝 Como funciona?

✅ Premissas para atender a RN 593:

  1. Cobrança no nível da família (BA3_COBNIV == '1)

  2. Data-base do contrato >= 01/12/2024 (BA3_DATBAS)

  3. Dois ou mais títulos em atraso, sendo um com 50 dias ou mais

🔽 Filtros Disponíveis





Importante: A data de digitação é usada porque em algumas situações há o atraso na atualização do status de internação no sistema (BE4_DATPRO). Isso evita o risco de enviar cobrança a beneficiários internados.



📚 Clique no link para mais informações sobre a RN 593: Resolução Normativa 593 - ANS



8. Criação de Botões Customizados

Através do Ponto de entrada PLMON001, é possível criar botões na rotina, permitindo a criação de quantos botões forem necessários com as funcionalidades desejadas.

> É necessário retornar um array bidimensional.


function PLMON001()
     LOCAL aMenu := {}
     AADD(aMenu, {"Teste Botão 1", {||U_botao1()}})
     AADD(aMenu, {"Teste Botão 2", {||U_botao2()}})
return aMenu

9. Ponto de Entrada do Status de Contato

Através do Ponto de entrada PLMON002, é possível criar status relacionados à tabela de contatos realizados (BRZ).

Function PLMON002()
   LOCAL aStatus := {}
   AADD(aStatus, {"BRZ_DATCON < dDataBase .AND. BRZ_CNFCON == '0'", "BLUE", "Data anterior a hoje"})
RETURN aStatus




📚 Para mais informações sobre como utilizar ponto de entrada em MVC, consulte o documento: https://tdn.totvs.com/display/public/framework/AdvPl+utilizando+MVC


10. Recuperar Seleção de Beneficiários

 


delinquency.monitor.DelinquencyInterface():getSelecBeneficiaries()
//dados do beneficiário
oJSelecBeneficiaries[nPosicao]["beneficiarie"]["register"] - Matrícula completa do beneficiário
oJSelecBeneficiaries[nPosicao]["beneficiarie"]["name"    ] - Nome do beneficiário
oJSelecBeneficiaries[nPosicao]["beneficiarie"]["email"]    - E-mail do beneficiário

//dados do cliente
oJSelecBeneficiaries[nPosicao]["client"]["code" ] - Código do cliente e loja
oJSelecBeneficiaries[nPosicao]["client"]["name" ] - Nome do cliente
oJSelecBeneficiaries[nPosicao]["client"]["email"] - e-mail do cliente

    

11. Inserção de Dados na Tabela de Contatos Realizados (BRZ)

Dependendo da quantidade de contatos que precisam ser registrados — como no caso do envio de e-mails em massa para diversos beneficiários, onde é necessário gerar um registro de contato para cada envio —, é comum que customizações precisem lidar com essa geração em larga escala.

Para facilitar esse processo, criamos uma solução simplificada que exige apenas os dados dinâmicos obrigatórios a serem gravados. Essa abordagem reduz a complexidade e torna o processo mais ágil.

Utilizamos um conjunto de métodos desenvolvidos com foco em objetividade e performance, tendo como base a classe FWBulk, que permite inserções em massa com alta eficiência.


//Instancia a classe de serviços
oMonitorService := totvs.protheus.health.delinquency.monitor.DelinquencyService():New()

// Cria o objeto bulk
oMonitorService:createBulkContact()

For nSendMail := 1 To 100

	//Nesse momento os dados são gravados em um objeto mas serão efetivamente gravados na tabela quando somar 1000 registros inseridos no objeto
	//ou a cada execução do método flushBulkContact
   self:oMonitorService:insertDataBulkContact("00010001123456011", "01", "E-mail enviado para o beneficiário")
Next

//efetua a gravação dos dados contidos no objeto na tabela BRZ
oMonitorService:flushBulkContact()


Sintaxe

DelinquencyService:insertDataBulkContact(< cBenefRegister >, < cTypeContact >, < cDescriptionContact >)

Parâmetros

Nome

Tipo

Descrição

Obrigatório

cBenefRegister caractereMatrícula do beneficiário que será registrada no campo Matrícula (BRZ_MATRIC).X
cTypeContact caractereCódigo do tipo de contato, conforme a tabela genérica SX5 (código TY), que será registrado no campo Origem Cont. (BRZ_ORICON).X
cDescriptionContact caractereDescrição do contato que será registrada no campo  Motivo (BRZ_MOTIVO).X

Retorno

Nome

Tipo

Descrição

lRet

booleano

true - Em caso de sucesso.

false - Em caso de erro.

Importante: Ambos os métodos retornam true em caso de sucesso e false em caso de falha. Quando ocorre um erro, o sistema registra os detalhes no arquivo de log monitorInadimplencia.log, localizado no diretório logpls.


Os campos abaixo serão gravados da seguinte forma a cada inserção de dados no objeto através do método insertDataBulkContact:

Cont. Conf? (BRZ_CNFCON) - Por padrão será gravado com o valor 0 (Recebimento não confirmar).

Data Contato (BRZ_DATCON) - Irá gravar a data em que o registro foi gerado. 

Hora Contato (BRZ_HORCON) - Irá gravar a hora em que o registro foi gerado. 

Data Criação (BRZ_DATCRI) - Irá gravar a data em que o registro foi gerado. 

Hora Criação (BRZ_HORCRI) -  Irá gravar a hora em que o registro foi gerado. 

12. Consulta a Tabelas Temporárias

Os dois grids (beneficiários e títulos) utilizam tabelas temporárias. Para ter acesso utilizando a sintexe ADVPL, use o alias BENEINAD (beneficiários) e BENEFINA (títulos).

cMatricula := BENEINAD->(BA1_CODINT + BA1_CODEMP + BA1_MATRIC + BA1_TIPREG + BA1_DIGITO)
cTitulo    := BENEFINA->E1_NUM 


Os campos disponíveis na tabela temporária BENEINAD são:

BA1_NOMUSR - Nome do beneficiário
BA1_NOMSOC - Nome social
BA1_CODINT   - Código da operadora
BA1_CODEMP - Código da empresa
BA1_MATRIC   - Matrícula da família
BA1_TIPREG    - Tipo de registro
BA1_DIGITO    - Digito da matrícula
BA1_CONEMP - Código do contrato
BA1_VERCON - Versão do contrato
BA1_SUBCON - Código do subcontrato
BA1_VERSUB - Versão do subcontrato
BA1_MATANT - Matrícula antiga
BA1_EMAIL - E-mail do beneficiário
BA3_CODCLI - Código do cliente
BA3_LOJA     - Loja do cliente
BA3_DATBAS - Data de inclusão da família
BA3_COBNIV - Cobra no nível da família?


totvs.protheus.health.delinquency.monitor.DelinquencyService():realNameBeneficiaries()
totvs.protheus.health.delinquency.monitor.DelinquencyService():realNameInvoices()

Ambiente Com Banco de Dados Oracle

O monitor de inadimplência utiliza tabelas temporárias para armazenar tanto os dados dos beneficiários quanto os títulos em aberto. No entanto, o banco de dados Oracle possui uma particularidade: os dados inseridos em uma tabela temporária durante uma sessão não ficam visíveis em outras sessões.

Por esse motivo, quando for necessário acessar os dados para depuração ou implementar pontos de entrada, deve-se configurar o parâmetro MV_DEBMONT como true (.T.). Quando esse parâmetro está ativado — e somente no Oracle — são criadas duas tabelas físicas:

Essas tabelas são recriadas sempre que a rotina é encerrada e reaberta. Além disso, qualquer novo filtro ou atualização também provoca a exclusão e recriação das tabelas com os dados atualizados.

Importante: