Exportación PDF genera archivo completamente vacío
Criticalfunctionaldata loss
URL
app.nutriflow.es/pacientes/84/informe
Repro Video
videos/issue-001-repro.webm
Navegador
Chrome 125.0.6422 / Safari 17.4
Reproducible
100% — 5/5 intentos fallidos
Descripción
Al hacer clic en "Exportar informe PDF" en la ficha de cualquier paciente, el sistema lanza la descarga de un archivo informe-paciente.pdf de 0 bytes. Al abrirlo, Adobe/Preview muestra "El documento no contiene páginas". El error se repite en todos los pacientes probados. La funcionalidad estaba operativa en v1.9.4 (confirmado en staging). La consola registra un error 500 en la llamada al endpoint de generación.
Pasos de reproducción
Navegar a app.nutriflow.es/pacientes y abrir cualquier ficha de paciente.
Clic en la pestaña "Informe" en la barra superior de la ficha.
Clic en el botón "Exportar PDF" (esquina superior derecha).
Observar: aparece el spinner durante ~3 segundos, luego la descarga inicia y el archivo resultante tiene 0 bytes.
Observar en consola:POST /api/v2/reports/generate → 500 Internal Server Error.
Salida de consola
✗ POST https://app.nutriflow.es/api/v2/reports/generate 500 (Internal Server Error)✗ Uncaught (in promise) Error: Report generation failed: puppeteer: ERR_NO_BROWSER_CONTEXT⚠ [NutriFlow] PDF renderer not initialized. Check PUPPETEER_EXECUTABLE_PATH env var.ℹ [Auth] Session valid. User: qa-tester@cultivaia.com (premium)
El documento no contiene páginas. El servidor no pudo generar el PDF.
Impacto directo en el cliente: los nutricionistas no pueden entregar informes a sus pacientes. Funcionalidad nuclear de NutriFlow Premium. Bloquea el caso de uso más vendido en el plan de precios.
ISSUE-002
Drag & drop en editor de plan alimentario bloquea la UI permanentemente
CriticalfunctionalUX
URL
app.nutriflow.es/pacientes/84/plan/editar
Repro Video
videos/issue-002-repro.webm
Navegador
Chrome 125 (reproducible); Safari 17.4 (no reproducible)
Reproducible
100% en Chrome — arrastrar cualquier alimento a cualquier slot
Descripción
Al arrastrar una tarjeta de alimento desde el panel izquierdo y soltarla en un slot de comida (Desayuno, Almuerzo, etc.), la tarjeta queda "flotando" en la posición del drop. La UI queda bloqueada: ningún botón responde, no se puede hacer scroll ni clic en nada. El único remedio es recargar la página, perdiendo todos los cambios no guardados. El error está relacionado con el event listener de dragend que no se dispara cuando el drop es fuera del DOM target.
Pasos de reproducción
Navegar al editor de plan: app.nutriflow.es/pacientes/84/plan/editar.
En el panel izquierdo, localizar cualquier alimento (ej. "Avena integral 80g").
Arrastrar la tarjeta al slot "Desayuno" del panel derecho.
Soltar la tarjeta en el slot.
Observar: la tarjeta queda superpuesta visualmente sobre el slot. La UI deja de responder a clics, scroll o teclado. El spinner de carga aparece y no desaparece.
Evidencia — estado bloqueado
app.nutriflow.es/pacientes/84/plan/editar
Biblioteca de alimentos
🌾 Avena integral 80g
🥚 Huevo cocido x2
🍌 Plátano grande
🫒 Aceite oliva 10ml
Plan semanal
🌅 Desayuno
🌾 Avena integral 80g
STUCK
☀️ Almuerzo
Arrastra alimentos aquí
UI bloqueada — recarga necesaria
Este bug fue identificado por el CEO como la regresión más crítica de v2.0. El editor de planes es el feature core del producto.
ISSUE-003
Formulario de nuevo paciente acepta email con formato inválido
Highfunctionalvalidación
URL
app.nutriflow.es/pacientes/nuevo
Repro Video
videos/issue-003-repro.webm
Navegador
Chrome 125, Firefox 126, Safari 17.4
Reproducible
100% con cualquier string sin dominio válido
Descripción
El campo de email del formulario de creación de paciente acepta valores como usuario@, @dominio.com o sindominio y permite completar el registro sin error. Posteriormente, el sistema intenta enviar el email de bienvenida y falla silenciosamente (no notifica al nutricionista). El paciente queda en la base de datos con email inválido, bloqueando el envío de informes por email.
Pasos de reproducción
Ir a "Nuevo paciente" en el menú lateral.
Rellenar todos los campos. En el campo Email, escribir carlos@ (sin dominio).
Clic en "Guardar paciente".
Observar: el formulario se envía sin mostrar error de validación. El paciente aparece creado en el listado con email carlos@.
Evidencia — formulario con input inválido aceptado
app.nutriflow.es/pacientes/nuevo
Nuevo paciente
Nombre completo
Email de contacto
Fecha de nacimiento
✓ Guardado correctamente
⚠ Email inválido aceptado sin validación — email de bienvenida fallará silenciosamente
ISSUE-004
Dashboard de métricas muestra pantalla en blanco sin indicador de carga
HighUXperformance
URL
app.nutriflow.es/pacientes/84/metricas
Repro Video
N/A — issue visible en carga
Tiempo de carga
4.8s promedio en red 4G simulada
Reproducible
Siempre en primera visita (sin caché)
Descripción
Al navegar al módulo de métricas de un paciente, la página permanece en blanco durante ~4–5 segundos mientras se carga el chart de evolución de peso/IMC. No hay skeleton loader, spinner ni ningún feedback visual. El usuario no sabe si la app ha fallado o está cargando. En v1.x existía un skeleton UI. Fue eliminado en el rediseño de v2.0 sin reemplazarlo.
Pasos de reproducción
Desde el listado de pacientes, hacer clic en un paciente con historial de métricas.
Ir a la pestaña "Métricas".
Observar: pantalla completamente en blanco durante 4–5 segundos sin feedback. El usuario no tiene certeza de que algo está cargando.
app.nutriflow.es/pacientes/84/metricas
— pantalla en blanco —
No hay spinner, skeleton ni mensaje de carga visible
⏱ 4.8s sin feedback visual alguno
ISSUE-005
Nombre largo del paciente se trunca sin tooltip en las tarjetas del listado
Mediumvisualcontent
URL
app.nutriflow.es/pacientes
Repro Video
N/A
Reproducible
Con cualquier nombre > 22 caracteres
Descripción
En el listado de pacientes, los nombres que superan ~22 caracteres se truncan con "..." sin ofrecer ningún tooltip que muestre el nombre completo. Afecta especialmente a pacientes con dos apellidos. No impide trabajar con el paciente, pero sí puede generar confusión entre pacientes con nombres similares.
app.nutriflow.es/pacientes
Carlos Martínez Ló...
ID #84 · Activo
María José Fernández...
ID #91 · Activo
Ana García-Ruiz Per...
ID #76 · Inactivo
⚠ Ninguna tarjeta muestra tooltip al pasar el cursor — nombre completo inaccesible sin abrir la ficha
ISSUE-006
Errores JS en consola al abrir modal de "Añadir objetivo"
Mediumconsolefunctional
URL
app.nutriflow.es/pacientes/84/objetivos
Repro Video
N/A
Reproducible
100% al abrir el modal
Descripción
Al hacer clic en "Añadir objetivo" en la ficha del paciente, el modal se abre correctamente y la funcionalidad no está bloqueada. Sin embargo, la consola del navegador registra 3 errores JS relacionados con propiedades undefined en el componente de selector de fecha. Estos errores apuntan a una deuda técnica que podría manifestarse como bug con ciertos valores de fecha en producción.
✗ TypeError: Cannot read properties of undefined (reading 'toLocaleDateString') at DatePicker.render (DatePicker.jsx:142:28) at ObjetivosModal.open (ObjetivosModal.jsx:87:12)⚠ Warning: Each child in a list should have a unique "key" prop. Check the render method of `GoalList`.⚠ [React] componentWillReceiveProps has been renamed, use componentDidUpdate instead.ℹ [NutriFlow] Modal opened: objetivos · user: qa-tester@cultivaia.com
ISSUE-007
Badge de estado "Activo" muestra color incorrecto (gris en vez de verde)
Lowvisual
URL
app.nutriflow.es/pacientes
Repro Video
N/A
Reproducible
Visible en todos los pacientes con estado "Activo"
Descripción
En el listado de pacientes y en las fichas individuales, el badge de estado "Activo" se muestra en gris (#8b949e) en lugar del verde semántico esperado (#3fb950). El badge de "Inactivo" sí muestra el color correcto (rojo/naranja). El CSS de la clase .badge-activo fue sobrescrito en el merge del rediseño.
app.nutriflow.es/pacientes
Estado actual (incorrecto)
● Activo
→
Esperado (correcto)
● Activo
Inactivo (correcto)
● Inactivo
ISSUE-008
Texto placeholder de búsqueda dice "Search patients..." en inglés
Lowcontenti18n
URL
app.nutriflow.es/pacientes
Repro Video
N/A
Reproducible
Siempre visible, campo de búsqueda del listado
Descripción
El campo de búsqueda en el listado de pacientes muestra el placeholder "Search patients..." en inglés. El resto de la app está completamente en español. Esta cadena quedó sin traducir en el refactor de v2.0. La corrección es trivial (1 línea en el archivo de i18n).
app.nutriflow.es/pacientes
⚠ Esperado: "Buscar pacientes..." — cadena no traducida en es.json
Resumen ejecutivo
Hallazgos por módulo
Editor de planes1 critical
Exportación PDF1 critical
Gestión de pacientes2 high · 1 medium
Dashboard métricas1 high
UI global1 medium · 2 low
Priorización para hotfix
ISSUE-001: PDF export → Sprint hotfix 1
ISSUE-002: D&D editor → Sprint hotfix 1
ISSUE-003: Email validation → Sprint 2
ISSUE-004: Loading state → Sprint 2
ISSUES 005–008 → Backlog polish
Conclusión: NutriFlow v2.0 presenta 2 regresiones críticas que bloquean las funcionalidades de mayor valor para los usuarios premium: la exportación de informes PDF y el editor de planes con drag & drop. Ambas estaban operativas en v1.9.4. Se recomienda no promover v2.0 a producción general hasta resolver ISSUE-001 e ISSUE-002. El resto de hallazgos son manejables en sprints posteriores y no impiden el uso básico del producto.