16 KiB
16 KiB
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 enduxiterMDcuando existe. - Encabezado fijo en el dropdown con contadores:
Total cargadosyFiltrados. - Se mantiene la visualización de
rut, empresa y “Última consulta”.
Cambios de código relevantes
- Frontend:
src/pages/MonitoringPage.tsx- Importado
getResultsdesdesrc/services/api.ts. fetchExistingRuts: paginación desheriff-logs, carga de “Consultas”, mapeo a estructura compatible, unión y deduplicación por RUT.filteredRuts: ampliada para coincidir por razón social yduxiterMD.- Encabezado sticky con contadores en el dropdown de RUTs.
- Importado
Notas técnicas
- Origen de datos:
- Logs:
/rut/sheriff-logs(paginados). - Consultas:
/rut/results(global por tenant).
- Logs:
- Conversión de “Consultas”: se mapean campos a objetos compatibles con
SheriffDataLogResponse; se descartan entradas sinrutválido. - Extracción de razón social: desde
siiData.summaryDataodetails.razonSocialcuando esté disponible. - Deduplicación: por clave
rut, priorizando el registro confetchedAtmás reciente.
Verificación
- Abrir
http://localhost:4032/y navegar aMonitoreo→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.tsxinitialSteps: traducción de etiquetas y eliminación deai.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
handleRefreshyfetchData.
- 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
isActivecon valor por defectofalse - 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
- Los nuevos usuarios se crean con
- 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
activationMessagepara mostrar mensajes de activación - Interfaz visual para mostrar mensaje de activación pendiente
- Detección del mensaje en español
- Nuevo estado
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
handleToggleUserStatuspara 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
isActivecon valor por defectofalse - 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-statuspara activar/desactivar - Función
toggleTenantStatusimplementada - Validaciones de autorización para superadmin
- Endpoint PATCH
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
handleToggleTenantStatuspara cambiar estado - Indicadores visuales de estado
🛠️ Correcciones Técnicas
1. Eliminación de Transacciones MongoDB
- Archivos afectados: Múltiples controllers
- Problema resuelto: Error
MongoServerErrorpor 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
- Control de Acceso Mejorado: Solo usuarios y tenants activados pueden acceder al sistema
- Gestión Centralizada: El superadministrador tiene control total sobre activaciones
- Prevención de Accesos No Autorizados: Bloqueo automático de cuentas no activadas
- 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.tsserver/src/models/tenant.model.tsserver/src/controllers/auth.controller.tsserver/src/controllers/tenant.controller.tsserver/src/middleware/auth.middleware.ts
Frontend:
src/services/authService.tssrc/pages/auth/Login.tsxsrc/pages/admin/UserManagement.tsxsrc/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
- Email:
- Administrador de Tenant:
- Email:
tenantadmin@test.com - Contraseña:
password123 - Estado: ✅ Creado y verificado
- Email:
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
- ID:
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
# 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
# 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()porRutController.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 = rutantes de la llamada - Uso del objeto
reqoriginal en la llamada recursiva
- Eliminado objeto falso
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:
- Búsqueda Inicial: Se busca un resultado por RUT sin filtrar por tenant
- Verificación de Tenant: Si el resultado pertenece a otro tenant
- Reciclaje: Se crea una copia del resultado para el tenant actual
- Llamada Recursiva: Se vuelve a llamar al método para obtener el nuevo resultado
Código Corregido
// 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