riseup-squad18/ARQUITETURA_DEFINITIVA.md

9.3 KiB

🎯 ARQUITETURA DEFINITIVA: SUPABASE EXTERNO vs NOSSO SUPABASE

📋 REGRA DE OURO

Supabase Externo (Fechado da Empresa): CRUD bĂĄsico de appointments, doctors, patients, reports
Nosso Supabase: Features EXTRAS, KPIs, tracking, gamificação, auditoria, preferĂȘncias


đŸ”” SUPABASE EXTERNO (FONTE DA VERDADE)

Tabelas que JÁ EXISTEM no Supabase Externo:

  • ✅ appointments - CRUD completo de agendamentos
  • ✅ doctors - Cadastro de mĂ©dicos
  • ✅ patients - Cadastro de pacientes
  • ✅ reports - RelatĂłrios mĂ©dicos bĂĄsicos
  • ✅ availability (provavelmente) - Disponibilidade dos mĂ©dicos
  • ✅ Dados de autenticação bĂĄsica

Endpoints que PUXAM DO EXTERNO:

MÓDULO 2.1 - Appointments (EXTERNO):

  • /appointments/list → Puxa de lĂĄ + mescla com nossos logs
  • /appointments/create → Cria LÁ + grava log aqui
  • /appointments/update → Atualiza LÁ + grava log aqui
  • /appointments/cancel → Cancela LÁ + notifica waitlist aqui
  • /appointments/confirm → Confirma LÁ + grava log aqui
  • /appointments/checkin → Atualiza LÁ + cria registro de checkin aqui
  • /appointments/no-show → Marca LÁ + atualiza KPIs aqui

MÓDULO 2.2 - Availability (DEPENDE):

  • /availability/list → SE existir LÁ, puxa de lĂĄ. SENÃO, cria tabela aqui
  • /availability/create → Cria onde for o source of truth
  • /availability/update → Atualiza onde for o source of truth
  • /availability/delete → Deleta onde for o source of truth

MÓDULO 6 - Reports (EXTERNO):

  • /reports/list-extended → Puxa LÁ + adiciona filtros extras
  • /reports/export/pdf → Puxa dados LÁ + gera PDF aqui
  • /reports/export/csv → Puxa dados LÁ + gera CSV aqui

MÓDULO 8 - Patients (EXTERNO):

  • /patients/history → Puxa appointments LÁ + histĂłrico estendido aqui
  • /patients/portal → Mescla dados LÁ + teleconsulta aqui

🟱 NOSSO SUPABASE (FEATURES EXTRAS)

Tabelas que criamos para COMPLEMENTAR:

✅ Tracking & Auditoria:

  • user_sync - Mapear external_user_id → local_user_id
  • user_actions - Log de todas as açÔes dos usuĂĄrios
  • user_sessions - SessĂ”es de login/logout
  • audit_actions - Auditoria detalhada (MÓDULO 13)
  • access_log - Quem acessou o quĂȘ (LGPD)
  • patient_journey - Jornada do paciente

✅ PreferĂȘncias & UI:

  • user_preferences - Modo escuro, fonte dislexia, acessibilidade (MÓDULO 1 + 11)
  • patient_preferences - HorĂĄrios favoritos, comunicação (MÓDULO 8)

✅ Agenda Extras:

  • availability_exceptions - Feriados, exceçÔes (MÓDULO 2.3)
  • doctor_availability - SE nĂŁo existir no externo (MÓDULO 2.2)

✅ Fila & Waitlist:

  • waitlist - Lista de espera (MÓDULO 3)
  • virtual_queue - Fila virtual da recepção (MÓDULO 4)

✅ NotificaçÔes:

  • notifications_queue - Fila de SMS/Email/WhatsApp (MÓDULO 5)
  • notification_subscriptions - Opt-in/opt-out (MÓDULO 5)

✅ Analytics & KPIs:

  • kpi_cache / analytics_cache - Cache de mĂ©tricas (MÓDULO 10)
  • doctor_stats - Ocupação, no-show %, atraso (MÓDULO 7)

✅ Gamificação:

  • doctor_badges - Conquistas dos mĂ©dicos (MÓDULO 7)
  • patient_points - Pontos dos pacientes (gamificação)
  • patient_streaks - SequĂȘncias de consultas

✅ Teleconsulta:

  • teleconsult_sessions - Salas Jitsi/WebRTC (MÓDULO 9)

✅ Integridade:

  • report_integrity - Hashes SHA256 anti-fraude (MÓDULO 6)

✅ Sistema:

  • feature_flags - Ativar/desativar features (MÓDULO 14)
  • patient_extended_history - HistĂłrico detalhado (MÓDULO 8)

Endpoints 100% NOSSOS:

MÓDULO 1 - User Preferences:

  • /user/info → Busca role e permissĂ”es AQUI
  • /user/update-preferences → Salva AQUI (user_preferences)

MÓDULO 2.3 - Exceptions:

  • /exceptions/list → Lista DAQUI (availability_exceptions)
  • /exceptions/create → Cria AQUI
  • /exceptions/delete → Deleta AQUI

MÓDULO 2.2 - Availability Slots:

  • /availability/slots → Gera slots baseado em disponibilidade + exceçÔes DAQUI

MÓDULO 3 - Waitlist:

  • /waitlist/add → Adiciona AQUI
  • /waitlist/list → Lista DAQUI
  • /waitlist/match → Busca match AQUI
  • /waitlist/remove → Remove DAQUI

MÓDULO 4 - Virtual Queue:

  • /queue/list → Lista DAQUI (virtual_queue)
  • /queue/checkin → Cria registro AQUI
  • /queue/advance → Avança fila AQUI

MÓDULO 5 - Notifications:

  • /notifications/enqueue → Enfileira AQUI (notifications_queue)
  • /notifications/process → Worker processa fila DAQUI
  • /notifications/confirm → Confirma AQUI
  • /notifications/subscription → Gerencia AQUI (notification_subscriptions)

MÓDULO 6 - Report Integrity:

  • /reports/integrity-check → Verifica hash AQUI (report_integrity)

MÓDULO 7 - Doctor Stats:

  • /doctor/summary → Puxa stats DAQUI (doctor_stats) + appointments LÁ
  • /doctor/occupancy → Calcula AQUI (doctor_stats)
  • /doctor/delay-suggestion → Algoritmo AQUI (doctor_stats)
  • /doctor/badges → Lista DAQUI (doctor_badges)

MÓDULO 8 - Patient Preferences:

  • /patients/preferences → Salva/busca AQUI (patient_preferences)

MÓDULO 9 - Teleconsulta:

  • /teleconsult/start → Cria sessĂŁo AQUI (teleconsult_sessions)
  • /teleconsult/status → Consulta AQUI
  • /teleconsult/end → Finaliza AQUI

MÓDULO 10 - Analytics:

  • /analytics/summary → Puxa appointments LÁ + calcula KPIs AQUI
  • /analytics/heatmap → Processa appointments LÁ + cache AQUI
  • /analytics/demand-curve → Processa LÁ + cache AQUI
  • /analytics/ranking-reasons → Agrega LÁ + cache AQUI
  • /analytics/monthly-no-show → Filtra LÁ + cache AQUI
  • /analytics/specialty-heatmap → Usa doctor_stats DAQUI
  • /analytics/custom-report → Query builder sobre dados LÁ + AQUI

MÓDULO 11 - Accessibility:

  • /accessibility/preferences → Salva AQUI (user_preferences)

MÓDULO 12 - LGPD:

  • /privacy/request-export → Exporta dados LÁ + AQUI
  • /privacy/request-delete → Anonimiza LÁ + deleta AQUI
  • /privacy/access-log → Consulta AQUI (access_log)

MÓDULO 13 - Auditoria:

  • /audit/log → Grava AQUI (audit_actions)
  • /audit/list → Lista DAQUI (audit_actions)

MÓDULO 14 - Feature Flags:

  • /flags/list → Lista DAQUI (feature_flags)
  • /flags/update → Atualiza AQUI

MÓDULO 15 - System:

  • /system/health-check → Verifica saĂșde LÁ + AQUI
  • /system/cache-rebuild → Recalcula cache AQUI
  • /system/cron-runner → Executa jobs AQUI

🔄 FLUXO DE DADOS CORRETO

Exemplo 1: Criar Appointment

1. Frontend → Edge Function /appointments/create
2. Edge Function → Supabase EXTERNO (cria appointment)
3. Edge Function → Nosso Supabase (grava user_actions log)
4. Edge Function → Nosso Supabase (enfileira notificação)
5. Retorna sucesso

Exemplo 2: Listar Appointments

1. Frontend → Edge Function /appointments/list
2. Edge Function → Supabase EXTERNO (busca appointments)
3. Edge Function → Nosso Supabase (busca logs de checkin/no-show)
4. Edge Function → Mescla dados
5. Retorna lista completa

Exemplo 3: Dashboard do Médico

1. Frontend → Edge Function /doctor/summary
2. Edge Function → Nosso Supabase (busca doctor_stats)
3. Edge Function → Supabase EXTERNO (busca appointments de hoje)
4. Edge Function → Nosso Supabase (busca badges)
5. Retorna dashboard completo

Exemplo 4: PreferĂȘncias do UsuĂĄrio

1. Frontend → Edge Function /user/update-preferences
2. Edge Function → Nosso Supabase APENAS (salva user_preferences)
3. Retorna sucesso

✅ CHECKLIST DE IMPLEMENTAÇÃO

O que DEVE usar externalRest():

  • ✅ Criar/listar/atualizar/deletar appointments
  • ✅ Buscar dados de doctors/patients/reports
  • ✅ Atualizar status de appointments
  • ✅ Buscar availability (se existir lĂĄ)

O que DEVE usar supabase (nosso):

  • ✅ user_preferences, patient_preferences
  • ✅ user_actions, audit_actions, access_log
  • ✅ user_sync, user_sessions, patient_journey
  • ✅ availability_exceptions, doctor_availability (se for nossa tabela)
  • ✅ waitlist, virtual_queue
  • ✅ notifications_queue, notification_subscriptions
  • ✅ kpi_cache, analytics_cache, doctor_stats
  • ✅ doctor_badges, patient_points, patient_streaks
  • ✅ teleconsult_sessions
  • ✅ report_integrity
  • ✅ feature_flags
  • ✅ patient_extended_history

O que DEVE mesclar (LÁ + AQUI):

  • ✅ /appointments/list (appointments LÁ + logs AQUI)
  • ✅ /doctor/summary (appointments LÁ + stats AQUI)
  • ✅ /patients/history (appointments LÁ + extended_history AQUI)
  • ✅ /patients/portal (dados LÁ + teleconsult AQUI)
  • ✅ /analytics/* (dados LÁ + cache/KPIs AQUI)

🎯 CONCLUSÃO

SUPABASE EXTERNO = CRUD BÁSICO (appointments, doctors, patients, reports)
NOSSO SUPABASE = FEATURES EXTRAS (KPIs, tracking, gamificação, preferĂȘncias, auditoria)

Todos os endpoints seguem esse padrĂŁo:

  1. LĂȘ/Escreve no Supabase Externo quando for dado base
  2. Complementa com nossa DB para features extras
  3. SEMPRE grava logs de auditoria em user_actions

✅ Arquitetura 100% alinhada com a especificação!