// Módulo LOJA — PDV (Caixa), Crediário, Financeiro // ---------- PDV ---------- const PdvPage = () => { const [cart, setCart] = React.useState([ { ...PRODUTOS[2], tam: "P", qty: 1, desc: 0 }, { ...PRODUTOS[5], tam: "M", qty: 1, desc: 0 }, ]); const [cliente, setCliente] = React.useState(CLIENTES[0]); const [step, setStep] = React.useState("carrinho"); // cliente | produtos | carrinho | pagamento | confirmacao const [pgMix, setPgMix] = React.useState([{ tipo: "Pix", valor: 0 }]); const subtotal = cart.reduce((s, i) => s + (i.preco - i.desc) * i.qty, 0); const descCashback = 50; const frete = 0; const total = subtotal - descCashback + frete; const removeItem = (i) => setCart(cart.filter((_, idx) => idx !== i)); return (
Caixa aberto desde 09:14 · Saldo R$ 1.420

Caixa (PDV)

Operação de loja física · Bruna Carvalho · Terminal 01

{/* LEFT — produtos */}
{/* Cliente bar */}
CLIENTE
{cliente.nome}
Champion
{cliente.instagram} · {cliente.telefone} · Última compra {cliente.ultimaCompra}
Cashback
{brl(cliente.cashback)}
Crédito
{brl(cliente.credito)}
{/* Search */}
{/* Quick-pick grid */}

Catálogo · em destaque

{PRODUTOS.slice(0, 8).map(p => (
{p.foto}
{p.id}
{p.nome}
{brl(p.preco)}
))}
{/* RIGHT — cart + pagamento */}
Carrinho
{cart.reduce((s,i)=>s+i.qty,0)} itens
{cart.map((i, idx) => (
{i.foto}
{i.nome}
Tam {i.tam} · {i.id}
{brl(i.preco)}
))}
Subtotal{brl(subtotal)}
Desc. cashback aplicado- {brl(descCashback)}
Frete{brl(frete)}
TOTAL {brl(total)}
Forma de pagamento
Pagamento misto · em uso
Pix · QR code 5 min {brl(total - 50)}
Cashback do cliente {brl(50)}
); }; const PaymentChip = ({ icon, label, active }) => ( ); // ---------- CREDIÁRIO ---------- const CrediarioPage = () => { const total = PARCELAS_CREDIARIO.reduce((s,p) => s + p.valor, 0); const vencidas = PARCELAS_CREDIARIO.filter(p => p.status.includes("Vencido")); const vencendo = PARCELAS_CREDIARIO.filter(p => p.status.includes("Vence")); const emDia = PARCELAS_CREDIARIO.filter(p => p.status === "Em dia"); return (
Carteira de crediário

Crediário

Parcelas em aberto · cobrança automática · renegociação.

s+p.valor,0))}/>
{}} tabs={[ { id: "parcelas", label: "Parcelas", count: PARCELAS_CREDIARIO.length }, { id: "renegociacao", label: "Renegociações" }, { id: "regras", label: "Regras de cobrança" }, { id: "ranking", label: "Ranking devedores" }, ]}/>
{PARCELAS_CREDIARIO.map((p, i) => ( ))}
Cliente@InstagramParcelaValorVencimentoStatusAções
{p.cliente} {p.instagram} {p.parcela} {brl(p.valor)} {p.vencimento}

Automações de cobrança

QuandoCanalMensagemDisparos · 30dStatus
3 dias antes do vencimentoWhatsApp"Oi {`{primeiro_nome}`}! Sua parcela de R$ {`{parcela_valor}`} vence em 3 dias…"41
No dia do vencimentoWhatsApp"Lembrete: sua parcela vence hoje. Pague pelo Pix…"28
3 dias após atrasoEquipeNotificação interna para equipe de cobrança12
); }; // ---------- FINANCEIRO / DRE ---------- const FinanceiroPage = () => { const [tab, setTab] = React.useState("dre"); return (
Maio 2026

Financeiro

DRE, fluxo de caixa, contas e lançamentos.

{tab === "dre" && } {tab === "fluxo" && } {tab === "contas" && } {tab === "lancamentos" && } {tab === "apagar" && }
); }; const DreLine = ({ label, value, sub, indent = 0, kind, total }) => (
0 ? 'var(--text-2)' : 'var(--text)') }}>{label} {sub && {sub}}
{value}
); const DreView = () => (

Demonstrativo · Mai 2026

Comparado a Abr/26 +18.2%
); const FluxoView = () => (

Fluxo realizado vs. previsto · próximos 30 dias

); const ContasView = () => (

Contas cadastradas

ContaTipoSaldoÚltima mov.
Caixa físico — LojaEspécie{brl(1420.00)}há 14m
Conta Inter PJConta bancária{brl(28740.50)}há 2h
Mercado PagoMaquininha + Pix{brl(12018.30)}há 8m
Reserva poupançaConta bancária{brl(15000.00)}há 12d
); const LancamentosView = () => (
DataTipoCategoriaDescriçãoContaValor
19/05ReceitaVendas LiveLive #48 · 31 pedidos pagosMercado Pago+ {brl(5870.40)}
19/05DespesaMarketingRecarga WhatsApp · 5.000 enviosInter PJ- {brl(450.00)}
18/05ReceitaVendas LojaFechamento caixa 18/05Caixa físico+ {brl(2840.00)}
18/05DespesaLogísticaPostagem Correios · 28 etiquetasInter PJ- {brl(842.30)}
17/05DespesaFornecedorNF Aurora Studio · pedido OC-184Inter PJ- {brl(3420.00)}
15/05DespesaAluguelAluguel loja maio/26Inter PJ- {brl(4800.00)}
); const APagarView = () => (
DescriçãoCategoriaFornecedorVencimentoValorStatus
Fornecedor Aurora · OC-186MercadoriasAurora Studio Atacado22/05{brl(4280.00)}
Salários · maioFolha25/05{brl(8420.00)}
Energia lojaOperacionalEquatorial15/05{brl(840.00)}
Internet + telefoneOperacionalVivo Empresas28/05{brl(380.00)}
); Object.assign(window, { PdvPage, CrediarioPage, FinanceiroPage });