MoldaERP

Relatórios

5 relatórios de gestão em SQL, executados ao vivo — exporte em PDF, CSV ou via API.

01. Funil de prospecção por segmento

JOINWHEREANDCOUNTAVG

Leads por nicho, quantos estão quentes e o score médio de oportunidade.

-- R1 — Funil de prospecção por segmento
-- Quantos leads existem por nicho, quantos estão quentes e o "score de feiura" médio.
-- Comandos: JOIN, WHERE, AND, COUNT, AVG, GROUP BY, ORDER BY.
SELECT s.nome AS segmento,
       COUNT(*) AS total_leads,
       COUNT(CASE WHEN l.temperatura IN ('QUENTE', 'SUPER_QUENTE') THEN 1 END) AS leads_quentes,
       ROUND(AVG(l.score_feiura), 1) AS score_medio
FROM leads l
JOIN segmentos s ON s.id = l.segmento_id
WHERE l.ativo = 1 AND l.franquia = 0
GROUP BY s.id
ORDER BY total_leads DESC, score_medio DESC;
SegmentoTotal leadsLeads quentesScore medio
Odontologia2271
Agro2160
Construtora2157.5
Imobiliário2157.5
Bares e Eventos1178
Estética1170
Educação1055

02. MRR — receita recorrente por plano

JOINWHERESUMCOUNT

Soma das mensalidades dos contratos ativos e projeção anual (ARR).

-- R2 — MRR (receita recorrente mensal) por plano
-- Soma do valor mensal dos contratos ativos e projeção anual, agrupado por plano.
-- Comandos: JOIN, WHERE, COUNT, SUM, GROUP BY, ORDER BY.
SELECT p.nome AS plano,
       COUNT(c.id) AS contratos_ativos,
       SUM(c.valor_mensal) AS mrr,
       SUM(c.valor_mensal) * 12 AS arr_projetado
FROM contratos c
JOIN planos p ON p.id = c.plano_id
WHERE c.status = 'ATIVO'
GROUP BY p.id
ORDER BY mrr DESC;
PlanoContratos ativosMrrArr projetado
Grow2R$ 8.100R$ 97.200
Exclusive1R$ 7.490R$ 89.880
Start2R$ 5.400R$ 64.800

03. Inadimplência

JOINWHEREANDORCOUNTSUM

Clientes com faturas vencidas em aberto: quantidade e total devido.

-- R3 — Inadimplência (faturas vencidas em aberto)
-- Clientes com faturas em aberto já vencidas: quantidade e total devido.
-- Comandos: JOIN (2x), WHERE, AND, OR, COUNT, SUM, MIN, GROUP BY, HAVING.
SELECT cl.nome AS cliente,
       COUNT(f.id) AS faturas_vencidas,
       SUM(f.valor) AS total_em_aberto,
       MIN(f.vencimento) AS vencimento_mais_antigo
FROM faturas f
JOIN contratos c ON c.id = f.contrato_id
JOIN clientes cl ON cl.id = c.cliente_id
WHERE f.status = 'ABERTA'
  AND (f.vencimento < date('now') OR f.competencia < strftime('%Y-%m', 'now'))
GROUP BY cl.id
HAVING total_em_aberto > 0
ORDER BY total_em_aberto DESC;
ClienteFaturas vencidasTotal em abertoVencimento mais antigo
AgroInsumos Norte2R$ 8.40012/05/2026
Clínica OdontoVida2R$ 7.80017/05/2026
Construtora Horizonte1R$ 7.49015/06/2026
Imobiliária Raízes2R$ 5.00019/05/2026

04. Extrato de caixa (realizado + previsto)

UNION ALLJOINWHERE

Une pagamentos recebidos e faturas previstas num único extrato.

-- R4 — Extrato de caixa: realizado + previsto
-- Une, num único extrato, o que já foi recebido (pagamentos) com o que ainda
-- está previsto (faturas em aberto). É o caso clássico de UNION ALL.
-- Comandos: UNION ALL, JOIN (3x), WHERE, ORDER BY.
SELECT pg.pago_em AS data,
       'REALIZADO' AS tipo,
       cl.nome AS cliente,
       pg.valor AS valor
FROM pagamentos pg
JOIN faturas f   ON f.id = pg.fatura_id
JOIN contratos c ON c.id = f.contrato_id
JOIN clientes cl ON cl.id = c.cliente_id
UNION ALL
SELECT f.vencimento AS data,
       'PREVISTO' AS tipo,
       cl.nome AS cliente,
       f.valor AS valor
FROM faturas f
JOIN contratos c ON c.id = f.contrato_id
JOIN clientes cl ON cl.id = c.cliente_id
WHERE f.status = 'ABERTA'
ORDER BY data, tipo;
DataTipoClienteValor
20/01/2026REALIZADOConstrutora HorizonteR$ 7.490
15/02/2026REALIZADOClínica OdontoVidaR$ 3.900
16/02/2026REALIZADOConstrutora HorizonteR$ 7.490
10/03/2026REALIZADOAgroInsumos NorteR$ 4.200
16/03/2026REALIZADOClínica OdontoVidaR$ 3.900
16/03/2026REALIZADOConstrutora HorizonteR$ 7.490
14/04/2026REALIZADOAgroInsumos NorteR$ 4.200
15/04/2026REALIZADOClínica OdontoVidaR$ 3.900
15/04/2026REALIZADOImobiliária RaízesR$ 2.500
16/04/2026REALIZADOConstrutora HorizonteR$ 7.490
12/05/2026PREVISTOAgroInsumos NorteR$ 4.200
16/05/2026REALIZADOConstrutora HorizonteR$ 7.490
17/05/2026PREVISTOClínica OdontoVidaR$ 3.900
19/05/2026PREVISTOImobiliária RaízesR$ 2.500
12/06/2026PREVISTOAgroInsumos NorteR$ 4.200
15/06/2026PREVISTOConstrutora HorizonteR$ 7.490
17/06/2026PREVISTOClínica OdontoVidaR$ 3.900
19/06/2026PREVISTOImobiliária RaízesR$ 2.500
08/07/2026PREVISTOBoutique BellaR$ 2.900

05. Ranking de clientes por LTV

JOINLEFT JOINSUMCOUNT

Valor total já pago por cliente ativo, com número de contratos.

-- R5 — Ranking de clientes por LTV (valor total já pago)
-- Soma de tudo que cada cliente ativo já pagou, com número de contratos.
-- Usa LEFT JOIN para incluir clientes ativos mesmo sem pagamentos.
-- Comandos: JOIN (INNER + LEFT), WHERE, AND, COUNT(DISTINCT), SUM, GROUP BY, ORDER BY, LIMIT.
SELECT cl.nome AS cliente,
       s.nome AS segmento,
       COUNT(DISTINCT c.id) AS contratos,
       COALESCE(SUM(pg.valor), 0) AS ltv
FROM clientes cl
JOIN segmentos s   ON s.id = cl.segmento_id
LEFT JOIN contratos c  ON c.cliente_id = cl.id
LEFT JOIN faturas f    ON f.contrato_id = c.id
LEFT JOIN pagamentos pg ON pg.fatura_id = f.id
WHERE cl.status = 'ATIVO' AND s.ativo = 1
GROUP BY cl.id
ORDER BY ltv DESC
LIMIT 10;
ClienteSegmentoContratosLtv
Construtora HorizonteConstrutora1R$ 37.450
Clínica OdontoVidaOdontologia1R$ 11.700
AgroInsumos NorteAgro1R$ 8.400
Imobiliária RaízesImobiliário1R$ 2.500
Boutique BellaEstética1R$ 0