Ir al contenido

Modelo de datos

EMA Well usa dos schemas en su Supabase:

  • public — datos operativos del producto (pilares, check-ins, racha, suscripciones).
  • fhir — observaciones clínicas del usuario en formato FHIR R4 nativo.
TablaPropósito
pillarsPilares activos del usuario. Campos clave: track_type (boolean / duration / count / scale), goal_value, loinc_code.
daily_logsCheck-in diario. Campos clave: energia (1-5), mood (1-5), impulso (toggle), wins, notas.
daily_log_entriesUna entry por pilar dentro de un check-in. Campos clave: done (bool), value, fhir_obs_id (link a Observation).
streaksRacha general + por pilar. Campos clave: current_count, best_count, freeze_used, freeze_month.
subscriptionsTier (free / pro), billing_period (monthly/annual), stripe_customer_id, status.
achievementsLogros desbloqueados. type ∈ {streak_7, streak_21, streak_30, streak_60, streak_90, phase_1, phase_2, phase_3, program_complete}.
user_patient_mapBridge user_idPatient/{id} FHIR.
routine_packs + routine_itemsRutinas curadas (read-only).
weeksReflexión semanal por user/year/week.
daily_suggestionsInsights post-check-in (AI, solo Pro).
escape_podsAcciones rápidas curadas.

fhir_resources (single-table FHIR):

  • id (UUID)
  • resource_type (text)
  • resource (JSONB con el recurso completo)
  • subject_ref (text, ej. Patient/{id})
  • Índices por (subject_ref, resource_type).
TipoLOINCNotas
Presión arterialmúltiplessys/dia
Altura8302-2cm
Peso29463-7kg
BMI39156-5calculado
Temperatura8310-5°C
Glucosa2339-0mg/dL
FC8867-4bpm
SpO₂2708-6%
Energía87706-6 (LOINC)escala 1-5
Mood285854004 (SNOMED)escala 1-5

Schema public:

user_id = auth.uid()

Schema fhir:

subject.reference = current_patient_ref()

current_patient_ref() es un function bridge que mapea auth.uid()user_patient_map.patient_ref.

  • IDs: UUID en todas las tablas.
  • FHIR resources: JSONB completo (no normalizamos campos individuales).
  • FK con cascada: daily_log_entries.daily_log_iddaily_logs.id ON DELETE CASCADE.
  • Sin ORM: queries directas vía Supabase JS client desde el worker Hono.