Pular para o conteúdo principal

VL_MINPARCELAPEDIDO - Valor Mínimo para Parcela de Pedido

Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (pagPedidoOp1 → grpPedidos = "Parâmetros de Pedidos/ Ordem de Serviço"). Rótulo no formulário: "Valor Mínimo Para Parcela de Pedido" (lbl2, UMFA001.dfm:7901-7914). Tabela: PARMFATUR.VL_MINPARCELAPEDIDO Tipo: Numérico (valor em R$) — DOM_NUMERIC15_2 no DDL (PARMFATUR.sql:88); TFMTBCDField com DisplayFormat = '#,0.00' / EditFormat = '#,0.00' no client. Valor padrão: NULL — não preenchido no AfterInsert de UdmMFA001.pas (linhas 434-603). Equivale a "sem teto mínimo configurado".

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — cadastra/edita o valor
Pedido de VendaMPD002Consumidora direta — valida o menor VL_DOCUMENTO retornado por RETORNA_PARCELAPEDIDO contra o parâmetro (duas validações: no recálculo de parcelamento e no BtnSalvar)
Pedido OutrosMPD018Carrega VL_MINPARCELAPEDIDO em BuscaParametros (posição 10 do Resultado)
Locação (pedido)MPD088Consumidora direta — usa parmFatur.Values['VL_MINPARCELAPEDIDO'] como 6º parâmetro ao chamar o formulário de parcelamento (TfrmParcelaPedido)
Pedido de CompraMPD092Carrega no Busca_Parametros (posição 10)
Ordem de ServiçoMOF001Carrega no SELECT de PARMFATUR (última posição do array de resultados)
Ordem de Serviço (Outra)MOF005Carrega no SELECT de PARMFATUR (posição 8)
Recapagem (frame de bloqueio/alçada)MRC001Consumidora direta — valida parcela mínima de pedido de recapadora usando RETORNA_PARCELAPEDIDO; lança W-0000 quando abaixo do teto
Recapagem (frame alçada variante)MRC031Passa o valor como 5º parâmetro para busca('CONDPAGTO', parm) — restringe condições de pagamento apresentadas no pesquisa
Pedido Pneu (liberação)MRC040Usa tabPedidoPneuVL_MINPARCELAPEDIDO (campo do dataset que faz JOIN com PARMFATUR) como 5º parâmetro de busca('CONDPAGTO', parm)
Comprovante RecapCPD009Lê no dataset de parâmetros (SELECT/INSERT/UPDATE do PARMFATUR)
RecapadoraRCA006Lê no dataset de parâmetros (SELECT/INSERT/UPDATE do PARMFATUR)
Framework de parcelamentojParcelamento/UParcelaPedido.pasConsumidora central — toda tela que abre TfrmParcelaPedido (montagem manual de parcelas) recai nesta validação

Procedures impactadas​

Procedure / ViewPapel
RETORNA_VALORPARCELAMENTOConsumidora direta. Lê PARMFATUR.VL_MINPARCELAPEDIDO via JOIN com PARMFATUR (Coalesce(PF.VL_MINPARCELAPEDIDO,0) — linha 22) e devolve em V_VL_MINIMO junto das opções de parcelamento disponíveis para um orçamento
RETORNA_PARCELAPEDIDOUsada pelas telas para obter o menor VL_DOCUMENTO de parcela dado CD_CONDPAGTO (emissão/vencimento/entrega/total). É o valor comparado contra VL_MINPARCELAPEDIDO em MPD002 e MRC001. Não lê o parâmetro diretamente — quem compara é o código Delphi.

Campos envolvidos​

CampoTabelaDescrição
VL_MINPARCELAPEDIDOPARMFATURValor mínimo em R$ aceito por parcela em pedidos/recapagens/ordens-serviço/locações
VL_MINIMOPEDIDOPARMFATURParâmetro irmão — define o valor total mínimo do pedido (não da parcela). Usado em conjunto em validações de obrigatoriedade de transportador/redespacho em MPD002
ST_PARCELAPEDIDOPARMFATURQuando 'S', ativa montagem de parcelas no pedido — é pré-requisito para que a validação de mínimo se faça útil
ST_CONDPAGTOPEDIDO / ORDEMLOCACAOQuando 'V' (à vista) o ramo da checagem é diferente; 'P' (a prazo) é o cenário típico em que o teto é verificado
VL_PARCELAPARCELAPEDIDO / PARCELAValor gerado pela Gera_Parcelas em UParcelaPedido.pas — comparado contra vlMinParcelaPedido no laço de validação
VL_DOCUMENTOSaída de RETORNA_PARCELAPEDIDOMenor valor de parcela calculado para uma condição de pagamento → objeto da comparação em MPD002

Comportamento / Regra de aplicação​

O parâmetro representa o piso em R$ aceito por parcela em pedidos de venda, pedidos de recapagem (pneu), ordens de serviço/orçamentos, pedidos de compra e pedidos de locação. Não bloqueia automaticamente em todos os fluxos: dependendo da tela a ação é um aviso "Deseja Continuar?" (C-0000) ou uma exceção dura (W-0000). Não existe procedure única centralizadora — a checagem vive no Delphi de cada consumidor e no framework jParcelamento.

Valor = NULL (padrão ao criar o registro no MFA001)​

AspectoComportamento
Precisa estar preenchido?Não — é o estado inicial (o AfterInsert de UdmMFA001.pas não atribui valor).
Validação em MPD002Não ocorre — as duas guardas if (parmfatur.values['VL_MINPARCELAPEDIDO'] <> '') (UMPD002.pas:1324 e UMPD002.pas:3077) pulam o bloco.
Validação em jParcelamento.UParcelaPedidoNão ocorre — a guarda if (frmParcelaPedido.vlMinParcelaPedido <> '') (linha 951) pula.
Validação em MRC001Não ocorre — a guarda if (parmFatur.Values['VL_MINPARCELAPEDIDO'] <> '') (linha 605) pula.
Comportamento em RETORNA_VALORPARCELAMENTOCOALESCE(PF.VL_MINPARCELAPEDIDO, 0) → V_VL_MINIMO = 0 (sem efeito prático, já que é retornado mas consumido pelo chamador).
Filtro de CONDPAGTO em MRC031/MRC040Passa Nulo('', 'S') como 5º parâmetro → não restringe condições de pagamento.

Resultado esperado: o sistema não impõe piso de parcela. Qualquer valor de parcela é aceito. Este é o estado "desligado".

Valor > 0 (ex.: R$ 50,00)​

AspectoComportamento
MPD002 — alteração de prazo/dataChama RETORNA_PARCELAPEDIDO e compara VL_DOCUMENTO com o parâmetro. Se o menor VL_DOCUMENTO for menor que VL_MINPARCELAPEDIDO, emite C-0000 "O Valor da Parcela do Pedido Está Abaixo do Valor Permitido (R$ X,XX). [MFA001] Deseja Continuar?". Se o usuário nega, raise JException.Create('W-0000', ['Alteração Bloqueada!']).
MPD002 — BtnSalvarMesma lógica (UMPD002.pas:3077-3089) — pergunta com "Deseja Continuar?" antes de salvar.
jParcelamento.UParcelaPedido (Gera_Parcelas)Para cada parcela gerada: if (StrToFloat(vlMinParcelaPedido) > tabPARCELAVL_PARCELA.AsFloat) → C-0000 com "O Valor da Parcela Nº N do Pedido Está Abaixo do Permitido (R$ X,XX). Deseja Continuar?". "Não" lança W-0000 "Parcelamento Cancelado!".
MRC001Checagem dura (sem confirmação): lança W-0000 "O Valor da parcela do Pedido de Recapadora Está Abaixo do Valor Permitido(MFA001) (R$ X,XX).".
MRC031 / MRC040O valor é passado como 5º parâmetro para a rotina busca('CONDPAGTO', parm) — restringe as condições de pagamento exibidas ao usuário para apenas aquelas cujo menor valor de parcela ≥ VL_MINPARCELAPEDIDO.
MPD002 — obrigatoriedade de transportador/redespachoQuando ST_ALTERAPEDIDO = 'A' e VL_MINPARCELAPEDIDO <> '' e VL_MINIMOPEDIDO <> '', passa a exigir CD_TRANSPORTADOR e CD_REDESPACHO no pedido (UMPD002.pas:2318-2341). Aqui o parâmetro funciona como "flag de perfil", não como valor de comparação.

Simulação passo a passo​

  1. MFA001 → aba Parâmetros → Pedidos / O.S. → Opção 1 → campo "Valor Mínimo Para Parcela de Pedido" = 50,00.
  2. Aba Parâmetros → Pedidos / O.S. → Opção 1 → ST_PARCELAPEDIDO = Sim (para que parcelas sejam geradas).
  3. Salve os parâmetros (F6).
  4. Abra um pedido em MPD002 com VL_TOTAL = R$ 120,00 e condição de pagamento de 3× (menor parcela = R$ 40,00).
  5. No BtnSalvar:
    • RETORNA_PARCELAPEDIDO(...) devolve VL_DOCUMENTO = 40,00.
    • 50,00 > 40,00 → dispara C-0000:

      "O Valor da Parcela do Pedido Está Abaixo do Valor Permitido (R$ 50,00). [MFA001] Deseja Continuar?"

    • Usuário clica "Não" → W-0000 "Alteração Bloqueada!".
  6. Troque para condição de 2× (menor parcela = R$ 60,00):
    • 50,00 > 60,00 é falso → salva sem avisos.
  7. Para o mesmo pedido em MRC001 (recapagem), o fluxo não pergunta — lança direto W-0000 "O Valor da parcela do Pedido de Recapadora Está Abaixo do Valor Permitido(MFA001) (R$ 50,00).".

Resultado esperado:

  • Em vendas/OS normais (MPD002/MPD088/framework jParcelamento) o parâmetro é aviso com confirmação (C-0000) — o usuário pode ignorar.
  • Em recapadora (MRC001) é bloqueio duro (W-0000).
  • Em MRC031/MRC040 age como filtro preventivo no combo/pesquisa de CONDPAGTO, evitando que o usuário sequer selecione uma condição que violaria o teto.

Valor = 0​

AspectoComportamento
Guardas <> ''Passam — 0 é texto não vazio quando formatado pelo campo. Mas a comparação numérica (StrToFloat(...) > ...) com 0 sempre é false.
Validação efetivaNenhuma parcela positiva é rejeitada; só uma parcela negativa ou zero seria bloqueada — o que não ocorre na prática.

Resultado esperado: 0 ≡ parâmetro "ligado" mas inócuo. Funcionalmente equivalente a NULL para a comparação de mínimo; porém, em MPD002 acaba ativando a regra combinada de obrigatoriedade de transportador/redespacho (ST_ALTERAPEDIDO = 'A' + VL_MINPARCELAPEDIDO <> '' + VL_MINIMOPEDIDO <> ''). Esse é o único efeito perceptível de salvar 0.


Interação com outros parâmetros​

ParâmetroEfeito combinado
PARMFATUR.VL_MINIMOPEDIDOComplementar. VL_MINIMOPEDIDO é o total mínimo do pedido; VL_MINPARCELAPEDIDO é o valor por parcela. Em MPD002 ambos precisam estar preenchidos (≠ '') + ST_ALTERAPEDIDO = 'A' para acionar a exigência de transportador/redespacho.
PARMFATUR.ST_PARCELAPEDIDOPré-requisito funcional. Sem ST_PARCELAPEDIDO = 'S' (ou flag de pneu), a tela nunca chama Gera_Parcelas — logo, a validação do mínimo não é executada.
PARMFATUR.ST_JUROVENDACarregado em conjunto (mesmo SELECT de UParcelaPedido.pas:227-233). Quando 'M' (Juros Prazo Médio), altera a composição da 1ª parcela, mas a comparação do mínimo se mantém.
PARMFATUR.ST_BLOQUEIOPEDLido pelas mesmas telas consumidoras (MRC040, MOF001, etc.), porém é independente — trata bloqueios de cadastro/alçada, não de parcela.
PARMFATUR.ST_CONDPAGTO do pedido = 'V' (à vista)A validação é pulada — o ramo if (ST_CONDPAGTO.AsString <> 'V') protege (UMPD002.pas:1322, UMPD002.pas:3075). À vista não gera parcelas.
CONDPAGTO filtradas em MRC031/MRC040Usa o parâmetro como 5º argumento de busca('CONDPAGTO', parm) — impede seleção de condição incompatível antes mesmo do usuário montar o pedido. Mais preventivo que o fluxo do MPD002 (que valida só no Save).
RETORNA_PARCELAPEDIDOFunção externa consultada por Delphi para obter o menor VL_DOCUMENTO — base da comparação. É a fonte de verdade das parcelas calculadas a partir da condição de pagamento.
API Java VulcanoColeta.ParametrosDAOExpõe o parâmetro para apps mobile via setVlParcMinima(...) — apps mobile também devem respeitar o piso, mas a regra de bloqueio depende de cada endpoint/app (fora do escopo desta documentação).
Sem OnValidate no MFA001Não há tabPARMFATURVL_MINPARCELAPEDIDOValidate. Valores negativos são rejeitados apenas pela ausência de suporte a negativos no TDBEdit de valor; não há mensagem customizada.

Referências no Código Fonte​

Delphi​

ArquivoLinhasPapel
source/MFA001/UMFA001.dfm7901-7914 (lbl2), 8579-8595 (edtPC_DESCONTOPED2)Label "Valor Mínimo Para Parcela de Pedido" e TDBEdit com DataField = 'VL_MINPARCELAPEDIDO'. Parent: pagPedidoOp1 → grpPedidos ("Parâmetros de Pedidos/ Ordem de Serviço"). Obs: nome do componente edtPC_DESCONTOPED2 é misleading — legado; DataField aponta para VL_MINPARCELAPEDIDO.
source/MFA001/UdmMFA001.pas128Declaração de tabPARMFATURVL_MINPARCELAPEDIDO: TFMTBCDField. Nenhum OnValidate e nenhuma atribuição em AfterInsert (linhas 434-603).
source/MFA001/UdmMFA001.dfm133, 1088-1095, 2374, 2531, 2743, 3013Field TFMTBCDField (Precision=18, Size=2, DisplayFormat='#,0.00', EditFormat='#,0.00') + cláusulas SELECT/INSERT/UPDATE do PARMFATUR incluindo VL_MINPARCELAPEDIDO.
source/MPD002/UdmMPD002.pas5742BuscaParametros inclui P.VL_MINPARCELAPEDIDO no SELECT de PARMFATUR.
source/MPD002/UMPD002.pas1324-1335, 2319, 2329, 3077-3089Consumo direto. Duas validações (recálculo de parcelamento e BtnSalvar) via RETORNA_PARCELAPEDIDO + C-0000 "Deseja Continuar?"; também compõe a regra combinada de obrigatoriedade de transportador/redespacho (com VL_MINIMOPEDIDO e ST_ALTERAPEDIDO = 'A').
source/MPD018/UdmMPD018.pas287, 302 (atribuição a iVl_MinParcelaPedido)Carrega parâmetro no Busca_Parametros (posição 10 do Resultado).
source/MPD088/UdmMPD088.pas1268Consumo direto em locação — pega parmFatur.Values['VL_MINPARCELAPEDIDO'] e repassa como 6º parâmetro ao chamar TfrmParcelaPedido (jParcelamento).
source/MPD092/UdmMPD092.pas278Carrega parâmetro no Busca_Parametros (pedido de compra).
source/MOF001/UdmMOF001.pas727Carrega em Busca_Parametros de Ordem de Serviço.
source/MOF005/UdmMOF005.pas225Carrega em Busca_Parametros de OS variante.
source/MRC001/UframeMRC001.pas605-627, 1019-1022Consumo direto em recapadora. Valida parcela mínima via RETORNA_PARCELAPEDIDO — bloqueio duro W-0000 (sem confirmação). Também passa como 5º parâmetro para busca('CONDPAGTO', parm).
source/MRC031/UframeMRC031.pas317-320Passa o valor como 5º parâmetro para busca('CONDPAGTO', parm) — filtra condições de pagamento pelas compatíveis com o piso.
source/MRC040/UdmMRC040.dfm(field definition)Field tabPedidoPneuVL_MINPARCELAPEDIDO: TFMTBCDField no dataset tabPedidoPneu (JOIN com PARMFATUR).
source/MRC040/UdmMRC040.pas81, 623Declaração do field no dataset; SELECT que faz JOIN PARMFATUR PF trazendo PF.VL_MINPARCELAPEDIDO.
source/MRC040/UformMRC040.pas735-738Usa tabPedidoPneuVL_MINPARCELAPEDIDO.AsString como 5º parâmetro de busca('CONDPAGTO', parm).
source/CPD009/UdmCPD009.dfm324, 388, 487, 591Leitura no dataset de parâmetros (SELECT/INSERT/UPDATE de PARMFATUR).
source/RCA006/UdmRCA006.dfm3073, 3137, 3236, 3340Leitura no dataset de parâmetros (SELECT/INSERT/UPDATE de PARMFATUR).
source/jParcelamento/UParcelaPedido.pas86, 227-233, 951-954Framework central de parcelamento. Carrega VL_MINPARCELAPEDIDO junto com ST_JUROVENDA no Show_Parcelamento. Em Gera_Parcelas compara cada VL_PARCELA gerada contra vlMinParcelaPedido e dispara C-0000 com opção de cancelar (W-0000 "Parcelamento Cancelado!").

SQL (Firebird)​

ArquivoLinhasPapel
Scripts/RETORNA_VALORPARCELAMENTO.sql15, 22, 37-38Procedure consumidora direta — COALESCE(PF.VL_MINPARCELAPEDIDO,0) no JOIN com PARMFATUR; retorna em V_VL_MINIMO junto das opções de parcelamento do orçamento.
docs/schema/tables/PARMFATUR.sql88DDL: VL_MINPARCELAPEDIDO DOM_NUMERIC15_2.

Java (APIs REST Mobile)​

ArquivoLinhasPapel
source/Server/VulcanoColeta/VulcanoColetaRestAS/.../DAO/ParametrosDAO.java23, 101-103Expõe o parâmetro para apps mobile (VulcanoColeta) via parametros.setVlParcMinima(rs.getDouble("VL_MINPARCELAPEDIDO")).