317 lines
8 KiB
Markdown
317 lines
8 KiB
Markdown
|
|
# 🎛️ 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.ts` ni `searchProcedures()`
|
||
|
|
- ✅ **NO se modifica** `src/data/drugs.ts` ni `searchDrugs()`
|
||
|
|
- ✅ **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 metadata
|
||
|
|
- `checklist`: Checklist integrado
|
||
|
|
- `dosisInline`: Dosis de fármacos inline
|
||
|
|
- `herramientasContexto`: Calculadoras, algoritmos, referencias
|
||
|
|
- `fuentes`: Fuentes clínicas (ERC, SEMES, AHA)
|
||
|
|
|
||
|
|
- **Guide** (extendido):
|
||
|
|
- `sections`: 8 secciones con markdown y recursos
|
||
|
|
- `relations`: Relaciones con protocolos y manuales
|
||
|
|
- `metadata`: Objetivos de aprendizaje, audiencia
|
||
|
|
|
||
|
|
- **Drug** (extendido):
|
||
|
|
- `frecuenciaUso`: Frecuencia por contexto (primera/segunda línea)
|
||
|
|
- `contextos`: Contextos específicos de uso
|
||
|
|
- `primeraLinea` / `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 usuario
|
||
|
|
- **`middleware/auth.js`**: Middleware de autenticación y permisos
|
||
|
|
- **RBAC**: 5 roles con permisos granulares
|
||
|
|
|
||
|
|
#### Gestión de Contenido
|
||
|
|
|
||
|
|
- **`routes/content.js`**: CRUD completo de contenido
|
||
|
|
- `GET /api/content` - Listar con filtros
|
||
|
|
- `GET /api/content/:id` - Obtener por ID
|
||
|
|
- `POST /api/content` - Crear
|
||
|
|
- `PUT /api/content/:id` - Actualizar
|
||
|
|
- `GET /api/content/:id/versions` - Historial de versiones
|
||
|
|
- `POST /api/content/:id/validate` - Validar contenido
|
||
|
|
- `GET /api/content/pack/latest` - Content pack público
|
||
|
|
|
||
|
|
#### Base de Datos
|
||
|
|
|
||
|
|
- **Esquema**: `database/migrations/001_create_schema.sql`
|
||
|
|
- **Tablas**:
|
||
|
|
- `content_items`: Items de contenido
|
||
|
|
- `content_versions`: Versionado
|
||
|
|
- `content_relations`: Relaciones entre contenidos
|
||
|
|
- `content_change_log`: Auditoría
|
||
|
|
- `users`: 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:
|
||
|
|
1. Intenta obtener content pack desde API
|
||
|
|
2. Si existe y está validado, lo usa
|
||
|
|
3. Si no, usa datos locales (`src/data/`)
|
||
|
|
4. 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
|
||
|
|
|
||
|
|
```bash
|
||
|
|
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
|
||
|
|
|
||
|
|
```bash
|
||
|
|
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:
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
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
|
||
|
|
|
||
|
|
1. **Electrodos/Parches DESA** (`checklist-electrodos-desa`)
|
||
|
|
- 8 pasos críticos
|
||
|
|
- Aplicable a RCP SVB y SVA
|
||
|
|
|
||
|
|
2. **Preparación Intubación** (`checklist-preparacion-intubacion`)
|
||
|
|
- 10 pasos organizados por categoría
|
||
|
|
- Material, Verificación, Fármacos, Monitorización, Posicionamiento
|
||
|
|
|
||
|
|
3. **RCP Checklist** (`checklist-rcp-adulto-svb`)
|
||
|
|
- 10 pasos esenciales
|
||
|
|
- Versión mejorada del checklist existente
|
||
|
|
|
||
|
|
### Protocolos de Ejemplo
|
||
|
|
|
||
|
|
1. **RCP Adulto SVB Extendido** (`rcp-adulto-svb-extended`)
|
||
|
|
- Checklist integrado
|
||
|
|
- Dosis inline (Adrenalina)
|
||
|
|
- Herramientas de contexto
|
||
|
|
- Fuentes clínicas (ERC 2021)
|
||
|
|
|
||
|
|
2. **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
|
||
|
|
|
||
|
|
1. **Editor** crea/edita contenido → Estado: `draft`
|
||
|
|
2. **Editor** envía para revisión → Estado: `in_review`
|
||
|
|
3. **Revisor** revisa y valida → Estado: `approved`
|
||
|
|
4. **Super Admin** publica → Estado: `published`
|
||
|
|
5. **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
|
||
|
|
|
||
|
|
1. ✅ Backend inicia correctamente
|
||
|
|
2. ✅ Login funciona con credenciales por defecto
|
||
|
|
3. ✅ Se puede crear contenido
|
||
|
|
4. ✅ Se puede editar contenido
|
||
|
|
5. ✅ Versionado funciona
|
||
|
|
6. ✅ Content pack se genera correctamente
|
||
|
|
7. ✅ App consume content pack offline
|
||
|
|
|
||
|
|
### Tests Automatizados (Pendiente)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 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
|
||
|
|
|
||
|
|
1. **NO modificar** `src/data/procedures.ts` ni `src/data/drugs.ts`
|
||
|
|
2. **Cambiar contraseña** del admin después del primer login
|
||
|
|
3. **Backup de base de datos** antes de migraciones importantes
|
||
|
|
4. **Validar contenido** antes de publicar
|
||
|
|
5. **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
|
||
|
|
|