8 KiB
🎛️ ADMIN PANEL - IMPLEMENTACIÓN COMPLETA
📋 RESUMEN EJECUTIVO
Se ha diseñado e implementado un sistema completo de administración de contenido para EMERGES TES que permite editar protocolos, guías, manual, vademécum, checklists y recursos sin modificar el código de la app.
✅ RESTRICCIONES CUMPLIDAS
- ✅ NO se modifica
src/data/procedures.tsnisearchProcedures() - ✅ NO se modifica
src/data/drugs.tsnisearchDrugs() - ✅ NO rompe PWA offline - Content pack funciona offline con cache
- ✅ NO cambia rutas existentes - Compatibilidad total
- ✅ Versionado completo - Todo contenido es versionado y reversible
🏗️ ARQUITECTURA
1. Modelo de Datos Extendido
Ubicación: admin-panel/shared/types/content.ts
Interfaces TypeScript que extienden el modelo existente:
-
Protocol (extendido):
pasosRapidos: Pasos estructurados con metadatachecklist: Checklist integradodosisInline: Dosis de fármacos inlineherramientasContexto: Calculadoras, algoritmos, referenciasfuentes: Fuentes clínicas (ERC, SEMES, AHA)
-
Guide (extendido):
sections: 8 secciones con markdown y recursosrelations: Relaciones con protocolos y manualesmetadata: Objetivos de aprendizaje, audiencia
-
Drug (extendido):
frecuenciaUso: Frecuencia por contexto (primera/segunda línea)contextos: Contextos específicos de usoprimeraLinea/segundaLinea: Indicaciones
-
ChecklistReusable: Checklists reutilizables (electrodos, preparación IOT, etc.)
-
ContentPack: Pack versionado para la app
2. Backend API
Ubicación: backend/src/
Autenticación y Autorización
routes/auth.js: Login, JWT, verificación de usuariomiddleware/auth.js: Middleware de autenticación y permisos- RBAC: 5 roles con permisos granulares
Gestión de Contenido
routes/content.js: CRUD completo de contenidoGET /api/content- Listar con filtrosGET /api/content/:id- Obtener por IDPOST /api/content- CrearPUT /api/content/:id- ActualizarGET /api/content/:id/versions- Historial de versionesPOST /api/content/:id/validate- Validar contenidoGET /api/content/pack/latest- Content pack público
Base de Datos
- Esquema:
database/migrations/001_create_schema.sql - Tablas:
content_items: Items de contenidocontent_versions: Versionadocontent_relations: Relaciones entre contenidoscontent_change_log: Auditoríausers: Usuarios y roles
3. Admin Panel React
Ubicación: admin-panel/
Estructura preparada para:
- Dashboard con estadísticas
- Biblioteca de contenido con filtros
- Editores especializados:
- Editor de Protocolo con vista previa "modo TES"
- Editor de Checklist reutilizable
- Editor de Guías Markdown con preview
- Manager de Vademécum
- Auditoría y versionado
- Gestión de fuentes
4. Integración en App Principal
Ubicación: src/services/content-pack.ts
Sistema de "override" que:
- Intenta obtener content pack desde API
- Si existe y está validado, lo usa
- Si no, usa datos locales (
src/data/) - Funciona offline usando cache del último pack
IMPORTANTE: No modifica procedures.ts ni drugs.ts. Solo proporciona funciones para obtener contenido con override.
🚀 INSTALACIÓN Y CONFIGURACIÓN
Paso 1: Backend
cd backend
# 1. Instalar dependencias
npm install
# 2. Configurar .env
cp ENV_TEMPLATE.md .env
# Editar .env con credenciales de PostgreSQL
# 3. Crear usuario y base de datos (requiere sudo)
bash crear-usuario-y-bd.sh
# 4. Crear tablas
npm run db:create
# 5. Crear usuario admin
npm run seed:admin
# 6. Crear contenido de ejemplo
npm run seed:content
# 7. Iniciar servidor
npm run dev
Credenciales por defecto:
- Email:
admin@emerges-tes.local - Password:
Admin123! - Role:
super_admin
Paso 2: Admin Panel
cd admin-panel
# 1. Instalar dependencias
npm install
# 2. Configurar .env
echo "VITE_API_URL=http://localhost:3000" > .env
# 3. Iniciar desarrollo
npm run dev
Paso 3: Integración en App Principal
El servicio content-pack.ts ya está creado. Para usarlo:
import { getProtocolWithOverride } from '@/services/content-pack';
import { getProcedureById } from '@/data/procedures';
// En un componente
const protocol = await getProtocolWithOverride(
'rcp-adulto-svb',
getProcedureById('rcp-adulto-svb')
);
📦 SEED DATA
Checklists Creados
-
Electrodos/Parches DESA (
checklist-electrodos-desa)- 8 pasos críticos
- Aplicable a RCP SVB y SVA
-
Preparación Intubación (
checklist-preparacion-intubacion)- 10 pasos organizados por categoría
- Material, Verificación, Fármacos, Monitorización, Posicionamiento
-
RCP Checklist (
checklist-rcp-adulto-svb)- 10 pasos esenciales
- Versión mejorada del checklist existente
Protocolos de Ejemplo
-
RCP Adulto SVB Extendido (
rcp-adulto-svb-extended)- Checklist integrado
- Dosis inline (Adrenalina)
- Herramientas de contexto
- Fuentes clínicas (ERC 2021)
-
Shock Hemorrágico Extendido (
shock-hemorragico-extended)- Dosis inline (Ácido Tranexámico)
- Fuentes clínicas (SEMES 2023)
🔐 ROLES Y PERMISOS
| Rol | Permisos |
|---|---|
| super_admin | Acceso total (usuarios, contenido, sistema) |
| editor_clinico | Editar protocolos, fármacos, checklists |
| editor_formativo | Editar guías formativas y manuales |
| revisor | Revisar y validar contenido |
| viewer | Solo lectura |
📝 FLUJO DE TRABAJO
Crear/Editar Contenido
- Editor crea/edita contenido → Estado:
draft - Editor envía para revisión → Estado:
in_review - Revisor revisa y valida → Estado:
approved - Super Admin publica → Estado:
published - App consume content pack con contenido publicado
Versionado
- Cada cambio crea una nueva versión
- Historial completo de versiones
- Posibilidad de revertir a versión anterior
- Log de auditoría de todos los cambios
🧪 TESTS Y VERIFICACIÓN
Checklist Manual
- ✅ Backend inicia correctamente
- ✅ Login funciona con credenciales por defecto
- ✅ Se puede crear contenido
- ✅ Se puede editar contenido
- ✅ Versionado funciona
- ✅ Content pack se genera correctamente
- ✅ App consume content pack offline
Tests Automatizados (Pendiente)
# Backend
cd backend
npm test
# Admin Panel
cd admin-panel
npm test
🔄 PRÓXIMOS PASOS
Fase 1: Completar Admin Panel UI
- Dashboard con estadísticas
- Biblioteca de contenido
- Editores especializados
- Vista de auditoría
Fase 2: Mejoras Backend
- Endpoint de búsqueda avanzada
- Exportación de content pack
- Importación masiva
- Validación de contenido más estricta
Fase 3: Integración Completa
- Integrar content pack en componentes existentes
- Notificaciones de actualizaciones
- Sincronización automática
📚 DOCUMENTACIÓN ADICIONAL
- Modelo de Datos:
admin-panel/shared/types/content.ts - API Backend:
backend/src/routes/ - Servicio Content Pack:
src/services/content-pack.ts - Seed Data:
backend/scripts/seed-content.js
⚠️ IMPORTANTE
- NO modificar
src/data/procedures.tsnisrc/data/drugs.ts - Cambiar contraseña del admin después del primer login
- Backup de base de datos antes de migraciones importantes
- Validar contenido antes de publicar
- Probar offline después de cambios en content pack
🎉 ESTADO ACTUAL
✅ Completado:
- Modelo de datos extendido
- Backend API completo (auth, CRUD, versionado)
- Sistema de content pack
- Seed data (2 protocolos, 3 checklists)
- Integración en app principal (servicio)
🚧 En Progreso:
- Admin Panel UI (estructura creada, componentes pendientes)
📋 Pendiente:
- Tests automatizados
- Documentación de API
- Mejoras de UI/UX