# ✅ RESUMEN - Sistema de Validación y Roles **Fecha:** 2025-01-06 **Estado:** ✅ Implementado --- ## 🎯 FUNCIONALIDADES IMPLEMENTADAS ### 1. Sistema de Roles Mejorado ✅ **Archivo:** `backend/src/middleware/auth.js` **Roles disponibles:** - ✅ `super_admin` - Todos los permisos (*) - ✅ `admin` - Gestión completa - ✅ `editor_clinico` - Editar protocolos, fármacos, checklists - ✅ `editor_formativo` - Editar guías y manual - ✅ `tes_validador` - Validar contenido - ✅ `formador` - Crear contenido formativo - ✅ `medico` - Validar y publicar - ✅ `revisor` - Revisar y aprobar - ✅ `viewer` - Solo lectura **Permisos por rol:** - `content:read` - Leer contenido - `content:write` - Escribir cualquier contenido - `content:write:protocol` - Escribir protocolos - `content:write:guide` - Escribir guías - `content:write:drug` - Escribir fármacos - `content:write:checklist` - Escribir checklists - `content:write:manual` - Escribir manual - `content:submit` - Enviar a revisión - `content:validate` - Validar contenido - `content:approve` - Aprobar contenido - `content:publish` - Publicar contenido - `audit:read` - Leer auditoría - `audit:write` - Escribir auditoría --- ### 2. Flujo de Validación ✅ **Estados:** ``` draft → in_review → approved → published ↓ draft (rechazado) ``` **Transiciones:** - ✅ `draft → in_review` - Enviar a revisión (requiere `content:submit`) - ✅ `in_review → approved` - Aprobar (requiere `content:approve`) - ✅ `in_review → draft` - Rechazar (requiere `content:approve`) - ✅ `approved → published` - Publicar (requiere `content:publish`) - ✅ `in_review → published` - Aprobar y publicar directamente (requiere `content:approve` + `content:publish`) --- ### 3. API de Validación ✅ **Archivo:** `backend/src/routes/validation.js` **Endpoints:** - ✅ `POST /api/validation/submit/:contentId` - Enviar a revisión - ✅ `POST /api/validation/approve/:contentId` - Aprobar - ✅ `POST /api/validation/reject/:contentId` - Rechazar - ✅ `POST /api/validation/publish/:contentId` - Publicar - ✅ `GET /api/validation/pending` - Listar pendientes - ✅ `GET /api/validation/history/:contentId` - Historial de validación **Características:** - ✅ Validación de permisos - ✅ Validación de estados - ✅ Registro en audit log - ✅ Notas opcionales/obligatorias según acción --- ### 4. Página de Validación ✅ **Archivo:** `admin-panel/src/pages/ValidationPage.tsx` **Funcionalidades:** - ✅ Listar contenido pendiente de validación - ✅ Filtros por tipo y prioridad - ✅ Modal de validación con notas - ✅ Aprobar con opción de publicar - ✅ Rechazar con notas obligatorias - ✅ Ver historial de validación - ✅ Enlaces a edición --- ### 5. Integración en Biblioteca ✅ **Archivo:** `admin-panel/src/pages/ContentLibraryPage.tsx` **Mejoras:** - ✅ Botón "Enviar a revisión" para contenido en `draft` - ✅ Solo visible si tiene permiso `content:submit` - ✅ Feedback visual durante envío --- ## 📋 FLUJO COMPLETO ### Editor → Revisión → Publicación 1. **Editor crea contenido:** - Estado inicial: `draft` - Puede editar libremente 2. **Editor envía a revisión:** - Click en "Enviar a revisión" - Estado: `draft → in_review` - Requiere permiso `content:submit` 3. **Validador revisa:** - Ve contenido en página de Validación - Puede aprobar o rechazar - Requiere permiso `content:approve` 4. **Aprobación:** - Opción 1: Aprobar → `approved` - Opción 2: Aprobar y publicar → `published` (si tiene `content:publish`) 5. **Rechazo:** - Rechazar → `draft` - Notas obligatorias - Editor puede corregir y reenviar 6. **Publicación:** - Si está `approved`, puede publicarse - Requiere permiso `content:publish` --- ## 🔧 CONFIGURACIÓN ### Crear Usuarios con Roles ```sql -- Crear validador TES INSERT INTO tes_content.users (email, username, password_hash, role) VALUES ( 'validador@emerges-tes.local', 'validador_tes', '$2b$10$...', -- hash de contraseña 'tes_validador' ); -- Crear médico INSERT INTO tes_content.users (email, username, password_hash, role) VALUES ( 'medico@emerges-tes.local', 'medico', '$2b$10$...', 'medico' ); ``` --- ## 🚀 USO ### Enviar Contenido a Revisión 1. Ir a Biblioteca de Contenido 2. Buscar contenido en estado `draft` 3. Click en icono "Enviar" (si tienes permiso) 4. Confirmar envío ### Validar Contenido 1. Ir a `/validation` 2. Ver lista de contenido pendiente 3. Click en "Validar" en un item 4. Revisar contenido 5. Aprobar o Rechazar 6. Añadir notas si es necesario --- ## 📊 ESTADO ACTUAL ### Funcionalidades - ✅ Sistema de roles completo - ✅ Permisos granulares - ✅ Flujo de validación completo - ✅ API de validación - ✅ Página de validación - ✅ Integración en biblioteca - ✅ Registro en audit log ### Próximos Pasos (Opcional) 1. **Notificaciones:** - Email cuando contenido está pendiente - Notificaciones en panel 2. **Dashboard de validación:** - Estadísticas de validación - Tiempo promedio de validación - Contenido más rechazado 3. **Validación por secciones:** - Aprobar secciones individuales - Comentarios por sección --- ## ✅ VERIFICACIÓN ### Probar Validación ```bash # 1. Crear contenido en draft # 2. Enviar a revisión desde biblioteca # 3. Ir a /validation # 4. Aprobar o rechazar ``` ### Verificar Permisos ```bash # Verificar que el usuario tiene permisos TOKEN=$(curl -s -X POST http://localhost:3000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"admin@emerges-tes.local","password":"Admin123!"}' \ | python3 -c "import sys, json; print(json.load(sys.stdin)['token'])") # Intentar validar (debe funcionar si tiene permisos) curl -X POST "http://localhost:3000/api/validation/approve/{contentId}" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"notes": "Aprobado"}' ``` --- **✅ Sistema de validación y roles implementado y funcionando!**