Pular para o conteúdo principal

ST_CONTROLETFA002 - Controle de Crédito do Cliente

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 2 → "Controle de Crédito Cliente [TFA002]" Tabela: PARMFATUR.ST_CONTROLETFA002 Valor padrão: A (Automático)

Telas impactadas​

MóduloCódigoDescrição
Limite de CréditoTFA002Cadastro/manutenção do limite de crédito por pessoa/grupo
Parâmetros de FaturamentoMFA001Define o modo de controle

Procedures impactadas​

Procedure / ViewOnde é usadoUso
VIEW_CREDITOPESSOAConsulta de crédito da pessoa (cliente)Lê ST_CONTROLETFA002 em PARMFATUR para decidir se calcula o crédito dinamicamente a partir de CONTAS/PEDIDO (modo Automático A / NULL) ou apenas lê o cadastro manual em CREDITO / CREDITOGRUPO (modo Manual M). Esta view é consumida por toda validação de crédito no ERP (pedido, nota, financeiro).

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_CONTROLETFA002Define o modo de apuração do crédito ('A' = automático, 'M' = manual)
CREDITO.VL_CREDITO / VL_CREDITOACUMValores de crédito cadastrados manualmente para a pessoa
CREDITOGRUPO.VL_CREDITO / VL_CREDITOACUMValores de crédito cadastrados para o grupo financeiro
CONTAS.VL_SALDO, DT_VENCIMENTODuplicatas utilizadas no cálculo automático de atraso / a vencer
TIPOCONTA.ST_VALIDACREDITOFlag que define quais tipos de conta entram no cálculo de crédito
PEDIDO / ITEMPEDIDOOrigem da média de vendas no modo automático
PARTICIPANTELIMITECREDITO.CD_PARTICIPANTERelaciona pessoas ao grupo financeiro

Opções disponíveis​

A - Automático​

O que fazDetalhe
Origem dos dados de créditoCalculado em tempo real pela procedure VIEW_CREDITOPESSOA a partir das tabelas CONTAS, PEDIDO e ITEMPEDIDO
Duplicatas vencidasSoma VL_SALDO de CONTAS onde ST_CONTAS IN ('T','P'), TP_CONTAS = 'S' e DT_VENCIMENTO < CURRENT_DATE (apenas tipos com TIPOCONTA.ST_VALIDACREDITO = 'S')
Duplicatas a vencerMesma lógica para DT_VENCIMENTO >= CURRENT_DATE
Média mensalCalculada a partir dos pedidos ativos (ST_PEDIDO = 'A', TP_PEDIDO = 'S') dividida pelo número de meses
Limite (VL_CREDITO)Lido de CREDITO (pessoa) ou CREDITOGRUPO (se participar de grupo financeiro)
Uso principalEmpresas que querem enxergar atraso/dívida sempre atualizados, sem depender de rotina batch

Simulação passo a passo​

  1. MFA001 → Faturamento → Opção 2 → Controle de Crédito Cliente [TFA002] = "Automático"
  2. Salve os parâmetros (F6)
  3. Abra TFA002 (Limite de Crédito) para um cliente que já tem duplicatas em aberto em CONTAS
  4. O sistema exibe:
    • NR_DIASATRASO calculado pela maior diferença CURRENT_DATE - DT_VENCIMENTO
    • VL_DUPVENC / NR_DUPVENC somados em tempo real
    • VL_DUPAVENC / NR_DUPAVENC somados em tempo real
    • VL_DUPMEDIA calculado sobre PEDIDO + ITEMPEDIDO
  5. Lance uma nova duplicata manual em CONTAS e reconsulte o cliente → os valores de atraso/a vencer mudam imediatamente

Resultado esperado: Os indicadores de crédito (dias de atraso, duplicatas vencidas e a vencer, média de venda) são sempre recalculados "ao vivo" a partir do movimento real.


M - Manual​

O que fazDetalhe
Origem dos dados de créditoLê diretamente de CREDITO (pessoa sem grupo) ou CREDITOGRUPO (pessoa em grupo financeiro)
Duplicatas vencidas / a vencerLidos dos campos VL_DUPVENC, NR_DUPVENC, VL_DUPAVENC, NR_DUPAVENC gravados no cadastro
Dias de atrasoLido de NR_DIASATRASO gravado (não recalculado)
Limite (VL_CREDITO)Lido de CREDITO / CREDITOGRUPO
Uso principalEmpresas que atualizam as estatísticas de crédito via rotina controlada (batch/import) e não querem que o sistema calcule em tempo real

Simulação passo a passo​

  1. MFA001 → Faturamento → Opção 2 → Controle de Crédito Cliente [TFA002] = "Manual"
  2. Salve os parâmetros (F6)
  3. Abra TFA002 para um cliente e grave manualmente:
    • VL_CREDITO = 10.000,00
    • NR_DIASATRASO = 5
    • VL_DUPVENC = 1.500,00
  4. Lance uma nova duplicata vencida em CONTAS para esse cliente (por fora do TFA002)
  5. Reconsulte o cliente em TFA002 → os valores continuam exatamente como gravados (5 dias, R$ 1.500,00), ignorando a nova duplicata

Resultado esperado: O crédito da pessoa depende de ser alimentado/atualizado manualmente (ou por rotina externa). A view nunca recalcula em cima das duplicatas ou pedidos reais.


Regra Técnica Implementada​

No corpo de VIEW_CREDITOPESSOA (arquivo Scripts/VIEW_CREDITOPESSOA.sql, linhas 35-38 e 67/199), o controle é lido assim:

SELECT P.TP_LIMITECREDITO, P.ST_CONTROLETFA002
FROM PARMFATUR P
WHERE P.CD_EMPRESA = :I_CD_EMPRESA
INTO :V_TP_LIMITECREDITO, :V_ST_CONTROLETFA002;

...

IF ((V_ST_CONTROLETFA002 IS NULL) OR (V_ST_CONTROLETFA002 = 'A')) THEN
-- [Automático] recalcula atraso, vencidas, a vencer e média a partir de CONTAS/PEDIDO
ELSE
-- [Manual] lê direto de CREDITO / CREDITOGRUPO

Observação: NULL é tratado como 'A' (Automático) por segurança — empresas antigas que nunca configuraram o parâmetro funcionam como se estivessem no modo Automático.


Tabela Comparativa Resumida​

OpçãoDescriçãoAtraso/Vencidas/MédiaLimite (VL_CREDITO)Depende de rotina manual?
AAutomáticoCalculado em tempo real (CONTAS + PEDIDO)CREDITO/CREDITOGRUPONão
MManualLido dos campos gravados (não recalcula)CREDITO/CREDITOGRUPOSim

Referências no Código Fonte​

Delphi​

  • source/MFA001/UMFA001.dfm (linha 4798-4824): ComboBox cmbST_MOSTRACOMISSAO2 com DataField = 'ST_CONTROLETFA002', Items.Strings = ('Automático'#9'A', 'Manual'#9'M')
  • source/MFA001/UMFA001.dfm (linha 4034-4047): Label lbl78 com Caption = 'Controle de Crédito Cliente [TFA002]' na aba pagFatOp2 ("Opção 2")
  • source/MFA001/UdmMFA001.pas (linha 281): Declaração do campo tabPARMFATURST_CONTROLETFA002: TStringField
  • source/MFA001/UdmMFA001.pas (linha 571): Valor padrão 'A' atribuído no AfterInsert (Chamado 220790 — Thiago Cousseau, 14/02/2019)
  • source/MFA001/UdmMFA001.dfm (linhas 290, 1963-1965, 2445, 2617, 2874, 3170): SELECT/INSERT/UPDATE do TFDQuery tabPARMFATUR

SQL (Firebird)​

  • Scripts/VIEW_CREDITOPESSOA.sql (linhas 26, 35-38, 67, 199): Procedure/view responsável por toda a lógica condicional. Decide se calcula em tempo real (A/NULL) ou lê do cadastro (M).