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