414 lines
16 KiB
Markdown
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 |