Micro-SaaS & MVPs
Claude 3.5 Sonnet
Billing por Uso (Metered) com Stripe Metered Billing
Backend que registra eventos de uso do usuário e fatura mensalmente via Stripe metered billing, com página de consumo em tempo real.
2cópias
0joinhas
0favoritos
O prompt
Implemente um sistema de cobrança por uso (usage-based / metered billing) para o SaaS {{nome_saas}} em Node.js/TypeScript + Stripe.
Parâmetros:
- Nome do SaaS: {{nome_saas}}
- Unidade Faturável: {{unidade}} (ex.: 'créditos de IA', 'páginas processadas')
- Preço por 100 unidades: {{preco_100}} centavos
- Dia do Faturamento Mensal: {{dia_faturamento}} (1 a 28)
Requisitos:
1. Tabela UsageEvent { id, userId, subscriptionId, quantity, description, createdAt } + endpoint POST /api/usage (autenticado) que registra eventos; validação Zod (quantity > 0, máx. 100k por evento).
2. Agendamento mensal (cron ou Stripe Billing): no dia {{dia_faturamento}} do mês, somar os UsageEvents de cada assinatura ativa e reportar via stripe.subscriptionItems.reportUsage com o price metered configurado — idempotente (guarda o período já faturado em tabela BillingPeriod).
3. Tratamento de falha: se o reportUsage falhar, retry exponencial 3x e depois marca o período como 'failed' para intervenção manual + log estruturado.
4. Endpoint GET /api/usage/summary (autenticado): consumo do mês atual por tipo de evento, projeção de custo (consumo × {{preco_100}}/100) e limite/alerta configurável (ex.: 80% do gasto médio dos últimos 3 meses).
5. Página /consumo no front (React ou HTML simples): gráfico de barras diário do mês, total em R$/US$ e aviso quando passa do alerta — dados vindos do summary.
6. Documente no README: como criar o metered price no dashboard da Stripe e qual env var aponta para ele (METERED_PRICE_ID).
Como usar
- Substitua {{nome_saas}}, {{unidade}} e {{preco_100}}; defina {{dia_faturamento}} (ex.: 1).
- Cole no Claude dentro de um projeto Node/TS com Prisma — as tabelas, rotas e o job mensal são criados.
- No dashboard da Stripe, crie um preço 'metered' para o plano e guarde o ID em METERED_PRICE_ID; rode o job manualmente (npm run bill:now) em modo teste antes do primeiro ciclo real.
- Confira /consumo com dados de teste: o gráfico diário e a projeção devem bater com os UsageEvents criados via POST /api/usage.
Exemplo de saída
Módulo billing (~250 linhas): tabela UsageEvent + BillingPeriod para idempotência, POST /api/usage validado por Zod (máx. 100k/evento), job mensal somando eventos e chamando reportUsage com retry exponencial 3x + estado 'failed' para intervenção, GET /summary com projeção de custo e alerta em 80% da média, página /consumo com gráfico diário e README do metered price.