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

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 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 MonitoreoCrear 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

# 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() 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

// 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