Saltar al contenido principal

Notas de versión — 7 de marzo de 2026

Esta versión ofrece una renovación completa del módulo de Informes y análisis: formatos de exportación a Excel y XML, retención del historial de informes, rediseño de tarjetas de estadísticas, mejoras del diseño de PDF y múltiples correcciones de UX.


Informes y análisis — Actualización principal

Exportación a Excel (PRO+)

Ahora los informes se pueden exportar a Excel (.xlsx) usando un libro de trabajo de dos hojas con formato profesional.

Estructura del libro de trabajo:

  • Hoja Resumen — metadatos del informe, métricas clave, contexto de filtros
  • Hoja Datos — columnas dinámicas (facturable, ingresos si aplica), tabla con estilo, encabezado fijo, filtro automático, colores de filas alternantes

Disponible desde:

  • Página de Informes → Menú de exportación → Descargar Excel
  • Informe guardado → Vista previa del informe → Botón Excel
  • Informes programados → Selección de formato → Excel

Nivel: PRO+ (los usuarios del nivel FREE ven un chip PRO — Excel no disponible)


Exportación a XML (ENTERPRISE)

Los datos de seguimiento de tiempo ahora se pueden exportar como documentos XML estructurados.

Estructura del documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<report>
<meta>...</meta>
<filters>...</filters>
<metrics>...</metrics>
<dataPoints>
<entry>...</entry>
</dataPoints>
</report>

Nivel: Solo ENTERPRISE (FREE/PRO ven un chip ENTERPRISE)


Exportación a archivo JSON (ENTERPRISE)

Además de la respuesta JSON en línea de la API existente, los informes ahora se pueden descargar como archivo JSON independiente (.json) con Content-Disposition: attachment.

Nivel: Solo ENTERPRISE


Retención del historial de informes

Los informes guardados ahora se filtran según el nivel de suscripción:

NivelHistorial visible
FREEÚltimos 30 días
PROÚltimos 365 días
ENTERPRISEIlimitado

Un banner informativo en la página de Informes notifica a los usuarios FREE y PRO de su ventana de historial, con un aviso de actualización para los usuarios FREE.

Un trabajo de limpieza nocturno (se ejecuta a las 02:00) elimina automáticamente los informes más antiguos que el límite del nivel para mantener la base de datos limpia.


Agrupar por: Usuario (PRO+)

Ahora hay una nueva opción de agrupación "Por usuario" disponible en la página de Informes. Sustituye al antiguo selector reportType (resumen / detallado / exportar), que era redundante.

La opción de agrupación Usuario está desactivada con un chip PRO para los usuarios FREE.

Los 5 idiomas (EN / HU / DE / FR / ES) incluyen la nueva clave de traducción.


Tarjetas de estadísticas y Perspectivas rápidas — Corrección de visibilidad

Las 4 tarjetas de estadísticas (Total de horas, Total de entradas, Proyectos activos, Promedio por día) y la sección de Perspectivas rápidas no aparecían al cargar la página de Informes.

Causa raíz: currentUnit?.id no estaba en el array de dependencias de useEffect. Al montar, currentUnit era null, lo que hacía que la generación del informe se cortara antes de que cargara el espacio de trabajo.

Corregido en: AdvancedReports.tsx y BasicReports.tsx


Vista previa del informe — Diseño renovado

La página de Vista previa del informe ahora coincide con el diseño de la página principal de Informes:

  • 4 tarjetas de estadísticas — Total de horas / Total de entradas / Proyectos activos / Promedio por día
  • Perspectivas rápidas — Top 3 proyectos · Día más activo · Horas pico · Duración media de entrada
  • A continuación: Información del informe → Gráfico → Tabla de datos

Tanto las estadísticas como las perspectivas se calculan con useMemo para mayor rendimiento.


Exportación a PDF — Diseño renovado

La salida PDF ahora coincide con el diseño de informes del frontend:

addMetrics() — reescrito:

  • 4 tarjetas de estadísticas con color y barra de acento en el lado izquierdo
  • Tamaño compacto: boxH = 52 (antes 72), fontSize = 18 (antes 22), espaciado ajustado

addQuickInsights() — nueva sección:

  • Top 3 proyectos + Día más activo + Horas pico + Duración media de entrada
  • Posicionamiento absoluto X/Y por elemento — elimina errores de desbordamiento de texto
  • Truncado de etiqueta a 17 caracteres

Corrección de gráfico:

  • Los informes guardados con chartType = 'table' anteriormente no producían gráfico en el PDF
  • Ahora recurre a gráfico de bar; el gráfico se omite solo cuando no hay datos

Guardar como informe — Tipo de gráfico correcto

Al guardar un informe ad hoc como informe personalizado, el campo chartConfig.type ahora refleja correctamente la vista actualmente activa:

  • Vista de gráfico activa → guarda como BAR
  • Vista de tabla activa → guarda como TABLE

Anteriormente, siempre se codificaba TABLE independientemente de la vista.


Tarjeta de estadísticas — Diseño compacto

Las tarjetas de estadísticas tanto en la página de Informes como en la Vista previa del informe ahora son más compactas:

PropiedadAntesDespués
Relleno de tarjetapredeterminado (16 px)py: 1.5
Caja de icono48 × 4840 × 40
Variante de númeroh4h5
Altura de líneapredeterminado1.2 (número + etiquetas)

Notificación "Ejecutar ahora" — Movida a la esquina superior derecha

La notificación "Informe ejecutado y enviado a N destinatario(s)" aparecía anteriormente en la parte inferior central de la pantalla (inconsistente con el resto de notificaciones).

Ahora usa la utilidad global notification y aparece en la esquina superior derecha, coherente con todas las demás notificaciones en la aplicación.


Seguridad y control de nivel

Informes programados — Control de backend

Los endpoints createReport y updateReport ahora aplican la verificación de nivel para schedule.enabled a nivel de API:

  • Los usuarios FREE no pueden activar la programación mediante la API (antes solo estaba bloqueada en la IU)
  • Devuelve 403 TIER_RESTRICTION con tierRequired: 'pro'

Corrección de la capacidad customReports para PRO

customReports estaba incorrectamente establecido en false en la configuración del nivel PRO en stripe.config.ts. Se ha corregido a true (PRO: máximo 5 informes personalizados, ENTERPRISE: ilimitado).


Dependencias

PaqueteCambio
exceljsAñadido (generación de Excel)

Archivos modificados

ArchivoCambio
cadensa-backend/src/controllers/report.controller.tsEndpoints de descarga de Excel / JSON / XML; control de nivel para informes programados; filtro de corte del historial de informes
cadensa-backend/src/services/report/excel.service.tsNuevo — Generación de Excel con exceljs
cadensa-backend/src/services/report/xml.service.tsNuevo — Generación de XML
cadensa-backend/src/services/report/pdf.service.tsReescritura de addMetrics(); nueva sección addQuickInsights(); recurso a gráfico de barras en addChartPlaceholder()
cadensa-backend/src/services/report/schedule.service.tsRama de formato Excel; cron de limpieza nocturna del historial
cadensa-backend/src/config/stripe.config.tsCorrección de PRO customReports: false → true
cadensa-frontend/src/pages/reports/components/AdvancedReports.tsxCorrección de dependencia currentUnit?.id; banner de historial; groupBy: user; tarjeta compacta; tipo de gráfico basado en viewMode; notification.* para "Ejecutar ahora"
cadensa-frontend/src/pages/reports/components/BasicReports.tsxCorrección de dependencia currentUnit?.id
cadensa-frontend/src/pages/reports/ReportPreview.tsxDiseño renovado: tarjetas de estadísticas + Perspectivas rápidas; botones PDF/Excel/XML/JSON
cadensa-frontend/src/services/report.service.tsdownloadReportExcel, downloadReportJSON, downloadAdHocReportJSON, downloadReportXML, downloadAdHocReportXML
cadensa-frontend/src/locales/{en,hu,de,fr,es}/reports.jsonClaves xml, xmlFailed, jsonRequiresEnterprise, xmlRequiresEnterprise, groupBy_user