codigo0/docs/ADMIN_PANEL_IMPLEMENTACION.md

317 lines
8 KiB
Markdown
Raw Normal View History

2026-01-19 08:10:16 +00:00
# 🎛️ 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