Pular para o conteúdo principal

PC_MAXDESCONTO — Percentual Máximo de Desconto do Usuário

Tela de configuração: ADM012 — Parâmetros do Usuário
Tabela: PARMUSUARIO.PC_MAXDESCONTO
Tipo: NUMERIC(15,2)
Valor padrão: NULL (não definido)
Faixa aceita: 0,00 a 100,00 (percentual)

Telas impactadas​

TelaNomeComo é impactada
ADM012Parâmetros do UsuárioCampo editável para definir o desconto máximo por usuário
MFA001Parâmetros de FaturamentoTP_MODELOBLOQUEIO define o modelo que decide como PC_MAXDESCONTO é avaliado
TFA008AutorizadorAutorização de desconto excedente combinada com este parâmetro

Campos envolvidos​

CampoTabelaTipoObservação
PC_MAXDESCONTOPARMUSUARIONUMERIC(15,2)Percentual máximo de desconto permitido ao usuário
TP_MODELOBLOQUEIOPARMFATURCHAR(1)Define o modelo de bloqueio: N (Normal), L (Alçada com atualização), A (Alçada pura)
PC_MAXIMOUSUARIO—NUMERIC(15,2)Parâmetro de desconto máximo passado nas rotinas de validação (pode vir de outro campo)
ST_HABILITADESCMAXSUBGRUPOPARMUSUARIOCHAR(1)Habilita desconto máximo por subgrupo (ver VALIDA_BLOQDESCMAXSUBGRUPO)

Opções disponíveis​

Este parâmetro não tem opções predefinidas — ele aceita um valor numérico percentual. O comportamento depende de estar preenchido ou NULL e do modelo de bloqueio configurado.

O que fazDetalhe
Valor preenchido (ex: 15,00)Define o teto percentual de desconto que o usuário pode conceder. Se o desconto ultrapassar esse valor E o PC_MAXIMOUSUARIO também for ultrapassado, o bloqueio é acionado no modelo Alçada (A).
Valor NULLNo modelo Alçada (A), não há verificação de teto adicional — apenas o PC_MAXIMOUSUARIO é considerado. Nos modelos N e L, o campo é ignorado.

Desconto dentro do limite​

Simulação passo a passo​

  1. Acesse ADM012 — Parâmetros do Usuário.
  2. Localize o campo PC_MAXDESCONTO e informe 15,00 (15%).
  3. Salve o registro.
  4. Ao emitir um pedido ou nota fiscal, aplique um desconto de 10,00% em um item.
  5. O sistema valida o desconto e permite a operação normalmente.

Resultado esperado: Nenhum bloqueio — o desconto de 10% está abaixo do teto de 15% parametrizado.

Desconto acima do limite (modelo Alçada A)​

Simulação passo a passo​

  1. Acesse MFA001 — Parâmetros de Faturamento e configure TP_MODELOBLOQUEIO = 'A' (modelo Alçada).
  2. Acesse ADM012 — Parâmetros do Usuário e informe PC_MAXDESCONTO = 15,00.
  3. Suponha que o PC_MAXIMOUSUARIO (teto geral do usuário) seja 10,00.
  4. Emita um pedido aplicando desconto de 20,00% em um item.
  5. O desconto de 20% ultrapassa tanto o PC_MAXIMOUSUARIO (10%) quanto o PC_MAXDESCONTO (15%).
  6. O sistema registra o bloqueio: O_TP_BLOQUEIO = 'U' e O_TP_BLOQUEIOALCADA = 'P'.
  7. A mensagem de erro é exibida: "O Percentual de Desconto do Usuário está acima do Máximo Permitido. Desconto Concedido(%).: 20,00. Desconto Permitido(%).: 10,00".

Resultado esperado: O desconto é bloqueado e o documento exige autorização via TFA008 para ser liberado.

Exceção / Importante: No modelo Alçada (A), o bloqueio por PC_MAXDESCONTO só ocorre quando o desconto ultrapassa ambos os limites (PC_MAXIMOUSUARIO E PC_MAXDESCONTO). Se PC_MAXDESCONTO está NULL, apenas o PC_MAXIMOUSUARIO é verificado. Exemplo: com PC_MAXIMOUSUARIO = 10,00 e PC_MAXDESCONTO = NULL, um desconto de 20% ultrapassa o PC_MAXIMOUSUARIO e gera bloqueio simples ('U'), mas não gera O_TP_BLOQUEIOALCADA = 'P'.

Desconto acima do limite (modelo Normal N ou Alçada com crédito L)​

Simulação passo a passo​

  1. Acesse MFA001 — Parâmetros de Faturamento e configure TP_MODELOBLOQUEIO = 'N' (modelo Normal).
  2. Acesse ADM012 — Parâmetros do Usuário (o valor de PC_MAXDESCONTO é ignorado neste modelo).
  3. Emita um pedido com desconto acima do PC_MAXIMOUSUARIO.
  4. O sistema valida apenas comparando o desconto com PC_MAXIMOUSUARIO.

Resultado esperado: Se o desconto ultrapassar o PC_MAXIMOUSUARIO, o bloqueio 'U' é gerado. O campo PC_MAXDESCONTO não interfere nos modelos N e L.

Validacao de faixa na tela ADM012​

Simulação passo a passo​

  1. Acesse ADM012 — Parâmetros do Usuário.
  2. Tente informar PC_MAXDESCONTO = 110,00 (acima de 100).
  3. O sistema exibe a mensagem: "O percentual de desconto deve ser menor que 100,00%!".
  4. Tente informar PC_MAXDESCONTO = -5,00 (negativo).
  5. O sistema exibe a mesma mensagem: "O percentual de desconto deve ser menor que 100,00%!".
  6. Informe PC_MAXDESCONTO = 15,00 e salve.

Resultado esperado: A validação rejeita valores menores que 0 ou maiores que 100, aceitando apenas a faixa de 0,00 a 100,00.

Duplicação de usuário (ADM013)​

Simulação passo a passo​

  1. Acesse ADM013 — Manutenção de Usuários.
  2. Selecione um usuário existente que possui PC_MAXDESCONTO = 12,00.
  3. Clique no botão Duplicar Usuário.
  4. Informe os dados do novo usuário e salve.

Resultado esperado: O novo usuário recebe o mesmo valor de PC_MAXDESCONTO (12,00) copiado do usuário original, junto com os demais parâmetros.

Regra Geral de Autorização​

O fluxo de bloqueio de desconto segue esta lógica (procedimento VALIDA_MODELOBLOQUEIOPCDESCMAX):

Modelo (TP_MODELOBLOQUEIO)Verifica PC_MAXDESCONTO?Comportamento
N (Normal)NãoBloqueia se desconto > PC_MAXIMOUSUARIO
L (Alçada com crédito)NãoIgual ao Normal, mas também gera O_TP_BLOQUEIOALCADA = 'P'
A (Alçada pura)Sim (se preenchido)Bloqueia se desconto > PC_MAXIMOUSUARIO E desconto > PC_MAXDESCONTO; gera ambos 'U' e 'P'
A (Alçada pura, PC_MAXDESCONTO = NULL)NãoBloqueia apenas se desconto > PC_MAXIMOUSUARIO

Tabela Comparativa Resumida​

CenárioTP_MODELOBLOQUEIOPC_MAXDESCONTODesconto aplicadoResultado
1N15,0010%✅ Liberado
2N15,0020%🔒 Bloqueio 'U' (ignora os 15%, compara com PC_MAXIMOUSUARIO)
3A15,0010%✅ Liberado
4A15,0020% (PC_MAXIMOUSUARIO = 10%)🔒 Bloqueio 'U' + 'P' (passou ambos os tetos)
5A15,0012% (PC_MAXIMOUSUARIO = 10%)🔒 Bloqueio 'U' apenas (passou MAXIMOUSUARIO mas não MAXDESCONTO)
6ANULL20% (PC_MAXIMOUSUARIO = 10%)🔒 Bloqueio 'U' apenas (sem 'P', pois PC_MAXDESCONTO é nulo)
7L15,0020% (PC_MAXIMOUSUARIO = 10%)🔒 Bloqueio 'U' + 'P' (ignora PC_MAXDESCONTO, mas gera alcada por ser modelo L)

Procedures impactadas​

Rotinas Delphi com referência direta ao campo​

RotinaArquivoPapel
TdmADM012.tabPARMUSUARIOPC_MAXDESCONTOValidatesource/ADM012/UdmADM012.pas:739Validação no ADM012: aceita valores entre 0 e 100
TfrmADM013.btnDuplicaUsuarioClicksource/ADM013/UADM013.pas:475Copia o valor ao duplicar usuário no ADM013

Referências SQL diretas ao campo​

ProcedureArquivoPapel
VALIDA_MODELOBLOQUEIOPCDESCMAXScripts/VALIDA_MODELOBLOQUEIOPCDESCMAX.sql:29Lê PC_MAXDESCONTO e compara com o desconto aplicado para decidir bloqueio
VALIDA_LIBERACAOUSUARIOScripts/VALIDA_LIBERACAOUSUARIO.sql:39Lê PC_MAXDESCONTO como V_PC_DESCMAXLIBERACAO ao validar liberação de documentos
TRGPARMFATUR_BUScripts/TRGPARMFATUR_BU.sql:12Trigger que reseta PC_MAXDESCONTO = NULL (possível limpeza em atualização de parâmetros)

Candidatas por uso da tabela PARMUSUARIO​

Estas procedures usam a tabela PARMUSUARIO mas não referenciam o campo PC_MAXDESCONTO literalmente. Não foi encontrado uso funcional direto do campo.

Procedure/ViewArquivo
CANCELA_NOTAFISCALScripts/CANCELA_NOTAFISCAL.sql
CONTROLE_CAIXAScripts/CONTROLE_CAIXA.sql
GERA_ETIQUETABALANCAScripts/GERA_ETIQUETABALANCA.sql
PERMISSAO_CAIXAScripts/PERMISSAO_CAIXA.sql
RETORNA_IMPRESSORAUSUARIOScripts/RETORNA_IMPRESSORAUSUARIO.sql
VALIDA_BLOQDESCMAXSUBGRUPOScripts/VALIDA_BLOQDESCMAXSUBGRUPO.sql
VALIDA_CODIGOBARRAScripts/VALIDA_CODIGOBARRA.sql
VALIDA_MODELOBLOQUEIODIASATRASOScripts/VALIDA_MODELOBLOQUEIODIASATRASO.sql
VALIDA_MODELOBLOQUEIOVLLIMITEScripts/VALIDA_MODELOBLOQUEIOVLLIMITE.sql
VIEW_DOCUMENTOSBLOQUEADOSScripts/VIEW_DOCUMENTOSBLOQUEADOS.sql

Lacunas identificadas​

  1. VERIFICA_BLOQUEIO: A evidencia inicial indicou uma referência P.PC_MAXDESCONTO na linha 165, mas grep subsequente não confirmou o literal no arquivo. É possível que o campo seja lido via SELECT ... INTO indireto ou que a referência seja de versão anterior do script. Sem impacto direto confirmado.
  2. PC_MAXIMOUSUARIO: Este parâmetro aparece como variável de entrada (I_PC_MAXIMOUSUARIO) nas validations, mas não foi possível identificar de qual campo da tabela ele é populado. Verificar rotinas que chamam VALIDA_MODELOBLOQUEIOPCDESCMAX.