---
name: vita-client-booking-flows
description: "Flujos de reserva web y app: Haz que tus clases aparezcan en Agendar o crea un enlace de reserva propio. Configura el recorrido de reserva estándar, los enlaces /f/ y Agendar en la app móvil. Conecta servicios, planes, horarios y visibilidad, y comprueba cada superficie por separado."
---

# Flujos de reserva web y app

Usa esta rama cuando una clase o servicio no aparece en Agendar, para cambiar los pasos de reserva, crear un enlace `/f/` o configurar el recorrido móvil. Para hacer una reserva individual usa [Personas, reservas y planes](https://skills.vita.lat/s/vita-client-people-bookings); para abrir horas usa [Agenda, horarios y clases](https://skills.vita.lat/s/vita-client-schedule-classes). [Guía raíz](https://skills.vita.lat/s/vita-client-assistant).

## Identificar la pantalla y el alcance

Con Vita conectado, verifica `get_current_context` y el catálogo de herramientas de esa conexión. Identifica la pantalla real: reserva estándar del sitio, enlace `/f/<slug>`, una página por bloques o **Agendar** dentro de la app nativa. Una captura de teléfono puede ser web móvil: no las confundas.

Lee la configuración y explica el cambio concreto antes de escribir. Conserva la autorización ya dada para ese mismo alcance; no pidas otra confirmación por cambiar de rama. Si faltan sede, cupos, duración o fecha inicial, resuelve solo esos datos. No borres un perfil de clase ni crees otro plan para intentar que aparezca una opción.

## Diagnosticar una clase que no aparece

Recorre las dependencias en este orden y corrige únicamente las que fallan:

1. **Servicio:** activo, nombre e identificador exactos, sede y profesional o perfil de clase que lo presta.
2. **Plan:** cubre ese servicio; compra activa, vigencia y saldo real de la persona. Un plan creado o asignado no agrega automáticamente una tarjeta a Agendar. No compres ni asignes otro si ya existe uno válido.
3. **Horario:** definición recurrente correcta y horas realmente materializadas para ese servicio, sede y profesional. Lista horas, agrupa por fecha/hora y cuenta plazas únicas; una plantilla guardada no prueba disponibilidad.
4. **Visibilidad:** la especialidad, servicio y filtros del recorrido incluyen esa clase. Revisa también límites de anticipación, datos requeridos y restricciones de reserva del plan cuando sean pertinentes.
5. **Superficie:** abre exactamente el sitio, enlace o app donde fallaba. Un resultado web no demuestra que la app nativa ya lo muestre.

Si hay varios profesionales asociados al mismo servicio, sus horas pueden aparecer juntas. Conserva esos horarios salvo que el usuario haya pedido retirarlos. No cambies una relación global para resolver un filtro de un enlace específico.

## Reserva estándar: especialidades y clases de prueba

Lee `get_institution_page_content_by_institution_id`. Para editar usa `admin_preview_institution_page_content_update` y después `admin_update_institution_page_content` con el identificador actual y `confirmPublish: true` cuando la publicación esté autorizada.

Los campos relevantes son:

| Configuración | Qué controla |
| --- | --- |
| `selectableSpecialties` | Tarjetas de especialidad. Sus `services` relacionan **nombres exactos** del catálogo, no IDs. Conserva sede, duración, imagen e icono de las tarjetas existentes. |
| `serviceBookingFlowType` | Recorrido estándar (`default`) o deportivo (`sports`). No lo cambies para agregar una sola clase al recorrido actual. |
| `sportsBookingServices` | Lista de **IDs de servicios** del recorrido deportivo. |
| `bookingFlowConfig` | Presentación y etiquetas soportadas; no permite inventar pasos ni componentes nuevos. |
| `customFlow` | Entrada promocional de prueba, audiencia y planes seleccionados. |
| `bookingPageConfig` | Configuración de reserva/prueba; puede contener `trialClassPlanIds` y el campo singular heredado. Conserva ambos según el estado actual. |

Las listas y objetos enviados se reemplazan completos: lee, modifica la mínima parte y preserva el resto. Si el esquema MCP no acepta una propiedad existente, comprueba su consumidor antes de omitirla; no pierdas imágenes, iconos de biblioteca ni filtros silenciosamente. Relee inmediatamente antes de escribir si otra persona pudo editar.

Una prueba gratis necesita un plan válido que cubra el servicio y un punto de entrada que lo incluya. Verifica precio, sesiones, vigencia y reglas de primera compra. No cambies condiciones comerciales para arreglar visibilidad.

## Crear o editar un enlace `/f/`

1. Usa `admin_list_booking_flows` con `responseFormat: "full"`; revisa nombre, slug, estado, filtros y pasos. Reutiliza el flujo que corresponde. Comprueba que la institución tenga disponible la capacidad de múltiples flujos; no actives capacidades fuera del alcance pedido.
2. `admin_create_booking_flow` crea un flujo **pausado**. Resuelve recursos reales de la institución y configura `name`, `slug`, `bookingUx` (`service-first` o `doctor-first`) y `variant`: `wizard`, `search`, `class-grid`, `class-list` o `single-screen` según el objetivo.
3. Los filtros `serviceScope`, `doctorScope`, `locationScope` y `specialtyScope` usan IDs. `specialtyScope` refiere a categorías, no a los nombres o IDs locales de `selectableSpecialties`. Una lista vacía elimina la restricción; omitir un campo al editar lo conserva. No vacíes un filtro sin querer.
4. `steps` reemplaza la lista completa de pasos: `specialty`, `location`, `professional`, `service`, `scheduling`, `personalData`, cada uno con orden y estado. Mantén habilitados horario y datos personales para un flujo utilizable.
5. Usa `admin_update_booking_flow` para corregir filtros, pasos, presentación y `variantConfig`. Conserva todas las claves pertinentes de `bookingFlowConfig` y `registrationFieldsConfig` porque también se reemplazan completos.
6. Relee el flujo pausado. Cuando esté revisado y publicar forme parte de la autorización, aplica `enabled: true, confirmPublish: true`. Usa la URL devuelta por Vita y verifica su pertenencia a la institución; prefiere el dominio del centro. No inventes una URL a partir de un slug no confirmado.
7. Abre el enlace publicado, comprueba filtros, horarios, pasos y validaciones en escritorio y móvil. Pausado, publicado y probado son estados diferentes.

`isDefault: true` cambia el flujo principal web y desplaza el anterior. Úsalo solo si se pidió ese cambio, con el flujo publicado y la capacidad habilitada. Verifica la sección de reserva de la portada y la ruta que usa el centro (`/agenda` o `/agendar`); una página personalizada puede reemplazarla. **No configura por sí solo Agendar en la app nativa.**

## Agendar en la app móvil nativa

La app puede consumir `selectableSpecialties`, `serviceBookingFlowType` y `sportsBookingServices` del contenido institucional. Revisa esos datos y los servicios/horarios reales antes de concluir que hace falta programar una función.

Distingue `bookingUx` institucional del `bookingUx` de un enlace `/f/`; tienen alcances y valores de esquema distintos. Solo modifica ajustes institucionales a través de una herramienta gobernada que los exponga. `mobileAppConfig` no es un espacio libre para inventar claves de navegación: verifica cuáles consume la versión de la app.

Vuelve a entrar a Agendar o actualiza su configuración y comprueba la tarjeta, servicio, fecha y hora. Si no tienes acceso a esa app, reporta «configuración guardada y web verificada; falta comprobar la app nativa». No presentes una captura web con ancho móvil como prueba nativa.

## Horarios, cobertura y verificación final

Cuando falten horas, carga [Agenda, horarios y clases](https://skills.vita.lat/s/vita-client-schedule-classes). Cuando falle el saldo o cobertura, carga [Personas, reservas y planes](https://skills.vita.lat/s/vita-client-people-bookings). Si hay una página por bloques que toma la ruta, carga [Sitio, contenido y páginas](https://skills.vita.lat/s/vita-client-site-pages). No cargues ramas ajenas al problema.

Relee los registros cambiados y prueba el recorrido hasta antes de confirmar una reserva real. No gastes una sesión de prueba, cobres ni crees una reserva solo para demostrar visibilidad. Si necesitas probar esa transacción, usa un entorno de prueba o solicita autorización específica.

Si una escritura vence o queda sin respuesta, relee antes de reintentar. Distingue configuración guardada, horas abiertas, publicación web y verificación nativa. Entrega enlaces reales y el resultado en palabras del usuario.
