// Módulo RELATÓRIOS — Vendas, RFM (clientes), Lives const RelatoriosPage = () => { const [tab, setTab] = React.useState("vendas"); return (
Inteligência de negócio

Relatórios

Vendas · produtos · clientes · segmentação RFM · comparativo de lives.

{tab === "vendas" && } {tab === "rfm" && } {tab === "lives" && } {tab === "produtos" && } {(tab === "geografico" || tab === "trocas") && }
); }; const RelVendas = () => (

Evolução diária · maio 26 vs. abril 26

Por canal

14 dias

Por forma de pagamento

Vendas por responsável

comissões aplicadas
ResponsávelPedidosFaturamentoTicket médioMetaAtingidoComissão
Letícia BorgesLive487{brl(74820.30)}{brl(153.63)}{brlNoCents(60000)}124%{brl(2244.60)}
Bruna CarvalhoPDV214{brl(31425.80)}{brl(146.85)}{brlNoCents(30000)}104%{brl(942.77)}
Janaína FerreiraSite/WPP191{brl(36594.20)}{brl(191.59)}{brlNoCents(45000)}81%{brl(731.88)}
); const RelRfm = () => (

Segmentação RFM · 1.304 clientes

{RFM_SEGMENTOS.map((s, i) => (
{s.nome.toUpperCase()}
{numFmt(s.clientes)}
{s.desc}
{brlNoCents(s.valor)} · LTV
))}

Champions · 142 · top 10

Ver todos
{CLIENTES.filter(c => c.rfm === "Champions").concat(CLIENTES.slice(0,4)).slice(0,7).map((c, i) => ( ))}
ClientePedidosLTVÚltima
{c.nome} {c.pedidos} {brl(c.totalGasto)} {c.ultimaCompra}

Em risco · 204 clientes

Clientes leais que não compram há 60-90 dias. Receita potencial perdida: {brl(64280)}

Ação sugerida
💡 Campanha "Voltamos pra você": cupom 15% + frete grátis acima R$ 200. ROI estimado: 8.2×
); const RelLives = () => (

Comparativo · 5 últimas lives

{LIVES_HISTORICO.slice().reverse().map((l, i) => { const max = Math.max(...LIVES_HISTORICO.map(x => x.faturamento)); const h = (l.faturamento / max) * 100; const isMax = l.faturamento === max; return (
{brlNoCents(l.faturamento)}
{isMax && melhor}
#{43 + i}
{l.data}
); })}

Histórico de lives

{LIVES_HISTORICO.map((l, i) => ( ))}
LiveDataPedidosClientes únicosFaturamentoTicket médio% pagos
{l.nome} {l.data} {l.pedidos} {l.clientes} {brl(l.faturamento)} {brl(l.ticket)} = 85 ? "green" : l.pagos >= 80 ? "cyan" : "amber"} dot>{l.pagos}%
); const RelProdutos = () => (

Top 10 produtos · período

{PRODUTOS.slice().sort((a,b) => b.vendas30d - a.vendas30d).map((p, i) => ( ))}
#ProdutoMarcaCategoriaQtdReceitaMargem
{i+1}
{p.foto}
{p.nome}
{p.id}
{p.marca} {p.categoria} {p.vendas30d} {brl(p.preco * p.vendas30d * 0.7)} {((p.preco / p.custo - 1) * 60).toFixed(0)}%
); Object.assign(window, { RelatoriosPage });