Cómo cambiar el estado de una reserva
Cancela, recupera o promueve reservas desde el detalle del servicio, manteniendo coherentes mesas, disponibilidad y optimización.
En este artículo
El cambio de estado se gestiona desde la ocurrencia de reservas. En el contexto ES, el ejemplo operativo es Grupo Marea Demo, el local Marea Gran Via y reservas como Javier Martin o Sara Molina.
La app implementada no muestra un selector general de Estado en el editor. El estado se consulta como lectura y las transiciones documentadas son las acciones disponibles: cancelar, descancelar y promover desde lista de espera.
Antes de empezar
- Sesión iniciada con organización y ubicación seleccionadas, por ejemplo Grupo Marea Demo y Marea Gran Via.
- Permiso `reservation:manage` para cambiar estados. Con `reservation:view` se puede abrir la pantalla, pero no ejecutar acciones.
- Reserva existente dentro de una ocurrencia de la ubicación activa, como Javier Martin en Servicio de comidas Gran Via.
- Para promover desde lista de espera, la ocurrencia debe estar en modo Lista de espera y `waitlist-analysis` debe devolver una franja compatible, como en el caso de Sara Molina.
Instrucciones
- 1.
Abre la ocurrencia de reservas
Entra desde el calendario de reservas o mediante el enlace directo de la ocurrencia. La pantalla carga el detalle del servicio, la lista de reservas, clientes, mesas y cronograma.
- 2.
Comprueba el estado actual
Localiza la reserva y revisa su etiqueta de Estado. Si abres Editar, el campo Estado confirma el valor actual, pero no sirve para elegir manualmente otro estado.
- 3.
Cancela una reserva activa
Usa la acción de gestión de la reserva y elige `Cancelar reserva`. Al guardarse, la reserva pasa a `cancelled`, deja de ocupar mesas físicas y se limpian sus asignaciones.
- 4.
Descancela cuando proceda
Si la reserva ya está cancelada y la ocurrencia lo permite, usa `Descancelar reserva`. La reserva vuelve a `booked`; en modo automático abierto puede aparecer una confirmación para pasar a modo manual.
- 5.
Promueve desde lista de espera
En una ocurrencia en modo Lista de espera, abre `Lista de espera`, selecciona la reserva pendiente, elige una franja calculada y confirma. La reserva pasa de `waitlist` a `booked` con hora y duración de la franja.
- 6.
Guarda cambios complementarios
Si editas cliente, teléfono, personas, hora, duración o mesas sin enviar `status`, el backend conserva el estado anterior y solo fusiona los campos recibidos.
- 7.
Revisa el resultado operativo
Después de cualquier transición, comprueba la lista, las etiquetas de estado y el cronograma. La ocurrencia invalida su estado de optimización y puede lanzar una nueva corrida si corresponde.
Validaciones y límites
- Solo `reservation:manage` habilita acciones de cambio de estado; el modo de lectura no muestra acciones de fila ni apertura de editor desde la lista.
- Los estados válidos del modelo son `waitlist`, `hold`, `booked`, `seated`, `noshow` y `cancelled`, pero la UI probada no expone transiciones manuales para todos ellos.
- Al cancelar, el backend establece `cancelled_at` si faltaba y limpia `reservation_table_assignments`. Al recuperar una cancelada, limpia `cancelled_at`.
- Las reservas en `waitlist`, `cancelled` y `noshow` no se tratan como reservas que ocupan mesas físicas en disponibilidad y cronograma.
- En modo Lista de espera solo se acepta la promoción si la franja elegida coincide con la disponibilidad calculada por `waitlist-analysis`.
- En una ocurrencia completada, la recuperación de una reserva cancelada queda bloqueada.
- No documentar un selector general de Estado: la implementación muestra Estado como campo de lectura.
Resultado esperado
La reserva queda en el estado operativo correcto, las mesas se liberan o recalculan según corresponda y la ocurrencia conserva coherentes disponibilidad, cronograma y optimización.