5.8 KiB
Unificación de Criterios: Usuarios Recuperados
📋 Resumen del Cambio
Se han unificado los criterios de los 3 widgets relacionados con usuarios recuperados para que todos usen la misma fuente de datos y muestren información consistente.
🔧 Cambio Realizado
Campo Unificado:
is_recovered_user = true
Significado:
Usuarios que estuvieron inactivos por un período y luego regresaron a conectarse. Este campo es calculado por la vista materializada splash_wifi_connection_report.
📊 Widgets Afectados (Ahora Consistentes)
| # | Widget | Filtro Anterior | Filtro Nuevo | Estado |
|---|---|---|---|---|
| 1 | Usuarios Recuperados | loyalty_type = 'Recurrent' |
is_recovered_user = true |
✅ Actualizado |
| 2 | Top 5 Usuarios Recuperados | is_recovered_user = true |
is_recovered_user = true |
✅ Ya era correcto |
| 3 | Tasa de Recuperación | recovery_connection_date IS NOT NULL |
Usa is_recovered_user = true indirectamente |
✅ Ya era correcto |
📁 Archivos Modificados
1. Backend - Lógica de Negocio
src/SplashPage.Application/Splash/SplashMetricsService.cs
Líneas modificadas: 1469-1475 Cambio:
// ANTES
var currentRecovered = currentData.Items.Where(x => x.LoyaltyType == "Recurrent").ToList();
// DESPUÉS
var currentRecovered = currentData.Items.Where(x => x.IsRecoveredUser == true).ToList();
2. Backend - Interfaz del Servicio
src/SplashPage.Application/Splash/ISplashMetricsService.cs
Líneas modificadas: 93-100 Cambio: Actualizada documentación XML para clarificar el criterio.
3. Backend - DTO
src/SplashPage.Application/Splash/Dto/RecoveredUsersMetricsDto.cs
Líneas modificadas: 6-9 Cambio: Actualizada documentación de clase.
🎯 Beneficios de la Unificación
✅ 1. Consistencia de Datos
Los 3 widgets ahora muestran números basados en la misma fuente:
- Usuarios Recuperados: Contador total
- Top 5 Usuarios Recuperados: Top 5 con más conexiones
- Tasa de Recuperación: % de recuperación vs inactivos
✅ 2. Claridad de Negocio
Un solo concepto de "usuario recuperado" en toda la aplicación:
"Usuario que estuvo inactivo por un período y regresó a conectarse"
✅ 3. Facilidad de Mantenimiento
Un único punto de lógica de negocio para modificar si cambian los criterios.
✅ 4. Mejor Experiencia de Usuario
Los dashboards muestran información coherente, evitando confusión.
📈 Datos Esperados Después del Cambio
Escenario de Ejemplo:
Si en tu base de datos tienes:
- 100 registros con
loyalty_type = 'Recurrent' - 50 registros con
is_recovered_user = true
| Widget | Valor Antes | Valor Después |
|---|---|---|
| Usuarios Recuperados | 100 | 50 ✅ |
| Top 5 Usuarios Recuperados | 5 (de 50) | 5 (de 50) ✅ |
| Tasa de Recuperación | Basado en recovery logic | Basado en los mismos 50 ✅ |
🔍 Validación Recomendada
Paso 1: Ejecutar SQL de Análisis
SQL/analysis_recovered_users.sql
Este script muestra:
- Conteo por cada concepto
- Intersección de usuarios
- Recomendaciones
Paso 2: Compilar y Ejecutar
cd C:\Users\jandres\source\repos\SplashPage
dotnet build
dotnet run --project src/SplashPage.Web.Mvc
Paso 3: Verificar en Dashboard
- Abrir el dashboard
- Agregar los 3 widgets relacionados:
- Usuarios Recuperados
- Top 5 Usuarios Recuperados
- Tasa de Recuperación
- Verificar que los números sean consistentes:
- El total de "Usuarios Recuperados" debe coincidir con el denominador del Top 5
- La "Tasa de Recuperación" debe usar la misma base de usuarios
🧪 Casos de Prueba
Test 1: Números Consistentes
✅ Widget "Usuarios Recuperados" muestra: 45 usuarios
✅ Widget "Top 5" muestra 5 usuarios (de esos mismos 45)
✅ Widget "Tasa de Recuperación" calcula % sobre esos mismos 45
Test 2: Sin Datos
✅ Los 3 widgets muestran "Sin datos" cuando no hay usuarios con is_recovered_user = true
Test 3: Filtros de Fecha
✅ Al cambiar rango de fechas, los 3 widgets se actualizan coherentemente
📝 Notas Técnicas
Campo is_recovered_user
- Tipo: Boolean
- Calculado por: Vista materializada
splash_wifi_connection_report - Lógica: Usuario que estuvo inactivo (sin conexiones por X días) y luego regresó
- Relacionado con:
recovery_connection_date: Fecha en que regresódays_inactive: Días que estuvo sin conectarse antes de regresar
Diferencias con loyalty_type = 'Recurrent'
| Campo | Significado | Uso Recomendado |
|---|---|---|
loyalty_type = 'Recurrent' |
Usuario que se conecta regularmente (clasificación general) | Segmentación de marketing |
is_recovered_user = true |
Usuario que estuvo inactivo y regresó (evento específico) | Métricas de retención/recuperación |
🚀 Próximos Pasos
- ✅ Compilar proyecto para regenerar proxies ABP
- ✅ Ejecutar SQL de análisis para validar datos
- ✅ Probar en dashboard que los 3 widgets muestren números consistentes
- ✅ Actualizar changelog.MD con estos cambios
- ⏭️ Opcional: Agregar tests unitarios para validar el filtro
📞 Soporte
Si encuentras inconsistencias después de este cambio:
- Ejecuta
SQL/analysis_recovered_users.sqlpara debugging - Verifica que la vista materializada
splash_wifi_connection_reportesté actualizada - Revisa logs de aplicación para errores en los servicios de métricas
Fecha de Cambio: 2025-01-22 Autor: Claude Code Ticket/Issue: Unificación de criterios de usuarios recuperados