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.
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.
| Tipo | Archivos | Definiciones |
|---|---|---|
| Unitarias / componentes | 358 | 2132 |
| Integración | 34 | 406 |
| E2E | 44 | 122 |
| Preparación de pruebas | 1 | 1 |
| Arnés de recorridos | 1 | 1 |
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ónRecorridos declarados: 7 recorridos dorados · 8 tours. Son contratos de navegación; no resultados de ejecución.
Vinculadas a los flujos
Conteos deduplicados. No sumar áreas ni flujos. 0 referencias por precisar quedan fuera del conteo de pruebas vinculadas.
Recorrido de validación
- Acceso y roles → Comercial → Paciente → Nutrición → Fitness → AAR → cruces entre áreas.
- Elegir un comportamiento, caso QA, rol, vista y resultado esperado.
- Leer la prueba existente y comprobar que puede detectar el defecto.
- En una frontera acordada: prueba roja → corrección mínima → prueba verde, un caso a la vez.
- Registrar corrida y versión; dar check sólo al comportamiento comprobado. Revisar e integrar después.
- 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.
Áreas del reporte
Sin coincidencias
Prueba otro estado, área o término.
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.
Área 01
Comercial
Captar · Dar seguimiento · Convertir · Renovar
Contexto de prueba8 roles · 5 vistas
- Captación/c/[tenantSlug] · requiere tenant
- Contactos y pacientes/pacientes
- Configurar captación/configuracion?tab=captacion
- Pagos y planes/pagos
- Operación diaria/dashboard
Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.
Captar y registrar
003
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
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
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 existente
L6
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 registrada
L6
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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 planes
L8 - conserva la vista de video y PDF si no hay parámetro
L12 - cae al formulario cuando no hay video seguro
L17
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 activo
L10 - la ayuda general incluye los datos del formulario y el plan de interés
L109
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
Conservar un único contactoCaptación y contactosTécnicaPor comprobarPor probarCOM-03
Qué permite hacerReutilizar la identidad por correo y conservar los datos existentes al recibir otra solicitud.
- Alcance
- Por conciliar
- Registro de origen
- Por comprobar
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 y CRM
Evitar contactos duplicados
Evitar duplicados es un control interno de los registros.
- dominio-comercial.md§1 y §4 INV-1
Cómo probar
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/paciente/paciente.business.test.tsUnitarias / componentes · Comportamiento directo · 2 vinculadas / 6 definiciones en el archivo
La validación identifica el correo duplicado y permite excluir la ficha que se edita.
- detecta duplicado exacto y retorna los datos del paciente
L15 - excludeId permite editar al propio paciente sin marcar duplicado
L31
tests/unit/lib/captacion/server.test.tsUnitarias / componentes · Comportamiento directo · 1 vinculadas / 2 definiciones en el archivo
La consolidación no pisa datos ya existentes al recibir otra solicitud.
- completa únicamente campos vacíos del paciente existente
L6
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
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
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
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 tipo
L11 - acepta únicamente la firma binaria PDF
L20 - solo considera administrables rutas del tenant autenticado
L25
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 rango
L17
Incidencias relacionadas por caso: 0 en soporte · 8 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/configuracion?tab=captacion/c/[tenantSlug] · requiere tenant
API /api/captacion/[tenantSlug]API /api/captacion/[tenantSlug]/checkoutAPI /api/public/supplements/*gr-site-platform:/planes/checkoutgr-site-platform:/catalogo/checkout
public-golden-journey-capture-payments-supplements · Sitio consolida paciente, cobra planes y descuenta suplementos una sola vez
- 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.
- 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.
- 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.
- 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
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
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
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 HIXION
L21
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 propio
L30
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/dashboard/pacientes/chat
API /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos - VentanaFiltrar pacientes/pacientes
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
- 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.
- 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.
- 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.
- 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]
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
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
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 propio
L30
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 resto
L45
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/dashboard/pacientes/chat
API /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
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
- 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.
- 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.
- 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.
- 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
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
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 revisionada
L8 - impide retrocesos salvo corrección explícita
L18 - exige correlación de cita para cita agendada
L24
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 interactivos
L74 - separa acceso de permisos financieros
L99
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/dashboard/pacientes/chat
API /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
- 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.
- 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.
- 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.
- 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]
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
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
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 vencidos
L5 - incluye acceso pendiente sólo con pago y contrato activos
L16
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/dashboard/pacientes/chat
API /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
- 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.
- 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.
- 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.
- 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]
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
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
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 propio
L30
Incidencias relacionadas por caso: 0 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/pacientes
- BotónArchivar/pacientes
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
- Abrir /pacientes.
- Crear paciente con prefijo QA-E2E.
- Buscarlo por nombre o correo.
- 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
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
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
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
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
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 determinista
L21 - rechaza activar acceso sin pago y contrato válidos
L42
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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 revisionada
L8 - impide confirmar pago sin cobro válido y contrato activo
L14 - sigue exigiendo pago y contrato al enviar acceso
L49
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 navegador
L92 - no retrocede a quien ya tiene cita agendada
L119
Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/dashboard/pacientes/chat
API /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/pacientes
API /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
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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
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
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 vencidos
L5 - incluye acceso pendiente sólo con pago y contrato activos
L16
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/dashboard/pacientes/chat
API /api/comercial/pipelineAPI /api/comercial/overviewAPI /api/comercial/pacientes/[pacienteId]/transicionAPI /api/comercial/pacientes/[pacienteId]/eventos
staff-commercial-canonical-state-audit-queues · CRM separa estados, prioriza la siguiente acción y audita cada movimiento
- 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.
- 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.
- 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.
- 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
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
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.
- VistaIndicadores/dashboard/metricas
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
Incorporar · Atender · Comunicar · Administrar
Contexto de prueba8 roles · 11 vistas
- Pacientes/pacientes
- Ficha del paciente/pacientes/[id] · requiere paciente
- Agenda/agenda
- Chat/chat
- Pagos/pagos
- Operación diaria/dashboard
- Indicadores/dashboard/metricas
- Configuración/configuracion
- Portal del paciente/portal/dashboard
- Perfil del paciente/portal/perfil
- Soporte del paciente/portal/soporte
Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.
Incorporar y dar acceso
005
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
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
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 propio
L30
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 errores
L35 - 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.
- VistaPacientes CRM y operación comercial/pacientes
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
- Abrir /pacientes.
- Crear paciente con prefijo QA-E2E.
- Buscarlo por nombre o correo.
- 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]
e2e/staging/staff-core-flows.spec.ts· Alta CRM QA con archivado de limpieza
Cobertura: Referencias vinculadas
Importar pacientes existentesProceso técnico · sin pantalla confirmadaTécnicaReportadoPor probarGES-02
Qué permite hacerCargar pacientes desde una hoja de cálculo con revisión de duplicados.
- Alcance
- Compromiso documentado
- Registro de origen
- Reportado
No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.
El registro informa script entregado; no equivale a importación operativa ni a una pantalla.
Ubicación y referencia técnica
Importador técnico; sin vista confirmada
Importar pacientes existentes
La importación localizada se realiza mediante un script, sin una pantalla de uso acreditada.
- REGISTRO-UNICO.mdB4, revisión del 2-sep
Cómo probar
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
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
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
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ón
L124 - HIXION no consume el token si pago o contrato no permiten activar acceso
L182
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ón
L73
Incidencias relacionadas por caso: 0 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- 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/pacientes
API /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
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
- Abrir /pacientes.
- Crear paciente con prefijo QA-E2E.
- Buscarlo por nombre o correo.
- 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
- 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.
- 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.
- 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.
- 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
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
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 intake
L100 - una segunda captura válida actualiza la medición inicial sin duplicarla
L248
Incidencias relacionadas por caso: 0 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/pacientes
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
- Abrir /pacientes.
- Crear paciente con prefijo QA-E2E.
- Buscarlo por nombre o correo.
- 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
Conservar el estado al reabrir el registroRegistro inicial del pacienteAl abrir de nuevo el registro, se reinician estados ya guardados del paciente y de su servicio.TécnicaComportamiento incorrectoPendiente documentadoGES-05
Qué permite hacerConservar identidad, contratación e historia cuando se edita o reabre el registro.
- Alcance
- Documentado en producto
- Registro de origen
- 2026-09-02
El intake conservó historia, fotos, planes y mediciones previas en escenarios de integración; queda sin probar la edición completa de perfil entre vistas.
El análisis del 2-sep reportó reinicio de estados al reabrir; requiere revalidación actual.
Ubicación y referencia técnica
Onboarding y /portal/registro
Actualizar el perfil sin perder su estado
Conservar estados al reabrir es una condición de persistencia del registro.
- 08-historial-clinico-consistencia.mdReabrir asistente / 2-sep
- README.mdFR-18; Cambios verificados; Caso crítico 1
Cómo probar
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
Una captura posterior conserva información del paciente al actualizar la medición inicial.
- preserva historia clínica, fotos, planes y mediciones al completar intake
L100 - una segunda captura válida actualiza la medición inicial sin duplicarla
L248
Incidencias relacionadas por caso: 0 en soporte · 5 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/pacientes
patients-crm-create-open-edit · CRM permite crear, encontrar y abrir paciente
- Abrir /pacientes.
- Crear paciente con prefijo QA-E2E.
- Buscarlo por nombre o correo.
- 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
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
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 tenant
L37 - distingue perfil inexistente y cuenta inactiva
L57 - rechaza un expediente vinculado a otro tenant
L85
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.
- VistaLogin y permisos/login/dashboard/configuracion?tab=miembros/(staff)/* · requiere ruta concreta/(portal-pacientes)/* · requiere ruta concreta
API /api/*
auth-role-routing · Roles principales mantienen permisos esperados
- Iniciar sesión con cada rol configurado en staging.
- Validar redirect inicial y navegación principal.
- Abrir rutas permitidas y rutas restringidas por rol.
- 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]
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
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
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 @regression
L105
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/perfil/portal/rutina/portal/agenda
patient-vacation-routine-rest · Vacaciones con descanso reversible de rutinas
- 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.
- 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.
- 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.
- 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
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
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
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 paciente
L64 - permite al paciente leer instrucciones y le niega publicarlas
L73
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
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
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
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
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 duplicarla
L248
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/registro
- VentanaNueva Medición/pacientes/[id] · requiere paciente
patient-progress-analytics-shared · Progreso muestra analítica longitudinal compartida
- Entrar como paciente y abrir /portal/registro.
- Registrar una medición desde paciente y otra desde staff con fechas fuera de orden; confirmar que ninguna sobrescribe la otra.
- Validar KPIs de peso, grasa, músculo, adherencia dieta y adherencia rutina.
- 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
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
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 album
L22 - compares a stable custom pose across dates
L40
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/progreso
- PanelMétricas/pacientes/[id] · requiere paciente
patient-progress-analytics-shared · Progreso muestra analítica longitudinal compartida
- Entrar como paciente y abrir /portal/registro.
- Registrar una medición desde paciente y otra desde staff con fechas fuera de orden; confirmar que ninguna sobrescribe la otra.
- Validar KPIs de peso, grasa, músculo, adherencia dieta y adherencia rutina.
- 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
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
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 seguro
L37 - foto grande de cámara se optimiza antes de aplicar el límite final
L121 - HEIC no convertible explica formato y dispositivo en vez de culpar la conexión
L166
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 expediente
L31 - confirma una carga temporal directa sin enviar el archivo por la funcion
L121
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- 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
staff-consulta-photo-qr-save · Guardar fotos desde QR de consulta
- Abrir una consulta y generar un QR de captura de fotos.
- Escanear el QR desde móvil y validar token, paciente, consulta, expiración y límite.
- 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.
- 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]
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
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
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 ejecutable
L157
Incidencias relacionadas por caso: 1 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial
storage.rulespatients/{pacienteId}pacientes/{pacienteId}chat/{conversacionId} - VentanaSubir Archivo/pacientes/[id] · requiere paciente
- VentanaVista previa/pacientes/[id] · requiere paciente
storage-tenant-patient-chat-isolation · Storage y chat aíslan paciente y tenant
- Preparar dos pacientes QA y actores de tenants distintos con archivos y conversaciones identificables.
- Confirmar que cada paciente y su equipo autorizado pueden leer sus propios archivos y participar en su conversación.
- Intentar leer, listar, subir o borrar archivos de otro paciente o tenant y abrir su conversación sin ser participante.
- 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
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
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 inmutable
L102
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- 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
staff-consulta-move-notes-to-record · Las notas se mueven entre consulta y expediente sin perder información
- Abrir una consulta que tenga una nota de sesión con categoría, título, contenido, autor y fecha.
- 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.
- Elegir Vincular a esta consulta en esa nota y confirmar que vuelve a la consulta abierta y desaparece de las notas generales.
- 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
Mantener los mismos datos en registro, ficha y portalRegistro ↔ Portal ↔ ExpedienteEl registro, la ficha y el portal muestran datos diferentes del mismo paciente.TécnicaDatos inconsistentesPendiente documentadoGES-14
Qué permite hacerMantener unidades, fechas, valores vacíos y significados coherentes entre registro, portal y ficha.
- Alcance
- Documentado en producto
- Registro de origen
- 2026-09-02
No se localizó una prueba funcional positiva y suficiente entre las evidencias revisadas para esta función.
El análisis registra discrepancias de unidades, salud femenina, deportes y estatura; no se probaron de nuevo.
Ubicación y referencia técnica
Registro ↔ Portal ↔ Expediente
Conservar el mismo dato entre las vistas
La consistencia entre vistas es una condición de integridad de datos.
- 08-historial-clinico-consistencia.mdDatos perdidos y significados distintos / 2-sep
Cómo probar
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 · Cobertura parcial · 1 vinculadas / 8 definiciones en el archivo
Conserva datos clínicos, fotos, planes y mediciones cuando termina intake.
- preserva historia clínica, fotos, planes y mediciones al completar intake
L100
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
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
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
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 paciente
L64 - permite al paciente leer instrucciones y le niega publicarlas
L73
Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaLogin y permisos/login/dashboard/configuracion?tab=miembros/(staff)/* · requiere ruta concreta/(portal-pacientes)/* · requiere ruta concreta
API /api/*
auth-role-routing · Roles principales mantienen permisos esperados
- Iniciar sesión con cada rol configurado en staging.
- Validar redirect inicial y navegación principal.
- Abrir rutas permitidas y rutas restringidas por rol.
- 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
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
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
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 inicio
L43 - fusiona bloques solapados para no duplicar slots
L53 - ordena los bloques recibidos fuera de orden
L60 - cae al default cuando la zona horaria no es válida
L70 - rechaza la hora de la comida, que cae entre dos bloques
L102 - genera slots de 15 minutos que caben completos en el bloque
L131
Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
- 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.
- Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
- 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.
- 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]
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
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
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 asociada
L209 - programa, reagenda y cancela recordatorios desde el comando autoritativo
L275 - rechaza con 409 un horario ya ocupado (SLOT_CONFLICT)
L481 - resuelve dos reservas concurrentes con una sola cita y un 409
L524 - reagenda conservando el ID, auditoría y consulta; libera el horario anterior
L646 - rechaza cambiar de paciente al reagendar aunque la cita no tenga consulta
L672 - serializa dos reagendados concurrentes de la misma cita sin dejar locks huérfanos
L703 - preserva una transición concurrente y rechaza el reagendado sin reabrir la cita
L751 - serializa cancelación contra reagenda y usa el vínculo fresco de consulta y Google
L792 - rechaza reagendar una cita en progreso o terminal sin cambiar fecha ni consulta
L899 - crea la cita aunque el especialista no tenga Google Calendar conectado
L1001 - reserva una sola sesión ante dos agendamientos concurrentes
L1396 - reagenda la misma reserva y al completar la convierte exactamente una vez
L1416
Incidencias relacionadas por caso: 0 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
- 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.
- Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
- 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.
- 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
- 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.
- Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
- Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
- 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]
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
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
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 tipo
L13
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 permitido
L83 - descarta bloques cuyo fin no supera el inicio
L43 - fusiona bloques solapados para no duplicar slots
L53 - ordena los bloques recibidos fuera de orden
L60 - rechaza la hora de la comida, que cae entre dos bloques
L102
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
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
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 permitidas
L23 - rechaza saltos y cambios desde estados terminales
L31
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 anterior
L646 - cancelar libera locks y permite reservar nuevamente el mismo horario
L924
Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
- 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.
- Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
- 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.
- 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]
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
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
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 vez
L942 - mantiene no_show pendiente hasta que el equipo decide liberar la sesión
L1448
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda/dashboard/pacientes
API /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines
staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
- 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.
- Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
- Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
- 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
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
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 desconocidos
L1293 - conserva lo que el paciente ya entregó al reeditar la preparación
L1318
Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
- 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.
- Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
- 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.
- 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
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
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álido
L22 - rechaza digestión y mood fuera del enum
L56 - digestión y mood vacíos son requeridos
L67
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
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
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 autoritativo
L275 - deriva el recordatorio manual de cita y evita duplicarlo con la misma llave
L373
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /api/citasAPI /api/recordatorio-citaAPI /api/cron/dispatch/portal/citas/[citaId] · requiere cita
staff-appointment-reminders-authoritative · Recordatorios usan la cita autoritativa
- Crear una cita QA con recordatorio pendiente y registrar su fecha inicial y destinatario.
- Reprogramarla antes del despacho y confirmar que portal y Agenda muestran únicamente la fecha nueva.
- Ejecutar el recordatorio manual y el despachador programado; comprobar que ambos consultan la cita autoritativa.
- Cada recordatorio usa la fecha vigente y se envía una sola vez.
Fuente: test-cases.json · testCases[id=staff-appointment-reminders-authoritative]
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
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
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 Google
L569 - vincula el evento espejo de Google por el comando autoritativo sin duplicarlo
L592
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 Google
L66 - ignorar no toca el evento en Google
L99
Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /api/citasAPI /api/citas/[citaId]/statusAPI /api/citas/[citaId]/preparacion/portal/citas/[citaId] · requiere cita/configuracion?tab=integracionesAPI /api/integrations/google/team-status
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
- 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.
- Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
- 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.
- 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]
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
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
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 asociada
L209 - crea una consulta faltante de forma transaccional e idempotente
L857
Incidencias relacionadas por caso: 0 en soporte · 3 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda
API /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
staff-appointment-authoritative-lifecycle · Citas conservan un ciclo de vida autoritativo
- 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.
- Crear una cita con Crear consulta encendido y otra con el control apagado; confirmar que la primera tenga consulta vinculada y la segunda no.
- 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.
- 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]
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
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
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
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ónica
L98 - permite actualizar sólo estado operativo de la conversación canónica
L134 - paciente crea mensajes sólo con su identidad y rol reales
L139 - staff crea mensajes sólo con su propio uid
L147
Incidencias relacionadas por caso: 2 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/chat/pacientes/[id] · requiere paciente
staff-chat-profile-and-pipeline · Chat abre el perfil y permite operar el pipeline del paciente
- Abrir /chat y seleccionar una conversación.
- Hacer clic en avatar, nombre o resumen de la cabecera y confirmar que abre el perfil del paciente correcto.
- Volver al chat, abrir la insignia de estado y comprobar que muestra las etapas visibles agrupadas según el pipeline configurado.
- 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]
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
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
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 conversaciones
L112 - rechaza usuarios anónimos en archivos clínicos y chat
L151
Incidencias relacionadas por caso: 0 en soporte · 6 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/chat
patient-chat-fullscreen-actions · Chat paciente abre vista completa con acciones de salud
- Entrar como paciente desde móvil.
- Abrir Chat desde el dock o desde /portal/chat.
- Validar que se muestra una vista completa sin header global ni dock inferior.
- 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
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
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álido
L22 - rechaza digestión y mood fuera del enum
L56 - digestión y mood vacíos son requeridos
L67
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 proyeccion
L36
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCuestionario del portal/portal/progreso/cuestionario
- VentanaCheck-in diario/pacientes/[id] · requiere paciente
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
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
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 libre
L34 - descarta entradas inválidas sin contaminar indicadores
L77
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPacientes CRM y operación comercial/pacientes/[id] · requiere paciente
staff-patient-adherence-calorie-averages · Adherencia compara promedios históricos de kcal sin contar días vacíos
- Abrir la sección de rendimiento y adherencia de un paciente con versiones históricas y check-ins en fechas conocidas.
- Cambiar entre 7, 30 y 60 días y validar los promedios de kcal asignadas, consumidas y su diferencia.
- Confirmar que un día sin comidas registradas no entra en ninguno de los dos promedios.
- 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
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
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 paciente
L187 - rechaza notificar un hilo legacy o paralelo antes de reconciliarlo
L161
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
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
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.
- VistaDashboard - Operación diaria/dashboard/chat
staff-dashboard-daily-operations · Operación diaria concentra agenda, respuestas y seguimiento accionable
- Abrir Operación diaria como admin y validar todo, un especialista, varios especialistas y Sin asignar; repetir con rol especialista y confirmar scope forzado.
- Comparar mensajes sin leer contra conversaciones sin responder y enviar una respuesta del staff para limpiar sólo el segundo estado.
- Enviar una solicitud de cita desde el portal, abrir Agendar desde Seguimiento y confirmar que cancelar no la resuelve y guardar sí la resuelve.
- 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
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
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
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
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
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 variante
L105 - el diálogo de nuevo paquete cabe en móvil y su footer es alcanzable
L115 - CRUD: archivar una variante y volver a crearla deja el catálogo como estaba
L138
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, enlazados
L94 - archiva sin borrar y lo retira del sitio
L181 - escribe la visibilidad en todas las variantes del paquete
L236
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/pagos
API /api/stripe/subscriptionsAPI /api/webhooks/stripe
staff-payments-stripe-contract-lifecycle · Contratación Stripe test activa precio, vigencia y consultas correctas
- Abrir /pagos?tab=cobros y confirmar que sólo muestra cobros o parcialidades pendientes, sin el formulario Cobro rápido desde catálogo.
- 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.
- Cambiar entre Panel, Cobros, Planes e Historial y confirmar que la URL conserva la pestaña elegida.
- 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
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
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 plan
L174 - ya no permite activar el contrato sin registrar dinero
L366
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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 legacy
L15 - resta reservadas y consumidas sin permitir saldo negativo
L31 - las citas nuevas solo eligen un contrato activa
L83
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda/dashboard/pacientes
API /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines
staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
- 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.
- Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
- Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
- 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
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
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 concurrentes
L20
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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 activar
L142 - vincula el comprobante a la transaccion y lo marca consumido
L381
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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 reciente
L11 - normaliza teléfonos mexicanos y construye el mensaje con la liga
L52 - construye la liga CRM con precarga opaca y variante exacta
L71
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/dashboard/pacientes
API /api/pacientes/[pacienteId]/payment-linkAPI /api/webhooks/stripe
staff-patient-whatsapp-payment-link · Dashboard y Kanban comparten por WhatsApp la siguiente parcialidad y confirman el pago automáticamente
- 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.
- Enviar desde Plan y pago; confirmar que el lead se guarda sin undefined y WhatsApp abre con la variante elegida.
- 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.
- 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
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
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étodo
L48 - los reembolsos restan del total de su método
L70
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/pagos
API /api/stripe/subscriptionsAPI /api/webhooks/stripe
staff-payments-stripe-contract-lifecycle · Contratación Stripe test activa precio, vigencia y consultas correctas
- Abrir /pagos?tab=cobros y confirmar que sólo muestra cobros o parcialidades pendientes, sin el formulario Cobro rápido desde catálogo.
- 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.
- Cambiar entre Panel, Cobros, Planes e Historial y confirmar que la URL conserva la pestaña elegida.
- 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
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
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 catalogo
L120 - deriva exactamente el monto de la parcialidad pendiente
L166 - rechaza una parcialidad pagada o de otro workspace
L187
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 persistido
L6 - distingue fallos, expiración e incidentes
L16
Incidencias relacionadas por caso: 0 en soporte · 4 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/pagos
API /api/stripe/subscriptionsAPI /api/webhooks/stripe
staff-payments-stripe-contract-lifecycle · Contratación Stripe test activa precio, vigencia y consultas correctas
- Abrir /pagos?tab=cobros y confirmar que sólo muestra cobros o parcialidades pendientes, sin el formulario Cobro rápido desde catálogo.
- 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.
- Cambiar entre Panel, Cobros, Planes e Historial y confirmar que la URL conserva la pestaña elegida.
- 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
- 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.
- 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.
- 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.
- 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
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
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 revalidada
L116
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaAgenda y citas/agenda/dashboard/pacientes
API /api/citasAPI /api/citas/[citaId]API /api/citas/[citaId]/statusAPI /api/citas/[citaId]/no-showAPI /api/cron/appointments/payment-deadlines
staff-appointment-entitlements-payment-gate · Agenda reserva sesiones y cancela citas impagas después de 15 minutos
- 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.
- Intentar una cuarta cita desde dos solicitudes concurrentes; exactamente una reserva por cita debe persistir y nunca existir saldo negativo.
- Reagendar una cita; confirmar el mismo citaId/contrato, una sola reserva, nuevo horario y evento de reagenda sin estado durable reagendada.
- 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
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
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 citas
L78 - no vuelve a acreditar un contrato que ya tiene saldoAcreditadoMonto
L122
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
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
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 revision
L187
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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 idempotencia
L80 - exige gestionar_acceso y un motivo explícito
L106 - suspende manualmente y no depende de un cambio de pago
L122
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPagos, planes y suscripciones/c/[tenantSlug] · requiere tenant/c/[tenantSlug]/resultado · requiere tenant/onboarding/[token] · requiere token/acceso-suspendido/portal/* · requiere ruta concreta/pagos/pacientes
API /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
public-commercial-prefill-payment-access-lifecycle · Formulario, catálogo, pago y acceso conservan autoridad e idempotencia
- 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.
- 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.
- 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.
- 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
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
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
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ón
L88 - asigna un rol propio del workspace
L109 - no cruza tenants
L205
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 rutina
L136
Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaLogin y permisos/login/dashboard/configuracion?tab=miembros/(staff)/* · requiere ruta concreta/(portal-pacientes)/* · requiere ruta concreta
API /api/*
auth-role-routing · Roles principales mantienen permisos esperados
- Iniciar sesión con cada rol configurado en staging.
- Validar redirect inicial y navegación principal.
- Abrir rutas permitidas y rutas restringidas por rol.
- 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
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
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 ruta
L84
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 propio
L98 - rechaza un identificador reservado
L156
Incidencias relacionadas por caso: 1 en soporte · 7 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaLogin y permisos/login/dashboard/configuracion?tab=miembros/(staff)/* · requiere ruta concreta/(portal-pacientes)/* · requiere ruta concreta
API /api/*
auth-role-routing · Roles principales mantienen permisos esperados
- Iniciar sesión con cada rol configurado en staging.
- Validar redirect inicial y navegación principal.
- Abrir rutas permitidas y rutas restringidas por rol.
- 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]
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
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
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érminos
L29
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 filtros
L10
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaOperación diaria/dashboard
- BotónBuscar / Cmd o Ctrl + K/dashboard
- VentanaBúsqueda global (Spotlight)/dashboard
staff-spotlight-catalog-search · Búsqueda global encuentra pacientes, recetas y ejercicios permitidos
- Abrir Buscar desde el panel o con Cmd/Ctrl+K en el workspace HIXION y usar datos QA.
- Buscar por nombre o correo un paciente sintético activo y abrir su ficha.
- Seleccionar Recetas y Ejercicios, buscar un elemento permitido y abrir su detalle.
- Repetir con un rol que no tenga acceso a una de esas entidades; comprobar que respeta su permiso.
- 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
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
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.
- VistaPortal paciente/portal/soporte/soporte
API /api/soporte
patient-staff-support-intake-history · Soporte móvil separa registro del paciente y seguimiento del equipo
- Abrir el selector dinámico del paciente y confirmar el orden Suplementos, Progreso, Pagos, Historial, Perfil, Configuración, Chat y Soporte técnico.
- 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.
- 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.
- 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
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
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
Evaluar · Preparar · Entregar · Ajustar · Dar seguimiento
Contexto de prueba4 roles · 9 vistas
- Ingredientes/ingredientes
- Recetario/recetas
- Dietas y plantillas/dietas
- Crear dieta/pacientes/[id]/crear-plan · requiere paciente
- Dieta del paciente/pacientes/[id]/plan · requiere paciente
- Suplementos/suplementos
- Dieta en el portal/portal/plan
- Agenda del paciente/portal/agenda
- Suplementos en el portal/portal/suplementos
Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.
Evaluar necesidades nutricionales
201
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
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
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 defecto
L45 - GET de TMB %s con factor %s = %s kcal
L78parametrizada, 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 compactos
L321 - 02 — Forma de calculo modifica el resultado numerico documentado
L338
Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- 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
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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 grupo
L64 - suma distribución completa y recetas por separado
L71 - reporta recetas faltantes sin inventar kcal
L86
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 success
L125 - degrada a warning cuando las kcal cuadran pero falta un grupo del tiempo
L178
Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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 negativas
L58 - restricción vegana deja AOA y lácteos en 0
L176 - el rechazo total por preferencias reduce el grupo pero no lo bloquea clínicamente
L201 - las preferencias positivas se reportan en la explicación sin romper el presupuesto calórico
L222
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 guardado
L525
Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
- VentanaDetalle de la sugerencia/pacientes/[id]/crear-plan · requiere paciente
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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
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álida
L18 - exige al menos un ingrediente
L28 - la preparación es texto libre: acepta paréntesis, comillas y signos
L61 - acepta preparación como arreglo de pasos (formato nuevo)
L81 - rechaza más de 50 pasos de preparación
L88
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 tenantId
L102
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaRecetas/recetas
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
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
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álido
L48 - rechaza grupo y unidad fuera de catálogo
L99 - valida rangos de micronutrientes opcionales cuando vienen
L115
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.
- VistaIngredientes/ingredientes
Cobertura: Referencias parciales
Conservar planes asignados al editar recetas o ingredientesIngredientes, recetas y planes asignadosTécnicaPor comprobarPor probarNUT-02
Qué permite hacerControlar el efecto de editar o retirar ingredientes y recetas que ya están en planes asignados.
- Alcance
- Documentado en producto
- Registro de origen
- Por comprobar
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 planes asignados
Conservar planes al cambiar el catálogo
La conservación de planes depende de separar datos históricos de cambios al catálogo.
- M12-catalogos-nutricion.jsonF-M12-04, F-M12-09, F-M12-10
Cómo probar
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 · Cobertura parcial · 2 vinculadas / 9 definiciones en el archivo
Conserva snapshots/check-ins al publicar revisión, no mutación de ingrediente/receta de catálogo.
- publica una versión completa y conserva hoy el snapshot del tiempo registrado
L193 - si todos los tiempos afectados están registrados guarda una sola versión sin reescribir el check-in
L221
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaIngredientes y recetas/ingredientes/recetas
- VistaPlan asignado/pacientes/[id]/plan · requiere paciente
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
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
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 tenant
L39parametrizada, 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.
- VistaCrear dieta/dietas/plantillas/[templateId]/editar · requiere dato de contexto
nutrition-diet-library-visual-programs · Biblioteca de Dietas muestra programas visuales y accionables
- Abrir Dietas y mantener activa la pestaña Programas.
- Revisar una plantilla global, una propia y una legacy sin imagen.
- Confirmar preview de hasta tres menús o recetas y fallback neutro cuando falte media.
- 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
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
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.
- VistaPortal paciente/portal/plan
patient-created-recipes-mobile · Paciente crea recetas privadas desde Dieta
- Entrar como paciente con plan activo y abrir Dieta.
- Abrir Cambiar platillo y confirmar que Captura libre ya no aparece como acceso independiente sobre la lista de comidas.
- Abrir Captura libre desde Cambiar platillo y registrar foto, descripción y kcal para ese tiempo de comida.
- 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
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
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 plantilla
L44
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/dietas/plantillas/[templateId]/editar · requiere dato de contexto
nutrition-diet-library-visual-programs · Biblioteca de Dietas muestra programas visuales y accionables
- Abrir Dietas y mantener activa la pestaña Programas.
- Revisar una plantilla global, una propia y una legacy sin imagen.
- Confirmar preview de hasta tres menús o recetas y fallback neutro cuando falte media.
- 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
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
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
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 origen
L12
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 visual
L381 - 10 — Personalizar tiempos por menu no crea columnas duplicadas
L678 - 11 — Distribucion permite edicion manual controlada
L736
Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- 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
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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 inexistente
L91
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 guardadas
L550
Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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 último
L157 - recalcula nutrición cuando todos los ingredientes traen nutrición embebida
L183
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 recargar
L38
Incidencias relacionadas por caso: 2 en soporte · 25 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- 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
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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
- Entrar como paciente con plan activo desde Inicio y tocar Ver comida para llegar a Dieta con la comida enfocada.
- Expandir una comida del día directamente en /portal/plan.
- Validar que el detalle no muestra header global del portal ni dock inferior.
- 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
- 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.
- Entrar a Dieta y comprobar que aparece el platillo base. Abrir Cambiar platillo para ese tiempo de comida.
- 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.
- 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.
- Recargar Dieta y comprobar que la misma comida conserva el platillo elegido para hoy.
- 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.
- 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]
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
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
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 vez
L144 - publica una versión completa y conserva hoy el snapshot del tiempo registrado
L193 - un plan futuro conserva exactamente el arranque del día de negocio
L270
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ón
L87 - activa un borrador existente conservando su ID y fecha de creación
L155
Incidencias relacionadas por caso: 2 en soporte · 23 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
- VentanaPlan asignado y guardado/pacientes/[id]/crear-plan · requiere paciente
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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 publicada
L73 - portal anuncia versión futura sin adelantar plan vigente
L87
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 profile
L59
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPlan del paciente/portal/plan
- VistaRecetas del día/portal/recetas
portal-plan-online-version-propagation · Consultar plan vigente y recibir una versión publicada
- Entrar con el paciente QA que tiene un plan y receta temporales.
- Consultar las kcal y receta vigentes.
- Publicar una versión mediante el fixture QA y recargar el portal.
- Programar otra versión para mañana y comprobar el aviso de cambio.
- 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
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
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
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ícita
L61 - propaga una segunda colisión sin forzar ni reintentar silenciosamente
L125
- 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.
- VistaCrear dieta/pacientes/[id]/crear-plan · requiere paciente/pacientes/[id] · requiere paciente
nutrition-create-plan-complete · Crear dieta conserva cálculo, porciones y menús
- Entrar desde detalle de paciente.
- Completar Dietocálculo y Porciones.
- Validar que Dietocálculo no muestre selector de menús.
- 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]
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
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
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 actuales
L38 - anuncia la fecha real de un ajuste futuro y no etiqueta como programado uno vigente
L103
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 vigente
L87
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id] · requiere paciente/pacientes/[id]/crear-plan · requiere paciente/portal/agenda
API /api/pacientes/[pacienteId]/nutrition-revisions - VistaPortal paciente/portal/plan
e2e/staging/portal-plan-version-propagation.spec.ts· Propagación de versión de dieta
Cobertura: Referencias parciales
Ajustar alimentos y porciones
103
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
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
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 registrada
L58
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 vez
L144 - si todos los tiempos afectados están registrados guarda una sola versión sin reescribir el check-in
L221 - reconoce el check-in booleano legacy al aplicar el gate del servidor
L252 - un plan futuro conserva exactamente el arranque del día de negocio
L270
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 Cena
L125 - el ajuste por grupo pasa por el gate de check-ins y conserva la propuesta al cancelar
L149 - un remanente menor a 0.5 explica la granularidad y no deja continuar
L199
Incidencias relacionadas por caso: 1 en soporte · 14 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/plan/ajustar · requiere paciente
- VentanaAjustar porciones/pacientes/[id]/plan · requiere paciente
- VentanaAjustar grupos de alimentos/pacientes/[id]/plan · requiere paciente
nutrition-active-plan-quick-adjust · Editar dieta activa abre ajuste rápido
- Entrar a detalle de paciente con dieta activa.
- Abrir tab Planes y seleccionar Editar en la tarjeta de dieta.
- 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ú.
- 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]
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
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
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 sentido
L10 - agrega la relación inversa al seleccionar un aliado
L19
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/plan · requiere paciente
nutrition-plan-group-exchanges-publication · Guardar intercambios del plan confirma una sola revisión
- Abrir un plan activo de un paciente QA HIXION y editar Intercambios.
- Cambiar un grupo y guardar; revisar la dieta desde el portal y recargar.
- Comprobar una revisión nutricional y un evento por operación, con suplementos y comidas registradas intactos.
- 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
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
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 prescritas
L147
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 slot
L126 - valida las porciones del ingrediente nuevo contra el remanente del grupo
L259
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 recargar
L38
Incidencias relacionadas por caso: 0 en soporte · 2 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/plan
- VistaDieta del paciente/portal/plan
- BotónCambiar platillo/portal/plan
- PanelCambiar comida/portal/plan
- BotónCambiar platillo (confirmar)/portal/plan
patient-portal-ingredient-swap-drawer · Portal paciente cambia ingredientes con porciones permitidas
- Entrar como paciente con plan activo desde Inicio y tocar Ver comida para llegar a Dieta con la comida enfocada.
- Expandir una comida del día directamente en /portal/plan.
- Validar que el detalle no muestra header global del portal ni dock inferior.
- 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
- 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.
- Entrar a Dieta y comprobar que aparece el platillo base. Abrir Cambiar platillo para ese tiempo de comida.
- 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.
- 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.
- Recargar Dieta y comprobar que la misma comida conserva el platillo elegido para hoy.
- 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.
- 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]
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
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
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 candidata
L25 - conserva la versión y la operación de un ajuste pendiente; rechaza IDs inválidos
L52
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ínica
L36
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaCrear dieta/pacientes/[id]/plan · requiere paciente
- BotónEditar Intercambios/pacientes/[id]/plan · requiere paciente
nutrition-plan-group-exchanges-publication · Guardar intercambios del plan confirma una sola revisión
- Abrir un plan activo de un paciente QA HIXION y editar Intercambios.
- Cambiar un grupo y guardar; revisar la dieta desde el portal y recargar.
- Comprobar una revisión nutricional y un evento por operación, con suplementos y comidas registradas intactos.
- 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
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
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
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ón
L116
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 stack
L21 - no duplica un producto que ya está en la dieta
L31 - actualiza dosis del producto ya asignado sin quitar los demás
L42
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VentanaSuplementos del plan/pacientes/[id]/plan · requiere paciente
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
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
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 activo
L49 - cae a plan.suplementos si no hay versión
L59
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaSuplementos en el portal/portal/suplementos
Hay una superficie de consulta localizada; no hay caso de prueba vinculado.
Cobertura: Sin caso vinculado
Conservar la vigencia de suplementos por pacienteSuplementación del paciente · vista independiente por confirmarTécnicaPrueba técnica aprobadaRevisadaM1-F05.c
Qué permite hacerEl código y evidencia reciente describen lectura de asignaciones independientes con vigencia y fallback al suplemento dentro del plan.
- Alcance
- Adicional por conciliar
- Registro de origen
- Por definir
Lectura de versión vigente y fallback aprobados en las pruebas unitarias; publicación independiente, lectura y concurrencia aprobadas en integración con emulador. No acredita la interfaz de prescripción o consulta del paciente.
No se usa como aceptación: la propuesta de migración de suplementos se declara pendiente y no autoriza cambiar el modelo.
Ubicación y referencia técnica
Sin vista independiente de contrato acreditada; relacionado con paciente, plan y portal
Versionar suplementación
Se refiere al control interno de vigencias y versiones de prescripciones.
- r5-publication-reassessment-20260916.mdSuplementación, vigencia y reintento
- kits-suplementacion.service.tsservicio de kits
- integration-results.jsonCorrida aislada del candidato local actual; suite aprobada
- supplementation-assignment.test.tsCasos ejecutados en el corte actual
- assignment-versions.test.tsCasos ejecutados en el corte actual
- supplementation-revisions.test.tsCasos ejecutados en el corte actual
Cómo probar
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 · 3 vinculadas / 3 definiciones en el archivo
Versiona hilo de suplementación y rechaza plan no activo o conflicto.
- escribe el stack, abre un hilo supplementation y no toca nutrición
L116 - rechaza un plan que ya no está activo
L139 - devuelve 409 si otra sesión ya actualizó el plan
L146
tests/integration/api/assignment-versions.test.tsIntegración · Comportamiento directo · 1 vinculadas / 7 definiciones en el archivo
Consulta la versión vigente del hilo de suplementación.
- devuelve la versión vigente del hilo de suplementación del plan
L239
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VentanaSuplementos del plan/pacientes/[id]/plan · requiere paciente
tests/integration/api/supplementation-revisions.test.ts· Revisiones de suplementación 3/3 pruebas integración aprobadas · 23 sep 2026tests/unit/lib/utils/supplementation-assignment.test.ts· Prueba ejecutada del comportamiento técnico 4/4 pruebas unitarias aprobadas · 23 sep 2026tests/integration/api/assignment-versions.test.ts· Prueba ejecutada del comportamiento técnico 7/7 pruebas integración aprobadas · 23 sep 2026
Las suites vinculadas cubren revisiones, asignaciones y versiones; no equivalen a aceptación del flujo clínico completo.
Cobertura: Referencias vinculadas
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
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
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álogo
L17
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 tarjetas
L10 - el listado del catálogo deja marcar varios sin cerrarse
L23
Incidencias relacionadas por caso: 0 en soporte · 0 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta funció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
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
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.
- VistaSuplementos en el portal/portal/suplementos
- EnlaceComprar/portal/suplementos
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
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
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
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 alimento
L66 - conserva otras comidas al reproducir el último valor y acepta replays
L76 - rechaza escritura de otro tenant sin modificar el documento
L86
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 valor
L59 - encola sólo fallos de conectividad o servidor, no rechazos clínicos
L100
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/plan/portal/rutina
patient-diet-routine-feedback-learn · Dieta y Rutina agregan feedback, aprender y señales correctas
- Entrar a Dieta y registrar feedback rápido de una comida.
- Abrir Aprender en Dieta.
- Entrar a Rutina y validar Hoy, Progreso resumen y Aprender.
- 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
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
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 prescrita
L58
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 porciones
L56 - descarta un slot vacío sin registro
L81 - rescata un slot vacío desde un registro moderno
L85 - rescata un slot vacío desde un registro legacy
L112
Incidencias relacionadas por caso: 0 en soporte · 1 en QA. Fuentes que pueden solaparse; no acreditan fallo de esta función.
- VistaPortal paciente/portal/plan
patient-portal-agenda-modifications-feedback · Agenda muestra modificaciones, platillos añadidos y feedback con impacto nutricional
- Entrar como paciente con un día que tenga menú cambiado, ingrediente cambiado o platillo añadido.
- Abrir el detalle del día en Agenda.
- Validar kcal, proteína, carbohidratos y grasas del platillo añadido cuando existan ingredientes.
- 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]
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
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
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 cantidades
L44 - normaliza unidades equivalentes (gr/gramos → g) en la misma entrada
L58 - con ocurrencias acumula los días únicos del ingrediente
L114
- 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.
- VistaPortal paciente/portal/plan
patient-portal-grocery-list-period · Portal paciente arma lista de despensa por periodo
- Entrar como paciente con plan semanal activo.
- Abrir Lista de Despensa desde /portal/plan.
- Arrastrar el drawer entre compacto, medio y completo.
- 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]
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
Evaluar · Elegir ejercicios · Crear · Programar · Entrenar · Revisar
Contexto de prueba4 roles · 8 vistas
- Biblioteca de ejercicios/ejercicios
- Rutinas/rutinas
- Crear rutina/pacientes/[id]/crear-rutina · requiere paciente
- Seguimiento fitness/pacientes/[id]/fitness · requiere paciente
- Ajustar rutina/pacientes/[id]/rutina/ajustar · requiere paciente
- Rutina del paciente/portal/rutina
- Entrenamiento activo/portal/entrenamiento
- Progreso por ejercicio/portal/progreso/ejercicios
Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.
Evaluar al paciente
013
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
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
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.
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
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
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
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ón
L80 - mapea una medición completa al formato Heath-Carter
L103
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
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
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
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.
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
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
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
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.
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
Cobertura: Sin caso vinculado
Elegir y preparar ejercicios
005
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
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
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 permissions
L162
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-exercise-catalog-metadata · Catálogo de ejercicios muestra taxonomía fina
- Entrar al catálogo de ejercicios.
- Buscar ejercicios de pecho, espalda, pierna y core.
- Abrir filtros por grupo o músculo.
- Abrir drawer de ejercicio.
- Validar que cards/listas usen media liviana y drawer use detalle.
- Forzar un ejercicio legacy_review, uno archived oculto por defecto y uno con media faltante.
- 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]
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
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
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 seleccionadas
L32
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úsqueda
L98
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
- Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
- Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
- Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
- Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
- Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
- Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
- 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.
- Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
- 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
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
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 confirmar
L13 - consulta sin media, cierra con Escape y devuelve el foco sin mutar la prescripción
L28
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-exercise-catalog-metadata · Catálogo de ejercicios muestra taxonomía fina
- Entrar al catálogo de ejercicios.
- Buscar ejercicios de pecho, espalda, pierna y core.
- Abrir filtros por grupo o músculo.
- Abrir drawer de ejercicio.
- Validar que cards/listas usen media liviana y drawer use detalle.
- Forzar un ejercicio legacy_review, uno archived oculto por defecto y uno con media faltante.
- 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
- Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
- Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
- Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
- Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
- Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
- Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
- 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.
- Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
- 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]
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
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
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.
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
Cobertura: Sin caso vinculado
Proponer ejercicios equivalentesAlternativas al crear o ajustar una rutinaTécnicaPrueba técnica aprobadaRevisadaM2-F02.a
Qué permite hacerEl sistema calcula alternativas según músculo principal, patrón, dificultad y equipo disponible.
- Alcance
- Base contratada
- Registro de origen
- Código leído
12 pruebas del cálculo de equivalencias aprobadas: músculo y patrón, dificultad, equipo disponible, incompatibilidades, orden y límite de resultados. Esta función técnica se valida en su frontera de cálculo; no acredita el flujo de sustitución del paciente.
Falta que Gera/Brian validen una muestra de 20–50 equivalencias (FIT-04).
Ubicación y referencia técnica
Constructor de rutinas → Alternativas de ejercicio
Calcular ejercicios equivalentes
Se refiere al cálculo interno que propone alternativas; la elección del ejercicio es funcional.
- ejercicios.service.ts543-551
- phase-2-fitness.md61-77
- unit-results.jsonCorrida aislada del candidato local actual; suite aprobada
- equivalencias-fitness.test.tsCasos ejecutados en el corte actual
Cómo probar
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/equivalencias-fitness.test.tsUnitarias / componentes · Comportamiento directo · 4 vinculadas / 12 definiciones en el archivo
Ejercita el cálculo público de equivalencias con músculo, patrón, dificultad, equipo, incompatibilidades, orden y límite.
- un candidato idéntico en músculo/patrón/dificultad puntúa 0.925 con los pesos default
L24 - descarta candidatos cuyo equipo no está disponible
L44 - descarta músculos incompatibles y patrones opuestos
L66 - ordena por score descendente y limita a 10 resultados
L128
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-planning-exercise-replacement · Detalle y reemplazo contextual de ejercicios durante la planeación
- 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.
- Revisar alternativas del catálogo compatibles con el bloque y el equipo disponible; abrir una y volver sin confirmar.
- Confirmar una alternativa compatible y comprobar que sólo cambia esa ocurrencia, manteniendo día, bloque, posición, series, carga y notas.
- Repetir con el mismo ejercicio en varios días: las otras ocurrencias permanecen intactas.
- En un bloque Libre, revisar una alternativa de distinta modalidad o carga: debe advertir el restablecimiento de prescripción antes de confirmar.
- Guardar, recargar y asignar una rutina QA; comprobar en el portal el ejercicio sustituido y su prescripción, sin alterar versiones anteriores.
- 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]
tests/unit/lib/calculations/equivalencias-fitness.test.ts· Prueba ejecutada del comportamiento técnico 12/12 pruebas unitarias aprobadas · 23 sep 2026
Cobertura: Referencias parciales
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
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
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ón
L7 - incompatibilidad reinicia valores y no arrastra peso, reps ni media anterior
L16
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 equipo
L24 - omite targets legacy_review del paciente
L143
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-planning-exercise-replacement · Detalle y reemplazo contextual de ejercicios durante la planeación
- 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.
- Revisar alternativas del catálogo compatibles con el bloque y el equipo disponible; abrir una y volver sin confirmar.
- Confirmar una alternativa compatible y comprobar que sólo cambia esa ocurrencia, manteniendo día, bloque, posición, series, carga y notas.
- Repetir con el mismo ejercicio en varios días: las otras ocurrencias permanecen intactas.
- En un bloque Libre, revisar una alternativa de distinta modalidad o carga: debe advertir el restablecimiento de prescripción antes de confirmar.
- Guardar, recargar y asignar una rutina QA; comprobar en el portal el ejercicio sustituido y su prescripción, sin alterar versiones anteriores.
- 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
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
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
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 formulario
L23
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
- Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
- Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
- Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
- Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
- Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
- Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
- 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.
- Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
- 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
- En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
- 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.
- 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.
- 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.
- 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.
- Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
- 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.
- Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
- Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
- 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.
- 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
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
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 reabrir
L59 - un día vacío requiere crear bloque y selecciona el nuevo destino
L111 - mueve por menú a un bloque vacío, permite cancelar y preserva las series al confirmar
L191
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 aceptar
L61
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-exercise-selector-modal · Selector de ejercicios con día, bloque y detalle contextual
- Abrir Explorar y añadir ejercicios con un bloque seleccionado; comprobar día, bloque y contexto del paciente.
- Combinar filtros Global/Mis ejercicios, Destacados y En este bloque con búsqueda y facetas.
- Abrir detalle, cambiar ejercicio, destino y regresar conservando filtros y scroll.
- Añadir repetidos y retirar una sola ocurrencia; revisar resúmenes Bloque/Día.
- Crear bloque en día vacío; comprobar compatibilidad y rutina antigua sin segmentos.
- Cerrar, reabrir y reanudar borrador sin publicar; revisar foco, teclado, temas y restricción móvil.
- 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.
- Comprobar que las notas y sus títulos no aparecen como condiciones en la franja; conservar los bloqueos clínicos derivados de notas.
- 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
- En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
- 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.
- 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.
- 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.
- 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.
- Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
- 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.
- Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
- Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
- 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.
- 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
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
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écnicas
L7
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 manipuladas
L286 - acepta y conserva una categoría distinta tras serializar sin relajar referencias de día
L360
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-structure-validation · Rutinas validan su estructura completa
- En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
- 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.
- 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.
- 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.
- 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.
- Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
- 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.
- Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
- Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
- 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.
- 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
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
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ías
L47 - reordena los bloques guardados y completa instrucciones para poder persistirlos
L65
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 principio
L28
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-structure-validation · Rutinas validan su estructura completa
- En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
- 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.
- 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.
- 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.
- 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.
- Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
- 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.
- Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
- Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
- 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.
- 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
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
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 nueva
L30 - rechaza un borrador de otra URL aunque pertenezca al mismo usuario
L64
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 formulario
L23
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-draft-resume · Borrador de rutina se puede reanudar
- En escritorio, crear para un paciente QA un borrador con días, ejercicios y prescripción reconocibles y salir sin publicar.
- Volver a Crear rutina y elegir Reanudar; comprobar que se restauran paciente, días, ejercicios y valores exactos.
- Salir de nuevo, elegir Descartar y confirmar que el wizard inicia vacío al regresar.
- 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.
- Abrir otro paciente y verificar que nunca recibe ni ofrece el borrador del paciente original.
- 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]
e2e/staging/rutina-day-copy.spec.ts0/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
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
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 legacy
L27 - construye fallback por días cuando una plantilla legacy no tiene media ni ejercicios
L32
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 asignar
L55
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
- VentanaPlantillas de bloque/pacientes/[id]/crear-rutina · requiere paciente
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
- Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
- Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
- 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.
- Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
- 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.
- En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
- Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
- 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.
- En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
- 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.
- 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.
- 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]
e2e/staging/rutinas-asignacion.spec.ts0/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
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
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.
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
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
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
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 independientes
L21 - inserta Enfriamiento al final y mantiene las reglas de los demás bloques
L133
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-structure-validation · Rutinas validan su estructura completa
- En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
- 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.
- 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.
- 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.
- 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.
- Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
- 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.
- Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
- Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
- 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.
- 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
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
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 plantilla
L11
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-structure-validation · Rutinas validan su estructura completa
- En escritorio, crear una rutina válida desde el catálogo y otra desde la ficha de paciente; guardar y recargar ambas.
- 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.
- 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.
- 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.
- 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.
- Intentar guardar sin días, sin bloques ni ejercicios y con una prescripción incompleta desde cada acceso.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Guardar y recuperar una plantilla de día con bloques, incluidos vacíos; abrir una rutina legacy sin modificarla.
- 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.
- Confirmar que cada estructura inválida se bloquea con un mensaje accionable y no crea documentos parciales.
- Corregir los datos, guardar y comparar que días, orden, ejercicios, series, repeticiones y descansos persisten igual.
- 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.
- 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
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
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
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 fecha
L75 - omite rutinas futuras, vencidas y desasignadas
L102
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 vivo
L133 - publica reemplazo de una ocurrencia y conserva snapshot histórico
L111
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
- VentanaVigencia de la rutina/pacientes/[id] · requiere paciente
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
- Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
- Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
- 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.
- Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
- 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.
- En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
- Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
- 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.
- En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
- 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.
- 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.
- 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]
e2e/staging/rutinas-asignacion.spec.ts0/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
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
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 abierta
L138 - una versión sustituida abierta es expirada para todos los lectores de estado
L150
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 anteriores
L196
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
- Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
- Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
- 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.
- Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
- 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.
- En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
- Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
- 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.
- En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
- 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.
- 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.
- 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]
e2e/staging/rutinas-asignacion.spec.ts0/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
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
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 vivo
L133 - publica reemplazo de una ocurrencia y conserva snapshot histórico
L111
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 siguiente
L104 - no anticipa una versión futura del mismo día aunque comience antes de las 12:00 UTC
L116
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-direct-assignment · Asignar rutina directa desde plantilla
- Abrir Asignar rutina desde ficha, tarjetas, Kanban, quick drawer y cockpit AAR; confirmar que todos muestran el mismo configurador.
- Entrar a /rutinas y abrir Ver y asignar desde el cuerpo y CTA de un programa; confirmar plantilla preseleccionada en Vista previa.
- 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.
- Volver a cambiar de paciente y esperar el skeleton antes de revisar contexto y equipo.
- 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.
- En escritorio, validar que Editar/Eliminar permanecen visibles pero deshabilitados en plantillas globales para roles normales, y activos para superadmin.
- Cambiar entre Vista previa y Configuración, definir vigencia y asignar directamente.
- 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.
- En escritorio, abrir una plantilla Recomendada y confirmar que el detalle explica la coincidencia por objetivo, nivel o contexto del paciente.
- 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.
- 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.
- 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
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
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 kg
L28 - fase descarga reduce peso y volumen 20%
L37 - fase peaking sube intensidad 10% y baja volumen 30%
L49
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-active-routine-quick-adjust · Editar rutina activa abre ajuste rápido
- Entrar a detalle de paciente con rutina activa.
- Abrir tab Planes y seleccionar Editar en la tarjeta de rutina.
- 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.
- Ajustar un ejercicio y un grupo muscular.
- 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.
- Abrir el ajuste sin ejercicios y comprobar un estado vacío seguro; repetir la lectura del gráfico en móvil sin scroll horizontal.
- Guardar con y sin sesión registrada del día.
- Validar en móvil que Señales de hoy aparece colapsado y notas recientes usan color/icono de categoría.
- 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.
- 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.
- Cambiar entre menús, sesiones, ejercicios y secciones AAR con un borrador pendiente; volver y comprobar que se conserva.
- Modificar Programación y revisar los cambios junto con la prescripción antes del guardado conjunto.
- Repetir en 1440/1920 px, tableta vertical y horizontal y móvil; comprobar nombres, unidades, teclado y ausencia de scroll horizontal.
- 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
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
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 siguiente
L104
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-active-routine-quick-adjust · Editar rutina activa abre ajuste rápido
- Entrar a detalle de paciente con rutina activa.
- Abrir tab Planes y seleccionar Editar en la tarjeta de rutina.
- 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.
- Ajustar un ejercicio y un grupo muscular.
- 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.
- Abrir el ajuste sin ejercicios y comprobar un estado vacío seguro; repetir la lectura del gráfico en móvil sin scroll horizontal.
- Guardar con y sin sesión registrada del día.
- Validar en móvil que Señales de hoy aparece colapsado y notas recientes usan color/icono de categoría.
- 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.
- 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.
- Cambiar entre menús, sesiones, ejercicios y secciones AAR con un borrador pendiente; volver y comprobar que se conserva.
- Modificar Programación y revisar los cambios junto con la prescripción antes del guardado conjunto.
- Repetir en 1440/1920 px, tableta vertical y horizontal y móvil; comprobar nombres, unidades, teclado y ausencia de scroll horizontal.
- 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
- Registrar una comida o sesión con plan/rutina activa.
- Hacer un ajuste rápido el mismo día.
- Abrir calendario operativo y revisar el día del registro y días previos.
- Validar que el registro conserva snapshot/version y que el día muestra ajuste aplicado cuando corresponda.
- 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ú.
- 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.
- 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
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
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 kg
L28 - el microciclo puede cambiar la fase y aportar notas propias
L85
- 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.
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-active-routine-quick-adjust · Editar rutina activa abre ajuste rápido
- Entrar a detalle de paciente con rutina activa.
- Abrir tab Planes y seleccionar Editar en la tarjeta de rutina.
- 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.
- Ajustar un ejercicio y un grupo muscular.
- 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.
- Abrir el ajuste sin ejercicios y comprobar un estado vacío seguro; repetir la lectura del gráfico en móvil sin scroll horizontal.
- Guardar con y sin sesión registrada del día.
- Validar en móvil que Señales de hoy aparece colapsado y notas recientes usan color/icono de categoría.
- 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.
- 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.
- Cambiar entre menús, sesiones, ejercicios y secciones AAR con un borrador pendiente; volver y comprobar que se conserva.
- Modificar Programación y revisar los cambios junto con la prescripción antes del guardado conjunto.
- Repetir en 1440/1920 px, tableta vertical y horizontal y móvil; comprobar nombres, unidades, teclado y ausencia de scroll horizontal.
- 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
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
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
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 ocurrencia
L115 - permite elegir una rutina desde una fecha de descanso del programa
L159
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 @regression
L49 - QA-PORTAL-ROUTINE-SUMMARY muestra distribución y avance real en móvil
L9
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/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
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
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 command
L305
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 destino
L137
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 @regression
L165
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/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
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
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 idempotente
L447 - niega ejercicio/serie fuera de prescripción y métricas manipuladas
L473 - sólo marca completada al registrar todas las series prescritas
L507
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 llegar
L357 - reorders whole series without changing their values or recorded identity
L671
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 recargar
L7 - reordena las series en el drawer y conserva su orden al recargar
L74
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
- PanelOpciones del ejercicio/portal/entrenamiento
- PanelAjustes de serie/portal/entrenamiento
- CampoTipo de serie/portal/entrenamiento
- PanelReordenar series/portal/entrenamiento
- BotónConvertir a kg / Convertir a lb/portal/entrenamiento
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Entrar como paciente con rutina activa.
- Abrir bloque de rutina o entrenamiento del día.
- Cambiar de día y revisar ejercicios.
- Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
- Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
- Validar instrucciones y controles móviles.
- Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
- Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
- 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.
- Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
- 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.
- Tocar el timer de entrenamiento y confirmar reinicio.
- Completar un descanso con permisos de notificación activos.
- Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
- Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
- Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
- 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.
- Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
- Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
- Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
- Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
- 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]
e2e/staging/training-options-pr.spec.ts2/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.ts2/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
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
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 ticks
L4 - persists an explicit pause and resumes from the remaining duration
L15
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ón
L540
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 effort
L16
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
- PanelMi nota/portal/entrenamiento
- PanelDescanso/portal/entrenamiento
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Entrar como paciente con rutina activa.
- Abrir bloque de rutina o entrenamiento del día.
- Cambiar de día y revisar ejercicios.
- Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
- Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
- Validar instrucciones y controles móviles.
- Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
- Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
- 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.
- Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
- 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.
- Tocar el timer de entrenamiento y confirmar reinicio.
- Completar un descanso con permisos de notificación activos.
- Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
- Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
- Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
- 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.
- Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
- Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
- Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
- Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/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
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
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 PR
L6 - normalizes units and excludes missing-data, other exercise, and incompatible load
L23
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 registrada
L19
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
- PanelRécords del ejercicio/portal/entrenamiento
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Entrar como paciente con rutina activa.
- Abrir bloque de rutina o entrenamiento del día.
- Cambiar de día y revisar ejercicios.
- Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
- Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
- Validar instrucciones y controles móviles.
- Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
- Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
- 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.
- Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
- 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.
- Tocar el timer de entrenamiento y confirmar reinicio.
- Completar un descanso con permisos de notificación activos.
- Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
- Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
- Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
- 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.
- Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
- Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
- Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
- Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/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
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
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 batch
L542
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/10 recorridos UI aprobados · 23 sep 2026Casos ejecutados del lote seguro; un fallo del test no acredita un fallo del producto.
Cobertura: Referencias parciales
Conservar cambios de rutina durante el entrenamientoEdición de rutina y entrenamiento del pacienteTécnicaPor definirPor definirM2-F07.g
Qué permite hacerSe propone preservar versión, preparación y resultados cuando el coach publica cambios durante el recorrido del paciente.
- Alcance
- Base de Fitness; cambio propuesto por acordar
- Registro de origen
- Por definir
Todos los incrementos están pendientes y D1–D4 abiertos. No activar como función entregada.
D1–D4 siguen abiertos; no activar este plan como capacidad entregada.
Ubicación y referencia técnica
Editor del coach y sesión del paciente; propuesta
Gestionar cambios de prescripción
Define cómo se conservan cambios de prescripción entre edición y sesión, todavía como propuesta.
- routine-prescription-changes-2026-09-23.md1-122
- routine-prescription-changes-2026-09-23.mdEstado e incrementos 1-5
Cómo probar
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 · 2 vinculadas / 28 definiciones en el archivo
Fija la sesión iniciada a una versión y aplica la nueva sólo a la sesión posterior.
- conserva sesión, sets y snapshot cuando el staff publica una versión durante el entrenamiento
L237 - usa la versión nueva en la siguiente sesión después de terminar la fijada
L387
e2e/staging/fitness-session-version-pin.spec.tsE2E · Cobertura parcial · 1 vinculadas / 1 definiciones en el archivo
El flujo E2E apunta al comportamiento, pero falló antes de encontrar la rutina de fixture.
- actualiza una rutina no iniciada y fija la prescripción desde el primer set
L48
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Entrar como paciente con rutina activa.
- Abrir bloque de rutina o entrenamiento del día.
- Cambiar de día y revisar ejercicios.
- Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
- Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
- Validar instrucciones y controles móviles.
- Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
- Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
- 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.
- Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
- 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.
- Tocar el timer de entrenamiento y confirmar reinicio.
- Completar un descanso con permisos de notificación activos.
- Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
- Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
- Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
- 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.
- Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
- Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
- Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
- Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
- 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]
e2e/staging/fitness-session-version-pin.spec.ts0/1 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
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
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
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 asignadas
L75 - cuenta los días programados tras cambios y excluye descanso de vacaciones
L88 - cuenta como 0 un descanso declarado después de una rutina prevista
L96
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ías
L120
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-adherence-cross-surface · Adherencia coincide entre staff y portal
- Registrar la prescripción y el periodo de una rutina QA y anotar el numerador y denominador iniciales.
- Completar parcialmente una sesión y agregar una serie extra que no debe incrementar la prescripción cumplida.
- Comparar adherencia en ficha fitness, métricas staff y dashboard paciente usando el mismo intervalo.
- Comprobar que las tres superficies coinciden y que un periodo sin rutina muestra estado vacío, no un porcentaje inventado.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/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
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
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 prescritos
L26 - omite sets no completados y ordena por ejercicio y número de serie
L42
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 completado
L43 - combina tonelaje y sets efectivos
L80
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-adherence-cross-surface · Adherencia coincide entre staff y portal
- Registrar la prescripción y el periodo de una rutina QA y anotar el numerador y denominador iniciales.
- Completar parcialmente una sesión y agregar una serie extra que no debe incrementar la prescripción cumplida.
- Comparar adherencia en ficha fitness, métricas staff y dashboard paciente usando el mismo intervalo.
- Comprobar que las tres superficies coinciden y que un periodo sin rutina muestra estado vacío, no un porcentaje inventado.
- 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
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
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 registrada
L19
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 preload
L35
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
fitness-routine-patient-mobile · Portal paciente muestra rutina usable
- Entrar como paciente con rutina activa.
- Abrir bloque de rutina o entrenamiento del día.
- Cambiar de día y revisar ejercicios.
- Abrir guía visual y validar 360; ampliar guía sólo bajo acción explícita.
- Cambiar equipo disponible y confirmar que la rutina no se reescribe automáticamente.
- Validar instrucciones y controles móviles.
- Confirmar que peso, reps, duración y distancia reales inician vacíos aunque exista prescripción; el objetivo sólo aparece como referencia.
- Registrar manualmente una serie y completar otra con Usar lo planeado; confirmar que ambos orígenes quedan diferenciados en el historial.
- 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.
- Comparar la carga anterior por número de serie y confirmar que el registro de hoy no se usa como antecedente.
- 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.
- Tocar el timer de entrenamiento y confirmar reinicio.
- Completar un descanso con permisos de notificación activos.
- Registrar sólo una parte de las series prescritas y terminar la sesión; validar estado Parcial.
- Abrir una sesión sin registrar series y elegir por separado No la realicé y La dejé incompleta.
- Agregar una serie o ejercicio extra y confirmar que se conserva, pero no aumenta el cumplimiento de series prescritas.
- 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.
- Repetir un cambio prescrito con Aplicar desde mañana; comprobar que hoy conserva la versión actual y mañana resuelve exactamente la nueva.
- Intentar convertir un ejercicio extra o duplicado en prescripción futura y comprobar que exige revisión del staff sin cerrar ni traslapar versiones.
- Comprobar que una rutina futura, vencida o desasignada no aparece como entrenable y que un traslape de versiones produce bloqueo explícito.
- Reabrir el día y comprobar que un estado terminal no permite agregar, retirar ni alterar sets o PRs.
- 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]
e2e/staging/routine-occurrence-flow.spec.ts2/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
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
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 activo
L5 - distancia sin duración permanece por estimar en lugar de inventar 600 segundos
L33
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 manual
L11
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
patient-routine-prepare-and-perform · Consultar, preparar y realizar rutina por ocurrencia
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Completar un bloque, conservar registros previos y deshacer sólo esa operación.
- Bloquear y desbloquear durante descanso; comprobar contador y aviso.
- Checklist de entrenamiento: bloque con acento lateral completo, series compactas, checks directos, intercambio visible, ficha desde miniatura y notas expandibles con preview.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
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
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.
- 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.
- VistaPortal paciente/portal/rutina/portal/entrenamiento/portal/progreso/ejercicios/portal/perfil
- VistaRutinas y fitness/rutinas/ejercicios/pacientes/[id]/fitness · requiere paciente/pacientes/[id]/crear-rutina · requiere paciente/portal/rutina/portal/rutina/detalle/portal/rutina/ejercicios/portal/entrenamiento/rutinas/crear/pacientes/[id]/rutina/ajustar · requiere paciente
patient-diet-routine-feedback-learn · Dieta y Rutina agregan feedback, aprender y señales correctas
- Entrar a Dieta y registrar feedback rápido de una comida.
- Abrir Aprender en Dieta.
- Entrar a Rutina y validar Hoy, Progreso resumen y Aprender.
- Cambiar equipo disponible desde Rutina o Configuración.
- Registrar dolor o dificultad y revisar señal staff.
- 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
Identificar atleta · Preparar · Competir · Ajustar
Contexto de prueba5 roles · 6 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
Definiciones únicas de todo el área; no cambian con los filtros ni equivalen a pruebas aprobadas.
Identificar y registrar al atleta
200
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
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
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ético
L123
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 perfil
L101
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
- VentanaPerfil AAR/pacientes/[id] · requiere paciente
patient-aar-profile-completion · AAR activado por staff solicita perfil avanzado al paciente
- Activar AAR desde staff antes de enviar acceso y validar que el onboarding muestra Perfil deportivo avanzado.
- Completar onboarding y revisar que perfilAAR.capturaPaciente queda completa.
- Repetir con paciente ya registrado: activar AAR desde staff.
- Entrar al portal paciente y completar el popup de perfil avanzado.
- 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
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
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ético
L123
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 portal
L53 - cambiar de deporte limpia los detalles staff del deporte anterior sin tocar los del paciente
L66
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
- VentanaPerfil AAR/pacientes/[id] · requiere paciente
patient-aar-profile-completion · AAR activado por staff solicita perfil avanzado al paciente
- Activar AAR desde staff antes de enviar acceso y validar que el onboarding muestra Perfil deportivo avanzado.
- Completar onboarding y revisar que perfilAAR.capturaPaciente queda completa.
- Repetir con paciente ya registrado: activar AAR desde staff.
- Entrar al portal paciente y completar el popup de perfil avanzado.
- 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
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
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
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 px
L75
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 dos
L121 - bloquea un tercer grupo de unidad en vez de soltar series en silencio
L138
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
- Abrir un atleta AAR cuyo expediente tenga objetivoDetallado y confirmar el mismo texto en el encabezado del cockpit.
- Entrar a Calendario y confirmar que el objetivo procede del expediente y no de la competencia, dieta o rutina.
- Repetir con un atleta sin objetivoDetallado y verificar el estado explícito Sin objetivo definido en ambas superficies.
- Validar escritorio y 390 px sin recorte, desborde ni solapamiento con insignias o acciones.
- 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
- Abrir el Dashboard AAR y confirmar que la franja de KPI muestra sets completados frente a planeados en lugar del promedio RPE.
- Entrar a Calendario y confirmar métricas de sets de 7 y 30 días sin una tarjeta primaria de Carga/RPE.
- Abrir el detalle de una sesión y comprobar que RPE continúa disponible como dato del ejercicio, no como KPI principal.
- Validar escritorio y 390 px sin desbordes nuevos.
- 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]
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
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
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.
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
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
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.
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-followup-actions-and-chat · Seguimiento AAR evita acciones duplicadas y ofrece chat compacto
- Abrir un paciente AAR y entrar a Seguimiento.
- Confirmar que Accesos rápidos muestra sólo Somatocarta, Check-in y Archivos y que Check-in/Archivos abren sus módulos embebidos.
- Validar que Progreso físico conserva QR fotos y Cargar fotos con una distribución legible.
- Confirmar que Evidencia y seguimiento ya no repite Chat con paciente ni Agendar seguimiento.
- Abrir la burbuja de chat ubicada encima del FAB de soporte y alternar Mensajes y Archivos.
- Validar que el botón Chat del encabezado sigue abriendo la conversación completa y que Agenda continúa disponible arriba.
- 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
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
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.
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-followup-actions-and-chat · Seguimiento AAR evita acciones duplicadas y ofrece chat compacto
- Abrir un paciente AAR y entrar a Seguimiento.
- Confirmar que Accesos rápidos muestra sólo Somatocarta, Check-in y Archivos y que Check-in/Archivos abren sus módulos embebidos.
- Validar que Progreso físico conserva QR fotos y Cargar fotos con una distribución legible.
- Confirmar que Evidencia y seguimiento ya no repite Chat con paciente ni Agendar seguimiento.
- Abrir la burbuja de chat ubicada encima del FAB de soporte y alternar Mensajes y Archivos.
- Validar que el botón Chat del encabezado sigue abriendo la conversación completa y que Agenda continúa disponible arriba.
- 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
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
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
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 dummy
L152
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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]
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
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
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 px
L75
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 cockpit
L59
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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]
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
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
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 fase
L16 - la respeta mientras la competencia siga vigente, incluido el día del evento
L28 - caduca cuando la competencia ya pasó y vuelve al cálculo automático
L37
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ético
L123
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
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
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 paciente
L23
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
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
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
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ético
L123
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 captura
L31 - convierte el peso de la unidad de captura a kg y descarta filas sin datos
L93 - conserva las tres voces de notas
L127
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í borra
L65
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
- VentanaNueva competencia / Editar competencia/pacientes/[id]?view=aar · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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]
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
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
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 notas
L127
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
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
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ño
L45 - estaEnPreparacion lee el flag del staff, no el calendario
L134
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ético
L123
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
- CampoPreparación activa/pacientes/[id]?view=aar · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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]
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
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
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.
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
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
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
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 vivo
L133
- 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.
- 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
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
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.
- 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.
- VistaDetalle de paciente AAR/pacientes/[id] · requiere paciente
patients-aar-competitive-cockpit · Cockpit AAR competitivo con análisis real y responsive
- Abrir un atleta AAR y validar Dashboard, Calendario, Planes, Medidas, Alertas y Seguimiento.
- 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.
- 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.
- 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.
- 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.
- 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.
- Abrir Ver análisis y confirmar que navega a Medidas o Seguimiento > Rendimiento sin recargar.
- Confirmar que Medidas contiene únicamente Historial, Bioimpedancia, Corporales, Pliegues, Somatocarta y Calculados; Fotos sólo aparece en Seguimiento > Evidencia.
- 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.
- 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.
- 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.
- Revisar nombre, correo, tarjetas, estados vacíos y navegación en 320, 375, 390, 768 y 1280 px.
- 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
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.