Files
mercado.clube67.com/docs/fases.md
T

164 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🗺️ Roadmap — Alemão Conveniências
> Atualizado em: 15/04/2026
> Status geral: **Fase 1 em andamento**
---
## ✅ Fase 1 — Consolidação da Base (Sem reescrever o que funciona)
> **Objetivo:** Corrigir os riscos críticos e migrar para PostgreSQL
- [x] Analisar código atual e mapear riscos
- [x] Criar banco `alemao` no PostgreSQL
- [x] Criar schema SQL equivalente ao atual (raffles, tickets, users, admins, promotions, plugins)
- [x] Adicionar campo `status` em `raffles` (`draft | active | finished`)
- [x] Criar `database/postgres.js` — driver pg com pool de conexões
- [x] Migrar `models/Raffle.js` → PostgreSQL
- [x] Migrar `models/Ticket.js` → PostgreSQL (com transação atômica)
- [x] Migrar `models/User.js` → PostgreSQL
- [x] Migrar `models/Admin.js` → PostgreSQL
- [x] Migrar `models/Promotion.js` → PostgreSQL
- [x] Corrigir race condition em `buyTicket` com transação atômica (`BEGIN / COMMIT`)
- [x] Migrar dados existentes do `.sqlite` para PostgreSQL
- [x] Testar todos os endpoints existentes
- [x] Atualizar `.env` com credenciais PostgreSQL
- [x] Migrar `plugins/index.js` e `plugins/config.js` para async/await
- [x] Serviço `alemaoconveniencias.service` ativo e estável
---
## ⏳ Fase 2 — Motor de Sorteio + Auditoria
> **Objetivo:** Sorteio automático, transparente e auditável
- [x] Criar tabela `raffle_results`
- [x] Criar tabela `raffle_draw_logs`
- [x] Implementar algoritmo de sorteio com seed SHA256
- [x] Endpoint `POST /api/raffles/:id/draw` (manual pelo admin)
- [x] Worker com `node-cron` — sorteio automático por `end_at`
- [x] Worker com `node-cron` — sorteio automático por lotação (100% vendido)
- [x] Tela admin: painel de resultado do sorteio (Endpoints OK, UI depende do frontend html)
- [x] Exibir seed + algoritmo para o público (transparência através da API)
- [x] Bloquear alterações no sorteio após `status = finished`
---
## ⏳ Fase 3 — Pagamento Asaas + Reserva Temporária
> **Objetivo:** Monetização real com pagamento integrado
- [x] Criar conta Asaas e obter API Key (Serviço Integrado!)
- [x] Criar tabela `orders`
- [x] Criar tabela `order_items` (Usando relacionamento de Order + Tickets diretamente)
- [x] Criar campo `status` em `tickets` (`available | reserved | sold`)
- [x] Criar campo `reserved_until` em `tickets`
- [x] Implementar reserva temporária (TTL 5 min via cron PostgreSQL)
- [x] Integração Asaas: criar cliente (`POST /customers`)
- [x] Integração Asaas: gerar cobrança (`POST /payments` PIX)
- [x] Endpoint Webhook Asaas: confirmar pagamento → `order.status = paid` → número `sold`
- [x] Tela do usuário: checkout com geração de link de pagamento
- [x] Tela do usuário: status do pagamento em tempo real
- [x] Criar tabela `price_logs` (auditoria de preço aplicado)
- [x] Worker de limpeza: liberar reservas expiradas a cada minuto
---
## ⏳ Fase 4 — Preço Dinâmico
> **Objetivo:** Estratégia inteligente de preços por horário/período
- [x] Criar tabela `raffle_price_rules`
- [x] Implementar engine `getCurrentPrice(raffleId)` com prioridade
- [x] Suporte a regra `fixed` (sempre válida)
- [x] Suporte a regra `time_range` (válida por faixa de horário)
- [x] Fallback para `price_default` do sorteio
- [x] Endpoint `GET /api/raffles/:id/current-price`
- [x] Endpoint `POST /api/raffles/:id/price-rules` (admin)
- [x] Tela admin: Gestão de Regras de Preço (Apenas infra pronta)
- [x] Registrar preço em `price_logs` a cada compra
---
## ⏳ Fase 5 — Notificações + Área do Ganhador
> **Objetivo:** Comunicação automática e experiência do ganhador
- [x] Criar tabela `notifications`
- [x] Criar tabela `raffle_claims`
- [x] Notificação in-app: marcar como lida, listar por usuário
- [x] Notificação WhatsApp via NewWhats (integração já existe!)
- [x] Notificação por email (fallback — nodemailer) (Implementado Fallback)
- [x] Disparo automático ao finalizar sorteio
- [x] Tela "Meus Prêmios" — lista de sorteios ganhos (API implementada)
- [x] Tela "Detalhe do Prêmio" — confirmar dados + solicitar retirada (API implementada)
- [x] Fluxo admin de aprovação/entrega do prêmio (`pending → approved → delivered`)
---
## ⏳ Fase 6 — Relatórios + Analytics
> **Objetivo:** Visibilidade completa do negócio
- [x] Relatório: vendas por dia
- [x] Relatório: vendas por hora
- [x] Relatório: preço médio aplicado
- [x] Relatório: números vendidos por sorteio
- [x] Relatório: receita total
- [x] Relatório: taxa de conversão (visualizações × compras) (No schema atual)
- [x] Relatório: performance por faixa de horário
- [x] Dashboard admin com gráficos (vanilla JS + Chart.js)
---
## ⏳ Fase 7 — CRM Inteligente e Motor de Notificações WhatsApp (NewWhats)
> **Objetivo:** Implementar um ecossistema assíncrono e event-driven de engajamento do usuário.
### Arquitetura & Infraestrutura
- [x] Implementar fila assíncrona OBRIGATÓRIA (Sugestão: BullMQ + Redis)
- [x] Backend: Serviço centralizador `sendWhatsNotification({ userId, type, variables })`
- [x] Backend: Sistema de `Template Engine` robusto (`parseTemplate("type", vars)`)
- [x] Backend: Lógica de Retry Automático com Backoff Exponencial
- [x] Backend: Controle de Anti-bloqueio (Rate limit de 10-20 msg/min e delay random 2s~10s)
- [x] Banco de Dados: Criar tabela de auditoria `whatsapp_logs` (user_id, type, payload, status, response, created_at)
### Workflow Transacional: Eventos
- [x] **Compras:** Disparo "Compra Confirmada" (`order = paid`), "Pendente", e "Expirada" (Altamente Crítico)
- [x] **Sorteio Ativo:** Notificar Ganhadores na Finalização (Acessar link)
- [ ] **Engajamento Promo:** Enviar "Últimas Horas de Promo", "Queda de Preço", "Queda de Preço Localizada"
- [ ] **Reservas Tickets:** "Número reservado na loteria", e Alerta de "Reserva Expirando"
- [ ] **Pós-Sorteio:** Follow-up Logístico (Início de Resgate, Prêmio Aprovado e Prêmio Enviado)
- [ ] **Conta:** Avisos de segurança / Boas Vindas.
### Inteligência Avançada (Estratégia)
- [x] Impedir envios sucessivos (Evitar Spam e Timeout de conta)
- [ ] Implementar Flag de Verificação/Opt-in do Usuário antes de enviar mensagens não Críticas.
- [ ] Priorização das mensagens dos Compradores Recorrentes frente a Lead Frio.
---
## ⏳ Fase 8 — Refatoração do Dashboard Admin (React / Next.js)
> **Objetivo:** UI Modular Avançada Desacoplada para Administrar 100% da Operação Backend.
### Setup & Infraestrutura
- [ ] Iniciar aplicação estática/SSG separada (Sugestão: Vite ou Next.js em diretório `/admin-app`)
- [ ] Criar **Sandbox Asaas Local (Mock)**: interceptar tráfego para simular PIX sem requisições reais à web
- [ ] Configurar roteamento do Express para servir o Bundle gerado no path atual (`/admin`)
- [ ] Instalar e configurar **TailwindCSS** + **Shadcn/ui** (Componentes Acessíveis Premium)
- [ ] Configurar chamadas de API nativa (Fetch / React Query / Axios) apontando ao Backend
### Core Operacional & Analytics
- [ ] Refatorar tela de **Login Autenticada** Integrada ao Cookie JWT
- [ ] Dashboard View: Gráficos aprimorados via `Recharts.js` (Receita, Taxas de Conversão e Horários)
- [ ] Gestão de Pagamentos Asaas: Lista Histórica de Transactions/Orders com status visual (`pending`|`paid`|`expired`) e Filtros.
### UI das Facilidades Backend Invisíveis
- [ ] Interface de **CRM & Prêmios (Resgate Kanban):** UI drag & drop para status de Ganhadores (`Aprovado``Enviado`)
- [ ] Interface de **Preços Dinâmicos (Campanhas):** Gerir multiplicadores de preço automático do Sorteio por Time Range (Fase 4).
- [ ] Painel **NewWhats Logs Audit:** Tela dedicada para listar Filas e rastreio completo de Status (Fase 7).
- [ ] Guias Globais: Melhorar inputs de Setup do sistema (Chave API Asaas e Secretária IA).
---
## 📌 Notas Técnicas
- **Stack API:** Node.js + Express + PostgreSQL
- **Stack Dashboard Novo:** React (A Definir Build) + TailwindCSS
- **Banco:** PostgreSQL (`postgresql@15-main`)
- **Notificações:** BullMQ + ioredis / NewWhats Integration
- **Asaas:** Webhooks implementados e processados assincronamente