PC_DESCMAXLIBERACAO — Percentual Máximo de Desconto para Liberação
Tela de configuração: ADM012 — Parâmetros por Usuário
Tabela:PARMUSUARIO.PC_DESCMAXLIBERACAO
Tipo:NUMERIC(15,2)(percentual)
Valor padrão:NULL
Tela de Configuração
O campo aparece na tela ADM012 — Parâmetros por Usuário.
Regras de Validação
| Regra | Mensagem de Erro |
|---|---|
Valor deve ser >= 0 | "O percentual de desconto deve ser maior que 0,00% !" |
Valor deve ser <= 100 | "O percentual de desconto deve ser menor que 100,00% !" |
Comportamento por Contexto
O campo PC_DESCMAXLIBERACAO funciona de acordo com o parâmetro TP_MODELOBLOQUEIO (configurado em MFA001 — Parâmetros de Faturamento, tela de parâmetros gerais).
TP_MODELOBLOQUEIO = 'N' — Modelo Individual Liberado
| O que faz | Detalhe |
|---|---|
| Campo na ADM012 | Editável (Enabled = True, cor clWindow) |
| Uso no sistema | Ativo — usado por VERIFICA_BLOQUEIO para validar descontos de itens de pedido |
| Trigger TRGPARMFATUR_BU | Mantém o valor; limpa campos alternativos (VL_LIMITECREDACUMULADO, NR_DIASATRASO, PC_MAXDESCONTO) |
Simulação passo a passo
- Acesse MFA001 — Parâmetros de Faturamento e defina
TP_MODELOBLOQUEIO = 'N'. - Abra a tela ADM012 — Parâmetros por Usuário e selecione um usuário.
- Digite no campo
PC_DESCMAXLIBERACAOo valor10,00(10%). - Salve o registro.
- Abra um pedido de venda e aplique desconto de 8% em um item.
- Salve o pedido — o sistema não bloqueia, pois
8% <= 10%. - Altere o desconto do item para 15% e tente salvar.
- O sistema bloqueia e exibe mensagem de alçada excedida, pois
15% > 10%.
Resultado esperado: Descontos até o percentual configurado são aceitos automaticamente. Descontos acima exigem liberação de usuário com perfil autorizador (
ST_AUTORIZADOR = 'S', configurado em ADM012 — Parâmetros por Usuário, campo na mesma tela).
Exceção / Importante: Ao definir
TP_MODELOBLOQUEIO = 'N'em MFA001, a triggerTRGPARMFATUR_BUlimpa automaticamente os camposVL_LIMITECREDACUMULADO,NR_DIASATRASOePC_MAXDESCONTOde todos os registros dePARMUSUARIOda empresa. Esses parâmetros deixam de ser usados para bloqueio.
TP_MODELOBLOQUEIO <> 'N' — Modelo Genérico Ativo
| O que faz | Detalhe |
|---|---|
| Campo na ADM012 | Bloqueado para edição (Enabled = False, cor $00EEEEEE) |
| Uso no sistema | Inativo — VERIFICA_BLOQUEIO não consulta o campo nesta condição |
| Trigger TRGPARMFATUR_BU | Limpa o valor (PC_DESCMAXLIBERACAO = NULL) ao alterar TP_MODELOBLOQUEIO |
Simulação passo a passo
- Acesse MFA001 — Parâmetros de Faturamento e defina
TP_MODELOBLOQUEIOcomo'P'(exemplo). - Abra a tela ADM012 — Parâmetros por Usuário.
- Observe que o campo
PC_DESCMAXLIBERACAOestá desabilitado (cinza, não editável). - Tente digitar um valor — o campo não aceita edição.
Resultado esperado: O campo fica bloqueado na UI e zerado no banco pelo trigger. O controle de desconto passa a ser feito pelos campos alternativos (
VL_LIMITECREDACUMULADO,NR_DIASATRASO,PC_MAXDESCONTO).
Exceção / Importante: Ao alterar
TP_MODELOBLOQUEIOde'N'para outro valor, a triggerTRGPARMFATUR_BUlimpa automaticamentePC_DESCMAXLIBERACAOde todos os usuários da empresa. Valores previamente configurados são perdidos.
Procedures Impactadas
Rotinas Delphi — Referência direta
| Rotina | Arquivo | Evidência |
|---|---|---|
tabPARMUSUARIOPC_DESCMAXLIBERACAOValidate | source/ADM012/UdmADM012.pas:565 | Validação de faixa 0–100% |
verificaComponentesLiberacaoVenda | source/ADM012/UdmADM012.pas:758 | Habilita/bloqueia campo conforme TP_MODELOBLOQUEIO |
TfrmADM013.btnDuplicaUsuarioClick | source/ADM013/UADM013.pas:474 | Copia o campo ao duplicar usuário |
TfrmMPD003.btnSalvarClick | source/MPD003/UMPD003.pas:487 | Lê o campo na tela de orçamento |
Scripts SQL — Referência direta ao campo
| Procedure/View | Arquivo | Uso |
|---|---|---|
TRGPARMFATUR_BU | Scripts/TRGPARMFATUR_BU.sql:17 | Limpa campo quando TP_MODELOBLOQUEIO <> 'N' |
VALIDA_LIBERACAOUSUARIO | Scripts/VALIDA_LIBERACAOUSUARIO.sql:22,43 | Declara variável e lê PU.PC_MAXDESCONTO (note: INTO :V_PC_DESCMAXLIBERACAO) para comparar desconto calculado |
VERIFICA_BLOQUEIO | Scripts/VERIFICA_BLOQUEIO.sql:268 | Seleção condicional (V_TP_MODELOBLOQUEIO = 'N') para obter P.PC_DESCMAXLIBERACAO |
VIEW_DOCUMENTOSBLOQUEADOS | Scripts/VIEW_DOCUMENTOSBLOQUEADOS.sql:366 | Seleciona PU.PC_DESCMAXLIBERACAO para exibição na view de documentos bloqueados |
Candidatas por uso da tabela PARMUSUARIO
Estas procedures fazem SELECT em PARMUSUARIO mas não referenciam o campo PC_DESCMAXLIBERACAO literalmente. Não há evidência de impacto funcional direto:
| Procedure/View | Arquivo | Evidência |
|---|---|---|
CANCELA_NOTAFISCAL | Scripts/CANCELA_NOTAFISCAL.sql:251 | FROM PARMUSUARIO P |
CONTROLE_CAIXA | Scripts/CONTROLE_CAIXA.sql:34 | from PARMUSUARIO |
GERA_ETIQUETABALANCA | Scripts/GERA_ETIQUETABALANCA.sql:26 | FROM PARMUSUARIO PU |
PERMISSAO_CAIXA | Scripts/PERMISSAO_CAIXA.sql:16 | from PARMUSUARIO |
RETORNA_IMPRESSORAUSUARIO | Scripts/RETORNA_IMPRESSORAUSUARIO.sql:41 | from PARMUSUARIO |
VALIDA_BLOQDESCMAXSUBGRUPO | Scripts/VALIDA_BLOQDESCMAXSUBGRUPO.sql:86 | FROM PARMUSUARIOSUBGRUPODESCONTO PU (tabela vinculada, usa ST_HABILITADESCMAXSUBGRUPO, não o campo deste doc) |
VALIDA_CODIGOBARRA | Scripts/VALIDA_CODIGOBARRA.sql:68 | INNER JOIN PARMUSUARIO P |
VALIDA_MODELOBLOQUEIODIASATRASO | Scripts/VALIDA_MODELOBLOQUEIODIASATRASO.sql:16 | Usa V_NR_DIASATRASOPARMUSUARIO |
VALIDA_MODELOBLOQUEIOPCDESCMAX | Scripts/VALIDA_MODELOBLOQUEIOPCDESCMAX.sql:16 | Usa V_PC_MAXDESCONTOPARMUSUARIO (campo PC_MAXDESCONTO) |
VALIDA_MODELOBLOQUEIOVLLIMITE | Scripts/VALIDA_MODELOBLOQUEIOVLLIMITE.sql:18 | Usa V_VL_LIMITEACUMPARMUSUARIO |
Telas Impactadas
| Tela | Descrição | Impacto |
|---|---|---|
| ADM012 | Parâmetros por Usuário | Edição direta do campo |
| ADM013 | — | Cópia do campo ao duplicar usuário |
| MPD003 | Orçamentos | Leitura do parâmetro para validação |
| MFA001 | Parâmetros de Faturamento | Controle do comportamento via TP_MODELOBLOQUEIO |
Campos Envolvidos
| Campo | Tabela | Tipo | Relação |
|---|---|---|---|
PC_DESCMAXLIBERACAO | PARMUSUARIO | NUMERIC(15,2) | Campo principal |
PC_MAXDESCONTO | PARMUSUARIO | NUMERIC(15,2) | Substituto quando TP_MODELOBLOQUEIO <> 'N' |
VL_LIMITECREDACUMULADO | PARMUSUARIO | NUMERIC(15,2) | Limpa junto quando TP_MODELOBLOQUEIO = 'N' |
NR_DIASATRASO | PARMUSUARIO | INTEGER | Limpo junto quando TP_MODELOBLOQUEIO = 'N' |
TP_MODELOBLOQUEIO | PARMFATUR | CHAR(1) | Controla se campo é editável/ativo (configurado em MFA001) |
ST_AUTORIZADOR | PARMUSUARIO | CHAR(1) | Define se usuário pode liberar bloqueios (configurado em ADM012, campo na mesma tela) |
ST_HABILITADESCMAXSUBGRUPO | PARMUSUARIO | CHAR(1) | Habilita bloqueio por subgrupo (configurado em ADM012) |
Resumo Funcional
O parâmetro PC_DESCMAXLIBERACAO define o percentual máximo de desconto que um usuário pode aplicar em itens de pedidos e demais documentos comerciais sem precisar de aprovação de um autorizador.
- Quando ativo (
TP_MODELOBLOQUEIO = 'N'), o campo é editável na ADM012, aceita valores de 0% a 100% e é consultado pelas proceduresVERIFICA_BLOQUEIOeVALIDA_LIBERACAOUSUARIOno momento do salvamento. - Quando o modelo genérico está ativo (
TP_MODELOBLOQUEIO <> 'N'), o controle de desconto é feito por outro mecanismo (campos alternativos) ePC_DESCMAXLIBERACAOfica bloqueado e zerado.