Planejamento Financeiro
Regras
- Cálculo do MRR: soma de todos os valores mensais de assinaturas ativas — planos anuais divididos por 12, excluir cobranças únicas
- ARR: MRR * 12 — exibir ambos no dashboard, usar MRR para tendências mensais, ARR para planejamento anual
- Componentes do MRR: rastrear novo MRR, MRR de expansão (upgrades), MRR de contração (downgrades), MRR de churn (cancelamentos), MRR de reativação — exibir como gráfico de cascata
- Taxa de consumo: (caixa inicial - caixa final) / meses — calcular mensalmente, exibir pista em meses com a taxa de consumo atual
- Dashboard de receita: mostrar MRR, ARR, taxa de crescimento do MRR (MoM%), retenção líquida de receita, total de clientes — atualizar diariamente
- Projeções financeiras: modelar 3 cenários (conservador, base, otimista) — variar taxa de crescimento e taxa de churn, projetar 12-24 meses
- Tratamento de moeda: armazenar todos os valores em centavos (inteiros) — nunca usar ponto flutuante para dinheiro — exibir com
Intl.NumberFormat - Intervalos de datas: padrão para os últimos 12 meses, permitir intervalo personalizado — agregar por mês para tendências, por dia para atividade recente
Modelo de Dados do Dashboard
CREATE TABLE revenue_events (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
type TEXT NOT NULL, -- 'new' | 'expansion' | 'contraction' | 'churn' | 'reactivation'
amount_cents INTEGER NOT NULL,
customer_id UUID NOT NULL,
occurred_at DATE NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
Agregar MRR por mês: SELECT date_trunc('month', occurred_at), type, SUM(amount_cents) FROM revenue_events GROUP BY 1, 2.
Evitar
- Ponto flutuante para dinheiro — usar centavos inteiros em todos os lugares
- Contar MRR sem separar componentes — você precisa saber por que o MRR mudou
- Granularidade apenas mensal — armazenar eventos diários, agregar para exibição
- Ignorar MRR de contração — downgrades são sinais precoces de churn