158 lines
4.2 KiB
Markdown
158 lines
4.2 KiB
Markdown
|
|
# ✅ CHECKLIST - Sistema de Validación y Roles
|
||
|
|
|
||
|
|
**Fecha:** 2025-01-06
|
||
|
|
**Estado:** ✅ Implementado
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ COMPONENTES IMPLEMENTADOS
|
||
|
|
|
||
|
|
### Backend
|
||
|
|
|
||
|
|
- [x] **Sistema de Roles Mejorado** (`backend/src/middleware/auth.js`)
|
||
|
|
- [x] 9 roles definidos
|
||
|
|
- [x] Permisos granulares por rol
|
||
|
|
- [x] Middleware `requirePermission`
|
||
|
|
|
||
|
|
- [x] **API de Validación** (`backend/src/routes/validation.js`)
|
||
|
|
- [x] `POST /api/validation/submit/:contentId` - Enviar a revisión
|
||
|
|
- [x] `POST /api/validation/approve/:contentId` - Aprobar
|
||
|
|
- [x] `POST /api/validation/reject/:contentId` - Rechazar
|
||
|
|
- [x] `POST /api/validation/publish/:contentId` - Publicar
|
||
|
|
- [x] `GET /api/validation/pending` - Listar pendientes
|
||
|
|
- [x] `GET /api/validation/history/:contentId` - Historial
|
||
|
|
|
||
|
|
- [x] **Registro en Audit Log**
|
||
|
|
- [x] Todas las acciones registradas
|
||
|
|
- [x] Metadata completa
|
||
|
|
- [x] Usuario y rol registrados
|
||
|
|
|
||
|
|
### Frontend
|
||
|
|
|
||
|
|
- [x] **Página de Validación** (`admin-panel/src/pages/ValidationPage.tsx`)
|
||
|
|
- [x] Listar contenido pendiente
|
||
|
|
- [x] Filtros por tipo y prioridad
|
||
|
|
- [x] Modal de validación
|
||
|
|
- [x] Aprobar con notas
|
||
|
|
- [x] Rechazar con notas obligatorias
|
||
|
|
- [x] Opción de publicar al aprobar
|
||
|
|
|
||
|
|
- [x] **Integración en Biblioteca** (`admin-panel/src/pages/ContentLibraryPage.tsx`)
|
||
|
|
- [x] Botón "Enviar a revisión"
|
||
|
|
- [x] Solo visible para contenido en `draft`
|
||
|
|
- [x] Requiere permiso `content:submit`
|
||
|
|
|
||
|
|
- [x] **Navegación**
|
||
|
|
- [x] Enlace "Validación" en sidebar
|
||
|
|
- [x] Icono ShieldCheck
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📋 FLUJO DE VALIDACIÓN
|
||
|
|
|
||
|
|
### Estados
|
||
|
|
|
||
|
|
- ✅ `draft` - Borrador (editable)
|
||
|
|
- ✅ `in_review` - En revisión (pendiente de validación)
|
||
|
|
- ✅ `approved` - Aprobado (listo para publicar)
|
||
|
|
- ✅ `published` - Publicado (visible en app)
|
||
|
|
- ✅ `archived` - Archivado (oculto)
|
||
|
|
|
||
|
|
### Transiciones
|
||
|
|
|
||
|
|
- ✅ `draft → in_review` - Enviar a revisión
|
||
|
|
- ✅ `in_review → approved` - Aprobar
|
||
|
|
- ✅ `in_review → published` - Aprobar y publicar
|
||
|
|
- ✅ `in_review → draft` - Rechazar
|
||
|
|
- ✅ `approved → published` - Publicar
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 👥 ROLES Y PERMISOS
|
||
|
|
|
||
|
|
### Roles Implementados
|
||
|
|
|
||
|
|
1. **super_admin** - `*` (todos los permisos)
|
||
|
|
2. **admin** - Gestión completa
|
||
|
|
3. **editor_clinico** - Protocolos, fármacos, checklists
|
||
|
|
4. **editor_formativo** - Guías y manual
|
||
|
|
5. **tes_validador** - Validar contenido
|
||
|
|
6. **formador** - Crear contenido formativo
|
||
|
|
7. **medico** - Validar y publicar
|
||
|
|
8. **revisor** - Revisar y aprobar
|
||
|
|
9. **viewer** - Solo lectura
|
||
|
|
|
||
|
|
### Permisos por Acción
|
||
|
|
|
||
|
|
- `content:read` - Ver 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
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🧪 TESTING
|
||
|
|
|
||
|
|
### Probar Envío a Revisión
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Ir a http://localhost:5174/content
|
||
|
|
# 2. Buscar contenido en estado "draft"
|
||
|
|
# 3. Click en icono "Enviar" (Send)
|
||
|
|
# 4. Confirmar
|
||
|
|
# 5. Verificar que cambia a "in_review"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Probar Validación
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Ir a http://localhost:5174/validation
|
||
|
|
# 2. Ver lista de contenido pendiente
|
||
|
|
# 3. Click en "Validar"
|
||
|
|
# 4. Aprobar o Rechazar
|
||
|
|
# 5. Añadir notas
|
||
|
|
# 6. Verificar cambio de estado
|
||
|
|
```
|
||
|
|
|
||
|
|
### Verificar API
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Listar pendientes
|
||
|
|
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'])")
|
||
|
|
|
||
|
|
curl -X GET "http://localhost:3000/api/validation/pending" \
|
||
|
|
-H "Authorization: Bearer $TOKEN"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ VERIFICACIÓN
|
||
|
|
|
||
|
|
### Checklist de Funcionalidades
|
||
|
|
|
||
|
|
- [x] Roles definidos correctamente
|
||
|
|
- [x] Permisos funcionando
|
||
|
|
- [x] Flujo de validación completo
|
||
|
|
- [x] API de validación funcionando
|
||
|
|
- [x] Página de validación accesible
|
||
|
|
- [x] Botón "Enviar a revisión" visible
|
||
|
|
- [x] Registro en audit log
|
||
|
|
- [x] Navegación actualizada
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**✅ Sistema de validación y roles implementado y funcionando!**
|
||
|
|
|