ROIBOTICLectura funcional

Estado funcional · Corte documental

Funciones de la plataforma
GR Wellness

Recorrido del paciente y del equipo, organizado por áreas. Consulta qué tiene verificación registrada y qué requiere revisión.

Preparado paraGerardo Reyna · Equipo GR
Corte del inventario23 de septiembre de 2026
Funciones de uso138 de 146 funciones recopiladas
Filtrar funciones146 funciones
Pruebas del equipo2,662 definiciones · 438 archivos

Inventario del código local, sin ejecutar pruebas. Una definición parametrizada puede generar varios casos; no equivale a pruebas aprobadas.

TipoArchivosDefiniciones
Unitarias / componentes3582132
Integración34406
E2E44122
Preparación de pruebas11
Arnés de recorridos11

128 definiciones parametrizadas · 135 dinámicas. Categorías que pueden solaparse. La clasificación refleja el directorio y el arnés.

Abrir catálogo completo: nombres, tipo y ubicación

Recorridos declarados: 7 recorridos dorados · 8 tours. Son contratos de navegación; no resultados de ejecución.

Vinculadas a los flujos

334 pruebas vinculadas136 archivos48 casos QAUnitarias / componentes 212E2E 41Integración 81

Conteos deduplicados. No sumar áreas ni flujos. 0 referencias por precisar quedan fuera del conteo de pruebas vinculadas.

Recorrido de validación

  1. Acceso y roles → Comercial → Paciente → Nutrición → Fitness → AAR → cruces entre áreas.
  2. Elegir un comportamiento, caso QA, rol, vista y resultado esperado.
  3. Leer la prueba existente y comprobar que puede detectar el defecto.
  4. En una frontera acordada: prueba roja → corrección mínima → prueba verde, un caso a la vez.
  5. Registrar corrida y versión; dar check sólo al comportamiento comprobado. Revisar e integrar después.
  6. Cerrar el recorrido antes de abordar CI/CD y la reorganización.

Tickets y pruebas

113 tickets sin resolver en soporte: 18 vinculados a casos y 95 sin vínculo explícito. El registro QA conserva 219 incidencias; hay 12 enlaces explícitos entre fuentes. No se suman ni se cierran automáticamente.

Incidencia pendiente indica un ticket por atender. Fallo confirmado requiere reproducir el defecto. Por probar indica evidencia insuficiente. Se mantienen los checks ya documentados.

Revisión de calidad por muestras: 12 hallazgos registrados. Este catálogo no certifica todas las pruebas. Fuente: docs/qa/test-inventory.json y docs/qa/function-test-map.json.

11 funciones revisadas en este corte. La marca verde resume la revisión registrada. El rojo muestra un pendiente documentado y el ícono de prueba una función por probar.

ROIBOTIC · GR WellnessLectura funcional

Área 01

Comercial

13funciones

Captar · Dar seguimiento · Convertir · Renovar

Contexto de prueba8 roles · 5 vistas
Roles
PúblicoAdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudo
Vistas
Pruebas del área
29 pruebas vinculadas15 archivos4 casos QAUnitarias / componentes 28E2E 1

Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.

Captar y registrar

003
Pruebas del flujo
13 pruebas vinculadas7 archivos2 casos QAUnitarias / componentes 13

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Recibir contactos desde el sitioSitio web → ContactosFuncionalPor definirPor definirCOM-01

Qué permite hacerConectar el formulario del sitio con el Kanban de GR y conservar origen e interés.

Alcance
Solicitado
Registro de origen
Por definir
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La conexión es intención declarada; no se comprobó en esta extracción.

Ubicación y referencia técnica

Sitio → Pacientes / Kanban

Recibir contactos desde el sitio

  • definicion.jsonGR-P5, GR-F8
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/captacion/server.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 2 definiciones en el archivo

La consolidación conserva datos ya existentes del contacto al recibir captación.

  • completa únicamente campos vacíos del paciente existenteL6
tests/unit/lib/captacion/lead-notification.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

La notificación abre el Kanban en la etapa que registró la captación.

  • abre el Kanban filtrado en la etapa registradaL6

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
  • BotónQuiero más información/c/[tenantSlug] · requiere tenant
  • BotónQuiero pagar/c/[tenantSlug] · requiere tenant
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Capturar el interés y orientar al contactoFormulario de contactoFuncionalPor comprobarPor probarCOM-02

Qué permite hacerRecoger nombre, correo, teléfono y plan de interés; ofrecer información o continuar a contratación.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Captación /c/[tenantSlug]

Capturar el interés y orientar al contacto

  • features.jsonCAP-001
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 5

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/captacion/public-entry.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 3 definiciones en el archivo

Resuelve el recorrido público entre cuestionario, video/PDF y formulario.

  • abre el cuestionario cuando el sitio pide saltar planesL8
  • conserva la vista de video y PDF si no hay parámetroL12
  • cae al formulario cuando no hay video seguroL17
tests/unit/lib/captacion/public-plan-catalog.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 7 definiciones en el archivo

Expone el plan comercial y el interés remitido al flujo público.

  • expone sólo los campos comerciales de un plan activoL10
  • la ayuda general incluye los datos del formulario y el plan de interésL109

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
  • BotónQuiero más información/c/[tenantSlug] · requiere tenant
  • BotónQuiero pagar/c/[tenantSlug] · requiere tenant
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Configurar formulario y materiales de captaciónConfiguración → CaptaciónFuncionalPor comprobarPor probarCOM-04

Qué permite hacerElegir campos visibles u obligatorios, video y PDFs de planes y preparación.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Configuración → Captación

Configurar formulario y materiales de captación

  • views.jsonstaff-payments-billing / Materiales
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/captacion/pdf-assets.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 3 definiciones en el archivo

Cubre rutas estables y validación de PDFs administrados por tenant.

  • genera rutas públicas estables por tenant y tipoL11
  • acepta únicamente la firma binaria PDFL20
  • solo considera administrables rutas del tenant autenticadoL25
tests/unit/lib/captacion/config.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Cubre normalización de página de preview; no los campos del formulario.

  • conserva enteros válidos y acota valores fuera de rangoL17

Incidencias relacionadas por caso: 0 en soporte · 8 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminAsistenteRecepcionista
Vistas y controles
  • VistaPagos, planes y suscripciones/configuracion?tab=captacion/c/[tenantSlug] · requiere tenantAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/checkoutAPI /api/public/supplements/*gr-site-platform:/planes/checkoutgr-site-platform:/catalogo/checkout
Casos
public-golden-journey-capture-payments-supplements · Sitio consolida paciente, cobra planes y descuenta suplementos una sola vez
publicoadminasistenterecepcionista
Pasos
  1. En Configuración > Captación, recorrer con teclado Publicación, Formulario y Materiales a 375, 768, 1024 y 1440 px; confirmar que la liga de publicación es de solo lectura, usa localhost sólo en local y usa el dominio canónico en producción y previews.
  2. En Materiales, subir PDFs de planes y guía, abrirlos, copiar sus ligas estables, reemplazarlos y confirmar que las mismas ligas sirven la versión nueva; quitar cada archivo y confirmar estado no disponible. Repetir con otro tenant, un archivo no PDF, uno corrupto y uno sobredimensionado para comprobar rechazo sin alterar la versión vigente.
  3. En Configuración > Captación, elegir una página para la miniatura del PDF de planes; abrir el enlace público y confirmar que muestra esa hoja seguida por un adelanto de las siguientes, sin controles del visor, que en escritorio queda al lado del video con Continuar al cuestionario y Abrir PDF visibles, y que Abrir PDF despliega todas las páginas en un popup propio sin abrir otra pestaña. Al continuar, el cuestionario no debe repetir la miniatura: sólo debe mostrar el botón Ver PDF de planes, que abre el mismo popup; volver a los planes no debe perder los datos capturados.
Esperado
  • Captación separa publicación, formulario y materiales con controles accesibles y acciones de al menos 44 px. Las ligas visibles no son editables; los PDFs se administran por tenant desde Firebase y sus ligas estables siguen apuntando a la versión vigente o quedan no disponibles al retirar el archivo. El formulario público funciona igual con o sin sesión iniciada; cuando hay un PDF de planes configurado, la introducción muestra una tira compacta desde la página seleccionada por el equipo, sin controles del visor y al lado del video en escritorio. Abrir PDF permanece visible y despliega todas las páginas en un popup propio sin abrir otra pestaña. El cuestionario no repite la vista previa y ofrece únicamente Ver PDF de planes con acceso al mismo popup, sin ocultar campos ni CTA principales. Una configuración antigua o sin página elegida inicia en la página 1. Guarda teléfono con LADA y formato legible, ciudad y país separados en captura pero compatibles con el CRM, y una fuente de contacto normalizada. Tras Quiero pagar, la misma liga presenta el catálogo activo del workspace agrupado en tarjetas, permite elegir plazo, modalidad y forma de pago, calcula y cobra 5% menos sólo en pago completo y crea Stripe Checkout con los datos ya capturados. VIP no crea cobro: abre una consulta con variante, origen y respuestas completas. Un lead nuevo genera una alerta dentro de la plataforma y otra por correo para los administradores; ambas abren el Kanban filtrado en su etapa y sección, y repetir el correo no duplica paciente ni alertas ya enviadas. Stripe es la única autoridad de pago, las parcialidades siguen las citas y Odoo descuenta exactamente una vez después del cobro.

Fuente: test-cases.json · testCases[id=public-golden-journey-capture-payments-supplements]

Cobertura: Referencias parciales

Dar seguimiento comercial

006
Pruebas del flujo
10 pruebas vinculadas6 archivos2 casos QAUnitarias / componentes 9E2E 1

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Consultar y filtrar el embudoContactos y seguimiento comercialFuncionalPor comprobarPor probarCOM-05

Qué permite hacerVer contactos en Kanban, lista o tarjetas y filtrar por etapa, plan, prioridad, etiquetas y responsable.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pacientes /pacientes

Consultar y filtrar el embudo

  • views.jsonpatients-crm
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 1E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/comercial/pipeline-rollout.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 3 definiciones en el archivo

Cubre las columnas canónicas del embudo; no los filtros visuales solicitados.

  • activa exactamente el embudo canónico comercial en HIXIONL21
e2e/staging/comercial-seguimiento-qa.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Busca la ficha propia en CRM dentro del recorrido aislado.

  • QA comercial: alta, ficha, edición, etapa y archivar/restaurar con paciente propioL30

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudo
Vistas y controles
  • VistaPacientes CRM y operación comercial/dashboard/pacientes/chatAPI /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
  • VentanaFiltrar pacientes/pacientes
Casos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
adminnutriologoespecialistaasistenterecepcionistacomercialrol-personalizado-con-ver_pipeline
Pasos
  1. Crear pacientes QA que representen captado, contactado, plan elegido, checkout, pago confirmado sin cita, cita agendada y atención activa; confirmar que embudo, cobro, contrato y acceso se muestran como ejes distintos.
  2. Abrir el drawer en escritorio y móvil; comprobar resumen operativo, siguiente acción, cronología, plan/cobro, agenda y datos del prospecto sin duplicar controles ni mezclar datos clínicos.
  3. Mover manualmente un lead desde Kanban y otro desde Chat con motivo; recargar las tres superficies y confirmar un mismo estado y un evento con anterior/nuevo, actor, motivo, origen, revisión y operationId.
Esperado
  • CRM mantiene cuatro ejes autoritativos y una sola transición transaccional para drawer, Kanban, Chat y automatizaciones. Cada movimiento manual o automático es idempotente, tenant-safe y reconstruible desde su evento. La cola Pago confirmado · falta agendar permanece visible y todas las colas llevan a una siguiente acción concreta. El rol comercial ve exclusivamente una proyección comercial sanitizada.

Fuente: test-cases.json · testCases[id=staff-commercial-canonical-state-audit-queues]

Automatización
  • e2e/staging/roles-matrix-pipeline-projection.spec.ts · Proyección comercial por matriz

Cobertura: Referencias vinculadas

Actualizar ficha y acuerdo del contactoFicha del contactoFuncionalPor comprobarPor probarCOM-06

Qué permite hacerEditar datos de contacto, interés, etiquetas y nota del acuerdo sin exponer información clínica.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

CRM → Detalle del lead

Actualizar ficha y acuerdo comercial

  • views.jsonpatients-crm / Editar lead
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/comercial-seguimiento-qa.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

Edita el campo CRM y espera que el registro persistido lo refleje.

  • QA comercial: alta, ficha, edición, etapa y archivar/restaurar con paciente propioL30
tests/unit/components/paciente-crm-drawer-archive.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 5 definiciones en el archivo

El drawer conserva campos CRM y separa edición de datos del cambio de etapa.

  • usa campos CRM de catálogo y no mueve etapa al guardar el restoL45

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudo
Vistas y controles
  • VistaPacientes CRM y operación comercial/dashboard/pacientes/chatAPI /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
  • PanelGestión CRM del contacto/pacientes
  • BotónEditar lead/pacientes
Casos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
adminnutriologoespecialistaasistenterecepcionistacomercialrol-personalizado-con-ver_pipeline
Pasos
  1. Crear pacientes QA que representen captado, contactado, plan elegido, checkout, pago confirmado sin cita, cita agendada y atención activa; confirmar que embudo, cobro, contrato y acceso se muestran como ejes distintos.
  2. Abrir el drawer en escritorio y móvil; comprobar resumen operativo, siguiente acción, cronología, plan/cobro, agenda y datos del prospecto sin duplicar controles ni mezclar datos clínicos.
  3. Mover manualmente un lead desde Kanban y otro desde Chat con motivo; recargar las tres superficies y confirmar un mismo estado y un evento con anterior/nuevo, actor, motivo, origen, revisión y operationId.
Esperado
  • CRM mantiene cuatro ejes autoritativos y una sola transición transaccional para drawer, Kanban, Chat y automatizaciones. Cada movimiento manual o automático es idempotente, tenant-safe y reconstruible desde su evento. La cola Pago confirmado · falta agendar permanece visible y todas las colas llevan a una siguiente acción concreta. El rol comercial ve exclusivamente una proyección comercial sanitizada.

Fuente: test-cases.json · testCases[id=staff-commercial-canonical-state-audit-queues]

Cobertura: Referencias parciales

Cambiar etapa con historialSeguimiento comercial y conversaciónFuncionalPor comprobarPor probarCOM-07

Qué permite hacerRegistrar cada transición, responsable y motivo; controlar las correcciones de etapas anteriores.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Kanban, detalle y chat

Cambiar etapa con historial

  • views.jsonpatients-crm / transiciones
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 5

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/comercial/state-machine.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 6 definiciones en el archivo

La máquina controla transición, corrección, correlación y auditoría.

  • avanza varios ejes de forma atómica y revisionadaL8
  • impide retrocesos salvo corrección explícitaL18
  • exige correlación de cita para cita agendadaL24
tests/unit/app/api/commercial-transition-route.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 4 definiciones en el archivo

La ruta exige permiso para mover el pipeline y separa permisos financieros.

  • gestionar_pipeline autoriza sólo orígenes interactivosL74
  • separa acceso de permisos financierosL99

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudo
Vistas y controles
  • VistaPacientes CRM y operación comercial/dashboard/pacientes/chatAPI /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
Casos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
adminnutriologoespecialistaasistenterecepcionistacomercialrol-personalizado-con-ver_pipeline
Pasos
  1. Crear pacientes QA que representen captado, contactado, plan elegido, checkout, pago confirmado sin cita, cita agendada y atención activa; confirmar que embudo, cobro, contrato y acceso se muestran como ejes distintos.
  2. Abrir el drawer en escritorio y móvil; comprobar resumen operativo, siguiente acción, cronología, plan/cobro, agenda y datos del prospecto sin duplicar controles ni mezclar datos clínicos.
  3. Mover manualmente un lead desde Kanban y otro desde Chat con motivo; recargar las tres superficies y confirmar un mismo estado y un evento con anterior/nuevo, actor, motivo, origen, revisión y operationId.
Esperado
  • CRM mantiene cuatro ejes autoritativos y una sola transición transaccional para drawer, Kanban, Chat y automatizaciones. Cada movimiento manual o automático es idempotente, tenant-safe y reconstruible desde su evento. La cola Pago confirmado · falta agendar permanece visible y todas las colas llevan a una siguiente acción concreta. El rol comercial ve exclusivamente una proyección comercial sanitizada.

Fuente: test-cases.json · testCases[id=staff-commercial-canonical-state-audit-queues]

Automatización
  • tests/unit/app/api/commercial-transition-route.test.ts · Transición comercial 4/4 pruebas unitarias aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Ver pendientes de seguimientoPendientes de seguimiento comercialFuncionalPor comprobarPor probarCOM-08

Qué permite hacerLocalizar leads sin contactar, seguimientos vencidos, pagos sin cita, accesos pendientes y renovaciones.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

CRM → Colas operativas

Ver pendientes de seguimiento

  • views.jsonpatients-crm / nueve colas
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/comercial/queues.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 2 definiciones en el archivo

Construye explícitamente colas de checkout, seguimiento vencido, pago sin cita y acceso pendiente.

  • separa pagados sin cita, checkout y seguimientos vencidosL5
  • incluye acceso pendiente sólo con pago y contrato activosL16

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudo
Vistas y controles
  • VistaPacientes CRM y operación comercial/dashboard/pacientes/chatAPI /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
Casos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
adminnutriologoespecialistaasistenterecepcionistacomercialrol-personalizado-con-ver_pipeline
Pasos
  1. Crear pacientes QA que representen captado, contactado, plan elegido, checkout, pago confirmado sin cita, cita agendada y atención activa; confirmar que embudo, cobro, contrato y acceso se muestran como ejes distintos.
  2. Abrir el drawer en escritorio y móvil; comprobar resumen operativo, siguiente acción, cronología, plan/cobro, agenda y datos del prospecto sin duplicar controles ni mezclar datos clínicos.
  3. Mover manualmente un lead desde Kanban y otro desde Chat con motivo; recargar las tres superficies y confirmar un mismo estado y un evento con anterior/nuevo, actor, motivo, origen, revisión y operationId.
Esperado
  • CRM mantiene cuatro ejes autoritativos y una sola transición transaccional para drawer, Kanban, Chat y automatizaciones. Cada movimiento manual o automático es idempotente, tenant-safe y reconstruible desde su evento. La cola Pago confirmado · falta agendar permanece visible y todas las colas llevan a una siguiente acción concreta. El rol comercial ve exclusivamente una proyección comercial sanitizada.

Fuente: test-cases.json · testCases[id=staff-commercial-canonical-state-audit-queues]

Automatización
  • tests/unit/lib/comercial/queues.test.ts · Colas comerciales 2/2 pruebas unitarias aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Archivar y recuperar contactosFicha del contactoFuncionalPor comprobarPor probarCOM-09

Qué permite hacerRetirar un lead del seguimiento activo y restaurarlo conservando su ficha.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

CRM → Editar lead

Archivar y recuperar contactos

  • views.jsonpatients-crm / Archivar
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAE2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/comercial-seguimiento-qa.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

El recorrido archiva y desarchiva el mismo lead sintético, esperando ambas persistencias.

  • QA comercial: alta, ficha, edición, etapa y archivar/restaurar con paciente propioL30

Incidencias relacionadas por caso: 0 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistente
Vistas y controles
Casos
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
adminnutriologoespecialistaasistente
Pasos
  1. Abrir /pacientes.
  2. Crear paciente con prefijo QA-E2E.
  3. Buscarlo por nombre o correo.
Esperado
  • El paciente aparece en CRM, abre detalle correcto y conserva tenantId, etapa del pipeline y datos editados. Editar o enviar acceso no reclasifica un lead; sólo una acción explícita sobre Status Kanban lo mueve. En Editar lead, Archivar queda a la extrema derecha de Guardar cambios, pide confirmación y no borra al paciente. El teléfono usa país y lada, la edad sale de la fecha de nacimiento, las etiquetas viven en el catálogo, las citas se leen de Agenda y el acuerdo comercial se anota junto al plan. El cuerpo editado llega con sus saltos y la guía vigente del tenant se adjunta; sin guía el correo sigue funcionando y una guía rota impide marcar el acceso como enviado. El plan de interés se elige entre las diez variantes oficiales y puede compartirse por WhatsApp como Checkout directo. Seleccionar o abrir la liga no crea una contratación activa ni consultas disponibles antes de que Stripe confirme el pago.

Fuente: test-cases.json · testCases[id=patients-crm-create-open-edit]

Cobertura: Referencias parciales

Programar recordatorios a interesadosSeguimiento comercial · ubicación por definirFuncionalPor definirPor definirCOM-10

Qué permite hacerEnviar hasta tres recordatorios a quienes no han pagado, con mensajes y tiempos acordados.

Alcance
Solicitado
Registro de origen
Por definir
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Petición documentada sin cotización ni reglas finales acreditadas.

Ubicación y referencia técnica

Seguimiento comercial; ubicación por definir

Programar recordatorios a interesados

  • REGISTRO-UNICO.mdD-17 y C-2, 14-ago
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Convertir en paciente y renovar el servicio

004
Pruebas del flujo
9 pruebas vinculadas4 archivos2 casos QAUnitarias / componentes 9

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Conservar el seguimiento al pasar de contacto a pacienteDel seguimiento comercial a la ficha del pacienteFuncionalPor definirPor definirCOM-11

Qué permite hacerConectar el seguimiento comercial con la atención, según estado, servicio y pagos.

Alcance
Solicitado
Registro de origen
Por definir
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

El hecho de conversión y su responsable siguen pendientes.

Ubicación y referencia técnica

Kanban → Ficha del paciente

Mantener continuidad de contacto a paciente

  • definicion.jsonGR-N7 y GR-Q7
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/comercial/onboarding-access.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 2 definiciones en el archivo

Cubre la activación tras onboarding con pago y contrato válidos, un tramo de continuidad.

  • activa acceso y produce un evento auditable deterministaL21
  • rechaza activar acceso sin pago y contrato válidosL42

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Separar embudo, cobro, contrato y accesoFicha y seguimiento comercialFuncionalPor comprobarPor probarCOM-12

Qué permite hacerMostrar si la persona está contactada, pagada, con servicio vigente y con acceso, sin mezclar esos estados.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Kanban y detalle comercial

Separar embudo, cobro, contrato y acceso

  • views.jsonpatients-crm / cuatro ejes
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos2 casos QAUnitarias / componentes 5

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/comercial/state-machine.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 6 definiciones en el archivo

Modela como ejes distintos embudo, pago, contrato y acceso.

  • avanza varios ejes de forma atómica y revisionadaL8
  • impide confirmar pago sin cobro válido y contrato activoL14
  • sigue exigiendo pago y contrato al enviar accesoL49
tests/unit/lib/payments/commercial-payment-transition.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 6 definiciones en el archivo

Proyecta el cobro hacia CRM sin aceptar el importe o estado del navegador.

  • avanza a pagado sin aceptar el importe o estado del navegadorL92
  • no retrocede a quien ya tiene cita agendadaL119

Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudoPublicoStripe WebhookCron
Vistas y controles
  • VistaPacientes CRM y operación comercial/dashboard/pacientes/chatAPI /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
Casos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
adminnutriologoespecialistaasistenterecepcionistacomercialrol-personalizado-con-ver_pipeline
Pasos
  1. Crear pacientes QA que representen captado, contactado, plan elegido, checkout, pago confirmado sin cita, cita agendada y atención activa; confirmar que embudo, cobro, contrato y acceso se muestran como ejes distintos.
  2. Abrir el drawer en escritorio y móvil; comprobar resumen operativo, siguiente acción, cronología, plan/cobro, agenda y datos del prospecto sin duplicar controles ni mezclar datos clínicos.
  3. Mover manualmente un lead desde Kanban y otro desde Chat con motivo; recargar las tres superficies y confirmar un mismo estado y un evento con anterior/nuevo, actor, motivo, origen, revisión y operationId.
Esperado
  • CRM mantiene cuatro ejes autoritativos y una sola transición transaccional para drawer, Kanban, Chat y automatizaciones. Cada movimiento manual o automático es idempotente, tenant-safe y reconstruible desde su evento. La cola Pago confirmado · falta agendar permanece visible y todas las colas llevan a una siguiente acción concreta. El rol comercial ve exclusivamente una proyección comercial sanitizada.

Fuente: test-cases.json · testCases[id=staff-commercial-canonical-state-audit-queues]

public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Identificar renovaciones y sesiones por agotarsePendientes de seguimiento comercialFuncionalPor comprobarPor probarCOM-13

Qué permite hacerDetectar contratos próximos a terminar y registrar el siguiente seguimiento comercial.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

CRM → Colas operativas

Identificar renovaciones y sesiones por agotarse

  • views.jsonpatients-crm / renovaciones
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/comercial/queues.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 2 definiciones en el archivo

Incluye pagos sin cita y acceso pendiente, pero no una regla explícita de renovación.

  • separa pagados sin cita, checkout y seguimientos vencidosL5
  • incluye acceso pendiente sólo con pago y contrato activosL16

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistenteRecepcionistaComercialRol con acceso al embudo
Vistas y controles
  • VistaPacientes CRM y operación comercial/dashboard/pacientes/chatAPI /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
Casos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
adminnutriologoespecialistaasistenterecepcionistacomercialrol-personalizado-con-ver_pipeline
Pasos
  1. Crear pacientes QA que representen captado, contactado, plan elegido, checkout, pago confirmado sin cita, cita agendada y atención activa; confirmar que embudo, cobro, contrato y acceso se muestran como ejes distintos.
  2. Abrir el drawer en escritorio y móvil; comprobar resumen operativo, siguiente acción, cronología, plan/cobro, agenda y datos del prospecto sin duplicar controles ni mezclar datos clínicos.
  3. Mover manualmente un lead desde Kanban y otro desde Chat con motivo; recargar las tres superficies y confirmar un mismo estado y un evento con anterior/nuevo, actor, motivo, origen, revisión y operationId.
Esperado
  • CRM mantiene cuatro ejes autoritativos y una sola transición transaccional para drawer, Kanban, Chat y automatizaciones. Cada movimiento manual o automático es idempotente, tenant-safe y reconstruible desde su evento. La cola Pago confirmado · falta agendar permanece visible y todas las colas llevan a una siguiente acción concreta. El rol comercial ve exclusivamente una proyección comercial sanitizada.

Fuente: test-cases.json · testCases[id=staff-commercial-canonical-state-audit-queues]

Cobertura: Referencias parciales

Consultar indicadores comercialesDashboard → MétricasFuncionalPor comprobarPor probarCOM-14

Qué permite hacerRevisar altas, bajas, retención, paquetes, modalidad e ingresos por periodo.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Dashboard → Métricas

Consultar indicadores comerciales

  • features.jsonDSH-002, DSH-004
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachEspecialistaAsistenteRecepcionista
Vistas y controles

No hay caso vinculado que verifique retención, comisiones, ingresos, paquetes o modalidades.

Cobertura: Sin caso vinculado

Área 02

Gestión y atención al paciente

47funciones

Incorporar · Atender · Comunicar · Administrar

Contexto de prueba8 roles · 11 vistas
Roles
SuperadminAdminNutriólogoCoachEspecialistaAsistenteRecepcionistaPaciente
Vistas
Pruebas del área
113 pruebas vinculadas42 archivos19 casos QAE2E 12Unitarias / componentes 50Integración 51

Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.

Incorporar y dar acceso

005
Pruebas del flujo
13 pruebas vinculadas7 archivos4 casos QAE2E 3Unitarias / componentes 2Integración 8

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Crear y actualizar la ficha del pacientePacientes → FichaFuncionalPruebas parcialesPor probarGES-01

Qué permite hacerGuardar identidad, contacto, objetivos y responsable de atención.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La integración de onboarding creó y relacionó usuario, paciente y expediente de forma idempotente; no cubre la ficha completa ni su edición habitual.

Ubicación y referencia técnica

Pacientes → Ficha

Crear y actualizar la ficha del paciente

  • m1-funciones.mdM1-F01
  • README.mdBK-74; Gates ejecutados; Casos críticos 2–4
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/comercial-seguimiento-qa.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

Crea, abre y edita la ficha sintética desde CRM con espera de persistencia.

  • QA comercial: alta, ficha, edición, etapa y archivar/restaurar con paciente propioL30
tests/unit/lib/validations/paciente/paciente.validator.test.tsUnitarias / componentes · Prueba de apoyo · 2 vinculadas / 10 definiciones en el archivo

Valida el contrato de datos de la ficha, sin guardar contra el sistema.

  • un draft completo y correcto es válido sin erroresL35
  • rechaza objetivoId fuera del catálogo (error en la key `objetivo`)L87

Incidencias relacionadas por caso: 0 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistente
Vistas y controles
  • VistaPacientes CRM y operación comercial/pacientes
Casos
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
adminnutriologoespecialistaasistente
Pasos
  1. Abrir /pacientes.
  2. Crear paciente con prefijo QA-E2E.
  3. Buscarlo por nombre o correo.
Esperado
  • El paciente aparece en CRM, abre detalle correcto y conserva tenantId, etapa del pipeline y datos editados. Editar o enviar acceso no reclasifica un lead; sólo una acción explícita sobre Status Kanban lo mueve. En Editar lead, Archivar queda a la extrema derecha de Guardar cambios, pide confirmación y no borra al paciente. El teléfono usa país y lada, la edad sale de la fecha de nacimiento, las etiquetas viven en el catálogo, las citas se leen de Agenda y el acuerdo comercial se anota junto al plan. El cuerpo editado llega con sus saltos y la guía vigente del tenant se adjunta; sin guía el correo sigue funcionando y una guía rota impide marcar el acceso como enviado. El plan de interés se elige entre las diez variantes oficiales y puede compartirse por WhatsApp como Checkout directo. Seleccionar o abrir la liga no crea una contratación activa ni consultas disponibles antes de que Stripe confirme el pago.

Fuente: test-cases.json · testCases[id=patients-crm-create-open-edit]

Automatización
  • e2e/staging/staff-core-flows.spec.ts · Alta CRM QA con archivado de limpieza

Cobertura: Referencias vinculadas

Enviar y completar el accesoFicha del paciente → Enviar accesoFuncionalPruebas parcialesPor probarGES-03

Qué permite hacerEnviar un enlace o QR, completar registro inicial y vincular al paciente con su ficha.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

Se verificó completar onboarding con token, incluido un éxito y un conflicto concurrentes; no se verificó el envío de la invitación ni el recorrido visual vigente.

Ubicación y referencia técnica

Ficha → Enviar acceso / Onboarding

Enviar y completar el acceso

  • views.jsonstaff-payments-billing / acceso
  • README.mdBK-74; Casos críticos 2–4
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos2 casos QAIntegración 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/onboarding-complete.test.tsIntegración · Comportamiento directo · 2 vinculadas / 8 definiciones en el archivo

El endpoint completa onboarding y activa acceso canónico en la misma transacción cuando corresponde.

  • HIXION activa el acceso canónico y crea su evento en la misma transacciónL124
  • HIXION no consume el token si pago o contrato no permiten activar accesoL182
tests/integration/api/patient-identity-link.test.tsIntegración · Comportamiento directo · 1 vinculadas / 6 definiciones en el archivo

La vinculación cuenta-paciente se audita y no cruza tenant.

  • reasocia dentro del tenant y audita usuario, paciente anterior y nuevo en una transacciónL73

Incidencias relacionadas por caso: 0 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistentePublicoRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPacientes CRM y operación comercial/pacientes
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
  • VentanaEnlace de Acceso/pacientes/[id] · requiere paciente
Casos
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
adminnutriologoespecialistaasistente
Pasos
  1. Abrir /pacientes.
  2. Crear paciente con prefijo QA-E2E.
  3. Buscarlo por nombre o correo.
Esperado
  • El paciente aparece en CRM, abre detalle correcto y conserva tenantId, etapa del pipeline y datos editados. Editar o enviar acceso no reclasifica un lead; sólo una acción explícita sobre Status Kanban lo mueve. En Editar lead, Archivar queda a la extrema derecha de Guardar cambios, pide confirmación y no borra al paciente. El teléfono usa país y lada, la edad sale de la fecha de nacimiento, las etiquetas viven en el catálogo, las citas se leen de Agenda y el acuerdo comercial se anota junto al plan. El cuerpo editado llega con sus saltos y la guía vigente del tenant se adjunta; sin guía el correo sigue funcionando y una guía rota impide marcar el acceso como enviado. El plan de interés se elige entre las diez variantes oficiales y puede compartirse por WhatsApp como Checkout directo. Seleccionar o abrir la liga no crea una contratación activa ni consultas disponibles antes de que Stripe confirme el pago.

Fuente: test-cases.json · testCases[id=patients-crm-create-open-edit]

public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Capturar el perfil inicialRegistro inicial del pacienteFuncionalPruebas parcialesPor probarGES-04

Qué permite hacerRecoger salud, alimentación, actividad, objetivos y datos deportivos pertinentes.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La API de intake incorporó datos iniciales y se probó junto con reglas en emulador; no acredita todos los campos ni la captura renderizada del portal.

Ubicación y referencia técnica

Onboarding / Portal → Registro

Capturar el perfil inicial

  • features.jsonAPP-001, REC-001 a REC-004
  • README.mdFR-18; Gates ejecutados
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/onboarding-complete.test.tsIntegración · Comportamiento directo · 2 vinculadas / 8 definiciones en el archivo

Completar intake conserva historia y actualiza la medición inicial sin duplicarla.

  • preserva historia clínica, fotos, planes y mediciones al completar intakeL100
  • una segunda captura válida actualiza la medición inicial sin duplicarlaL248

Incidencias relacionadas por caso: 0 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialistaAsistente
Vistas y controles
  • VistaPacientes CRM y operación comercial/pacientes
Casos
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
adminnutriologoespecialistaasistente
Pasos
  1. Abrir /pacientes.
  2. Crear paciente con prefijo QA-E2E.
  3. Buscarlo por nombre o correo.
Esperado
  • El paciente aparece en CRM, abre detalle correcto y conserva tenantId, etapa del pipeline y datos editados. Editar o enviar acceso no reclasifica un lead; sólo una acción explícita sobre Status Kanban lo mueve. En Editar lead, Archivar queda a la extrema derecha de Guardar cambios, pide confirmación y no borra al paciente. El teléfono usa país y lada, la edad sale de la fecha de nacimiento, las etiquetas viven en el catálogo, las citas se leen de Agenda y el acuerdo comercial se anota junto al plan. El cuerpo editado llega con sus saltos y la guía vigente del tenant se adjunta; sin guía el correo sigue funcionando y una guía rota impide marcar el acceso como enviado. El plan de interés se elige entre las diez variantes oficiales y puede compartirse por WhatsApp como Checkout directo. Seleccionar o abrir la liga no crea una contratación activa ni consultas disponibles antes de que Stripe confirme el pago.

Fuente: test-cases.json · testCases[id=patients-crm-create-open-edit]

Cobertura: Referencias parciales

Iniciar sesión y recuperar contraseñaLogin y recuperaciónFuncionalPor comprobarPor probarGES-06

Qué permite hacerAcceder según el rol, cerrar sesión y recuperar el acceso a la cuenta.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Login y recuperación

Iniciar sesión y recuperar contraseña

  • features.jsonAUTH-001, AUTH-002
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAIntegración 3E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/auth-profile.test.tsIntegración · Comportamiento directo · 3 vinculadas / 4 definiciones en el archivo

La ruta de perfil acepta la relación válida y rechaza perfiles o expedientes inválidos.

  • acepta un paciente cuyo perfil y expediente comparten tenantL37
  • distingue perfil inexistente y cuenta inactivaL57
  • rechaza un expediente vinculado a otro tenantL85
e2e/staging/auth-permissions.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Recorre redirecciones y permisos por rol, sin cubrir recuperación de contraseña.

  • <dynamic template>L18declaración dinámica

Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachAsistenteRecepcionistaRol PersonalizadoPaciente
Vistas y controles
Casos
auth-role-routing · Roles principales mantienen permisos esperados
superadminadminnutriologocoachasistenterecepcionistarol-personalizadopaciente
Pasos
  1. Iniciar sesión con cada rol configurado en staging.
  2. Validar redirect inicial y navegación principal.
  3. Abrir rutas permitidas y rutas restringidas por rol.
Esperado
  • Cada rol accede sólo a las rutas permitidas; un rol personalizado vigente puede completar su registro, cargar su perfil e iniciar sesión con los permisos definidos por el workspace. Las rutas restringidas muestran bloqueo o redirect sin render parcial sensible. Una cuenta inactiva no puede iniciar sesión, pierde acceso a APIs y datos del workspace y cualquier liga protegida la expulsa a login sin renderizar contenido. Un administrador puede cambiar el rol de cualquier otro integrante desde Miembros, incluidos roles propios del workspace, pero nunca el suyo; el cambio exige justificación y se refleja de inmediato.

Fuente: test-cases.json · testCases[id=auth-role-routing]

Automatización
  • e2e/staging/auth-permissions.spec.ts · Acceso por rol

Cobertura: Referencias vinculadas

Gestionar perfil y modo vacacionesPortal → Perfil y ConfiguraciónFuncionalPor comprobarPor probarGES-50

Qué permite hacerActualizar foto y preferencias personales y consultar el modo vacaciones previsto para el portal.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

No implica suspender el contrato ni el cobro; esas reglas se concilian por separado.

Ubicación y referencia técnica

Portal → Perfil y Configuración

Gestionar perfil y modo vacaciones

  • M10-portal-paciente.jsonF-M10-24 y F-M10-25
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAE2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/routine-occurrence-flow.spec.tsE2E · Cobertura parcial · 1 vinculadas / 10 definiciones en el archivo

Cubre el descanso por vacaciones en portal; no la edición completa de perfil.

  • QA-PORTAL-PAST-VACATION declara ayer y descansa rutinas en vacaciones @regressionL105

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-vacation-routine-rest · Vacaciones con descanso reversible de rutinas
paciente
Pasos
  1. Con rutina asignada, activar modo vacaciones: abrir drawer con siete días y lunas animadas, y elegir entre descansar rutinas o conservar la programación.
  2. Al descansar rutinas, cada fecha programada durante el modo aparece como descanso en Rutina, Agenda y calendario del coach; una sesión ya registrada conserva su resultado y una elección explícita posterior permite entrenar una fecha.
  3. Al desactivar vacaciones, restaurar hoy y fechas futuras. Conservar como descanso los días anteriores comprendidos por las vacaciones y recalcular adherencia con los días realmente programados.
Esperado
  • El descanso del modo vacaciones se aplica por periodo a las rutinas vigentes sin reescribir cada fecha ni borrar registros; su desactivación restaura automáticamente las fechas pendientes.

Fuente: test-cases.json · testCases[id=patient-vacation-routine-rest]

Cobertura: Referencias parciales

Mantener el expediente

008
Pruebas del flujo
13 pruebas vinculadas6 archivos5 casos QAIntegración 8Unitarias / componentes 2E2E 3

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Registrar antecedentes y restriccionesFicha → ExpedienteFuncionalPor comprobarPor probarGES-07

Qué permite hacerMantener antecedentes personales y familiares, alergias, medicamentos y restricciones relevantes.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ficha → Expediente

Registrar antecedentes y restricciones

  • m1-funciones.mdM1-F01
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos0 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/clinical-notes.rules.test.tsIntegración · Cobertura parcial · 2 vinculadas / 6 definiciones en el archivo

Prueba privacidad de notas e instrucciones, no el formulario completo de antecedentes.

  • niega lectura y escritura de notas internas al pacienteL64
  • permite al paciente leer instrucciones y le niega publicarlasL73

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Registrar hábitos y salud femeninaExpediente, registro y perfil del portalFuncionalPor comprobarPor probarGES-08

Qué permite hacerConsultar y actualizar alimentación, actividad y salud femenina cuando corresponda.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Expediente, registro y perfil del portal

Registrar hábitos y salud femenina

  • features.jsonREC-004; APP-001
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Capturar medidas y composición corporalFicha → Mediciones / Consulta / PortalFuncionalPruebas parcialesPor probarGES-09

Qué permite hacerGuardar peso, estatura, perímetros y composición, y calcular indicadores como IMC.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

Una medición inicial se creó y una segunda la actualizó sin duplicarla; no cubre composición corporal ni las vistas de captura y comparación.

Ubicación y referencia técnica

Ficha → Mediciones / Consulta / Portal

Capturar medidas y composición corporal

  • m1-funciones.mdM1-F01
  • README.mdCambios verificados; Caso crítico 2
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAIntegración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/onboarding-complete.test.tsIntegración · Comportamiento directo · 1 vinculadas / 8 definiciones en el archivo

Actualiza una medición inicial sin duplicarla tras captura válida.

  • una segunda captura válida actualiza la medición inicial sin duplicarlaL248

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaPortal paciente/portal/registro
  • VentanaNueva Medición/pacientes/[id] · requiere paciente
Casos
patient-progress-analytics-shared · Progreso muestra analítica longitudinal compartida
pacienteadminnutriologocoachespecialista
Pasos
  1. Entrar como paciente y abrir /portal/registro.
  2. Registrar una medición desde paciente y otra desde staff con fechas fuera de orden; confirmar que ninguna sobrescribe la otra.
  3. Validar KPIs de peso, grasa, músculo, adherencia dieta y adherencia rutina.
Esperado
  • Progreso separa análisis de acciones de registro, conserva capturas concurrentes, determina la medición actual por timestamp y muestra el mismo peso vigente en portal, staff, dieta y rutina. También muestra origen equipo/paciente y reutiliza la lectura compartida en staff/AAR sin nuevas superficies vacías.

Vistas:/portal/registro/portal/progreso

Fuente: test-cases.json · testCases[id=patient-progress-analytics-shared]

El caso cubre captura concurrente y lectura de progreso; no confirma toda la composición corporal.

Cobertura: Referencias parciales

Comparar mediciones y fotosFicha → Progreso / Portal → ProgresoFuncionalPor comprobarPor probarGES-10

Qué permite hacerVer cambios entre fechas y consultar gráficas y fotografías de progreso.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ficha → Progreso / Portal → Progreso

Comparar mediciones y fotos

  • m1-funciones.mdM1-F01
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/photo-progress/mutations.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 9 definiciones en el archivo

Compara poses entre fechas y conserva álbumes/versiones de progreso.

  • keeps multiple daily records inside the same named albumL22
  • compares a stable custom pose across datesL40

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaPortal paciente/portal/progreso
  • PanelMétricas/pacientes/[id] · requiere paciente
Casos
patient-progress-analytics-shared · Progreso muestra analítica longitudinal compartida
pacienteadminnutriologocoachespecialista
Pasos
  1. Entrar como paciente y abrir /portal/registro.
  2. Registrar una medición desde paciente y otra desde staff con fechas fuera de orden; confirmar que ninguna sobrescribe la otra.
  3. Validar KPIs de peso, grasa, músculo, adherencia dieta y adherencia rutina.
Esperado
  • Progreso separa análisis de acciones de registro, conserva capturas concurrentes, determina la medición actual por timestamp y muestra el mismo peso vigente en portal, staff, dieta y rutina. También muestra origen equipo/paciente y reutiliza la lectura compartida en staff/AAR sin nuevas superficies vacías.

Vistas:/portal/registro/portal/progreso

Fuente: test-cases.json · testCases[id=patient-progress-analytics-shared]

El caso cubre comparación de mediciones y KPIs; no acredita la comparación de fotos.

Cobertura: Referencias parciales

Tomar y cargar fotos desde el teléfonoConsulta, ficha y captura por QRFuncionalReportadoPor probarGES-11

Qué permite hacerAdjuntar fotos de cámara o galería mediante consulta, expediente o código temporal.

Alcance
Documentado en producto
Registro de origen
Reportado
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

El índice lo describe entregado; esta extracción no repitió el recorrido.

Ubicación y referencia técnica

Consulta, ficha y captura por QR

Tomar y cargar fotos desde el teléfono

  • 00-gr-platform-phase-close-index.mdphoto-progress-capture.md
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAE2E 3Integración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/photo-capture-qr.spec.tsE2E · Comportamiento directo · 3 vinculadas / 4 definiciones en el archivo

El recorrido QR sube fotos y cubre errores y límites de captura.

  • captura QR envia fotos con filename seguroL37
  • foto grande de cámara se optimiza antes de aplicar el límite finalL121
  • HEIC no convertible explica formato y dispositivo en vez de culpar la conexiónL166
tests/integration/api/photo-capture-upload.test.tsIntegración · Comportamiento directo · 2 vinculadas / 3 definiciones en el archivo

La carga enlaza una foto real al expediente y admite captura temporal directa.

  • guarda una foto real en Storage y la enlaza al expedienteL31
  • confirma una carga temporal directa sin enviar el archivo por la funcionL121

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialistaPaciente
Vistas y controles
  • VistaPacientes CRM y operación comercial/pacientes/[id]/consultas/[consultaId] · requiere paciente/captura-fotos/[token] · requiere token
  • VentanaSubir fotos de progreso/pacientes/[id] · requiere paciente
Casos
staff-consulta-photo-qr-save · Guardar fotos desde QR de consulta
adminnutriologocoachespecialistapaciente
Pasos
  1. Abrir una consulta y generar un QR de captura de fotos.
  2. Escanear el QR desde móvil y validar token, paciente, consulta, expiración y límite.
  3. Capturar o elegir fotos, incluyendo Lateral izquierdo, y comprobar que cada tarjeta informa tamaño original, tamaño optimizado y resultado antes de guardar mediante carga temporal directa a Storage.
Esperado
  • El QR sólo permite cargar fotos a la consulta autorizada; intenta normalizar antes de aplicar el límite final, informa reducción original→final, bloquea HEIC no convertible con guía por dispositivo, sube hasta 12 MB finales por foto y 120 MB por sesión, y distingue errores de preparación, Storage, confirmación, formato y conectividad.

Fuente: test-cases.json · testCases[id=staff-consulta-photo-qr-save]

Automatización
  • e2e/staging/photo-capture-qr.spec.ts · Captura de fotos QR

Cobertura: Referencias vinculadas

Adjuntar y consultar archivos clínicosFicha → Archivos / Portal → ProgresoFuncionalPruebas parcialesPor probarGES-12

Qué permite hacerGuardar estudios, documentos y archivos del paciente, con visibilidad según permisos.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

Las reglas ejercitaron lectura y escritura de adjuntos por propietario, personal y tenant; no prueban la consulta de archivos en las pantallas clínicas.

Ubicación y referencia técnica

Ficha → Archivos / Portal → Progreso

Adjuntar y consultar archivos clínicos

  • m1-funciones.mdM1-F01
  • README.mdBK-73; Cambios verificados; Caso crítico 5–6
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAIntegración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/storage.rules.test.tsIntegración · Cobertura parcial · 1 vinculadas / 10 definiciones en el archivo

Cubre aislamiento y tipos de archivos permitidos, no gestión integral de estudios.

  • acepta documentos de UI y rechaza contenido ejecutableL157

Incidencias relacionadas por caso: 1 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPaciente
Vistas y controles
  • VistaPacientes CRM y operación comercialstorage.rulespatients/{pacienteId}pacientes/{pacienteId}chat/{conversacionId}
  • VentanaSubir Archivo/pacientes/[id] · requiere paciente
  • VentanaVista previa/pacientes/[id] · requiere paciente
Casos
storage-tenant-patient-chat-isolation · Storage y chat aíslan paciente y tenant
adminespecialistapaciente
Pasos
  1. Preparar dos pacientes QA y actores de tenants distintos con archivos y conversaciones identificables.
  2. Confirmar que cada paciente y su equipo autorizado pueden leer sus propios archivos y participar en su conversación.
  3. Intentar leer, listar, subir o borrar archivos de otro paciente o tenant y abrir su conversación sin ser participante.
Esperado
  • Sólo participantes y responsables autorizados acceden a archivos y chat.

Fuente: test-cases.json · testCases[id=storage-tenant-patient-chat-isolation]

Cobertura: Referencias parciales

Consultar historia y notas de atenciónFicha → Historial y ConsultasFuncionalPor comprobarPor probarGES-13

Qué permite hacerRevisar consultas, cambios de planes, registros y notas vinculadas al paciente.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ficha → Historial y Consultas

Consultar historia y notas de atención

  • m1-funciones.mdM1-F01
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAIntegración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/clinical-notes.rules.test.tsIntegración · Cobertura parcial · 1 vinculadas / 6 definiciones en el archivo

Cubre lectura privada de notas e historial clínico, no la UI de historia.

  • mantiene la auditoría clínica privada, atribuida e inmutableL102

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialista
Vistas y controles
  • VistaPacientes CRM y operación comercial/pacientes/[id]/consultas/[consultaId]?tab=notas · requiere paciente
  • VentanaNueva nota global de expediente/pacientes/[id] · requiere paciente
  • VentanaEditar nota global/pacientes/[id] · requiere paciente
Casos
staff-consulta-move-notes-to-record · Las notas se mueven entre consulta y expediente sin perder información
adminnutriologoespecialista
Pasos
  1. Abrir una consulta que tenga una nota de sesión con categoría, título, contenido, autor y fecha.
  2. Elegir Mover al expediente y confirmar que deja de aparecer en las notas de la consulta y aparece una sola vez en Expediente del paciente, sin cambios en sus datos.
  3. Elegir Vincular a esta consulta en esa nota y confirmar que vuelve a la consulta abierta y desaparece de las notas generales.
Esperado
  • Cada movimiento conserva la misma nota y sus datos clínicos; sólo cambia su vinculación entre la consulta abierta y el expediente general, sin duplicarla.

Fuente: test-cases.json · testCases[id=staff-consulta-move-notes-to-record]

Cobertura: Referencias parciales

Definir qué puede ver y editar el pacientePortal → Perfil y ProgresoFuncionalPruebas parcialesPor definirGES-15

Qué permite hacerAcordar acceso a preferencias, archivos del especialista, estudios, notas y datos del perfil.

Alcance
Por definir
Registro de origen
Por definir
Prueba parcial · 2026-07-20

Se probó que notas internas no llegan al paciente y que instrucciones públicas conservan visibilidad y auditoría; no cubre la política completa de edición del perfil.

La fuente distingue decisiones de acceso pendientes de defectos técnicos.

Ubicación y referencia técnica

Portal → Perfil y Progreso

Definir qué puede ver y editar el paciente

  • 08-historial-clinico-consistencia.mdGuardado, pero el paciente no lo ve
  • README.mdMatriz de aceptación; Verificaciones ejecutadas
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/clinical-notes.rules.test.tsIntegración · Comportamiento directo · 2 vinculadas / 6 definiciones en el archivo

Impide al paciente leer/escribir notas internas y permite sólo instrucciones públicas.

  • niega lectura y escritura de notas internas al pacienteL64
  • permite al paciente leer instrucciones y le niega publicarlasL73

Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachAsistenteRecepcionistaRol PersonalizadoPaciente
Vistas y controles
Casos
auth-role-routing · Roles principales mantienen permisos esperados
superadminadminnutriologocoachasistenterecepcionistarol-personalizadopaciente
Pasos
  1. Iniciar sesión con cada rol configurado en staging.
  2. Validar redirect inicial y navegación principal.
  3. Abrir rutas permitidas y rutas restringidas por rol.
Esperado
  • Cada rol accede sólo a las rutas permitidas; un rol personalizado vigente puede completar su registro, cargar su perfil e iniciar sesión con los permisos definidos por el workspace. Las rutas restringidas muestran bloqueo o redirect sin render parcial sensible. Una cuenta inactiva no puede iniciar sesión, pierde acceso a APIs y datos del workspace y cualquier liga protegida la expulsa a login sin renderizar contenido. Un administrador puede cambiar el rol de cualquier otro integrante desde Miembros, incluidos roles propios del workspace, pero nunca el suyo; el cambio exige justificación y se refleja de inmediato.

Fuente: test-cases.json · testCases[id=auth-role-routing]

Cobertura: Referencias parciales

Agendar y preparar consultas

0010
Pruebas del flujo
37 pruebas vinculadas6 archivos3 casos QAUnitarias / componentes 15Integración 22

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Consultar calendario y disponibilidadAgendaFuncionalPruebas parcialesPor probarGES-16

Qué permite hacerVer día, semana y mes por especialista; distinguir citas, eventos y horarios bloqueados.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-09-23

Recorrido de lectura confirmado: Agenda alterna Día, Semana y Mes; se seleccionó el especialista QA en el filtro sin guardar. Sólo se observaron citas en el estado presente; no había eventos ni bloqueos distinguibles para completar esa cobertura.

Ubicación y referencia técnica

Agenda /agenda

Consultar calendario y disponibilidad

  • m1-funciones.mdM1-F08
  • resultados.jsonresults[id=GES-16]
Cómo probar
Pruebas localizadas
6 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 6

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/citas/agenda-policy.test.tsUnitarias / componentes · Comportamiento directo · 6 vinculadas / 21 definiciones en el archivo

Genera slots y aplica horarios, bloques, zona horaria y márgenes.

  • descarta bloques cuyo fin no supera el inicioL43
  • fusiona bloques solapados para no duplicar slotsL53
  • ordena los bloques recibidos fuera de ordenL60
  • cae al default cuando la zona horaria no es válidaL70
  • rechaza la hora de la comida, que cae entre dos bloquesL102
  • genera slots de 15 minutos que caben completos en el bloqueL131

Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPaciente
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
Casos
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
adminespecialistapaciente
Pasos
  1. Configurar un Tipo de cita con icono, color, duración, modalidad, instrucciones, guía, cuestionarios y registros previos; desactivar otro tipo y confirmar que sólo siga visible en históricos.
  2. Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
  3. Reprogramar y cambiar el tipo de la cita vinculada; recargar Agenda, ficha y consulta, y confirmar fecha, profesional, modalidad, tipo e iconografía idénticos.
Esperado
  • Tipos de cita gobierna agenda y consultas sin catálogos duplicados; las consultas siempre quedan vinculadas, la preparación se entrega por canales idempotentes y todas las superficies conservan el mismo historial. Los eventos Google conservan su identidad, distinguen si están solos o vinculados, precargan de forma segura el alta y nunca se duplican ni consumen una sesión por el mero vínculo. Un fallo de sync de Google no bloquea Agenda, nombra el calendario y la cuenta, y Integraciones diagnostica qué miembro y qué calendario perdieron acceso.

Fuente: test-cases.json · testCases[id=staff-appointment-authoritative-lifecycle]

Automatización
  • tests/integration/api/citas.test.ts · Agenda autoritativa 57/57 pruebas integración aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Agendar y reprogramar sin empalmesAgenda, ficha y dashboardFuncionalPruebas parcialesPor probarGES-17

Qué permite hacerElegir paciente, profesional, tipo, modalidad y horario disponible.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La creación y el reagendado validaron disponibilidad, bloqueos y carreras con respuestas 201/409 en emulador; falta la experiencia visual autenticada y una repetición sobre la revisión actual.

Ubicación y referencia técnica

Agenda, ficha y dashboard

Agendar y reprogramar sin empalmes

  • m1-funciones.mdM1-F08
  • README.mdHistorias verificadas; Cobertura focal de integración
Cómo probar
Pruebas localizadas
13 pruebas vinculadas1 archivos2 casos QAIntegración 13

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 13 vinculadas / 57 definiciones en el archivo

Crea, reagenda y resuelve solapes concurrentes sin dejar locks.

  • crea la cita en Firestore con el tenantId del actor y su consulta asociadaL209
  • programa, reagenda y cancela recordatorios desde el comando autoritativoL275
  • rechaza con 409 un horario ya ocupado (SLOT_CONFLICT)L481
  • resuelve dos reservas concurrentes con una sola cita y un 409L524
  • reagenda conservando el ID, auditoría y consulta; libera el horario anteriorL646
  • rechaza cambiar de paciente al reagendar aunque la cita no tenga consultaL672
  • serializa dos reagendados concurrentes de la misma cita sin dejar locks huérfanosL703
  • preserva una transición concurrente y rechaza el reagendado sin reabrir la citaL751
  • serializa cancelación contra reagenda y usa el vínculo fresco de consulta y GoogleL792
  • rechaza reagendar una cita en progreso o terminal sin cambiar fecha ni consultaL899
  • crea la cita aunque el especialista no tenga Google Calendar conectadoL1001
  • reserva una sola sesión ante dos agendamientos concurrentesL1396
  • reagenda la misma reserva y al completar la convierte exactamente una vezL1416

Incidencias relacionadas por caso: 0 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPacienteNutriólogoCoachAsistenteRecepcionistaCron
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
Casos
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
adminespecialistapaciente
Pasos
  1. Configurar un Tipo de cita con icono, color, duración, modalidad, instrucciones, guía, cuestionarios y registros previos; desactivar otro tipo y confirmar que sólo siga visible en históricos.
  2. Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
  3. Reprogramar y cambiar el tipo de la cita vinculada; recargar Agenda, ficha y consulta, y confirmar fecha, profesional, modalidad, tipo e iconografía idénticos.
Esperado
  • Tipos de cita gobierna agenda y consultas sin catálogos duplicados; las consultas siempre quedan vinculadas, la preparación se entrega por canales idempotentes y todas las superficies conservan el mismo historial. Los eventos Google conservan su identidad, distinguen si están solos o vinculados, precargan de forma segura el alta y nunca se duplican ni consumen una sesión por el mero vínculo. Un fallo de sync de Google no bloquea Agenda, nombra el calendario y la cuenta, y Integraciones diagnostica qué miembro y qué calendario perdieron acceso.

Fuente: test-cases.json · testCases[id=staff-appointment-authoritative-lifecycle]

staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
adminnutriologocoachespecialistaasistenterecepcionistacron
Pasos
  1. Activar el flujo canónico sólo en HIXION y crear un contrato de tres sesiones; agendar tres citas y confirmar saldo incluidas 3, reservadas 3, consumidas 0, disponibles 0.
  2. Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
  3. Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
Esperado
  • El contrato conserva un saldo transaccional sin sobreagenda. Reagendar transfiere una reserva, cancelar la libera, completar la consume una vez y no_show espera decisión. Una cita bloqueada por pago sigue visible en rojo y conserva temporalmente horario/sesión, pero no puede iniciar. Un pago dentro del límite reactiva la misma cita; al superar 15 minutos, el cron cancela y un pago posterior exige una cita nueva. Todas las ramas quedan auditadas.

Vistas:/agenda/dashboard/pacientesAPI /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines

Fuente: test-cases.json · testCases[id=staff-appointment-entitlements-payment-gate]

Automatización
  • tests/integration/api/citas.test.ts · Agenda autoritativa 57/57 pruebas integración aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Configurar tipos de cita y horariosConfiguración / AgendaFuncionalPor comprobarPor probarGES-18

Qué permite hacerDefinir duración, preparación, disponibilidad, bloqueos y márgenes entre citas.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Configuración / Agenda

Configurar tipos de cita y horarios

  • views.jsonstaff-agenda / tipos de cita y buffers
Cómo probar
Pruebas localizadas
6 pruebas vinculadas2 archivos0 casos QAUnitarias / componentes 6

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/citas/tipo-cita-defaults.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 4 definiciones en el archivo

El catálogo de tipos conserva preparación y límites de archivos.

  • conserva cuestionarios y preparación avanzada en el metadata del tipoL13
tests/unit/lib/citas/agenda-policy.test.tsUnitarias / componentes · Comportamiento directo · 5 vinculadas / 21 definiciones en el archivo

La política normaliza disponibilidad, márgenes y bloques.

  • acota los márgenes al rango permitidoL83
  • descarta bloques cuyo fin no supera el inicioL43
  • fusiona bloques solapados para no duplicar slotsL53
  • ordena los bloques recibidos fuera de ordenL60
  • rechaza la hora de la comida, que cae entre dos bloquesL102

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Confirmar y cancelar citasAgenda del equipo y portalFuncionalPruebas parcialesPor probarGES-19

Qué permite hacerPermitir confirmación, solicitud de cambio o cancelación según las reglas del servicio.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La máquina de estados cubrió confirmación, cancelación y transiciones inválidas, con liberación de locks; no demuestra la interacción completa de ambos portales.

Ubicación y referencia técnica

Agenda del equipo y portal

Confirmar y cancelar citas

  • m1-funciones.mdM1-F08
  • README.mdBK-53; Cobertura focal de integración
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2Integración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/citas/lifecycle.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 8 definiciones en el archivo

Expone únicamente transiciones canónicas y rechaza saltos/terminales.

  • expone únicamente las transiciones canónicas permitidasL23
  • rechaza saltos y cambios desde estados terminalesL31
tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 2 vinculadas / 57 definiciones en el archivo

El comando autoritativo cancela, reagenda y conserva auditoría.

  • reagenda conservando el ID, auditoría y consulta; libera el horario anteriorL646
  • cancelar libera locks y permite reservar nuevamente el mismo horarioL924

Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPaciente
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
Casos
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
adminespecialistapaciente
Pasos
  1. Configurar un Tipo de cita con icono, color, duración, modalidad, instrucciones, guía, cuestionarios y registros previos; desactivar otro tipo y confirmar que sólo siga visible en históricos.
  2. Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
  3. Reprogramar y cambiar el tipo de la cita vinculada; recargar Agenda, ficha y consulta, y confirmar fecha, profesional, modalidad, tipo e iconografía idénticos.
Esperado
  • Tipos de cita gobierna agenda y consultas sin catálogos duplicados; las consultas siempre quedan vinculadas, la preparación se entrega por canales idempotentes y todas las superficies conservan el mismo historial. Los eventos Google conservan su identidad, distinguen si están solos o vinculados, precargan de forma segura el alta y nunca se duplican ni consumen una sesión por el mero vínculo. Un fallo de sync de Google no bloquea Agenda, nombra el calendario y la cuenta, y Integraciones diagnostica qué miembro y qué calendario perdieron acceso.

Fuente: test-cases.json · testCases[id=staff-appointment-authoritative-lifecycle]

Automatización
  • tests/integration/api/citas.test.ts · Agenda autoritativa 57/57 pruebas integración aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Registrar asistencia e inasistenciasAgenda → Detalle de citaFuncionalPor comprobarPor probarGES-20

Qué permite hacerIniciar o completar la atención y resolver ausencias con motivo e impacto sobre la sesión.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Agenda → Detalle de cita

Registrar asistencia e inasistencias

  • views.jsonstaff-agenda / inasistencia
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 2 vinculadas / 57 definiciones en el archivo

Aplica estados, consume sesión una vez y decide no_show/pago.

  • aplica la máquina de estados y consume una sesión exactamente una vezL942
  • mantiene no_show pendiente hasta que el equipo decide liberar la sesiónL1448

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialistaAsistenteRecepcionistaCron
Vistas y controles
  • VistaAgenda y citas/agenda/dashboard/pacientesAPI /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines
Casos
staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
adminnutriologocoachespecialistaasistenterecepcionistacron
Pasos
  1. Activar el flujo canónico sólo en HIXION y crear un contrato de tres sesiones; agendar tres citas y confirmar saldo incluidas 3, reservadas 3, consumidas 0, disponibles 0.
  2. Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
  3. Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
Esperado
  • El contrato conserva un saldo transaccional sin sobreagenda. Reagendar transfiere una reserva, cancelar la libera, completar la consume una vez y no_show espera decisión. Una cita bloqueada por pago sigue visible en rojo y conserva temporalmente horario/sesión, pero no puede iniciar. Un pago dentro del límite reactiva la misma cita; al superar 15 minutos, el cron cancela y un pago posterior exige una cita nueva. Todas las ramas quedan auditadas.

Fuente: test-cases.json · testCases[id=staff-appointment-entitlements-payment-gate]

Cobertura: Referencias parciales

Preparar la consultaCita → Preparación / Portal → CitaFuncionalPor comprobarPor probarGES-21

Qué permite hacerSeleccionar cuestionarios, instrucciones y adjuntos, y enviarlos por los canales disponibles.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Cita → Preparación / Portal → Cita

Preparar la consulta

  • views.jsonstaff-agenda / preparación
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 2 vinculadas / 57 definiciones en el archivo

Guarda instrucciones/solicitudes y preserva lo entregado al reeditar preparación.

  • guarda instrucciones y solicitudes, y descarta tipos desconocidosL1293
  • conserva lo que el paciente ya entregó al reeditar la preparaciónL1318

Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPaciente
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
Casos
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
adminespecialistapaciente
Pasos
  1. Configurar un Tipo de cita con icono, color, duración, modalidad, instrucciones, guía, cuestionarios y registros previos; desactivar otro tipo y confirmar que sólo siga visible en históricos.
  2. Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
  3. Reprogramar y cambiar el tipo de la cita vinculada; recargar Agenda, ficha y consulta, y confirmar fecha, profesional, modalidad, tipo e iconografía idénticos.
Esperado
  • Tipos de cita gobierna agenda y consultas sin catálogos duplicados; las consultas siempre quedan vinculadas, la preparación se entrega por canales idempotentes y todas las superficies conservan el mismo historial. Los eventos Google conservan su identidad, distinguen si están solos o vinculados, precargan de forma segura el alta y nunca se duplican ni consumen una sesión por el mero vínculo. Un fallo de sync de Google no bloquea Agenda, nombra el calendario y la cuenta, y Integraciones diagnostica qué miembro y qué calendario perdieron acceso.

Fuente: test-cases.json · testCases[id=staff-appointment-authoritative-lifecycle]

Cobertura: Referencias parciales

Responder cuestionarios y registros previosPortal → Cita y ProgresoFuncionalPor comprobarPor probarGES-22

Qué permite hacerEntregar respuestas, peso, medidas, documentos o fotos solicitados antes de la consulta.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Portal → Cita y Progreso

Responder cuestionarios y registros previos

  • views.jsonstaff-agenda / preparación
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos0 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/validations/cuestionario/cuestionario.validator.test.tsUnitarias / componentes · Cobertura parcial · 3 vinculadas / 11 definiciones en el archivo

Valida respuestas del chequeo, sin entrega portal previa a cita.

  • un check-in completo y en rango es válidoL22
  • rechaza digestión y mood fuera del enumL56
  • digestión y mood vacíos son requeridosL67

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Enviar recordatorios de citaAgenda / NotificacionesFuncionalPor comprobarPor probarGES-23

Qué permite hacerAvisar antes de la atención y ajustar los avisos cuando cambia o se cancela la cita.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Agenda / Notificaciones

Enviar recordatorios de cita

  • m1-funciones.mdM1-F08
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 2 vinculadas / 57 definiciones en el archivo

Programa, reagenda y cancela recordatorios; evita duplicarlos.

  • programa, reagenda y cancela recordatorios desde el comando autoritativoL275
  • deriva el recordatorio manual de cita y evita duplicarlo con la misma llaveL373

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialista
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/recordatorio-citaAPI /api/cron/dispatch/portal/citas/[citaId] · requiere cita
Casos
staff-appointment-reminders-authoritative · Recordatorios usan la cita autoritativa
adminespecialista
Pasos
  1. Crear una cita QA con recordatorio pendiente y registrar su fecha inicial y destinatario.
  2. Reprogramarla antes del despacho y confirmar que portal y Agenda muestran únicamente la fecha nueva.
  3. Ejecutar el recordatorio manual y el despachador programado; comprobar que ambos consultan la cita autoritativa.
Esperado
  • Cada recordatorio usa la fecha vigente y se envía una sola vez.

Fuente: test-cases.json · testCases[id=staff-appointment-reminders-authoritative]

Automatización
  • tests/integration/api/citas.test.ts · Recordatorios con correo simulado 57/57 pruebas integración aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Sincronizar Google CalendarAgenda / Configuración → IntegracionesFuncionalPruebas parcialesPor probarGES-24

Qué permite hacerConectar calendarios del equipo, consultar disponibilidad y conciliar citas y eventos.

Alcance
Solicitado
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La integración verificó ocupación externa, evento espejo con zona horaria y ausencia de duplicado; no acredita una sincronización con una cuenta Google real ni su configuración en pantalla.

Ubicación y referencia técnica

Agenda / Configuración → Integraciones

Sincronizar Google Calendar

  • views.jsonstaff-agenda / Google
  • README.mdCobertura focal de integración: Google busy y evento espejo
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAIntegración 2Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 2 vinculadas / 57 definiciones en el archivo

Integra disponibilidad/ocupación externa y evento espejo de Google.

  • bloquea disponibilidad explícita y ocupación externa de GoogleL569
  • vincula el evento espejo de Google por el comando autoritativo sin duplicarloL592
tests/unit/app/api/calendar-conciliacion.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 11 definiciones en el archivo

Conciliación conserva vínculo con Google y valida autorización/tenant.

  • guarda el vínculo y marca el evento en GoogleL66
  • ignorar no toca el evento en GoogleL99

Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPaciente
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
Casos
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
adminespecialistapaciente
Pasos
  1. Configurar un Tipo de cita con icono, color, duración, modalidad, instrucciones, guía, cuestionarios y registros previos; desactivar otro tipo y confirmar que sólo siga visible en históricos.
  2. Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
  3. Reprogramar y cambiar el tipo de la cita vinculada; recargar Agenda, ficha y consulta, y confirmar fecha, profesional, modalidad, tipo e iconografía idénticos.
Esperado
  • Tipos de cita gobierna agenda y consultas sin catálogos duplicados; las consultas siempre quedan vinculadas, la preparación se entrega por canales idempotentes y todas las superficies conservan el mismo historial. Los eventos Google conservan su identidad, distinguen si están solos o vinculados, precargan de forma segura el alta y nunca se duplican ni consumen una sesión por el mero vínculo. Un fallo de sync de Google no bloquea Agenda, nombra el calendario y la cuenta, y Integraciones diagnostica qué miembro y qué calendario perdieron acceso.

Fuente: test-cases.json · testCases[id=staff-appointment-authoritative-lifecycle]

Automatización
  • e2e/staging/integrations-longitudinal.spec.ts · Superficie Google Calendar

Cobertura: Referencias vinculadas

Registrar la consulta vinculada a la citaFicha → ConsultaFuncionalPruebas parcialesPor probarGES-25

Qué permite hacerGuardar notas, mediciones, cuestionarios y archivos de cada atención.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La cita y su consulta vinculada se crearon y reconciliaron de forma transaccional; falta comprobar el registro y consulta desde las vistas de atención.

Ubicación y referencia técnica

Ficha → Consulta

Registrar la consulta vinculada a la cita

  • views.jsonstaff-agenda / cita y consulta
  • README.mdBK-53; Cobertura focal de integración
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/citas.test.tsIntegración · Comportamiento directo · 2 vinculadas / 57 definiciones en el archivo

Crea la consulta asociada de forma transaccional e idempotente.

  • crea la cita en Firestore con el tenantId del actor y su consulta asociadaL209
  • crea una consulta faltante de forma transaccional e idempotenteL857

Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminEspecialistaPaciente
Vistas y controles
  • VistaAgenda y citas/agendaAPI /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
  • VentanaNueva consulta/pacientes/[id] · requiere paciente
Casos
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
adminespecialistapaciente
Pasos
  1. Configurar un Tipo de cita con icono, color, duración, modalidad, instrucciones, guía, cuestionarios y registros previos; desactivar otro tipo y confirmar que sólo siga visible en históricos.
  2. Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
  3. Reprogramar y cambiar el tipo de la cita vinculada; recargar Agenda, ficha y consulta, y confirmar fecha, profesional, modalidad, tipo e iconografía idénticos.
Esperado
  • Tipos de cita gobierna agenda y consultas sin catálogos duplicados; las consultas siempre quedan vinculadas, la preparación se entrega por canales idempotentes y todas las superficies conservan el mismo historial. Los eventos Google conservan su identidad, distinguen si están solos o vinculados, precargan de forma segura el alta y nunca se duplican ni consumen una sesión por el mero vínculo. Un fallo de sync de Google no bloquea Agenda, nombra el calendario y la cuenta, y Integraciones diagnostica qué miembro y qué calendario perdieron acceso.

Fuente: test-cases.json · testCases[id=staff-appointment-authoritative-lifecycle]

Automatización
  • tests/integration/api/citas.test.ts · Cita y consulta 57/57 pruebas integración aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Comunicar y dar seguimiento

007
Pruebas del flujo
14 pruebas vinculadas6 archivos4 casos QAIntegración 7Unitarias / componentes 7

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Conversar con contexto del pacienteChat del equipo y del pacienteFuncionalPor comprobarPor probarGES-26

Qué permite hacerConsultar expediente y asignar planes desde la conversación con el paciente.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Chat del equipo y /portal/chat

Conversar con contexto del paciente

  • m1-funciones.mdM1-F06
Cómo probar
Pruebas localizadas
4 pruebas vinculadas1 archivos1 casos QAIntegración 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/chat.rules.test.tsIntegración · Cobertura parcial · 4 vinculadas / 9 definiciones en el archivo

Cubre conversación canónica, participantes e identidad; no acciones de plan desde chat.

  • paciente crea únicamente su conversación canónicaL98
  • permite actualizar sólo estado operativo de la conversación canónicaL134
  • paciente crea mensajes sólo con su identidad y rol realesL139
  • staff crea mensajes sólo con su propio uidL147

Incidencias relacionadas por caso: 2 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialistaAsistente
Vistas y controles
  • VistaPacientes CRM y operación comercial/chat/pacientes/[id] · requiere paciente
Casos
staff-chat-profile-and-pipeline · Chat abre el perfil y permite operar el pipeline del paciente
adminnutriologocoachespecialistaasistente
Pasos
  1. Abrir /chat y seleccionar una conversación.
  2. Hacer clic en avatar, nombre o resumen de la cabecera y confirmar que abre el perfil del paciente correcto.
  3. Volver al chat, abrir la insignia de estado y comprobar que muestra las etapas visibles agrupadas según el pipeline configurado.
Esperado
  • La cabecera navega al perfil correcto y la insignia permite cambios de pipeline consistentes con el Kanban, con una acción directa de renovación y respeto estricto de permisos.

Fuente: test-cases.json · testCases[id=staff-chat-profile-and-pipeline]

Automatización
  • e2e/staging/golden-b-cross-role.spec.ts · Hilo paciente-profesional QA

Cobertura: Referencias vinculadas

Enviar archivos por chatChatFuncionalPor comprobarPor probarGES-27

Qué permite hacerCompartir imágenes, documentos y audio dentro de la conversación.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Chat

Enviar archivos por chat

  • features.jsonCOM-003
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/storage.rules.test.tsIntegración · Cobertura parcial · 2 vinculadas / 10 definiciones en el archivo

Cubre que adjuntos de conversaciones sean accesibles sólo por paciente/tenant.

  • paciente accede sólo a adjuntos de sus conversacionesL112
  • rechaza usuarios anónimos en archivos clínicos y chatL151

Incidencias relacionadas por caso: 0 en soporte · 6 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-chat-fullscreen-actions · Chat paciente abre vista completa con acciones de salud
paciente
Pasos
  1. Entrar como paciente desde móvil.
  2. Abrir Chat desde el dock o desde /portal/chat.
  3. Validar que se muestra una vista completa sin header global ni dock inferior.
Esperado
  • Chat navega como pantalla completa tipo WhatsApp, no abre drawer sobre el doc dinámico, permite volver con flecha, anima apertura/envío y el botón + muestra acciones de la app con regreso al chat tras registrar datos. Los adjuntos conservan nombre, MIME, tamaño y autorización en ambos sentidos. No leídos, badge, lectura y push coinciden por receptor y son idempotentes. Cita y Feedback crean señales estructuradas con CTAs para el especialista. Al salir de Chat sin mensajes pendientes, el dock dinámico vuelve a Progreso.

Fuente: test-cases.json · testCases[id=patient-chat-fullscreen-actions]

Cobertura: Referencias parciales

Responder el chequeo diarioPortal → CuestionarioFuncionalPor comprobarPor probarGES-28

Qué permite hacerRegistrar energía, digestión, ánimo, adherencia y notas breves.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Portal → Cuestionario

Responder el chequeo diario

  • m1-funciones.mdM1-F07
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos0 casos QAUnitarias / componentes 3Integración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/validations/cuestionario/cuestionario.validator.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 11 definiciones en el archivo

Valida los campos de energía/digestión/ánimo y notas del chequeo.

  • un check-in completo y en rango es válidoL22
  • rechaza digestión y mood fuera del enumL56
  • digestión y mood vacíos son requeridosL67
tests/integration/api/checkin-summary-materialization.test.tsIntegración · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Materializa las respuestas para seguimiento; no cubre el formulario portal.

  • materializa siete registros y el replay no reescribe la proyeccionL36

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles

Cobertura: Referencias parciales

Detectar señales y darles seguimientoDashboard / Ficha → CuestionariosFuncionalPor comprobarPor probarGES-29

Qué permite hacerVer semáforo de respuestas y recibir alertas por varios días con señales desfavorables.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Dashboard / Ficha → Cuestionarios

Detectar señales y darles seguimiento

  • m1-funciones.mdM1-F07
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/checkins/patient-checkin-summary.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 5 definiciones en el archivo

Construye resumen de siete días sin contenido clínico libre; no prueba alertas UI.

  • conserva sólo los siete registros recientes y omite contenido clínico libreL34
  • descarta entradas inválidas sin contaminar indicadoresL77

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaPacientes CRM y operación comercial/pacientes/[id] · requiere paciente
Casos
staff-patient-adherence-calorie-averages · Adherencia compara promedios históricos de kcal sin contar días vacíos
superadminadminnutriologocoachespecialista
Pasos
  1. Abrir la sección de rendimiento y adherencia de un paciente con versiones históricas y check-ins en fechas conocidas.
  2. Cambiar entre 7, 30 y 60 días y validar los promedios de kcal asignadas, consumidas y su diferencia.
  3. Confirmar que un día sin comidas registradas no entra en ninguno de los dos promedios.
Esperado
  • Los promedios de kcal asignadas y consumidas comparan el mismo conjunto de días registrados y comparables, descartan fechas vacías y excluyen —sin borrar el resto del rango— los días sin objetivo histórico válido o sin snapshot nutricional. Un registro parcial válido suma sólo lo registrado contra el objetivo completo y se declara como parcial. El resumen muestra su diferencia, precisión histórica, cobertura parcial, causas de exclusión y cuántos días lo componen en los rangos de 7, 30 y 60 días, tanto en la ficha clásica como en AAR. El rango de 90 días queda fuera hasta que el listener histórico derive su ventana completa del período seleccionado.

Fuente: test-cases.json · testCases[id=staff-patient-adherence-calorie-averages]

El caso vinculado cubre cálculos de adherencia; no acredita semáforo ni alertas por varios días.

Cobertura: Referencias parciales

Recibir avisos relevantesPortal y preferencias de notificaciónFuncionalPor comprobarPor probarGES-30

Qué permite hacerNotificar mensajes, citas y acciones de seguimiento según preferencias.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Portal y preferencias de notificación

Recibir avisos relevantes

  • features.jsonCOM-006
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos0 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/app/api/chat-notify.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 9 definiciones en el archivo

La ruta de notificación de chat está cubierta; no todas las preferencias/canales.

  • staff autorizado notifica sólo a usuarios portal vinculados al pacienteL187
  • rechaza notificar un hilo legacy o paralelo antes de reconciliarloL161

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Ver la operación diariaResumen diario del equipoFuncionalPor comprobarPor probarGES-31

Qué permite hacerReunir agenda, solicitudes de cita, conversaciones sin responder y pendientes del equipo.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Dashboard /dashboard

Ver la operación diaria

  • views.jsonstaff-dashboard-operations
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachEspecialistaAsistenteRecepcionista
Vistas y controles
Casos
staff-dashboard-daily-operations · Operación diaria concentra agenda, respuestas y seguimiento accionable
superadminadminnutriologocoachespecialistaasistenterecepcionista
Pasos
  1. Abrir Operación diaria como admin y validar todo, un especialista, varios especialistas y Sin asignar; repetir con rol especialista y confirmar scope forzado.
  2. Comparar mensajes sin leer contra conversaciones sin responder y enviar una respuesta del staff para limpiar sólo el segundo estado.
  3. Enviar una solicitud de cita desde el portal, abrir Agendar desde Seguimiento y confirmar que cancelar no la resuelve y guardar sí la resuelve.
Esperado
  • Operación diaria muestra únicamente trabajo accionable del alcance seleccionado, conserva el contexto del usuario y continúa funcional cuando Calendar o la actividad remota fallan temporalmente.

Fuente: test-cases.json · testCases[id=staff-dashboard-daily-operations]

Cobertura: Referencias parciales

Consultar indicadores de atenciónDashboard → MétricasFuncionalPruebas parcialesPor probarGES-32

Qué permite hacerVer pacientes activos, retención, inasistencias, actividad y seguimiento por profesional.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-09-23

La vista móvil de Métricas renderiza valores e indicador de activos. No se localizaron en esa superficie retención, inasistencias ni actividad; por ello no acredita el conjunto completo ni filtros de los indicadores solicitados.

Ubicación y referencia técnica

Dashboard → Métricas

Consultar indicadores de atención

  • m1-funciones.mdM1-F09
  • resultados.jsonresults[id=GES-32]
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Administrar servicios y cobros

0012
Pruebas del flujo
31 pruebas vinculadas13 archivos4 casos QAE2E 3Unitarias / componentes 24Integración 4

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Configurar paquetes y planes de servicioPagos → PlanesFuncionalPor comprobarPor probarGES-33

Qué permite hacerDefinir consultas incluidas, vigencia, modalidad, precio y opciones de pago.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos → Planes

Configurar paquetes y planes de servicio

  • views.jsonstaff-payments-billing / paquetes
Cómo probar
Pruebas localizadas
6 pruebas vinculadas2 archivos1 casos QAE2E 3Unitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/planes-servicio-manager.spec.tsE2E · Comportamiento directo · 3 vinculadas / 9 definiciones en el archivo

Cubre alta/edición/visibilidad/archivado-restauración de paquetes de servicio.

  • el interruptor publica el paquete entero, no una sola varianteL105
  • el diálogo de nuevo paquete cabe en móvil y su footer es alcanzableL115
  • CRUD: archivar una variante y volver a crearla deja el catálogo como estabaL138
tests/unit/app/api/planes-servicio-crud.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 17 definiciones en el archivo

La ruta crea, archiva y actualiza variantes del paquete.

  • crea el plan y su producto en Stripe, enlazadosL94
  • archiva sin borrar y lo retira del sitioL181
  • escribe la visibilidad en todas las variantes del paqueteL236

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminRecepcionista
Vistas y controles
  • VistaPagos, planes y suscripciones/pagosAPI /api/stripe/subscriptionsAPI /api/webhooks/stripe
Casos
staff-payments-stripe-contract-lifecycle · Contratación Stripe test activa precio, vigencia y consultas correctas
adminrecepcionista
Pasos
  1. Abrir /pagos?tab=cobros y confirmar que sólo muestra cobros o parcialidades pendientes, sin el formulario Cobro rápido desde catálogo.
  2. Abrir /pagos?tab=planes y confirmar que integra el estado de Stripe, el alta permitida por rol y el catálogo que antes sólo estaba en Configuración > Integraciones.
  3. Cambiar entre Panel, Cobros, Planes e Historial y confirmar que la URL conserva la pestaña elegida.
Esperado
  • Pagos separa la cobranza pendiente del control de planes, reutiliza la misma gestión Stripe de Configuración y conserva navegación directa por pestaña. Stripe usa el precio autoritativo, el webhook firmado crea una sola contratación y los errores mantienen disponible el historial sin exponer datos técnicos.

Fuente: test-cases.json · testCases[id=staff-payments-stripe-contract-lifecycle]

Cobertura: Referencias parciales

Asignar una contratación al pacientePagos / Ficha → Plan y pagoFuncionalPor comprobarPor probarGES-34

Qué permite hacerRelacionar persona, paquete, vigencia y consultas disponibles.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos / Ficha → Plan y pago

Asignar una contratación al paciente

  • dominio-comercial.md§3.2
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/app/api/pagos-manual.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 16 definiciones en el archivo

El cobro manual relaciona parcialidad/contrato y evita activar sin dinero registrado.

  • registra una parcialidad existente con su importe canonico sin crear otro planL174
  • ya no permite activar el contrato sin registrar dineroL366

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Controlar el saldo de consultasFicha, agenda y pagos del pacienteFuncionalPor comprobarPor probarGES-35

Qué permite hacerDistinguir sesiones incluidas, reservadas, consumidas y disponibles al agendar o atender.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ficha, CRM y Agenda

Controlar el saldo de consultas

  • views.jsonstaff-agenda / saldo canónico
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/citas/entitlements.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 6 definiciones en el archivo

Calcula saldo de consultas sin negativo y el contrato consumible.

  • deriva el saldo canónico de contratos legacyL15
  • resta reservadas y consumidas sin permitir saldo negativoL31
  • las citas nuevas solo eligen un contrato activaL83

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialistaAsistenteRecepcionistaCron
Vistas y controles
  • VistaAgenda y citas/agenda/dashboard/pacientesAPI /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines
Casos
staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
adminnutriologocoachespecialistaasistenterecepcionistacron
Pasos
  1. Activar el flujo canónico sólo en HIXION y crear un contrato de tres sesiones; agendar tres citas y confirmar saldo incluidas 3, reservadas 3, consumidas 0, disponibles 0.
  2. Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
  3. Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
Esperado
  • El contrato conserva un saldo transaccional sin sobreagenda. Reagendar transfiere una reserva, cancelar la libera, completar la consume una vez y no_show espera decisión. Una cita bloqueada por pago sigue visible en rojo y conserva temporalmente horario/sesión, pero no puede iniciar. Un pago dentro del límite reactiva la misma cita; al superar 15 minutos, el cron cancela y un pago posterior exige una cita nueva. Todas las ramas quedan auditadas.

Fuente: test-cases.json · testCases[id=staff-appointment-entitlements-payment-gate]

Cobertura: Referencias parciales

Gestionar parcialidades y vencimientosPagos / Ficha → PagosFuncionalPor comprobarPor probarGES-36

Qué permite hacerRelacionar cada pago con el servicio y sus citas, y recalcular vencimientos al reagendar.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos / Ficha → Pagos

Gestionar parcialidades y vencimientos

  • views.jsonstaff-payments-billing / parcialidades
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAIntegración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/appointment-installments.test.tsIntegración · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

Reconstruye enlaces cita-parcialidad, limpia previos y tolera reintentos.

  • reconstruye el orden completo, limpia enlaces previos y tolera reintentos concurrentesL20

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Registrar pagos externos con comprobantePagos → Registro manualFuncionalPor comprobarPor probarGES-37

Qué permite hacerRegistrar transferencia, Zelle o efectivo con importe, evidencia y responsable.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos → Registro manual

Registrar pagos externos con comprobante

  • views.jsonstaff-payments-billing / pagos externos
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/app/api/pagos-manual.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 16 definiciones en el archivo

Registra efectivo con recibo/nota/actor y vincula comprobante a transacción.

  • registra efectivo con recibo, nota y actor del servidor antes de activarL142
  • vincula el comprobante a la transaccion y lo marca consumidoL381

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
  • VentanaRegistrar pago manual/pacientes/[id]?tab=pagos · requiere paciente
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Compartir el enlace de un cobro pendienteCobros pendientes y seguimientoFuncionalPor comprobarPor probarGES-38

Qué permite hacerEnviar por WhatsApp el pago que corresponde al paciente sin duplicarlo.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Kanban, Dashboard y Pagos

Compartir el enlace de un cobro pendiente

  • views.jsonstaff-payments-billing / siguiente parcialidad
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/payments/whatsapp-payment-link.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 5 definiciones en el archivo

Selecciona la parcialidad pendiente y construye enlace/mensaje WhatsApp.

  • elige la parcialidad pendiente más próxima del plan activo más recienteL11
  • normaliza teléfonos mexicanos y construye el mensaje con la ligaL52
  • construye la liga CRM con precarga opaca y variante exactaL71

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminRecepcionista
Vistas y controles
  • VistaPagos, planes y suscripciones/dashboard/pacientesAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/webhooks/stripe
Casos
staff-patient-whatsapp-payment-link · Dashboard y Kanban comparten por WhatsApp la siguiente parcialidad y confirman el pago automáticamente
adminrecepcionista
Pasos
  1. Crear un paciente interesado con teléfono válido, seleccionar un Plan de interés y dejar vacíos peso, estatura y campos CRM opcionales como tipo de plan.
  2. Enviar desde Plan y pago; confirmar que el lead se guarda sin undefined y WhatsApp abre con la variante elegida.
  3. Abrir Más en su tarjeta y pulsar Enviar liga de pago a WhatsApp, arriba de Ver Perfil; confirmar que reutiliza el mismo Plan de interés guardado.
Esperado
  • Peso y estatura son opcionales en el drawer comercial y los campos CRM vacíos nunca llegan como undefined a Firestore. Plan y pago y el menú Más reutilizan la variante de interés guardada y abren WhatsApp al teléfono registrado con un Checkout de Stripe listo para pagar; cuando no existe una variante, Más y el acceso rápido del Dashboard eligen el plan pendiente más reciente y su parcialidad vencida o próxima. El Dashboard limita esta acción a quien tiene permiso Gestionar pagos. El servidor conserva tenant y monto autoritativos. Abrir la liga no cambia estados; sólo el webhook firmado de un pago confirmado registra una transacción idempotente, sincroniza estadoPago y mueve al interesado a Pagado.

Fuente: test-cases.json · testCases[id=staff-patient-whatsapp-payment-link]

Cobertura: Referencias parciales

Consultar pagos e historial de transaccionesPagos / Portal → PagosFuncionalPor comprobarPor probarGES-39

Qué permite hacerRevisar estado, importes, comprobantes y movimientos del servicio.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos / Portal → Pagos

Consultar pagos e historial de transacciones

  • features.jsonPAY-005
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/pagos/metodo-pago.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 10 definiciones en el archivo

Agrupa transacciones y reembolsos por método; no prueba la vista de historial.

  • agrupa lo cobrado por métodoL48
  • los reembolsos restan del total de su métodoL70

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminRecepcionista
Vistas y controles
  • VistaPagos, planes y suscripciones/pagosAPI /api/stripe/subscriptionsAPI /api/webhooks/stripe
Casos
staff-payments-stripe-contract-lifecycle · Contratación Stripe test activa precio, vigencia y consultas correctas
adminrecepcionista
Pasos
  1. Abrir /pagos?tab=cobros y confirmar que sólo muestra cobros o parcialidades pendientes, sin el formulario Cobro rápido desde catálogo.
  2. Abrir /pagos?tab=planes y confirmar que integra el estado de Stripe, el alta permitida por rol y el catálogo que antes sólo estaba en Configuración > Integraciones.
  3. Cambiar entre Panel, Cobros, Planes e Historial y confirmar que la URL conserva la pestaña elegida.
Esperado
  • Pagos separa la cobranza pendiente del control de planes, reutiliza la misma gestión Stripe de Configuración y conserva navegación directa por pestaña. Stripe usa el precio autoritativo, el webhook firmado crea una sola contratación y los errores mantienen disponible el historial sin exponer datos técnicos.

Fuente: test-cases.json · testCases[id=staff-payments-stripe-contract-lifecycle]

Cobertura: Referencias parciales

Cobrar en línea y confirmar el resultadoPago en línea y confirmaciónFuncionalPor definirPor definirGES-40

Qué permite hacerProcesar checkout o suscripción y reflejar pagos confirmados y fallidos.

Alcance
Por conciliar
Registro de origen
Por definir
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La Orden de mayo excluye pagos en línea; el Estatuto y documentos técnicos los contemplan. Requiere conciliación, no se considera obligación aceptada.

Ubicación y referencia técnica

Captación, Stripe y pantalla de resultado

Cobrar en línea y confirmar el resultado

  • views.jsonstaff-payments-billing / checkout
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos2 casos QAUnitarias / componentes 5

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/app/api/stripe-checkout-authority.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 5 definiciones en el archivo

Checkout deriva precio/identidad de obligación o catálogo y rechaza manipulaciones.

  • rechaza monto y concepto libres sin obligacion ni precio de catalogoL120
  • deriva exactamente el monto de la parcialidad pendienteL166
  • rechaza una parcialidad pagada o de otro workspaceL187
tests/unit/lib/payments/public-checkout-status.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 3 definiciones en el archivo

El resultado público espera pago persistido y distingue fallo/expiración.

  • no confía en el regreso del navegador y espera el pago persistidoL6
  • distingue fallos, expiración e incidentesL16

Incidencias relacionadas por caso: 0 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminRecepcionistaPublicoNutriólogoEspecialistaAsistenteStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/pagosAPI /api/stripe/subscriptionsAPI /api/webhooks/stripe
Casos
staff-payments-stripe-contract-lifecycle · Contratación Stripe test activa precio, vigencia y consultas correctas
adminrecepcionista
Pasos
  1. Abrir /pagos?tab=cobros y confirmar que sólo muestra cobros o parcialidades pendientes, sin el formulario Cobro rápido desde catálogo.
  2. Abrir /pagos?tab=planes y confirmar que integra el estado de Stripe, el alta permitida por rol y el catálogo que antes sólo estaba en Configuración > Integraciones.
  3. Cambiar entre Panel, Cobros, Planes e Historial y confirmar que la URL conserva la pestaña elegida.
Esperado
  • Pagos separa la cobranza pendiente del control de planes, reutiliza la misma gestión Stripe de Configuración y conserva navegación directa por pestaña. Stripe usa el precio autoritativo, el webhook firmado crea una sola contratación y los errores mantienen disponible el historial sin exponer datos técnicos.

Fuente: test-cases.json · testCases[id=staff-payments-stripe-contract-lifecycle]

public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Vistas:/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Resolver adeudos y excepciones de atenciónPagos y agenda del pacienteFuncionalPor comprobarPor probarGES-41

Qué permite hacerAvisar vencimientos, bloquear o liberar citas y registrar autorizaciones extraordinarias.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos, Agenda y CRM

Resolver adeudos y excepciones de atención

  • views.jsonstaff-agenda y staff-payments-billing / bloqueo por pago
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/app/api/cron-billing-enforcement.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 7 definiciones en el archivo

Marca deuda, suspensión y bloqueo de citas con reintentos.

  • a +5 en HIXION agrega suspension de acceso revalidadaL116

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialistaAsistenteRecepcionistaCron
Vistas y controles
  • VistaAgenda y citas/agenda/dashboard/pacientesAPI /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines
Casos
staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
adminnutriologocoachespecialistaasistenterecepcionistacron
Pasos
  1. Activar el flujo canónico sólo en HIXION y crear un contrato de tres sesiones; agendar tres citas y confirmar saldo incluidas 3, reservadas 3, consumidas 0, disponibles 0.
  2. Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
  3. Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
Esperado
  • El contrato conserva un saldo transaccional sin sobreagenda. Reagendar transfiere una reserva, cancelar la libera, completar la consume una vez y no_show espera decisión. Una cita bloqueada por pago sigue visible en rojo y conserva temporalmente horario/sesión, pero no puede iniciar. Un pago dentro del límite reactiva la misma cita; al superar 15 minutos, el cron cancela y un pago posterior exige una cita nueva. Todas las ramas quedan auditadas.

Fuente: test-cases.json · testCases[id=staff-appointment-entitlements-payment-gate]

Cobertura: Referencias parciales

Cambiar de paquete y conservar el historialPagos → Cambio de paqueteFuncionalPor comprobarPor probarGES-42

Qué permite hacerCerrar el servicio anterior, tratar sesiones pendientes y aplicar saldo a favor según reglas acordadas.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos → Cambio de paquete

Cambiar de paquete y conservar el historial

  • dominio-comercial.md§3.2 recambio de contratación
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos0 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/pagos/saldo-cambio-paquete.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 12 definiciones en el archivo

Cierra contrato previo, acredita saldo una vez y congela citas según reglas.

  • cierra la activa previa, acredita una vez y no copia citasL78
  • no vuelve a acreditar un contrato que ya tiene saldoAcreditadoMontoL122

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Gestionar cancelaciones, reembolsos y disputasPagos y seguimiento comercialFuncionalPor comprobarPor probarGES-43

Qué permite hacerReflejar el efecto sobre cobro, contrato, acceso y citas sin perder trazabilidad.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Pagos y CRM

Gestionar cancelaciones, reembolsos y disputas

  • views.jsonstaff-payments-billing / reembolsos
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/payments/commercial-payment-transition.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 6 definiciones en el archivo

Cubre disputa y reembolso parcial en la proyección comercial, no UX completa de cancelación.

  • reembolso parcial conserva contrato y acceso mientras abre revisionL187

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Suspender y restablecer el accesoFicha / Acceso suspendidoFuncionalPor comprobarPor probarGES-44

Qué permite hacerRegistrar motivo y autorización y comprobar elegibilidad para volver a entrar.

Alcance
Por conciliar
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ficha / Acceso suspendido

Suspender y restablecer el acceso

  • views.jsonstaff-payments-billing / gestionar_acceso
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos1 casos QAIntegración 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/patient-access-control.test.tsIntegración · Comportamiento directo · 3 vinculadas / 4 definiciones en el archivo

Suspende/restablece con motivo, permiso y elegibilidad de pago/contrato.

  • restablece acceso sólo después de revalidar pago y contrato, con idempotenciaL80
  • exige gestionar_acceso y un motivo explícitoL106
  • suspende manualmente y no depende de un cambio de pagoL122

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PublicoAdminNutriólogoEspecialistaAsistenteRecepcionistaStripe WebhookCron
Vistas y controles
  • VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientesAPI /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/prefillAPI /api/captacion/[tenantSlug]/checkoutAPI /api/captacion/[tenantSlug]/checkout/statusAPI /api/pacientes/[pacienteId]/accessAPI /api/pacientes/[pacienteId]/payment-linkAPI /api/pagos/manualAPI /api/pagos/manual/evidenceAPI /api/enviar-accesoAPI /api/cron/billingAPI /api/stripe/checkoutAPI /api/webhooks/stripe
  • VentanaSuspender acceso del paciente / Restablecer acceso del paciente/pacientes/[id] · requiere paciente
Casos
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
publicoadminnutriologoespecialistaasistenterecepcionistastripe-webhookcron
Pasos
  1. Completar el formulario público, pulsar Quiero pagar y confirmar catálogo de diez variantes, datos precargados y token opaco sin PII visible; repetir desde una liga enviada por CRM con la variante preseleccionada.
  2. Intentar usar un token expirado, revocado, malformado o de otro workspace y manipular plan, modalidad, parcialidades e importe en el navegador; confirmar rechazo o cálculo canónico del servidor.
  3. Pagar con Stripe test una variante aprobada y repetir checkout/webhook; confirmar metadata workspace-paciente-plan-modalidad-intento, una sola transacción/contratación y etapa Pago confirmado · falta agendar.
Esperado
  • El formulario y las ligas CRM precargan datos mediante token opaco expirable; catálogo, importe, parcialidades y estado salen del servidor. Stripe y pagos manuales son idempotentes y tenant-safe. El primer pago válido activa la contratación y deja al paciente pagado sin cita; el acceso sólo se envía después mediante una acción autorizada y completar onboarding lo activa con evento atómico. En HIXION, una suspensión corta portal, APIs y archivos privados; pagar no restaura, y sólo una acción autorizada con elegibilidad vigente lo hace de forma idempotente y auditable.

Fuente: test-cases.json · testCases[id=public-commercial-prefill-payment-access-lifecycle]

Cobertura: Referencias parciales

Administrar equipo y ayuda

023
Pruebas del flujo
10 pruebas vinculadas7 archivos3 casos QAIntegración 4E2E 3Unitarias / componentes 3

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Invitar y asignar profesionalesConfiguración → Equipo / FichaFuncionalPor comprobarPor probarGES-45

Qué permite hacerIncorporar miembros del equipo y repartir pacientes entre sus responsables.

Alcance
Base contratada
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Configuración → Equipo / Ficha

Invitar y asignar profesionales

  • m1-funciones.mdM1-F10
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAIntegración 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/role-change.test.tsIntegración · Comportamiento directo · 3 vinculadas / 14 definiciones en el archivo

Cambia rol, audita y protege invariantes del equipo/tenant.

  • cambia el rol y deja auditoría en una transacciónL88
  • asigna un rol propio del workspaceL109
  • no cruza tenantsL205
tests/integration/api/staff-assignments.test.tsIntegración · Cobertura parcial · 1 vinculadas / 15 definiciones en el archivo

Cubre permisos por especialidad al asignar, no invitación UI.

  • aplica permisos por especialidad a nutrición y rutinaL136

Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachAsistenteRecepcionistaRol PersonalizadoPaciente
Vistas y controles
Casos
auth-role-routing · Roles principales mantienen permisos esperados
superadminadminnutriologocoachasistenterecepcionistarol-personalizadopaciente
Pasos
  1. Iniciar sesión con cada rol configurado en staging.
  2. Validar redirect inicial y navegación principal.
  3. Abrir rutas permitidas y rutas restringidas por rol.
Esperado
  • Cada rol accede sólo a las rutas permitidas; un rol personalizado vigente puede completar su registro, cargar su perfil e iniciar sesión con los permisos definidos por el workspace. Las rutas restringidas muestran bloqueo o redirect sin render parcial sensible. Una cuenta inactiva no puede iniciar sesión, pierde acceso a APIs y datos del workspace y cualquier liga protegida la expulsa a login sin renderizar contenido. Un administrador puede cambiar el rol de cualquier otro integrante desde Miembros, incluidos roles propios del workspace, pero nunca el suyo; el cambio exige justificación y se refleja de inmediato.

Fuente: test-cases.json · testCases[id=auth-role-routing]

Cobertura: Referencias parciales

Configurar roles y permisosConfiguración → Roles y permisosFuncionalPruebas parcialesPor probarGES-46

Qué permite hacerDelimitar quién consulta datos clínicos, gestiona cobros, asigna planes y administra accesos.

Alcance
Base contratada
Registro de origen
Por comprobar
Prueba parcial · 2026-07-20

La matriz de roles fue ejercitada en UI, API, Firestore y Storage, con rechazo visible al persistir; el retest visual autenticado de la configuración quedó pendiente.

Ubicación y referencia técnica

Configuración → Roles y permisos

Configurar roles y permisos

  • m1-funciones.mdM1-F10
  • README.mdBK-72; Pruebas ejecutadas; Gate visual pendiente
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAE2E 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/roles-matrix-toggle.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

El cambio guardado de permiso abre/cierra la ruta real.

  • apagar y volver a encender un permiso abre y cierra su rutaL84
e2e/staging/roles-custom-lifecycle.spec.tsE2E · Comportamiento directo · 2 vinculadas / 2 definiciones en el archivo

Crea, persiste y elimina un rol propio; bloquea reservado.

  • crear, persistir y eliminar un rol propioL98
  • rechaza un identificador reservadoL156

Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
SuperadminAdminNutriólogoCoachAsistenteRecepcionistaRol PersonalizadoPaciente
Vistas y controles
Casos
auth-role-routing · Roles principales mantienen permisos esperados
superadminadminnutriologocoachasistenterecepcionistarol-personalizadopaciente
Pasos
  1. Iniciar sesión con cada rol configurado en staging.
  2. Validar redirect inicial y navegación principal.
  3. Abrir rutas permitidas y rutas restringidas por rol.
Esperado
  • Cada rol accede sólo a las rutas permitidas; un rol personalizado vigente puede completar su registro, cargar su perfil e iniciar sesión con los permisos definidos por el workspace. Las rutas restringidas muestran bloqueo o redirect sin render parcial sensible. Una cuenta inactiva no puede iniciar sesión, pierde acceso a APIs y datos del workspace y cualquier liga protegida la expulsa a login sin renderizar contenido. Un administrador puede cambiar el rol de cualquier otro integrante desde Miembros, incluidos roles propios del workspace, pero nunca el suyo; el cambio exige justificación y se refleja de inmediato.

Fuente: test-cases.json · testCases[id=auth-role-routing]

Automatización
  • e2e/staging/roles-matrix-toggle.spec.ts · Matriz de permisos reversible

Cobertura: Referencias vinculadas

Buscar pacientes y recursosBúsqueda del equipoFalta habilitar recetas y ejercicios en la búsqueda general.FuncionalLímite observadoPendiente documentadoGES-47

Qué permite hacerLocalizar pacientes, recetas, ejercicios y otros recursos desde la búsqueda global.

Alcance
Documentado en producto
Registro de origen
2026-09-23
Prueba parcial · 2026-09-23

La búsqueda global abre y acepta la consulta del paciente sintético QA, pero no devolvió su resultado ni permitió abrir la ficha. Pacientes está habilitado; Recetas y Ejercicios permanecen deshabilitados.

Ubicación y referencia técnica

Búsqueda del equipo

Buscar pacientes y recursos

  • features.jsonSEARCH-001
  • resultados.jsonresults[id=GES-47]
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/search/patient-picker.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 8 definiciones en el archivo

Busca pacientes por nombre/correo/etiquetas y evita sugerencias ambiguas.

  • busca por nombre, correo y etiquetas con varios términosL29
tests/unit/lib/search/patient-visibility.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 3 definiciones en el archivo

Excluye archivados de búsqueda, filtros y recomendaciones.

  • excluye pacientes archivados antes de recomendaciones, búsqueda y filtrosL10

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
Casos
staff-spotlight-catalog-search · Búsqueda global encuentra pacientes, recetas y ejercicios permitidos
adminnutriologocoachespecialista
Pasos
  1. Abrir Buscar desde el panel o con Cmd/Ctrl+K en el workspace HIXION y usar datos QA.
  2. Buscar por nombre o correo un paciente sintético activo y abrir su ficha.
  3. Seleccionar Recetas y Ejercicios, buscar un elemento permitido y abrir su detalle.
  4. Repetir con un rol que no tenga acceso a una de esas entidades; comprobar que respeta su permiso.
Esperado
  • La búsqueda cubre las entidades incluidas en GES-47 y SEARCH-001 conforme al permiso del rol, y abre el recurso correcto. Una entidad todavía no implementada debe figurar como alcance pendiente, sin presentarse como validada.

Fuente: test-cases.json · staff-spotlight-catalog-search

Cobertura: Referencias parciales

Reportar y consultar incidencias de soportePortal → Soporte / Soporte del equipoFuncionalPruebas parcialesPor probarGES-48

Qué permite hacerEnviar un problema con evidencia y seguir su conversación e historial privado.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Prueba parcial · 2026-09-23

La entrada de soporte y el acceso al historial están visibles. No se llenó, envió ni consultó contenido de tickets, así que no acredita el flujo completo.

Ubicación y referencia técnica

Portal → Soporte / Soporte del equipo

Reportar y consultar incidencias de soporte

  • features.jsonAPP-008
  • resultados.jsonresults[id=GES-48]
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/app/api/soporte-create.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 12 definiciones en el archivo

La ruta de soporte crea la incidencia bajo su contrato público.

  • confirma el envío cuando el ticket sí se guardóL98

Incidencias relacionadas por caso: 1 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteSuperadminAdminNutriólogoCoachEspecialista
Vistas y controles
Casos
patient-staff-support-intake-history · Soporte móvil separa registro del paciente y seguimiento del equipo
pacientesuperadminadminnutriologocoachespecialista
Pasos
  1. Abrir el selector dinámico del paciente y confirmar el orden Suplementos, Progreso, Pagos, Historial, Perfil, Configuración, Chat y Soporte técnico.
  2. Desde el menú hamburguesa y el dock móvil entrar a Soporte y confirmar que abre directamente el registro, conservando la sección de origen; las opciones de clasificación tienen el mismo ancho y Ver mis tickets aparece encima del campo de texto.
  3. Iniciar un reporte con evidencia, recargar y confirmar que el borrador se restaura; enviarlo dos veces y validar un solo ticket. Después de registrarlo, Cerrar regresa a la sección de origen.
Esperado
  • Paciente entra directamente al registro desde la navegación móvil, puede abrir sus tickets desde el chat y Cerrar vuelve a la sección de origen; las opciones de clasificación mantienen el mismo ancho. Sólo consulta sus conversaciones persistentes; staff móvil alterna alta y seguimiento, distingue Reportado por de Responsable y filtra responsables textuales sin tratarlos como cuentas; Falla parcial aparece en morado entre bloqueo y área de oportunidad.

Fuente: test-cases.json · testCases[id=patient-staff-support-intake-history]

Cobertura: Referencias parciales

Consultar tutoriales de usoAyuda · ubicación por confirmarLa entrega de los tutoriales de uso sigue sin acreditarse.FuncionalEntrega pendientePendiente documentadoGES-49

Qué permite hacerAcceder a guías pregrabadas dentro de la plataforma.

Alcance
Compromiso documentado
Registro de origen
2026-09-02
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Compromiso registrado como abierto al corte de septiembre; no se comprobó su estado actual.

Ubicación y referencia técnica

Ayuda; ubicación por confirmar

Consultar tutoriales de uso

  • REGISTRO-UNICO.mdD-2, 17-jun
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Cobertura: Sin caso vinculado

Área 03

Nutrición

26funciones

Evaluar · Preparar · Entregar · Ajustar · Dar seguimiento

Contexto de prueba4 roles · 9 vistas
Roles
AdminNutriólogoEspecialistaPaciente
Vistas
Pruebas del área
88 pruebas vinculadas36 archivos11 casos QAUnitarias / componentes 52Integración 18E2E 18

Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.

Evaluar necesidades nutricionales

201
Pruebas del flujo
15 pruebas vinculadas5 archivos1 casos QAUnitarias / componentes 12E2E 3

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Calcular requerimientosCrear plan → CálculoFuncionalValidada en versión localRevisadaM1-F02.a

Qué permite hacerEl nutriólogo calcula TMB, gasto energético y metas de calorías y macronutrientes desde los datos del paciente.

Alcance
Base contratada
Registro de origen
Código leído
✓ Validada en versión local · 2026-09-23

El wizard mostró TMB, gasto y macros; cambiar la fórmula cambió el resultado. Katch-McArdle y Cunningham tomaron la medición reciente. Se aprobaron los casos 01, 02 y BK-01, además de las pruebas actuales de cálculo.

El Estatuto exige contraste manual con desviación menor a 1%; las pruebas listadas son cobertura prevista, no aceptación acreditada aquí.

Ubicación y referencia técnica

Crear plan → Cálculo

Calcular requerimientos

  • m1-funciones.mdM1-F02
  • M06-plan-nutricional.jsonF-M09-02 y F-M09-03
  • paso-1-dietocalculo.tsxPaso 1; cálculo TMB/GET/macros
  • lote-nutricion-detallado.jsonWizard 01/02/08/09/10/11 + BK-01: 7 aprobadas
  • crear-dieta-wizard.spec.tsCasos indicados; comprobaciones UI y de borrador
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3E2E 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/tmb.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 22 definiciones en el archivo

Calcula TMB, GET, ETA y macros para fórmulas y datos clínicos disponibles.

  • usa Mifflin-St Jeor como fórmula por defectoL45
  • GET de TMB %s con factor %s = %s kcalL78parametrizada, sin expandir
  • convierte porcentajes a gramos con 4 kcal/g (CHO y PROT) y 9 kcal/g (grasas)L95
e2e/staging/crear-dieta-wizard.spec.tsE2E · Comportamiento directo · 2 vinculadas / 13 definiciones en el archivo

El wizard muestra cálculo y cambia el resultado al cambiar fórmula.

  • 01 — Calculo mantiene resumen y editores clinicos compactosL321
  • 02 — Forma de calculo modifica el resultado numerico documentadoL338

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
  • VentanaTMB y actividad/pacientes/[id]/crear-plan · requiere paciente
  • VentanaMacros/pacientes/[id]/crear-plan · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard de dieta 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Cuadrar meta diariaCrear plan → Grupos, Distribución y Vista finalFuncionalPruebas parcialesPor probarM1-F02.b

Qué permite hacerEl asistente compara porciones, distribución y recetas contra las metas energéticas y de macronutrientes antes de asignar.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

Se comprobó la comparación de porciones y distribución con el objetivo energético. Falta cerrar el recorrido completo con recetas y metas de macronutrientes antes de asignar.

No se trata como prueba de que todo el flujo complete correctamente para un paciente real.

Ubicación y referencia técnica

Crear plan → Grupos, Distribución y Vista final

Cuadrar meta diaria

  • m1-funciones.mdM1-F02
  • M06-plan-nutricional.jsonF-M09-04, F-M09-06 y bloqueadores de Asignar plan
  • page.tsxrenderiza pasos 1–5
  • lote-nutricion-detallado.jsonWizard 01/02/08/09/10/11 + BK-01: 7 aprobadas
  • crear-dieta-wizard.spec.tsCasos indicados; comprobaciones UI y de borrador
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 5

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/nutrition-calorie-comparison.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 6 definiciones en el archivo

Compara kcal de porciones, distribución y recetas sin inventar kcal faltantes.

  • cada incremento de 0.5 porción cambia las kcal SMAE del grupoL64
  • suma distribución completa y recetas por separadoL71
  • reporta recetas faltantes sin inventar kcalL86
tests/unit/lib/calculations/receta-match-status.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 16 definiciones en el archivo

Expone estado de compatibilidad de receta con kcal/grupos y agrega tiempos completos.

  • con una receta dentro del objetivo el tiempo queda en successL125
  • degrada a warning cuando las kcal cuadran pero falta un grupo del tiempoL178

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard de dieta 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Asignar porciones SMAECrear plan → Grupos de alimentosFuncionalValidada en versión localRevisadaM1-F02.c

Qué permite hacerEl nutriólogo traduce la meta a porciones de grupos SMAE y el sistema propone o valida su reparto.

Alcance
Base contratada
Registro de origen
Código leído
✓ Validada en versión local · 2026-09-23

En Crear dieta → Grupos, Sugerir porciones calculó un reparto SMAE con energía positiva y lo conservó en el borrador del paciente QA. El diálogo explicó objetivo, restricciones, preferencias y ajustes. Las pruebas actuales del cálculo de porciones también pasaron.

La ficha QA registra 15 grupos de porción y 16 valores de alta; el compromiso histórico hablaba de 9 grupos, por lo que el criterio aceptable debe resolverse.

Ubicación y referencia técnica

Crear plan → Grupos de alimentos

Asignar porciones SMAE

  • m1-funciones.mdM1-F02 y M1-F03
  • M06-plan-nutricional.jsonF-M09-04; tabla Valor de una porción
  • paso-2-grupos-alimentos.tsxPaso 2
  • lote-nutricion-detallado.jsonWizard 07: 1 aprobada
  • crear-dieta-wizard.spec.tsCaso 07, observación UI y persistencia del borrador
  • unit-results.jsonporciones.test.ts y porciones-sugeridas.test.ts: aprobadas
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 4E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/porciones-sugeridas.test.tsUnitarias / componentes · Comportamiento directo · 4 vinculadas / 15 definiciones en el archivo

El solver propone porciones enteras con restricciones clínicas/preferencias y explicación.

  • solo devuelve porciones enteras y no negativasL58
  • restricción vegana deja AOA y lácteos en 0L176
  • el rechazo total por preferencias reduce el grupo pero no lo bloquea clínicamenteL201
  • las preferencias positivas se reportan en la explicación sin romper el presupuesto calóricoL222
e2e/staging/crear-dieta-wizard.spec.tsE2E · Comportamiento directo · 1 vinculadas / 13 definiciones en el archivo

El caso 07 solicita porciones y observa el borrador autollenado; no asigna el plan final.

  • 07 — Happy path: autollenado de porciones queda documentado y guardadoL525

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
  • VentanaDetalle de la sugerencia/pacientes/[id]/crear-plan · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard de dieta 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Preparar recetas y menús

005
Pruebas del flujo
15 pruebas vinculadas5 archivos2 casos QAUnitarias / componentes 9Integración 6

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Gestionar el recetarioRecetasFuncionalCódigo leídoPor probarM1-F03.d

Qué permite hacerCrear, buscar, editar y retirar recetas con ingredientes, preparación, porciones y cálculo nutricional.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Incluye altas, cambios y retiro de catálogo como un solo ciclo funcional; no implica que modificar una receta ya asignada conserve necesariamente cada plan histórico.

Ubicación y referencia técnica

Recetas /recetas

Gestionar el recetario

  • M12-catalogos-nutricion.jsonF-M12-01 a F-M12-12
  • page.tsxruta de recetario
  • page.tsxruta de ingredientes
Cómo probar
Pruebas localizadas
6 pruebas vinculadas2 archivos0 casos QAUnitarias / componentes 5Integración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/validations/receta/receta.validator.test.tsUnitarias / componentes · Cobertura parcial · 5 vinculadas / 12 definiciones en el archivo

Valida receta, ingredientes y preparación, no CRUD completo de catálogo.

  • receta completa y correcta es válidaL18
  • exige al menos un ingredienteL28
  • la preparación es texto libre: acepta paréntesis, comillas y signosL61
  • acepta preparación como arreglo de pasos (formato nuevo)L81
  • rechaza más de 50 pasos de preparaciónL88
tests/integration/rules/catalogos.rules.test.tsIntegración · Cobertura parcial · 1 vinculadas / 12 definiciones en el archivo

Reglas cubren lectura y copy-on-write de recetas, no la pantalla de recetario.

  • recetas: staff A NO secuestra un doc global sin campo tenantIdL102

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
Automatización
  • e2e/staging/light-mode-catalogos.spec.ts · Recetario de lectura

Cobertura: Referencias parciales

Gestionar ingredientes y porciones SMAEIngredientes y porcionesFuncionalPor comprobarPor probarNUT-01

Qué permite hacerCrear, buscar, corregir y retirar ingredientes con grupo, cantidad de porción y macronutrientes.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ingredientes /ingredientes

Gestionar ingredientes y porciones SMAE

  • M12-catalogos-nutricion.jsonF-M12-01 a F-M12-04
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos0 casos QAUnitarias / componentes 3Integración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/validations/ingrediente/ingrediente.validator.test.tsUnitarias / componentes · Cobertura parcial · 3 vinculadas / 11 definiciones en el archivo

Valida cantidad, macros, grupo SMAE y micros del ingrediente, no el CRUD de pantalla.

  • un ingrediente completo con micros vacíos es válidoL48
  • rechaza grupo y unidad fuera de catálogoL99
  • valida rangos de micronutrientes opcionales cuando vienenL115
tests/integration/rules/catalogos.rules.test.tsIntegración · Cobertura parcial · 1 vinculadas / 12 definiciones en el archivo

Protege escritura copy-on-write del catálogo dual.

  • $col: staff A SI crea docs con visibleTo [su tenant]L58parametrizada, sin expandir

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles

Cobertura: Referencias parciales

Distinguir catálogo global y propioIngredientes, Recetas y DietasFuncionalPor comprobarPor probarNUT-03

Qué permite hacerConsultar el origen del contenido y modificar únicamente lo permitido para el equipo.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Ingredientes, Recetas y Dietas

Distinguir catálogo global y propio

  • M12-catalogos-nutricion.jsonF-M12-11
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAIntegración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/rules/catalogos.rules.test.tsIntegración · Comportamiento directo · 2 vinculadas / 12 definiciones en el archivo

Reglas explícitas de lectura global/tenant y escritura copy-on-write.

  • $col: docs globales son legibles por staff de cualquier tenantL39parametrizada, sin expandir
  • $col: staff A NO modifica un doc global (con tenantId hixion)L86parametrizada, sin expandir

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/dietas/plantillas/[templateId]/editar · requiere dato de contexto
Casos
nutrition-diet-library-visual-programs · Biblioteca de Dietas muestra programas visuales y accionables
nutriologoespecialistaadmin
Pasos
  1. Abrir Dietas y mantener activa la pestaña Programas.
  2. Revisar una plantilla global, una propia y una legacy sin imagen.
  3. Confirmar preview de hasta tres menús o recetas y fallback neutro cuando falte media.
Esperado
  • Las tarjetas conservan origen, categoría, patología, menús, kcal, macros y objetivo; presentan previews legibles y exponen siempre Ver y asignar, Editar y Eliminar. Los permisos mantienen las globales en sólo lectura para roles normales y permiten gestionarlas a superadmin. Editar hidrata la plantilla elegida y Guardar cambios actualiza el mismo documento desde cualquier paso, con confirmación visible y sin chocar con el FAB.

Fuente: test-cases.json · testCases[id=nutrition-diet-library-visual-programs]

Cobertura: Referencias parciales

Revisar recetas creadas por pacientesRecetas → PacientesFuncionalPor comprobarPor probarNUT-04

Qué permite hacerRevisar platillos propuestos y decidir si se incorporan al catálogo compartido.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Recetas → Pacientes

Revisar recetas creadas por pacientes

  • M12-catalogos-nutricion.jsonF-M12-12
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoEspecialista
Vistas y controles
Casos
patient-created-recipes-mobile · Paciente crea recetas privadas desde Dieta
pacienteadminnutriologoespecialista
Pasos
  1. Entrar como paciente con plan activo y abrir Dieta.
  2. Abrir Cambiar platillo y confirmar que Captura libre ya no aparece como acceso independiente sobre la lista de comidas.
  3. Abrir Captura libre desde Cambiar platillo y registrar foto, descripción y kcal para ese tiempo de comida.
Esperado
  • Cambiar platillo concentra captura libre, creación y reutilización de platillos propios; el paciente sólo guarda o reutiliza recetas dentro de sus porciones permitidas. Las recetas son privadas para ese paciente, notifican al especialista, aparecen en el filtro Pacientes del recetario y el calendario distingue creadas, modificadas, consumidas y pendientes.

Fuente: test-cases.json · testCases[id=patient-created-recipes-mobile]

Cobertura: Referencias parciales

Reutilizar plantillasDietas → Programas y menús reutilizablesFuncionalCódigo leídoPor probarM1-F03.e

Qué permite hacerCrear y editar menús de un día y programas completos, guardarlos como plantillas y adaptarlos al siguiente paciente.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

El catálogo global y el propio se documentan como capas distintas; sus reglas de edición requieren validar permisos en un caso real de QA.

Ubicación y referencia técnica

Dietas → Programas y menús reutilizables

Reutilizar plantillas

  • m1-funciones.mdM1-F03
  • M12-catalogos-nutricion.jsonF-M12-13 a F-M12-16
  • page.tsxruta de plantillas
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/diet-template-plan.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Transforma plantilla en plan; no cubre alta/edición de programas desde Dietas.

  • elimina undefined antes de persistir la plantillaL44

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/dietas/plantillas/[templateId]/editar · requiere dato de contexto
Casos
nutrition-diet-library-visual-programs · Biblioteca de Dietas muestra programas visuales y accionables
nutriologoespecialistaadmin
Pasos
  1. Abrir Dietas y mantener activa la pestaña Programas.
  2. Revisar una plantilla global, una propia y una legacy sin imagen.
  3. Confirmar preview de hasta tres menús o recetas y fallback neutro cuando falte media.
Esperado
  • Las tarjetas conservan origen, categoría, patología, menús, kcal, macros y objetivo; presentan previews legibles y exponen siempre Ver y asignar, Editar y Eliminar. Los permisos mantienen las globales en sólo lectura para roles normales y permiten gestionarlas a superadmin. Editar hidrata la plantilla elegida y Guardar cambios actualiza el mismo documento desde cualquier paso, con confirmación visible y sin chocar con el FAB.

Fuente: test-cases.json · testCases[id=nutrition-diet-library-visual-programs]

Cobertura: Referencias parciales

Preparar y entregar el plan

223
Pruebas del flujo
21 pruebas vinculadas11 archivos4 casos QAE2E 9Unitarias / componentes 7Integración 5

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Configurar ingestasCrear plan → DistribuciónFuncionalValidada en versión localRevisadaM1-F03.a

Qué permite hacerEl nutriólogo define tiempos de comida, menús y distribución de porciones para el día del paciente.

Alcance
Base contratada
Registro de origen
Código leído
✓ Validada en versión local · 2026-09-23

El equipo configuró menús y tiempos de comida, repartió porciones, aplicó ajustes por menú y conservó los valores en el borrador. Se aprobaron 08, 09, 10 y 11, incluida la personalización sin columnas duplicadas.

Las ingestas y su reparto son parte del plan, no funciones duplicadas por cada pantalla.

Ubicación y referencia técnica

Crear plan → Distribución

Configurar ingestas

  • m1-funciones.mdM1-F03
  • M06-plan-nutricional.jsonF-M09-05 y F-M09-06
  • paso-3-distribucion.tsxPaso 3
  • lote-nutricion-detallado.jsonWizard 01/02/08/09/10/11 + BK-01: 7 aprobadas
  • crear-dieta-wizard.spec.tsCasos indicados; comprobaciones UI y de borrador
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAE2E 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/configurar-plan-ingestas.spec.tsE2E · Comportamiento directo · 1 vinculadas / 2 definiciones en el archivo

Abre Ingestas y el menú de agregar con origen explícito.

  • el botón global abre solo Ingestas y Agregar menú ofrece origenL12
e2e/staging/crear-dieta-wizard.spec.tsE2E · Comportamiento directo · 3 vinculadas / 13 definiciones en el archivo

Distribuye porciones y permite personalizar tiempos/edición manual.

  • 03 — Distribucion abre Configurar plan sin atorarse y deja evidencia visualL381
  • 10 — Personalizar tiempos por menu no crea columnas duplicadasL678
  • 11 — Distribucion permite edicion manual controladaL736

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
  • VentanaConfigurar plan/pacientes/[id]/crear-plan · requiere paciente
  • BotónAgregar nuevo tiempo de comida/pacientes/[id]/crear-plan · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard de dieta 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Planear semanaCrear plan → CalendarioFuncionalCódigo leídoPor probarM1-F03.b

Qué permite hacerEl nutriólogo asigna menús a los siete días y detecta días faltantes antes de guardar el plan.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La ruta de creación actual integra Calendario como cuarto paso; la documentación antigua que separa Recetas no describe por sí sola el flujo vigente.

Ubicación y referencia técnica

Crear plan → Calendario

Planear semana

  • M06-plan-nutricional.jsonF-M09-09 y bloqueadores de calendario
  • paso-45-vista-semanal.tsxPaso Calendario
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 1E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/validations/plan-wizard-steps.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 5 definiciones en el archivo

Bloquea calendario incompleto o menú inexistente antes del guardado.

  • bloquea un calendario incompleto o con un menuIndex inexistenteL91
e2e/staging/crear-dieta-wizard.spec.tsE2E · Cobertura parcial · 1 vinculadas / 13 definiciones en el archivo

Cubre menús y distribución, no una asignación semanal completa de siete días.

  • 08 — Happy path: distribucion y menus +10/-10 respetan porciones guardadasL550

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard de dieta 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Seleccionar recetas compatiblesCrear plan → Recetas compatiblesSe podían elegir recetas que no respetaban las restricciones del paciente.FuncionalValidación incompletaPendiente documentadoM1-F03.c

Qué permite hacerEl nutriólogo compone cada tiempo con recetas y alternativas que deben respetar el perfil alimenticio del paciente.

Alcance
Base contratada
Registro de origen
2026-07-20
Prueba parcial · 2026-09-23

El portal comprobó una alternativa compatible e incompatible controladas y conservó el cambio de platillo después de recargar en escritorio y móvil. Este resultado apoya la elegibilidad clínica; no demuestra la selección y asignación de recetas desde el asistente del nutriólogo. Se conserva cobertura parcial. También se confirmó en una sesión nueva sin caché. El control con éxito HTTP sin escritura falló como se esperaba.

El batch del 20-jul reportó recetas incompatibles habilitadas y reglas no unificadas; no se afirma que continúe igual en el árbol actual.

Ubicación y referencia técnica

Crear plan → Recetas compatibles

Seleccionar recetas compatibles

  • m1-funciones.mdM1-F03
  • M06-plan-nutricional.jsonF-M09-07
  • recetas-selector-modal.tsxselector de recetas
  • README.mdBK-06 y BK-48: FAIL fechado
  • resultados.json2/2 variantes E2E y control de sensibilidad
  • nutrition-clinical-eligibility-fixture.spec.tspaciente cambia un platillo compatible, excluye el incompatible y conserva el cambio al recargar
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos3 casos QAUnitarias / componentes 2E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/receta-distribucion.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 18 definiciones en el archivo

Ajusta recetas a distribución y conserva/recalcula nutrición de ingredientes.

  • reparte el objetivo del grupo entre sus ingredientes y compensa el residuo en el últimoL157
  • recalcula nutrición cuando todos los ingredientes traen nutrición embebidaL183
e2e/staging/nutrition-clinical-eligibility-fixture.spec.tsE2E · Prueba de apoyo · 1 vinculadas / 1 definiciones en el archivo

Aporta evidencia de la compatibilidad clínica de alternativas ya autorizadas cuando el paciente las intercambia. El check describe composición y selección de recetas por el nutriólogo: este test no ejecuta el selector staff ni la asignación del plan.

  • paciente cambia un platillo compatible, excluye el incompatible y conserva el cambio al recargarL38

Incidencias relacionadas por caso: 2 en soporte · 25 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdminPaciente
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
  • VistaPortal paciente/portal/plan
  • VentanaPerfil alimenticio y expediente médico/pacientes/[id]/crear-plan · requiere paciente
  • BotónVolver al listado de recetas/pacientes/[id]/crear-plan · requiere paciente
  • VistaDieta del paciente/portal/plan
  • BotónCambiar platillo/portal/plan
  • PanelCambiar comida/portal/plan
  • BotónCambiar platillo (confirmar)/portal/plan
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

patient-portal-ingredient-swap-drawer · Portal paciente cambia ingredientes con porciones permitidas
paciente
Pasos
  1. Entrar como paciente con plan activo desde Inicio y tocar Ver comida para llegar a Dieta con la comida enfocada.
  2. Expandir una comida del día directamente en /portal/plan.
  3. Validar que el detalle no muestra header global del portal ni dock inferior.
Esperado
  • La receta abre sin header global ni dock inferior, Dieta puede enfocar la comida desde Inicio, muestra lectura visual con Preparación colapsada y conteo de pasos, integra porciones libres dentro de Ingredientes, usa drawers para añadir/cambiar desde el detalle y desde la tarjeta expandida, conserva tabs Mismo grupo/Permitidos, permite ajustar porciones aunque el grupo tenga un solo ingrediente, bloquea excesos y permite guardar con porciones iguales o por debajo del tope.

Fuente: test-cases.json · testCases[id=patient-portal-ingredient-swap-drawer]

patient-portal-recipe-swap-persistence · Cambiar un platillo compatible y conservarlo al recargar
paciente
Pasos
  1. Con un paciente QA del workspace HIXION, preparar un plan temporal para hoy con un platillo base y dos alternativas autorizadas: una compatible y otra incompatible con una restricción alimentaria conocida. Ambas deben respetar las mismas porciones del tiempo de comida.
  2. Entrar a Dieta y comprobar que aparece el platillo base. Abrir Cambiar platillo para ese tiempo de comida.
  3. Comprobar que la alternativa compatible conocida aparece y puede seleccionarse. Confirmar que la alternativa incompatible no aparece; un selector vacío no acredita este resultado.
  4. Seleccionar la alternativa compatible y confirmar Cambiar platillo. Comprobar la respuesta real de guardado, el cierre del selector y el nombre de la receta elegida en la tarjeta de la comida.
  5. Recargar Dieta y comprobar que la misma comida conserva el platillo elegido para hoy.
  6. Repetir el recorrido en escritorio y móvil. Conservar evidencia de cada ejecución y restaurar el plan temporal, las restricciones modificadas y el ajuste creado para la prueba.
Esperado
  • El paciente puede elegir una alternativa autorizada que respeta las porciones y la restricción alimentaria preparada; el selector excluye la alternativa incompatible conocida. El guardado real actualiza la tarjeta y la elección permanece después de recargar, tanto en escritorio como en móvil. La ausencia de alternativas, un guardado simulado o una copia visible sin confirmación de guardado no acreditan este caso.

Fuente: test-cases.json · testCases[id=patient-portal-recipe-swap-persistence]

Automatización
  • e2e/staging/nutrition-clinical-eligibility-fixture.spec.ts · Cambio de platillo compatible con persistencia 2/2 variantes aprobadas · escritorio y móvil · 23 sep 2026El portal comprobó una alternativa compatible e incompatible controladas y conservó el cambio de platillo después de recargar en escritorio y móvil. Este resultado apoya la elegibilidad clínica; no demuestra la selección y asignación de recetas desde el asistente del nutriólogo. Se conserva cobertura parcial. También se confirmó en una sesión nueva sin caché. El control con éxito HTTP sin escritura falló como se esperaba. Notificaciones excluidas.

El portal comprobó una alternativa compatible e incompatible controladas y conservó el cambio de platillo después de recargar en escritorio y móvil. Este resultado apoya la elegibilidad clínica; no demuestra la selección y asignación de recetas desde el asistente del nutriólogo. Se conserva cobertura parcial. También se confirmó en una sesión nueva sin caché. El control con éxito HTTP sin escritura falló como se esperaba.

Cobertura: Referencias vinculadas

Asignar el plan y conservar sus cambiosCrear plan → Asignar / Ficha → PlanFuncionalPruebas parcialesPor probarM1-F03.f

Qué permite hacerEl plan se guarda con vigencia, se asigna al paciente y permite conservar el antecedente cuando se publica una revisión.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

Se verificó una revisión sobre un plan temporal activo, no la primera asignación completa ni todas las reglas de vigencia.

Los borradores, vigencia y revisiones son comportamiento relacionado; no se declara una publicación efectiva sin ejecutar el recorrido.

Ubicación y referencia técnica

Crear plan → Asignar / Ficha → Plan

Asignar y versionar plan

  • M06-plan-nutricional.jsonF-M09-10, F-M09-11, F-M09-13 a F-M09-15 y E2E-M09-01/02
  • vista-final-plan.tsxvista final y guardado
  • plan-assignment-sync.tssincronización de asignación
  • lote-nutricion-detallado.jsonAjuste por grupos con guardado real
  • quick-group-adjust-real-save.spec.tsAserciones del recorrido real; límites indicados en evidencia
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAIntegración 5

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/nutrition-revisions.test.tsIntegración · Comportamiento directo · 3 vinculadas / 9 definiciones en el archivo

Publica revisión, cierra versión, crea historial y respeta vigencia/snapshots.

  • actualiza el plan, cierra la versión, crea revisión e historial exactamente una vezL144
  • publica una versión completa y conserva hoy el snapshot del tiempo registradoL193
  • un plan futuro conserva exactamente el arranque del día de negocioL270
tests/integration/api/staff-assignments.test.tsIntegración · Comportamiento directo · 2 vinculadas / 15 definiciones en el archivo

La asignación crea dieta, versión, operación y proyección atómicamente.

  • crea dieta, versión, operación y proyección del paciente en una sola transacciónL87
  • activa un borrador existente conservando su ID y fecha de creaciónL155

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
  • VentanaPlan asignado y guardado/pacientes/[id]/crear-plan · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard de dieta 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Entregar plan en portalPortal → Plan y RecetasFuncionalValidada en versión localRevisadaM1-F03.g

Qué permite hacerEl paciente consulta su dieta vigente, recetas y estado del día desde el portal móvil.

Alcance
Documentado en producto; relacionado con M1-F03
Registro de origen
Código leído
✓ Validada en versión local · 2026-09-23

Portal autenticado mostró kcal y receta vigentes, cambió a una versión publicada y mantuvo la versión actual ante una publicación futura.

Marcar comidas y registrar una comida adicional forman parte del seguimiento de la dieta; el chequeo de energía, digestión, ánimo y adherencia pertenece a M1-F07 compartido.

Ubicación y referencia técnica

Portal → Plan y Recetas

Entregar plan en portal

  • M10-portal-paciente.jsonF-M10-01, F-M10-07, F-M10-09 y F-M10-13
  • page.tsxruta de dieta vigente
  • lote-nutricion-detallado.jsonPortal online de plan y versión
  • portal-plan-online-version-propagation.spec.tsAserciones del recorrido real; límites indicados en evidencia
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAE2E 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/portal-plan-online-version-propagation.spec.tsE2E · Comportamiento directo · 2 vinculadas / 2 definiciones en el archivo

Portal visualiza dieta/receta vigente y recibe publicación o futura sin adelantarla.

  • portal muestra plan y receta vigentes, después recibe versión publicadaL73
  • portal anuncia versión futura sin adelantar plan vigenteL87
e2e/staging/patient-portal.spec.tsE2E · Cobertura parcial · 1 vinculadas / 5 definiciones en el archivo

Recorre navegación, plan y recetas móviles, sin comprobar toda publicación/versionado.

  • paciente validates portal navigation, plan, recipes, routine, progress and profileL59

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
portal-plan-online-version-propagation · Consultar plan vigente y recibir una versión publicada
paciente
Pasos
  1. Entrar con el paciente QA que tiene un plan y receta temporales.
  2. Consultar las kcal y receta vigentes.
  3. Publicar una versión mediante el fixture QA y recargar el portal.
  4. Programar otra versión para mañana y comprobar el aviso de cambio.
Esperado
  • El plan y la receta cambian a la versión vigente publicada.
  • La versión futura se anuncia y no reemplaza por anticipado la actual.

Fuente: portal-plan-online-version-propagation.spec.ts · 2 casos online

Automatización
  • e2e/staging/portal-plan-online-version-propagation.spec.ts · Portal online de plan y versión 2/2 aprobadas en localhost:1000Portal autenticado mostró kcal y receta vigentes, cambió a una versión publicada y mantuvo la versión actual ante una publicación futura.

Se verificó la lectura online. La publicación se prepara con un fixture controlado; no cubre caché offline ni el guardado desde staff.

Cobertura: Referencias vinculadas

Retomar un borrador de dietaCrear plan del pacienteFuncionalPor comprobarPor probarNUT-05

Qué permite hacerContinuar un plan a medias sin perder el trabajo al cambiar de sección.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Crear plan /pacientes/[id]/crear-plan

Retomar un borrador de dieta

  • M06-plan-nutricional.jsonF-M09-01 y F-M09-15
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/services/wizard-plan-conflict.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 4 definiciones en el archivo

Conserva plan local y exige acción explícita ante conflicto de borrador.

  • conserva el plan local y lo guarda sobre la versión remota más reciente sólo tras la acción explícitaL61
  • propaga una segunda colisión sin forzar ni reintentar silenciosamenteL125
Por completar
  • El E2E general no contiene una aserción específica de este comportamiento; no se contabiliza como cobertura.

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
Casos
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
nutriologoespecialistaadmin
Pasos
  1. Entrar desde detalle de paciente.
  2. Completar Dietocálculo y Porciones.
  3. Validar que Dietocálculo no muestre selector de menús.
Esperado
  • Los pasos se mantienen al volver/avanzar, los menús no mezclan recetas, las casillas libres del Calendario se conservan como elección del paciente, el Paso 1 define la base general sin selector de menús y las píldoras muestran la kcal efectiva del menú tras aplicar su ajuste. Cambiar receta muestra para Actual y cada opción la misma kcal efectiva que su tarjeta del día asignado. Abrir desde el contador muestra primero las recetas seleccionadas de ese tiempo, sin mezclar otras comidas, y permite quitar el filtro para explorar el catálogo; pulsar una receta concreta conserva el acceso directo a su detalle. Una receta fijada se identifica como Personalizada en azul, conserva composición, porciones y kcal ante cambios de distribución sólo en su menú y tiempo, y vuelve al ajuste automático inmediato al usar la distribución; las demás recetas automáticas quedan materializadas de forma consistente en el asistente, Calendario y Vista Final. Las alergias y contraindicaciones conservan su alerta y bloqueo clínico.

Fuente: test-cases.json · testCases[id=nutrition-create-plan-complete]

Automatización
  • e2e/staging/crear-dieta-wizard.spec.ts · Wizard limpia draft QA 8/8 casos seleccionados aprobados · 23 sep 2026Casos 01, 02, 07–11 y BK-01; no ejecuta todos los casos del archivo.

Cobertura: Referencias vinculadas

Avisar que el plan cambióAsignación, Chat y PortalEl paciente no recibe el aviso de cambio de plan en el corte documentado.FuncionalAviso ausentePendiente documentadoNUT-06

Qué permite hacerNotificar al paciente la nueva dieta y permitir al especialista comprobar si el aviso salió.

Alcance
Base contratada
Registro de origen
2026-08-21
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

El estado M1-c del 21-ago reportó el aviso ausente; no se verificó de nuevo.

Ubicación y referencia técnica

Asignación, Chat y Portal

Avisar que el plan cambió

  • M06-plan-nutricional.jsonF-M09-12
  • ESTADO.mdM1-c, corte 21-ago-2026
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos0 casos QAUnitarias / componentes 2E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/nutrition-revision-contract.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 8 definiciones en el archivo

Determina anuncio y fecha efectiva de una revisión; no prueba envío/confirmación de aviso.

  • respeta exactamente el arranque futuro y no anuncia cambios actualesL38
  • anuncia la fecha real de un ajuste futuro y no etiqueta como programado uno vigenteL103
e2e/staging/portal-plan-online-version-propagation.spec.tsE2E · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

El portal anuncia una versión futura; no verifica entrega de notificación al paciente.

  • portal anuncia versión futura sin adelantar plan vigenteL87

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaPacienteAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id] · requiere paciente/pacientes/[id]/crear-plan · requiere paciente/portal/agendaAPI /api/pacientes/[pacienteId]/nutrition-revisions
  • VistaPortal paciente/portal/plan
Automatización
  • e2e/staging/portal-plan-version-propagation.spec.ts · Propagación de versión de dieta

Cobertura: Referencias parciales

Ajustar alimentos y porciones

103
Pruebas del flujo
17 pruebas vinculadas9 archivos4 casos QAE2E 6Integración 4Unitarias / componentes 7

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Ajustar una dieta activaPlan del paciente → AjustarFuncionalValidada en versión localRevisadaNUT-07

Qué permite hacerCambiar porciones, grupos o distribución en seguimiento, conservar historia y considerar comidas ya registradas.

Alcance
Documentado en producto
Registro de origen
Por comprobar
✓ Validada en versión local · 2026-09-23

UI staff guardó un ajuste real de Cena; el plan y snapshot de versión conservaron las verduras cambiadas, el check-in de Desayuno permaneció intacto y la recarga mostró el valor guardado.

Ubicación y referencia técnica

Plan del paciente → Ajustar

Ajustar una dieta activa

  • M06-plan-nutricional.jsonF-M09-13 y F-M09-14
  • lote-nutricion-detallado.jsonAjuste por grupos con guardado real
  • quick-group-adjust-real-save.spec.tsAserciones del recorrido real; límites indicados en evidencia
Cómo probar
Pruebas localizadas
8 pruebas vinculadas3 archivos1 casos QAE2E 4Integración 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/quick-group-adjust-real-save.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

El ajuste de Cena confirma HTTP, versión, historial, proyección, check-in intacto y recarga UI.

  • guardar ajuste de Cena crea versión, historial y proyección sin tocar comida registradaL58
tests/integration/api/nutrition-revisions.test.tsIntegración · Comportamiento directo · 4 vinculadas / 9 definiciones en el archivo

Revisión controla check-ins afectados, conflicto, historial y vigencia.

  • actualiza el plan, cierra la versión, crea revisión e historial exactamente una vezL144
  • si todos los tiempos afectados están registrados guarda una sola versión sin reescribir el check-inL221
  • reconoce el check-in booleano legacy al aplicar el gate del servidorL252
  • un plan futuro conserva exactamente el arranque del día de negocioL270
e2e/staging/quick-group-adjust-regressions.spec.tsE2E · Cobertura parcial · 3 vinculadas / 4 definiciones en el archivo

UI del gate/cancelación usa respuesta 500 simulada y no acredita persistencia.

  • un check-in en Desayuno no abre el gate al ajustar sólo CenaL125
  • el ajuste por grupo pasa por el gate de check-ins y conserva la propuesta al cancelarL149
  • un remanente menor a 0.5 explica la granularidad y no deja continuarL199

Incidencias relacionadas por caso: 1 en soporte · 14 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/plan/ajustar · requiere paciente
  • VentanaAjustar porciones/pacientes/[id]/plan · requiere paciente
  • VentanaAjustar grupos de alimentos/pacientes/[id]/plan · requiere paciente
Casos
nutrition-active-plan-quick-adjust · Editar dieta activa abre ajuste rápido
nutriologoespecialistaadmin
Pasos
  1. Entrar a detalle de paciente con dieta activa.
  2. Abrir tab Planes y seleccionar Editar en la tarjeta de dieta.
  3. Con un plan de varios menús, seleccionar un menú distinto al primero antes de pulsar Ajustar, y confirmar que el ajustador abre en ese mismo menú.
Esperado
  • El ajuste rápido entra por grupo de alimentos en tres pasos y escribe en el menú seleccionado. Propone un reparto parejo editable, admite tiempos que estaban en cero y exige cuadrar el total antes de confirmar. Un remanente menor a 0.5 se identifica como granularidad y no queda atrapado en un guardado sin cambios. Las porciones sin ingrediente quedan libres con una advertencia accionable, sin inventar ingredientes. El gate se resuelve por tiempo de comida: sólo se pide confirmación si el ajuste toca un tiempo registrado hoy. El servidor publica una única versión completa y el plan entero, incluidas sus porciones, se actualiza inmediatamente; cada check-in previo conserva únicamente la receta y nutrición que capturó. Con check-in en Desayuno, un ajuste exclusivo de Cena no abre el gate. Editar muestra las kcal objetivo y de recetas por separado, reserva SMAE para equivalencias, guarda una revisión idempotente, conserva los registros previos y refresca hoy/futuro. En AAR el ajuste parte de la asignación, con programación editable y borrador conservado entre selecciones. Revisión y guardado conjunto por dieta/rutina; edición de una serie no propaga valores a otras. Editor amplio responsive con resumen por serie.

Fuente: test-cases.json · testCases[id=nutrition-active-plan-quick-adjust]

Automatización
  • e2e/staging/quick-group-adjust-regressions.spec.ts · Ajuste por grupo reversible 4/4 casos seleccionados aprobados · 23 sep 2026Sólo interacción y gates: las respuestas de guardado están simuladas con 500.
  • e2e/staging/quick-group-adjust-real-save.spec.ts · Ajuste por grupos con guardado real 1/1 aprobadas en localhost:1000UI staff guardó un ajuste real de Cena; el plan y snapshot de versión conservaron las verduras cambiadas, el check-in de Desayuno permaneció intacto y la recarga mostró el valor guardado.

Guardado real de un ajuste de Cena, versión e historial, recarga y conservación del check-in de Desayuno. Las pruebas adicionales de gates usan respuestas simuladas.

Cobertura: Referencias vinculadas

Configurar equivalenciasConfiguración → Equivalencias / Ficha del pacienteFuncionalCódigo leídoPor probarM1-F04.a

Qué permite hacerEl nutriólogo define qué grupos SMAE pueden intercambiarse en el workspace y por paciente o plan cuando corresponda.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La entrevista mantiene sin definir taxonomía, precedencia global/individual y condiciones de recomendación; no se infieren del panel existente.

Ubicación y referencia técnica

Configuración → Equivalencias / Ficha del paciente

Configurar equivalencias

  • m1-funciones.mdM1-F04
  • M12-catalogos-nutricion.jsonF-M12-17
  • equivalencias-config-panel.tsxworkspace → paciente.override → plan
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/intercambios-grupos.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 3 definiciones en el archivo

Mantiene relaciones SMAE bidireccionales y repara legacy.

  • repara relaciones legacy guardadas en un solo sentidoL10
  • agrega la relación inversa al seleccionar un aliadoL19

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/plan · requiere paciente
Casos
nutrition-plan-group-exchanges-publication · Guardar intercambios del plan confirma una sola revisión
nutriologoespecialistaadmin
Pasos
  1. Abrir un plan activo de un paciente QA HIXION y editar Intercambios.
  2. Cambiar un grupo y guardar; revisar la dieta desde el portal y recargar.
  3. Comprobar una revisión nutricional y un evento por operación, con suplementos y comidas registradas intactos.
Esperado
  • Una acción de guardar intercambios confirma una revisión nutricional autoritativa con historial e idempotencia. El diálogo espera la respuesta, bloquea envíos simultáneos y conserva el borrador ante error. No modifica suplementos ni check-ins. Respeta la fecha de inicio y detecta una programación concurrente. Guardar un plan no activo conserva su estado. Los demás consumidores del diálogo conservan su contrato.

Fuente: test-cases.json · testCases[id=nutrition-plan-group-exchanges-publication]

Cobertura: Referencias parciales

Cambiar alimento autorizadoPortal → Plan → Cambiar platillo y porcionesFuncionalPruebas parcialesPor probarM1-F04.b

Qué permite hacerEl paciente puede sustituir una receta, alimento o porción dentro de los límites que el nutriólogo permita.

Alcance
Base contratada
Registro de origen
2026-09-23
Prueba parcial · 2026-09-23

El cambio de platillo completo se comprobó desde el portal en escritorio y móvil, con alternativa compatible visible, alternativa incompatible excluida, guardado real y selección conservada al recargar. Cobertura parcial: siguen pendientes los tramos de ingredientes/porciones y las reglas que no se hayan revalidado. También se confirmó en una sesión nueva sin caché. El control con éxito HTTP sin escritura falló como se esperaba.

El antecedente de julio se conserva en el historial. La corrida actual comprobó cambio de platillo con guardado y recarga; los demás criterios aún no tienen evidencia suficiente. No se presenta como fallo actual ni como función completamente validada.

Ubicación y referencia técnica

Portal → Plan → Cambiar platillo y porciones

Cambiar alimento autorizado

  • m1-funciones.mdM1-F04
  • M10-portal-paciente.jsonF-M10-08 y F-M10-10
  • recipe-swap-sheet.tsxintercambiosGrupos
  • README.mdBK-49: FAIL fechado
  • resultados.json2/2 variantes E2E y control de sensibilidad
  • nutrition-clinical-eligibility-fixture.spec.tspaciente cambia un platillo compatible, excluye el incompatible y conserva el cambio al recargar
Cómo probar
Pruebas localizadas
4 pruebas vinculadas3 archivos2 casos QAE2E 2Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/patient-portal.spec.tsE2E · Comportamiento directo · 1 vinculadas / 5 definiciones en el archivo

FR-03 impide que el cambio de ingrediente exceda porciones prescritas.

  • FR-03 — cambio de ingrediente no puede exceder porciones prescritasL147
tests/unit/lib/calculations/valida-mutacion.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 15 definiciones en el archivo

Valida swap de receta/ingrediente contra remanentes y topes por slot.

  • acepta receta que aporta exactamente las porciones del slotL126
  • valida las porciones del ingrediente nuevo contra el remanente del grupoL259
e2e/staging/nutrition-clinical-eligibility-fixture.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Recorre el cambio de una receta completa autorizada desde el portal, con alternativa compatible e incompatible conocidas, guardado HTTP real y persistencia visible tras recargar. Es un tramo de Cambiar alimento autorizado; no acredita edición de ingredientes/porciones ni todas las reglas clínicas.

  • paciente cambia un platillo compatible, excluye el incompatible y conserva el cambio al recargarL38

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-portal-ingredient-swap-drawer · Portal paciente cambia ingredientes con porciones permitidas
paciente
Pasos
  1. Entrar como paciente con plan activo desde Inicio y tocar Ver comida para llegar a Dieta con la comida enfocada.
  2. Expandir una comida del día directamente en /portal/plan.
  3. Validar que el detalle no muestra header global del portal ni dock inferior.
Esperado
  • La receta abre sin header global ni dock inferior, Dieta puede enfocar la comida desde Inicio, muestra lectura visual con Preparación colapsada y conteo de pasos, integra porciones libres dentro de Ingredientes, usa drawers para añadir/cambiar desde el detalle y desde la tarjeta expandida, conserva tabs Mismo grupo/Permitidos, permite ajustar porciones aunque el grupo tenga un solo ingrediente, bloquea excesos y permite guardar con porciones iguales o por debajo del tope.

Fuente: test-cases.json · testCases[id=patient-portal-ingredient-swap-drawer]

patient-portal-recipe-swap-persistence · Cambiar un platillo compatible y conservarlo al recargar
paciente
Pasos
  1. Con un paciente QA del workspace HIXION, preparar un plan temporal para hoy con un platillo base y dos alternativas autorizadas: una compatible y otra incompatible con una restricción alimentaria conocida. Ambas deben respetar las mismas porciones del tiempo de comida.
  2. Entrar a Dieta y comprobar que aparece el platillo base. Abrir Cambiar platillo para ese tiempo de comida.
  3. Comprobar que la alternativa compatible conocida aparece y puede seleccionarse. Confirmar que la alternativa incompatible no aparece; un selector vacío no acredita este resultado.
  4. Seleccionar la alternativa compatible y confirmar Cambiar platillo. Comprobar la respuesta real de guardado, el cierre del selector y el nombre de la receta elegida en la tarjeta de la comida.
  5. Recargar Dieta y comprobar que la misma comida conserva el platillo elegido para hoy.
  6. Repetir el recorrido en escritorio y móvil. Conservar evidencia de cada ejecución y restaurar el plan temporal, las restricciones modificadas y el ajuste creado para la prueba.
Esperado
  • El paciente puede elegir una alternativa autorizada que respeta las porciones y la restricción alimentaria preparada; el selector excluye la alternativa incompatible conocida. El guardado real actualiza la tarjeta y la elección permanece después de recargar, tanto en escritorio como en móvil. La ausencia de alternativas, un guardado simulado o una copia visible sin confirmación de guardado no acreditan este caso.

Fuente: test-cases.json · testCases[id=patient-portal-recipe-swap-persistence]

Automatización
  • e2e/staging/patient-portal.spec.ts · Swap con porciones prescritas 1/1 variante de escritorio aprobada · 23 sep 2026FR-03 pasó en escritorio: limita la cantidad a las porciones prescritas y deshabilita el aumento al llegar al tope. No comprueba un intercambio completo persistido ni todas las reglas clínicas. El fallo móvil previo ocurrió durante la hidratación de login.
  • e2e/staging/nutrition-clinical-eligibility-fixture.spec.ts · Cambio de platillo compatible con persistencia 2/2 variantes aprobadas · escritorio y móvil · 23 sep 2026El cambio de platillo completo se comprobó desde el portal en escritorio y móvil, con alternativa compatible visible, alternativa incompatible excluida, guardado real y selección conservada al recargar. Cobertura parcial: siguen pendientes los tramos de ingredientes/porciones y las reglas que no se hayan revalidado. También se confirmó en una sesión nueva sin caché. El control con éxito HTTP sin escritura falló como se esperaba. Notificaciones excluidas.

El cambio de platillo completo se comprobó desde el portal en escritorio y móvil, con alternativa compatible visible, alternativa incompatible excluida, guardado real y selección conservada al recargar. Cobertura parcial: siguen pendientes los tramos de ingredientes/porciones y las reglas que no se hayan revalidado. También se confirmó en una sesión nueva sin caché. El control con éxito HTTP sin escritura falló como se esperaba.

Cobertura: Referencias vinculadas

Registrar y revisar cambios de alimentosFicha, plan y portal · ubicación por confirmarFuncionalPor definirPor definirM1-F04.c

Qué permite hacerEl nutriólogo debe fijar rangos, bloquear alimentos y consultar el registro de intercambios del paciente.

Alcance
Base contratada
Registro de origen
Por definir
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

El código muestra superficies de intercambio, pero esta revisión no localizó evidencia suficiente para declarar completo el bloqueo, rango y registro exigidos como conjunto.

Ubicación y referencia técnica

Ubicación funcional por confirmar; se relaciona con ficha, plan y portal

Registrar y supervisar cambios

  • m1-funciones.mdM1-F04
  • registro-gr.mdDetalle aparcado: taxonomía, algoritmo y precedencia de equivalencias
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/validations/portal-plan-mutation.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 5 definiciones en el archivo

Valida payload de swaps y operación/version, no registro visible para nutricionista.

  • rechaza swaps sin identidad de la receta prescrita o candidataL25
  • conserva la versión y la operación de un ajuste pendiente; rechaza IDs inválidosL52
tests/unit/security/plan-overrides-authority.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 3 definiciones en el archivo

La autoridad del endpoint valida distribución, expediente y elegibilidad; no su consulta UI.

  • el endpoint vuelve a validar distribución, expediente y elegibilidad clínicaL36

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
NutriólogoEspecialistaAdmin
Vistas y controles
  • VistaCrear dieta/pacientes/[id]/plan · requiere paciente
  • BotónEditar Intercambios/pacientes/[id]/plan · requiere paciente
Casos
nutrition-plan-group-exchanges-publication · Guardar intercambios del plan confirma una sola revisión
nutriologoespecialistaadmin
Pasos
  1. Abrir un plan activo de un paciente QA HIXION y editar Intercambios.
  2. Cambiar un grupo y guardar; revisar la dieta desde el portal y recargar.
  3. Comprobar una revisión nutricional y un evento por operación, con suplementos y comidas registradas intactos.
Esperado
  • Una acción de guardar intercambios confirma una revisión nutricional autoritativa con historial e idempotencia. El diálogo espera la respuesta, bloquea envíos simultáneos y conserva el borrador ante error. No modifica suplementos ni check-ins. Respeta la fecha de inicio y detecta una programación concurrente. Guardar un plan no activo conserva su estado. Los demás consumidores del diálogo conservan su contrato.

Fuente: test-cases.json · testCases[id=nutrition-plan-group-exchanges-publication]

Cobertura: Referencias parciales

Indicar y consultar suplementos

004
Pruebas del flujo
12 pruebas vinculadas6 archivos0 casos QAIntegración 4Unitarias / componentes 8

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Prescribir suplementosPlan → Suplementos / Ajustar suplementaciónFuncionalCódigo leídoPor probarM1-F05.a

Qué permite hacerEl nutriólogo asigna productos a la dieta con dosis, frecuencia, horario, duración e indicaciones de consumo.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La función contratada es prescripción y enlace externo; no incluye cobro en la plataforma.

Ubicación y referencia técnica

Plan → Suplementos / Ajustar suplementación

Prescribir suplementos

  • m1-funciones.mdM1-F05
  • suplementos-section.tsxdosis, frecuencia, horario, duración y modo de consumo
  • page.tsxAjustar suplementación
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos0 casos QAIntegración 1Unitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/supplementation-revisions.test.tsIntegración · Comportamiento directo · 1 vinculadas / 3 definiciones en el archivo

Escribe stack y crea hilo independiente sin tocar nutrición.

  • escribe el stack, abre un hilo supplementation y no toca nutriciónL116
tests/unit/lib/utils/supplementation-stack.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 3 definiciones en el archivo

Agrega productos sin duplicarlos y actualiza dosis sin quitar los demás.

  • agrega varios productos distintos al stackL21
  • no duplica un producto que ya está en la dietaL31
  • actualiza dosis del producto ya asignado sin quitar los demásL42

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoEspecialista
Vistas y controles
  • VentanaSuplementos del plan/pacientes/[id]/plan · requiere paciente
Automatización
  • tests/integration/api/supplementation-revisions.test.ts · Revisiones de suplementación 3/3 pruebas integración aprobadas · 23 sep 2026

La automatización cubre revisiones de suplementación; no acredita la edición clínica completa de dosis, frecuencia, horario y duración.

Cobertura: Referencias parciales

Consultar los suplementos indicadosPortal → SuplementosFuncionalCódigo leídoPor probarM1-F05.b

Qué permite hacerEl paciente consulta los suplementos asignados y sus indicaciones desde una vista propia del portal.

Alcance
Documentado en producto; relacionado con M1-F05
Registro de origen
Código leído
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La pantalla vacía distingue que aún no hay suplementos asignados; su presencia no acredita la entrega de una prescripción real.

Ubicación y referencia técnica

Portal → Suplementos

Mostrar suplementación portal

  • M10-portal-paciente.jsonF-M10-12
  • page.tsxMi suplementación
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos0 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/supplementation-assignment.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 4 definiciones en el archivo

Resuelve suplementos desde versión vigente o fallback de plan; no prueba la vista de portal.

  • usa la versión vigente del plan activoL49
  • cae a plan.suplementos si no hay versiónL59

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles

Hay una superficie de consulta localizada; no hay caso de prueba vinculado.

Cobertura: Sin caso vinculado

Preparar kits y ampliar el catálogo de suplementosSuplementos y kits · ubicación por confirmarFuncionalPor definirPor definirM1-F05.d

Qué permite hacerKits reutilizables, categorías configurables y vínculo producto-ingrediente aparecen como ampliación propuesta para la suplementación.

Alcance
Adicional por conciliar
Registro de origen
Por definir
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

El plan afirma estar desactualizado respecto del código; ninguno de ambos acredita aprobación contractual del incremento.

Ubicación y referencia técnica

catálogo de suplementos y gestor de kits; ruta exacta por validar

Kits y catálogo ampliable

  • 05-suplementacion-kits.mdEstado, Plantillas y kits, y Decisiones que faltan
  • 00-gr-platform-phase-close-index.mdVivos: propuestas pendientes de luz verde
  • kits-suplementacion-manager.tsxgestor de kits
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos0 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/supplementation-kit.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Transforma un kit del catálogo a asignación, no CRUD de kits/categorías.

  • copia dosis del kit sobre el producto del catálogoL17
tests/unit/components/kits-suplementacion-dialog.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 3 definiciones en el archivo

Comprueba que el alta de kits vive en diálogo y el catálogo permite marcar varios.

  • el alta vive en un diálogo y la pestaña solo renderiza tarjetasL10
  • el listado del catálogo deja marcar varios sin cerrarseL23

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Automatización
  • tests/unit/lib/utils/supplementation-kit.test.ts · Kits de suplementación 2/2 pruebas unitarias aprobadas · 23 sep 2026

Cobertura: Referencias parciales

Enlazar compra externaPlan y portal del pacienteFuncionalPor comprobarPor probarM1-F05.e

Qué permite hacerLa prescripción puede ofrecer un enlace externo de compra asociado al producto, sin convertir la plataforma en checkout.

Alcance
Base contratada para enlace externo
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

La integración de inventario Odoo del sitio es otro resultado contractual; no se confunde con la prescripción nutricional.

Ubicación y referencia técnica

Plan y portal; vínculo específico a confirmar en un recorrido autorizado

Enlazar compra externa

  • m1-funciones.mdM1-F05: link externo a Odoo
  • 06-DICTAMEN-DE-ALCANCE.mdP09: catálogo Odoo de lectura; checkout y pedidos excluidos
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles

La liga externa de compra está localizada en el portal; no hay caso de prueba vinculado.

Cobertura: Sin caso vinculado

Revisar cómo sigue la alimentación

012
Pruebas del flujo
13 pruebas vinculadas5 archivos3 casos QAIntegración 3Unitarias / componentes 9E2E 1

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Registrar las comidas consumidasPortal → PlanFuncionalPor comprobarPor probarNUT-08

Qué permite hacerMarcar cada receta o tiempo consumido y conservar su registro del día.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Portal → Plan

Registrar las comidas consumidas

  • M10-portal-paciente.jsonF-M10-07
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAIntegración 3Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/meal-checkins-offline.test.tsIntegración · Comportamiento directo · 3 vinculadas / 3 definiciones en el archivo

Reproduce check-ins idempotentemente, conserva otras comidas y protege tenant.

  • aplica last-write-wins al reproducir dos valores del mismo alimentoL66
  • conserva otras comidas al reproducir el último valor y acepta replaysL76
  • rechaza escritura de otro tenant sin modificar el documentoL86
tests/unit/lib/offline/patient-offline.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 10 definiciones en el archivo

La cola offline compacta comidas y reintenta sólo errores permitidos.

  • compacta comidas por fecha/meal y conserva el ultimo valorL59
  • encola sólo fallos de conectividad o servidor, no rechazos clínicosL100

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoCoachEspecialista
Vistas y controles
Casos
patient-diet-routine-feedback-learn · Dieta y Rutina agregan feedback, aprender y señales correctas
pacienteadminnutriologocoachespecialista
Pasos
  1. Entrar a Dieta y registrar feedback rápido de una comida.
  2. Abrir Aprender en Dieta.
  3. Entrar a Rutina y validar Hoy, Progreso resumen y Aprender.
Esperado
  • Dieta conserva comida, swaps, despensa y suplementos integrados; Rutina muestra Hoy/Progreso/Aprender, equipo vive en Rutina + Configuración, cambiar equipo no modifica automáticamente la rutina y dolor/malestar genera señal staff.

Fuente: test-cases.json · testCases[id=patient-diet-routine-feedback-learn]

Cobertura: Referencias parciales

Registrar comida libre o adicionalPortal → Captura libre y receta adicionalUna comida adicional registrada no se mostró en Agenda en la prueba realizada.FuncionalResultado incompleto en AgendaPendiente documentadoNUT-09

Qué permite hacerAnotar alimentos fuera del menú o crear un platillo con las porciones disponibles permitidas.

Alcance
Documentado en producto
Registro de origen
2026-09-23
Validación pendiente

La prueba de lectura de Agenda falló con un registro adicional preparado y una receta prescrita visible. La causa sigue pendiente; no confirma el recorrido de captura de la comida.

Ubicación y referencia técnica

Portal → Captura libre y receta adicional

Registrar comida libre o adicional

  • M10-portal-paciente.jsonF-M10-10
  • diagnostico-fallos-nutricion.jsonNUT-09: reproducción con receta prescrita visible y adicional ausente.
  • diagnostico-fallos-nutricion.jsonNUT-09
Cómo probar
Pruebas localizadas
5 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/agenda-extra-recipe-regression.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

Agenda conserva visible una receta adicional junto a la prescrita.

  • un extra registrado permanece junto a la receta prescritaL58
tests/unit/lib/utils/meal-slot-view.test.tsUnitarias / componentes · Cobertura parcial · 4 vinculadas / 8 definiciones en el archivo

Resuelve comida libre y registros históricos, sin alta UI de receta extra.

  • crea una comida libre cuando quedan porcionesL56
  • descarta un slot vacío sin registroL81
  • rescata un slot vacío desde un registro modernoL85
  • rescata un slot vacío desde un registro legacyL112

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoEspecialista
Vistas y controles
Casos
patient-portal-agenda-modifications-feedback · Agenda muestra modificaciones, platillos añadidos y feedback con impacto nutricional
pacienteadminnutriologocoachespecialista
Pasos
  1. Entrar como paciente con un día que tenga menú cambiado, ingrediente cambiado o platillo añadido.
  2. Abrir el detalle del día en Agenda.
  3. Validar kcal, proteína, carbohidratos y grasas del platillo añadido cuando existan ingredientes.
Esperado
  • Agenda permite entender cambios sin navegación obligatoria, identifica ajustes del profesional con un resumen seguro para paciente, muestra nutrición de platillos añadidos basada en ingredientes, abre feedback en drawer, registra feedback normal sin alerta y eleva dolor/malestar fuerte como señal staff.

Vistas:/portal/agenda

Fuente: test-cases.json · testCases[id=patient-portal-agenda-modifications-feedback]

Automatización
  • e2e/staging/agenda-extra-recipe-regression.spec.ts · Receta prescrita y adicional en Agenda 0/1 aprobada: extra ausente en AgendaPrueba de lectura con registros QA preparados. Causa de producto o fixture pendiente de diagnóstico.

Caso fallido en Agenda; falta comprobar la captura completa de una comida adicional.

Cobertura: Referencias parciales

Consultar la lista de despensaPortal → Plan → Lista de DespensaFuncionalPor comprobarPor probarNUT-10

Qué permite hacerReunir los ingredientes necesarios para preparar el plan.

Alcance
Documentado en producto
Registro de origen
Por comprobar
Validación pendiente

No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.

Ubicación y referencia técnica

Portal → Plan → Lista de Despensa

Consultar la lista de despensa

  • M10-portal-paciente.jsonF-M10-07
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/grocery-list.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 12 definiciones en el archivo

Construye lista, agrega ingredientes, normaliza unidades y conserva días.

  • agrega el mismo ingrediente (mismo nombre+unidad) sumando cantidadesL44
  • normaliza unidades equivalentes (gr/gramos → g) en la misma entradaL58
  • con ocurrencias acumula los días únicos del ingredienteL114
Por completar
  • El E2E general no contiene una aserción específica de este comportamiento; no se contabiliza como cobertura.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-portal-grocery-list-period · Portal paciente arma lista de despensa por periodo
paciente
Pasos
  1. Entrar como paciente con plan semanal activo.
  2. Abrir Lista de Despensa desde /portal/plan.
  3. Arrastrar el drawer entre compacto, medio y completo.
Esperado
  • La lista suma ingredientes por los días seleccionados, aplica swaps por fecha, muestra categorías colapsadas ordenadas de mayor a menor y copia un texto con periodo, fechas y totales.

Fuente: test-cases.json · testCases[id=patient-portal-grocery-list-period]

Automatización
  • tests/unit/lib/utils/grocery-list.test.ts · Cálculo de despensa 12/12 pruebas unitarias aprobadas · 23 sep 2026

Cobertura: Referencias vinculadas

Área 04

Fitness

35funciones

Evaluar · Elegir ejercicios · Crear · Programar · Entrenar · Revisar

Contexto de prueba4 roles · 8 vistas
Roles
AdminCoachEspecialistaPaciente
Vistas
Pruebas del área
86 pruebas vinculadas39 archivos12 casos QAE2E 8Unitarias / componentes 67Integración 11

Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.

Evaluar al paciente

013
Pruebas del flujo
3 pruebas vinculadas1 archivos0 casos QAUnitarias / componentes 3

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Capturar mediciones somatocartaFicha del paciente → SomatocartaFuncionalCódigo leídoPor probarM2-F09.a

Qué permite hacerEl staff captura mediciones corporales para la somatocarta del paciente.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-08-21

El expediente declara la somatocarta verificada en conjunto, pero no se encontró una prueba específica de capturar y guardar mediciones. Se conserva sin check.

ESTADO del cliente la registra como entregada y verificada históricamente.

Ubicación y referencia técnica

/pacientes/[id]/somatocarta

Capturar mediciones somatocarta

  • page.tsxruta de somatocarta
  • somatocarta-form.tsxformulario
  • ESTADO.mdEntregado y verificado
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay recorrido de capturar, guardar y recargar una medición.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Vistas y controles

Cobertura: Sin caso vinculado

Calcular y ver somatotipoFicha del paciente → SomatocartaFuncionalPruebas parcialesPor probarM2-F09.b

Qué permite hacerLa plataforma calcula el somatotipo Heath-Carter y lo representa en el triángulo.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-07-20

Se registran diez pruebas unitarias aprobadas de Heath-Carter. Cubren cálculo, validación y mapeo de mediciones; no acreditan la captura, la vista completa ni una revisión clínica.

La precisión clínica del cálculo no fue recalculada en esta tarea documental.

Ubicación y referencia técnica

/pacientes/[id]/somatocarta

Calcular y ver somatotipo

  • somatocarta-triangulo.tsxvisualización
  • m2-funciones.mdM2-F09
  • unit-full.jsonheath-carter.test.ts: 10 passed
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos0 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/heath-carter.test.tsUnitarias / componentes · Cobertura parcial · 3 vinculadas / 7 definiciones en el archivo

Valida el cálculo y el mapeo de una medición, no la captura ni la representación completa.

  • calcula endo/meso/ecto con las constantes de Heath-Carter (caso a mano)L23
  • lanza error con nombre de campo cuando falta una mediciónL80
  • mapea una medición completa al formato Heath-CarterL103
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Vistas y controles

Cobertura: Sin caso vinculado

Comparar mediciones previaspanel de somatocartaFuncionalCódigo leídoPor probarM2-F09.c

Qué permite hacerEl paciente o staff puede contrastar una somatocarta con mediciones guardadas anteriores.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-08-21

La declaración general sobre la somatocarta no acredita la comparación de mediciones anteriores. No se localizó una prueba específica de este recorrido.

No se infiere aceptación clínica sólo por existir la vista.

Ubicación y referencia técnica

panel de somatocarta

Comparar mediciones previas

  • somatocarta-comparacion.tsx36 y componente de comparación
  • ESTADO.mdEntregado y verificado
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba de comparar dos mediciones guardadas.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Vistas y controles

Cobertura: Sin caso vinculado

Capturar y consultar la valoración funcionalVista pendiente · Valoración funcionalNo se localizó una pantalla para capturar y consultar los ocho tests funcionales.FuncionalVista faltantePendiente documentadoM2-F10.b

Qué permite hacerCapturar los ocho tests: dorsiflexión, sentadilla a una pierna, postura, sentadilla con brazos arriba, movilidad de cadera, flexiones, sentadillas repetidas y escalón de tres minutos; consultar resultados.

Alcance
Base contratada
Registro de origen
2026-08-21
Validación pendiente · 2026-08-21

La fuente confirma tipo sin superficie y lo declara bloqueo explícito del Anexo A. No confundir modelo/reglas con función usable.

Brecha documentada 2026-08-21; sin superficie confirmada. M2-a es el único bloqueo explícito del Anexo A; la decisión sobre tests obligatorios sigue pendiente.

Ubicación y referencia técnica

sin ruta ni componente localizados

Capturar y consultar la valoración funcional

  • ESTADO.mdM2-a, líneas 32-37
  • phase-2-fitness.md79-93
  • index.tsValoracionFuncional
  • phase-2-fitness.md79-93
  • ESTADO.mdM2-a
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay superficie localizable ni prueba de los ocho tests.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Vistas y controles

Cobertura: Sin caso vinculado

Elegir y preparar ejercicios

005
Pruebas del flujo
14 pruebas vinculadas7 archivos3 casos QAE2E 1Unitarias / componentes 13

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Explorar catálogo de ejerciciosBiblioteca de ejerciciosFuncionalCódigo leídoPor probarM2-F01.a

Qué permite hacerEl staff consulta la biblioteca de ejercicios globales y del workspace en /ejercicios.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

La fuente sólo confirma código y señala pendiente el conteo real del seed. No acredita catálogo visible ni 500+ ejercicios en un entorno.

El contrato pide una biblioteca de 500+; el código no acredita el conteo real del entorno.

Ubicación y referencia técnica

/ejercicios

Explorar catálogo de ejercicios

  • page.tsx147-230
  • ejercicios.service.ts272-300
  • phase-2-fitness.mdFIT-002, Gap de cierre
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAE2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/staff-core-flows.spec.tsE2E · Cobertura parcial · 1 vinculadas / 5 definiciones en el archivo

Carga la ruta y el texto del catálogo, pero no comprueba visibilidad ni cantidad del catálogo.

  • coach validates routine assignment, exercise catalog and blocked nutrition permissionsL162
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-exercise-catalog-metadata · Catálogo de ejercicios muestra taxonomía fina
coachespecialistaadmin
Pasos
  1. Entrar al catálogo de ejercicios.
  2. Buscar ejercicios de pecho, espalda, pierna y core.
  3. Abrir filtros por grupo o músculo.
  4. Abrir drawer de ejercicio.
  5. Validar que cards/listas usen media liviana y drawer use detalle.
  6. Forzar un ejercicio legacy_review, uno archived oculto por defecto y uno con media faltante.
Esperado
  • El detalle no muestra el bloque Fuente original ni sus metadatos de importación. Los ejercicios muestran taxonomía, equipo, badges de estado y media correcta: 180 en cards/listas, 360 en drawer, 720 sólo con Ampliar guía; legacy/media faltante cae a inicio/fin, imagen o icono sin bloquear scroll.

Vistas:/ejercicios

Fuente: test-cases.json · testCases[id=fitness-exercise-catalog-metadata]

Automatización
  • e2e/staging/staff-core-flows.spec.ts

Cobertura: Referencias parciales

Buscar y filtrar ejerciciosBiblioteca de ejerciciosFuncionalCódigo leídoPor probarM2-F01.b

Qué permite hacerLa biblioteca filtra por búsqueda, músculo, equipo, dificultad, estado y procedencia del catálogo.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente

No se halló resultado de prueba funcional de búsqueda o filtros. La presencia de la página no es prueba de consulta correcta.

El patrón de movimiento es contractual, pero no se confirmó como faceta visible en la lectura focal.

Ubicación y referencia técnica

/ejercicios

Buscar y filtrar ejercicios

  • page.tsx164-280
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/routine-exercise-filters.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 3 definiciones en el archivo

Combina filtros y conserva opciones seleccionadas en la lógica de filtrado.

  • acepta varias opciones de un grupo y combina los grupos entre síL15
  • ofrece opciones presentes en ejercicios que cumplen los demás filtros y conserva las seleccionadasL32
tests/unit/components/ejercicios-selector-modal.test.tsxUnitarias / componentes · Comportamiento directo · 1 vinculadas / 15 definiciones en el archivo

Ejercita búsqueda y orígenes Global/Mis ejercicios en el selector.

  • Global y Mis ejercicios usan el origen del catálogo y se combinan con destacados y búsquedaL98
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
coachespecialistaadmin
Pasos
  1. Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
  2. Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
  3. Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
  4. Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
  5. Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
  6. Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
  7. Comprobar íconos y colores del bloque en el selector y resumen; filtrar mediante botones musculares con íconos anatómicos y quitar la selección al pulsar de nuevo.
  8. Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
Esperado
  • El catálogo, detalle y contenido del bloque comparten destino y filtros. Añadir/quitar actualiza sólo el borrador y la ocurrencia elegida. Conserva restricciones clínicas, datos antiguos y publicación versionada. La categoría del bloque solicita confirmación si no coincide y permite añadir al aceptar; cancelar no modifica el borrador.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-exercise-selector-modal]

Cobertura: Referencias parciales

Ver ficha del ejercicioBiblioteca y selector de ejerciciosFuncionalPruebas parcialesPor probarM2-F01.c

Qué permite hacerLa ficha reúne músculo, equipo, dificultad, instrucciones y recurso visual o video cuando existe.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-16

56 pruebas en siete archivos; revisión de navegador del árbol integrado antes de separar commit. QA remains needs-retest; build final se interrumpió y no acredita video/diagrama para cada ejercicio.

La spec FIT-SEP-07 se declara integrada; este inventario no verifica que cada ejercicio tenga video o diagrama.

Ubicación y referencia técnica

/ejercicios y selector del constructor

Ver ficha del ejercicio

  • ejercicio-detail-drawer.tsx142-357
  • README.md1-32
  • README.mdEvidencia obtenida antes del reinicio
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos2 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/ejercicio-planeacion-drawer.test.tsxUnitarias / componentes · Cobertura parcial · 2 vinculadas / 3 definiciones en el archivo

Comprueba consulta del detalle y retorno de foco sin mutar la prescripción; no cubre toda la ficha visual o vídeo.

  • permite leer datos relacionados sin reemplazar hasta confirmarL13
  • consulta sin media, cierra con Escape y devuelve el foco sin mutar la prescripciónL28
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-exercise-catalog-metadata · Catálogo de ejercicios muestra taxonomía fina
coachespecialistaadmin
Pasos
  1. Entrar al catálogo de ejercicios.
  2. Buscar ejercicios de pecho, espalda, pierna y core.
  3. Abrir filtros por grupo o músculo.
  4. Abrir drawer de ejercicio.
  5. Validar que cards/listas usen media liviana y drawer use detalle.
  6. Forzar un ejercicio legacy_review, uno archived oculto por defecto y uno con media faltante.
Esperado
  • El detalle no muestra el bloque Fuente original ni sus metadatos de importación. Los ejercicios muestran taxonomía, equipo, badges de estado y media correcta: 180 en cards/listas, 360 en drawer, 720 sólo con Ampliar guía; legacy/media faltante cae a inicio/fin, imagen o icono sin bloquear scroll.

Vistas:/ejercicios

Fuente: test-cases.json · testCases[id=fitness-exercise-catalog-metadata]

fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
coachespecialistaadmin
Pasos
  1. Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
  2. Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
  3. Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
  4. Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
  5. Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
  6. Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
  7. Comprobar íconos y colores del bloque en el selector y resumen; filtrar mediante botones musculares con íconos anatómicos y quitar la selección al pulsar de nuevo.
  8. Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
Esperado
  • El catálogo, detalle y contenido del bloque comparten destino y filtros. Añadir/quitar actualiza sólo el borrador y la ocurrencia elegida. Conserva restricciones clínicas, datos antiguos y publicación versionada. La categoría del bloque solicita confirmación si no coincide y permite añadir al aceptar; cancelar no modifica el borrador.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-exercise-selector-modal]

Automatización
  • e2e/staging/light-mode-catalogos.spec.ts

Cobertura: Referencias parciales

Gestionar ejercicios propios del equipoBiblioteca de ejerciciosFuncionalCódigo leídoPor probarM2-F01.d

Qué permite hacerEl equipo puede usar ejercicios propios mientras el catálogo global queda protegido contra edición directa.

Alcance
Documentado en producto; desglose contractual por conciliar
Registro de origen
Código leído
Validación pendiente · 2026-06-03

Aislamiento y seed productivo figuran pendientes. Código y reglas locales no prueban deploy ni operación multi-tenant.

La evidencia de aislamiento y seed productivo sigue pendiente en FIT-02/FIT-03.

Ubicación y referencia técnica

Ejercicios → Crear y editar

Gestionar ejercicios del workspace

  • ejercicios.service.ts338-345, 464-504
  • phase-2-fitness.md44-60
  • fitness-readiness-checklist.mdFIT-02 y FIT-03
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba semántica de alta/edición tenant ni de protección del catálogo global.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Vistas y controles

Cobertura: Sin caso vinculado

Sustituir ejercicio prescritoajuste de rutina y sesión del pacienteFuncionalPruebas parcialesPor probarM2-F02.b

Qué permite hacerCoach y paciente tienen superficies de intercambio para cambiar un ejercicio conservando el contexto de rutina.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-17

La entrega documenta el comportamiento y deja tres pasos de retest humano móvil. No hay resultado de ese retest ni prueba de aprobación, bloqueo y log completos.

FIT-SEP-04 figura integrada; la aprobación, bloqueo y log completos no se acreditan aquí como recorrido QA.

Ubicación y referencia técnica

ajuste de rutina y sesión del paciente

Sustituir ejercicio prescrito

  • exercise-swap-dialog.tsxcomponente de intercambio
  • m2-funciones.mdajustes de septiembre, M2-F03/F02
  • README.mdEntrega y Retest humano
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/rutina-reemplazo-ejercicio.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 3 definiciones en el archivo

Comprueba que el reemplazo altera sólo la ocurrencia elegida y conserva o reinicia la prescripción según compatibilidad.

  • reemplaza sólo la ocurrencia elegida y conserva prescripción, bloque y agrupaciónL7
  • incompatibilidad reinicia valores y no arrastra peso, reps ni media anteriorL16
tests/unit/lib/fitness/exercise-alternatives.test.tsUnitarias / componentes · Prueba de apoyo · 2 vinculadas / 6 definiciones en el archivo

Construye alternativas y exclusiones, pero no confirma la interacción de sustitución en una sesión.

  • prioriza equivalentes configurados y sustituciones ExerciseDB sin filtrar por equipoL24
  • omite targets legacy_review del pacienteL143
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-planning-exercise-replacement · Detalle y reemplazo contextual de ejercicios durante la planeación
coachespecialistaadmin
Pasos
  1. En escritorio, abrir el nombre de un ejercicio en la biblioteca y en un bloque: revisar detalle sin modificar el borrador; cerrar y recuperar el control de origen.
  2. Revisar alternativas del catálogo compatibles con el bloque y el equipo disponible; abrir una y volver sin confirmar.
  3. Confirmar una alternativa compatible y comprobar que sólo cambia esa ocurrencia, manteniendo día, bloque, posición, series, carga y notas.
  4. Repetir con el mismo ejercicio en varios días: las otras ocurrencias permanecen intactas.
  5. En un bloque Libre, revisar una alternativa de distinta modalidad o carga: debe advertir el restablecimiento de prescripción antes de confirmar.
  6. Guardar, recargar y asignar una rutina QA; comprobar en el portal el ejercicio sustituido y su prescripción, sin alterar versiones anteriores.
Esperado
  • El selector de cada ejercicio en el bloque ocupa sólo el ancho de su miniatura y texto, sin extender su fondo ni área de apertura al espacio vacío de la fila; los controles de series permanecen a la derecha y los nombres largos se ajustan al espacio disponible. El detalle no modifica la rutina. Sólo la confirmación reemplaza una ocurrencia con una alternativa disponible; conserva prescripción compatible y advierte cuando debe restablecerla. La selección del día y los filtros permanecen. La planeación con detalle de ejercicios y el wizard corresponden a escritorio; la comprobación posterior del portal paciente conserva su alcance móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-planning-exercise-replacement]

Cobertura: Referencias parciales

Crear la rutina

009
Pruebas del flujo
19 pruebas vinculadas11 archivos4 casos QAUnitarias / componentes 18E2E 1

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Iniciar rutina y díasCrear rutina del pacienteFuncionalCódigo leídoPor probarM2-F03.a

Qué permite hacerEl asistente crea una rutina, define días de entrenamiento y mantiene un flujo por pasos.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

El E2E coach→paciente sigue marcado pending HIXION. El asistente en código no acredita creación funcional.

El límite móvil está documentado; no equivale a una prueba de uso real.

Ubicación y referencia técnica

/pacientes/[id]/crear-rutina y /rutinas/crear

Iniciar rutina y días

  • page.tsxpágina del asistente
  • m2-f05-vistas.mdM2-V02
  • fitness-readiness-checklist.mdFIT-05
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos2 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/rutina-wizard-navigation.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Comprueba navegación y conservación local del asistente, no creación y publicación completas.

  • permite saltar a Guardar y volver a Datos conservando cambios sin enviar el formularioL23
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 10 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
coachespecialistaadmin
Pasos
  1. Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
  2. Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
  3. Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
  4. Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
  5. Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
  6. Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
  7. Comprobar íconos y colores del bloque en el selector y resumen; filtrar mediante botones musculares con íconos anatómicos y quitar la selección al pulsar de nuevo.
  8. Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
Esperado
  • El catálogo, detalle y contenido del bloque comparten destino y filtros. Añadir/quitar actualiza sólo el borrador y la ocurrencia elegida. Conserva restricciones clínicas, datos antiguos y publicación versionada. La categoría del bloque solicita confirmación si no coincide y permite añadir al aceptar; cancelar no modifica el borrador.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-exercise-selector-modal]

fitness-routine-structure-validation · Rutinas validan su estructura completa
coachespecialistaadmin
Pasos
  1. En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
  2. Abrir Crear programa completo desde cero y comprobar Fuerza general seleccionado en Datos. Cambiar el objetivo, reanudar un borrador y abrir una plantilla, una edición y una rutina día: cada recorrido conserva su objetivo propio.
  3. En el constructor a 768 px, comprobar que Biblioteca aparece junto a la rutina, que los controles de ejercicios caben sin recorte y que la distribución se lee en una columna. Por debajo de 768 px, Biblioteca vuelve debajo del constructor.
  4. Revisar Distribución de la rutina sin parámetros de prototipo: dona de categorías ampliada, barras con porcentajes de grupos principales e íconos del detalle de mayor a menor porcentaje. Core no se desglosa en abdominales o flexores; Brazos no se desglosa en bíceps o tríceps. Al hover o foco de teclado, el nombre aparece a la izquierda del ícono y la barra cede espacio suavemente; al salir se recupera. Sin chip Rutina completa. Cambiar de día conserva el acumulado; comprobar lectura en los anchos de escritorio soportados.
  5. Saltar entre Datos, Rutina y Guardar desde las bolitas: conservar datos, animar suavemente el progreso verde y revertirlo al volver. Guardar mantiene su tarjeta con borde neutro y sin franja amarilla superior.
  6. Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
  7. Añadir warm-up, cardio y libre: aparecen arriba. Enfriamiento aparece al final. Añadir Ejercicios: aparece antes del primer enfriamiento, o al final si no existe. Mover un bloque con contenido y comprobar duración, indicaciones y series intactas.
  8. Añadir un ejercicio mediante botón o arrastre: su configuración queda colapsada; el cuerpo de la tarjeta la abre/cierra. Imagen, nombre y resumen muestran fondo al hover y abren detalle sin alternar las series. Comprobar iconos en Añadir bloque, bordes sólidos, edición compacta de duración y compatibilidad desde ambas bibliotecas del wizard.
  9. Abrir un ejercicio, escribir Comentarios del ejercicio, cambiar de día y volver; guardar y recargar para confirmar que el comentario se conserva en ese ejercicio y aparece en el detalle y en la sesión del paciente. Las notas técnicas por serie permanecen independientes.
  10. Comprobar minutos estimados a la izquierda de ejercicios para el día seleccionado: cambiar series, descansos o duración de bloque actualiza el total; los bloques con duración no duplican el tiempo de sus ejercicios y el contenido sin tiempo marca estimación parcial.
  11. Comparar la duración del mismo día/versión en editor y portal; dos series de 30 s con 60 s de descanso intermedio suman 2 min. Rangos/tempo/grupos muestran supuestos; AMRAP sin tiempo es parcial. El objetivo manual conserva su etiqueta separada.
  12. Seleccionar cada bloque: Agregando a usa su color y el multiselect marca categorías compatibles (incluidas excepciones por etiquetas). Ajustar varias categorías, conservar filtros de nivel/equipo y deseleccionar para quitar categorías automáticas.
  13. En Biblioteca, comprobar que el contador muestra una pesa, el número de resultados y la palabra ejercicios sin recortarse a 768 px; el botón con icono de embudo está a la derecha de Buscar ejercicios y abre un modal con scroll propio, sin barra visible. Los seis filtros aparecen en orden: Categoría, Grupo muscular, Subgrupos musculares, Dificultad, Patrón de movimiento y Equipo. Se expanden con transición sin resplandor amarillo en su contenedor, muestran su cantidad de opciones elegidas y comparten el mismo estilo de chip. Si un grupo tiene opciones elegidas, su contador es amarillo y se ilumina el icono y su recuadro, abierto o cerrado; al limpiar vuelve a neutro. La selección amarilla no añade palomita; los iconos seleccionados de Categoría, grupos musculares y Dificultad son oscuros, mientras Patrón y Equipo muestran sólo texto. Categoría muestra sus opciones sin buscador; Flexibilidad usa expansión y Movilidad movimiento. Equipo se puede buscar por nombre. Elegir Core y balance deja en los otros grupos únicamente opciones presentes en esos ejercicios; elegir Pecho o Espalda limita del mismo modo Categoría, Subgrupos musculares, Dificultad, Patrón y Equipo. La búsqueda y los filtros de origen, destacados y bloque también ajustan las opciones. Varias opciones de un grupo amplían resultados; combinar grupos los restringe. Las opciones elegidas siguen visibles para poder retirarlas aunque no haya coincidencias. Ver ejercicios cierra el modal y conserva los filtros aplicados. Limpiar y Escape funcionan. En una ventana de poca altura, la lista de ejercicios tiene scroll propio y alcanza su último resultado.
  14. Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
  15. Desde una plantilla, añadir un bloque vacío y otro sólo con duración; refrescar la misma pestaña y comprobar que recupera ambos sin reaplicar la plantilla. Repetir desde creación genérica y al volver a Datos.
  16. Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
  17. Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
  18. Mover ejercicios entre bloques, incluidos vacíos y Libre legacy, por menú y arrastre. Agregar desde ambas bibliotecas a un bloque de otro tipo: cancelar conserva el contenido; confirmar permite guardar y recargar sin perder series, cargas ni notas. Ajustar o limpiar categorías permite encontrar ejercicios de cualquier tipo.
Esperado
  • Crear programa completo desde cero inicia con Fuerza general seleccionado y permite cambiarlo. Borradores, plantillas, edición, rutinas día y creación para paciente conservan su objetivo propio. A 768 px, Biblioteca permanece junto al constructor sin recortar ejercicios ni controles; por debajo vuelve debajo. Sólo se guardan rutinas con días y prescripción coherentes; se permiten bloques vacíos con indicaciones o duración, sin inventar series. Los ejercicios deben pertenecer al día de su bloque. La compatibilidad de categoría es una recomendación: agregar o mover a un bloque de otro tipo solicita confirmación, permite continuar y conserva la prescripción al guardar. Cancelar no modifica la rutina. El editor completo, su detalle y la copia de días se validan en escritorio. En móvil staff sólo corresponde edición rápida; el portal del paciente conserva su propio caso móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-structure-validation]

Cobertura: Referencias parciales

Añadir ejercicios a bloquespaso 1 del asistenteFuncionalPruebas parcialesPor probarM2-F03.b

Qué permite hacerEl constructor selecciona ejercicios del catálogo y los sitúa en el día o bloque de destino.

Alcance
Base contratada
Registro de origen
Reportado
Prueba parcial · 2026-09-16

56 pruebas y recorrido de navegador descritos antes de separar el contenido aislado. Needs-retest, sin publicación de rutina QA ni aceptación humana.

El contrato del selector fue aprobado el 16-sep; la aceptación humana permanece pendiente.

Ubicación y referencia técnica

paso 1 del asistente

Añadir ejercicios a bloques

  • ejercicios-selector-modal.tsx38-60
  • README.md1-54
  • README.mdEvidencia obtenida antes del reinicio y Recorrido de aceptación
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos2 casos QAUnitarias / componentes 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/ejercicios-selector-modal.test.tsxUnitarias / componentes · Comportamiento directo · 3 vinculadas / 15 definiciones en el archivo

Añade, quita y mueve ocurrencias al día o bloque seleccionado.

  • añade repetidos, quita sólo la ocurrencia elegida y conserva el borrador al reabrirL59
  • un día vacío requiere crear bloque y selecciona el nuevo destinoL111
  • mueve por menú a un bloque vacío, permite cancelar y preserva las series al confirmarL191
tests/unit/components/rutina-mover-bloques.test.tsxUnitarias / componentes · Comportamiento directo · 1 vinculadas / 4 definiciones en el archivo

Comprueba confirmar o cancelar el destino antes de añadir al bloque.

  • arrastrar desde catálogo a un bloque vacío confirma, cancela y agrega sólo al aceptarL61
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 10 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
coachespecialistaadmin
Pasos
  1. Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
  2. Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
  3. Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
  4. Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
  5. Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
  6. Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
  7. Comprobar íconos y colores del bloque en el selector y resumen; filtrar mediante botones musculares con íconos anatómicos y quitar la selección al pulsar de nuevo.
  8. Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
Esperado
  • El catálogo, detalle y contenido del bloque comparten destino y filtros. Añadir/quitar actualiza sólo el borrador y la ocurrencia elegida. Conserva restricciones clínicas, datos antiguos y publicación versionada. La categoría del bloque solicita confirmación si no coincide y permite añadir al aceptar; cancelar no modifica el borrador.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-exercise-selector-modal]

fitness-routine-structure-validation · Rutinas validan su estructura completa
coachespecialistaadmin
Pasos
  1. En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
  2. Abrir Crear programa completo desde cero y comprobar Fuerza general seleccionado en Datos. Cambiar el objetivo, reanudar un borrador y abrir una plantilla, una edición y una rutina día: cada recorrido conserva su objetivo propio.
  3. En el constructor a 768 px, comprobar que Biblioteca aparece junto a la rutina, que los controles de ejercicios caben sin recorte y que la distribución se lee en una columna. Por debajo de 768 px, Biblioteca vuelve debajo del constructor.
  4. Revisar Distribución de la rutina sin parámetros de prototipo: dona de categorías ampliada, barras con porcentajes de grupos principales e íconos del detalle de mayor a menor porcentaje. Core no se desglosa en abdominales o flexores; Brazos no se desglosa en bíceps o tríceps. Al hover o foco de teclado, el nombre aparece a la izquierda del ícono y la barra cede espacio suavemente; al salir se recupera. Sin chip Rutina completa. Cambiar de día conserva el acumulado; comprobar lectura en los anchos de escritorio soportados.
  5. Saltar entre Datos, Rutina y Guardar desde las bolitas: conservar datos, animar suavemente el progreso verde y revertirlo al volver. Guardar mantiene su tarjeta con borde neutro y sin franja amarilla superior.
  6. Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
  7. Añadir warm-up, cardio y libre: aparecen arriba. Enfriamiento aparece al final. Añadir Ejercicios: aparece antes del primer enfriamiento, o al final si no existe. Mover un bloque con contenido y comprobar duración, indicaciones y series intactas.
  8. Añadir un ejercicio mediante botón o arrastre: su configuración queda colapsada; el cuerpo de la tarjeta la abre/cierra. Imagen, nombre y resumen muestran fondo al hover y abren detalle sin alternar las series. Comprobar iconos en Añadir bloque, bordes sólidos, edición compacta de duración y compatibilidad desde ambas bibliotecas del wizard.
  9. Abrir un ejercicio, escribir Comentarios del ejercicio, cambiar de día y volver; guardar y recargar para confirmar que el comentario se conserva en ese ejercicio y aparece en el detalle y en la sesión del paciente. Las notas técnicas por serie permanecen independientes.
  10. Comprobar minutos estimados a la izquierda de ejercicios para el día seleccionado: cambiar series, descansos o duración de bloque actualiza el total; los bloques con duración no duplican el tiempo de sus ejercicios y el contenido sin tiempo marca estimación parcial.
  11. Comparar la duración del mismo día/versión en editor y portal; dos series de 30 s con 60 s de descanso intermedio suman 2 min. Rangos/tempo/grupos muestran supuestos; AMRAP sin tiempo es parcial. El objetivo manual conserva su etiqueta separada.
  12. Seleccionar cada bloque: Agregando a usa su color y el multiselect marca categorías compatibles (incluidas excepciones por etiquetas). Ajustar varias categorías, conservar filtros de nivel/equipo y deseleccionar para quitar categorías automáticas.
  13. En Biblioteca, comprobar que el contador muestra una pesa, el número de resultados y la palabra ejercicios sin recortarse a 768 px; el botón con icono de embudo está a la derecha de Buscar ejercicios y abre un modal con scroll propio, sin barra visible. Los seis filtros aparecen en orden: Categoría, Grupo muscular, Subgrupos musculares, Dificultad, Patrón de movimiento y Equipo. Se expanden con transición sin resplandor amarillo en su contenedor, muestran su cantidad de opciones elegidas y comparten el mismo estilo de chip. Si un grupo tiene opciones elegidas, su contador es amarillo y se ilumina el icono y su recuadro, abierto o cerrado; al limpiar vuelve a neutro. La selección amarilla no añade palomita; los iconos seleccionados de Categoría, grupos musculares y Dificultad son oscuros, mientras Patrón y Equipo muestran sólo texto. Categoría muestra sus opciones sin buscador; Flexibilidad usa expansión y Movilidad movimiento. Equipo se puede buscar por nombre. Elegir Core y balance deja en los otros grupos únicamente opciones presentes en esos ejercicios; elegir Pecho o Espalda limita del mismo modo Categoría, Subgrupos musculares, Dificultad, Patrón y Equipo. La búsqueda y los filtros de origen, destacados y bloque también ajustan las opciones. Varias opciones de un grupo amplían resultados; combinar grupos los restringe. Las opciones elegidas siguen visibles para poder retirarlas aunque no haya coincidencias. Ver ejercicios cierra el modal y conserva los filtros aplicados. Limpiar y Escape funcionan. En una ventana de poca altura, la lista de ejercicios tiene scroll propio y alcanza su último resultado.
  14. Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
  15. Desde una plantilla, añadir un bloque vacío y otro sólo con duración; refrescar la misma pestaña y comprobar que recupera ambos sin reaplicar la plantilla. Repetir desde creación genérica y al volver a Datos.
  16. Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
  17. Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
  18. Mover ejercicios entre bloques, incluidos vacíos y Libre legacy, por menú y arrastre. Agregar desde ambas bibliotecas a un bloque de otro tipo: cancelar conserva el contenido; confirmar permite guardar y recargar sin perder series, cargas ni notas. Ajustar o limpiar categorías permite encontrar ejercicios de cualquier tipo.
Esperado
  • Crear programa completo desde cero inicia con Fuerza general seleccionado y permite cambiarlo. Borradores, plantillas, edición, rutinas día y creación para paciente conservan su objetivo propio. A 768 px, Biblioteca permanece junto al constructor sin recortar ejercicios ni controles; por debajo vuelve debajo. Sólo se guardan rutinas con días y prescripción coherentes; se permiten bloques vacíos con indicaciones o duración, sin inventar series. Los ejercicios deben pertenecer al día de su bloque. La compatibilidad de categoría es una recomendación: agregar o mover a un bloque de otro tipo solicita confirmación, permite continuar y conserva la prescripción al guardar. Cancelar no modifica la rutina. El editor completo, su detalle y la copia de días se validan en escritorio. En móvil staff sólo corresponde edición rápida; el portal del paciente conserva su propio caso móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-structure-validation]

Cobertura: Referencias parciales

Prescribir series y descansospaso 2 del asistenteFuncionalCódigo leídoPor probarM2-F03.c

Qué permite hacerEl constructor configura series, repeticiones, carga, descanso y modalidades de la serie.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

Nomenclatura y visibilidad de técnicas siguen sin decisión clínica. No se halló prueba funcional que cubra la prescripción completa.

La nomenclatura de técnicas avanzadas y visibilidad por nivel siguen por acordar.

Ubicación y referencia técnica

paso 2 del asistente

Prescribir series y descansos

  • paso-2-configurar-sets.tsx87-401
  • phase-2-fitness.md29-43
  • fitness-readiness-checklist.mdDecisiones clínicas pendientes
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/rutina-series-isolated.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Comprueba edición aislada de descanso y conservación de técnicas; no cubre la prescripción completa.

  • editar descanso en modo individual preserva las otras series y sus técnicasL7
tests/unit/lib/fitness/routine-lifecycle.test.tsUnitarias / componentes · Prueba de apoyo · 2 vinculadas / 18 definiciones en el archivo

Rechaza prescripciones manipuladas y valida estructura de días y series en el dominio.

  • rechaza prescripciones con días o series manipuladasL286
  • acepta y conserva una categoría distinta tras serializar sin relajar referencias de díaL360
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 8 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-structure-validation · Rutinas validan su estructura completa
coachespecialistaadmin
Pasos
  1. En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
  2. Abrir Crear programa completo desde cero y comprobar Fuerza general seleccionado en Datos. Cambiar el objetivo, reanudar un borrador y abrir una plantilla, una edición y una rutina día: cada recorrido conserva su objetivo propio.
  3. En el constructor a 768 px, comprobar que Biblioteca aparece junto a la rutina, que los controles de ejercicios caben sin recorte y que la distribución se lee en una columna. Por debajo de 768 px, Biblioteca vuelve debajo del constructor.
  4. Revisar Distribución de la rutina sin parámetros de prototipo: dona de categorías ampliada, barras con porcentajes de grupos principales e íconos del detalle de mayor a menor porcentaje. Core no se desglosa en abdominales o flexores; Brazos no se desglosa en bíceps o tríceps. Al hover o foco de teclado, el nombre aparece a la izquierda del ícono y la barra cede espacio suavemente; al salir se recupera. Sin chip Rutina completa. Cambiar de día conserva el acumulado; comprobar lectura en los anchos de escritorio soportados.
  5. Saltar entre Datos, Rutina y Guardar desde las bolitas: conservar datos, animar suavemente el progreso verde y revertirlo al volver. Guardar mantiene su tarjeta con borde neutro y sin franja amarilla superior.
  6. Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
  7. Añadir warm-up, cardio y libre: aparecen arriba. Enfriamiento aparece al final. Añadir Ejercicios: aparece antes del primer enfriamiento, o al final si no existe. Mover un bloque con contenido y comprobar duración, indicaciones y series intactas.
  8. Añadir un ejercicio mediante botón o arrastre: su configuración queda colapsada; el cuerpo de la tarjeta la abre/cierra. Imagen, nombre y resumen muestran fondo al hover y abren detalle sin alternar las series. Comprobar iconos en Añadir bloque, bordes sólidos, edición compacta de duración y compatibilidad desde ambas bibliotecas del wizard.
  9. Abrir un ejercicio, escribir Comentarios del ejercicio, cambiar de día y volver; guardar y recargar para confirmar que el comentario se conserva en ese ejercicio y aparece en el detalle y en la sesión del paciente. Las notas técnicas por serie permanecen independientes.
  10. Comprobar minutos estimados a la izquierda de ejercicios para el día seleccionado: cambiar series, descansos o duración de bloque actualiza el total; los bloques con duración no duplican el tiempo de sus ejercicios y el contenido sin tiempo marca estimación parcial.
  11. Comparar la duración del mismo día/versión en editor y portal; dos series de 30 s con 60 s de descanso intermedio suman 2 min. Rangos/tempo/grupos muestran supuestos; AMRAP sin tiempo es parcial. El objetivo manual conserva su etiqueta separada.
  12. Seleccionar cada bloque: Agregando a usa su color y el multiselect marca categorías compatibles (incluidas excepciones por etiquetas). Ajustar varias categorías, conservar filtros de nivel/equipo y deseleccionar para quitar categorías automáticas.
  13. En Biblioteca, comprobar que el contador muestra una pesa, el número de resultados y la palabra ejercicios sin recortarse a 768 px; el botón con icono de embudo está a la derecha de Buscar ejercicios y abre un modal con scroll propio, sin barra visible. Los seis filtros aparecen en orden: Categoría, Grupo muscular, Subgrupos musculares, Dificultad, Patrón de movimiento y Equipo. Se expanden con transición sin resplandor amarillo en su contenedor, muestran su cantidad de opciones elegidas y comparten el mismo estilo de chip. Si un grupo tiene opciones elegidas, su contador es amarillo y se ilumina el icono y su recuadro, abierto o cerrado; al limpiar vuelve a neutro. La selección amarilla no añade palomita; los iconos seleccionados de Categoría, grupos musculares y Dificultad son oscuros, mientras Patrón y Equipo muestran sólo texto. Categoría muestra sus opciones sin buscador; Flexibilidad usa expansión y Movilidad movimiento. Equipo se puede buscar por nombre. Elegir Core y balance deja en los otros grupos únicamente opciones presentes en esos ejercicios; elegir Pecho o Espalda limita del mismo modo Categoría, Subgrupos musculares, Dificultad, Patrón y Equipo. La búsqueda y los filtros de origen, destacados y bloque también ajustan las opciones. Varias opciones de un grupo amplían resultados; combinar grupos los restringe. Las opciones elegidas siguen visibles para poder retirarlas aunque no haya coincidencias. Ver ejercicios cierra el modal y conserva los filtros aplicados. Limpiar y Escape funcionan. En una ventana de poca altura, la lista de ejercicios tiene scroll propio y alcanza su último resultado.
  14. Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
  15. Desde una plantilla, añadir un bloque vacío y otro sólo con duración; refrescar la misma pestaña y comprobar que recupera ambos sin reaplicar la plantilla. Repetir desde creación genérica y al volver a Datos.
  16. Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
  17. Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
  18. Mover ejercicios entre bloques, incluidos vacíos y Libre legacy, por menú y arrastre. Agregar desde ambas bibliotecas a un bloque de otro tipo: cancelar conserva el contenido; confirmar permite guardar y recargar sin perder series, cargas ni notas. Ajustar o limpiar categorías permite encontrar ejercicios de cualquier tipo.
Esperado
  • Crear programa completo desde cero inicia con Fuerza general seleccionado y permite cambiarlo. Borradores, plantillas, edición, rutinas día y creación para paciente conservan su objetivo propio. A 768 px, Biblioteca permanece junto al constructor sin recortar ejercicios ni controles; por debajo vuelve debajo. Sólo se guardan rutinas con días y prescripción coherentes; se permiten bloques vacíos con indicaciones o duración, sin inventar series. Los ejercicios deben pertenecer al día de su bloque. La compatibilidad de categoría es una recomendación: agregar o mover a un bloque de otro tipo solicita confirmación, permite continuar y conserva la prescripción al guardar. Cancelar no modifica la rutina. El editor completo, su detalle y la copia de días se validan en escritorio. En móvil staff sólo corresponde edición rápida; el portal del paciente conserva su propio caso móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-structure-validation]

Cobertura: Referencias parciales

Ordenar modalidades y bloquespasos 1 y 2 del asistenteFuncionalPruebas parcialesPor probarM2-F03.d

Qué permite hacerLa rutina organiza ejercicios y bloques, incluidos superset, tri-set, circuito y segmentos del día.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-16

Cambio autorizado con caso fitness-routine-structure-validation, en needs-retest. No registra una aceptación humana ni cubre tempo, ROM e indicaciones.

Tempo, ROM e indicaciones forman parte del contrato; no se validó su recorrido completo.

Ubicación y referencia técnica

pasos 1 y 2 del asistente

Ordenar modalidades y bloques

  • paso-1-construir-dias.tsx21, 558-679
  • rutina-series-inline-editor.tsx281
  • README.mdEstado y caso QA
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/rutina-segmentos.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 16 definiciones en el archivo

Comprueba ordenar, mover y conservar bloques y ocurrencias entre días.

  • mueve cardio antes del principal conservando cada ocurrencia y los otros díasL47
  • reordena los bloques guardados y completa instrucciones para poder persistirlosL65
tests/unit/components/segmento-editor.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 3 definiciones en el archivo

Cubre interacción de selección y movimiento de cardio, no todas las modalidades.

  • el coach cambia duración y mueve cardio completo al principioL28
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 8 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-structure-validation · Rutinas validan su estructura completa
coachespecialistaadmin
Pasos
  1. En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
  2. Abrir Crear programa completo desde cero y comprobar Fuerza general seleccionado en Datos. Cambiar el objetivo, reanudar un borrador y abrir una plantilla, una edición y una rutina día: cada recorrido conserva su objetivo propio.
  3. En el constructor a 768 px, comprobar que Biblioteca aparece junto a la rutina, que los controles de ejercicios caben sin recorte y que la distribución se lee en una columna. Por debajo de 768 px, Biblioteca vuelve debajo del constructor.
  4. Revisar Distribución de la rutina sin parámetros de prototipo: dona de categorías ampliada, barras con porcentajes de grupos principales e íconos del detalle de mayor a menor porcentaje. Core no se desglosa en abdominales o flexores; Brazos no se desglosa en bíceps o tríceps. Al hover o foco de teclado, el nombre aparece a la izquierda del ícono y la barra cede espacio suavemente; al salir se recupera. Sin chip Rutina completa. Cambiar de día conserva el acumulado; comprobar lectura en los anchos de escritorio soportados.
  5. Saltar entre Datos, Rutina y Guardar desde las bolitas: conservar datos, animar suavemente el progreso verde y revertirlo al volver. Guardar mantiene su tarjeta con borde neutro y sin franja amarilla superior.
  6. Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
  7. Añadir warm-up, cardio y libre: aparecen arriba. Enfriamiento aparece al final. Añadir Ejercicios: aparece antes del primer enfriamiento, o al final si no existe. Mover un bloque con contenido y comprobar duración, indicaciones y series intactas.
  8. Añadir un ejercicio mediante botón o arrastre: su configuración queda colapsada; el cuerpo de la tarjeta la abre/cierra. Imagen, nombre y resumen muestran fondo al hover y abren detalle sin alternar las series. Comprobar iconos en Añadir bloque, bordes sólidos, edición compacta de duración y compatibilidad desde ambas bibliotecas del wizard.
  9. Abrir un ejercicio, escribir Comentarios del ejercicio, cambiar de día y volver; guardar y recargar para confirmar que el comentario se conserva en ese ejercicio y aparece en el detalle y en la sesión del paciente. Las notas técnicas por serie permanecen independientes.
  10. Comprobar minutos estimados a la izquierda de ejercicios para el día seleccionado: cambiar series, descansos o duración de bloque actualiza el total; los bloques con duración no duplican el tiempo de sus ejercicios y el contenido sin tiempo marca estimación parcial.
  11. Comparar la duración del mismo día/versión en editor y portal; dos series de 30 s con 60 s de descanso intermedio suman 2 min. Rangos/tempo/grupos muestran supuestos; AMRAP sin tiempo es parcial. El objetivo manual conserva su etiqueta separada.
  12. Seleccionar cada bloque: Agregando a usa su color y el multiselect marca categorías compatibles (incluidas excepciones por etiquetas). Ajustar varias categorías, conservar filtros de nivel/equipo y deseleccionar para quitar categorías automáticas.
  13. En Biblioteca, comprobar que el contador muestra una pesa, el número de resultados y la palabra ejercicios sin recortarse a 768 px; el botón con icono de embudo está a la derecha de Buscar ejercicios y abre un modal con scroll propio, sin barra visible. Los seis filtros aparecen en orden: Categoría, Grupo muscular, Subgrupos musculares, Dificultad, Patrón de movimiento y Equipo. Se expanden con transición sin resplandor amarillo en su contenedor, muestran su cantidad de opciones elegidas y comparten el mismo estilo de chip. Si un grupo tiene opciones elegidas, su contador es amarillo y se ilumina el icono y su recuadro, abierto o cerrado; al limpiar vuelve a neutro. La selección amarilla no añade palomita; los iconos seleccionados de Categoría, grupos musculares y Dificultad son oscuros, mientras Patrón y Equipo muestran sólo texto. Categoría muestra sus opciones sin buscador; Flexibilidad usa expansión y Movilidad movimiento. Equipo se puede buscar por nombre. Elegir Core y balance deja en los otros grupos únicamente opciones presentes en esos ejercicios; elegir Pecho o Espalda limita del mismo modo Categoría, Subgrupos musculares, Dificultad, Patrón y Equipo. La búsqueda y los filtros de origen, destacados y bloque también ajustan las opciones. Varias opciones de un grupo amplían resultados; combinar grupos los restringe. Las opciones elegidas siguen visibles para poder retirarlas aunque no haya coincidencias. Ver ejercicios cierra el modal y conserva los filtros aplicados. Limpiar y Escape funcionan. En una ventana de poca altura, la lista de ejercicios tiene scroll propio y alcanza su último resultado.
  14. Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
  15. Desde una plantilla, añadir un bloque vacío y otro sólo con duración; refrescar la misma pestaña y comprobar que recupera ambos sin reaplicar la plantilla. Repetir desde creación genérica y al volver a Datos.
  16. Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
  17. Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
  18. Mover ejercicios entre bloques, incluidos vacíos y Libre legacy, por menú y arrastre. Agregar desde ambas bibliotecas a un bloque de otro tipo: cancelar conserva el contenido; confirmar permite guardar y recargar sin perder series, cargas ni notas. Ajustar o limpiar categorías permite encontrar ejercicios de cualquier tipo.
Esperado
  • Crear programa completo desde cero inicia con Fuerza general seleccionado y permite cambiarlo. Borradores, plantillas, edición, rutinas día y creación para paciente conservan su objetivo propio. A 768 px, Biblioteca permanece junto al constructor sin recortar ejercicios ni controles; por debajo vuelve debajo. Sólo se guardan rutinas con días y prescripción coherentes; se permiten bloques vacíos con indicaciones o duración, sin inventar series. Los ejercicios deben pertenecer al día de su bloque. La compatibilidad de categoría es una recomendación: agregar o mover a un bloque de otro tipo solicita confirmación, permite continuar y conserva la prescripción al guardar. Cancelar no modifica la rutina. El editor completo, su detalle y la copia de días se validan en escritorio. En móvil staff sólo corresponde edición rápida; el portal del paciente conserva su propio caso móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-structure-validation]

Cobertura: Referencias parciales

Reanudar borrador contextualconstructor de rutinaFuncionalPruebas parcialesPor probarM2-F03.e

Qué permite hacerEl coach puede salir hacia chat o biblioteca y volver al borrador de rutina sin perder el contexto.

Alcance
Base contratada
Registro de origen
Reportado
Prueba parcial · 2026-09-16

19/19 focales, 30/30 reglas, 2209 casos de suite y revisión visual de fallo de escritura. Las reglas no están desplegadas; recuperación cloud y revisión humana siguen pendientes; no cubre todo retorno contextual.

Es una precisión de M2-F03, no una función adicional.

Ubicación y referencia técnica

constructor de rutina

Reanudar borrador contextual

  • rutina-return-button.tsx10
  • m2-funciones.mdFIT-SEP-06
  • README.mdEvidencia del candidato
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/rutina-reload-draft.test.tsxUnitarias / componentes · Comportamiento directo · 2 vinculadas / 5 definiciones en el archivo

Comprueba aislamiento del borrador frente a otra URL, usuario o navegación.

  • no restaura automáticamente otro usuario, otra entrada o una navegación nuevaL30
  • rechaza un borrador de otra URL aunque pertenezca al mismo usuarioL64
tests/unit/components/rutina-wizard-navigation.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Conserva cambios al navegar entre pasos sin publicar.

  • permite saltar a Guardar y volver a Datos conservando cambios sin enviar el formularioL23
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-draft-resume · Borrador de rutina se puede reanudar
coachespecialistaadmin
Pasos
  1. En escritorio, crear para un paciente QA un borrador con días, ejercicios y prescripción reconocibles y salir sin publicar.
  2. Volver a Crear rutina y elegir Reanudar; comprobar que se restauran paciente, días, ejercicios y valores exactos.
  3. Salir de nuevo, elegir Descartar y confirmar que el wizard inicia vacío al regresar.
  4. Desde el paso Rutina con otro día y bloque seleccionados, salir al chat y catálogo completos; usar Volver a la rutina y comprobar mismo modo, paso, día, bloque y cambios anteriores al autosave. Repetir en edición de plantilla y de asignación. Sin contexto válido no aparece retorno.
  5. Abrir otro paciente y verificar que nunca recibe ni ofrece el borrador del paciente original.
Esperado
  • En escritorio, el modal restaura el borrador correcto y permite descartarlo. La reanudación del wizard no forma parte de la edición rápida móvil.

Vistas:/pacientes/[id]/crear-rutina · requiere paciente/rutinas/crear/chat/ejercicios

Fuente: test-cases.json · testCases[id=fitness-routine-draft-resume]

Automatización
  • e2e/staging/rutina-day-copy.spec.ts 0/1 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Partir de plantilla completaPlantillas y creador de rutinasFuncionalCódigo leídoPor probarM2-F04.a

Qué permite hacerLa biblioteca ofrece plantillas de rutina completas para acelerar la creación de un programa.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

El recorrido E2E pendiente incluye crear rutina desde plantilla. Seeds y hooks no acreditan aplicar una plantilla.

El Anexo nombra Full Body, PPL, Upper/Lower, Bro Split y Calistenia.

Ubicación y referencia técnica

/rutinas y constructor

Partir de plantilla completa

  • seed-rutinas-templates.tsplantillas base
  • use-rutinas-templates.tshook de plantillas
  • fitness-readiness-checklist.mdFIT-05
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/routine-template-preview.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 2 definiciones en el archivo

Construye la preselección y fallback de vista previa; no asigna una plantilla a un paciente.

  • preselecciona una plantilla por id aunque use el formato legacyL27
  • construye fallback por días cuando una plantilla legacy no tiene media ni ejerciciosL32
e2e/staging/rutinas-asignacion.spec.tsE2E · Cobertura parcial · 1 vinculadas / 4 definiciones en el archivo

El recorrido pretende abrir la asignación desde plantilla, pero la corrida actual falló antes del CTA.

  • Asignacion desde plantilla permite editar nombre y dias antes de asignarL55
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
coachespecialistaadmin
Pasos
  1. Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
  2. Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
  3. Confirmar que primero aparece el selector de paciente; buscar por nombre, email u objetivo y comprobar que sólo después se muestran la plantilla preseleccionada, su vista previa y configuración.
  4. Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
  5. En escritorio, confirmar que todas las tarjetas muestran Ver y asignar, Editar y Eliminar; editar una propia, guardar y verificar que se actualizó el mismo ID sin crear copia ni asignación.
  6. En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
  7. Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
  8. Validar que sin equipo configurado no aparezca estado y que cualquier hallazgo de equipo, nivel, técnica o contexto clínico se muestre únicamente como Revisar, sin bloquear la asignación.
  9. En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
  10. Probar una plantilla legacy sin media. En escritorio, comprobar Crear sin plantilla y Personalizar en wizard; en móvil, conservar el configurador directo sin abrir detalle completo ni wizard.
  11. Repetir con rutina activa: cancelar conserva la asignación anterior; confirmar reemplazo publica una sola rutina activa y cierra la anterior de forma atómica. Comprobar desde staff y paciente. La opción de convivencia adicional no pertenece al contrato vigente.
Esperado
  • Todas las entradas genéricas usan un solo configurador accesible; /rutinas pide primero el paciente y luego muestra la plantilla preseleccionada, alinea los controles al pie y carga pacientes activos bajo demanda. En escritorio, Ver y asignar, Editar y Eliminar están presentes en todas las tarjetas; los permisos protegen las globales y Editar actualiza el mismo programa mediante el wizard específico. La asignación directa conserva su cobertura móvil; los accesos de edición completa, detalle y wizard se validan sólo en escritorio. Ningún hallazgo de equipo, nivel, técnica o contexto clínico muestra Bloqueada ni impide asignar; los motivos permanecen como advertencias accionables. En escritorio, cada plantilla Recomendada explica en el detalle qué coincidencias sustentan esa recomendación. El flujo mantiene series/reps/descansos y reemplaza de forma atómica, conserva una sola rutina activa y no cierra antes de terminar.

Vistas:/rutinas/pacientes/pacientes/[id] · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-direct-assignment]

Automatización
  • e2e/staging/rutinas-asignacion.spec.ts 0/4 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Guardar plantilla del coachvista final del constructorFuncionalCódigo leídoPor probarM2-F04.b

Qué permite hacerEl flujo final puede guardar una rutina propia como plantilla reutilizable con otro paciente.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

El E2E coach→paciente continúa pendiente. Código de vista final no equivale a persistencia verificada.

No confundir con las plantillas de segmentos adicionales.

Ubicación y referencia técnica

vista final del constructor

Guardar plantilla del coach

  • paso-3-vista-final.tsx452-505, 804
  • rutinasTemplates.service.tsservicio
  • fitness-readiness-checklist.mdFIT-05
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos0 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba de guardar y reutilizar una plantilla propia.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Vistas y controles

Cobertura: Sin caso vinculado

Segmentar el día entrenableconstructor y sesión del pacienteFuncionalPruebas parcialesPor probarM2-X01

Qué permite hacerUn día puede dividirse en calentamiento, principal, cardio y enfriamiento para staff y paciente.

Alcance
Adicional por conciliar
Registro de origen
Código leído
Prueba parcial · 2026-09-16

La corrida de 56 pruebas incluye segmentos; se describe navegación y creación de bloque. La evidencia viene del árbol integrado y permanece needs-retest; es función adicional.

Fue pedido el 7-sep y no aumenta por sí solo el alcance contratado.

Ubicación y referencia técnica

constructor y sesión del paciente

Segmentar el día entrenable

  • segmento-editor.tsx13-19
  • m2-funciones.mdM2-X01
  • README.mdValidación y ajuste visual posterior
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/rutina-segmentos.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 16 definiciones en el archivo

Cubre creación, reordenamiento y persistencia de calentamiento, principal, cardio y enfriamiento.

  • muestra warm-up y cardio con instrucciones propias y ocurrencias independientesL21
  • inserta Enfriamiento al final y mantiene las reglas de los demás bloquesL133
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 8 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-structure-validation · Rutinas validan su estructura completa
coachespecialistaadmin
Pasos
  1. En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
  2. Abrir Crear programa completo desde cero y comprobar Fuerza general seleccionado en Datos. Cambiar el objetivo, reanudar un borrador y abrir una plantilla, una edición y una rutina día: cada recorrido conserva su objetivo propio.
  3. En el constructor a 768 px, comprobar que Biblioteca aparece junto a la rutina, que los controles de ejercicios caben sin recorte y que la distribución se lee en una columna. Por debajo de 768 px, Biblioteca vuelve debajo del constructor.
  4. Revisar Distribución de la rutina sin parámetros de prototipo: dona de categorías ampliada, barras con porcentajes de grupos principales e íconos del detalle de mayor a menor porcentaje. Core no se desglosa en abdominales o flexores; Brazos no se desglosa en bíceps o tríceps. Al hover o foco de teclado, el nombre aparece a la izquierda del ícono y la barra cede espacio suavemente; al salir se recupera. Sin chip Rutina completa. Cambiar de día conserva el acumulado; comprobar lectura en los anchos de escritorio soportados.
  5. Saltar entre Datos, Rutina y Guardar desde las bolitas: conservar datos, animar suavemente el progreso verde y revertirlo al volver. Guardar mantiene su tarjeta con borde neutro y sin franja amarilla superior.
  6. Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
  7. Añadir warm-up, cardio y libre: aparecen arriba. Enfriamiento aparece al final. Añadir Ejercicios: aparece antes del primer enfriamiento, o al final si no existe. Mover un bloque con contenido y comprobar duración, indicaciones y series intactas.
  8. Añadir un ejercicio mediante botón o arrastre: su configuración queda colapsada; el cuerpo de la tarjeta la abre/cierra. Imagen, nombre y resumen muestran fondo al hover y abren detalle sin alternar las series. Comprobar iconos en Añadir bloque, bordes sólidos, edición compacta de duración y compatibilidad desde ambas bibliotecas del wizard.
  9. Abrir un ejercicio, escribir Comentarios del ejercicio, cambiar de día y volver; guardar y recargar para confirmar que el comentario se conserva en ese ejercicio y aparece en el detalle y en la sesión del paciente. Las notas técnicas por serie permanecen independientes.
  10. Comprobar minutos estimados a la izquierda de ejercicios para el día seleccionado: cambiar series, descansos o duración de bloque actualiza el total; los bloques con duración no duplican el tiempo de sus ejercicios y el contenido sin tiempo marca estimación parcial.
  11. Comparar la duración del mismo día/versión en editor y portal; dos series de 30 s con 60 s de descanso intermedio suman 2 min. Rangos/tempo/grupos muestran supuestos; AMRAP sin tiempo es parcial. El objetivo manual conserva su etiqueta separada.
  12. Seleccionar cada bloque: Agregando a usa su color y el multiselect marca categorías compatibles (incluidas excepciones por etiquetas). Ajustar varias categorías, conservar filtros de nivel/equipo y deseleccionar para quitar categorías automáticas.
  13. En Biblioteca, comprobar que el contador muestra una pesa, el número de resultados y la palabra ejercicios sin recortarse a 768 px; el botón con icono de embudo está a la derecha de Buscar ejercicios y abre un modal con scroll propio, sin barra visible. Los seis filtros aparecen en orden: Categoría, Grupo muscular, Subgrupos musculares, Dificultad, Patrón de movimiento y Equipo. Se expanden con transición sin resplandor amarillo en su contenedor, muestran su cantidad de opciones elegidas y comparten el mismo estilo de chip. Si un grupo tiene opciones elegidas, su contador es amarillo y se ilumina el icono y su recuadro, abierto o cerrado; al limpiar vuelve a neutro. La selección amarilla no añade palomita; los iconos seleccionados de Categoría, grupos musculares y Dificultad son oscuros, mientras Patrón y Equipo muestran sólo texto. Categoría muestra sus opciones sin buscador; Flexibilidad usa expansión y Movilidad movimiento. Equipo se puede buscar por nombre. Elegir Core y balance deja en los otros grupos únicamente opciones presentes en esos ejercicios; elegir Pecho o Espalda limita del mismo modo Categoría, Subgrupos musculares, Dificultad, Patrón y Equipo. La búsqueda y los filtros de origen, destacados y bloque también ajustan las opciones. Varias opciones de un grupo amplían resultados; combinar grupos los restringe. Las opciones elegidas siguen visibles para poder retirarlas aunque no haya coincidencias. Ver ejercicios cierra el modal y conserva los filtros aplicados. Limpiar y Escape funcionan. En una ventana de poca altura, la lista de ejercicios tiene scroll propio y alcanza su último resultado.
  14. Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
  15. Desde una plantilla, añadir un bloque vacío y otro sólo con duración; refrescar la misma pestaña y comprobar que recupera ambos sin reaplicar la plantilla. Repetir desde creación genérica y al volver a Datos.
  16. Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
  17. Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
  18. Mover ejercicios entre bloques, incluidos vacíos y Libre legacy, por menú y arrastre. Agregar desde ambas bibliotecas a un bloque de otro tipo: cancelar conserva el contenido; confirmar permite guardar y recargar sin perder series, cargas ni notas. Ajustar o limpiar categorías permite encontrar ejercicios de cualquier tipo.
Esperado
  • Crear programa completo desde cero inicia con Fuerza general seleccionado y permite cambiarlo. Borradores, plantillas, edición, rutinas día y creación para paciente conservan su objetivo propio. A 768 px, Biblioteca permanece junto al constructor sin recortar ejercicios ni controles; por debajo vuelve debajo. Sólo se guardan rutinas con días y prescripción coherentes; se permiten bloques vacíos con indicaciones o duración, sin inventar series. Los ejercicios deben pertenecer al día de su bloque. La compatibilidad de categoría es una recomendación: agregar o mover a un bloque de otro tipo solicita confirmación, permite continuar y conserva la prescripción al guardar. Cancelar no modifica la rutina. El editor completo, su detalle y la copia de días se validan en escritorio. En móvil staff sólo corresponde edición rápida; el portal del paciente conserva su propio caso móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-structure-validation]

Cobertura: Referencias parciales

Reutilizar segmento guardadoselector de plantillas de bloqueFuncionalPor comprobarPor probarM2-X02

Qué permite hacerLa ampliación propone guardar un bloque y aplicarlo a otro día sin reemplazar la rutina completa.

Alcance
Adicional por conciliar
Registro de origen
Por comprobar
Validación pendiente · 2026-09-21

Marcada por revisar. No convertir selector de plantillas en evidencia de aplicar un segmento guardado.

El propio alcance advierte que la integración de catálogo en 662b5e5ab no equivale a X02.

Ubicación y referencia técnica

selector de plantillas de bloque

Reutilizar segmento guardado

  • rutina-block-template-selector-modal.tsx32
  • m2-funciones.mdM2-X02
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/rutina-day-operations.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Guarda un día con sus bloques como plantilla, pero no comprueba aplicar un segmento guardado a otro día.

  • conserva duración e indicaciones al guardar el día como plantillaL11
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 8 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-structure-validation · Rutinas validan su estructura completa
coachespecialistaadmin
Pasos
  1. En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
  2. Abrir Crear programa completo desde cero y comprobar Fuerza general seleccionado en Datos. Cambiar el objetivo, reanudar un borrador y abrir una plantilla, una edición y una rutina día: cada recorrido conserva su objetivo propio.
  3. En el constructor a 768 px, comprobar que Biblioteca aparece junto a la rutina, que los controles de ejercicios caben sin recorte y que la distribución se lee en una columna. Por debajo de 768 px, Biblioteca vuelve debajo del constructor.
  4. Revisar Distribución de la rutina sin parámetros de prototipo: dona de categorías ampliada, barras con porcentajes de grupos principales e íconos del detalle de mayor a menor porcentaje. Core no se desglosa en abdominales o flexores; Brazos no se desglosa en bíceps o tríceps. Al hover o foco de teclado, el nombre aparece a la izquierda del ícono y la barra cede espacio suavemente; al salir se recupera. Sin chip Rutina completa. Cambiar de día conserva el acumulado; comprobar lectura en los anchos de escritorio soportados.
  5. Saltar entre Datos, Rutina y Guardar desde las bolitas: conservar datos, animar suavemente el progreso verde y revertirlo al volver. Guardar mantiene su tarjeta con borde neutro y sin franja amarilla superior.
  6. Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
  7. Añadir warm-up, cardio y libre: aparecen arriba. Enfriamiento aparece al final. Añadir Ejercicios: aparece antes del primer enfriamiento, o al final si no existe. Mover un bloque con contenido y comprobar duración, indicaciones y series intactas.
  8. Añadir un ejercicio mediante botón o arrastre: su configuración queda colapsada; el cuerpo de la tarjeta la abre/cierra. Imagen, nombre y resumen muestran fondo al hover y abren detalle sin alternar las series. Comprobar iconos en Añadir bloque, bordes sólidos, edición compacta de duración y compatibilidad desde ambas bibliotecas del wizard.
  9. Abrir un ejercicio, escribir Comentarios del ejercicio, cambiar de día y volver; guardar y recargar para confirmar que el comentario se conserva en ese ejercicio y aparece en el detalle y en la sesión del paciente. Las notas técnicas por serie permanecen independientes.
  10. Comprobar minutos estimados a la izquierda de ejercicios para el día seleccionado: cambiar series, descansos o duración de bloque actualiza el total; los bloques con duración no duplican el tiempo de sus ejercicios y el contenido sin tiempo marca estimación parcial.
  11. Comparar la duración del mismo día/versión en editor y portal; dos series de 30 s con 60 s de descanso intermedio suman 2 min. Rangos/tempo/grupos muestran supuestos; AMRAP sin tiempo es parcial. El objetivo manual conserva su etiqueta separada.
  12. Seleccionar cada bloque: Agregando a usa su color y el multiselect marca categorías compatibles (incluidas excepciones por etiquetas). Ajustar varias categorías, conservar filtros de nivel/equipo y deseleccionar para quitar categorías automáticas.
  13. En Biblioteca, comprobar que el contador muestra una pesa, el número de resultados y la palabra ejercicios sin recortarse a 768 px; el botón con icono de embudo está a la derecha de Buscar ejercicios y abre un modal con scroll propio, sin barra visible. Los seis filtros aparecen en orden: Categoría, Grupo muscular, Subgrupos musculares, Dificultad, Patrón de movimiento y Equipo. Se expanden con transición sin resplandor amarillo en su contenedor, muestran su cantidad de opciones elegidas y comparten el mismo estilo de chip. Si un grupo tiene opciones elegidas, su contador es amarillo y se ilumina el icono y su recuadro, abierto o cerrado; al limpiar vuelve a neutro. La selección amarilla no añade palomita; los iconos seleccionados de Categoría, grupos musculares y Dificultad son oscuros, mientras Patrón y Equipo muestran sólo texto. Categoría muestra sus opciones sin buscador; Flexibilidad usa expansión y Movilidad movimiento. Equipo se puede buscar por nombre. Elegir Core y balance deja en los otros grupos únicamente opciones presentes en esos ejercicios; elegir Pecho o Espalda limita del mismo modo Categoría, Subgrupos musculares, Dificultad, Patrón y Equipo. La búsqueda y los filtros de origen, destacados y bloque también ajustan las opciones. Varias opciones de un grupo amplían resultados; combinar grupos los restringe. Las opciones elegidas siguen visibles para poder retirarlas aunque no haya coincidencias. Ver ejercicios cierra el modal y conserva los filtros aplicados. Limpiar y Escape funcionan. En una ventana de poca altura, la lista de ejercicios tiene scroll propio y alcanza su último resultado.
  14. Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
  15. Desde una plantilla, añadir un bloque vacío y otro sólo con duración; refrescar la misma pestaña y comprobar que recupera ambos sin reaplicar la plantilla. Repetir desde creación genérica y al volver a Datos.
  16. Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
  17. Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
  18. Mover ejercicios entre bloques, incluidos vacíos y Libre legacy, por menú y arrastre. Agregar desde ambas bibliotecas a un bloque de otro tipo: cancelar conserva el contenido; confirmar permite guardar y recargar sin perder series, cargas ni notas. Ajustar o limpiar categorías permite encontrar ejercicios de cualquier tipo.
Esperado
  • Crear programa completo desde cero inicia con Fuerza general seleccionado y permite cambiarlo. Borradores, plantillas, edición, rutinas día y creación para paciente conservan su objetivo propio. A 768 px, Biblioteca permanece junto al constructor sin recortar ejercicios ni controles; por debajo vuelve debajo. Sólo se guardan rutinas con días y prescripción coherentes; se permiten bloques vacíos con indicaciones o duración, sin inventar series. Los ejercicios deben pertenecer al día de su bloque. La compatibilidad de categoría es una recomendación: agregar o mover a un bloque de otro tipo solicita confirmación, permite continuar y conserva la prescripción al guardar. Cancelar no modifica la rutina. El editor completo, su detalle y la copia de días se validan en escritorio. En móvil staff sólo corresponde edición rápida; el portal del paciente conserva su propio caso móvil.

Vistas:/rutinas/crear/pacientes/[id]/crear-rutina · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-structure-validation]

Cobertura: Referencias parciales

Asignar y programar la rutina

015
Pruebas del flujo
13 pruebas vinculadas5 archivos3 casos QAUnitarias / componentes 10Integración 3

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Asignar rutina con vigenciaFicha y Biblioteca de rutinas → Asignar rutinaFuncionalPruebas parcialesPor probarM2-F05.a

Qué permite hacerEl coach asigna una rutina con inicio, duración o fecha final mediante el cuadro de vigencia.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-07-20

Caso ejecutado sin failure codes, estado needs-retest. La evidencia externa queda en /tmp y requiere validación de asignación y limpieza; no es aceptación.

La lectura canónica del 21-sep describe inicio, fin y semanas como datos guardados.

Ubicación y referencia técnica

Ficha y Biblioteca de rutinas → Asignar rutina

Asignar rutina con vigencia

  • asignar-rutina-modal.tsxmodal de asignación
  • route.ts165, 273-305
  • 2026-07-20-war-room-full.jsonfitness-routine-direct-assignment
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2Integración 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/fitness/routine-lifecycle.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 18 definiciones en el archivo

Ejercita vigencia, intervalos, fecha futura y exclusión de rutinas vencidas.

  • no activa una versión futura antes de su fechaL75
  • omite rutinas futuras, vencidas y desasignadasL102
tests/integration/api/assignment-versions.test.tsIntegración · Cobertura parcial · 2 vinculadas / 7 definiciones en el archivo

Programa y publica una versión de rutina, pero no comprueba el cuadro de vigencia del coach.

  • programa una versión futura sin adelantar el documento vivoL133
  • publica reemplazo de una ocurrencia y conserva snapshot históricoL111
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
coachespecialistaadmin
Pasos
  1. Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
  2. Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
  3. Confirmar que primero aparece el selector de paciente; buscar por nombre, email u objetivo y comprobar que sólo después se muestran la plantilla preseleccionada, su vista previa y configuración.
  4. Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
  5. En escritorio, confirmar que todas las tarjetas muestran Ver y asignar, Editar y Eliminar; editar una propia, guardar y verificar que se actualizó el mismo ID sin crear copia ni asignación.
  6. En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
  7. Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
  8. Validar que sin equipo configurado no aparezca estado y que cualquier hallazgo de equipo, nivel, técnica o contexto clínico se muestre únicamente como Revisar, sin bloquear la asignación.
  9. En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
  10. Probar una plantilla legacy sin media. En escritorio, comprobar Crear sin plantilla y Personalizar en wizard; en móvil, conservar el configurador directo sin abrir detalle completo ni wizard.
  11. Repetir con rutina activa: cancelar conserva la asignación anterior; confirmar reemplazo publica una sola rutina activa y cierra la anterior de forma atómica. Comprobar desde staff y paciente. La opción de convivencia adicional no pertenece al contrato vigente.
Esperado
  • Todas las entradas genéricas usan un solo configurador accesible; /rutinas pide primero el paciente y luego muestra la plantilla preseleccionada, alinea los controles al pie y carga pacientes activos bajo demanda. En escritorio, Ver y asignar, Editar y Eliminar están presentes en todas las tarjetas; los permisos protegen las globales y Editar actualiza el mismo programa mediante el wizard específico. La asignación directa conserva su cobertura móvil; los accesos de edición completa, detalle y wizard se validan sólo en escritorio. Ningún hallazgo de equipo, nivel, técnica o contexto clínico muestra Bloqueada ni impide asignar; los motivos permanecen como advertencias accionables. En escritorio, cada plantilla Recomendada explica en el detalle qué coincidencias sustentan esa recomendación. El flujo mantiene series/reps/descansos y reemplaza de forma atómica, conserva una sola rutina activa y no cierra antes de terminar.

Vistas:/rutinas/pacientes/pacientes/[id] · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-direct-assignment]

Automatización
  • e2e/staging/rutinas-asignacion.spec.ts 0/4 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Sustituir rutina activaFicha y Biblioteca de rutinas → Reemplazar asignaciónFuncionalPruebas parcialesPor probarM2-F05.b

Qué permite hacerLa API desasigna las rutinas activas previas y deja una sola asignación activa dentro de una transacción.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-07-20

Ejecutado sin failure codes y derivado a needs-retest. La experiencia de ‘adicional’ y la planificación futura no quedan aceptadas por ese resultado.

M2-c fue documentado 2026-07-22 como alta prioridad; su texto histórico contradice el invariante actual de una sola activa.

Ubicación y referencia técnica

Ficha y Biblioteca de rutinas → Reemplazar asignación

Sustituir rutina activa

  • route.ts273-305
  • tickets.jsonQA-ATOMIC-ASSIGNMENT-LIFECYCLE-20260720 / conciliación 2026-09-15
  • 2026-07-20-war-room-full.jsonQA-ATOMIC-ASSIGNMENT-LIFECYCLE-20260720
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2Integración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/fitness/routine-lifecycle.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 18 definiciones en el archivo

Comprueba cierre de la versión sustituida sin dejar asignaciones abiertas.

  • cierra y marca una versión sustituida sin dejarla abiertaL138
  • una versión sustituida abierta es expirada para todos los lectores de estadoL150
tests/integration/api/staff-assignments.test.tsIntegración · Prueba de apoyo · 1 vinculadas / 15 definiciones en el archivo

El cierre transaccional de asignaciones respalda el invariante, pero el caso no está delimitado a la sustitución de rutina del usuario.

  • al reemplazar cierra todas las asignaciones y versiones activas anterioresL196
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
coachespecialistaadmin
Pasos
  1. Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
  2. Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
  3. Confirmar que primero aparece el selector de paciente; buscar por nombre, email u objetivo y comprobar que sólo después se muestran la plantilla preseleccionada, su vista previa y configuración.
  4. Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
  5. En escritorio, confirmar que todas las tarjetas muestran Ver y asignar, Editar y Eliminar; editar una propia, guardar y verificar que se actualizó el mismo ID sin crear copia ni asignación.
  6. En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
  7. Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
  8. Validar que sin equipo configurado no aparezca estado y que cualquier hallazgo de equipo, nivel, técnica o contexto clínico se muestre únicamente como Revisar, sin bloquear la asignación.
  9. En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
  10. Probar una plantilla legacy sin media. En escritorio, comprobar Crear sin plantilla y Personalizar en wizard; en móvil, conservar el configurador directo sin abrir detalle completo ni wizard.
  11. Repetir con rutina activa: cancelar conserva la asignación anterior; confirmar reemplazo publica una sola rutina activa y cierra la anterior de forma atómica. Comprobar desde staff y paciente. La opción de convivencia adicional no pertenece al contrato vigente.
Esperado
  • Todas las entradas genéricas usan un solo configurador accesible; /rutinas pide primero el paciente y luego muestra la plantilla preseleccionada, alinea los controles al pie y carga pacientes activos bajo demanda. En escritorio, Ver y asignar, Editar y Eliminar están presentes en todas las tarjetas; los permisos protegen las globales y Editar actualiza el mismo programa mediante el wizard específico. La asignación directa conserva su cobertura móvil; los accesos de edición completa, detalle y wizard se validan sólo en escritorio. Ningún hallazgo de equipo, nivel, técnica o contexto clínico muestra Bloqueada ni impide asignar; los motivos permanecen como advertencias accionables. En escritorio, cada plantilla Recomendada explica en el detalle qué coincidencias sustentan esa recomendación. El flujo mantiene series/reps/descansos y reemplaza de forma atómica, conserva una sola rutina activa y no cierra antes de terminar.

Vistas:/rutinas/pacientes/pacientes/[id] · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-direct-assignment]

Automatización
  • e2e/staging/rutinas-asignacion.spec.ts 0/4 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Planear programas futurosVista pendiente · Programas del pacienteAsignar el siguiente programa desasigna el vigente; falta la vista de programas del paciente.FuncionalFlujo incompletoPendiente documentadoM2-F05.c

Qué permite hacerEl resultado buscado es listar el programa actual, futuros e históricos, con vigencia de cada uno.

Alcance
Base contratada
Registro de origen
2026-09-22
Validación pendiente · 2026-09-22

Brecha documentada: no conviven el programa actual y el siguiente. No hay flujo funcional que validar.

Brecha documentada 2026-09-22. La asignación actual impide convivir el programa vigente y el siguiente; no hay fila de programas.

Ubicación y referencia técnica

Plan del paciente, M2-V05; sin pantalla en el corte del 22-sep

Planear programas futuros

  • m2-plan-del-paciente.md1-38
  • m2-f05-vistas.mdM2-V05 y Vista que falta
  • m2-plan-del-paciente.mdDónde se rompe
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAIntegración 2Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/assignment-versions.test.tsIntegración · Cobertura parcial · 2 vinculadas / 7 definiciones en el archivo

Programa una versión futura y conserva historial, pero no cubre una pantalla que liste actual, futuros e históricos.

  • programa una versión futura sin adelantar el documento vivoL133
  • publica reemplazo de una ocurrencia y conserva snapshot históricoL111
tests/unit/hooks/use-patient-rutinas-programadas.test.tsxUnitarias / componentes · Cobertura parcial · 2 vinculadas / 4 definiciones en el archivo

Comprueba lectura temporal de una versión programada, no el listado completo.

  • muestra una publicación posterior a las 12:00 UTC sin esperar al día siguienteL104
  • no anticipa una versión futura del mismo día aunque comience antes de las 12:00 UTCL116
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
coachespecialistaadmin
Pasos
  1. Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
  2. Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
  3. Confirmar que primero aparece el selector de paciente; buscar por nombre, email u objetivo y comprobar que sólo después se muestran la plantilla preseleccionada, su vista previa y configuración.
  4. Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
  5. En escritorio, confirmar que todas las tarjetas muestran Ver y asignar, Editar y Eliminar; editar una propia, guardar y verificar que se actualizó el mismo ID sin crear copia ni asignación.
  6. En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
  7. Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
  8. Validar que sin equipo configurado no aparezca estado y que cualquier hallazgo de equipo, nivel, técnica o contexto clínico se muestre únicamente como Revisar, sin bloquear la asignación.
  9. En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
  10. Probar una plantilla legacy sin media. En escritorio, comprobar Crear sin plantilla y Personalizar en wizard; en móvil, conservar el configurador directo sin abrir detalle completo ni wizard.
  11. Repetir con rutina activa: cancelar conserva la asignación anterior; confirmar reemplazo publica una sola rutina activa y cierra la anterior de forma atómica. Comprobar desde staff y paciente. La opción de convivencia adicional no pertenece al contrato vigente.
Esperado
  • Todas las entradas genéricas usan un solo configurador accesible; /rutinas pide primero el paciente y luego muestra la plantilla preseleccionada, alinea los controles al pie y carga pacientes activos bajo demanda. En escritorio, Ver y asignar, Editar y Eliminar están presentes en todas las tarjetas; los permisos protegen las globales y Editar actualiza el mismo programa mediante el wizard específico. La asignación directa conserva su cobertura móvil; los accesos de edición completa, detalle y wizard se validan sólo en escritorio. Ningún hallazgo de equipo, nivel, técnica o contexto clínico muestra Bloqueada ni impide asignar; los motivos permanecen como advertencias accionables. En escritorio, cada plantilla Recomendada explica en el detalle qué coincidencias sustentan esa recomendación. El flujo mantiene series/reps/descansos y reemplaza de forma atómica, conserva una sola rutina activa y no cierra antes de terminar.

Vistas:/rutinas/pacientes/pacientes/[id] · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-routine-direct-assignment]

Cobertura: Referencias parciales

Definir fases del mesocicloPlanificación del mesocicloFuncionalCódigo leídoPor probarM2-F06.a

Qué permite hacerEl dominio contempla fases de carga, descarga, mantenimiento y peaking para el mesociclo.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

Readiness y reglas clínicas permanecen pending client. Un cálculo de fases no prueba periodización aplicada.

Las reglas clínicas de volumen e intensidad no están cerradas por cliente.

Ubicación y referencia técnica

Planificación del mesociclo

Definir fases del mesociclo

  • progresion.ts56, 127-131
  • phase-2-fitness.md29-43
  • fitness-readiness-checklist.mdFIT-08
Cómo probar
Pruebas localizadas
3 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/progresion.test.tsUnitarias / componentes · Cobertura parcial · 3 vinculadas / 10 definiciones en el archivo

Cubre los cálculos de carga, descarga, mantenimiento y peaking, no la definición de fases en un mesociclo operable.

  • fase carga compone +5% por semana y redondea a 0.5 kgL28
  • fase descarga reduce peso y volumen 20%L37
  • fase peaking sube intensidad 10% y baja volumen 30%L49
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-active-routine-quick-adjust · Editar rutina activa abre ajuste rápido
coachespecialistaadmin
Pasos
  1. Entrar a detalle de paciente con rutina activa.
  2. Abrir tab Planes y seleccionar Editar en la tarjeta de rutina.
  3. En escritorio, desde el detalle completo de rutina, editar los días programados, recargar y confirmar que paciente, portal e historial resuelven la misma versión nueva. En móvil, realizar el cambio desde Ajustes rápidos.
  4. Ajustar un ejercicio y un grupo muscular.
  5. En Ajustar rutina, comprobar que Distribución de la rutina sustituye Volumen por grupo, parte de los ejercicios del borrador vigente y recalcula categorías por apariciones y grupos principales por series al ajustar, intercambiar o modificar un grupo.
  6. Abrir el ajuste sin ejercicios y comprobar un estado vacío seguro; repetir la lectura del gráfico en móvil sin scroll horizontal.
  7. Guardar con y sin sesión registrada del día.
  8. Validar en móvil que Señales de hoy aparece colapsado y notas recientes usan color/icono de categoría.
  9. En móvil staff, entrar desde Planes o AAR a Ajustes rápidos y confirmar que el detalle completo de rutina y Editar en wizard no se ofrecen como herramientas móviles. Abrir también sus rutas directas y comprobar la restricción de escritorio sin perder el ajuste pendiente.
  10. En AAR, abrir Ajustar dieta o Ajustar rutina: el editor ocupa todo el ancho y el selector elige la asignación, sin calendario de navegación.
  11. Cambiar entre menús, sesiones, ejercicios y secciones AAR con un borrador pendiente; volver y comprobar que se conserva.
  12. Modificar Programación y revisar los cambios junto con la prescripción antes del guardado conjunto.
  13. Repetir en 1440/1920 px, tableta vertical y horizontal y móvil; comprobar nombres, unidades, teclado y ausencia de scroll horizontal.
Esperado
  • Editar abre la vista intermedia; los cambios de días, ejercicios y grupos actualizan la rutina activa mediante una versión histórica autoritativa, se proyectan al documento vigente y si ya hay entrenamiento del día piden confirmación sin borrar historial ni romper móvil. Una edición concurrente se rechaza en vez de sobrescribir el snapshot más reciente. Ajustar rutina reutiliza Distribución de la rutina: categorías por apariciones y grupos principales por series del borrador vigente, sin músculos secundarios ni cifras fijas; se actualiza tras cada cambio confirmado y conserva un estado vacío seguro y responsive. En AAR el ajuste parte de la asignación, con programación editable y borrador conservado entre selecciones. Revisión y guardado conjunto por dieta/rutina; edición de una serie no propaga valores a otras. Editor amplio responsive con resumen por serie. En móvil staff sólo se ofrece edición rápida de la rutina: el detalle completo y los wizards genérico y del paciente quedan restringidos a escritorio. Esta restricción no limita la consulta ni el entrenamiento del paciente en su portal móvil.

Vistas:/pacientes/[id] · requiere paciente/pacientes/[id]/rutina/ajustar · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-active-routine-quick-adjust]

Cobertura: Referencias parciales

Ver el calendario del plan de entrenamientoResumen deportivo → Calendario del planFuncionalCódigo leídoPor probarM2-F06.b

Qué permite hacerLa interfaz muestra un calendario del mesociclo seleccionado para revisar sus semanas y fases.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-09-21

El calendario actual sólo muestra un mesociclo seleccionado. No acredita vista conjunta de programas ni calendario completo contratado.

El código mostrado selecciona hoy, siguiente o primero; no presenta programas futuros juntos.

Ubicación y referencia técnica

Cockpit AAR → Calendario de mesociclo

Ver calendario de mesociclo

  • mesociclo-calendar.tsxcomponente
  • m2-f05-vistas.mdVista que falta
  • m2-f05-vistas.mdM2-V05 / Vista que falta
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos2 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/hooks/use-patient-rutinas-programadas.test.tsxUnitarias / componentes · Prueba de apoyo · 1 vinculadas / 4 definiciones en el archivo

Asegura que la versión leída corresponda al instante, no que el calendario muestre sus semanas y fases.

  • muestra una publicación posterior a las 12:00 UTC sin esperar al día siguienteL104
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdminNutriólogo
Vistas y controles
Casos
fitness-active-routine-quick-adjust · Editar rutina activa abre ajuste rápido
coachespecialistaadmin
Pasos
  1. Entrar a detalle de paciente con rutina activa.
  2. Abrir tab Planes y seleccionar Editar en la tarjeta de rutina.
  3. En escritorio, desde el detalle completo de rutina, editar los días programados, recargar y confirmar que paciente, portal e historial resuelven la misma versión nueva. En móvil, realizar el cambio desde Ajustes rápidos.
  4. Ajustar un ejercicio y un grupo muscular.
  5. En Ajustar rutina, comprobar que Distribución de la rutina sustituye Volumen por grupo, parte de los ejercicios del borrador vigente y recalcula categorías por apariciones y grupos principales por series al ajustar, intercambiar o modificar un grupo.
  6. Abrir el ajuste sin ejercicios y comprobar un estado vacío seguro; repetir la lectura del gráfico en móvil sin scroll horizontal.
  7. Guardar con y sin sesión registrada del día.
  8. Validar en móvil que Señales de hoy aparece colapsado y notas recientes usan color/icono de categoría.
  9. En móvil staff, entrar desde Planes o AAR a Ajustes rápidos y confirmar que el detalle completo de rutina y Editar en wizard no se ofrecen como herramientas móviles. Abrir también sus rutas directas y comprobar la restricción de escritorio sin perder el ajuste pendiente.
  10. En AAR, abrir Ajustar dieta o Ajustar rutina: el editor ocupa todo el ancho y el selector elige la asignación, sin calendario de navegación.
  11. Cambiar entre menús, sesiones, ejercicios y secciones AAR con un borrador pendiente; volver y comprobar que se conserva.
  12. Modificar Programación y revisar los cambios junto con la prescripción antes del guardado conjunto.
  13. Repetir en 1440/1920 px, tableta vertical y horizontal y móvil; comprobar nombres, unidades, teclado y ausencia de scroll horizontal.
Esperado
  • Editar abre la vista intermedia; los cambios de días, ejercicios y grupos actualizan la rutina activa mediante una versión histórica autoritativa, se proyectan al documento vigente y si ya hay entrenamiento del día piden confirmación sin borrar historial ni romper móvil. Una edición concurrente se rechaza en vez de sobrescribir el snapshot más reciente. Ajustar rutina reutiliza Distribución de la rutina: categorías por apariciones y grupos principales por series del borrador vigente, sin músculos secundarios ni cifras fijas; se actualiza tras cada cambio confirmado y conserva un estado vacío seguro y responsive. En AAR el ajuste parte de la asignación, con programación editable y borrador conservado entre selecciones. Revisión y guardado conjunto por dieta/rutina; edición de una serie no propaga valores a otras. Editor amplio responsive con resumen por serie. En móvil staff sólo se ofrece edición rápida de la rutina: el detalle completo y los wizards genérico y del paciente quedan restringidos a escritorio. Esta restricción no limita la consulta ni el entrenamiento del paciente en su portal móvil.

Vistas:/pacientes/[id] · requiere paciente/pacientes/[id]/rutina/ajustar · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-active-routine-quick-adjust]

patient-calendar-assignment-version-history · Calendario conserva plan histórico por fecha
nutriologocoachespecialistaadmin
Pasos
  1. Registrar una comida o sesión con plan/rutina activa.
  2. Hacer un ajuste rápido el mismo día.
  3. Abrir calendario operativo y revisar el día del registro y días previos.
  4. Validar que el registro conserva snapshot/version y que el día muestra ajuste aplicado cuando corresponda.
  5. Confirmar que días anteriores mantienen sus kcal históricas y hoy/futuro muestran kcal SMAE y de recetas de la nueva versión aunque conserve el nombre del menú.
  6. Abrir Ajustes del equipo y validar autor, rol, hora, razón y cambios explicados en lenguaje claro, sin JSON ni identificadores internos, separado de las modificaciones del paciente.
Esperado
  • El calendario resuelve la versión vigente por fecha, conserva evidencia del paciente, muestra el día efectivo del ajuste con kcal históricas/actuales y separa la auditoría del equipo con fallback Equipo clínico para eventos legacy. Los cambios del equipo se presentan como antes y ahora legibles, sin estructuras JSON ni identificadores internos.

Vistas:/pacientes/[id]?tab=calendario · requiere paciente

Fuente: test-cases.json · testCases[id=patient-calendar-assignment-version-history]

Cobertura: Referencias parciales

Progresar volumen o intensidadMesociclo → Progresión; vista operativa por confirmarFuncionalCódigo leídoPor probarM2-F06.c

Qué permite hacerHay cálculo de progresión por fase, pero no se verificó una automatización completa aplicada a programas reales.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

Fórmula y criterio de ajuste permanecen por decidir. Cálculo aislado no equivale a automatización validada.

Readiness, MEV/MAV/MRV y criterios de ajuste permanecen pendientes de decisión clínica.

Ubicación y referencia técnica

Mesociclo → Progresión; vista operativa por confirmar

Progresar volumen o intensidad

  • progresion.ts1-131
  • fitness-readiness-checklist.mdFIT-08
  • fitness-readiness-checklist.mdFIT-08 y Decisiones clínicas
Cómo probar
Pruebas localizadas
2 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/progresion.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 10 definiciones en el archivo

Ejercita progresión de peso, volumen e intensidad en cálculos aislados.

  • fase carga compone +5% por semana y redondea a 0.5 kgL28
  • el microciclo puede cambiar la fase y aportar notas propiasL85
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
Casos
fitness-active-routine-quick-adjust · Editar rutina activa abre ajuste rápido
coachespecialistaadmin
Pasos
  1. Entrar a detalle de paciente con rutina activa.
  2. Abrir tab Planes y seleccionar Editar en la tarjeta de rutina.
  3. En escritorio, desde el detalle completo de rutina, editar los días programados, recargar y confirmar que paciente, portal e historial resuelven la misma versión nueva. En móvil, realizar el cambio desde Ajustes rápidos.
  4. Ajustar un ejercicio y un grupo muscular.
  5. En Ajustar rutina, comprobar que Distribución de la rutina sustituye Volumen por grupo, parte de los ejercicios del borrador vigente y recalcula categorías por apariciones y grupos principales por series al ajustar, intercambiar o modificar un grupo.
  6. Abrir el ajuste sin ejercicios y comprobar un estado vacío seguro; repetir la lectura del gráfico en móvil sin scroll horizontal.
  7. Guardar con y sin sesión registrada del día.
  8. Validar en móvil que Señales de hoy aparece colapsado y notas recientes usan color/icono de categoría.
  9. En móvil staff, entrar desde Planes o AAR a Ajustes rápidos y confirmar que el detalle completo de rutina y Editar en wizard no se ofrecen como herramientas móviles. Abrir también sus rutas directas y comprobar la restricción de escritorio sin perder el ajuste pendiente.
  10. En AAR, abrir Ajustar dieta o Ajustar rutina: el editor ocupa todo el ancho y el selector elige la asignación, sin calendario de navegación.
  11. Cambiar entre menús, sesiones, ejercicios y secciones AAR con un borrador pendiente; volver y comprobar que se conserva.
  12. Modificar Programación y revisar los cambios junto con la prescripción antes del guardado conjunto.
  13. Repetir en 1440/1920 px, tableta vertical y horizontal y móvil; comprobar nombres, unidades, teclado y ausencia de scroll horizontal.
Esperado
  • Editar abre la vista intermedia; los cambios de días, ejercicios y grupos actualizan la rutina activa mediante una versión histórica autoritativa, se proyectan al documento vigente y si ya hay entrenamiento del día piden confirmación sin borrar historial ni romper móvil. Una edición concurrente se rechaza en vez de sobrescribir el snapshot más reciente. Ajustar rutina reutiliza Distribución de la rutina: categorías por apariciones y grupos principales por series del borrador vigente, sin músculos secundarios ni cifras fijas; se actualiza tras cada cambio confirmado y conserva un estado vacío seguro y responsive. En AAR el ajuste parte de la asignación, con programación editable y borrador conservado entre selecciones. Revisión y guardado conjunto por dieta/rutina; edición de una serie no propaga valores a otras. Editor amplio responsive con resumen por serie. En móvil staff sólo se ofrece edición rápida de la rutina: el detalle completo y los wizards genérico y del paciente quedan restringidos a escritorio. Esta restricción no limita la consulta ni el entrenamiento del paciente en su portal móvil.

Vistas:/pacientes/[id] · requiere paciente/pacientes/[id]/rutina/ajustar · requiere paciente

Fuente: test-cases.json · testCases[id=fitness-active-routine-quick-adjust]

Cobertura: Referencias parciales

Realizar y registrar el entrenamiento

015
Pruebas del flujo
25 pruebas vinculadas11 archivos2 casos QAUnitarias / componentes 11E2E 6Integración 8

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Consultar rutina del díaPortal del paciente → Rutina de hoyFuncionalPruebas parcialesPor probarM2-F07.a

Qué permite hacerEl portal muestra por semanas la rutina, descanso o ausencia de asignación según la vigencia.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

Dos pruebas de declaración pasada pasaron y muestran cierre/consulta de progreso, pero el resumen de sesión falló buscando “0/2 series · 0%”; no confirma el contrato completo de semana, descanso y ausencia.

El resumen de 23-sep tiene pruebas locales y E2E acotado, pero el caso sigue needs-retest.

Ubicación y referencia técnica

/portal/rutina

Consultar rutina del día

  • routine-calendar.tsxcalendario y estados
  • m2-f05-portal.mdLa pantalla
  • resultados-resumidos.jsonfunction_mapping[id=M2-F07.a]; resultados de la versión local actual
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2E2E 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/routine-calendar-loading.test.tsxUnitarias / componentes · Comportamiento directo · 2 vinculadas / 9 definiciones en el archivo

Comprueba estados de calendario: carga, sesión pendiente, descanso y elección de día.

  • ofrece cuatro acciones en una sesión pendiente y marca descanso sólo para esa ocurrenciaL115
  • permite elegir una rutina desde una fecha de descanso del programaL159
e2e/staging/routine-occurrence-flow.spec.tsE2E · Cobertura parcial · 2 vinculadas / 10 definiciones en el archivo

Dos declaraciones de día pasado pasaron, pero el resumen de rutina falló y no cubre todo el contrato semanal.

  • QA-PORTAL-COMPLETED-DAY confirma una declaración y abre progreso @regressionL49
  • QA-PORTAL-ROUTINE-SUMMARY muestra distribución y avance real en móvilL9
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 12 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.
  • e2e/staging/integrations-longitudinal.spec.ts

Cobertura: Referencias parciales

Cambiar día de sesiónPortal del paciente → Rutina de hoyMover la sesión a otra fecha requería una excepción. La solución más reciente sigue por comprobar.FuncionalCambio sin revalidarPendiente documentadoM2-F07.b

Qué permite hacerUna sesión pendiente puede moverse o intercambiarse con otra fecha futura desde una hoja del portal.

Alcance
Base contratada
Registro de origen
2026-08-10
Validación pendiente · 2026-08-10

La fuente registra que requería override. El árbol actual tiene cambios locales y el diálogo histórico fue sustituido; no se ejecutó el recorrido.

Superficie actual en cambio local; brecha histórica no revalidada. M2-b fue reportado el 2026-08-10 como requiring override. El diálogo descrito en la nota del 21-sep fue eliminado del árbol actual y sustituido por un cambio local que esta lectura no ejecutó.

Ubicación y referencia técnica

/portal/rutina

Cambiar día de sesión

  • routine-calendar.tsx44, 409
  • m2-f05-cambiar-dia.md1-47
  • ESTADO.mdM2-b
Cómo probar
Pruebas localizadas
3 pruebas vinculadas3 archivos1 casos QAIntegración 1Unitarias / componentes 1E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/routine-occurrences.test.tsIntegración · Cobertura parcial · 1 vinculadas / 24 definiciones en el archivo

Comprueba sustitución del día de programa en la misma fecha y rechaza el comando histórico de mover a fecha futura; evidencia una brecha respecto al resultado solicitado.

  • rejects the former date exchange commandL305
tests/unit/components/routine-calendar-loading.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 9 definiciones en el archivo

El selector permite elegir otro día del programa sin destino de fecha; no es intercambio futuro.

  • elige otro día del programa sin pedir una fecha de destinoL137
e2e/staging/routine-occurrence-flow.spec.tsE2E · Cobertura parcial · 1 vinculadas / 10 definiciones en el archivo

La ruta E2E cambia a otra rutina en la misma fecha y después descansa; no realiza la acción contractual.

  • QA-PORTAL-ROUTINE-DAY-CHOICE selecciona rutina y descanso en móvil @regressionL165
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 12 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Registrar series del entrenamientoPortal del paciente → Registrar entrenamientoFuncionalPruebas parcialesPor probarM2-F07.c

Qué permite hacerEl paciente inicia sesión y registra peso, repeticiones, RPE/RIR, tipo de serie y resultados por set.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

Dos E2E de training-options pasaron: conversión, eliminación o reordenación y persistencia al recargar. No cubren conjuntamente peso, reps, RPE/RIR, tipo y resultado; el E2E de resumen falló antes del registro.

El reporte de opciones y récords del 23-sep aporta pruebas locales, pero no aceptación humana.

Ubicación y referencia técnica

/portal/entrenamiento

Registrar series del entrenamiento

  • sesion-activa.tsx948-1148, 2008-2056
  • phase-2-fitness.md95-116
  • resultados-resumidos.jsonfunction_mapping[id=M2-F07.c]; resultados de la versión local actual
Cómo probar
Pruebas localizadas
7 pruebas vinculadas3 archivos2 casos QAIntegración 3Unitarias / componentes 2E2E 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/fitness-session.test.tsIntegración · Comportamiento directo · 3 vinculadas / 28 definiciones en el archivo

Ejercita inicio autenticado, validación de métricas, resultados, PR e idempotencia del registro de series.

  • deriva objetivos del snapshot, genera PR una vez y hace replay idempotenteL447
  • niega ejercicio/serie fuera de prescripción y métricas manipuladasL473
  • sólo marca completada al registrar todas las series prescritasL507
tests/unit/hooks/use-sesion-activa.test.tsxUnitarias / componentes · Cobertura parcial · 2 vinculadas / 24 definiciones en el archivo

Cubre borrador, guardado, rechazo y reordenamiento de series en interfaz aislada.

  • pinta la serie antes de que responda el guardado y la confirma al llegarL357
  • reorders whole series without changing their values or recorded identityL671
e2e/staging/training-options-pr.spec.tsE2E · Cobertura parcial · 2 vinculadas / 3 definiciones en el archivo

La corrida actual confirma conversión, eliminación/reordenamiento y recarga, no todos los campos de una serie.

  • el drawer de ejercicio convierte todas las series y conserva la eliminación al recargarL7
  • reordena las series en el drawer y conserva su orden al recargarL74
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

fitness-routine-patient-mobile · Portal paciente muestra rutina usable
paciente
Pasos
  1. Entrar como paciente con rutina activa.
  2. Abrir bloque de rutina o entrenamiento del día.
  3. Cambiar de día y revisar ejercicios.
  4. Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
  5. Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
  6. Validar instrucciones y controles móviles.
  7. Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
  8. Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
  9. Abrir Ver ejercicios sin pulsar Iniciar, publicar desde staff una versión inmediata distinguible y confirmar que hoy muestra la nueva sin crear sesión; pulsar Iniciar y confirmar que se crea una sesión con esa versión aunque aún no haya sets; publicar otra versión desde staff y confirmar que la sesión iniciada conserva el mismo ID y la prescripción fijada; registrar el primer set y comprobar que permanece en esa sesión; tras terminar, abrir la siguiente fecha programada y confirmar la versión nueva.
  10. Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
  11. Escribir una nota de dolor/técnica/equipo en el ejercicio, terminar y confirmar que aparece ligada al ejercicio completo, no sólo al último set.
  12. Tocar el timer de entrenamiento y confirmar reinicio.
  13. Completar un descanso con permisos de notificación activos.
  14. Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
  15. Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
  16. Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
  17. Modificar orden, descanso o series de un ejercicio prescrito; cerrar con Sólo esta sesión y comprobar que mañana conserva la versión original.
  18. Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
  19. Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
  20. Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
  21. Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
Esperado
  • La rutina es legible y compacta en mobile y todas las superficies resuelven una única versión efectiva por fecha. Abrir Rutina o Ver ejercicios sólo consulta: si el coach publica una versión inmediata antes de pulsar Iniciar, hoy aparece la nueva. Pulsar Iniciar crea la sesión y fija su ID, snapshot y versión prescrita aunque todavía no se registre ningún set; una publicación posterior no reemplaza esa sesión ni sus registros. La siguiente fecha programada usa la versión nueva. Prescripción y resultado permanecen separados: los inputs reales inician vacíos, la carga anterior se compara por serie, usar lo planeado es explícito/auditable y las notas pertenecen al ejercicio. Futuras, vencidas y desasignadas no son entrenables; los cambios para mañana crean una versión sin adelantar el documento de hoy y los extras requieren revisión staff. Cada set deriva ejercicio, serie y objetivos del servidor; extras catalogados se conservan sin inflar adherencia. Cero sets nunca equivale a completada: parcial, omitida y abandonada se muestran por separado. Sesiones terminales no aceptan mutaciones y los PRs sólo nacen de resultados reales validados.

Vistas:/portal/rutina/portal/entrenamientoAPI /api/portal/fitness/session

Fuente: test-cases.json · testCases[id=fitness-routine-patient-mobile]

Automatización
  • e2e/staging/training-options-pr.spec.ts 2/2 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Usar descanso y notasPortal del paciente → Registrar entrenamientoFuncionalCódigo leídoPor probarM2-F07.d

Qué permite hacerLa sesión abre un timer de descanso y permite conservar notas de coach y paciente por ejercicio.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

El timer MVP existe, pero QA en móvil/background está pendiente. No se localizó una corrida funcional de descanso y notas.

FIT-06 registra timer local; falta decidir y probar si cumple el MVP en móvil/background.

Ubicación y referencia técnica

/portal/entrenamiento

Usar descanso y notas

  • timer-descanso.tsx169-389
  • sesion-activa.tsx1696-1795, 2052-2056
  • fitness-readiness-checklist.mdFIT-06
Cómo probar
Pruebas localizadas
4 pruebas vinculadas3 archivos2 casos QAUnitarias / componentes 3Integración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/fitness/rest-timer.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 5 definiciones en el archivo

Cubre el temporizador a través de bloqueo, recarga, pausa y recuperación offline; no notas por ejercicio.

  • continues across locking, reloading and minimizing without ticksL4
  • persists an explicit pause and resumes from the remaining durationL15
tests/integration/api/fitness-session.test.tsIntegración · Cobertura parcial · 1 vinculadas / 28 definiciones en el archivo

Guarda notas del ejercicio, pero no valida el temporizador visible.

  • guarda notas como dato del ejercicio y rechaza identidades fuera de la sesiónL540
tests/unit/components/training-checklist.test.tsxUnitarias / componentes · Prueba de apoyo · 1 vinculadas / 6 definiciones en el archivo

El checklist conserva la nota del coach, pero sustituye TimerDescanso por un mock.

  • keeps coach preview visible and records an arbitrary series directly without fabricating effortL16
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

fitness-routine-patient-mobile · Portal paciente muestra rutina usable
paciente
Pasos
  1. Entrar como paciente con rutina activa.
  2. Abrir bloque de rutina o entrenamiento del día.
  3. Cambiar de día y revisar ejercicios.
  4. Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
  5. Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
  6. Validar instrucciones y controles móviles.
  7. Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
  8. Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
  9. Abrir Ver ejercicios sin pulsar Iniciar, publicar desde staff una versión inmediata distinguible y confirmar que hoy muestra la nueva sin crear sesión; pulsar Iniciar y confirmar que se crea una sesión con esa versión aunque aún no haya sets; publicar otra versión desde staff y confirmar que la sesión iniciada conserva el mismo ID y la prescripción fijada; registrar el primer set y comprobar que permanece en esa sesión; tras terminar, abrir la siguiente fecha programada y confirmar la versión nueva.
  10. Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
  11. Escribir una nota de dolor/técnica/equipo en el ejercicio, terminar y confirmar que aparece ligada al ejercicio completo, no sólo al último set.
  12. Tocar el timer de entrenamiento y confirmar reinicio.
  13. Completar un descanso con permisos de notificación activos.
  14. Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
  15. Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
  16. Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
  17. Modificar orden, descanso o series de un ejercicio prescrito; cerrar con Sólo esta sesión y comprobar que mañana conserva la versión original.
  18. Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
  19. Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
  20. Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
  21. Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
Esperado
  • La rutina es legible y compacta en mobile y todas las superficies resuelven una única versión efectiva por fecha. Abrir Rutina o Ver ejercicios sólo consulta: si el coach publica una versión inmediata antes de pulsar Iniciar, hoy aparece la nueva. Pulsar Iniciar crea la sesión y fija su ID, snapshot y versión prescrita aunque todavía no se registre ningún set; una publicación posterior no reemplaza esa sesión ni sus registros. La siguiente fecha programada usa la versión nueva. Prescripción y resultado permanecen separados: los inputs reales inician vacíos, la carga anterior se compara por serie, usar lo planeado es explícito/auditable y las notas pertenecen al ejercicio. Futuras, vencidas y desasignadas no son entrenables; los cambios para mañana crean una versión sin adelantar el documento de hoy y los extras requieren revisión staff. Cada set deriva ejercicio, serie y objetivos del servidor; extras catalogados se conservan sin inflar adherencia. Cero sets nunca equivale a completada: parcial, omitida y abandonada se muestran por separado. Sesiones terminales no aceptan mutaciones y los PRs sólo nacen de resultados reales validados.

Vistas:/portal/rutina/portal/entrenamientoAPI /api/portal/fitness/session

Fuente: test-cases.json · testCases[id=fitness-routine-patient-mobile]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Consultar historial y récordsPortal del paciente → Entrenamiento y progresoFuncionalPruebas parcialesPor probarM2-F07.e

Qué permite hacerEl entrenamiento presenta referencias de rendimiento y aviso de nuevo récord al completar series.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

La declaración pasada y la tarjeta con PR pasaron; prueban el enlace/estado de registro, no el historial completo ni todos los récords.

No se afirma que el historial cumpla todos los casos de un paciente real.

Ubicación y referencia técnica

/portal/entrenamiento y /portal/progreso/ejercicios

Consultar historial y récords

  • sesion-activa.tsx1148, 1795-1822
  • page.tsxruta de historial
  • resultados-resumidos.jsonfunction_mapping[id=M2-F07.e]; resultados de la versión local actual
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos2 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/fitness/training-reference.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 8 definiciones en el archivo

Calcula referencias comparables de peso, repeticiones y modalidad sin elegir un PR arbitrario.

  • matches the same series, preserves ranges outside history, and does not choose the PRL6
  • normalizes units and excludes missing-data, other exercise, and incompatible loadL23
tests/unit/components/completed-routine-day-pr.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Comprueba la tarjeta condicional de PR, no el historial entero.

  • muestra series sin inventar PRs y muestra PRs sólo con una marca registradaL19
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

fitness-routine-patient-mobile · Portal paciente muestra rutina usable
paciente
Pasos
  1. Entrar como paciente con rutina activa.
  2. Abrir bloque de rutina o entrenamiento del día.
  3. Cambiar de día y revisar ejercicios.
  4. Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
  5. Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
  6. Validar instrucciones y controles móviles.
  7. Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
  8. Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
  9. Abrir Ver ejercicios sin pulsar Iniciar, publicar desde staff una versión inmediata distinguible y confirmar que hoy muestra la nueva sin crear sesión; pulsar Iniciar y confirmar que se crea una sesión con esa versión aunque aún no haya sets; publicar otra versión desde staff y confirmar que la sesión iniciada conserva el mismo ID y la prescripción fijada; registrar el primer set y comprobar que permanece en esa sesión; tras terminar, abrir la siguiente fecha programada y confirmar la versión nueva.
  10. Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
  11. Escribir una nota de dolor/técnica/equipo en el ejercicio, terminar y confirmar que aparece ligada al ejercicio completo, no sólo al último set.
  12. Tocar el timer de entrenamiento y confirmar reinicio.
  13. Completar un descanso con permisos de notificación activos.
  14. Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
  15. Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
  16. Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
  17. Modificar orden, descanso o series de un ejercicio prescrito; cerrar con Sólo esta sesión y comprobar que mañana conserva la versión original.
  18. Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
  19. Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
  20. Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
  21. Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
Esperado
  • La rutina es legible y compacta en mobile y todas las superficies resuelven una única versión efectiva por fecha. Abrir Rutina o Ver ejercicios sólo consulta: si el coach publica una versión inmediata antes de pulsar Iniciar, hoy aparece la nueva. Pulsar Iniciar crea la sesión y fija su ID, snapshot y versión prescrita aunque todavía no se registre ningún set; una publicación posterior no reemplaza esa sesión ni sus registros. La siguiente fecha programada usa la versión nueva. Prescripción y resultado permanecen separados: los inputs reales inician vacíos, la carga anterior se compara por serie, usar lo planeado es explícito/auditable y las notas pertenecen al ejercicio. Futuras, vencidas y desasignadas no son entrenables; los cambios para mañana crean una versión sin adelantar el documento de hoy y los extras requieren revisión staff. Cada set deriva ejercicio, serie y objetivos del servidor; extras catalogados se conservan sin inflar adherencia. Cero sets nunca equivale a completada: parcial, omitida y abandonada se muestran por separado. Sesiones terminales no aceptan mutaciones y los PRs sólo nacen de resultados reales validados.

Vistas:/portal/rutina/portal/entrenamientoAPI /api/portal/fitness/session

Fuente: test-cases.json · testCases[id=fitness-routine-patient-mobile]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Omitir un segmentosesión del pacienteFuncionalPor comprobarPor probarM2-X03

Qué permite hacerLa ampliación pide saltar un bloque y continuar sin registrar como realizado lo que no se hizo.

Alcance
Adicional por conciliar
Registro de origen
Por comprobar
Validación pendiente · 2026-09-21

Marcada por revisar. Los controles de bloques no prueban la semántica requerida.

La existencia de controles de bloque no acredita la semántica de omisión solicitada.

Ubicación y referencia técnica

sesión del paciente

Omitir un segmento

  • m2-funciones.mdM2-X03
  • sesion-activa.tsxbloques y completado 2482-2526
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAIntegración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/routine-occurrences.test.tsIntegración · Cobertura parcial · 1 vinculadas / 24 definiciones en el archivo

Permite completar y deshacer un bloque, pero no especifica omitir un segmento y continuar.

  • completes a block atomically, preserves manual results and undoes only the batchL542
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 1 en soporte · 12 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Revisar el progreso y los apoyos

005
Pruebas del flujo
13 pruebas vinculadas8 archivos4 casos QAUnitarias / componentes 13

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Ver adherencia del pacienteFicha del paciente → Seguimiento de entrenamientoFuncionalPruebas parcialesPor probarM2-F08.a

Qué permite hacerEl coach dispone de lecturas de adherencia por sesiones y sets del entrenamiento del paciente.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

Pasó declaración de día pasado; permite comprobar cierre diario, no cálculo longitudinal de adherencia.

FIT-05 sigue señalando la falta de recorrido coach → paciente → adherencia documentado.

Ubicación y referencia técnica

/pacientes/[id]/fitness

Ver adherencia del paciente

  • adherencia-panel.tsxpanel
  • adherencia-fitness.tscálculo
  • resultados-resumidos.jsonfunction_mapping[id=M2-F08.a]; resultados de la versión local actual
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/calculations/adherencia-fitness.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 12 definiciones en el archivo

Calcula adherencia sobre sesiones programadas y contempla cambios, vacaciones y descanso declarado.

  • suma el denominador de múltiples rutinas asignadasL75
  • cuenta los días programados tras cambios y excluye descanso de vacacionesL88
  • cuenta como 0 un descanso declarado después de una rutina previstaL96
tests/unit/hooks/use-fitness-paciente.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 3 definiciones en el archivo

Cubre la carga de series para una ventana de 30 días, no el panel longitudinal completo.

  • usa exactamente 30 días y prorratea cuatro semanas y dos díasL120
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaPaciente
Vistas y controles
Casos
fitness-adherence-cross-surface · Adherencia coincide entre staff y portal
coachespecialistapaciente
Pasos
  1. Registrar la prescripción y el periodo de una rutina QA y anotar el numerador y denominador iniciales.
  2. Completar parcialmente una sesión y agregar una serie extra que no debe incrementar la prescripción cumplida.
  3. Comparar adherencia en ficha fitness, métricas staff y dashboard paciente usando el mismo intervalo.
  4. Comprobar que las tres superficies coinciden y que un periodo sin rutina muestra estado vacío, no un porcentaje inventado.
Esperado
  • Las superficies usan el mismo numerador, denominador y periodo.

Vistas:/pacientes/[id]/fitness · requiere paciente/dashboard/metricas/portal/dashboard

Fuente: test-cases.json · testCases[id=fitness-adherence-cross-surface]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Revisar progresión por ejercicioFicha del paciente → Seguimiento de entrenamientoFuncionalCódigo leídoPor probarM2-F08.b

Qué permite hacerEl panel de insights muestra historial, progresión, tonelaje y sets tras sesiones completadas.

Alcance
Base contratada
Registro de origen
Código leído
Validación pendiente · 2026-06-03

El recorrido integrado sigue pendiente. Código de insights no es evidencia funcional.

La vista se clasifica legacy en el inventario de vistas, pero sigue siendo superficie de M2.

Ubicación y referencia técnica

/pacientes/[id]/fitness

Revisar progresión por ejercicio

  • patient-fitness-insights-panel.tsx75-241
  • page.tsx13
  • fitness-readiness-checklist.mdFIT-05
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 4

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/operational-routine-performance.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 3 definiciones en el archivo

Expone peso, repeticiones y métricas reales del calendario, no el panel completo de progresión y tonelaje.

  • expone peso y repeticiones reales, no los objetivos prescritosL26
  • omite sets no completados y ordena por ejercicio y número de serieL42
tests/unit/lib/calculations/volumen-fitness.test.tsUnitarias / componentes · Prueba de apoyo · 2 vinculadas / 10 definiciones en el archivo

Calcula tonelaje y volumen efectivo como datos de apoyo; no comprueba la vista de insights.

  • tonelaje = peso × reps de un set completadoL43
  • combina tonelaje y sets efectivosL80
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaPaciente
Vistas y controles
Casos
fitness-adherence-cross-surface · Adherencia coincide entre staff y portal
coachespecialistapaciente
Pasos
  1. Registrar la prescripción y el periodo de una rutina QA y anotar el numerador y denominador iniciales.
  2. Completar parcialmente una sesión y agregar una serie extra que no debe incrementar la prescripción cumplida.
  3. Comparar adherencia en ficha fitness, métricas staff y dashboard paciente usando el mismo intervalo.
  4. Comprobar que las tres superficies coinciden y que un periodo sin rutina muestra estado vacío, no un porcentaje inventado.
Esperado
  • Las superficies usan el mismo numerador, denominador y periodo.

Vistas:/pacientes/[id]/fitness · requiere paciente/dashboard/metricas/portal/dashboard

Fuente: test-cases.json · testCases[id=fitness-adherence-cross-surface]

Cobertura: Referencias parciales

Consultar récords y alertassesión, insights y tableroFuncionalPruebas parcialesPor probarM2-F08.c

Qué permite hacerLos récords están expuestos en sesión e insights; la alerta de estancamiento contractual no quedó verificada como superficie actual.

Alcance
Base contratada
Registro de origen
Código leído
Prueba parcial · 2026-09-23

Pasó tarjeta con PR de fixture; permite comprobar visibilidad del contador condicional, no alertas completas.

No se declara faltante sin una búsqueda específica de la alerta, pero tampoco se presenta como entregada.

Ubicación y referencia técnica

sesión, insights y tablero

Consultar récords y alertas

  • sesion-activa.tsx1148, 1795-1822
  • m2-funciones.mdM2-F08
  • resultados-resumidos.jsonfunction_mapping[id=M2-F08.c]; resultados de la versión local actual
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/components/completed-routine-day-pr.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Comprueba sólo la tarjeta de PR condicional.

  • muestra series sin inventar PRs y muestra PRs sólo con una marca registradaL19
tests/unit/lib/fitness/training-reference.test.tsUnitarias / componentes · Prueba de apoyo · 1 vinculadas / 8 definiciones en el archivo

Construye referencias de rendimiento, sin alerta de estancamiento.

  • shows reps and weight records from the same session without changing the prior preloadL35
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 2 en soporte · 11 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
fitness-routine-patient-mobile · Portal paciente muestra rutina usable
paciente
Pasos
  1. Entrar como paciente con rutina activa.
  2. Abrir bloque de rutina o entrenamiento del día.
  3. Cambiar de día y revisar ejercicios.
  4. Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
  5. Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
  6. Validar instrucciones y controles móviles.
  7. Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
  8. Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
  9. Abrir Ver ejercicios sin pulsar Iniciar, publicar desde staff una versión inmediata distinguible y confirmar que hoy muestra la nueva sin crear sesión; pulsar Iniciar y confirmar que se crea una sesión con esa versión aunque aún no haya sets; publicar otra versión desde staff y confirmar que la sesión iniciada conserva el mismo ID y la prescripción fijada; registrar el primer set y comprobar que permanece en esa sesión; tras terminar, abrir la siguiente fecha programada y confirmar la versión nueva.
  10. Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
  11. Escribir una nota de dolor/técnica/equipo en el ejercicio, terminar y confirmar que aparece ligada al ejercicio completo, no sólo al último set.
  12. Tocar el timer de entrenamiento y confirmar reinicio.
  13. Completar un descanso con permisos de notificación activos.
  14. Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
  15. Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
  16. Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
  17. Modificar orden, descanso o series de un ejercicio prescrito; cerrar con Sólo esta sesión y comprobar que mañana conserva la versión original.
  18. Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
  19. Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
  20. Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
  21. Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
Esperado
  • La rutina es legible y compacta en mobile y todas las superficies resuelven una única versión efectiva por fecha. Abrir Rutina o Ver ejercicios sólo consulta: si el coach publica una versión inmediata antes de pulsar Iniciar, hoy aparece la nueva. Pulsar Iniciar crea la sesión y fija su ID, snapshot y versión prescrita aunque todavía no se registre ningún set; una publicación posterior no reemplaza esa sesión ni sus registros. La siguiente fecha programada usa la versión nueva. Prescripción y resultado permanecen separados: los inputs reales inician vacíos, la carga anterior se compara por serie, usar lo planeado es explícito/auditable y las notas pertenecen al ejercicio. Futuras, vencidas y desasignadas no son entrenables; los cambios para mañana crean una versión sin adelantar el documento de hoy y los extras requieren revisión staff. Cada set deriva ejercicio, serie y objetivos del servidor; extras catalogados se conservan sin inflar adherencia. Cero sets nunca equivale a completada: parcial, omitida y abandonada se muestran por separado. Sesiones terminales no aceptan mutaciones y los PRs sólo nacen de resultados reales validados.

Vistas:/portal/rutina/portal/entrenamientoAPI /api/portal/fitness/session

Fuente: test-cases.json · testCases[id=fitness-routine-patient-mobile]

Automatización
  • e2e/staging/routine-occurrence-flow.spec.ts 2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.

Cobertura: Referencias parciales

Estimar duración del díaconstructor y resumen de rutinaFuncionalPruebas parcialesPor probarM2-X04

Qué permite hacerLa ampliación calcula y muestra minutos estimados separados de una duración manual.

Alcance
Adicional por conciliar
Registro de origen
Reportado
Prueba parcial · 2026-09-16

La corrida de 56 pruebas incluye duración junto a selector, distribución y segmentos. No hay caso aislado ni aceptación humana; es función adicional.

No está nombrado en el Anexo A.

Ubicación y referencia técnica

constructor y resumen de rutina

Estimar duración del día

  • rutina-duration-estimate.tsxcomponente
  • m2-funciones.mdM2-X04
  • README.mdValidación
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/rutina-duration-estimate.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 7 definiciones en el archivo

Calcula duración por trabajo, descansos, rangos, tempo y bloques sin inventar datos.

  • suma trabajo y descansos entre series sólo del día activoL5
  • distancia sin duración permanece por estimar en lugar de inventar 600 segundosL33
tests/unit/components/rutina-duration-surfaces.test.tsxUnitarias / componentes · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Comprueba superficies de presentación; no confirma una duración manual separada en el flujo completo.

  • portal y contador del editor muestran el mismo cálculo sin usar el objetivo manualL11
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 1 en soporte · 12 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
Paciente
Vistas y controles
Casos
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
paciente
Pasos
  1. Consultar semana completa y día sin título de rutina repetido, con flechas y Hoy dentro de la cabecera del calendario, botones paralelos del mismo ancho con íconos para ver ejercicios y cambiar día, acceso al final para registrar actividad extra y CTA flotante en forma de píldora, con ícono, para iniciar o continuar la sesión disponible. Distinguir Descanso de Sin rutina asignada. No mostrar el acceso Ver última sesión registrada.
  2. Comprobar un único resumen visual siempre visible, sin expansión ni contadores totales: barras musculares antes de etiquetas de bloques con ícono, color, ejercicios, series y duración. Comprobar el mismo CTA flotante redondo con ícono y posición en resumen y preparación, tanto Iniciar como Continuar. Preparar ejercicios por bloque con el mismo selector móvil de Actividad extra; consultar Info en una ficha sin editor de series ni botones Sustituir ejercicio o Guardar ajustes, buscar, añadir y sustituir desde los controles de la lista conservando el bloque y las restricciones. Salir, recargar e iniciar sin perder cambios.
  3. En la tarjeta de una rutina en curso, sustituir el estado En curso por una barra con series completadas y planeadas de esa sesión; conservar el último avance mientras se actualiza y leer sólo la sesión seleccionada. El resumen muscular usa una barra apilada y una leyenda compacta con ícono, nombre y porcentaje para cada grupo; los bloques siguen visibles debajo. Comprobar móvil, tema claro/oscuro, cero series y fallo o lentitud de la lectura del progreso.
  4. Abrir Ver ejercicios de una sesión anterior con ajustes guardados y una prescripción posterior: mostrar la preparación histórica como consulta, sin ofrecer reemplazarla. En una sesión vigente con conflicto, comparar las dos prescripciones sin atribuir la comparación a un ajuste nuevo del paciente; al aceptar, mantener el panel visible hasta la respuesta y conservarlo con error si falla.
  5. Abrir el intercambio y Añadir ejercicios en móvil: el overlay y el drawer deben cubrir la navbar, también en su área táctil inferior. Ver recomendados configurados/sugeridos en preparación y entrenamiento; si sólo hay un grupo con opciones, abrirlo automáticamente. Mostrar Buscar en todo el catálogo únicamente cuando el ejercicio no tenga equivalentes, regresiones ni progresiones; entonces permitir filtros por grupo, categoría, equipo y dificultad, buscar y limpiar. Si falla la lectura del catálogo, mostrar error y reintento en vez de Sin resultados; si el catálogo está realmente vacío, indicarlo. Arrastrar el handle del buscador hacia abajo para cerrar; un gesto corto vuelve a su sitio, el catálogo conserva su scroll y el handle también permite cerrar con teclado. Al cerrar, recuperar la navegación.
  6. En una sesión pendiente de hoy o futura, Cambiar día abre un drawer visual con los días únicos del programa: nombre, músculos principales, tiempo estimado, ejercicios, bloques por tipo y círculos de la semana con verde para realizado y borde claro para pendiente. Las opciones ya visibles pueden elegirse mientras se actualiza la lista. Elegir otro día sustituye sólo la rutina de esa fecha, aunque se use en otra. Descansar es reversible y un día originalmente de descanso permite elegir una rutina. Ver ejercicios, Cambiar día, Descansar y Contactar al coach aparecen en dos filas; Chat permite regresar a la fecha seleccionada. El paciente no ve un error de guardado si la operación ya quedó persistida y la primera respuesta falló; el reintento confirma la misma operación. Al recargar, Home, Agenda y el calendario del coach respetan la elección. En una fecha pasada pendiente, el segundo botón permite declarar la rutina completada y el tercero marcar descanso; pedir confirmación, conservar la prescripción y no inventar series. Al confirmar una rutina pasada completada, la tarjeta cambia de inmediato a un estado visual de cierre con el 100% del resultado diario y muestra Guardando resultado hasta confirmar la escritura; si falla, restaura la tarjeta anterior y muestra el error. Distingue la declaración sin series de una sesión entrenada, ofrece consultar el registro y enlaza a Ejercicios y cargas; sólo muestra PRs si existen series registradas con marca personal. Una declaración de rutina realizada cuenta como 100% diario; descansar cuando había rutina prevista cuenta como 0%. Se puede corregir una declaración, pero no reemplazar una sesión entrenada. Las sesiones iniciadas y con prescripción en conflicto no admiten estas declaraciones.
  7. Completar un bloque, conservar registros previos y deshacer sólo esa operación.
  8. Bloquear y desbloquear durante descanso; comprobar contador y aviso.
  9. Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
  10. En el ejercicio, mostrar sólo dos accesos sobre las series: récord según tipo de registro (peso, reps, tiempo o distancia) y Opciones. Bajo cada serie con carga, mostrar la mejor cantidad de reps para ese peso; al completar otra serie, actualizar la referencia y señalar el nuevo récord confirmado. El drawer de Opciones se arrastra para cerrar y ofrece reemplazo, conversión de kg/lb sólo cuando hay peso, nota actual, detalle, añadir ejercicio arriba o abajo y eliminar sin series registradas. Reordenar series abre un drawer con tarjetas y asas de arrastre; Guardar cambia el orden sólo en esa sesión, conserva los valores y registros de cada serie y persiste al recargar. La conversión cambia todas las cargas del ejercicio y persiste al recargar. Precargar última serie comparable sin sobrescribir borrador; sin historial no inventar repeticiones del rango.
  11. Registro individual sin métricas requiere confirmación; bulk conserva previos y ofrece Deshacer. Descanso automático compacto sin reiniciar uno activo. Terminar permanece en cabecera. Actividad libre muestra etiquetas y unidad.
  12. Durante entrenamiento, Agregar ofrece Añadir bloque con tipos, íconos y colores del constructor, o Añadir ejercicio eligiendo bloque antes del catálogo. Los bloques nuevos respetan la posición del constructor, confirman su ubicación y permiten verla. Flechas reordenan bloques sin perder registros ni alterar descanso. Recargar conserva bloques y orden sólo en la sesión.
  13. Con una sesión en curso, ir de Rutina a Dashboard y volver: mostrar de inmediato la semana ya consultada, sin skeleton de ruta ni consulta duplicada si sigue reciente; revalidarla en segundo plano cuando venza. Abrir Ver ejercicios e iniciar desde ahí. Sin datos previos, mostrar carga y nunca «Sin rutina asignada» hasta confirmar una semana realmente vacía.
  14. En Rutina, Ver ejercicios y entrenamiento, abrir sin datos previos y comprobar skeletons con la forma de cada vista, sin títulos «Cargando calendario» o «Cargando ejercicios». Mantener encabezado y navegación del portal; al volver con datos confirmados, mostrar la vista reciente durante la actualización.
Esperado
  • Calendario, preparación y entrenamiento separados. Ediciones sólo por ocurrencia auditables; ninguna consulta inicia sesión. Registro libre y completado conjunto sin métricas inventadas. Descanso persistente sin reinicio.

Vistas:/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento

Fuente: test-cases.json · testCases[id=patient-routine-prepare-and-perform]

Cobertura: Referencias parciales

Abrir guía breve contextualsesión del pacienteFuncionalPor comprobarPor probarM2-X05

Qué permite hacerLa ampliación busca explicar una serie o concepto sin sacar al paciente de la sesión.

Alcance
Adicional por conciliar
Registro de origen
Por comprobar
Validación pendiente · 2026-09-21

Marcada por revisar. Metadatos visuales de serie no prueban abrir una guía.

Los metadatos de tipo de serie no acreditan la guía breve pedida.

Ubicación y referencia técnica

sesión del paciente

Abrir guía breve contextual

  • m2-funciones.mdM2-X05
  • tipo-serie-visual.tsxmetadatos visuales de serie
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba de abrir y cerrar una guía en sesión.

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoCoachEspecialista
Vistas y controles
Casos
patient-diet-routine-feedback-learn · Dieta y Rutina agregan feedback, aprender y señales correctas
pacienteadminnutriologocoachespecialista
Pasos
  1. Entrar a Dieta y registrar feedback rápido de una comida.
  2. Abrir Aprender en Dieta.
  3. Entrar a Rutina y validar Hoy, Progreso resumen y Aprender.
  4. Cambiar equipo disponible desde Rutina o Configuración.
  5. Registrar dolor o dificultad y revisar señal staff.
Esperado
  • Dieta conserva comida, swaps, despensa y suplementos integrados; Rutina muestra Hoy/Progreso/Aprender, equipo vive en Rutina + Configuración, cambiar equipo no modifica automáticamente la rutina y dolor/malestar genera señal staff.

Vistas:/portal/plan/portal/rutina

Fuente: test-cases.json · testCases[id=patient-diet-routine-feedback-learn]

Cobertura: Referencias parciales

Área 05

Alto rendimiento · AAR

16funciones

Identificar atleta · Preparar · Competir · Ajustar

Contexto de prueba5 roles · 6 vistas
Roles
AdminNutriólogoCoachEspecialistaPaciente
Vistas
  • Ficha del atleta/pacientes/[id]?view=aar · requiere paciente
  • Seguimiento fitness/pacientes/[id]/fitness · requiere paciente
  • Dieta del atleta/pacientes/[id]/plan · requiere paciente
  • Preparación y prioridades/pacientes
  • Conversaciones/chat
  • Progreso del atleta/portal/progreso
Pruebas del área
20 pruebas vinculadas11 archivos5 casos QAE2E 3Unitarias / componentes 15Integración 2

Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.

Identificar y registrar al atleta

200
Pruebas del flujo
4 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 3

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Identificar a un paciente como atletaPerfil y ficha deportiva del pacienteFuncionalValidada en versión localRevisadaAAR-01

Qué permite hacerMarca al paciente como AAR y conserva el flujo normal para población no AAR.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Código leído
✓ Validada en versión local · 2026-09-23

Con un paciente sintético inicialmente sin AAR, el equipo abrió la ficha normal, activó Modo AAR, guardó el perfil y comprobó el cockpit deportivo. El estado activo persistió en su expediente. Limpieza de la fixture confirmada.

El código confirma la superficie; no se ejecutó ni se verificó contra datos reales.

Ubicación y referencia técnica

Perfil del paciente, onboarding y ficha/cockpit AAR para staff

Modo atleta diferenciado

  • ORDEN-DE-SERVICIO-GR-AAR-SITIO-ODOO-2026-05-22.htmlMódulo 01, líneas 528-536
  • ESTATUTO-FASE3-AAR.htmlIII.1, líneas 150-155
  • page.tsxlíneas 290-300, sincroniza tipoPaciente y perfilAAR
  • resultados-competencias-aislado.jsonActivación y perfil AAR persistentes; Chromium desktop / HIXION
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/aar-competencias-aislado.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

Con atleta sintético, activa Modo AAR, guarda y verifica persistencia antes de abrir el cockpit.

  • perfil, preparación, fases manuales y competencias persisten con atleta sintéticoL123
tests/unit/lib/utils/aar-perfil.test.tsUnitarias / componentes · Prueba de apoyo · 1 vinculadas / 6 definiciones en el archivo

Protege el merge del perfil y el interruptor de preparación, no el flujo visual completo.

  • el interruptor de preparación activa viaja en el guardado del perfilL101
Por completar
  • La cobertura localizada debe mantenerse dentro del comportamiento indicado.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
  • VentanaPerfil AAR/pacientes/[id] · requiere paciente
Casos
patient-aar-profile-completion · AAR activado por staff solicita perfil avanzado al paciente
pacienteadminnutriologocoachespecialista
Pasos
  1. Activar AAR desde staff antes de enviar acceso y validar que el onboarding muestra Perfil deportivo avanzado.
  2. Completar onboarding y revisar que perfilAAR.capturaPaciente queda completa.
  3. Repetir con paciente ya registrado: activar AAR desde staff.
  4. Entrar al portal paciente y completar el popup de perfil avanzado.
Esperado
  • El paciente nunca se autodeclara AAR; sólo se muestran preguntas avanzadas cuando staff activó perfilAAR.activo y el popup desaparece al completar capturaPaciente.

Vistas:/onboarding/[token] · requiere token/portal/dashboard/pacientes/[id] · requiere paciente

Fuente: test-cases.json · testCases[id=patient-aar-profile-completion]

Cobertura: Referencias parciales

Completar la ficha deportivaPerfil y resumen deportivo del pacienteFuncionalVerificación históricaRevisadaAAR-02

Qué permite hacerGuarda deporte, categoría, nivel competitivo, peso máximo y notas del atleta.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Código leído
✓ Verificación histórica · 2026-08-31

Ficha del atleta y perfil editable. El expediente actualizado al 31 de agosto la declara expresamente entregada y verificada. La marca reproduce ese registro; no se localizó una corrida individual ni se volvió a probar la plataforma.

La semántica operativa es máximo de categoría, aunque el campo heredado se llama pesoObjetivoKg.

Ubicación y referencia técnica

Diálogo Perfil AAR y resumen/cockpit del paciente

Ficha deportiva operable

  • ESTATUTO-FASE3-AAR.htmlIII.1, líneas 150-154
  • Reporte-Sesion-AAR-Feedback-2026-08-19.mdTema 3, Peso máximo y ficha de división
  • index.tsPerfilAAR, líneas 1752-1770
  • ESTADO.mdEntregado y verificado; actualizado 2026-08-31
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/aar-competencias-aislado.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Guarda el perfil sintético y persiste estado, fase y peso; no enumera todos los campos deportivos del inventario.

  • perfil, preparación, fases manuales y competencias persisten con atleta sintéticoL123
tests/unit/lib/utils/aar-perfil.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 6 definiciones en el archivo

Comprueba preservación y limpieza de campos del perfil en datos puros.

  • guardar sin tocar nada conserva notas y división del portalL53
  • cambiar de deporte limpia los detalles staff del deporte anterior sin tocar los del pacienteL66
Por completar
  • La cobertura localizada debe mantenerse dentro del comportamiento indicado.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
PacienteAdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
  • VentanaPerfil AAR/pacientes/[id] · requiere paciente
Casos
patient-aar-profile-completion · AAR activado por staff solicita perfil avanzado al paciente
pacienteadminnutriologocoachespecialista
Pasos
  1. Activar AAR desde staff antes de enviar acceso y validar que el onboarding muestra Perfil deportivo avanzado.
  2. Completar onboarding y revisar que perfilAAR.capturaPaciente queda completa.
  3. Repetir con paciente ya registrado: activar AAR desde staff.
  4. Entrar al portal paciente y completar el popup de perfil avanzado.
Esperado
  • El paciente nunca se autodeclara AAR; sólo se muestran preguntas avanzadas cuando staff activó perfilAAR.activo y el popup desaparece al completar capturaPaciente.

Vistas:/onboarding/[token] · requiere token/portal/dashboard/pacientes/[id] · requiere paciente

Fuente: test-cases.json · testCases[id=patient-aar-profile-completion]

Cobertura: Referencias parciales

Consultar el estado del atleta

004
Pruebas del flujo
3 pruebas vinculadas2 archivos4 casos QAE2E 1Unitarias / componentes 2

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Consultar el resumen deportivo del atletaResumen deportivo del paciente y atletaFuncionalPruebas parcialesPor probarAAR-03

Qué permite hacerReúne alimentación, composición, entrenamiento, descanso, biomarcadores y motivación para decidir ajustes.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Código leído
Prueba parcial · 2026-07-29

4/4 casos funcionales verdes y 8/8 autenticaciones; revisión visual autenticada. Cubre layout semanal, no las seis variables ni datos reales de cada atleta.

La presencia de la vista no acredita que las seis señales tengan datos reales para cada atleta.

Ubicación y referencia técnica

Detalle/cockpit AAR del staff; lectura simplificada para atleta

Cockpit de seis variables

  • ESTATUTO-FASE3-AAR.htmlIII.2, líneas 160-170
  • aar-athlete-detail-experience.tsxsecciones y consumidores de perfil, fitness, biomarcadores y chat; líneas 1028, 1168-1199, 2551
  • README.mdValidación
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos3 casos QAE2E 1Unitarias / componentes 2

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/aar-cockpit-demo-kpis.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Lee objetivo y sets en dos viewports; no prueba las seis variables ni sus datos.

  • objetivo y sets se leen igual en escritorio y 390 pxL75
tests/unit/lib/utils/aar-dashboard-layout.test.tsUnitarias / componentes · Prueba de apoyo · 2 vinculadas / 19 definiciones en el archivo

Comprueba preferencias de layout y métricas compatibles, no la integración de los seis orígenes.

  • superpone varias metricas de la misma unidad, sin tope de dosL121
  • bloquea un tercer grupo de unidad en vez de soltar series en silencioL138
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 2 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

patients-aar-objective-from-record · Calendario y cockpit AAR muestran el objetivo del expediente
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR cuyo expediente tenga objetivoDetallado y confirmar el mismo texto en el encabezado del cockpit.
  2. Entrar a Calendario y confirmar que el objetivo procede del expediente y no de la competencia, dieta o rutina.
  3. Repetir con un atleta sin objetivoDetallado y verificar el estado explícito Sin objetivo definido en ambas superficies.
  4. Validar escritorio y 390 px sin recorte, desborde ni solapamiento con insignias o acciones.
Esperado
  • El objetivo clínico ya registrado en el expediente aparece en cockpit y calendario; si falta, ambas superficies lo declaran explícitamente.

Fuente: test-cases.json · testCases[id=patients-aar-objective-from-record]

patients-aar-sets-kpi-replaces-rpe · Cockpit y calendario priorizan sets sobre RPE en sus KPI
adminnutriologocoachespecialista
Pasos
  1. Abrir el Dashboard AAR y confirmar que la franja de KPI muestra sets completados frente a planeados en lugar del promedio RPE.
  2. Entrar a Calendario y confirmar métricas de sets de 7 y 30 días sin una tarjeta primaria de Carga/RPE.
  3. Abrir el detalle de una sesión y comprobar que RPE continúa disponible como dato del ejercicio, no como KPI principal.
  4. Validar escritorio y 390 px sin desbordes nuevos.
Esperado
  • Los KPI principales usan sets ejecutados; RPE permanece como detalle de entrenamiento cuando existe, sin confundirse con el KPI sustituido.

Fuente: test-cases.json · testCases[id=patients-aar-sets-kpi-replaces-rpe]

Automatización
  • e2e/staging/aar-cockpit-demo-kpis.spec.ts

Cobertura: Referencias parciales

Mediciones corporales avanzadasConsulta y resumen deportivoFuncionalPor comprobarPor probarAAR-04

Qué permite hacerRegistrar mediciones deportivas como pliegues, diámetros y perímetros ISAK, y leer su evolución junto con los estudios de composición.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Por comprobar
Validación pendiente

Las fuentes son contrato y reunión, no una ejecución. No acreditar todos los índices con código o notas.

La sesión pidió medición y fotos; no se usó código como prueba de cobertura de todos los índices.

Ubicación y referencia técnica

Consulta/medición y cockpit AAR

Mediciones corporales avanzadas

  • ESTATUTO-FASE3-AAR.htmlIII.5 y IX, líneas 195-207 y 302-309
  • Análisis de Procesos - Seguimiento de Pacientes _ GR Wellness_ 2026_05_27 11_31 CST - Notas de Gemini.mdDetalles 00:08:56 y 00:16:30
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba de mediciones ISAK ni evolución.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Cobertura: Referencias parciales

Responder y revisar el seguimiento del atletaSeguimiento del atleta y calendarioFuncionalPor definirPor definirAAR-05

Qué permite hacerRegistra peso, energía, adherencia, sueño, disposición para entrenar, fatiga, molestias y motivación para ajustar el plan.

Alcance
Solicitado
Registro de origen
Por definir
Validación pendiente

Permanece por definir. No existe regla operativa que probar.

Frecuencia, obligatoriedad y umbrales siguen sin validación operativa del cliente.

Ubicación y referencia técnica

Cuestionarios y seguimiento del atleta; señales visibles en cockpit/calendario

Check-ins de adherencia

  • Análisis de Procesos - Seguimiento de Pacientes _ GR Wellness_ 2026_05_27 11_31 CST - Notas de Gemini.mdDetalles 00:10:26, 00:17:43, 00:55:20
  • 04-aar-patient-detail-experience.mdData / Interface Candidates y preguntas pendientes de cliente
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay regla operativa o prueba de check-in AAR.

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-followup-actions-and-chat · Seguimiento AAR evita acciones duplicadas y ofrece chat compacto
adminnutriologocoachespecialista
Pasos
  1. Abrir un paciente AAR y entrar a Seguimiento.
  2. Confirmar que Accesos rápidos muestra sólo Somatocarta, Check-in y Archivos y que Check-in/Archivos abren sus módulos embebidos.
  3. Validar que Progreso físico conserva QR fotos y Cargar fotos con una distribución legible.
  4. Confirmar que Evidencia y seguimiento ya no repite Chat con paciente ni Agendar seguimiento.
  5. Abrir la burbuja de chat ubicada encima del FAB de soporte y alternar Mensajes y Archivos.
  6. Validar que el botón Chat del encabezado sigue abriendo la conversación completa y que Agenda continúa disponible arriba.
Esperado
  • Seguimiento presenta cada acción una sola vez; la evidencia visual conserva QR y carga directa, y el chat compacto queda accesible sobre soporte con vistas separadas para mensajes y archivos.

Fuente: test-cases.json · testCases[id=patients-aar-followup-actions-and-chat]

Cobertura: Referencias parciales

Consultar resultados de laboratorio y sus cambiosExpediente y resumen deportivoFuncionalPor comprobarPor probarAAR-07

Qué permite hacerRegistra valores de laboratorio, adjunta archivos, grafica evolución y alerta tendencias frente a rangos deportivos.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Por comprobar
Validación pendiente

Las fuentes son alcance y estatuto. No se localizó corrida funcional.

OCR automático queda condicionado y fuera de la V1 operativa.

Ubicación y referencia técnica

Expediente/cockpit AAR, archivos y biomarcadores

Biomarcadores con tendencias

  • ORDEN-DE-SERVICIO-GR-AAR-SITIO-ODOO-2026-05-22.htmlMódulo 01, líneas 497 y 528-536
  • ESTATUTO-FASE3-AAR.htmlVI. Biomarcadores V1, líneas 240-262
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba de valores, archivo, tendencia y alerta.

Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-followup-actions-and-chat · Seguimiento AAR evita acciones duplicadas y ofrece chat compacto
adminnutriologocoachespecialista
Pasos
  1. Abrir un paciente AAR y entrar a Seguimiento.
  2. Confirmar que Accesos rápidos muestra sólo Somatocarta, Check-in y Archivos y que Check-in/Archivos abren sus módulos embebidos.
  3. Validar que Progreso físico conserva QR fotos y Cargar fotos con una distribución legible.
  4. Confirmar que Evidencia y seguimiento ya no repite Chat con paciente ni Agendar seguimiento.
  5. Abrir la burbuja de chat ubicada encima del FAB de soporte y alternar Mensajes y Archivos.
  6. Validar que el botón Chat del encabezado sigue abriendo la conversación completa y que Agenda continúa disponible arriba.
Esperado
  • Seguimiento presenta cada acción una sola vez; la evidencia visual conserva QR y carga directa, y el chat compacto queda accesible sobre soporte con vistas separadas para mensajes y archivos.

Fuente: test-cases.json · testCases[id=patients-aar-followup-actions-and-chat]

Cobertura: Referencias parciales

Ajustar alimentación y entrenamiento

103
Pruebas del flujo
8 pruebas vinculadas6 archivos1 casos QAE2E 3Unitarias / componentes 5

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Adaptar la alimentación a la preparación del atletaPlan nutricional, calendario y resumen deportivoFuncionalPor comprobarPor probarAAR-08

Qué permite hacerMuestra un plan estable con timing pre/post-entreno, avituallamientos y suplementación deportiva según la fase.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Por comprobar
Validación pendiente

Los ajustes requieren criterio humano y no tienen prueba localizada. No inferir automatización desde el cockpit.

Los ajustes concretos dependen de criterio humano y señales del seguimiento.

Ubicación y referencia técnica

Plan nutricional AAR, calendario y cockpit

Nutrición por preparación

  • ESTATUTO-FASE3-AAR.htmlIII.3, líneas 175-183
  • Análisis de Procesos - Seguimiento de Pacientes _ GR Wellness_ 2026_05_27 11_31 CST - Notas de Gemini.mdDetalles 00:19:04 y 01:05:12
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAE2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/aar-cockpit-evidencia.spec.tsE2E · Cobertura parcial · 1 vinculadas / 4 definiciones en el archivo

Comprueba rejillas semanales de dieta y rutina, no timing, avituallamiento o suplementación por fase.

  • Semana dieta y Semana rutina con el atleta dummyL152
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Automatización
  • e2e/staging/aar-cockpit-evidencia.spec.ts

Cobertura: Referencias parciales

Adaptar el entrenamiento al objetivo competitivoRutina, entrenamiento y resumen deportivoFuncionalCódigo leídoPor probarAAR-09

Qué permite hacerRelaciona rutina, volumen, intensidad, RPE, PRs y adherencia con la competencia y la energía disponible.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Código leído
Validación pendiente

Sólo se localizó lectura de calendario/sesiones. La integración clínica dieta-rutina no tiene reglas funcionales formalizadas.

La integración clínica dieta-rutina fue explicada por el cliente, pero sus reglas no están formalizadas como automatización.

Ubicación y referencia técnica

Rutina/sesión, calendario y cockpit AAR

Fitness por objetivo competitivo

  • ESTATUTO-FASE3-AAR.htmlIII.4, líneas 185-192
  • aar-athlete-detail-experience.tsxlectura de calendario/sesiones, líneas 1168-1199 y sección Calendario, 2084-2097
Cómo probar
Pruebas localizadas
2 pruebas vinculadas2 archivos1 casos QAE2E 1Unitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/aar-cockpit-demo-kpis.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Muestra objetivo y sets; no relaciona rutina, volumen, RPE, PR, adherencia y energía.

  • objetivo y sets se leen igual en escritorio y 390 pxL75
tests/unit/lib/utils/aar-cockpit-kpis.test.tsUnitarias / componentes · Prueba de apoyo · 1 vinculadas / 4 definiciones en el archivo

Comprueba selección de KPI, no integración clínica por competencia.

  • presenta sets completados en el KPI principal del cockpitL59
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Automatización
  • e2e/staging/aar-cockpit-demo-kpis.spec.ts

Cobertura: Referencias parciales

Consultar la etapa de preparación para competirPerfil, calendario y resumen deportivoFuncionalVerificación históricaRevisadaAAR-10

Qué permite hacerCalcula preparación, pre-competencia, peaking, competencia y recuperación desde el evento, con ajuste manual del coach.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Código leído
✓ Verificación histórica · 2026-08-31

Periodización y fases de preparación. El expediente actualizado al 31 de agosto la declara expresamente entregada y verificada. La marca reproduce ese registro; no se localizó una corrida individual ni se volvió a probar la plataforma.

La fase es una lectura de planificación; no sustituye decisión clínica del equipo.

Ubicación y referencia técnica

Perfil, calendario y dashboard AAR

Fases de competencia

  • ESTATUTO-FASE3-AAR.htmlIV, líneas 209-221
  • index.tsFaseAAR y PerfilAAR.faseManual, líneas 1744-1767
  • aar-fase.tslíneas 120 en adelante, preparación controlada por staff
  • ESTADO.mdEntregado y verificado; actualizado 2026-08-31
Cómo probar
Pruebas localizadas
4 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 3E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/aar-fase.test.tsUnitarias / componentes · Comportamiento directo · 3 vinculadas / 15 definiciones en el archivo

Calcula fase por días restantes, respeta o caduca ajuste manual y determina competencia principal.

  • mapea los días restantes a la faseL16
  • la respeta mientras la competencia siga vigente, incluido el día del eventoL28
  • caduca cuando la competencia ya pasó y vuelve al cálculo automáticoL37
e2e/staging/aar-competencias-aislado.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Guarda una fase manual en atleta sintético, pero no recorre todas las fases y transiciones.

  • perfil, preparación, fases manuales y competencias persisten con atleta sintéticoL123
Por completar
  • La cobertura localizada debe mantenerse dentro del comportamiento indicado.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Cobertura: Referencias parciales

Usar planes y rutinas según el deportePlantillas y asignación para el atletaFuncionalPor comprobarPor probarAAR-11

Qué permite hacerOfrece bases reutilizables por deporte, categoría o perfil para reducir tiempo de asignación.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Por comprobar
Validación pendiente

La lista documental no prueba contenido cargado. No hay ejecución de aplicación de plantilla localizada.

La lista documental incluye bodybuilding, CrossFit, powerlifting, endurance, combate y calistenia; no acredita contenido cargado.

Ubicación y referencia técnica

Plantillas y asignación de planes/rutinas desde staff

Plantillas por deporte

  • ORDEN-DE-SERVICIO-GR-AAR-SITIO-ODOO-2026-05-22.htmlMódulo 01, líneas 497 y 536
  • ESTATUTO-FASE3-AAR.htmlV, líneas 225-237
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/routine-template-recommendation.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 2 definiciones en el archivo

Explica recomendación por objetivo, nivel y contexto; no cubre deporte, categoría ni aplicación de una plantilla AAR.

  • explica una recomendación por objetivo, nivel y contexto del pacienteL23
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Cobertura: Referencias parciales

Preparar y registrar competencias

103
Pruebas del flujo
7 pruebas vinculadas4 archivos1 casos QAE2E 1Unitarias / componentes 5Integración 1

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Calendario de competenciasCompetencias, perfil y resumen deportivoFuncionalVerificación históricaRevisadaAAR-12

Qué permite hacerGestiona eventos con fecha, lugar, categoría, división, peso máximo, nivel, resultado, archivos y comparación histórica.

Alcance
Base AAR; detalle por conciliar
Registro de origen
Código leído
✓ Verificación histórica · 2026-08-31

Calendario de competencias con modelo de varios eventos. El expediente actualizado al 31 de agosto la declara expresamente entregada y verificada. La marca reproduce ese registro; no se localizó una corrida individual ni se volvió a probar la plataforma.

El código confirma modelo y sección, no la aceptación ni corrección de eventos reales.

Ubicación y referencia técnica

Sección Competencias, perfil AAR, calendario y cockpit

Calendario de competencias

  • ESTATUTO-FASE3-AAR.htmlVI. Competencias, líneas 265-273
  • aar-athlete-detail-experience.tsxsección Competencias, líneas 271-272 y 2080-2084
  • index.tsCompetenciaAAR, líneas 1778-1798
  • ESTADO.mdEntregado y verificado; actualizado 2026-08-31
Cómo probar
Pruebas localizadas
5 pruebas vinculadas3 archivos1 casos QAE2E 1Unitarias / componentes 3Integración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

e2e/staging/aar-competencias-aislado.spec.tsE2E · Comportamiento directo · 1 vinculadas / 1 definiciones en el archivo

Crea dos eventos, los ordena por fecha, borra uno y comprueba persistencia con atleta sintético.

  • perfil, preparación, fases manuales y competencias persisten con atleta sintéticoL123
tests/unit/lib/utils/aar-competencias.test.tsUnitarias / componentes · Cobertura parcial · 3 vinculadas / 10 definiciones en el archivo

Sanea registros, selecciona competencia próxima y conserva notas, pero no cubre todos los campos ni la UI.

  • el espejo apunta a la próxima por fecha, no al orden de capturaL31
  • convierte el peso de la unidad de captura a kg y descarta filas sin datosL93
  • conserva las tres voces de notasL127
tests/integration/api/aar-perfil-write.test.tsIntegración · Prueba de apoyo · 1 vinculadas / 3 definiciones en el archivo

Usa Firestore emulado para fijar que borrar la última competencia reemplace el mapa completo.

  • CONTROL POSITIVO: update() reemplaza el mapa completo y sí borraL65
Por completar
  • La cobertura localizada debe mantenerse dentro del comportamiento indicado.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
  • VentanaNueva competencia / Editar competencia/pacientes/[id]?view=aar · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Automatización
  • e2e/staging/aar-competencias-dominio.spec.ts

Cobertura: Referencias parciales

Historial y notas por eventoSección dedicada de competencias y su editorFuncionalCódigo leídoPor probarAAR-13

Qué permite hacerSepara notas del coach, atleta y jueces, y conserva nivel competitivo como historia del evento.

Alcance
Solicitado
Registro de origen
Código leído
Validación pendiente · 2026-08-31

El expediente registra los ajustes y un smoke de reglas, pero no desglosa una prueba de consultar y guardar notas por evento. Se conserva sin check.

El feedback no es una ampliación contractual firmada; el módulo M3 registra implementación histórica, pendiente de aceptación formal.

Ubicación y referencia técnica

Sección dedicada de competencias y su editor

Historial y notas por evento

  • Reporte-Sesion-AAR-Feedback-2026-08-19.mdTemas 1, 2 y 4
  • index.tsCompetenciaAAR.notasCoach/notasAtleta/feedbackJueces, líneas 1792-1797
  • ESTADO.mdLo que falta, status 31-ago; ajustes de ficha y sección dedicada
  • ESTADO.mdStatus 31-ago; ajustes de ficha y sección dedicada
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos1 casos QAUnitarias / componentes 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/aar-competencias.test.tsUnitarias / componentes · Cobertura parcial · 1 vinculadas / 10 definiciones en el archivo

Conserva las tres voces de notas en datos, sin cubrir edición y consulta en la sección de eventos.

  • conserva las tres voces de notasL127
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Cobertura: Referencias parciales

Consultar preparación activa y semanas restantesPerfil y resumen deportivo del atletaFuncionalPruebas parcialesPor probarAAR-14

Qué permite hacerEl equipo declara la preparación activa y consulta las semanas restantes hasta la próxima competencia.

Alcance
Solicitado
Registro de origen
Código leído
Prueba parcial · 2026-07-30

El spec autenticado valida ambas superficies y layout móvil; controles de cálculo cambian el consumidor real. Pruebas KPI de fuente son fachada y el denominador ignora fecha efectiva de asignación; no cubre filtro común ni semanas restantes completas.

El modelo actual usa estadoCompetitivo/en_competencia para esa señal; no se confirmó en este corte filtro y orden weeks-out comunes en pacientes y chat.

Ubicación y referencia técnica

Perfil/resumen AAR; filtros operativos solicitados para pacientes y chat

Consultar preparación activa y semanas restantes

  • Reporte-Sesion-AAR-Feedback-2026-08-19.mdTemas 6 y 7
  • aar-profile-dialog.tsxlínea 115, lectura de enPreparacion
  • aar-competencias.tslíneas 116-143, flag de preparación declarado por staff
  • README.mdValidación y brechas declaradas
Cómo probar
Pruebas localizadas
3 pruebas vinculadas2 archivos1 casos QAUnitarias / componentes 2E2E 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/unit/lib/utils/aar-fase.test.tsUnitarias / componentes · Cobertura parcial · 2 vinculadas / 15 definiciones en el archivo

Calcula days out y preparación activa, pero usa días y no cubre el requisito completo de semanas ni filtros operativos.

  • habla en días aunque falte más de una semana o un añoL45
  • estaEnPreparacion lee el flag del staff, no el calendarioL134
e2e/staging/aar-competencias-aislado.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo

Muestra preparación activa y un hero con days out; no valida equivalencia a semanas.

  • perfil, preparación, fases manuales y competencias persisten con atleta sintéticoL123
Por completar
  • La cobertura localizada es parcial y no acredita el recorrido completo.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
  • CampoPreparación activa/pacientes/[id]?view=aar · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Automatización
  • e2e/staging/aar-competencias-dominio.spec.ts

Cobertura: Referencias parciales

Logística de viajeLogística de competencia · pendiente de definirFuncionalPor definirPor definirAAR-15

Qué permite hacerOrganiza traslado, hotel, pesaje, checklist y alimentación durante viajes de competencia.

Alcance
Propuesta interna; no acreditada como contratada
Registro de origen
Por definir
Validación pendiente

Permanece por definir. No hay contrato operativo ni vista funcional que revisar.

No se halló en las fuentes leídas una aceptación contractual ni una vista actual que delimite este flujo.

Ubicación y referencia técnica

Módulo AAR; superficie concreta aún no especificada

Logística de viaje

  • ESTATUTO-FASE3-AAR.htmlVI. Viajes, líneas 255-263
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay contrato operativo ni superficie para logística de viaje.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Cobertura: Referencias parciales

Asignar planes y avisar al atleta

020
Pruebas del flujo
1 pruebas vinculadas1 archivos1 casos QAIntegración 1

Definiciones únicas de todo el flujo; no cambian con los filtros ni equivalen a pruebas aprobadas.

Programar la entrega de un plan y avisar al atletaPlanes, calendario y portal del atletaSigue pendiente la programación de plantillas con aviso al atleta.FuncionalFlujo incompletoPendiente documentadoAAR-16

Qué permite hacerProgramar una plantilla para una fecha futura, distinguirla de un ajuste rápido y avisar al atleta cuando entra en vigor.

Alcance
Solicitado
Registro de origen
2026-09-15
Validación pendiente · 2026-09-15

La brecha permanece registrada en ejecución. No se revalidó el recorrido.

El índice de planes, corte 15-sep, registra la programación con aviso como pendiente. No se revalidó el recorrido.

Ubicación y referencia técnica

Flujo de planes, calendario y portal/chat del atleta

Asignación programada de plantillas

  • Reporte-Sesion-AAR-Feedback-2026-08-19.mdTema 9 y próximos pasos
  • 06-aar-gap-sesion-19ago.mdBloque 4, plantilla programada a fecha y aviso al paciente
  • 00-gr-platform-phase-close-index.md06-aar-gap-sesion-19ago.md / en ejecución
Cómo probar
Pruebas localizadas
1 pruebas vinculadas1 archivos0 casos QAIntegración 1

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

tests/integration/api/assignment-versions.test.tsIntegración · Cobertura parcial · 1 vinculadas / 7 definiciones en el archivo

Programa una versión futura sin adelantarla, pero no distingue ajuste rápido ni avisa al atleta.

  • programa una versión futura sin adelantar el documento vivoL133
Por completar
  • La cobertura localizada no prueba el recorrido funcional completo.

Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
CoachEspecialistaAdmin
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente

No hay caso localizado que pruebe programación futura, diferenciación de ajuste o aviso al atleta.

Cobertura: Sin caso vinculado

Priorizar atletas por preparación y competenciaListado de pacientes, chat y filtros operativosSigue pendiente filtrar y ordenar atletas por preparación y cercanía a competencia.FuncionalFiltro incompletoPendiente documentadoAAR-18

Qué permite hacerFiltrar y ordenar pacientes y conversaciones por preparación activa, semanas restantes y prioridad de atención.

Alcance
Solicitado
Registro de origen
2026-09-15
Validación pendiente · 2026-09-15

El índice mantiene pendiente el filtro solicitado. Un filtro AAR existente no acredita semanas restantes ni priorización completa.

El índice del 15-sep registra pendiente filtrar por cercanía a competencia. La lectura local encontró filtro AAR, sin confirmar el flujo de preparación y semanas restantes.

Ubicación y referencia técnica

Listado de pacientes, chat y filtros operativos

Priorizar atletas por preparación y competencia

  • Reporte-Sesion-AAR-Feedback-2026-08-19.mdTema 6
  • filter-popover.tsxlínea 26, filtro Alto rendimiento
  • 06-aar-gap-sesion-19ago.mdBloque 3, gate de datos para preparación activa y weeks out
  • 00-gr-platform-phase-close-index.md06-aar-gap-sesion-19ago.md / en ejecución
Cómo probar
Pruebas localizadas
0 pruebas vinculadas0 archivos1 casos QA

Conteo de declaraciones vinculadas por título; una prueba puede compartirse entre flujos. Los resultados de ejecución se consultan por separado.

No se identificó una prueba automatizada vinculada. Revisar el contrato y el catálogo antes de crearla.

Por completar
  • No hay prueba del filtro común ni de la ordenación de prioridad.

Incidencias relacionadas por caso: 2 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.

Roles
AdminNutriólogoCoachEspecialista
Vistas y controles
  • VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
Casos
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
adminnutriologocoachespecialista
Pasos
  1. Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
  2. Comparar las fuentes y operaciones de Medidas, Planes, Check-ins y Evidencia contra la vista clásica, confirmando que AAR no apila los módulos clásicos completos.
  3. En Planes alternar Ajustes rápidos, Activos e Historial; validar dos columnas, estados parciales y paginación independiente de cinco elementos. El panel de suplementación queda debajo de dieta y rutina, no dentro del catálogo.
  4. Alternar el periodo compartido 7/30/90, activar dos chips compatibles simultáneamente, confirmar ambas series y verificar que una unidad incompatible reinicia la selección; reordenar las tres gráficas con el asa de seis puntos, teclado y controles móviles, recargar y restablecer el orden.
  5. Abrir el selector Métricas de Medidas junto a ambos bordes del viewport y confirmar reposicionamiento, ancho máximo, scroll interno y acceso táctil sin desbordamiento.
  6. Comparar Competencias contra el sitio GR: la marca de agua debe quedar detrás del contenido, recortada abajo a la derecha y aproximadamente al 4.5% de opacidad.
  7. Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
  8. Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
  9. Validar competencia próxima en days out (aunque falte un año), interruptor de preparación activa independiente del calendario, historial, estado sin competencias y mesociclo persistido o vacío.
  10. Expandir y contraer el sidebar y confirmar que las acciones migran al menú en orden Chat, Perfil AAR, Acceso y Agenda, manteniendo visibles las secciones y dejando Perfil AAR debajo de Editar paciente.
  11. En Planes > Ajustes rápidos, usar un viewport de escritorio con cada panel semanal por debajo de 560 px y confirmar cuatro columnas, sin texto de calorías, rutina, ejercicios o series sobre la píldora vecina.
  12. Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
Esperado
  • AAR reutiliza datos, formularios y operaciones canónicas mediante composiciones propias: Planes evita el scroll infinito, Medidas queda limitada a antropometría, Seguimiento precede a Alertas y concentra rendimiento/evidencia, y Dashboard comparte periodo, diferencia series por color y combina únicamente métricas compatibles. El selector de métricas se mantiene dentro del viewport y la marca GR funciona como textura ambiental sin tapar información.

Fuente: test-cases.json · testCases[id=patients-aar-competitive-cockpit]

Cobertura: Referencias parciales

Área 06

Plataforma

1función

Continuar trabajando · Actualizar · Recuperar el borrador

Actualización de la plataforma y recuperación del trabajoAviso superior y menú compartido · Staff y pacientesFuncionalPor comprobarPor probarPWA-01

Qué permite hacerElegir cuándo actualizar desde un aviso discreto, consultar las novedades o posponerlas. Al crear una dieta o una rutina, guardar el borrador y retomar el mismo paso después de actualizar, sin publicar ni asignar el plan.

Al volver a la aplicación se recuerda la actualización pendiente. Si hay cambios sin guardar, un entrenamiento activo, falta de conexión u otra pestaña con trabajo pendiente, la actualización espera. Leer las novedades no significa haber actualizado.

Seguimiento
APP-009 · Caso QA pwa-safe-update · Requiere revisión humana.
Alcance
Recargas iniciadas desde la plataforma, incluido el gesto de arrastrar para actualizar. No controla un cierre forzado del sistema operativo.
Cómo probar esta función

Posponer y volver a la app; consultar y cerrar las novedades; escribir un último cambio en dieta o rutina y actualizar inmediatamente. Comprobar la recuperación del paso, día y bloque, el reintento ante fallos y la protección con dos pestañas. Revisar móvil, iPad y escritorio. La comprobación automática no sustituye la aceptación humana.

Cómo leer este reporte

La marca verde señala funciones con una verificación registrada. El candado rojo marca pendientes documentados. El ícono de prueba indica funciones por probar.

Alcance de la revisión

El inventario reúne 146 funciones funcionales y técnicas. La lectura inicial muestra sólo funciones de uso. El corte reúne 11 con verificación registrada y 12 pendientes documentados entre ambas vistas. Sin marca no significa que una función falle.

Este listado no amplía el alcance acordado ni equivale a aceptación del cliente.