Clientes
Como auditar os limites de créditos dos clientes?
CLIENT.FAQ-27920
Para avaliar manualmente, pode-se fazer as seguintes perguntas:
- O tipo de pedido toma crédito do cliente? Sim / Não / Conforme o plano de pagamento
- O plano de pagamento toma crédito do cliente? Sim / Não
- O pedido tem financeiro (não cancelado) vinculado?
- O pedido tem documentos?
- Os documentos do pedido tem financeiro (não cancelado) ?
Para executar uma auditoria nos limites de crédito, execute os SQLs abaixo.
Verificar divergências causadas pela quantidade a faturar:
item credito_tomado value;
select *
from (
select pedido
, credito_tomado
, sum(quantidade_financeiro_pendente * valor_total_item / quantidade) as credito_tomado_calculado
from (
select *
, q.quantidade - quantidade_cancelada - coalesce(quantidade_financeiro,0) as quantidade_financeiro_pendente
from (
select iped.pedido_id
, ped.pedido
, ped.credito_tomado
, tped.toma_credito_cliente
, pp.utiliza_limite_credito
, tped.tipo_pedido
, iped.valor_total_item
, iped.quantidade
, iped.quantidade_cancelada
, (select sum(quantidade)
from itens_doc_entradas_saidas idoc
join doc_entradas_saidas doc on doc.id = idoc.documento_id
where idoc.item_pedido_id = iped.id
and tipo_operacao = 'S'
and exists (select 1
from pedidos_titulos pt
join titulos t on t.id = pt.titulo_id
where pt.documento_id = doc.id
and t.situacao <> 'C')
) as quantidade_financeiro
from pedidos ped
join itens_pedidos iped on iped.pedido_id = ped.id
join tipos_pedidos tped on tped.id = ped.tipo_pedido_id
left join planos_pagamentos pp on pp.id = ped.prazo_pagamento_id
where iped.quantidade > 0
and ped.situacao in('P', 'T', 'X', 'O', 'E', 'A', 'M')
and (tped.toma_credito_cliente = 'S'
or (tped.toma_credito_cliente = 'P' and pp.utiliza_limite_credito = 'S'))
) q
) q
group by pedido
, toma_credito_cliente
, credito_tomado
, utiliza_limite_credito
order by pedido desc
) q
where credito_tomado <> credito_tomado_calculado
Verificar limites de crédito dos clientes:
select *
, credito_tomado_correto - credito_tomado_cadastro as diferenca
from (
select q.id
, q.cliente
, q.nome_completo
, valor_titulos
, valor_pedidos
, valor_documentos
, coalesce(valor_pedidos,0)
+ coalesce(valor_titulos,0)
+ coalesce(valor_documentos,0) as credito_tomado_correto
, q.credito_tomado as credito_tomado_cadastro
, q.limite_credito
, q.credito_disponivel
from (
select pes.id
, pes.pessoa as cliente
, pes.nome_completo
, cli.limite_credito
, cli.credito_tomado
, cli.credito_disponivel
, (select sum(credito_tomado) from pedidos where credito_tomado_cliente_id = cli.id) as valor_pedidos
, (select sum(credito_tomado) from titulos where credito_tomado_cliente_id = cli.id) as valor_titulos
, (select sum(credito_tomado) from doc_entradas_saidas where credito_tomado_cliente_id = cli.id) as valor_documentos
from clientes cli
join pessoas pes on pes.id = cli.id
) q
) q
where credito_tomado_correto <> credito_tomado_cadastro
or credito_disponivel <> limite_credito - credito_tomado_cadastro
order by q.cliente;
Ajustar documentos com credito tomado incorreto:
update doc_entradas_saidas doc
set credito_tomado = 0
where credito_tomado > 0
and (doc.situacao_documento not in ('A', 'E', 'I', 'M', 'P', 'V')
or exists (select 1 from pedidos_titulos where documento_id = doc.id)
or doc.tipo_operacao <> 'S'
or doc.gerar_faturamento <> 'S');
Ajustar títulos cancelados tomando crédito:
update titulos
set credito_tomado = 0
where situacao = 'C'
and credito_tomado <> 0;
Ajustar títulos liquidados tomando crédito:
update titulos
set credito_tomado = 0
where situacao = 'L'
and credito_tomado <> 0;
Ajustar títulos a pager tomando crédito:
update titulos
set credito_tomado = 0
where tipo_operacao = 'P'
and credito_tomado <> 0;
Remover o tomador de credito de valor zero
update titulos
set credito_tomado_cliente_id = null
where credito_tomado = 0
and credito_tomado_cliente_id is not null;
Atualizar o crédito tomado e limite disponível:
update clientes cli
set credito_tomado =
coalesce((select sum(credito_tomado) from pedidos where credito_tomado_cliente_id = cli.id) , 0)
+ coalesce((select sum(credito_tomado) from titulos where credito_tomado_cliente_id = cli.id) , 0)
+ coalesce((select sum(credito_tomado) from doc_entradas_saidas where credito_tomado_cliente_id = cli.id) , 0);
update clientes cli
set credito_disponivel = limite_credito - coalesce(credito_tomado,0)
where limite_credito is not null;