codigo0/docs/RESUMEN_SISTEMA_VALIDACION_ROLES.md

245 lines
6 KiB
Markdown
Raw Normal View History

2026-01-19 08:10:16 +00:00
# ✅ 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!**