codigo0/docs/MIGRACION_CONTENIDO_APP_BACKEND.md

5.5 KiB

🔄 MIGRACIÓN DE CONTENIDO: APP → BACKEND

Fecha: 2025-01-06
Problema: El contenido real de la app no está en el backend
Solución: Script de migración


¿POR QUÉ NO VES EL CONTENIDO ACTUAL EN EL BACKEND?

Situación Actual

En la App (Frontend):

  • src/data/procedures.ts - 5 procedimientos (RCP Adulto SVB, RCP Adulto SVA, RCP Pediátrico, OVACE, Shock Hemorrágico)
  • src/data/drugs.ts - 6 fármacos (Oxígeno, Adrenalina, Amiodarona, Atropina, Midazolam, Salbutamol)

En el Backend:

  • Solo contenido de ejemplo (checklists de prueba)
  • NO tiene los procedimientos reales
  • NO tiene los fármacos reales

Razón

El backend fue diseñado con un schema nuevo (tes_content) que es diferente a la estructura actual de la app. El contenido de la app vive en archivos TypeScript (procedures.ts, drugs.ts) y nunca se migró al backend.


SOLUCIÓN: SCRIPT DE MIGRACIÓN

He creado un script que:

  1. Lee el contenido de src/data/procedures.ts y src/data/drugs.ts
  2. Lo transforma al formato del schema tes_content
  3. Lo inserta en la base de datos PostgreSQL
  4. Marca todo como published para que esté disponible

🚀 CÓMO EJECUTAR LA MIGRACIÓN

Paso 1: Verificar que el schema existe

cd backend
node scripts/create-auth-tables.js

Paso 2: Ejecutar el script de migración

cd backend
node scripts/migrate-app-content-v2.js

Salida esperada:

🔄 Iniciando migración de contenido de la app al backend...

✅ Conexión a base de datos establecida

✅ Usuario admin encontrado: [uuid]

📋 Cargando procedimientos...
   Encontrados 5 procedimientos

💾 Migrando procedimientos a la base de datos...
   ✅ rcp-adulto-svb: RCP Adulto - Soporte Vital Básico
   ✅ rcp-adulto-sva: RCP Adulto - Soporte Vital Avanzado
   ✅ rcp-pediatrico: RCP Pediátrico - SVB
   ✅ obstruccion-via-aerea: Obstrucción de Vía Aérea - OVACE
   ✅ shock-hemorragico: Shock Hemorrágico

💊 Cargando fármacos...
   Encontrados 6 fármacos

💾 Migrando fármacos a la base de datos...
   ✅ oxigeno: Oxígeno (O₂)
   ✅ adrenalina: Adrenalina (Epinefrina)
   ✅ amiodarona: Amiodarona
   ✅ atropina: Atropina
   ✅ midazolam: Midazolam
   ✅ salbutamol: Salbutamol

📊 Resumen de migración:
   protocol: 5 total, 5 publicados
   drug: 6 total, 6 publicados

✅ Migración completada exitosamente!

🔍 VERIFICAR QUE LA MIGRACIÓN FUNCIONÓ

Opción 1: Consulta SQL directa

-- Ver procedimientos migrados
SELECT 
  slug, 
  title, 
  status, 
  priority,
  clinical_context
FROM tes_content.content_items
WHERE type = 'protocol'
ORDER BY priority, title;

-- Ver fármacos migrados
SELECT 
  slug, 
  title, 
  status, 
  priority
FROM tes_content.content_items
WHERE type = 'drug'
ORDER BY title;

Opción 2: Desde el Panel Admin

  1. Accede al panel admin: http://localhost:5174
  2. Ve a "Contenido" → "Protocolos"
  3. Deberías ver los 5 procedimientos
  4. Ve a "Contenido" → "Fármacos"
  5. Deberías ver los 6 fármacos

📊 CONTENIDO QUE SE MIGRA

Procedimientos (5)

Slug Título Prioridad Contexto Clínico
rcp-adulto-svb RCP Adulto - Soporte Vital Básico Crítica RCP
rcp-adulto-sva RCP Adulto - Soporte Vital Avanzado Crítica RCP
rcp-pediatrico RCP Pediátrico - SVB Crítica RCP
obstruccion-via-aerea Obstrucción de Vía Aérea - OVACE Crítica VIA_AEREA
shock-hemorragico Shock Hemorrágico Crítica SHOCK

Fármacos (6)

Slug Nombre Genérico Categoría
oxigeno Oxígeno (O₂) Oxigenoterapia
adrenalina Adrenalina (Epinefrina) Cardiovascular
amiodarona Amiodarona Cardiovascular
atropina Atropina Cardiovascular
midazolam Midazolam Neurológico
salbutamol Salbutamol Respiratorio

🔄 RE-MIGRACIÓN (Si necesitas actualizar)

El script usa ON CONFLICT (slug) DO UPDATE, así que puedes ejecutarlo múltiples veces:

  • Si el contenido ya existe, se actualiza
  • Si no existe, se crea
  • No duplica contenido

Ejecutar de nuevo:

cd backend
node scripts/migrate-app-content-v2.js

⚠️ NOTAS IMPORTANTES

  1. No modifica la app: El script solo lee de procedures.ts y drugs.ts, no los modifica
  2. Estado inicial: Todo se migra como published para que esté disponible inmediatamente
  3. Versión: Todo se migra como versión 1.0.0
  4. Admin requerido: Necesitas tener un usuario admin creado (ejecuta seed-admin.js primero)

🐛 SOLUCIÓN DE PROBLEMAS

Error: "No se encontró usuario admin"

# Crear usuario admin primero
cd backend
node scripts/seed-admin.js

Error: "Schema tes_content no existe"

# Crear schema primero
cd backend
node scripts/create-auth-tables.js

Error: "No se pudo importar directamente"

El script tiene un fallback con datos hardcodeados. Si no puede leer los archivos TypeScript, usará datos de ejemplo. Esto es normal si hay problemas con imports dinámicos.


📝 PRÓXIMOS PASOS

Después de migrar:

  1. Verificar contenido en panel admin
  2. Probar endpoints API: GET /api/content/protocol/:slug
  3. Generar Content Pack: POST /api/admin/pack/generate
  4. Integrar en app (FASE 2 del plan técnico)

Fin del Documento