Files
BeyondCXAnalytics-Demo/frontend/CHANGELOG_v2.3.md
2026-02-04 11:08:21 +01:00

13 KiB

CHANGELOG v2.3 - Rediseño Completo de Interfaz de Entrada de Datos

Fecha: 27 Noviembre 2025
Versión: 2.3.0
Objetivo: Crear una interfaz de entrada de datos organizada, clara y profesional


🎯 OBJETIVO

Rediseñar completamente la interfaz de entrada de datos para:

  1. Separar claramente datos manuales vs. datos CSV
  2. Mostrar información de tipo, ejemplo y obligatoriedad de cada campo
  3. Proporcionar descarga de plantilla CSV
  4. Ofrecer 3 opciones de carga de datos
  5. Mejorar la experiencia de usuario (UX)

NUEVA ESTRUCTURA

Sección 1: Datos Manuales 📝

Campos de configuración que el usuario introduce manualmente:

1.1. Coste por Hora Agente (Fully Loaded)

  • Tipo: Número (decimal)
  • Ejemplo: 20
  • Obligatorio:
  • Formato: €/hora
  • Descripción: Incluye salario, cargas sociales, infraestructura, etc.
  • UI: Input numérico con símbolo € a la izquierda y unidad a la derecha
  • Indicador: Badge rojo "Obligatorio" con icono de alerta

1.2. CSAT Promedio

  • Tipo: Número (0-100)
  • Ejemplo: 85
  • Obligatorio: No (Opcional)
  • Formato: Puntuación de 0 a 100
  • Descripción: Puntuación promedio de satisfacción del cliente
  • UI: Input numérico con indicador "/ 100" a la derecha
  • Indicador: Badge verde "Opcional" con icono de check

1.3. Segmentación de Clientes por Cola/Skill

  • Tipo: String (separado por comas)
  • Ejemplo: VIP, Premium, Enterprise
  • Obligatorio: No (Opcional)
  • Formato: Lista separada por comas
  • Descripción: Identifica qué colas corresponden a cada segmento
  • UI: 3 inputs de texto (High, Medium, Low)
  • Indicador: Badge verde "Opcional" con icono de check

Layout: Grid de 2 columnas (Coste + CSAT), luego 3 columnas para segmentación


Sección 2: Datos CSV 📊

Datos que el usuario exporta desde su ACD/CTI:

2.1. Tabla de Campos Requeridos

Tabla completa con 10 campos:

Campo Tipo Ejemplo Obligatorio
interaction_id String único call_8842910
datetime_start DateTime 2024-10-01 09:15:22
queue_skill String Soporte_Nivel1, Ventas
channel String Voice, Chat, WhatsApp
duration_talk Segundos 345
hold_time Segundos 45
wrap_up_time Segundos 30
agent_id String Agente_045
transfer_flag Boolean TRUE / FALSE
caller_id String (hash) Hash_99283 No

Características de la tabla:

  • Filas alternadas (blanco/gris claro) para mejor legibilidad
  • Columna de obligatoriedad con badges visuales (rojo/verde)
  • Fuente monoespaciada para nombres de campos y ejemplos
  • Responsive (scroll horizontal en móvil)

2.2. Descarga de Plantilla CSV

Botón prominente para descargar plantilla con estructura exacta:

interaction_id,datetime_start,queue_skill,channel,duration_talk,hold_time,wrap_up_time,agent_id,transfer_flag,caller_id
call_8842910,2024-10-01 09:15:22,Soporte_Nivel1,Voice,345,45,30,Agente_045,TRUE,Hash_99283

Funcionalidad:

  • Genera CSV con headers + fila de ejemplo
  • Descarga automática al hacer click
  • Nombre de archivo: plantilla_beyond_diagnostic.csv
  • Toast de confirmación: "Plantilla CSV descargada 📥"

2.3. Opciones de Carga de Datos

3 métodos para proporcionar datos (radio buttons):

Opción 1: Subir Archivo CSV/Excel 📤
  • UI: Área de drag & drop con borde punteado
  • Formatos aceptados: .csv, .xlsx, .xls
  • Funcionalidad:
    • Arrastra y suelta archivo
    • O click para abrir selector de archivos
    • Muestra nombre y tamaño del archivo cargado
    • Botón X para eliminar archivo
  • Validación: Solo acepta formatos CSV/Excel
  • Toast: "Archivo 'nombre.csv' cargado 📄"
Opción 2: Conectar Google Sheets 🔗
  • UI: Input de URL + botón de conexión
  • Placeholder: https://docs.google.com/spreadsheets/d/...
  • Funcionalidad:
    • Introduce URL de Google Sheets
    • Click en botón de conexión (icono ExternalLink)
    • Valida que URL no esté vacía
  • Toast: "URL de Google Sheets conectada 🔗"
Opción 3: Generar Datos Sintéticos (Demo)
  • UI: Botón con gradiente morado-rosa
  • Funcionalidad:
    • Genera datos de prueba para demo
    • Animación de loading (1.5s)
    • Cambia estado a "datos sintéticos generados"
  • Toast: "Datos sintéticos generados para demo "

Sección 3: Botón de Análisis 🚀

Botón grande y prominente al final:

  • Texto: "Generar Análisis"
  • Icono: FileText
  • Estado Habilitado:
    • Gradiente azul
    • Hover: escala 105%
    • Sombra
  • Estado Deshabilitado:
    • Gris
    • Cursor not-allowed
    • Requiere: costPerHour > 0 Y uploadMethod !== null
  • Estado Loading:
    • Spinner animado
    • Texto: "Analizando..."

🎨 DISEÑO VISUAL

Colores

  • Primary: #6D84E3 (azul)
  • Obligatorio: Rojo (bg-red-100 text-red-700)
  • Opcional: Verde (bg-green-100 text-green-700)
  • Borde activo: border-[#6D84E3] bg-blue-50
  • Borde inactivo: border-slate-300

Tipografía

  • Títulos: text-2xl font-bold
  • Labels: text-sm font-semibold
  • Campos: Fuente monoespaciada para nombres técnicos
  • Ejemplos: font-mono text-xs en badges de código

Espaciado

  • Secciones: space-y-8 (32px entre secciones)
  • Campos: gap-6 (24px entre campos)
  • Padding: p-8 (32px dentro de tarjetas)

Animaciones

  • Entrada: initial={{ opacity: 0, y: 20 }} con delays escalonados
  • Hover: scale-105 en botón de análisis
  • Drag & Drop: Cambio de color de borde al arrastrar

📁 ARCHIVOS CREADOS/MODIFICADOS

Nuevos Archivos:

  1. components/DataInputRedesigned.tsx (NUEVO - 665 líneas)

    • Componente principal de entrada de datos
    • Gestión de estados para todos los campos
    • Lógica de validación y carga de datos
    • Descarga de plantilla CSV
    • 3 opciones de carga con radio buttons
  2. components/SinglePageDataRequestV2.tsx (NUEVO - 100 líneas)

    • Versión simplificada del componente principal
    • Integra DataInputRedesigned
    • Gestión de navegación form ↔ dashboard
    • Generación de análisis

Archivos Modificados:

  1. App.tsx
    • Actualizado para usar SinglePageDataRequestV2
    • Mantiene compatibilidad con versión anterior

Archivos Mantenidos:

  1. components/SinglePageDataRequest.tsx
    • Mantenido como backup
    • No se elimina para rollback si es necesario

🔄 COMPARACIÓN: ANTES vs. AHORA

Interfaz Anterior (v2.2):

┌─────────────────────────────────────┐
│ Tier Selector                       │
├─────────────────────────────────────┤
│ Caja de Requisitos (expandible)    │
│ - Muestra todos los campos          │
│ - No distingue manual vs. CSV       │
│ - No hay tabla clara                │
├─────────────────────────────────────┤
│ Configuración Estática              │
│ - Coste por Hora                    │
│ - Savings Target (eliminado)        │
│ - CSAT                              │
│ - Segmentación (selector único)     │
├─────────────────────────────────────┤
│ Sección de Upload                   │
│ - Tabs: File | URL | Synthetic     │
│ - No hay plantilla CSV              │
├─────────────────────────────────────┤
│ Botón de Análisis                   │
└─────────────────────────────────────┘

Problemas:

  • Mezcla datos manuales con requisitos CSV
  • No hay tabla clara de campos
  • No hay descarga de plantilla
  • Tabs en lugar de radio buttons
  • No hay indicadores de obligatoriedad
  • Segmentación como selector único (no por colas)

Interfaz Nueva (v2.3):

┌─────────────────────────────────────┐
│ Header + Tier Selector              │
├─────────────────────────────────────┤
│ 1. DATOS MANUALES                   │
│    ┌─────────────┬─────────────┐   │
│    │ Coste/Hora  │ CSAT        │   │
│    │ [Obligat.]  │ [Opcional]  │   │
│    └─────────────┴─────────────┘   │
│    ┌─────────────────────────────┐ │
│    │ Segmentación por Colas      │ │
│    │ [High] [Medium] [Low]       │ │
│    └─────────────────────────────┘ │
├─────────────────────────────────────┤
│ 2. DATOS CSV                        │
│    ┌─────────────────────────────┐ │
│    │ TABLA DE CAMPOS REQUERIDOS  │ │
│    │ Campo | Tipo | Ej | Oblig.  │ │
│    │ ...   | ...  | .. | [✓/✗]   │ │
│    └─────────────────────────────┘ │
│    [Descargar Plantilla CSV]        │
│    ┌─────────────────────────────┐ │
│    │ ○ Subir Archivo             │ │
│    │ ○ URL Google Sheets         │ │
│    │ ○ Datos Sintéticos          │ │
│    └─────────────────────────────┘ │
├─────────────────────────────────────┤
│        [Generar Análisis]           │
└─────────────────────────────────────┘

Mejoras:

  • Separación clara: Manual vs. CSV
  • Tabla completa de campos
  • Descarga de plantilla CSV
  • Radio buttons (más claro que tabs)
  • Indicadores visuales de obligatoriedad
  • Segmentación por colas (3 inputs)
  • Información de tipo y ejemplo en cada campo

🎯 BENEFICIOS

Para el Usuario:

  1. Claridad: Sabe exactamente qué datos necesita proporcionar
  2. Guía: Información de tipo, ejemplo y obligatoriedad en cada campo
  3. Facilidad: Descarga plantilla CSV con estructura correcta
  4. Flexibilidad: 3 opciones de carga según su caso de uso
  5. Validación: No puede analizar sin datos completos

Para el Desarrollo:

  1. Modularidad: Componente DataInputRedesigned reutilizable
  2. Mantenibilidad: Código limpio y organizado
  3. Escalabilidad: Fácil añadir nuevos campos o métodos de carga
  4. Backup: Versión anterior mantenida para rollback

🚀 PRÓXIMOS PASOS

Fase 1 (Inmediato):

  1. Testing de interfaz con usuarios reales
  2. Validación de descarga de plantilla CSV
  3. Testing de carga de archivos

Fase 2 (Corto Plazo):

  1. Parser de CSV Real: Leer y validar CSV subido
  2. Validación de Campos: Verificar que CSV tiene campos correctos
  3. Preview de Datos: Mostrar primeras filas del CSV cargado
  4. Mapeo de Columnas: Permitir mapear columnas si nombres no coinciden

Fase 3 (Medio Plazo):

  1. Conexión Real con Google Sheets: API de Google Sheets
  2. Validación de Período: Verificar que hay mínimo 3 meses de datos
  3. Estadísticas de Carga: Mostrar resumen de datos cargados
  4. Guardado de Configuración: LocalStorage para reutilizar configuración

📊 MÉTRICAS DE ÉXITO

UX:

  • Tiempo de comprensión: < 30 segundos
  • Tasa de error en carga: < 5%
  • Satisfacción de usuario: > 8/10

Técnicas:

  • Compilación: Sin errores
  • Bundle size: 839.71 KB (reducción de 7 KB vs. v2.2)
  • Build time: 7.02s

TESTING

Compilación:

  • TypeScript: Sin errores
  • Build: Exitoso (7.02s)
  • Bundle size: 839.71 KB (gzip: 249.09 KB)

Funcionalidad:

  • Inputs de datos manuales funcionan
  • Descarga de plantilla CSV funciona
  • Radio buttons de selección de método funcionan
  • Drag & drop de archivos funciona
  • Validación de botón de análisis funciona

Pendiente:

  • Testing con usuarios reales
  • Parser de CSV real
  • Conexión con Google Sheets API
  • Validación de período de datos

Fin del Changelog v2.3