Parâmetro de Bloqueio de Nota Fiscal
Tela de configuração: MFA001 - Parâmetros de Faturamento
Localização: Parâmetros → Notas Fiscais → Parâmetros de Notas (label "Bloqueio Nota Fiscal")
Tabela: PARMFATUR.ST_BLOQUEIONF
Valor padrão: N (Não Bloqueia)
Define qual política de bloqueio de crédito e/ou preço será aplicada ao salvar/confirmar Notas Fiscais. A verificação é executada via procedure VERIFICA_CREDITO e, adicionalmente, por regras locais nos módulos que validam o valor unitário frente à tabela de preço / tabela mínima do vendedor.
Telas impactadas
| Módulo | Código | Descrição |
|---|
| NF Saída | MNF002 | Emissão de NF de saída (lê o parâmetro via BuscaParametros_MNF002) |
| NF Entrada | MNF013 | NF de entrada — validação Verifica_CreditoTabela |
| NF Outros / Devolução | MNF014 | NF devolução / outros tipos |
| NF Saída Simplificada | MNF008 | NF de saída simplificada |
| PDV / Frente de Caixa | MNF017 | Frente de caixa (usa iST_BLOQUEIONF na função Verifica_CreditoTabela) |
| Geração de NF por Ordem | MPD011 | Gera NF a partir de ordens (unit UdmNFORDEM) |
| Cotação / Compras | MCO006 | Cotação (busca o parâmetro junto à PARMFATUR) |
Procedures impactadas
| Procedure | Arquivo | Descrição |
|---|
VERIFICA_CREDITO | Scripts/VERIFICA_CREDITO.sql | Recebe o valor de ST_BLOQUEIONF no parâmetro V_ST_BLOQUEIO e aplica as regras de crédito da pessoa, duplicatas em atraso, limite acumulado e duplicatas liquidadas após vencimento. |
Campos envolvidos
| Campo | Descrição |
|---|
PARMFATUR.ST_BLOQUEIONF | Configuração do tipo de bloqueio aplicado às Notas Fiscais |
PESSOA / VIEW_CREDITOPESSOA.VL_CREDITO | Limite de crédito da pessoa |
VIEW_CREDITOPESSOA.VL_CREDITOACUM | Limite de crédito acumulado |
VIEW_CREDITOPESSOA.NR_DIASATRASO | Dias de atraso permitidos pela pessoa |
VIEW_CREDITOPESSOA.NR_MAIORVENC | Maior dia de atraso em aberto para a pessoa |
CONTAS.ST_CONTAS, DT_LIQUIDACAO, DT_VENCIMENTO | Usados para a regra "Dupl. Liquid. após Vencto" |
ITEMNOTA.VL_UNITARIO, VL_PRECO | Usados para comparar valor unitário × tabela de preço |
PARMTABPRECO / ITEMTABPRECO | Usados na regra de Tabela Mínima do Vendedor |
NOTA.ST_CONDPAGTO | Se a nota é à Vista (V) a verificação é pulada |
PARMFATUR.TP_LIMITECREDITO | Global (S) ignora CD_EMPRESA na contagem de duplicatas liquidadas |
Opções disponíveis
N - Não Bloqueia
| O que faz | Detalhe |
|---|
Executa VERIFICA_CREDITO? | Sim, mas a própria procedure sai sem validar (if V_ST_BLOQUEIO <> 'N') |
| Bloqueia por preço? | Não |
| Bloqueia por crédito/atraso? | Não |
Simulação passo a passo
- MFA001 → Opção 1 → Bloqueio NF = "Não Bloqueia".
- Salve os parâmetros (F6).
- Abra a NF de saída (MNF002).
- Selecione um cliente com duplicatas em atraso e limite estourado.
- Lance itens com valor unitário abaixo da tabela de preço.
- Confirme a nota.
Resultado esperado: A nota é confirmada normalmente. Nenhum bloqueio é aplicado. Este é o valor padrão ao inserir um registro novo em PARMFATUR (UdmMFA001.pas:437 → tabPARMFATURST_BLOQUEIONF.AsString := 'N').
D - Duplicatas em Atraso
| O que faz | Detalhe |
|---|
Valida em VERIFICA_CREDITO? | Sim, no bloco V_ST_BLOQUEIO in ('D','A','O') |
| Critério | NR_MAIORVENC > NR_DIASATRASO cadastrado para a pessoa |
| Bloqueia por crédito acumulado? | Não |
| Bloqueia por preço? | Não |
Simulação passo a passo
- MFA001 → ST_BLOQUEIONF = "Duplicatas em Atraso".
- Em TFA008/crédito, cadastre
NR_DIASATRASO = 5 para o cliente X.
- Garanta que o cliente X tem uma duplicata vencida há 10 dias.
- Em MNF002 gere NF para X e confirme.
Resultado esperado: Mensagem "A Pessoa possui Duplicatas com Atraso acima do Limite." informando os dias da duplicata em atraso e o limite permitido. A nota não é salva.
C - Limite de Crédito
| O que faz | Detalhe |
|---|
Valida em VERIFICA_CREDITO? | Sim, no bloco V_ST_BLOQUEIO in ('C','A','O','Q') |
| Critério | VL_DOCUMENTO > VL_CREDITO da pessoa |
Simulação passo a passo
- ST_BLOQUEIONF = "Limite de Crédito".
- Cliente X com
VL_CREDITO = 1.000,00 em VIEW_CREDITOPESSOA.
- Emita NF de R$ 1.500,00 para X.
Resultado esperado: "Ultrapassou o Limite de Crédito da Pessoa. Valor Documento.: 1500,00. Valor do Limite.: 1000,00". Nota não é salva.
T - Limite Crédito Acumulado
| O que faz | Detalhe |
|---|
Valida em VERIFICA_CREDITO? | Sim, bloco V_ST_BLOQUEIO in ('T','A','O') |
| Critério | (VL_DUPVENC + VL_DUPAVENC + VL_DOCUMENTO) > VL_CREDITOACUM |
| Diferença de 'C' | Soma o saldo já aberto (dupl. vencidas e a vencer) ao valor do novo documento |
Simulação passo a passo
- ST_BLOQUEIONF = "Limite Crédito Acumulado".
- Cliente X com
VL_CREDITOACUM = 5.000,00 e duplicatas em aberto somando R$ 4.500,00.
- Emita NF de R$ 1.000,00 para X.
Resultado esperado: "Ultrapassou o Limite de Crédito Acumulado da Pessoa. Valor Total Pendente.: 5500,00. Valor do Limite Acumulado.: 5000,00".
B - Limite e Dupl. em Atraso
| O que faz | Detalhe |
|---|
| Tipo de validação | Não é tratado diretamente nos in (...) da procedure VERIFICA_CREDITO |
| Efeito prático | Como não cai em nenhum in (...) (C, D, T, A, O, L, Q), nenhuma mensagem de bloqueio é disparada pela procedure |
Observação: A opção B está cadastrada no ComboBox (UMFA001.dfm:6528) mas a procedure VERIFICA_CREDITO não tem branch para o código 'B'. Verificar comportamento no banco antes de usar em produção.
Simulação passo a passo
- ST_BLOQUEIONF = "Limite e Dupl. em Atraso".
- Emita NF para cliente com crédito estourado e duplicatas atrasadas.
Resultado esperado: Nenhuma mensagem é exibida (procedure passa sem cair em nenhum in).
P - Tabela de Preço
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Não — opção 'P' não está em nenhum in (...) |
| Validação adicional | Sim, nos módulos de NF: se existir CD_TABPRECO e VL_UNITARIO < VL_PRECO da tabela, bloqueia |
| Arquivos que aplicam a regra | MNF013/UdmMNF013.pas:1626, MPD011/UdmNFORDEM.pas:2455 |
Simulação passo a passo
- ST_BLOQUEIONF = "Tabela de Preço".
- Cadastre produto Y na tabela com
VL_PRECO = 20,00.
- Em MNF013 (NF entrada) gere NF lançando produto Y com
VL_UNITARIO = 18,00.
- Tente salvar.
Resultado esperado: Mensagem "O Valor Unitário do Produto está abaixo da Tabela de Preço. Valor Unitário.: 18,00. Valor Tabela de Preço.: 20,00". Nota não é salva.
V - Tabela Mínima Vendedor
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Não — opção 'V' não está em nenhum in (...) |
| Validação adicional | Sim: compara VL_PRECO do item com o preço mínimo da tabela do vendedor (PARMTABPRECO/ITEMTABPRECO) |
| Arquivo | MNF017/UdmMNF017.pas:1411 (só atua se CD_VENDEDOR <> '') |
Simulação passo a passo
- ST_BLOQUEIONF = "Tabela Mínima Vendedor".
- Vincule o vendedor V1 a uma tabela de preço mínima onde o produto Y tem
VL_PRECO = 50,00.
- Em MNF017 (PDV) gere venda com vendedor V1 e produto Y por R$ 40,00.
Resultado esperado: "O Valor Unitário do Produto está abaixo da Tabela Mínima de Preço do Vendedor. Valor Unitário.: 40,00.". Nota não é salva.
M - Preço Mínimo e Máximo
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Não — não há branch 'M' na procedure |
| Uso prático | Valor consta do ComboBox (UMFA001.dfm:6531) porém não há lógica direta de bloqueio por esta opção nos módulos/procedure examinados |
Observação: Nenhum bloqueio efetivo foi localizado no grep para o valor 'M'. Pode depender de regra externa (gatilho/triggers) não coberta neste levantamento.
Q - Valor Líquido e Limite Crédito
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Sim — cai no in ('C','A','O','Q') (validação de VL_CREDITO) |
| Semântica | Mesmo comportamento da opção C, só diferindo na etiqueta de uso (valor líquido) |
Simulação passo a passo
- ST_BLOQUEIONF = "Valor Líquido e Limite Crédito".
- Emita NF com valor acima do
VL_CREDITO da pessoa.
Resultado esperado: Mesma mensagem de "Ultrapassou o Limite de Crédito da Pessoa".
L - Dupl. Liquid. após Vencto
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Sim — bloco V_ST_BLOQUEIO in ('L','O') |
| Critério | Contagem em CONTAS onde ST_CONTAS = 'L', TP_CONTAS = 'S' e (DT_LIQUIDACAO - DT_VENCIMENTO) > 10 |
TP_LIMITECREDITO | Se 'S', desconsidera a empresa na contagem (global) |
Simulação passo a passo
- ST_BLOQUEIONF = "Dupl. Liquid. após Vencto".
- Cliente X tem 2 duplicatas em
CONTAS com ST_CONTAS='L' e quitadas 15 dias após o vencimento.
- Emita NF para X.
Resultado esperado: "O Cliente possui Duplicatas Liquidadas após 10 dias de Vencimento. Total de Duplicatas.: 2".
Y - Média de Vendas x Desconto
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Não — 'Y' não está nos in (...) |
| Uso prático | Valor consta do ComboBox (UMFA001.dfm:6534), sem regra localizada na procedure nem nos módulos principais; dependente de gatilhos/outros componentes |
A - Ambos - Exceto Dupl. Liquid.
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Sim — participa de ('C','A','O','Q'), ('D','A','O') e ('T','A','O') |
| Em termos simples | Aplica todas as validações de crédito, exceto "Dupl. Liquid. após Vencto" |
| Validações adicionais (módulo) | Também dispara a regra de 'P' (Tabela de Preço) e 'V' (Tabela Mínima Vendedor), conforme MNF013/UdmMNF013.pas:1627 e MNF017/UdmMNF017.pas:1412 |
Simulação passo a passo
- ST_BLOQUEIONF = "Ambos - Exceto Dupl. Liquid.".
- Cliente X com crédito estourado → bloqueia por
C.
- Cliente Y com duplicata em atraso → bloqueia por
D.
- Cliente Z com valor acima do acumulado → bloqueia por
T.
- Qualquer cliente com preço abaixo da tabela → bloqueia por
P (regra local).
Resultado esperado: Primeira violação encontrada pela procedure é retornada (crédito → atraso → acumulado). Se nenhuma, o módulo aplica a regra de preço.
O - Ambos
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Sim — participa de todos os in (...): C, D, T e L |
Diferença de A | Valida também "Dupl. Liquid. após Vencto" |
Simulação passo a passo
Cenário completo: todos os bloqueios de A + cliente com 1 duplicata quitada mais de 10 dias após o vencimento → bloqueia por L.
Resultado esperado: Qualquer das mensagens das opções C, D, T ou L será exibida, conforme a primeira violação encontrada.
X - Todas as Notas Fiscais
| O que faz | Detalhe |
|---|
VERIFICA_CREDITO retorna bloqueio? | Não — 'X' não cai em nenhum in (...) da procedure |
| Uso prático | Valor consta do ComboBox (UMFA001.dfm:6537); provavelmente usado em rotinas de bloqueio global fora do escopo da procedure analisada |
Regra Geral
- A verificação sempre é pulada quando a nota é à vista (
NOTA.ST_CONDPAGTO = 'V') — ver VERIFICA_CREDITO.sql:24.
- O valor padrão em novo cadastro é
'N' (UdmMFA001.pas:437).
- O parâmetro é obrigatório: se ficar vazio, o
BeforePost do datamodule lança "É Obrigatório Informar o Status do Bloqueio de Notas Fiscais!" (UdmMFA001.pas:919-923).
- As opções
P, V e A também disparam validações locais (não via procedure) que comparam o valor unitário ou o preço do item com a tabela padrão (P/A) ou com a tabela mínima do vendedor (V/A).
- O parâmetro compartilha o mesmo motor com
ST_BLOQUEIOPED (bloqueio de Pedidos) — ambos passam por VERIFICA_CREDITO.
Tabela Comparativa Resumida
| Opção | Descrição | Crédito | Atraso | Acumulado | Dupl. Liquid. | Preço x Tabela | Preço x Tab. Mín. Vendedor |
|---|
| N | Não Bloqueia | - | - | - | - | - | - |
| D | Duplicatas em Atraso | - | Sim | - | - | - | - |
| C | Limite de Crédito | Sim | - | - | - | - | - |
| T | Limite Crédito Acumulado | - | - | Sim | - | - | - |
| B | Limite e Dupl. em Atraso | ? | ? | - | - | - | - |
| P | Tabela de Preço | - | - | - | - | Sim | - |
| V | Tabela Mínima Vendedor | - | - | - | - | - | Sim |
| M | Preço Mínimo e Máximo | - | - | - | - | - | - |
| Q | Valor Líquido e Limite Crédito | Sim | - | - | - | - | - |
| L | Dupl. Liquid. após Vencto | - | - | - | Sim | - | - |
| Y | Média de Vendas x Desconto | - | - | - | - | - | - |
| A | Ambos - Exceto Dupl. Liquid. | Sim | Sim | Sim | - | Sim | Sim |
| O | Ambos | Sim | Sim | Sim | Sim | - | - |
| X | Todas as NFs | - | - | - | - | - | - |
Legenda: ? = opção não mapeada na procedure VERIFICA_CREDITO analisada.
Referências no Código Fonte
| Arquivo | Linhas | Função |
|---|
source/MFA001/UMFA001.dfm | 6504-6542 | ComboBox cmbST_BLOQUEIONF com os 14 valores disponíveis |
source/MFA001/UMFA001.pas | 375 | Declaração de cmbST_BLOQUEIONF: TwwDBComboBox |
source/MFA001/UdmMFA001.pas | 34 | Campo tabPARMFATURST_BLOQUEIONF: TStringField |
source/MFA001/UdmMFA001.pas | 437 | Valor padrão 'N' em AfterInsert |
source/MFA001/UdmMFA001.pas | 919-923 | Validação obrigatória em BeforePost |
source/MFA001/UdmMFA001.dfm | 670-675, 2341, 2486, 2701, 2957 | Definição/DML do campo no dataset |
source/MNF002/UdmMNF002.pas | 10491 | BuscaParametros_MNF002 inclui ST_BLOQUEIONF na leitura de PARMFATUR |
source/MNF008/UdmMNF008.pas | 475, 651, 667, 756 | Armazena iST_BLOQUEIONF a partir de PARMFATUR |
source/MNF013/UdmMNF013.pas | 534, 698, 712, 1619, 1626-1627 | Usa o parâmetro em VERIFICA_CREDITO e regra de preço 'P'/'A' |
source/MNF014/UdmMNF014.pas | 268, 322, 335 | Armazena iST_BLOQUEIONF |
source/MNF017/UdmMNF017.pas | 276, 1378, 1411-1412 | Usa o parâmetro no Verifica_CreditoTabela e na regra 'V'/'A' |
source/MNF017/UMNF017.pas | 161, 186 | Leitura inicial do parâmetro em PARMFATUR |
source/MPD011/UdmNFORDEM.pas | 2448, 2455-2456, 2488 | Usa parmfatur.values['ST_BLOQUEIONF'] em VERIFICA_CREDITO e regra de preço |
source/MCO006/UdmMCO006.pas | 2100 | Lê P.ST_BLOQUEIONF de PARMFATUR |
source/CPD009/UdmCPD009.dfm | 300, 363, 447, 531 | DML da cópia/ajuste de parâmetros (SELECT/INSERT/UPDATE) |
Scripts/VERIFICA_CREDITO.sql | 7 | Parâmetro V_ST_BLOQUEIO |
Scripts/VERIFICA_CREDITO.sql | 24 | Short-circuit V_ST_BLOQUEIO <> 'N' |
Scripts/VERIFICA_CREDITO.sql | 38-46 | Branch ('C','A','O','Q') — Limite de Crédito |
Scripts/VERIFICA_CREDITO.sql | 49-57 | Branch ('D','A','O') — Duplicatas em Atraso |
Scripts/VERIFICA_CREDITO.sql | 60-69 | Branch ('T','A','O') — Limite Acumulado |
Scripts/VERIFICA_CREDITO.sql | 72-99 | Branch ('L','O') — Dupl. Liquid. após Vencto |