nutriflow-es · sesión QA · 2026-06-15 · 09:14–11:03 CEST

Dogfood QA — NutriFlow v2.0

app.nutriflow.es
Duración: 1h 49min
Alcance: App completa · v2.0.1-rc3
Tester: QA · CULTIVA IA
2
Critical
2
High
2
Medium
2
Low
Severidad
8 issues · 6 capturas · 3 vídeos de repro · Cobertura: 5 módulos

Índice de hallazgos

Hallazgos 8 issues
ISSUE-001
Exportación PDF genera archivo completamente vacío
Critical functional data loss
URLapp.nutriflow.es/pacientes/84/informe
Repro Videovideos/issue-001-repro.webm
NavegadorChrome 125.0.6422 / Safari 17.4
Reproducible100% — 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
  1. Navegar a app.nutriflow.es/pacientes y abrir cualquier ficha de paciente.
  2. Clic en la pestaña "Informe" en la barra superior de la ficha.
  3. Clic en el botón "Exportar PDF" (esquina superior derecha).
  4. Observar: aparece el spinner durante ~3 segundos, luego la descarga inicia y el archivo resultante tiene 0 bytes.
  5. 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)
Evidencia — estado roto
app.nutriflow.es/pacientes/84/informe
Carlos Martínez — Informe nutricional
Generado: 15 Jun 2026
500: Report generation failed
📄
informe-paciente.pdf (0 bytes)

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
Critical functional UX
URLapp.nutriflow.es/pacientes/84/plan/editar
Repro Videovideos/issue-002-repro.webm
NavegadorChrome 125 (reproducible); Safari 17.4 (no reproducible)
Reproducible100% 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
  1. Navegar al editor de plan: app.nutriflow.es/pacientes/84/plan/editar.
  2. En el panel izquierdo, localizar cualquier alimento (ej. "Avena integral 80g").
  3. Arrastrar la tarjeta al slot "Desayuno" del panel derecho.
  4. Soltar la tarjeta en el slot.
  5. 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
High functional validación
URLapp.nutriflow.es/pacientes/nuevo
Repro Videovideos/issue-003-repro.webm
NavegadorChrome 125, Firefox 126, Safari 17.4
Reproducible100% 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
  1. Ir a "Nuevo paciente" en el menú lateral.
  2. Rellenar todos los campos. En el campo Email, escribir carlos@ (sin dominio).
  3. Clic en "Guardar paciente".
  4. 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
High UX performance
URLapp.nutriflow.es/pacientes/84/metricas
Repro VideoN/A — issue visible en carga
Tiempo de carga4.8s promedio en red 4G simulada
ReproducibleSiempre 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
  1. Desde el listado de pacientes, hacer clic en un paciente con historial de métricas.
  2. Ir a la pestaña "Métricas".
  3. 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
Medium visual content
URLapp.nutriflow.es/pacientes
Repro VideoN/A
ReproducibleCon 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"
Medium console functional
URLapp.nutriflow.es/pacientes/84/objetivos
Repro VideoN/A
Reproducible100% 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)
Low visual
URLapp.nutriflow.es/pacientes
Repro VideoN/A
ReproducibleVisible 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
Low content i18n
URLapp.nutriflow.es/pacientes
Repro VideoN/A
ReproducibleSiempre 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.