# 🗺️ 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