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_MINPARCELAPEDIDOTipo: Numérico (valor em R$) —DOM_NUMERIC15_2no DDL (PARMFATUR.sql:88);TFMTBCDFieldcomDisplayFormat = '#,0.00'/EditFormat = '#,0.00'no client. Valor padrão:NULL— não preenchido noAfterInsertdeUdmMFA001.pas(linhas 434-603). Equivale a "sem teto mínimo configurado".
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cadastra/edita o valor |
| Pedido de Venda | MPD002 | Consumidora 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 Outros | MPD018 | Carrega VL_MINPARCELAPEDIDO em BuscaParametros (posição 10 do Resultado) |
| Locação (pedido) | MPD088 | Consumidora direta — usa parmFatur.Values['VL_MINPARCELAPEDIDO'] como 6º parâmetro ao chamar o formulário de parcelamento (TfrmParcelaPedido) |
| Pedido de Compra | MPD092 | Carrega no Busca_Parametros (posição 10) |
| Ordem de Serviço | MOF001 | Carrega no SELECT de PARMFATUR (última posição do array de resultados) |
| Ordem de Serviço (Outra) | MOF005 | Carrega no SELECT de PARMFATUR (posição 8) |
| Recapagem (frame de bloqueio/alçada) | MRC001 | Consumidora 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) | MRC031 | Passa o valor como 5º parâmetro para busca('CONDPAGTO', parm) — restringe condições de pagamento apresentadas no pesquisa |
| Pedido Pneu (liberação) | MRC040 | Usa tabPedidoPneuVL_MINPARCELAPEDIDO (campo do dataset que faz JOIN com PARMFATUR) como 5º parâmetro de busca('CONDPAGTO', parm) |
| Comprovante Recap | CPD009 | Lê no dataset de parâmetros (SELECT/INSERT/UPDATE do PARMFATUR) |
| Recapadora | RCA006 | Lê no dataset de parâmetros (SELECT/INSERT/UPDATE do PARMFATUR) |
| Framework de parcelamento | jParcelamento/UParcelaPedido.pas | Consumidora central — toda tela que abre TfrmParcelaPedido (montagem manual de parcelas) recai nesta validação |
Procedures impactadas
| Procedure / View | Papel |
|---|---|
RETORNA_VALORPARCELAMENTO | Consumidora 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_PARCELAPEDIDO | Usada 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
| Campo | Tabela | Descrição |
|---|---|---|
VL_MINPARCELAPEDIDO | PARMFATUR | Valor mínimo em R$ aceito por parcela em pedidos/recapagens/ordens-serviço/locações |
VL_MINIMOPEDIDO | PARMFATUR | Parâ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_PARCELAPEDIDO | PARMFATUR | Quando 'S', ativa montagem de parcelas no pedido — é pré-requisito para que a validação de mínimo se faça útil |
ST_CONDPAGTO | PEDIDO / ORDEMLOCACAO | Quando 'V' (à vista) o ramo da checagem é diferente; 'P' (a prazo) é o cenário típico em que o teto é verificado |
VL_PARCELA | PARCELAPEDIDO / PARCELA | Valor gerado pela Gera_Parcelas em UParcelaPedido.pas — comparado contra vlMinParcelaPedido no laço de validação |
VL_DOCUMENTO | Saída de RETORNA_PARCELAPEDIDO | Menor 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)
| Aspecto | Comportamento |
|---|---|
| Precisa estar preenchido? | Não — é o estado inicial (o AfterInsert de UdmMFA001.pas não atribui valor). |
| Validação em MPD002 | Não ocorre — as duas guardas if (parmfatur.values['VL_MINPARCELAPEDIDO'] <> '') (UMPD002.pas:1324 e UMPD002.pas:3077) pulam o bloco. |
Validação em jParcelamento.UParcelaPedido | Não ocorre — a guarda if (frmParcelaPedido.vlMinParcelaPedido <> '') (linha 951) pula. |
| Validação em MRC001 | Não ocorre — a guarda if (parmFatur.Values['VL_MINPARCELAPEDIDO'] <> '') (linha 605) pula. |
Comportamento em RETORNA_VALORPARCELAMENTO | COALESCE(PF.VL_MINPARCELAPEDIDO, 0) → V_VL_MINIMO = 0 (sem efeito prático, já que é retornado mas consumido pelo chamador). |
Filtro de CONDPAGTO em MRC031/MRC040 | Passa 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)
| Aspecto | Comportamento |
|---|---|
| MPD002 — alteração de prazo/data | Chama 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 — BtnSalvar | Mesma 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!". |
| MRC001 | Checagem 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 / MRC040 | O 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/redespacho | Quando 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
- MFA001 → aba Parâmetros → Pedidos / O.S. → Opção 1 → campo "Valor Mínimo Para Parcela de Pedido" =
50,00. - Aba Parâmetros → Pedidos / O.S. → Opção 1 →
ST_PARCELAPEDIDO=Sim(para que parcelas sejam geradas). - Salve os parâmetros (F6).
- Abra um pedido em MPD002 com
VL_TOTAL = R$ 120,00e condição de pagamento de 3× (menor parcela = R$ 40,00). - No
BtnSalvar:RETORNA_PARCELAPEDIDO(...)devolveVL_DOCUMENTO = 40,00.50,00 > 40,00→ disparaC-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!".
- Troque para condição de 2× (menor parcela = R$ 60,00):
50,00 > 60,00é falso → salva sem avisos.
- 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
| Aspecto | Comportamento |
|---|---|
Guardas <> '' | Passam — 0 é texto não vazio quando formatado pelo campo. Mas a comparação numérica (StrToFloat(...) > ...) com 0 sempre é false. |
| Validação efetiva | Nenhuma 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âmetro | Efeito combinado |
|---|---|
PARMFATUR.VL_MINIMOPEDIDO | Complementar. 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_PARCELAPEDIDO | Pré-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_JUROVENDA | Carregado 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_BLOQUEIOPED | Lido 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/MRC040 | Usa 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_PARCELAPEDIDO | Funçã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.ParametrosDAO | Expõ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 MFA001 | Nã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
| Arquivo | Linhas | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 7901-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.pas | 128 | Declaração de tabPARMFATURVL_MINPARCELAPEDIDO: TFMTBCDField. Nenhum OnValidate e nenhuma atribuição em AfterInsert (linhas 434-603). |
source/MFA001/UdmMFA001.dfm | 133, 1088-1095, 2374, 2531, 2743, 3013 | Field TFMTBCDField (Precision=18, Size=2, DisplayFormat='#,0.00', EditFormat='#,0.00') + cláusulas SELECT/INSERT/UPDATE do PARMFATUR incluindo VL_MINPARCELAPEDIDO. |
source/MPD002/UdmMPD002.pas | 5742 | BuscaParametros inclui P.VL_MINPARCELAPEDIDO no SELECT de PARMFATUR. |
source/MPD002/UMPD002.pas | 1324-1335, 2319, 2329, 3077-3089 | Consumo 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.pas | 287, 302 (atribuição a iVl_MinParcelaPedido) | Carrega parâmetro no Busca_Parametros (posição 10 do Resultado). |
source/MPD088/UdmMPD088.pas | 1268 | Consumo direto em locação — pega parmFatur.Values['VL_MINPARCELAPEDIDO'] e repassa como 6º parâmetro ao chamar TfrmParcelaPedido (jParcelamento). |
source/MPD092/UdmMPD092.pas | 278 | Carrega parâmetro no Busca_Parametros (pedido de compra). |
source/MOF001/UdmMOF001.pas | 727 | Carrega em Busca_Parametros de Ordem de Serviço. |
source/MOF005/UdmMOF005.pas | 225 | Carrega em Busca_Parametros de OS variante. |
source/MRC001/UframeMRC001.pas | 605-627, 1019-1022 | Consumo 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.pas | 317-320 | Passa 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.pas | 81, 623 | Declaração do field no dataset; SELECT que faz JOIN PARMFATUR PF trazendo PF.VL_MINPARCELAPEDIDO. |
source/MRC040/UformMRC040.pas | 735-738 | Usa tabPedidoPneuVL_MINPARCELAPEDIDO.AsString como 5º parâmetro de busca('CONDPAGTO', parm). |
source/CPD009/UdmCPD009.dfm | 324, 388, 487, 591 | Leitura no dataset de parâmetros (SELECT/INSERT/UPDATE de PARMFATUR). |
source/RCA006/UdmRCA006.dfm | 3073, 3137, 3236, 3340 | Leitura no dataset de parâmetros (SELECT/INSERT/UPDATE de PARMFATUR). |
source/jParcelamento/UParcelaPedido.pas | 86, 227-233, 951-954 | Framework 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)
| Arquivo | Linhas | Papel |
|---|---|---|
Scripts/RETORNA_VALORPARCELAMENTO.sql | 15, 22, 37-38 | Procedure 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.sql | 88 | DDL: VL_MINPARCELAPEDIDO DOM_NUMERIC15_2. |
Java (APIs REST Mobile)
| Arquivo | Linhas | Papel |
|---|---|---|
source/Server/VulcanoColeta/VulcanoColetaRestAS/.../DAO/ParametrosDAO.java | 23, 101-103 | Expõe o parâmetro para apps mobile (VulcanoColeta) via parametros.setVlParcMinima(rs.getDouble("VL_MINPARCELAPEDIDO")). |