TP_MODELOBLOQUEIO - Modelo de bloqueio de faturamento
Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 2 (
pagFatOp2emUMFA001.dfm:3656) → campo Modelo de Bloqueio de Faturamento (label emUMFA001.dfm:3941, ComboBoxcmbTP_MODELOBLOQUEIOemUMFA001.dfm:4588-4615, posicionado emLeft=328, Top=361) Tabela:PARMFATUR.TP_MODELOBLOQUEIOTipo: Caractere único —DOM_CHAR1no DDL (docs/schema/tables/PARMFATUR.sql);TStringFieldcomFixedChar = True, Size = 1no client (UdmMFA001.dfm:1883-1886). ComboBoxTwwDBComboBoxcomStyle = csDropDownListeMapList = True— o texto exibido é traduzido para o caractere armazenado viaItems.Strings(UMFA001.dfm:4607-4610). Valor padrão:'N'(Normal) — atribuído emAfterInsertdetabPARMFATUR:tabPARMFATURTP_MODELOBLOQUEIO.AsString := 'N'; // UdmMFA001.pas:560Validação (MFA001): não há
OnValidate— o ComboBox comcsDropDownListgarante que apenas'N','A'ou'L'sejam gravados.
O que o parâmetro faz
PARMFATUR.TP_MODELOBLOQUEIO define qual motor de bloqueio o faturamento (NF, Pedido, OS) e o recebimento aplicam quando um cliente ultrapassa limites de crédito, atraso ou desconto. Ele funciona como um interruptor de três estados que altera o comportamento das procedures VERIFICA_BLOQUEIO, VALIDA_MODELOBLOQUEIOVLLIMITE, VALIDA_MODELOBLOQUEIODIASATRASO e VALIDA_MODELOBLOQUEIOPCDESCMAX (todas em Scripts/), e é consultado diretamente pelos módulos Delphi de fechamento de pedido/NF/OS para decidir se exigem liberação por alçada e se a página "Lib. Venda (Alçada)" da tela ADM012 fica visível.
N— Normal: bloqueio "cru". Se o cliente está configurado com bloqueio e ultrapassar qualquer limite (crédito em R$, crédito acumulado, dias de atraso, % de desconto), o faturamento é travado sem alternativa — o usuário precisa liberar o documento na tela de Liberação (MPD003, MRC005, MOF007, etc.) usandoPC_DESCMAXLIBERACAOdaPARMUSUARIOcomo teto.A— Alçada: o bloqueio só ocorre se o limite ultrapassado também ultrapassar o teto do usuário logado (PARMUSUARIO.VL_LIMITECREDACUMULADO,PARMUSUARIO.NR_DIASATRASO,PARMUSUARIO.PC_MAXDESCONTO). Cria uma aba "Lib. Venda (Alçada)" na ADM012 onde se parametrizam os tetos por usuário. Na liberação do pedido (MPD003/MRC005/MOF007/MNF003) o sistema barra totalmente se o usuário que está liberando também estiver abaixo da alçada necessária, obrigando a escalonar para um usuário com alçada maior.L— Alçada com Atualização de Valor de Crédito na TFA002: híbrido — o bloqueio acontece como no modeloN(qualquer excesso trava), mas também marca o tipo de alçada (O_TP_BLOQUEIOALCADA) para que o fluxo de liberação na TFA002 (Análise de Crédito) possa atualizar o valor de crédito do cliente em vez de só autorizar a venda daquela nota.
Resumindo: N = tranca e libera por usuário; A = só tranca se exceder a alçada do liberador; L = tranca como N, mas permite ajustar o limite do cliente na liberação.
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — grava o modelo em cmbTP_MODELOBLOQUEIO (UMFA001.dfm:4588-4615), Opção 1 |
| Parâmetros do Usuário | ADM012 | Consumidora-chave — a aba Lib. Venda (Alçada) (pagLibVenda) só aparece quando TP_MODELOBLOQUEIO <> 'N' (UADM012.pas:254-257). Além disso, quando o modelo é alçada, edtPC_DESCMAXLIBERACAO é desabilitado (UdmADM012.pas:756-765, chamado 161946) para evitar conflito com PC_MAXDESCONTO da alçada |
| Liberação de Pedido | MPD003 | Consumidora — após chamar VERIFICA_BLOQUEIO, se o resultado contiver L/D/P no O_TP_BLOQUEIOALCADA e TP_MODELOBLOQUEIO = 'A', lança exceção pedindo escalonamento por alçada (UdmMPD003.pas:248-266). Se TP_MODELOBLOQUEIO = 'L', mensagem diferente orienta a atualização do crédito do cliente (UdmMPD003.pas:259-271) |
| Liberação Pedido/OS pneu | MPD081 | Idem MPD003, mas no contexto de pneus (UdmMPD081.pas:578-592) |
| Liberação Recebimento | MRC005 | Idem — chama VERIFICA_BLOQUEIO e ramifica mensagem por TP_MODELOBLOQUEIO = 'A' vs 'L' (UdmMRC005.pas:254-267) |
| Liberação Recebimento | MRC040 | Idem MRC005 (UdmMRC040.pas:661-675) |
| Liberação Ordem de Serviço | MOF007, MOF008 | Idem — ramificam mensagem por modelo de bloqueio (UdmMOF007.pas:196-212, UdmMOF008.pas:958-974) |
| Liberação de NF | MNF003 | Idem (UdmMNF003.pas:246-262) |
| Análise de Crédito | TFA002 | Consumidora indireta — quando TP_MODELOBLOQUEIO = 'L', o fluxo de liberação roteia para atualização de CREDITO.VL_CREDITO nesta tela (o código 'L' retornado por VALIDA_MODELOBLOQUEIOVLLIMITE sinaliza o comportamento) |
Procedures impactadas
| Procedure | Uso de TP_MODELOBLOQUEIO |
|---|---|
VERIFICA_BLOQUEIO | Lê o parâmetro em V_TP_MODELOBLOQUEIO (Scripts/VERIFICA_BLOQUEIO.sql:143-152). Quando <> 'N' busca PC_MAXDESCONTO / ST_HABILITADESCMAXSUBGRUPO da PARMUSUARIO do usuário logado (linha 164-170). Quando = 'N' usa PC_DESCMAXLIBERACAO tradicional (linha 266-273). Orquestra as três validações de modelo de bloqueio abaixo |
VALIDA_MODELOBLOQUEIOVLLIMITE | Relê TP_MODELOBLOQUEIO (linha 26-30) e aplica a matriz de decisão para limite de crédito em R$ e crédito acumulado (Scripts/VALIDA_MODELOBLOQUEIOVLLIMITE.sql:26-170). Nos modelos N/L trava ao ultrapassar I_VL_CREDITO ou I_VL_CREDITOACUM; no modelo A só trava se também ultrapassar PARMUSUARIO.VL_LIMITECREDACUMULADO. No L, marca O_TP_BLOQUEIOALCADA com L para indicar que o crédito pode ser atualizado na TFA002 |
VALIDA_MODELOBLOQUEIODIASATRASO | Mesma mecânica para dias de atraso: N/L travam ao ultrapassar I_NR_DIASATRASO; A só trava se também ultrapassar PARMUSUARIO.NR_DIASATRASO (Scripts/VALIDA_MODELOBLOQUEIODIASATRASO.sql:23-92) |
VALIDA_MODELOBLOQUEIOPCDESCMAX | Mesma mecânica para % de desconto: N/L travam se I_PC_DESC > I_PC_MAXIMOUSUARIO; A só trava se também ultrapassar PARMUSUARIO.PC_MAXDESCONTO (Scripts/VALIDA_MODELOBLOQUEIOPCDESCMAX.sql:22-60) |
TRGPARMFATUR_BU | Trigger BEFORE UPDATE em PARMFATUR — rastreia alterações de TP_MODELOBLOQUEIO em LOGPARAMETROS (auditoria) |
Campos envolvidos
| Campo | Tabela | Papel |
|---|---|---|
TP_MODELOBLOQUEIO | PARMFATUR | Este parâmetro — seletor do motor de bloqueio (N/A/L) |
ST_BLOQUEIONF / ST_BLOQUEIOPED | PARMFATUR | Políticas por documento (NF / Pedido) — definem o que causa o bloqueio (código C/T/D/A/O/Q/B/F/G/Y/E); o TP_MODELOBLOQUEIO define como ele se resolve |
VL_CREDITO | CREDITO | Limite de crédito em R$ por cliente — insumo do VALIDA_MODELOBLOQUEIOVLLIMITE |
VL_CREDITOACUM | CREDITO | Limite acumulado por cliente — insumo do mesmo procedure |
NR_DIASATRASO | CREDITO | Tolerância em dias por cliente — insumo do VALIDA_MODELOBLOQUEIODIASATRASO |
PC_DESCONTOMAX / PC_DESCONTOPED | PARMFATUR | Desconto máximo (NF/Pedido) — insumo do VALIDA_MODELOBLOQUEIOPCDESCMAX |
VL_LIMITECREDACUMULADO | PARMUSUARIO | Alçada em R$ do usuário — só consultada quando TP_MODELOBLOQUEIO = 'A' |
NR_DIASATRASO | PARMUSUARIO | Alçada em dias do usuário — só consultada quando TP_MODELOBLOQUEIO = 'A' |
PC_MAXDESCONTO | PARMUSUARIO | Alçada em % de desconto do usuário — lida em VERIFICA_BLOQUEIO sempre que TP_MODELOBLOQUEIO <> 'N' e usada nos três modelos via I_PC_MAXIMOUSUARIO |
PC_DESCMAXLIBERACAO | PARMUSUARIO | Teto de desconto para liberação no modelo N (VERIFICA_BLOQUEIO.sql:266-273); na MFA001-ADM012 este campo é desabilitado quando o modelo é A/L |
O_TP_BLOQUEIO | saída de procedures | String com códigos de bloqueio (C=crédito, T=acumulado, D=dias, U=% usuário, P=% pedido, etc.) |
O_TP_BLOQUEIOALCADA | saída de procedures | String com códigos de alçada (L/D/P) que o cliente Delphi usa para decidir a mensagem e, no modelo L, abrir a TFA002 |
Opções disponíveis
N - Normal (padrão)
| O que faz | Detalhe |
|---|---|
| Modelo "bloqueio direto" | Qualquer excesso em limite/atraso/desconto trava o documento imediatamente |
| Desabilita a aba Lib. Venda (Alçada) | frmADM012.pagLibVenda.TabVisible := False (UADM012.pas:254-255) |
Habilita PC_DESCMAXLIBERACAO | edtPC_DESCMAXLIBERACAO editável na ADM012 (UdmADM012.pas:761-765) — é o teto usado nas telas de liberação |
Usa PC_DESCMAXLIBERACAO como teto de liberação | Em VERIFICA_BLOQUEIO (Scripts/VERIFICA_BLOQUEIO.sql:266-273) lê PARMUSUARIO.PC_DESCMAXLIBERACAO — não PC_MAXDESCONTO |
Nos VALIDA_MODELOBLOQUEIO* sempre trava | Se o excesso ocorreu, emite O_TP_BLOQUEIO com o código correspondente e não preenche O_TP_BLOQUEIOALCADA |
| Liberação feita pelo próprio usuário que tenta faturar | Mesmo usuário pode liberar desde que PC_DESCMAXLIBERACAO permita; o sistema não exige escalonamento |
Simulação passo a passo
- Cliente Alpha com
CREDITO.VL_CREDITO = R$ 1.000,00,ST_BLOQUEIO = 'C'(bloqueia por limite de crédito). - Vendedor João lança pedido de R$ 1.500,00 na MPD003.
VERIFICA_BLOQUEIOchamaVALIDA_MODELOBLOQUEIOVLLIMITE— modeloNentra no branchIF (V_TP_MODELOBLOQUEIO IN ('N', 'L'))(VALIDA_MODELOBLOQUEIOVLLIMITE.sql:111-120).- Como
1500 > 1000, gravaO_TP_BLOQUEIO = 'C'com mensagem "Ultrapassou o Limite de Crédito. Valor Documento: 1.500,00. Valor do Limite: 1.000,00". - Pedido trava. Na tela de liberação (MPD003), João (ou outro usuário) consulta seu
PARMUSUARIO.PC_DESCMAXLIBERACAO. Se tiver, libera; se não, aguarda.
Resultado esperado: bloqueio imediato, sem análise de alçada; liberação depende apenas de PC_DESCMAXLIBERACAO; a tela TFA002 não é envolvida.
A - Alçada
| O que faz | Detalhe |
|---|---|
| Modelo "bloqueio por alçada" | O excesso só trava se também ultrapassar o teto do usuário logado |
| Habilita a aba Lib. Venda (Alçada) na ADM012 | pagLibVenda.TabVisible := True (UADM012.pas:256-257) — exibe os campos VL_LIMITECREDACUMULADO, NR_DIASATRASO, PC_MAXDESCONTO por usuário |
Desabilita PC_DESCMAXLIBERACAO | edtPC_DESCMAXLIBERACAO.Enabled := False (UdmADM012.pas:756-760) para não conflitar com PC_MAXDESCONTO da alçada |
VERIFICA_BLOQUEIO usa PC_MAXDESCONTO como teto | Linha 164-170 — lê PARMUSUARIO.PC_MAXDESCONTO em vez de PC_DESCMAXLIBERACAO |
Bloqueio condicional em cada VALIDA_MODELOBLOQUEIO* | Branch IF (V_TP_MODELOBLOQUEIO = 'A') com IF (I_VL_DOCUMENTO > I_VL_CREDITO) AND (V_VL_LIMITEACUMPARMUSUARIO > I_VL_CREDITO) — trava e marca O_TP_BLOQUEIOALCADA |
| Liberação exige escalonamento | MPD003/MRC005/MOF007/MNF003 lançam JException W-0000 pedindo "usuário com Maior Limite ou Maior Número de Dias por Alçada! [ADM012]" (UdmMPD003.pas:254-257) |
Simulação passo a passo
- Cliente Alpha com
CREDITO.VL_CREDITO = R$ 1.000,00,ST_BLOQUEIO = 'C'. - João tem
PARMUSUARIO.VL_LIMITECREDACUMULADO = R$ 1.200,00(alçada). - João lança pedido de R$ 1.500,00.
VALIDA_MODELOBLOQUEIOVLLIMITEentra no branchV_TP_MODELOBLOQUEIO = 'A'(VALIDA_MODELOBLOQUEIOVLLIMITE.sql:136-166).1500 > 1000✔ e1200 > 1000✔ → gravaO_TP_BLOQUEIO = 'T'/'C'+O_TP_BLOQUEIOALCADA = 'L'.- MPD003 detecta
LemO_TP_BLOQUEIOALCADAe, comoTP_MODELOBLOQUEIO = 'A', lança exceção "Solicite a Liberação da Venda a um Usuário com Maior Limite ou Maior Número de Dias por Alçada!". - Se João tivesse alçada de R$ 1.600,00 (
VL_LIMITECREDACUMULADO > I_VL_DOCUMENTO),1600 > 1000 = truemas1500 > 1600 = false— nesta leitura deVALIDA_MODELOBLOQUEIOVLLIMITEo fluxo é não trava (o IF de alçada exige que tanto o documento quanto a alçada superem o limite para travar). Vendedor com alçada alta não vê o bloqueio.
Resultado esperado: o bloqueio é discriminado por usuário. Usuários com alçada abaixo do limite do cliente travam; usuários com alçada alta passam direto; quando trava, exige escalonamento para outro usuário (a TFA002 não é tocada).
L - Alçada com Atualização de Valor de Crédito na TFA002
| O que faz | Detalhe |
|---|---|
| Modelo "híbrido" | Trava como o modelo N (qualquer excesso), mas sinaliza que a liberação pode atualizar o crédito do cliente |
| Habilita a aba Lib. Venda (Alçada) na ADM012 | Mesma regra do modelo A (<> 'N' → aba visível) |
Desabilita PC_DESCMAXLIBERACAO | Mesma regra do modelo A |
Nos VALIDA_MODELOBLOQUEIO* trava e marca alçada | Branch IF (V_TP_MODELOBLOQUEIO IN ('N', 'L')) trava normalmente; em seguida, branch extra IF (V_TP_MODELOBLOQUEIO IN ('L')) adiciona L/D/P em O_TP_BLOQUEIOALCADA (VALIDA_MODELOBLOQUEIOVLLIMITE.sql:122-132, VALIDA_MODELOBLOQUEIODIASATRASO.sql:51-57, VALIDA_MODELOBLOQUEIOPCDESCMAX.sql:47-53) |
| Liberação roteia para TFA002 | MPD003/MRC005/MOF007/MNF003 exibem exceção "Solicite a Liberação da Venda Atualizando o Limite do Cliente na TFA002" (UdmMPD003.pas:259-267, UdmMRC005.pas:260-267, UdmMNF003.pas:254-262) |
Simulação passo a passo
- Cliente Alpha com
CREDITO.VL_CREDITO = R$ 1.000,00,ST_BLOQUEIO = 'C'. - João lança pedido de R$ 1.500,00.
VALIDA_MODELOBLOQUEIOVLLIMITEentra emV_TP_MODELOBLOQUEIO IN ('N', 'L').1500 > 1000→O_TP_BLOQUEIO = 'T'/'C'.- Em seguida, branch
V_TP_MODELOBLOQUEIO IN ('L')(linha 122-132) adicionaO_TP_BLOQUEIOALCADA = 'L'. - MPD003 detecta
LemO_TP_BLOQUEIOALCADAe, comoTP_MODELOBLOQUEIO = 'L'(nãoA), lança exceção orientando o liberador a ir à TFA002 e atualizarCREDITO.VL_CREDITOdo cliente. - Após a atualização na TFA002, o novo limite passa a valer e o bloqueio não ocorre mais.
Resultado esperado: o bloqueio sempre ocorre (independe de alçada do usuário), mas a orientação ao liberador é aumentar o limite do cliente na TFA002 em vez de apenas autorizar o documento pontualmente. Ideal para operações onde a política é "cliente bom sempre tem limite renegociado, não liberação caso a caso".
Interação com ST_BLOQUEIOPED / VL_CREDITO / VL_CREDITOACUM
TP_MODELOBLOQUEIO não bloqueia sozinho — ele apenas modula como o bloqueio acontece. A existência do bloqueio é decidida por:
PARMFATUR.ST_BLOQUEIOPED/ST_BLOQUEIONF— indicam quais categorias de bloqueio estão ativas na empresa (crédito em R$, acumulado, dias, desconto, subgrupo, etc.). Os códigos são letras:C= crédito em R$,T= acumulado,D= dias de atraso,U= % usuário, etc. Se estiverem vazios, nada bloqueia, eTP_MODELOBLOQUEIOé inócuo.CREDITO.VL_CREDITO/VL_CREDITOACUM/NR_DIASATRASO— valores por cliente que definem o limite real. Sem esses valores preenchidos (ou comI_VL_CREDITO IS NULL), oVALIDA_MODELOBLOQUEIOVLLIMITEnem entra no IF (linha 40) — novamente,TP_MODELOBLOQUEIOnão é consultado.PARMUSUARIO.VL_LIMITECREDACUMULADO/NR_DIASATRASO/PC_MAXDESCONTO— só relevantes no modeloA. Se o usuário liberador não tem alçada cadastrada, o modeloAcai no ELSE (VALIDA_MODELOBLOQUEIOVLLIMITE.sql:93-104) e se comporta comoN(trava direto).
A ordem de avaliação é: o cliente/pessoa precisa estar com política de bloqueio ativa (PESSOA.ST_BLOQUEIO) e com limite definido em CREDITO; o parâmetro do faturamento (ST_BLOQUEIOPED/NF) precisa incluir o código da categoria; só então o TP_MODELOBLOQUEIO decide se é bloqueio direto (N), por alçada (A) ou com atualização de crédito (L).
Encadeamento prático
PESSOA.ST_BLOQUEIO (cliente) → PARMFATUR.ST_BLOQUEIOPED/NF → CREDITO.VL_* → TP_MODELOBLOQUEIO → PARMUSUARIO.*
(quem entra no jogo?) (quais categorias valem?) (quais tetos?) (como resolver?) (alçada do liberador)
Tabela Comparativa Resumida
| Aspecto | N (Normal) | A (Alçada) | L (Alçada c/ TFA002) |
|---|---|---|---|
| Bloqueia ao exceder limite do cliente? | Sim, sempre | Só se também exceder alçada do usuário | Sim, sempre |
| Aba "Lib. Venda (Alçada)" na ADM012 | Oculta | Visível | Visível |
edtPC_DESCMAXLIBERACAO na ADM012 | Editável | Desabilitado | Desabilitado |
Teto usado em VERIFICA_BLOQUEIO | PARMUSUARIO.PC_DESCMAXLIBERACAO | PARMUSUARIO.PC_MAXDESCONTO | PARMUSUARIO.PC_MAXDESCONTO |
Preenche O_TP_BLOQUEIOALCADA? | Não | Sim (L/D/P) — quando trava | Sim (L/D/P) — sempre que trava |
| Fluxo de liberação | Usuário com PC_DESCMAXLIBERACAO libera na própria tela (MPD003/MRC005/MNF003…) | Escalonamento para usuário com alçada maior (erro "[ADM012]") | Atualização de CREDITO.VL_CREDITO na TFA002 |
| Mensagem no cliente Delphi | "Valor Documento… Limite…" | "…Solicite a Liberação…a um Usuário com Maior Limite ou Maior Número de Dias por Alçada! [ADM012]" | "…Solicite a Liberação da Venda Atualizando o Limite do Cliente na TFA002" |
| Granularidade | Empresa | Empresa + usuário liberador | Empresa + cliente |
Referências no Código Fonte
Delphi (D:/Desenvolvimento/JunsoftERP_V2/source/)
MFA001/UMFA001.dfm:4588-4615— ComboBoxcmbTP_MODELOBLOQUEIO(Opção 1 do faturamento)MFA001/UMFA001.dfm:3939-3941— Label "Modelo de Bloqueio de Faturamento"MFA001/UMFA001.pas:508— declaraçãocmbTP_MODELOBLOQUEIO: TwwDBComboBoxMFA001/UdmMFA001.dfm:1883-1886—TStringField tabPARMFATURTP_MODELOBLOQUEIO(FixedChar, Size=1)MFA001/UdmMFA001.dfm:2437, 2609, 2861—TP_MODELOBLOQUEIOnos SQL de SELECT/INSERT/UPDATE do datasetMFA001/UdmMFA001.pas:267— declaração do fieldMFA001/UdmMFA001.pas:560—AfterInsertdefine'N'como defaultADM012/UADM012.pas:252-257— esconde/mostra abapagLibVendaconformeTP_MODELOBLOQUEIOADM012/UdmADM012.pas:750-766—verificaComponentesLiberacaoVendahabilita/desabilitaedtPC_DESCMAXLIBERACAOMPD003/UdmMPD003.pas:248-271— ramifica mensagem de liberação por'A'vs'L'MPD081/UdmMPD081.pas:575-598— idem no módulo de pneusMRC005/UdmMRC005.pas:254-273— idem no recebimentoMRC040/UdmMRC040.pas:661-680— idemMOF007/UdmMOF007.pas:193-215— idem na oficinaMOF008/UdmMOF008.pas:955-977— idemMNF003/UdmMNF003.pas:243-265— idem na liberação de NF
SQL (D:/Desenvolvimento/JunsoftERP_V2/Scripts/)
VERIFICA_BLOQUEIO.sql:89— declaraçãoV_TP_MODELOBLOQUEIOVERIFICA_BLOQUEIO.sql:143-152— leitura do campo dePARMFATURVERIFICA_BLOQUEIO.sql:164-170— quando<> 'N', buscaPC_MAXDESCONTOdaPARMUSUARIOVERIFICA_BLOQUEIO.sql:266-273— quando= 'N', buscaPC_DESCMAXLIBERACAOVALIDA_MODELOBLOQUEIOVLLIMITE.sql:19, 26-30— leitura do parâmetroVALIDA_MODELOBLOQUEIOVLLIMITE.sql:40-170— matriz de decisãoN/LvsAparaVL_CREDITOeVL_CREDITOACUMVALIDA_MODELOBLOQUEIODIASATRASO.sql:17, 23-27— leituraVALIDA_MODELOBLOQUEIODIASATRASO.sql:37-92— matriz de decisão paraNR_DIASATRASOVALIDA_MODELOBLOQUEIOPCDESCMAX.sql:15, 22-26— leituraVALIDA_MODELOBLOQUEIOPCDESCMAX.sql:36-80— matriz de decisão paraPC_DESCTRGPARMFATUR_BU.sql— trigger que audita alterações do campo emLOGPARAMETROS
APIs REST (Java)
source/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/JunsoftBuilder.java— expõe o campo no SELECT buildersource/Server/JunsoftWebAPI/src/main/java/junsoft/erp/repository/queries/ParmFaturSQL.java— query de leitura do parâmetro