Files
Temp_MSSPLASHPage/UNIFICACION_USUARIOS_RECUPERADOS.md
2025-10-22 08:05:42 -06:00

189 lines
5.8 KiB
Markdown

# 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:**
```sql
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:**
```csharp
// 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**
```bash
SQL/analysis_recovered_users.sql
```
Este script muestra:
- Conteo por cada concepto
- Intersección de usuarios
- Recomendaciones
### **Paso 2: Compilar y Ejecutar**
```bash
cd C:\Users\jandres\source\repos\SplashPage
dotnet build
dotnet run --project src/SplashPage.Web.Mvc
```
### **Paso 3: Verificar en Dashboard**
1. Abrir el dashboard
2. Agregar los 3 widgets relacionados:
- Usuarios Recuperados
- Top 5 Usuarios Recuperados
- Tasa de Recuperación
3. 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
1.**Compilar proyecto** para regenerar proxies ABP
2.**Ejecutar SQL de análisis** para validar datos
3.**Probar en dashboard** que los 3 widgets muestren números consistentes
4.**Actualizar changelog.MD** con estos cambios
5. ⏭️ **Opcional:** Agregar tests unitarios para validar el filtro
---
## 📞 Soporte
Si encuentras inconsistencias después de este cambio:
1. Ejecuta `SQL/analysis_recovered_users.sql` para debugging
2. Verifica que la vista materializada `splash_wifi_connection_report` esté actualizada
3. 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