CD_CONSUMIDOR - Consumidor Final Padrão
Tela de configuração: MFA001 — Parâmetros de Faturamento Localização: Aba Operação 2 → campo Transportador [MNF001/MNF002/MNF007] Tabela:
PARMFATUR.CD_CONSUMIDOR(DOM_INTEGER) Componente:edtCD_CONSUMIDOR(TDBEdit, lookup com<F9>)
Resumo
Define qual cadastro de Pessoa será tratado pelo sistema como "Consumidor Final" padrão. Esse código é referenciado em diversos módulos (NF-e/NFC-e, pedidos, contas a receber, controle de entrega, relatórios) para decidir comportamentos específicos — como pular validações de bloqueio financeiro, habilitar edição de CPF/CNPJ na nota, marcar itens como entregues automaticamente, entre outros.
Campos envolvidos
| Campo | Tipo | Descrição |
|---|---|---|
PARMFATUR.CD_CONSUMIDOR | INTEGER | Código da pessoa (FK → PESSOA.CD_PESSOA) usada como consumidor final |
PARMFATUR.NM_PESSOA | texto (display) | Nome da pessoa exibido ao lado do campo |
PESSOA.CD_PESSOA | INTEGER | Tabela referenciada — validação de existência e atividade |
Telas impactadas
| Tela | Contexto do impacto |
|---|---|
| MFA001 | Configuração do parâmetro |
| MNF002 (Nota Fiscal de Saída) | Pessoa default na inserção; habilita CPF/CNPJ editável; pula validação financeira para consumidor; controle de cupom identificado NFC-e |
| MNF008 (Nota Fiscal de Entrada) | Pessoa default na inserção de nota |
| MNF013 (CTRC) | Pessoa default na inserção de nota |
| MNF014 (Devolução) | Busca parâmetros (CD_CONSUMIDOR carregado) |
| MCO006 (Contas a Receber/Pagar) | Busca parâmetros para filtro de pessoa |
| CFC004 (Contas a Receber) | Exclui consumidor final de consultas de bloqueio |
| NFC-e (JunsoftGerNotas) | Decide se envia CPF/CNPJ do destinatário no QR Code |
| LNF227 (Relatório DANFE) | Exibe "Consumidor Final" quando CD_PESSOA = CD_CONSUMIDOR |
| LPD046 (Relatório Pedido) | Omite dados de contato quando pedido é do consumidor final |
Comportamento
Validação ao preencher
Ao informar um código no campo edtCD_CONSUMIDOR, o OnValidate (UdmMFA001.pas:1130-1149) executa:
- Consulta
PESSOApeloCD_PESSOAinformado. - Se não encontrar → exibe erro "A Pessoa Física / Jurídica não está Cadastrada [TFA001]!".
- Se encontrar mas
ST_ATIVA = 'N'→ exibe erro "A Pessoa Física / Jurídica não está Ativa [TFA001]!". - Se válido → preenche
NM_PESSOAcom o nome retornado.
Uso como pessoa padrão em notas
Quando uma nova nota é inserida em MNF002, MNF008 ou MNF013, o sistema atribui automaticamente CD_CONSUMIDOR como pessoa da nota:
UdmMNF002.pas:3673→tabNOTACD_PESSOA := parmfatur.values['CD_CONSUMIDOR']UdmMNF008.pas:2114→tabNOTACD_PESSOA := iCD_CONSUMIDORUdmMNF013.pas:1724→tabNOTACD_PESSOA := iCD_CONSUMIDOR
Edição de CPF/CNPJ na NFC-e (MNF002)
Quando o CD_PESSOA da nota é igual ao CD_CONSUMIDOR e a série não é do tipo NFC-e "N"/"E" (HabilitaCNPJCPFConsFinal, UMNF002.pas:8263):
- O campo CPF/CNPJ torna-se editável (
ReadOnly = False). - O campo Nome do Consumidor Final torna-se editável.
- Permite digitar CPF/CNPJ e nome do cliente no ato da venda NFC-e.
Quando a pessoa não é o consumidor final, esses campos ficam bloqueados e apenas leitura.
Cupom Identificado (NFC-e)
Na validação de série (UdmMNF002.pas:8024): se a série é NFCE e CD_PESSOA = CD_CONSUMIDOR, o sistema:
- Marca
ST_CUPOMIDENTIFICADO = 'N'e bloqueia o campo (ReadOnly). - Caso contrário,
ST_CUPOMIDENTIFICADO = 'S'com edição liberada.
QR Code NFC-e
Em NFCe.pas:1992-1997, ao gerar o QR Code:
- Se
CD_PESSOA <> CD_CONSUMIDOR→ envia o CNPJ/CPF do cadastro da pessoa (NR_CNPJCPF). - Se
CD_PESSOA = CD_CONSUMIDOR→ tenta usar o CPF/CNPJ digitado no momento da venda (NR_CNPJCPFCF). Se vazio, não envia.
Pula validação de bloqueio financeiro
No botão Salvar de MNF002 (UMNF002.pas:3330): se CD_PESSOA = CD_CONSUMIDOR, o sistema faz uma consulta completa de pessoa mas não bloqueia por situação financeira SCPC da mesma forma que faria para um cliente comum.
Em edtCD_PESSOAExit (MNF002 e MNF008): o filtro de contas exclui o consumidor:
AND CONTAS.CD_PESSOA <> COALESCE(
(SELECT FIRST 1 CD_CONSUMIDOR FROM PARMFATUR), -10)
Exceção na validação de pessoa mestra
Em UdmMNF002.pas:8546: se a pessoa mestra informada for o próprio CD_CONSUMIDOR, o sistema pula a validação de existência/atividade (pois o consumidor já foi validado na inserção).
Controle de Entrega
O CD_CONSUMIDOR é repassado como Parametros[8] à função CarregarControleEntrega (source/jControleEntrega/UDadosEntrega.pas). Quando combinado com ST_ENTREGACONSUMIDORFINAL = 'S' (configurado em MFA001, aba Operação 2), os itens do pedido/nota são marcados automaticamente como entregues sem abrir a tela de agendamento.
Consulte
ST_ENTREGACONSUMIDORFINAL(configurado em MFA001 — Parâmetros de Faturamento, aba Operação 2) para detalhes completos da regra de entrega automática.
Pessoas Restritas por Vendedor
A procedure VIEW_PESSOARESTRITA (Scripts/VIEW_PESSOARESTRITA.sql) usa o CD_CONSUMIDOR para bypassar a restrição de pessoa por vendedor: quando a pessoa selecionada é o consumidor final, a restrição é ignorada e a pessoa é retornada normalmente.
Bloqueio Automático de Pessoa
A procedure VERIFICA_BLOQUEIOPESSOA (Scripts/VERIFICA_BLOQUEIOPESSOA.sql) consulta o CD_CONSUMIDOR e exclui essa pessoa do processo de inativação/bloqueio automático por inatividade.
Integração / Exportação
GERA_INTEGRACAO.sql:376→ Gera colunaST_CONSUMIDOR = 'S'/'N'comparandoN.CD_PESSOAcomPF.CD_CONSUMIDOR.EXPORTACAO_DOMINIOCUPOM.sql:99→ Busca CNPJ/CPF do consumidor final para exportação de cupons fiscais.ATUALIZA_PESSOA.sql:283→ Quando o código de pessoa muda, atualiza oCD_CONSUMIDORnaPARMFATUR.
Relatórios
- LNF227 (DANFE/Relatório de Nota): se
CD_PESSOA = CD_CONSUMIDOR, exibe label "Consumidor Final" e oculta campos de CNPJ/CPF e nome. - LPD046 (Impressão de Pedido): se
CD_PESSOA <> CD_CONSUMIDOR, imprime dados de contato (fantasia, endereço, fone). Se for consumidor, omita esses dados.
Simulação passo a passo — Preenchimento
- Acesse a tela MFA001 — Parâmetros de Faturamento.
- Selecione a aba Operação 2.
- No campo Consumidor Final, digite o código da pessoa cadastrada (ex.:
9999) ou pressione<F9>para buscar. - O sistema valida: pessoa deve existir e estar ativa (
ST_ATIVA = 'S'). - Salve os parâmetros (
<F6>).
Resultado esperado: PARMFATUR.CD_CONSUMIDOR armazena o código da pessoa. Todas as notas novas em MNF002/MNF008/MNF013 abrirão com essa pessoa como padrão. O sistema passará a tratá-la como consumidor final em todas as regras documentadas acima.
Exceção / Importante:
- Se o campo ficar vazio (nulo), notas novas em MNF002/MNF008/MNF013 podem não ter pessoa padrão definida, dependendo do fluxo. Recomenda-se sempre preencher.
- O campo aceita qualquer pessoa ativa. O ideal é cadastrar uma pessoa específica com nome "Consumidor Final" (sem CNPJ/CPF) e usá-la exclusivamente para esse fim.
- A comparação entre
CD_PESSOAeCD_CONSUMIDORem diversos pontos do código é feita como string — isso significa que espaços ou formatação diferente podem causar falhas na comparação.
Procedures impactadas
Rotinas Delphi com referência direta
| Rotina | Arquivo | Linha | Uso |
|---|---|---|---|
tabPARMFATURCD_CONSUMIDORValidate | source/MFA001/UdmMFA001.pas | 1130 | Validação: pessoa existe e está ativa |
edtCD_CONSUMIDORKeyDown | source/MFA001/UMFA001.pas | 1379 | Lookup <F9> de pessoa |
TdmMNF002.tabNOTAAfterInsert | source/MNF002/UdmMNF002.pas | 3673 | Atribui pessoa default ao inserir nota |
TfrmMNF002.btnSalvarClick | source/MNF002/UMNF002.pas | 3330 | Pula bloqueio financeiro para consumidor |
TfrmMNF002.edtCD_PESSOAExit | source/MNF002/UMNF002.pas | 5678 | Exclui consumidor de filtro de contas |
TfrmMNF002.HabilitaCNPJCPFConsFinal | source/MNF002/UMNF002.pas | 8263 | Habilita CPF/CNPJ editável para consumidor |
TdmMNF002.tabNOTACD_SERIENFValidate | source/MNF002/UdmMNF002.pas | 8024 | Controle de cupom identificado NFC-e |
TdmMNF002.tabNOTACD_PESSOAMESTRAValidate | source/MNF002/UdmMNF002.pas | 8546 | Pula validação se mestra = consumidor |
TdmMNF002.BuscaParametros_MNF002 | source/MNF002/UdmMNF002.pas | 10492 | Carrega CD_CONSUMIDOR em ParmFatur |
TdmMNF008.tabNOTAAfterInsert | source/MNF008/UdmMNF008.pas | 2114 | Atribui pessoa default ao inserir nota |
TdmMNF008.BuscaParametros_MNF008 | source/MNF008/UdmMNF008.pas | 757 | Carrega CD_CONSUMIDOR em ParmFatur |
TfrmMNF008.edtCD_PESSOAExit | source/MNF008/UMNF008.pas | 2046 | Exclui consumidor de filtro de contas |
TdmMNF013.tabNOTAAfterInsert | source/MNF013/UdmMNF013.pas | 1724 | Atribui pessoa default ao inserir nota |
Busca_Parametros | source/MNF013/UdmMNF013.pas | 699 | Carrega CD_CONSUMIDOR |
Busca_Parametros | source/MNF014/UdmMNF014.pas | 323 | Carrega CD_CONSUMIDOR |
TdmMCO006.BuscaParametros_MCO006 | source/MCO006/UdmMCO006.pas | 2101 | Carrega CD_CONSUMIDOR |
TfrmCFC004.btnProcurarClick | source/CFC004/UCFC004.pas | 338 | Exclui consumidor de consulta de contas |
TNFeService.geraPreTagQrCode | source/JunsoftGerNotas/Classes/NFCe.pas | 1942 | Seleciona CD_CONSUMIDOR para QR Code |
TNFeService (QR Code) | source/JunsoftGerNotas/Classes/NFCe.pas | 1992 | Decide cDest com base na comparação |
ExecLayout | source/LNF227/ULNF227.pas | 445 | Oculta dados quando CD_PESSOA = consumidor |
Imprimir | source/LPD046/ULPD046.pas | 175 | Omite contato quando pedido é consumidor |
Procedures SQL com referência direta ao campo
| Procedure/View | Arquivo | Linha | Uso |
|---|---|---|---|
VERIFICA_BLOQUEIOPESSOA | Scripts/VERIFICA_BLOQUEIOPESSOA.sql | 8, 28, 46 | Exclui consumidor do bloqueio automático por inatividade |
VIEW_PESSOARESTRITA | Scripts/VIEW_PESSOARESTRITA.sql | 12, 20, 35 | Bypass de restrição por vendedor para consumidor |
GERA_INTEGRACAO | Scripts/GERA_INTEGRACAO.sql | 376 | Gera flag ST_CONSUMIDOR comparando CD_PESSOA com CD_CONSUMIDOR |
EXPORTACAO_DOMINIOCUPOM | Scripts/EXPORTACAO_DOMINIOCUPOM.sql | 99 | Busca CNPJ do consumidor para exportação de cupom |
ATUALIZA_PESSOA | Scripts/ATUALIZA_PESSOA.sql | 283 | Atualiza CD_CONSUMIDOR quando código de pessoa muda |
TRGAIUD_CONTAS | Scripts/TRGAIUD_CONTAS.sql | 10 | Declara variável v_cd_consumidor (não utilizada no corpo) |
GERA_NOTAFISCAL | Scripts/GERA_NOTAFISCAL.sql | 173 | Declara variável V_CD_CONSUMIDORMFA001 (não utilizada no corpo) |