| Produto: | TOTVS Saúde Planos |
|---|---|
| Linha de Produto: | Linha Protheus |
| Segmento: | Saúde |
| Módulo: | Faturamento |
| Função: | Monitor de Inadimplência |
| Issue : | DSAUBE-26610 |
Desenvolver uma rotina que permita aos usuários visualizar os beneficiários inadimplentes, juntamente com os respectivos títulos em aberto. A rotina também deverá identificar os beneficiários que atendem aos critérios estabelecidos pela Resolução Normativa nº 593, possibilitando sua categorização conforme diferentes status.
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.
Consulta de beneficiários inadimplentes.
Visualização de títulos em aberto.
Registro de interações realizadas com os beneficiários.
Envio de e-mail de notificação de inadimplência.
Filtros específicos da RN 593.
A rotina leva em consideração dois parâmetros para retornar os títulos:
MV_PLSTIT - Tipo do título (campo E1_TIPO)
MV_PLPFE11 - Prefixo do título (campo E1_PREFIXO)

2. Uma tela exibindo os parâmetros iniciais será mostrada.

3. Preencha os campos e clique em OK.
📚 Caso a rotina não esteja disponível, será necessário criar a opção de menu via módulo configurador. Para mais informações acesse: Inclur Opção de Menu no Protheus |

Matrícula
Nome do Beneficiário
Código do Cliente (SA1)
Código da Loja Relacionado ao Cliente (SA1)
Nome do Cliente (SA1)
Nome Social
Data de Internação
Matrícula Antiga
Operadora
Empresa
Contrato
Subcontrato
Prefixo
Número do Título
Vencimento
Dias em Atraso
Valor
Vencimento Real
Emissão
Mês Base
Ano Base
Parcela
Tipo
Número do Lote de Cobrança
Contrato
Subcontrato
Código do Cliente
Loja do Cliente
Confirmação de recebimento do contato
Data do contato
Hora do contato
Origem do contato
Matrícula do beneficiário posicionado
Motivo do contato
Data da criação do registro no sistema
Hora da criação do registro no sistema

Clique no botão Novo Filtro.
Uma janela com um formulário será exibida.
Preencha os dados conforme a necessidade.
Clique em OK.
Quanto menos parâmetros informados, maior pode ser o tempo de processamento devido à quantidade de registros retornados. |
Clique no botão Atualizar Dados.
O sistema irá recarregar os dados com base nos parâmetros preenchidos anteriormente.
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.
|
Para que o sistema consiga enviar o e-mail de notificação, é necessário configurar a conta de e-mail do remetente na rotina Gerenciador de Contas de E-mail. Dessa forma, o sistema identificará que, ao enviar o e-mail de notificação, deverá utilizar a configuração vinculada ao método SendNotification, que é o mesmo utilizado pela rotina do Monitor de Inadimplência para o envio de e-mails. 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. |
Selecione uma ou mais linhas na tabela da esquerda.
Clique no botão Enviar Notificação de Inadimplência.

3. Clicando em Não! O sistema exibirá 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.




Ao abrir o Monitor, todos os beneficiários inadimplentes são exibidos, independentemente da RN 593.
Os filtros RN 593 refinam os dados carregados, mantendo apenas os que atendem à norma.
Cobrança no nível da família (BA3_COBNIV == '1)
Data-base do contrato >= 01/12/2024 (BA3_DATBAS)
Dois ou mais títulos em atraso, sendo um com 50 dias ou mais
Mais de 50 Dias de Atraso Sem Envio de Notificação
Deve atender todas as premissas
Não possuir interações registradas
❌ Não estar internado (BE4_DTDIGI)
Mais de 50 Dias de Atraso Com Prazo de Retorno Expirado
Atender todas as premissas
Possuir interações
A última interação ocorreu há 10 dias ou MAIS
❌ Não estar internado (BE4_DTDIGI)
Mais de 50 Dias de Atraso Dentro do Prazo de Retorno
Atender todas as premissas
Possuir interações
A última interação ocorreu há 10 dias ou MENOS
❌ Não estar internado (BE4_DTDIGI)
BE4_DTDIGI.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. |
Limpar Filtro
Desfaz o último filtro e restaura a exibição de todos os inadimplentes.
📚 Clique no link para mais informações sobre a RN 593: Resolução Normativa 593 - ANS |
A seção de Contatos Realizados é onde ficam registradas todas as interações com o cliente, seja quando a empresa entra em contato com o beneficiário ou quando o beneficiário entra em contato com a empresa.
Essa seção é extremamente importante, pois influencia diretamente a análise dos beneficiários que se enquadram na RN 593. Com base nas informações inseridas nessa área, o sistema determina em qual filtro da RN 593 o beneficiário será exibido.
Os dados podem ser inseridos manualmente, através da inserção direta utilizando ReckLock ou através de métodos desenvolvidos especificamente para a gravação dos dados de contatos realizados conforme o item 12. Inserção de Dados na Tabela de Contatos Realizados (BRZ) deste documento.
Manualmente é possível incluir, alterar, visualizar e excluir um registro.


Campos disponíveis:
> 0 – Recebimento não confirmado
> 1 – Recebimento confirmado
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.
Na primeira posição: descrição do botão.
Na segunda posição: bloco de código com a função a ser executada.
function PLMON001()
LOCAL aMenu := {}
AADD(aMenu, {"Teste Botão 1", {||U_botao1()}})
AADD(aMenu, {"Teste Botão 2", {||U_botao2()}})
return aMenu |

Através do Ponto de entrada PLMON002, é possível criar status relacionados à tabela de contatos realizados (BRZ).
Primeira posição: condição do status
Segunda posição: cor
Terceira posição: descrição
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: AdvPl Utilizando MVC |
|
Nome | Tipo | Descrição |
|---|---|---|
oJson | Json | Retorna um objeto json com a seguinte estrutura |
oJSelecBeneficiaries := delinquency.monitor.DelinquencyInterface():getSelecBeneficiaries() //O objeto retorna os seguintes atributos //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 |
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() |
|
Nome | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| cBenefRegister | Caracter | Matrícula do beneficiário que será registrada no campo Matrícula (BRZ_MATRIC). | X |
| cTypeContact | Caracter | Có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 | Caracter | Descrição do contato que será registrada no campo Motivo (BRZ_MOTIVO). | X |
Nome | Tipo | Descrição |
|---|---|---|
lRet | booleano | true - Em caso de sucesso. false - Em caso de erro. |
Ambos os métodos retornam |
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 confirmado).
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.
Os dois grids (beneficiários e títulos) utilizam tabelas temporárias. Para ter acesso utilizando a sintaxe 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 completo do beneficiário.
BA1_NOMSOC – Nome social do beneficiário (caso aplicável).
BA1_CODINT – Código da operadora ou entidade interna.
BA1_CODEMP – Código da empresa.
BA1_MATRIC – Matrícula da família do beneficiário.
BA1_TIPREG – Tipo de registro (ex: titular, dependente, etc.).
BA1_DIGITO – Dígito verificador da matrícula.
BA1_CONEMP – Código do contrato associado à família.
BA1_VERCON – Versão do contrato.
BA1_SUBCON – Código do subcontrato).
BA1_VERSUB – Versão do subcontrato.
BA1_MATANT – Matrícula anterior da família.
BA1_EMAIL – E-mail de contato do beneficiário.
BA3_CODCLI – Código do cliente associado à família.
BA3_LOJA – Código da loja do cliente.
BA3_DATBAS – Data de inclusão da família no sistema.
BA3_COBNIV – Indica se a cobrança é feita no nível da família.
Os campos disponíveis na tabela temporária BENEFINA são:
E1_VENCTO – Data de vencimento do título.
E1_EMISSAO – Data de emissão do título.
E1_VENCREA – Data de vencimento real.
E1_PREFIXO – Prefixo do documento.
E1_NUM – Número do documento.
E1_PARCELA – Número da parcela do título.
E1_TIPO – Tipo do título (ex: duplicata, boleto, etc.).
E1_VALOR – Valor total do título.
E1_MESBASE – Mês de referência relacionado ao título.
E1_ANOBASE – Ano de referência relacionado ao título.
E1_PLNUCOB – Código do lote de cobrança em que o título foi gerado.
E1_CONEMP – Código do contrato da empresa.
E1_VERCON – Versão do contrato.
E1_SUBCON – Código do subcontrato.
E1_VERSUB – Versão do subcontrato.
E1_CLIENTE – Código do cliente relacionado ao título.
E1_LOJA – Código da loja do cliente.
BM1_CODINT – Código da operadora ou entidade interna.
BM1_CODEMP – Código da empresa.
BM1_MATRIC – Matrícula do beneficiário.
BM1_TIPREG – Tipo de registro do beneficiário.
BM1_DIGITO – Dígito verificador da matrícula.
BM1_MATUSU – Código do usuário relacionado à matrícula.
Em casos em que os dados das tabelas temporárias precisem ser utilizadas diretamente em uma query, em um join com outra tabela do sistema por exemplo, se faz necessário informar o nome real da tabela no banco de dados, pois o alias não funciona para tabelas temporárias. Dessa forma, disponibilizamos dois métodos que basicamente retornam o nome real das tabelas temporárias de beneficiário e do financeiro naquele momento (o nome muda dinamicamente a cada execução da rotina ou atualização da tela).
|
Nome | Tipo | Descrição |
|---|---|---|
cAlias | Caracter | Retorna o nome real da tabela temporária de beneficiários no banco de dados. |
cRealTable := totvs.protheus.health.delinquency.monitor.DelinquencyService():realNameBeneficiaries() oExecQuery := FWExecStatement():New() //não é necessário utilizar o campo D_E_L_E_T_ pois a temporária possui apenas registros ativos cSQL := " SELECT *" cSQL += " FROM " + cRealTable oExecQuery:SetQuery( cSQL ) cAliasTemp := oExecQuery:OpenAlias() |
|
Nome | Tipo | Descrição |
|---|---|---|
cAlias | Caracter | Retorna o nome real da tabela temporária dos dados financeiros no banco de dados |
cRealTable := totvs.protheus.health.delinquency.monitor.DelinquencyService():realNameInvoices() oExecQuery := FWExecStatement():New() //não é necessário utilizar o campo D_E_L_E_T_ pois a temporária possui apenas registros ativos cSQL := " SELECT *" cSQL += " FROM " + cRealTable oExecQuery:SetQuery( cSQL ) cAliasTemp := oExecQuery:OpenAlias() cTitulo := (cAliasTemp)->E1_NUM |
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 seçã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:
BENEFINA_COPY, com os dados dos beneficiários (grid superior)
BENEINAD_COPY, com os títulos em aberto (grid inferior esquerdo).
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.
|
Inclusões na tabela SX2 (Tabela):
| Tabela | BRZ |
| Modo | Compartilhado |
| Modo Unidade | Exclusivo |
| Modo Empresa | Exclusivo |
| Chave Única | BRZ_FILIAL+BRZ_MATRIC+DTOS(BRZ_DATCRI)+BRZ_HORCRI |
| Nome | Contatos Realizados |
Inclusão no Arquivo SIX (índices):
Índice | Ordem | Chave | Descrição |
|---|---|---|---|
| BRZ | 1 | BRZ_FILIAL+BRZ_MATRIC+DTOS(BRZ_DATCRI)+BRZ_HORCRI | Filial + Matrícula + Data criação registro + Hora criação registro |
| BRZ | 2 | BRZ_FILIAL+BRZ_MATRIC+DTOS(BRZ_DATCON) | Filial + Matrícula + Data do contato |
| BRZ | 3 | BRZ_FILIAL+DTOS(BRZ_DATCON) | Filial + Data do contato |
| BRZ | 4 | BRZ_FILIAL+DTOS(BRZ_DATCRI) | Filial + Data criação registro |
Inclusão de itens no Arquivo SX3 (campos da tabela):
Campo | Tipo | Tamanho | Decimal | Titulo | Descrição | Picture | Validação | Relação | F3 | Trigger | Usado | Obrigatório | Exibe Browser | Visual | Contexto | CBox | Inicializa Browse (INIBRW) | Help |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| BRZ_FILIAL | Caracter | 8 | 0 | Filial | Filial do Sistema | Sim | Não | Não | Filial do Sistema | |||||||||
| BRZ_CNFCON | Caracter | 1 | 0 | Cont. Conf ? | Confirma contato? | Pertence("01") | "0" | Sim | Sim | Sim | Altera | Real | 0=Recebimento Não Confirmado;1=Recebimento Confirmado | Indica se o recebimento do contato foi confirmado, conforme o meio de comunicação utilizado. | ||||
| BRZ_DATCON | Data | 8 | 0 | Data Contato | Data de contato | Sim | Sim | Sim | Altera | Real | Data em que o contato com o beneficiário foi realizado. | |||||||
| BRZ_HORCON | Caracter | 5 | 0 | Hora Contato | Hora de contato | 99:99 | VAZIO() .OR. validateTimeFormat(M->BRZ_HORCON) | Sim | Sim | Sim | Altera | Real | Hora em que o contato foi realizado. | |||||
| BRZ_ORICON | Caracter | 2 | 0 | Origem cont. | Origem do contato | 99 | VAZIO() .OR. ExistCpo("SX5","TY"+M->BRZ_ORICON) | TY | S | Sim | Sim | Sim | Altera | Real | Origem do contato. | |||
| BRZ_ORIDES | Caracter | 30 | 0 | Desc. Origem | Descrição origem | If( !EMPTY(M->BRZ_ORICON), FWGetSX5( "TY", M->BRZ_ORICON)[1][4], "") | Sim | Não | Sim | Visual | Virtual | If( !EMPTY(M->BRZ_ORICON), FWGetSX5( "TY", M->BRZ_ORICON)[1][4], "") | Descrição da origem. | |||||
| BRZ_MATRIC | Caracter | 17 | 0 | Matrícula | Matrícula beneficiário | BENEINAD->(BA1_CODINT + BA1_CODEMP + BA1_MATRIC + BA1_TIPREG + BA1_DIGITO) | Sim | Não | Não | Visual | Real | BENEINAD->(BA1_CODINT + BA1_CODEMP + BA1_MATRIC + BA1_TIPREG + BA1_DIGITO) | Matrícula completa do beneficiário. | |||||
| BRZ_NOMUSR | Caracter | 70 | 0 | Beneficiário | Nome beneficiário | If( !EMPTY(M->BRZ_MATRIC), POSICIONE("BA1",2,XFILIAL("BA1")+M->BRZ_MATRIC, "BA1_NOMUSR"), "") | Sim | Não | Não | Visual | Real | BENEINAD->BA1_NOMUSR | Nome do beneficiário. | |||||
| BRZ_MOTIVO | Memo | 254 | 0 | Mot. Contato | Motivo do contato | Sim | Sim | Não | Altera | Real | Motivo do contato. | |||||||
| BRZ_DATCRI | Data | 8 | 0 | Data Criação | Data de criação | dDataBase | Sim | Não | Sim | Visual | Real | Data de criação do registro. | ||||||
| BRZ_HORCRI | Caracter | 8 | 0 | Hora Criação | Hora criação | TIME() | Sim | Não | Sim | Visual | Real | Hora de criação do registro. |
Inclusão no arquivo SX1 (Pergunte):
Grupo | Ordem | Pergunta | Tipo | Tamanho | Decimal | Valid | Modo de Entrada | Variável | Def. 1 | Def. 2 | Def. 3 | Def. 4 | Cons. Padrão | Picture |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MONINAD | 01 | Vencimento a partir de: | Data | 8 | 0 | Get | MV_PAR01 | |||||||
| MONINAD | 02 | Operadora: | Caracter | 4 | 0 | Vazio() .OR. ExistCpo('BA0', MV_PAR02, 1) | Get | MV_PAR02 | B89PLS | @! | ||||
| MONINAD | 03 | Empresa: | Caracter | 4 | 0 | Vazio() .OR. ExistCpo("BG9",MV_PAR02+MV_PAR03,1) | Get | MV_PAR03 | EMPIND | @! | ||||
| MONINAD | 04 | Contrato: | Caracter | 12 | 0 | Vazio() .Or. ExistCpo("BT5",MV_PAR02+MV_PAR03+MV_PAR04,1) | Get | MV_PAR04 | CONIND | 999999999999 | ||||
| MONINAD | 05 | SubContrato: | Caracter | 9 | 0 | Vazio() .OR. ExistCpo("BQC",MV_PAR02+MV_PAR03+MV_PAR04+"001"+MV_PAR05,1) | Get | MV_PAR05 | SUBIND | 999999999 |
Inclusão no arquivo SX6 (Parâmetros do Sistema):
Variável | Tipo | Descrição | Conteúdo |
|---|---|---|---|
| MV_DEBMONT | Caracter | Ativa a criação de tabelas temporárias de suporte para a rotina monitor de inadimplência apenas para banco de dados oracle. ".T." = Ativa a funcionalidade ".F." = Desativa a funcionalidade | ".F." |
Inclusão no Arquivo SX7 (gatilhos):
Campo | Sequencial | Regra | Contra Domínio | Tipo | Seek |
|---|---|---|---|---|---|
| BRZ_ORICON | 001 | IF(LEN(FWGetSX5( "TY", M->BRZ_ORICON)) == 0, "", FWGetSX5( "TY", M->BRZ_ORICON)[1][4]) | BRZ_ORIDES | P | 2 - Não |
Inclusão no arquivo SX9 (Relacionamento):
Domínio | Contra domínio | E. Domínio | E. C. Domínio | Propriedade | L. Domínio | L. C. Domínio |
|---|---|---|---|---|---|---|
| BA1 | BRZ | BA1_CODINT+BA1_CODEMP+BA1_MATRIC+BA1_TIPREG+BA1_DIGITO | BRZ_MATRIC | S | 1 | N |
| SX5 | BRZ | X5_TABELA+X5_CHAVE | 'TY'+BRZ_ORICON | S | 1 | N |
Inclusão no arquivo SXB (Consulta Padrão):
> Consulta padrão EMPIND:
Alias | Tipo | Sequencial | Coluna | Descrição | Contem |
|---|---|---|---|---|---|
| EMPIND | 1 | 01 | DB | Grupo/Empresa | BG9 |
| EMPIND | 2 | 01 | 01 | Operadora + Código | |
| EMPIND | 2 | 02 | 02 | Descrição | |
| EMPIND | 4 | 01 | 01 | Operadora | BG9->BG9_CODINT |
| EMPIND | 4 | 01 | 02 | Código | BG9->BG9_CODIGO |
| EMPIND | 4 | 01 | 03 | Descrição | BG9->BG9_DESCRI |
| EMPIND | 4 | 02 | 04 | Operadora | BG9->BG9_CODINT |
| EMPIND | 4 | 02 | 05 | Código | BG9->BG9_CODIGO |
| EMPIND | 4 | 02 | 06 | Descrição | BG9->BG9_DESCRI |
| EMPIND | 5 | 01 | BG9->BG9_CODIGO | ||
| EMPIND | 6 | 01 | BG9->BG9_CODINT == MV_PAR02 |
> Consulta padrão CONIND:
Alias | Tipo | Sequencial | Coluna | Descrição | Contem |
|---|---|---|---|---|---|
| CONIND | 1 | 01 | DB | Contratos | BT5 |
| CONIND | 2 | 01 | 01 | Número do Contrato | |
| CONIND | 4 | 01 | 01 | Número do Contrato | BT5_NUMCON |
| CONIND | 4 | 01 | 03 | Descrição | Posicione("BG9",1,xFilial("BG9")+BT5->(BT5_CODINT+BT5_CODIGO),"BG9_DESCRI") |
| CONIND | 5 | 01 | 01 | BT5->BT5_NUMCON | |
| CONIND | 6 | 01 | BT5->BT5_CODINT == MV_PAR02 .And. BT5->BT5_CODIGO == MV_PAR03 | ||
| CONIND | 4 | 01 | 02 | Código Empresa | Posicione("BG9",1,xFilial("BG9")+BT5->(BT5_CODINT+BT5_CODIGO),"BG9_CODIGO") |
> Consulta padrão SUBIND:
Alias | Tipo | Sequencial | Coluna | Descrição | Contem |
|---|---|---|---|---|---|
| SUBIND | 1 | 01 | DB | SubContratos | BQC |
| SUBIND | 2 | 01 | 01 | Número SubContrato | |
| SUBIND | 4 | 01 | 01 | Número SubContrato | BRC->BQC_SUBCON |
| SUBIND | 4 | 01 | 02 | Versão SubContrato | BRC->BQC_VERSUB |
| SUBIND | 4 | 01 | 03 | Descrição | BRC->BQC_DESCRI |
| SUBIND | 5 | 01 | BQC->BQC_SUBCON | ||
| SUBIND | 6 | 01 | BQC->BQC_CODIGO == MV_PAR02 + MV_PAR03 .and. BQC->BQC_NUMCON == MV_PAR04 |