# 🎯 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!**