245 lines
6 KiB
Markdown
245 lines
6 KiB
Markdown
# ✅ 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!**
|
|
|