Planos e Limites¶
Tabela de Planos¶
| Plano | Preço/mês | Alunos | Cursos | Modelos |
|---|---|---|---|---|
| Free | R$ 0 | 100 | 1 | GPT-5 + GPT-5 Mini |
| Starter | R$ 97 | 500 | 5 | GPT-5 + GPT-5 Mini |
| Pro | R$ 197 | 1.000 | 10 | GPT-5.4 family + OpenRouter |
| Max | R$ 297 | Ilimitado | 20 | GPT-5.4 family + OpenRouter |
Créditos por Agente¶
Os créditos são configurados por agente, não por plano. Cada Agent possui o campo credits_per_student (padrão: 50), que define quantos créditos cada aluno terá para aquele agente por período de faturamento.
- A escola ajusta
credits_per_studentna configuração do agente - A escola pode ajustar créditos individuais por aluno por agente no painel de detalhe do aluno (
UpdateStudentCreditsView) - Quando os créditos esgotam, o chat bloqueia apenas para aquele agente, não para todos
Compra de Créditos Extras (Sprint 35)¶
Alunos de escolas com plano pago ativo podem adquirir pacotes de créditos extras via Stripe Checkout:
| Pacote | Créditos | Preço |
|---|---|---|
| Básico | 50 | R$ 29,90 |
| Intermediário | 150 | R$ 39,90 |
| Premium | 500 | R$ 69,90 |
Fluxo de compra¶
- Aluno acessa Comprar Créditos no menu lateral
- Seleciona o mentor e o pacote desejado
- É redirecionado para o Stripe Checkout (cartão, PIX ou boleto)
- Após confirmação de pagamento via webhook, os créditos são liberados automaticamente
- Para PIX/boleto, a confirmação pode levar alguns minutos (evento
async_payment_succeeded)
Regras¶
- Créditos extras são somados ao saldo do ciclo atual (
extra_credits) - Créditos extras são consumidos antes dos créditos mensais do próximo ciclo
- Alunos de escolas no plano Free não podem comprar créditos
- O histórico de compras é visível no perfil do aluno
Fluxo de Pagamento de Assinatura via Stripe (Sprint 34)¶
- Admin acessa a tela de Upgrade de Plano
- Seleciona plano desejado → inicia Stripe Checkout (modo
subscription) - Após pagamento, o webhook
checkout.session.completedativa o plano - Renovações são processadas via
invoice.paid - Falhas de pagamento geram evento
invoice.payment_failed→ status muda parapast_due - Após 7 dias sem pagamento → status muda para
unpaid→ escola bloqueada - Admin pode regularizar via Stripe Customer Portal
Status de pagamento¶
| Status | Comportamento |
|---|---|
active | Acesso normal |
trialing | Período de teste (14 dias) |
past_due | Banner de aviso, acesso mantido por 7 dias |
unpaid | Bloqueio total — admin redirecionado para regularização, alunos veem agentes bloqueados |
canceled | Downgrade para Free ao fim do período |
Modelos por Plano¶
| Plano | Modelos Disponíveis |
|---|---|
| Free / Starter | GPT-5, GPT-5 Mini |
| Pro / Max | GPT-5, GPT-5 Mini, GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano, OpenRouter |
Gerenciamento via Django Admin¶
Todos os limites e preços são gerenciáveis em /admin/subscriptions/plan/. Alterações refletem imediatamente em: - Landing page de preços - Verificações de limite no chat e upload - Créditos de novos alunos (via Agent.credits_per_student)
Pacotes de créditos são gerenciados em /admin/subscriptions/messagepackage/ com o campo stripe_price_id editável inline.