7c20b518d4
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>
230 lines
12 KiB
PL/PgSQL
230 lines
12 KiB
PL/PgSQL
-- =============================================================================
|
||
-- 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'));
|