fastcheck/CHANGELOG_SEMANAL.md
2026-04-08 13:58:46 -04:00

414 lines
16 KiB
Markdown

# Changelog Semanal - Sistema de Activación de Usuarios y Tenants
## Fecha: 22 de Octubre de 2025
### Monitoreo RUT — Unificación de Consultas y Logs
- El modal “Crear Nuevo Monitoreo” ahora unifica RUTs de “Consultas” y `sheriff-logs`, eliminando duplicados.
- Búsqueda mejorada: por `rut`, razón social y texto en `duxiterMD` cuando existe.
- Encabezado fijo en el dropdown con contadores: `Total cargados` y `Filtrados`.
- Se mantiene la visualización de `rut`, empresa y “Última consulta”.
#### Cambios de código relevantes
- Frontend: `src/pages/MonitoringPage.tsx`
- Importado `getResults` desde `src/services/api.ts`.
- `fetchExistingRuts`: paginación de `sheriff-logs`, carga de “Consultas”, mapeo a estructura compatible, unión y deduplicación por RUT.
- `filteredRuts`: ampliada para coincidir por razón social y `duxiterMD`.
- Encabezado sticky con contadores en el dropdown de RUTs.
#### Notas técnicas
- Origen de datos:
- Logs: `/rut/sheriff-logs` (paginados).
- Consultas: `/rut/results` (global por tenant).
- Conversión de “Consultas”: se mapean campos a objetos compatibles con `SheriffDataLogResponse`; se descartan entradas sin `rut` válido.
- Extracción de razón social: desde `siiData.summaryData` o `details.razonSocial` cuando esté disponible.
- Deduplicación: por clave `rut`, priorizando el registro con `fetchedAt` más reciente.
#### Verificación
- Abrir `http://localhost:4032/` y navegar a `Monitoreo``Crear Nuevo Monitoreo`.
- Buscar por RUT o nombre de empresa proveniente de “Consultas” y confirmar el conteo en el encabezado del dropdown.
#### Impacto en UX
- Selección de RUTs más completa y rápida, con búsqueda flexible.
- Mayor claridad al mostrar el número de resultados cargados y filtrados.
---
## Fecha: 21 de Octubre de 2025
### Fast Check — Indicador de Progreso Mejorado
- Barra de progreso lineal con porcentaje animado que avanza por pasos.
- Etiquetas de pasos traducidas al español y visibles junto al porcentaje.
- Se eliminó el paso de IA del indicador (no se muestra ni afecta el %).
- Colores dinámicos: azul en curso (con pulso), verde al completar, rojo en error.
- Se mantienen los puntos de estado por paso debajo de la barra.
- El indicador también se muestra durante el estado “Cargando…”.
#### Flujo de pasos
- Inicio de evaluación → Solicitud de lookup RUT → Cargando resultados → Verificación de Listas Propias → Listo.
#### Cambios de código relevantes
- Frontend: `src/pages/FastCheck.tsx`
- `initialSteps`: traducción de etiquetas y eliminación de `ai`.
- `stepsOrder`: actualizado a `['start','lookup','fetch','listas','ready']`.
- Cálculo de porcentaje y helpers para color/animación y “paso actual”.
- Render del estado de carga: ahora muestra barra + puntos, no solo “Cargando…”.
- Instrumentación de pasos en `handleRefresh` y `fetchData`.
- Nota: la generación de análisis IA sigue disponible bajo demanda, pero fuera del indicador.
#### UX y textos
- Mensajes en español: “Cargando…”, “Evaluación en curso…”, nombres de pasos.
### Infraestructura/Git
- `.gitignore`: se agregó `server/equifax_responses/` para excluir respuestas de Equifax del control de versiones.
---
## Fecha: Enero 2025
### Resumen de Cambios Implementados
Esta semana se implementó un sistema completo de activación para usuarios y tenants en la plataforma Duxiter, mejorando la seguridad y el control administrativo.
---
## 🔐 Sistema de Activación de Usuarios
### 1. Modelo de Usuario Actualizado
- **Archivo modificado**: `server/src/models/user.model.ts`
- **Cambio**: Agregado campo `isActive` con valor por defecto `false`
- **Impacto**: Todos los nuevos usuarios requieren activación manual por el superadministrador
### 2. Controller de Registro Actualizado
- **Archivo modificado**: `server/src/controllers/auth.controller.ts`
- **Cambios**:
- Los nuevos usuarios se crean con `isActive: false`
- Mensaje de confirmación actualizado para informar sobre activación pendiente
- **Beneficio**: Control total sobre nuevos registros
### 3. Controller de Login Mejorado
- **Archivo modificado**: `server/src/controllers/auth.controller.ts`
- **Cambios**:
- Verificación de estado activo antes del login
- Mensaje de error específico para usuarios no activados
- Traducción del mensaje de activación pendiente al español
- **Mensaje implementado**: "Tu cuenta está pendiente de activación por parte del superadministrador. Contacta al administrador para completar la activación."
### 4. Frontend - Servicio de Autenticación
- **Archivo modificado**: `src/services/authService.ts`
- **Cambios**:
- Manejo específico de errores de activación pendiente
- Detección del estado `activationStatus: 'pending'`
### 5. Frontend - Página de Login
- **Archivo modificado**: `src/pages/auth/Login.tsx`
- **Cambios**:
- Nuevo estado `activationMessage` para mostrar mensajes de activación
- Interfaz visual para mostrar mensaje de activación pendiente
- Detección del mensaje en español
### 6. Panel de Administración - Gestión de Usuarios
- **Archivo modificado**: `src/pages/admin/UserManagement.tsx`
- **Funcionalidades agregadas**:
- Columna "Estado" en la tabla de usuarios
- Botones "Activar" y "Desactivar" para cada usuario
- Función `handleToggleUserStatus` para cambiar estado
- Indicadores visuales de estado (activo/inactivo)
---
## 🏢 Sistema de Activación de Tenants
### 1. Modelo de Tenant Actualizado
- **Archivo modificado**: `server/src/models/tenant.model.ts`
- **Cambio**: Agregado campo `isActive` con valor por defecto `false`
- **Impacto**: Todos los nuevos tenants requieren activación manual
### 2. Controller de Tenant Actualizado
- **Archivo modificado**: `server/src/controllers/tenant.controller.ts`
- **Cambios**:
- Endpoint PATCH `/api/tenants/:id/toggle-status` para activar/desactivar
- Función `toggleTenantStatus` implementada
- Validaciones de autorización para superadmin
### 3. Middleware de Autenticación Mejorado
- **Archivo modificado**: `server/src/middleware/auth.middleware.ts`
- **Cambios**:
- Verificación de tenant activo en cada request autenticado
- Bloqueo automático de usuarios con tenants inactivos
- Mensaje de error específico para tenants desactivados
### 4. Panel de Administración - Gestión de Tenants
- **Archivo modificado**: `src/pages/admin/TenantManagement.tsx`
- **Funcionalidades agregadas**:
- Columna "Estado" en la tabla de tenants
- Botones "Activar" y "Desactivar" para cada tenant
- Función `handleToggleTenantStatus` para cambiar estado
- Indicadores visuales de estado
---
## 🛠️ Correcciones Técnicas
### 1. Eliminación de Transacciones MongoDB
- **Archivos afectados**: Múltiples controllers
- **Problema resuelto**: Error `MongoServerError` por uso incorrecto de transacciones
- **Solución**: Removidas transacciones innecesarias en operaciones simples
### 2. Limpieza de Resultados Huérfanos
- **Problema**: Results pertenecientes a tenants eliminados causaban errores 404
- **Solución**: Implementada limpieza automática de datos huérfanos
- **Beneficio**: Mayor estabilidad del sistema
---
## 🌐 Mejoras de Internacionalización
### Traducción al Español
- **Mensajes de error**: Traducidos del italiano al español
- **Interfaz de usuario**: Mensajes de activación en español
- **Consistencia**: Toda la comunicación de errores unificada en español
---
## 📊 Impacto en la Seguridad
1. **Control de Acceso Mejorado**: Solo usuarios y tenants activados pueden acceder al sistema
2. **Gestión Centralizada**: El superadministrador tiene control total sobre activaciones
3. **Prevención de Accesos No Autorizados**: Bloqueo automático de cuentas no activadas
4. **Trazabilidad**: Logs detallados de intentos de login de usuarios no activados
---
## 🚀 Funcionalidades Implementadas
### Para Superadministradores:
- ✅ Activar/desactivar usuarios individualmente
- ✅ Activar/desactivar tenants completos
- ✅ Vista consolidada del estado de todos los usuarios y tenants
- ✅ Control granular sobre el acceso al sistema
### Para Usuarios:
- ✅ Mensajes claros sobre el estado de activación
- ✅ Interfaz informativa durante el proceso de login
- ✅ Comunicación en español para mejor comprensión
---
## 📝 Archivos Modificados
### Backend:
- `server/src/models/user.model.ts`
- `server/src/models/tenant.model.ts`
- `server/src/controllers/auth.controller.ts`
- `server/src/controllers/tenant.controller.ts`
- `server/src/middleware/auth.middleware.ts`
### Frontend:
- `src/services/authService.ts`
- `src/pages/auth/Login.tsx`
- `src/pages/admin/UserManagement.tsx`
- `src/pages/admin/TenantManagement.tsx`
---
## 🔧 Configuración y Despliegue del Sistema Multi-Tenant
### Fecha: 7 de Septiembre de 2025
### Configuración Completa del Entorno
#### 1. Servidor Backend Configurado
- **Puerto**: 4040
- **Estado**: ✅ Operativo y funcional
- **Base de datos**: MongoDB conectada exitosamente
- **Documentación API**: Disponible en http://localhost:4040/api/docs
#### 2. Creación de Usuarios Administrativos
- **Superadministrador**:
- Email: `superadmin@gmail.com`
- Contraseña: `SuperAdmin3465#`
- Estado: ✅ Creado y verificado
- **Administrador de Tenant**:
- Email: `tenantadmin@test.com`
- Contraseña: `password123`
- Estado: ✅ Creado y verificado
#### 3. Gestión de Tenants
- **Tenant de Prueba Creado**:
- ID: `68bd9178eabb7855861b2983`
- Nombre: "Test Tenant"
- Estado: ✅ Activado exitosamente
- Configuración: Créditos iniciales (100), estadísticas de uso configuradas
#### 4. Servidor Frontend Configurado
- **Puerto**: 4031 (puerto 4030 ocupado, redirigido automáticamente)
- **Tecnología**: Vite + React
- **Estado**: ✅ Operativo y accesible
- **URL**: http://localhost:4031/
- **Verificación**: Sin errores en el navegador
### Resolución de Problemas Técnicos
#### 1. Conflicto de Puertos
- **Problema**: Puerto 4040 ocupado por proceso anterior
- **Solución**: Terminación forzada del proceso con `lsof -ti:4040 | xargs kill -9`
- **Resultado**: ✅ Servidor reiniciado exitosamente
#### 2. Autenticación de Superadministrador
- **Problema**: Credenciales inválidas en primer intento
- **Causa**: Usuario superadmin no existía en la base de datos
- **Solución**: Ejecución del script `create-superadmin.ts`
- **Resultado**: ✅ Superadmin creado y autenticación exitosa
#### 3. Gestión de Tenants
- **Problema**: "Tenant not found" en operaciones iniciales
- **Causa**: No existían tenants en la base de datos
- **Solución**: Creación de tenant de prueba vía API POST
- **Resultado**: ✅ Tenant creado y activado correctamente
### Funcionalidades Verificadas
#### Sistema de Autenticación Multi-Rol
- ✅ Superuser: Control total del sistema
- ✅ Tenant Admin: Gestión de tenant específico
- ✅ Evaluator: Acceso a funcionalidades de evaluación
#### API RESTful Completa
- ✅ Endpoints de autenticación (`/api/auth/login`)
- ✅ Gestión de usuarios (`/api/users`)
- ✅ Gestión de tenants (`/api/tenant`)
- ✅ Activación/desactivación de tenants (`/api/tenant/:id/superadmin-toggle-status`)
#### Interfaz Frontend
- ✅ Aplicación React moderna y responsiva
- ✅ Integración completa con backend
- ✅ Manejo de estados de autenticación
- ✅ Navegación basada en roles
### Comandos de Despliegue Utilizados
```bash
# Backend
cd /root/duxiter/server
npm run dev # Puerto 4040
# Frontend
cd /root/duxiter
npm run dev # Puerto 4031
# Creación de superadmin
cd server && npx tsx src/scripts/create-superadmin.ts
# Resolución de conflictos de puerto
lsof -ti:4040 | xargs kill -9
```
### APIs de Prueba Ejecutadas
```bash
# Login de superadmin
curl -X POST http://localhost:4040/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"superadmin@gmail.com","password":"SuperAdmin3465#"}'
# Creación de tenant
curl -X POST http://localhost:4040/api/tenant \
-H "Authorization: Bearer [TOKEN]" \
-H "Content-Type: application/json" \
-d '{"name":"Test Tenant","settings":{},"usageStats":{"evaluationsRemaining":100,"evaluationsUsed":0}}'
# Activación de tenant
curl -X PATCH http://localhost:4040/api/tenant/68bd9178eabb7855861b2983/superadmin-toggle-status \
-H "Authorization: Bearer [SUPERADMIN_TOKEN]"
```
---
## ✅ Estado del Proyecto
Todas las funcionalidades han sido implementadas y probadas exitosamente. El sistema de activación está completamente operativo y listo para producción.
**Sistema Multi-Tenant Completamente Configurado:**
- ✅ Backend operativo en puerto 4040
- ✅ Frontend operativo en puerto 4031
- ✅ Base de datos MongoDB conectada
- ✅ Usuarios administrativos creados
- ✅ Tenant de prueba activado
- ✅ APIs funcionando correctamente
- ✅ Interfaz web accesible y funcional
**Próximos pasos sugeridos:**
- Implementar notificaciones por email para activaciones
- Agregar logs de auditoría para cambios de estado
- Considerar activación automática basada en criterios específicos
- Configurar entorno de producción con Docker
- Implementar monitoreo y métricas del sistema
---
## 🔄 Sistema de Reciclaje de Consultas
### Fecha: Enero 2025
### Problema Identificado
- **Error**: `TypeError: Cannot read properties of undefined (reading 'getResultByRut')`
- **Ubicación**: `server/src/controllers/rutController.ts:1021`
- **Causa**: Llamada incorrecta a método estático usando `this.getResultByRut()`
### Solución Implementada
#### 1. Corrección de Llamada a Método Estático
- **Archivo modificado**: `server/src/controllers/rutController.ts`
- **Línea 1021**: Cambiado `this.getResultByRut()` por `RutController.getResultByRut()`
- **Razón**: Los métodos estáticos deben ser llamados usando el nombre de la clase, no `this`
#### 2. Corrección de Parámetros
- **Problema**: Paso incorrecto de parámetros en la llamada recursiva
- **Solución**:
- Eliminado objeto falso `{ params: { rut: rut } }`
- Implementado `req.params.rut = rut` antes de la llamada
- Uso del objeto `req` original en la llamada recursiva
#### 3. Anotación de Tipo de Retorno
- **Línea 982**: Agregado `Promise<Response>` como tipo de retorno
- **Propósito**: Resolver error de TypeScript sobre tipo de retorno implícito
- **Beneficio**: Eliminar referencia circular en el análisis de tipos
### Funcionalidad del Sistema de Reciclaje
El sistema permite reutilizar resultados de consultas entre diferentes tenants:
1. **Búsqueda Inicial**: Se busca un resultado por RUT sin filtrar por tenant
2. **Verificación de Tenant**: Si el resultado pertenece a otro tenant
3. **Reciclaje**: Se crea una copia del resultado para el tenant actual
4. **Llamada Recursiva**: Se vuelve a llamar al método para obtener el nuevo resultado
### Código Corregido
```typescript
// Antes (incorrecto)
return this.getResultByRut({ params: { rut: rut } }, res);
// Después (correcto)
req.params.rut = rut;
return RutController.getResultByRut(req, res);
```
### Beneficios de la Corrección
-**Eliminación del Error**: Ya no se produce el TypeError
-**Funcionalidad Restaurada**: El reciclaje de consultas funciona correctamente
-**Optimización de Recursos**: Reutilización eficiente de resultados existentes
-**Compatibilidad TypeScript**: Código completamente tipado y sin errores
### Archivos Modificados
- `server/src/controllers/rutController.ts`
- Línea 982: Agregada anotación de tipo de retorno
- Líneas 1020-1022: Corregida llamada recursiva al método estático
### Impacto en el Sistema
- **Estabilidad**: Eliminación de crashes del servidor
- **Eficiencia**: Mejor reutilización de datos entre tenants
- **Mantenibilidad**: Código más claro y correctamente tipado