Pular para o conteúdo principal

NR_ACESSOLIMITE - Limite de acessos do sócio ao clube durante a carência de inadimplência

Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 1 → campo Nº Limite de Acessos (label Label7 em UMFA001.dfm:2492-2505, posicionado em Left=26, Top=295) Tabela: PARMFATUR.NR_ACESSOLIMITE Tipo: Numérico (inteiro) — DOM_INTEGER no DDL; TIntegerField no client. Sem máscara/formatação específica no TDBEdit. Valor padrão: NULL (o AfterInsert de tabPARMFATUR em UdmMFA001.pas:434-... não atribui valor inicial — o registro nasce sem limite configurado) Validação (MFA001): tabPARMFATURNR_ACESSOLIMITEValidate (UdmMFA001.pas:2048-2052) rejeita valores negativos com a mensagem "Informe um Número de Acessos Maior que Zero. Verifique!". Valor 0 passa; qualquer inteiro positivo passa.

O que o parâmetro faz​

NR_ACESSOLIMITE é o limite de entradas (catracadas) que um sócio inadimplente pode fazer no clube durante a janela de carência controlada por NR_MAIORVENC (tela CFC001 / PARMCONTAS.NR_MAIORVENC — tolerância máxima de dias em atraso antes do bloqueio definitivo).

Quando o sócio chega à portaria (MPD055) e possui contas vencidas, o sistema faz duas verificações em cascata:

  1. Carência por dias: compara o maior atraso do sócio (iNR_DIASATRASO, obtido de VIEW_CREDITOPESSOA) com o teto de dias tolerados (iNR_MAIORVENC). Se o atraso ainda está dentro da tolerância, vai para o passo 2.
  2. Carência por acessos: conta quantas vezes o sócio já entrou no clube (MOVTOENTRADA × PESSOAENTRADA) desde o vencimento mais antigo em aberto e compara com NR_ACESSOLIMITE.
    • Se entradas_desde_menor_vencimento >= NR_ACESSOLIMITE → ContaVencida := true → acesso bloqueado (tratado nos passos seguintes do fluxo).
    • Caso contrário → o sistema emite aviso informando quantos acessos ainda restam e libera a entrada.

Portanto, o parâmetro funciona como um teto duplo junto com NR_MAIORVENC: enquanto o sócio estiver inadimplente, ele ganha ou NR_MAIORVENC dias ou NR_ACESSOLIMITE entradas, o que vencer primeiro.

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — cadastra/edita o valor no campo edtNR_ACESSOLIMITE (UMFA001.dfm:3253-3272)
Controle de Acesso do ClubeMPD055Única consumidora real. Lê P.NR_ACESSOLIMITE de PARMFATUR em edtCD_PESSOAExit (UMPD055.pas:900-907) e usa na validação de inadimplência
Config PedidoCPD009Apenas inclui o campo em SELECT/INSERT/UPDATE de PARMFATUR (UdmCPD009.dfm:327, 391, 492, 597) — não consome o valor
Relatório/Config RecapRCA006Apenas inclui o campo em SELECT/INSERT/UPDATE de PARMFATUR (UdmRCA006.dfm:3076, 3140, 3241, 3346) — não consome o valor

Procedures impactadas​

Nenhuma procedure SQL (Scripts/*.sql) referencia NR_ACESSOLIMITE. Toda a lógica é feita no cliente Delphi, em MPD055.

Campos envolvidos​

CampoTabelaPapel
NR_ACESSOLIMITEPARMFATURLimite de entradas do sócio inadimplente (este parâmetro)
NR_MAIORVENCPARMCONTAS (consultado via VIEW_CREDITOPESSOA)Tolerância em dias de atraso — teto alternativo
NR_DIASATRASOVIEW_CREDITOPESSOAMaior atraso atual do sócio (calculado)
DT_VENCIMENTOCONTASMenor vencimento em aberto do sócio — define o ponto de partida do contador de acessos
NR_MOVTOENTRADA / DT_ENTRADAMOVTOENTRADARegistro de cada entrada de sócio no clube
CD_PESSOAPESSOAENTRADALiga a entrada ao sócio
CD_PESSOA / ST_CONTAS / TP_CONTASCONTASSeleciona apenas contas a receber em aberto (TP_CONTAS = 'S', ST_CONTAS IN ('T','P'))
TP_VALIDACAOUSUARIO(runtime MPD055)Quando = 'E' (Portaria), o fluxo bloqueia/libera efetivamente o acesso; em outros tipos, apenas avisa

Comportamento / Regra​

Valor = NULL (padrão)​

AspectoComportamento
Preenchimento em MFA001Campo nasce vazio no AfterInsert
Efeito em MPD055 (linha 906)IF (Resultado[0] <> '') then iNR_ACESSOS := Resultado[0]; — a variável permanece ''
Efeito na validação (linha 965)if (dmMPD055.iNR_ACESSOS <> '') then begin ... end; — todo o bloco de contagem de acessos é pulado
Consequência práticaEnquanto o sócio estiver dentro da carência em dias (NR_DIASATRASO < NR_MAIORVENC), não há limite de entradas. Ele só será bloqueado quando o atraso exceder NR_MAIORVENC.

Resultado esperado: a carência de inadimplência passa a ser unidimensional (só por dias). O contador de acessos é desligado.

Valor = 0​

AspectoComportamento
Validação em tabPARMFATURNR_ACESSOLIMITEValidateAceita (a regra é if AsInteger < 0 then raise; 0 passa)
Efeito em MPD055iNR_ACESSOS = '0'. Na comparação (linha 969) if (StrToInt(Resultado[0]) >= StrToInt(dmMPD055.iNR_ACESSOS)), qualquer contagem >= 0 dispara ContaVencida := true
Consequência práticaBasta o sócio ter uma conta vencida (com DT_VENCIMENTO < hoje) e qualquer registro anterior em MOVTOENTRADA — na prática equivale a "zero tolerância de acessos durante inadimplência"

Resultado esperado: inadimplentes ficam bloqueados desde a primeira entrada após o primeiro vencimento em aberto, mesmo estando ainda dentro da carência em dias. Não é o mesmo que NULL: NULL desliga a checagem e 0 a torna estrita.

:::warning Mensagem da validação é inconsistente com o comportamento A mensagem "Informe um Número de Acessos Maior que Zero" sugere que 0 seria proibido, mas a condição real é < 0. O valor 0 é aceito e tem o efeito descrito acima. :::

Valor > 0 (ex.: 3)​

AspectoComportamento
ContadorMPD055 executa um SELECT COUNT(NR_MOVTOENTRADA) FROM MOVTOENTRADA INNER JOIN PESSOAENTRADA ... WHERE DT_ENTRADA >= menor_vencimento_em_aberto AND CD_PESSOA = :sócio (UMPD055.pas:947-963)
Comparaçãoif (Count >= NR_ACESSOLIMITE) then ContaVencida := true else avisa e libera
Mensagem de aviso (quando ainda há folga)"O Sócio possui pendências financeiras! Ele poderá realizar mais <N> acessos ao Clube!" com N = NR_ACESSOLIMITE - Count
Bloqueio (quando atingiu o limite)ContaVencida := true — o sócio é tratado como bloqueado pela rotina de validação de contas (efeito final no fluxo da portaria)

Simulação passo a passo​

Pré-requisitos do cenário:

  • PARMFATUR.NR_ACESSOLIMITE = 3 (definido em MFA001).
  • PARMCONTAS.NR_MAIORVENC = 15 (p.ex.).
  • Sócio com 1 conta vencida há 5 dias (ou seja, ainda dentro de NR_MAIORVENC).
  • Sócio configurado em SOCIOCLIENTE.
  • Operador da portaria com TP_VALIDACAOUSUARIO = 'E'.
  1. Em MFA001 → Parâmetros → Faturamento → Opção 1 → informe Nº Limite de Acessos = 3. Salve (F6).
  2. Na portaria (MPD055), o sócio chega com carteirinha. O operador digita CD_PESSOA e sai do campo (edtCD_PESSOAExit).
  3. O sistema consulta VIEW_CREDITOPESSOA → NR_DIASATRASO = 5, NR_MAIORVENC = 15 → passa pela carência em dias (5 < 15).
  4. O sistema consulta PARMFATUR.NR_ACESSOLIMITE → iNR_ACESSOS = '3'.
  5. O sistema conta quantas vezes o sócio entrou desde o menor DT_VENCIMENTO em aberto:
    • 1ª tentativa de entrada após o vencimento: Count = 0. 0 >= 3 → false. Exibe aviso:

      "O Sócio possui pendências financeiras! Ele poderá realizar mais 3 acessos ao Clube!" e libera a entrada.

    • 2ª: Count = 1. 1 >= 3 → false. Aviso: "... mais 2 acessos ...". Libera.
    • 3ª: Count = 2. 2 >= 3 → false. Aviso: "... mais 1 acessos ...". Libera.
    • 4ª: Count = 3. 3 >= 3 → true. ContaVencida := true → o bloco seguinte da rotina de validação trata como inadimplente bloqueado (a mensagem subsequente é a do fluxo padrão de conta vencida em portaria, não a de "ainda pode N acessos").

Resultado esperado: o sócio consegue NR_ACESSOLIMITE entradas após o vencimento enquanto ainda estiver dentro da carência em dias; na (NR_ACESSOLIMITE+1)-ésima tentativa, a portaria bloqueia.


Interações com outros parâmetros​

  • NR_MAIORVENC (PARMCONTAS, tela CFC001) — teto em dias que coexiste com NR_ACESSOLIMITE. O sócio é bloqueado quando qualquer um dos dois limites for ultrapassado (dias ou acessos).
  • NR_DIASATRASO (calculado pela VIEW_CREDITOPESSOA) — o contador de acessos só é consultado enquanto NR_DIASATRASO < NR_MAIORVENC. Se já passou dos dias, o bloqueio é direto e o parâmetro NR_ACESSOLIMITE não é sequer avaliado.
  • TP_VALIDACAOUSUARIO (configuração do usuário operador) — controla se a portaria usa o fluxo de sócio/dependente (= 'E') ou apenas exibe avisos (o fluxo que realmente chama ContaVencida := true é o ramo 'E').

Referências no Código Fonte​

Delphi — MFA001 (cadastro do parâmetro)​

ArquivoLinhasPapel
source/MFA001/UMFA001.dfm2492-2505TLabel Label7 com Caption = 'Nº Limite de Acessos', FocusControl = edtNR_ACESSOLIMITE
source/MFA001/UMFA001.dfm3253-3272TDBEdit edtNR_ACESSOLIMITE com DataField = 'NR_ACESSOLIMITE', DataSource = dmMFA001.dsPARMFATUR, dentro de pagPARMAMETROS → pagAmbos (Faturamento) → pagFatOp1 (Opção 1)
source/MFA001/UMFA001.pas244Declaração edtNR_ACESSOLIMITE: TDBEdit
source/MFA001/UdmMFA001.pas134Declaração tabPARMFATURNR_ACESSOLIMITE: TIntegerField
source/MFA001/UdmMFA001.pas402Assinatura procedure tabPARMFATURNR_ACESSOLIMITEValidate(Sender: TField)
source/MFA001/UdmMFA001.pas2048-2052Corpo do OnValidate (bloqueia < 0 com JException 'W-0000')
source/MFA001/UdmMFA001.pas434-...tabPARMFATURAfterInsert não atribui default (campo nasce NULL)
source/MFA001/UdmMFA001.dfm139, 1124-1128, 2377, 2534, 2748, 3019SELECT/INSERT/UPDATE de PARMFATUR incluindo o campo e definição do TIntegerField

Delphi — MPD055 (consumidora real)​

ArquivoLinhasPapel
source/MPD055/UdmMPD055.pas121Declaração da variável iNR_ACESSOS: String no data module
source/MPD055/UMPD055.pas900-907Leitura do parâmetro: SELECT P.NR_ACESSOLIMITE FROM PARMFATUR P WHERE P.CD_EMPRESA = ... → popula dmMPD055.iNR_ACESSOS somente se não vazio
source/MPD055/UMPD055.pas947-979Uso do parâmetro: conta entradas desde o menor vencimento em aberto e compara com iNR_ACESSOS; define ContaVencida := true ao atingir o limite ou exibe aviso "O Sócio possui pendências financeiras! Ele poderá realizar mais N acessos ao Clube!"

Delphi — outros arquivos (CRUD de PARMFATUR, sem lógica de consumo)​

ArquivoLinhasPapel
source/CPD009/UdmCPD009.dfm327, 391, 492, 597SELECT/INSERT/UPDATE de PARMFATUR inclui NR_ACESSOLIMITE — sem uso funcional
source/RCA006/UdmRCA006.dfm3076, 3140, 3241, 3346SELECT/INSERT/UPDATE de PARMFATUR inclui NR_ACESSOLIMITE — sem uso funcional

DDL​

  • docs/schema/tables/PARMFATUR.sql:94 — NR_ACESSOLIMITE DOM_INTEGER, (sem NOT NULL, sem default → permite NULL).

SQL — Procedures​

Nenhuma stored procedure em Scripts/ referencia NR_ACESSOLIMITE (grep em Scripts/ retornou zero matches). A regra inteira é executada no lado cliente, em UMPD055.pas.