# TODO — Plataforma SimBCF / Huryz Eventos Científicos

> Gerado em: 2026-04-24  
> Baseado no escopo da proposta Huryz + requisitos do cliente.  
> Marque com `[x]` ao concluir.

---

## Concluido recente - 2026-04-29

- [x] Criado `lib/events.ts` com `getPublishedEvent` e `getPublishedEventId`.
- [x] Escopo por `eventId` do evento publicado em categorias, lotes, inscricoes, submissoes, programacao, certificados, relatorios e exportacoes.
- [x] `/api/congressista/lotes` lista lotes futuros ainda validos do evento ativo.
- [x] Sidebar do dashboard recebe sessao inicial server-side para renderizar o menu do role correto.
- [x] Criado `GET /api/organizador/relatorios/institucional` com PDF institucional basico.
- [x] Criada pagina `/organizador/submissoes/atribuir` para atribuicao manual de avaliadores.
- [x] Validado com `npm.cmd run lint` e `npm.cmd run build`.
- [x] Corrigido Toggle da landing para evitar duplo clique/doble inversao visual.
- [x] Corrigido destaque ativo do menu lateral: Dashboard nao fica mais azul em subrotas.
- [x] Admin passa a enxergar no menu as areas operacionais do organizador.
- [x] Criada configuracao real de evento em `/organizador/configuracoes` e `/admin/configuracoes`: datas importantes, janela de submissao/avaliacao, lotes, categorias, SMTP, modelos de email e logs.
- [x] Criada API `/api/organizador/evento` para salvar dados do evento, lotes e categorias.
- [x] Criada API `/api/organizador/comunicacao/config` para SMTP, templates HTML e logs de acesso.
- [x] Criada tabela publica de lotes na landing, com lotes encerrados riscados.
- [x] Submissao de resumo agora respeita `submissionStart` e `submissionEnd`.
- [x] Criada pagina `/organizador/participantes` com lista simples de inscritos e ordenacao por cabecalho.
- [x] Avaliadores agora alternam entre cards/lista e abrem detalhe com resumos atribuidos.
- [x] Adicionada ordenacao por clique nos cabecalhos para tabelas do dashboard via `TableSorter`.
- [x] Criadas tabelas Prisma `smtp_configs`, `email_templates` e `access_logs`.
- [x] Lotes agora permitem escolher encerramento por prazo, por vagas ou pelo que ocorrer primeiro.
- [x] Criada matriz de valores em reais por categoria dentro de cada lote, sem porcentagem de desconto.
- [x] Fluxo de inscricao do congressista passou a usar o valor manual da categoria no lote.
- [x] Criada tabela Prisma `lot_category_prices` e campo `lots.endMode`.

## Concluido recente - 2026-05-08

- [x] Criada etapa 2 de inscricoes com `/organizador/inscricoes`.
- [x] Adicionados comprovantes de modalidade com upload, analise, aprovacao, rejeicao e historico.
- [x] Adicionados cursos/workshops/atividades sociais vendidos junto com a inscricao, com horario, sala, preco, capacidade e elegibilidade.
- [x] Adicionados cupons patrocinados, base de socios quites, CNA, acompanhante e aceite de termos versionado.
- [x] Adicionados `PaymentTransaction`, webhook de conciliacao, pagina de retorno pos-pagamento, reenvio de link, estornos e taxa Tikah de 8%.
- [x] Pagamentos migrados para Asaas: PIX com QR Code/copia e cola, boleto com linha digitavel e cartao no formulario da Tikah sem checkout externo.
- [x] Etapa 3 de trabalhos cientificos concluida: tipos configuraveis, limites, anexo/versionamento, criterios ponderados/conceito, conflitos, desempate, apresentacao/publicacao e anais publicos.

---

## ✅ CONCLUÍDO

- [x] 4 roles: Admin, Organizador, Avaliador, Congressista
- [x] Autenticação NextAuth com JWT
- [x] Landing page pública com identidade visual
- [x] CMS da landing page (10 paletas, seções, textos, toggles)
- [x] Carrossel de palestrantes com foto, nome e instituição
- [x] Sistema de inscrições com lotes e categorias
- [x] Formulário de pagamento (PIX / boleto / cartão) — estrutura/UI
- [x] Portal de submissão de resumos com validação de 3.000 caracteres
- [x] Avaliação de resumos com critérios quantitativos (1–10)
- [x] Avaliação cega e duplo-cega
- [x] Atribuição manual de avaliadores a resumos
- [x] Avaliação presencial de painéis (modelo básico)
- [x] Credenciamento com badge code + check-in web
- [x] Gestão de programação científica (sessões, tipos, salas)
- [x] Modelo de certificados no banco (6 tipos)
- [x] Painel financeiro com métricas em tempo real
- [x] Relatórios por área temática, status e avaliação
- [x] Perfil do participante (editar dados pessoais)
- [x] Dashboard por role com sidebar responsiva
- [x] API routes base para todos os módulos
- [x] Seed com dados realistas do simpósio

---

## 🔴 ALTA PRIORIDADE — Funcionalidade Core

### 1. Geração de PDF de Certificados
- [x] Criar template visual de certificado (logo, nome, tipo, carga horária, assinatura digital)
- [x] Rota `GET /api/congressista/certificados/[id]/download` gerando PDF via jsPDF
- [x] Gerar código QR de autenticidade no certificado
- [x] Emissão em lote: `POST /api/organizador/certificados/emitir-todos`
  - [x] Emitir certificado de **participação** para todos os inscritos com check-in
  - [x] Emitir certificado de **apresentação** para autores de trabalhos aprovados
  - [x] Emitir certificado de **avaliação** para todos os avaliadores
  - [x] Emitir certificado de **organização** para usuários ORGANIZADOR
  - [x] Emitir certificado de **palestrante** para palestrantes vinculados a sessões como usuários
- [x] Página pública de verificação de autenticidade por código `/verificar/[codigo]`
- [x] Listar certificados emitidos com filtro por tipo no painel do organizador

### 2. Edição de Resumo pelo Autor
- [x] Página `/congressista/submissao/[id]` — formulário pré-preenchido
- [x] Permitir edição apenas enquanto status = RASCUNHO ou SUBMETIDO
- [x] API `PUT /api/congressista/submissao/[id]` com validação de status
- [x] Botão "Retirar submissão" (status → RETIRADO)
- [x] Exibir feedback/parecer do avaliador quando status = APROVADO_COM_CORRECOES

### 3. Exportação de Dados (CSV / Excel)
- [x] `GET /api/admin/inscricoes/export` — CSV de inscrições (nome, email, categoria, lote, valor, pagamento, check-in)
- [x] `GET /api/admin/usuarios/export` — CSV de usuários
- [x] `GET /api/organizador/submissoes/export` — CSV de resumos (título, autor, área, status, nota média)
- [x] `GET /api/organizador/avaliadores/export` — CSV de avaliadores e estatísticas
- [x] `GET /api/organizador/certificados/export` — CSV de certificados emitidos
- [x] Botões "Exportar CSV" funcionais nas páginas de listagem

### 4. Gateway de Pagamento Real
- [ ] Integrar **Pagar.me** (mais adotado no Brasil para eventos acadêmicos)
  - [ ] PIX: gerar QR code + código copia-e-cola via API Pagar.me
  - [ ] Boleto: gerar boleto com vencimento em 3 dias úteis
  - [ ] Cartão de crédito: tokenização no front, cobrança no back
- [ ] Webhook Pagar.me: `POST /api/webhooks/pagarme` — atualizar status de pagamento automaticamente
- [ ] Página de retorno pós-pagamento com status (aprovado / pendente / recusado)
- [ ] Reenvio automático de link de pagamento por e-mail
- [ ] Estorno parcial e total via painel do admin

---

## 🟡 MÉDIA PRIORIDADE

### 5. Envio de E-mail Real
- [ ] Configurar **Resend** (ou Nodemailer + SMTP) com variáveis de ambiente
- [ ] Template HTML de e-mail com identidade visual do evento (paleta dinâmica)
- [ ] Envio automático:
  - [ ] Boas-vindas ao se cadastrar
  - [ ] Confirmação de inscrição + instruções de pagamento
  - [ ] Confirmação de pagamento recebido
  - [ ] Confirmação de submissão de resumo
  - [ ] Resultado da avaliação (aprovado / aprovado com correções / rejeitado)
  - [ ] Lembrete de prazo de submissão (D-7 e D-1)
  - [ ] Link de certificados pós-evento
- [ ] Painel de comunicação `/organizador/comunicacao`:
  - [ ] Composição de e-mail segmentado (filtro por: todos / inscritos pagos / autores / avaliadores)
  - [ ] Visualização do histórico de envios (EmailLog)
  - [ ] Preview do e-mail antes de enviar

### 6. PDF do Crachá com QR Code para Impressão
- [ ] Gerar QR Code visual (biblioteca `qrcode` já instalada) a partir do `badgeCode`
- [ ] Template de crachá PDF (nome, instituição, categoria, QR Code, logo do evento)
- [ ] Rota `GET /api/congressista/inscricao/cracha` — download PDF do crachá
- [ ] Impressão em lote de crachás: `GET /api/organizador/credenciamento/crachas`
  - [ ] Layout A4 com 4 ou 6 crachás por página
  - [ ] Filtro por categoria (estudante, profissional etc.)

### 7. Pesquisa de Satisfação Pós-Evento
- [ ] Página `/congressista/pesquisa` — formulário de avaliação do evento
  - [ ] Campos: nota geral, nota do conteúdo, nota da organização, nota do local, comentários abertos
  - [ ] Permitir submissão apenas 1 vez por usuário/evento
- [ ] API `POST /api/congressista/pesquisa`
- [ ] Relatório de satisfação no painel do organizador `/organizador/relatorios/satisfacao`
  - [ ] Médias por critério, histograma de notas, nuvem de palavras dos comentários
- [ ] Envio automático do link da pesquisa por e-mail no último dia do evento

### 8. Relatório Institucional Consolidado (PDF)
- [ ] Rota `GET /api/organizador/relatorios/institucional` gerando PDF com:
  - [ ] Totais de inscrições por categoria e lote
  - [ ] Receita bruta e líquida
  - [ ] Resumo de submissões por área e status
  - [ ] Estatísticas de avaliação (notas médias por critério)
  - [ ] Lista de trabalhos aprovados por área
  - [ ] Taxa de check-in vs. inscrições pagas
  - [ ] Gráfico de inscrições ao longo do tempo
- [ ] Relatório de avaliadores: desempenho, quantidade avaliada, prazo cumprido

### 9. Atribuição Automática de Avaliadores por Área
- [ ] Algoritmo de matching em `POST /api/organizador/avaliadores/atribuir-automatico`:
  - [ ] Relacionar área do resumo com `EvaluatorArea` do avaliador
  - [ ] Verificar conflito de interesse (mesma instituição que o autor)
  - [ ] Respeitar quantidade máxima de resumos por avaliador (configurável)
  - [ ] Garantir pelo menos 2 avaliadores por resumo
  - [ ] Modo: avaliação cega ou duplo-cega (configurável globalmente)
- [ ] Página de configuração da avaliação no painel do organizador:
  - [ ] Número mínimo/máximo de avaliadores por resumo
  - [ ] Modalidade (cega / duplo-cega / aberta)
  - [ ] Prazo de avaliação
- [ ] Relatório de cobertura: quantos resumos com N avaliadores atribuídos

---

## 🟢 MÉDIA-BAIXA PRIORIDADE

### 10. Etiquetas de Posicionamento de Painéis
- [ ] Página `/organizador/credenciamento/etiquetas`
- [ ] Gerar PDF com etiquetas dos pôsteres (número do painel, título truncado, área, sala)
- [ ] Layout padrão A4 com 6, 8 ou 10 etiquetas por página
- [ ] Mapeamento visual da sala de pôsteres (grid SVG simples mostrando posições)

### 11. Dashboard de Presença em Tempo Real
- [ ] Página `/organizador/credenciamento` com atualização automática a cada 30s (polling)
  - [ ] Total check-ins realizados vs. inscritos pagos (barra de progresso)
  - [ ] Últimos 10 check-ins (nome, horário, categoria)
  - [ ] Filtro por sala/sessão
- [ ] API `GET /api/organizador/credenciamento/stats` com contagens em tempo real
- [ ] Modo "tablet" otimizado para uso na recepção do evento (tela grande, botões grandes)

### 12. Anais Digitais
- [ ] Página pública `/anais/[slug-evento]` listando todos os trabalhos aprovados
  - [ ] Agrupados por área temática e tipo (oral / pôster)
  - [ ] Busca por título, autor, palavra-chave
  - [ ] Link para download do resumo completo em PDF
- [ ] Geração do PDF de cada resumo individual aprovado
- [ ] Geração do PDF dos anais completos (sumário + todos os resumos)
- [ ] ISBN/ISSN (campo configurável no painel admin)

---

## 🔵 MELHORIAS DE PRODUTO (Backlog)

### Multi-tenancy / Multi-evento
- [ ] Suporte a múltiplos eventos simultâneos na mesma instalação
- [ ] Cada evento com seu próprio slug, paleta, config e dados isolados
- [ ] Painel de superadmin (Huryz) para gerenciar todos os eventos
- [ ] Planos/tier: Básico, Profissional, Enterprise (limitar features por plano)

### Área do Participante — Melhorias
- [ ] Feed de notificações (inscrição confirmada, resultado da avaliação, certificado disponível)
- [ ] Download do ingresso/comprovante de inscrição em PDF
- [ ] Favoritar sessões da programação e criar agenda pessoal
- [ ] Compartilhamento de resumo aprovado nas redes sociais

### Programação — Melhorias
- [ ] Página pública de programação em grid visual por horário e sala
- [ ] Exportar programação como PDF ou iCal (.ics)
- [ ] Sistema de avaliação de sessões pelo participante (notas pós-sessão)
- [ ] Transmissão online: campo de link de streaming por sessão

### Avaliação — Melhorias
- [ ] Notificação por e-mail ao avaliador quando novo resumo for atribuído
- [ ] Lembrete automático de prazo de avaliação (D-7, D-3, D-1)
- [ ] Relatório de "acordância" entre avaliadores (inter-rater reliability)
- [ ] Appraiser round: um 3º avaliador desempata quando há divergência grande

### Credenciamento — Melhorias
- [ ] App mobile-first para uso no tablet de recepção (PWA)
- [ ] Modo offline: sincronizar check-ins quando voltar a conexão
- [ ] Relatório de presença por sessão (não só no evento geral)

### Admin — Melhorias
- [ ] Log de auditoria: quem fez o quê e quando (Admin Audit Log)
- [ ] Configuração de lotes por dentro do painel (sem editar o banco)
- [ ] Gerenciamento de categorias de inscrição no painel
- [ ] Permissões granulares: subpermissões dentro do role Organizador
- [ ] Backup manual com download do banco de dados (SQLite)

### LGPD / Segurança
- [x] Página de Política de Privacidade dinâmica (editável pelo admin)
- [x] Termo de consentimento no cadastro (aceite registrado com timestamp + IP)
- [x] Endpoint de exclusão de conta (direito ao esquecimento)
- [x] Anonimização de dados de usuários inativos após N anos
- [x] Rate limiting nas rotas de auth (login, registro)
- [x] Cabeçalhos de segurança HTTP (CSP, HSTS, X-Frame-Options)
- [x] Trava temporaria do site publico por senha via Basic Auth
- [x] Validacao de uploads por MIME, extensao, tamanho e assinatura real

### DevOps / Infra (para produção)
- [ ] Migrar de SQLite para PostgreSQL (Neon, Supabase ou RDS)
- [x] Configurar deploy automatico em AlmaLinux com GitHub Actions self-hosted runner e PM2
- [x] Variáveis de ambiente para produção documentadas em `.env.example`
- [x] CI/CD: GitHub Actions com audit, build e deploy
- [ ] Monitoramento de erros (Sentry)
- [ ] Uptime monitoring (Better Uptime ou similar)
- [ ] Backup automático do banco de dados
- [x] Script/roteiro de backup automatico do banco de dados, `.env` e uploads
- [ ] CDN para assets de upload (fotos de palestrantes → S3 ou Cloudflare R2)

---

## 📐 ARQUITETURA — Decisões Pendentes

- [ ] Definir gateway de pagamento: **Pagar.me** vs. Stripe vs. Mercado Pago
- [ ] Definir serviço de e-mail: **Resend** vs. SendGrid vs. SMTP próprio
- [ ] Definir estratégia de storage de imagens: local (`/public/uploads`) vs. S3/R2
- [ ] Definir banco de produção: PostgreSQL (recomendado) vs. manter SQLite
- [ ] Definir domínio e DNS para cada evento (subdomínio por cliente vs. domínio próprio)

---

## 📊 RESUMO

| Grupo | Total | Concluído | Faltando |
|---|---|---|---|
| Alta prioridade (core) | 4 grupos / ~20 items | 0 | 20 |
| Média prioridade | 5 grupos / ~25 items | 0 | 25 |
| Média-baixa prioridade | 3 grupos / ~12 items | 0 | 12 |
| Melhorias de produto | 6 grupos / ~30 items | 0 | 30 |
| DevOps / Infra | 1 grupo / ~10 items | 0 | 10 |
| **Total** | **~97 items** | **0** | **~97** |

---

> **Próxima sessão recomendada:** Certificados em PDF (jsPDF instalado) + Edição de resumo + CSV export.  
> São os 3 mais visíveis ao usuário final e fecham o ciclo básico do evento.
