164 lines
8.0 KiB
Markdown
164 lines
8.0 KiB
Markdown
# 🗺️ 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
|