Files
agenciapsilmno/database-novo/seeds/seed_030_dev_phases_items.sql
T
Leonardo 7c20b518d4 Sessoes 1-6 acumuladas: hardening B2, defesa em camadas, +192 testes
Repositorio estava ha ~5 sessoes sem commit. Consolida tudo desde d088a89.

Ver commit.md na raiz para descricao completa por sessao.

# Numeros
- A# auditoria abertos: 0/30
- V# verificacoes abertos: 5/52 (todos adiados com plano)
- T# testes escritos: 10/10
- Vitest: 192/192
- SQL integration: 33/33
- E2E (Playwright, novo): 5/5
- Migrations: 17 (10 novas Sessao 6)
- Areas auditadas: 7 (+documentos com 10 V#)

# Highlights Sessao 6 (hoje)
- V#34/V#41 Opcao B2: tenant_features com plano + override (RPC SECURITY DEFINER, tela /saas/tenant-features)
- A#20 rev2 self-hosted: defesa em 5 camadas (honeypot + rate limit + math captcha condicional + paranoid mode + dashboard /saas/security)
- Documentos hardening (V#43-V#49): tenant scoping em storage policies (vazamento entre clinicas eliminado), RPC validate_share_token, signatures policy granular
- SaaS Twilio Config (/saas/twilio-config): UI editavel para SID/webhook/cotacao; AUTH_TOKEN permanece em env var
- T#9 + T#10: useAgendaEvents.spec.js + Playwright E2E (descobriu bug no front que foi corrigido)

# Sessoes anteriores (1-5) consolidadas
- Sessao 1: auth/router/session, normalizeRole extraido
- Sessao 2: agenda - composables/services consolidados
- Sessao 3: pacientes - tenant_id em todas queries
- Sessao 4: security review pagina publica - 14/15 vulnerabilidades corrigidas
- Sessao 5: SaaS - P0 (A#30: 7 tabelas com RLS off corrigidas)

# .gitignore ajustado
- supabase/* + !supabase/functions/ (mantem 10 edge functions, ignora .temp/migrations gerados pelo CLI)
- database-novo/backups/ (regeneravel via db.cjs backup)
- test-results/ + playwright-report/
- .claude/settings.local.json (config local com senha de dev removida do tracking)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 15:42:46 -03:00

230 lines
12 KiB
PL/PgSQL
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.
-- =============================================================================
-- Seed 030 — dev_roadmap_phases + dev_roadmap_items
-- Importa Fase 1 / 2 / 3 do development/04-roadmap/ROADMAP.md
-- =============================================================================
-- ATENÇÃO: este seed faz TRUNCATE RESTART IDENTITY CASCADE.
-- Re-rodá-lo **apaga** edições feitas na UI (roadmap). Rode só no 1º setup ou
-- depois de confirmar que quer redefinir.
-- =============================================================================
BEGIN;
TRUNCATE TABLE public.dev_roadmap_items RESTART IDENTITY CASCADE;
TRUNCATE TABLE public.dev_roadmap_phases RESTART IDENTITY CASCADE;
-- -----------------------------------------------------------------------------
-- Fases
-- -----------------------------------------------------------------------------
INSERT INTO public.dev_roadmap_phases (numero, nome, objetivo, timeline_sugerida, criterio_saida, status, ordem) VALUES
(1, 'MVP Launch',
'Ter um produto cobrável, confiável, completo o suficiente pra um terapeuta solo trocar Psicomanager/PsicoPlanner pelo AgenciaPsi.',
'4-6 semanas',
'5 usuários pagantes em produção sem churn por "falta de feature básica".',
'em_andamento', 1),
(2, 'Paridade Competitiva',
'Qualquer usuário avaliando AgenciaPsi × Psicomanager × PsicoPlanner deve ver paridade ou mais de features. Nenhum "ah, mas lá tem X" válido.',
'2-3 meses após Fase 1',
'Feature checklist empatada com top-3 concorrentes nichados.',
'planejada', 2),
(3, 'Diferenciação IA-first',
'Ter 2-3 features que nenhum concorrente BR tem em paridade. Virar marketing: "o sistema com IA pra psicólogos".',
'3-6 meses após Fase 2',
'Justificar tier premium 2x mais caro que o básico.',
'planejada', 3);
-- -----------------------------------------------------------------------------
-- FASE 1 — MVP Launch (18 items)
-- -----------------------------------------------------------------------------
-- 1.1 Monetização (bloqueador)
INSERT INTO public.dev_roadmap_items (phase_id, numero, bloco, feature, descricao, esforco, prioridade, status, ordem) VALUES
(1, 1, 'Monetização', 'Integração com gateway de pagamento',
'Asaas ou Iugu (PIX + cartão + boleto nativos). Escolher 1. Stripe só se for internacional depois.',
'L', 'bloqueador', 'pendente', 1),
(1, 2, 'Monetização', 'Cartão on file (tokenização)',
'Desdobra do gateway — salvar cartão do paciente pra cobranças recorrentes.',
'M', 'bloqueador', 'pendente', 2),
(1, 3, 'Monetização', 'Auto-billing recorrente',
'Trigger: sessão realizada → gera fatura → cobra automaticamente no cartão on file.',
'M', 'bloqueador', 'pendente', 3),
(1, 4, 'Monetização', 'Cobrança das próprias assinaturas SaaS',
'Tenants pagam pelo plano via gateway. Aproveita estrutura de subscriptions que já existe.',
'M', 'bloqueador', 'pendente', 4),
-- 1.2 Compliance básico BR
(1, 5, 'Compliance BR', 'Tipo de registro profissional',
'Campo obrigatório no cadastro (CRP, CRM, CRFa, RMS…). Aparece em recibos/laudos.',
'S', 'bloqueador', 'pendente', 5),
(1, 6, 'Compliance BR', 'Biblioteca de consent forms editáveis',
'Templates pré-prontos: TCLE, Telehealth, LGPD, Gravação, TCLE menores. Profissional customiza.',
'M', 'bloqueador', 'pendente', 6),
(1, 7, 'Compliance BR', 'Assinatura eletrônica pelo paciente no portal',
'Simples — IP + timestamp. Não precisa ICP-Brasil nesta fase.',
'M', 'bloqueador', 'pendente', 7),
(1, 8, 'Compliance BR', 'Nome social no cadastro',
'Além do nome de registro. CFP exige. Aparece em todas as telas voltadas ao paciente.',
'S', 'bloqueador', 'pendente', 8),
(1, 9, 'Compliance BR', 'Especialidades no cadastro do profissional',
'Lista pré-definida + "outra". DB: tabela specialties + FK em profiles.',
'S', 'bloqueador', 'pendente', 9),
-- 1.3 UX mínima esperada
(1, 10, 'UX mínima', 'Busca global no topbar',
'Paciente, email, telefone. Autocomplete com debounce + highlight.',
'S', 'alta', 'pendente', 10),
(1, 11, 'UX mínima', 'Recently viewed (últimos 5 pacientes)',
'Por usuário. localStorage ou tabela user_recent_access.',
'S', 'alta', 'pendente', 11),
(1, 12, 'UX mínima', 'Papel timbrado',
'Portar do UniaoApp (já existe noutro projeto) — só adaptar pro AgenciaPsi.',
'M', 'alta', 'pendente', 12),
(1, 13, 'UX mínima', 'Relatórios com export PDF/Excel',
'Fechar gaps que o MVP assessment apontou. Estrutura já existe.',
'M', 'alta', 'pendente', 13),
-- 1.4 Fiscal mínimo
(1, 14, 'Fiscal mínimo', 'Recibo profissional (PDF)',
'Gerado com dados CFP (nome, CRP, especialidade, tenant). Já tem base de documentos — formalizar template.',
'S', 'alta', 'pendente', 14),
(1, 15, 'Fiscal mínimo', 'NFS-e emissão',
'Integração Focus NF-e ou NFS-e direto da prefeitura. Pode empurrar pra 1.5 se apertar prazo. Diferencia de Psicomanager.',
'L', 'alta', 'pendente', 15),
-- 1.5 Qualidade pra lançar
(1, 16, 'Qualidade', 'Testes E2E dos fluxos críticos',
'Playwright ou Cypress. Prioridade: cadastro, login, agendamento, cobrança, prontuário.',
'L', 'alta', 'pendente', 16),
(1, 17, 'Qualidade', 'Responsividade mobile validada',
'Terapeuta consulta agenda no celular. Auditoria de breakpoints + fix.',
'M', 'alta', 'pendente', 17),
(1, 18, 'Qualidade', 'Monitoramento de produção',
'Sentry + Supabase dashboards. Detectar bugs antes do usuário reclamar.',
'S', 'alta', 'pendente', 18);
-- -----------------------------------------------------------------------------
-- FASE 2 — Paridade Competitiva (16 items)
-- -----------------------------------------------------------------------------
-- 2.1 Comunicação / Engajamento
INSERT INTO public.dev_roadmap_items (phase_id, numero, bloco, feature, descricao, esforco, prioridade, status, ordem) VALUES
(2, 19, 'Comunicação / Engajamento', 'Agenda diária automática 7h via WhatsApp',
'Cron job + template. Feature signature do PsicoPlanner.',
'S', 'alta', 'pendente', 1),
(2, 20, 'Comunicação / Engajamento', 'Confirmação de presença pelo paciente',
'Parser de resposta WhatsApp/SMS ("SIM") → atualiza status da sessão.',
'M', 'alta', 'pendente', 2),
(2, 21, 'Comunicação / Engajamento', 'Rastreamento de engajamento em tempo real',
'Webhooks da Evolution API → dashboard (recebeu/leu/respondeu).',
'M', 'alta', 'pendente', 3),
(2, 22, 'Comunicação / Engajamento', 'Envio de prescrição/documento via WhatsApp direto',
'Botão "Enviar via WA" gerando link temporário pro documento.',
'S', 'alta', 'pendente', 4),
-- 2.2 Prontuário
(2, 23, 'Prontuário', 'Templates de nota (SOAP / DAP / BIRP / CFP)',
'Biblioteca com templates selecionáveis ao criar evolução.',
'M', 'alta', 'pendente', 5),
(2, 24, 'Prontuário', 'Biblioteca de instrumentos de avaliação',
'GAD-7, PHQ-9, BDI, BAI, DASS-21, SRQ-20 com scoring automático + gráfico de evolução.',
'L', 'alta', 'pendente', 6),
(2, 25, 'Prontuário', 'Histórico em gráfico/tabela',
'Evolução de escalas ao longo do tempo. Chart.js já no projeto.',
'M', 'alta', 'pendente', 7),
(2, 26, 'Prontuário', 'Versionamento de notas',
'Auditoria de alterações + diff visual.',
'M', 'media', 'pendente', 8),
-- 2.3 Intake / Onboarding
(2, 27, 'Intake / Onboarding', 'Pacote de intake pré-1ª-sessão',
'Formulários + anamnese + consent forms enviados ao paciente antes da 1ª sessão. Fluxo: terapeuta monta pacote → paciente recebe link → preenche → assina → terapeuta vê tudo.',
'M', 'media', 'pendente', 9),
(2, 28, 'Intake / Onboarding', 'Upload de arquivo pelo paciente',
'Exames, relatórios externos. Storage bucket já configurado.',
'S', 'media', 'pendente', 10),
-- 2.4 Agenda / Integrações
(2, 29, 'Agenda / Integrações', 'Google Calendar 2-way sync',
'API OAuth + conflict resolution. Feature mais pedida.',
'L', 'media', 'pendente', 11),
(2, 30, 'Agenda / Integrações', 'iCal feed (Apple Calendar / Outlook)',
'Endpoint que serve .ics. Read-only.',
'S', 'media', 'pendente', 12),
-- 2.5 Fiscal avançado BR
(2, 31, 'Fiscal avançado BR', 'Assinatura digital ICP-Brasil',
'Laudos com validade jurídica. Integração com ValidCertificadora ou similar.',
'L', 'media', 'pendente', 13),
(2, 32, 'Fiscal avançado BR', 'Faturamento TISS básico',
'Pra clínicas que têm convênio. Nichado — só se tier clínica/rede for prioridade. Recomendado NÃO fazer nesta fase.',
'XL', 'media', 'pendente', 14),
-- 2.6 Marketing / Presença
(2, 33, 'Marketing / Presença', 'Perfil público do terapeuta',
'Página /p/<slug> com bio, horários, agendamento. Já tem agendador público — só enriquecer.',
'M', 'media', 'pendente', 15),
(2, 34, 'Marketing / Presença', 'SEO básico',
'schema.org/MedicalBusiness + meta tags. Melhora descoberta orgânica.',
'S', 'media', 'pendente', 16);
-- -----------------------------------------------------------------------------
-- FASE 3 — Diferenciação IA-first (14 items)
-- -----------------------------------------------------------------------------
-- 3.1 IA
INSERT INTO public.dev_roadmap_items (phase_id, numero, bloco, feature, descricao, esforco, prioridade, status, ordem) VALUES
(3, 35, 'IA', 'Bot WhatsApp que agenda sozinho',
'Equivalente Amélia Agendamento da Amplimed. Stack: Evolution API + LLM + RAG na disponibilidade da agenda. ROI: 24/7 sem recepcionista.',
'XL', 'diferencial', 'pendente', 1),
(3, 36, 'IA', 'Transcrição de sessão áudio→texto',
'Equivalente AI Scribe do Jane / Amélia Transcrição. Whisper API ou Deepgram. Paciente consente. Transcrição vira rascunho de nota.',
'L', 'diferencial', 'pendente', 2),
(3, 37, 'IA', 'Copilot no prontuário',
'Resumir histórico, sugerir diagnóstico diferencial, busca semântica em notas anteriores. RAG em cima das notas do paciente.',
'L', 'diferencial', 'pendente', 3),
(3, 38, 'IA', 'Gerador de documentos com compliance CFP',
'Equivalente PsiAssist do PsicoPlanner. LLM com system prompt CFP + templates.',
'M', 'diferencial', 'pendente', 4),
-- 3.2 Teleconsulta nativa
(3, 39, 'Teleconsulta', 'Vídeo nativo integrado',
'Daily.co ou Jitsi Meet. Sala gerada por consulta + link no lembrete.',
'L', 'diferencial', 'pendente', 5),
(3, 40, 'Teleconsulta', 'Sala de espera virtual',
'Profissional admite paciente quando estiver pronto.',
'M', 'diferencial', 'pendente', 6),
(3, 41, 'Teleconsulta', 'Whiteboard digital + screen share',
'Daily.co tem nativo. Útil pra TCC visual e crianças.',
'M', 'diferencial', 'pendente', 7),
-- 3.3 Rede / Multi-unidade
(3, 42, 'Rede / Multi-unidade', 'Multi-unidade / filiais com Main Office',
'Tabela clinic_units + FK em consultas/profissionais. Só se posicionar pra tier enterprise.',
'L', 'diferencial', 'pendente', 8),
(3, 43, 'Rede / Multi-unidade', 'Salas e equipamentos como recursos',
'Estilo Jane App. Evita double-booking.',
'M', 'diferencial', 'pendente', 9),
(3, 44, 'Rede / Multi-unidade', 'CRM de leads',
'Captura de landing → funil → matching com terapeuta. Aproveita perfil público da Fase 2.',
'L', 'diferencial', 'pendente', 10),
(3, 45, 'Rede / Multi-unidade', 'BI avançado',
'MRR, cohort retention, LTV por terapeuta. Dashboards dedicados.',
'M', 'diferencial', 'pendente', 11),
-- 3.4 UX premium / diferenciação fina
(3, 46, 'UX premium', 'Website builder pra clínica',
'Estilo Jane — sem precisar de Wix/WordPress. Grande mas ROI de marketing enorme.',
'XL', 'diferencial', 'pendente', 12),
(3, 47, 'UX premium', 'App mobile (PWA otimizado)',
'Paciente instala no celular. Vue já dá PWA grátis, só polir.',
'M', 'diferencial', 'pendente', 13),
(3, 48, 'UX premium', 'Migração assistida de Psicomanager',
'Importador de CSV/API. Feature de venda: "deixa o outro, a gente migra".',
'M', 'diferencial', 'pendente', 14);
COMMIT;
-- Log
INSERT INTO public.dev_generation_log (tipo, comando, sucesso, metadata)
VALUES ('seed', 'seed_030_dev_phases_items.sql', true,
jsonb_build_object('phases', 3, 'items', 48, 'source', 'development/04-roadmap/ROADMAP.md'));