Pre-launch · ERPlora is in active development. You're viewing a product preview.
Back to apps Restaurant

Reservations

Your book of table reservations: slots, covers, the table held for each guest and a waitlist.

Free
Start free
Turn it on from your Hub

Apps are turned on from the Apps page of your Hub. Create your free account to get one.

This documentation is only available in Spanish.

Para qué sirve y para quién

Reservas es el libro de reservas del restaurante o del bar: decide cuándo y para cuántos se acepta reservar (franjas horarias con un máximo de reservas y, si se quiere, de comensales, dentro del horario del negocio; y días bloqueados), apunta cada reserva con su cliente y su mesa, la lleva de Pendiente a Completada y guarda en una lista de espera a quien no cabe.

Quién la usa:

  • El empleado que coge el teléfono o atiende la puerta (el anfitrión o el camarero) apunta, confirma, sienta, cambia y cancela reservas y lleva la lista de espera.
  • El responsable de sala, además, crea las franjas, bloquea días y cambia las reglas.
  • El administrador y el propietario, además, borran reservas para siempre.

Reservas no pinta el plano (eso es Mesas: aparta la mesa de cada reserva confirmada), no cobra (eso es Ventas) y no es la agenda de citas de una peluquería (eso es Citas).

Referencia adoptada

ERPlora no inventa flujos: adopta los que el mercado ya probó (OpenTable, Resy, SevenRooms, Toast Tables, Square, Lightspeed, TouchBistro, Tablein, TablesReady, CoverManager, TheFork Manager, Odoo). Las dudas abiertas del producto actual se resolvieron así; la investigación, con sus fuentes, está en «Investigación de mercado», al final de este manual.

  • Libro por día y por servicio, con los cubiertos del día y cuánto queda libre en la próxima franja; la franja agotada se ve atenuada y marcada «Lleno», no se esconde (OpenTable, Resy).
  • Ciclo de la reserva: pendiente → confirmada → sentada → completada, más cancelada y no presentada; no se vuelve atrás.
  • El anfitrión gestiona la reserva entera (duda 1): el empleado de sala confirma, sienta, cambia, cancela y marca no presentados, y lleva la lista de espera; lo del responsable son las franjas, los bloqueos y las reglas.
  • El aforo de la franja se cuenta en reservas y, si se quiere, también en comensales (duda 2): el máximo de reservas de siempre y un máximo de comensales opcional; la franja se cierra con el primero que se alcanza, como ResDiary, OpenTable y HostMe.
  • Sentar la reserva sienta la mesa (duda 3): «Sentar» abre la cuenta de su mesa en Mesas y Ventas en el mismo paso. Una mesa ocupada se rechaza (hay que liberarla o pasar la reserva a otra mesa), salvo que ese mismo grupo ya se sentara en ella desde el plano: entonces solo se marca la reserva.
  • En la lista están todas las acciones (duda 4): editar (también la mesa), confirmar, sentar, completar, cancelar con motivo, no presentado y borrar.
  • Una mesa no se reserva dos veces a la misma hora (duda 5): al elegir mesa se ofrecen las libres a esa hora que caben al grupo; dos reservas a la vez sobre la misma mesa y hora dejan una. El mercado avisa y deja sobrevender la mesa al personal; aquí manda el encargo de Ioan (una sola reserva por mesa y hora), y queda señalado como contradicción. La asignación automática y juntar mesas no entran (ver «Lo que queda fuera»).
  • La lista de espera es para un día y una hora (duda 6), hoy o más adelante, en el orden en que se apuntó; cuando hay sitio se convierte en reserva con un toque. El mercado separa la cola de la puerta (con espera estimada y SMS) de la lista para días llenos; sin mensajería, aquí es una lista para las dos cosas (ver «Lo que queda fuera»).
  • El teléfono es obligatorio de fábrica en la reserva (duda 7), y siempre el mismo (el producto actual no lo pedía hasta que se guardaba cualquier ajuste); el correo, no. La lista de espera no pide nada más que el nombre: el teléfono solo sirve para llamar.
  • Las reglas de reserva son del cliente que reserva solo (duda 8): comensales mínimos y máximos, antelación mínima, días máximos y la franja llena atan a las reservas por internet o por WhatsApp. El personal reserva desde ya (nunca una hora pasada), cualquier grupo y cualquier fecha, y una franja llena la puede llenar a sabiendas: el sistema avisa y pide «Reservar igualmente».
  • Mesa reservada desde una hora antes (duda 8, decidida por Mesas, TABLE-F25): antes la mesa sigue libre y enseña «Ana · 21:00».

Antes de empezar

  • Reservas necesita Mesas (la mesa de cada reserva y su retención en el plano), Clientes (la ficha de cada cliente) y Horarios (el horario del negocio). Se encienden con ella y no se apagan mientras Reservas esté encendida. Mesas trae con ella Ventas.
  • Las horas son las del negocio: en esta fase, Europe/Madrid. Una reserva guarda su día y su hora de pared («el jueves a las 21:00»), como se dicen por teléfono.
  • Franjas: sin una franja para ese día de la semana no se puede reservar nada. Es la causa número uno de «no hay disponibilidad».
  • Horario del negocio: una reserva tiene que empezar con el negocio abierto según Horarios: sus días especiales y cambios temporales siempre, y su semana habitual en cuanto el negocio la guarda o la confirma. La semana por defecto de Horarios (de lunes a viernes de 09:00 a 18:00), sin confirmar, no limita: si no, un restaurante que nunca abrió Horarios no podría reservar ninguna cena.
  • Reglas de fábrica: la reserva dura 120 minutos, nace Pendiente, el teléfono es obligatorio, el correo no, y una pendiente se libera 15 minutos después de su hora. Para las reservas por internet o WhatsApp, además: grupos de 1 a 20, al menos 1 hora de antelación y hasta 30 días vista.

Configuración inicial, paso a paso:

  1. En Horarios, pon el horario del negocio (si no lo tienes ya).
  2. Abre Reservas → Disponibilidad, sección Franjas horarias, y crea las franjas de cada día de servicio (RESERVATION-F01).
  3. En Fechas bloqueadas, añade los días o las horas en que no aceptas reservas (RESERVATION-F02).
  4. Si quieres otras reglas, cámbialas en Reservas → Ajustes (RESERVATION-F03, F04).
  5. En Mesas, dibuja la sala: las reservas se asignan a sus mesas.
  6. Crea una reserva de prueba y comprueba en Disponibilidad → Ocupación que su franja baja en uno.

Pantallas

El menú Reservas tiene tres entradas: Reservas, Lista de espera y Disponibilidad. Abajo, las pestañas de las tres más Ajustes (esta, solo a quien puede cambiarlos). Los botones que el perfil no puede usar no salen.

Reservas

Menú Reservas → Reservas. Arriba, la barra del día: «Día anterior», la fecha, «Día siguiente» y «Hoy» cuando se está en otro día; el día en letra; y tres cifras: cubiertos (personas que vienen, sin canceladas ni no presentadas), reservas y próxima franja (la primera que no ha terminado, con cuántas reservas quedan «libres» o «Lleno»; o «No queda servicio hoy», «Sin servicio este día», «Cerrado este día»). «Hoy» es el del reloj del negocio, no el del dispositivo.

Debajo, la tabla del día por hora: Fecha, Hora, Cliente, Teléfono, Pax, Mesa, Estado; buscador «Buscar cliente, teléfono o correo…» que busca en todo el libro (resultados por día y hora); filtros por hora, comensales, mesa y estado; vista tabla o tarjetas. Acción principal «Nueva reserva» y, por fila, según su estado: «Confirmar», «Sentar», «Completar», «Cancelar», «No presentado», «Editar» y «Borrar» (solo el administrador). Tocar una fila la abre para editarla.

Vacía: «No hay reservas este día», con explicación y «Nueva reserva». Buscando sin resultados: «Ninguna reserva coincide con la búsqueda» y «Limpiar filtros». Cargando: «Cargando…» y las cifras en gris. Error: el mensaje y «Reintentar»; un fallo de una acción de fila sale encima de la tabla y uno del formulario, dentro del formulario.

Formulario de reserva («Nueva reserva» / «Editar reserva»): Cliente (el buscador de Clientes, por nombre o teléfono, con «+ Nuevo cliente»), Nombre, Teléfono, Correo, Fecha, Hora, Comensales, Duración (minutos), Mesa (las libres a esa hora, con su aforo y su zona; las que no caben al grupo, avisadas), Origen (Teléfono, En el local), Notas del cliente y Notas internas.

Lista de espera

Menú Reservas → Lista de espera. Tabla, en el orden en que se apuntaron (por día y hora preferida): Fecha, Hora pref., Cliente, Teléfono, Pax, Contactado, Estado (En espera, Convertida); buscador y filtros (fecha, contactado, convertida). Acción principal «Añadir cliente» (Cliente, Nombre, Teléfono, Fecha, Hora, Pax, Notas → «Añadir a la lista de espera»); por fila «Contactado», «Convertir» y «Quitar». Vacía: «La lista de espera está vacía.». Cargando: «Cargando…». Error: el mensaje de la tabla con «Reintentar».

Disponibilidad

Menú Reservas → Disponibilidad. Tres secciones apiladas: - Ocupación: una fecha (hoy por defecto) y, por cada franja de ese día, Franja, Reservadas, Máx, Comensales y Disponibles; la franja sin hueco se ve atenuada con la marca «Lleno», y la que cae fuera del horario del negocio, marcada «Fuera de horario». Encima, el horario del negocio de ese día y, si el día está bloqueado, su motivo. Se refresca sola cuando entra, cambia o se cancela una reserva. Vacía: «Sin servicio ese día (sin franjas).». - Franjas horarias: Día, Desde, Hasta, Máx. reservas, Máx. comensales; «Añadir franja» (Día, Desde, Hasta, Máx. reservas, Máx. comensales → «Crear franja») y «Quitar» por fila. Vacía: «Sin franjas horarias.». - Fechas bloqueadas: Fecha, Motivo, Horas (Todo el día, o desde–hasta); «Añadir fecha bloqueada» (Fecha, Motivo, Todo el día, Desde, Hasta → «Bloquear fecha») y «Quitar». Vacía: «Sin fechas bloqueadas.». Cada sección pinta su propio «Cargando…» y su error con reintento.

Ajustes

Pestaña Ajustes (solo quien puede cambiarlos). Comensales mínimos y máximos, antelación mínima (horas, para internet y WhatsApp), días máximos de antelación, duración por defecto, confirmar solas las reservas nuevas, teléfono obligatorio, correo obligatorio y minutos tras la hora para liberar una pendiente. «Guardar».

Estados de cada pantalla

Pantalla Cargando Vacía Error Sin permiso App apagada
Reservas «Cargando…», cifras en gris «No hay reservas este día» + «Nueva reserva» mensaje + «Reintentar» aviso en lugar de la tabla aviso en lugar de la tabla
Lista de espera «Cargando…» «La lista de espera está vacía.» mensaje + «Reintentar» aviso aviso
Disponibilidad «Cargando…» por sección un texto por sección mensaje + «Reintentar» por sección aviso aviso
Ajustes «Cargando…» — mensaje + «Reintentar» aviso aviso

Mientras se recupera la conexión en vivo, «Reconectando…» encima, sin borrar lo pintado.

Flujos

ID Flujo Estado
RESERVATION-F01 Crear y quitar franjas horarias hecho
RESERVATION-F02 Bloquear un día o unas horas hecho
RESERVATION-F03 Ajustar las reglas de reserva hecho
RESERVATION-F04 Elegir si las reservas se confirman solas hecho
RESERVATION-F05 Consultar cuánto queda libre en un día hecho
RESERVATION-F06 Tomar una reserva a mano (teléfono o mostrador) hecho
RESERVATION-F07 Confirmar una reserva hecho
RESERVATION-F08 Modificar una reserva (día, hora, comensales, mesa) hecho
RESERVATION-F09 Cancelar una reserva hecho
RESERVATION-F10 Marcar que no se presentaron hecho
RESERVATION-F11 Sentar a la reserva hecho
RESERVATION-F12 Completar la reserva hecho
RESERVATION-F13 Liberar las reservas pendientes que nadie confirmó declarado; en fase 1 el worker no ejecuta relay ni tareas (a mano, por el asistente o la API, sí)
RESERVATION-F14 Apuntar en la lista de espera hecho
RESERVATION-F15 Marcar contactado o quitar de la lista de espera hecho
RESERVATION-F16 Convertir una entrada de la lista de espera en reserva hecho
RESERVATION-F17 Reserva que llega por WhatsApp fuera: espera a la app de WhatsApp
RESERVATION-F18 Cambiar o anular la reserva por WhatsApp fuera: espera a la app de WhatsApp
RESERVATION-F19 Avisar por WhatsApp cuando el restaurante confirma fuera: espera a la app de WhatsApp
RESERVATION-F20 Borrar una reserva hecho
RESERVATION-F21 Unir las reservas de dos fichas de cliente declarado; en fase 1 el worker no ejecuta relay ni tareas
RESERVATION-F22 Borrar los datos personales de un cliente (RGPD) declarado; en fase 1 el worker no ejecuta relay ni tareas
RESERVATION-F23 Elegir una mesa libre para la reserva hecho

RESERVATION-F01 Crear y quitar franjas horarias

Estado: hecho Actor: responsable Pantalla: Disponibilidad → Franjas horarias Pasos: 1. Pulsa «Añadir franja», elige el día de la semana, desde y hasta, el máximo de reservas y, si quieres, el máximo de comensales. «Crear franja». 2. Para quitarla, «Quitar» en su fila y confirma. Las reservas que ya tenía se quedan. Entra: día, desde, hasta, máximo de reservas, máximo de comensales (opcional). Sale: la franja (avisa: reservation.time_slot.created, reservation.time_slot.deleted). Si falla: «Hasta» antes o igual que «Desde»: «La franja tiene que terminar después de empezar.»; una franja que se pisa con otra del mismo día: «Esa franja se pisa con otra del mismo día (13:00–16:00).».

RESERVATION-F02 Bloquear un día o unas horas

Estado: hecho Actor: responsable Pantalla: Disponibilidad → Fechas bloqueadas Pasos: 1. Pulsa «Añadir fecha bloqueada», escribe la fecha y el motivo (festivo, cierre, evento privado). 2. Deja «Todo el día» marcado o, para unas horas, quítalo y pon desde y hasta. 3. Ese día (o esas horas) no se aceptan reservas nuevas; las que ya había se quedan. 4. Para levantar el bloqueo, «Quitar» en su fila y confirma. Entra: fecha, motivo, todo el día o desde–hasta. Sale: el bloqueo (avisa: reservation.blocked_date.created, reservation.blocked_date.deleted). Si falla: sin horas cuando no es todo el día, o «hasta» antes que «desde»: lo dice el campo; ese día ya bloqueado a esa hora: «Esa fecha ya está bloqueada a esa hora.».

RESERVATION-F03 Ajustar las reglas de reserva

Estado: hecho Actor: responsable Pantalla: Ajustes Pasos: 1. Cambia comensales mínimos y máximos, antelación, duración por defecto, teléfono o correo obligatorios y los minutos para liberar una pendiente. «Guardar». 2. Las reglas valen para las reservas nuevas y para los cambios; las ya hechas no se tocan. Entra: las reglas. Sale: las reglas guardadas (avisa: reservation.settings.updated). Si falla: mínimo de comensales mayor que el máximo: lo dice el campo.

RESERVATION-F04 Elegir si las reservas se confirman solas

Estado: hecho Actor: responsable Pantalla: Ajustes Pasos: 1. Marca «Confirmar solas las reservas nuevas» y guarda. 2. Desde entonces toda reserva nueva (a mano, desde la lista de espera o por internet) nace Confirmada y retiene su mesa. Entra: el interruptor. Sale: el ajuste (avisa: reservation.settings.updated).

RESERVATION-F05 Consultar cuánto queda libre en un día

Estado: hecho Actor: empleado, responsable Pantalla: Disponibilidad → Ocupación; Reservas (barra del día) Pasos: 1. Elige la fecha (hoy por defecto). 2. Cada franja dice cuántas reservas lleva, su máximo, los comensales y las que quedan; la llena sale atenuada con «Lleno» y la que cae fuera del horario del negocio, con «Fuera de horario». 3. Se actualiza sola mientras entran, cambian o se cancelan reservas. Entra: la fecha. Sale: nada (consulta). Cuenta exactamente lo que cuenta la puerta del alta.

RESERVATION-F06 Tomar una reserva a mano (teléfono o mostrador)

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Reservas → «Nueva reserva» Pasos: 1. Busca al cliente por nombre o teléfono; si no está, escribe su nombre y su teléfono (se crea su ficha en Clientes, o se usa la que ya tiene ese teléfono). 2. Pon la fecha, la hora, los comensales y, si quieres, la mesa (RESERVATION-F23), la duración, el origen y las notas. «Reservar». 3. La reserva nace Pendiente (o Confirmada, si se confirman solas: entonces retiene su mesa). 4. Por voz: «reserva para 4 mañana a las 21 a nombre de Ana, su teléfono es el 600 111 222, en la mesa 5». Entra: cliente (o nombre y teléfono), fecha, hora, comensales, mesa, duración, origen, notas. Sale: la reserva, ligada a la ficha del cliente (avisa: reservation.reservation.created). Si falla (no se guarda nada y lo escrito se queda), en este orden: - un teléfono que no es de su país: el motivo de Clientes, en el campo Teléfono (antes que nada más: nunca después de «¿Reservar igualmente?»); - sin teléfono (o sin correo) cuando son obligatorios: «Este negocio pide un teléfono en cada reserva.»; - una hora ya pasada: «Esa hora ya ha pasado.»; - solo por internet o WhatsApp: comensales fuera de los límites («Ese número de comensales está fuera de los límites del negocio (1–20 comensales).»), menos antelación de la mínima («Hay que reservar con al menos 1 h de antelación.») o más allá de los días máximos («Solo se reserva hasta 30 días vista.»); - día bloqueado: «Esa fecha está bloqueada (festivo o cierre): ese día no se aceptan reservas.»; - negocio cerrado a esa hora (Horarios): «A esa hora el negocio está cerrado.»; - ninguna franja cubre esa hora: «No hay servicio a esa hora: ninguna franja la cubre.»; - franja llena: «Esa franja ya está completa para ese día.»; al personal se le pregunta «¿Reservar igualmente?» y, si lo confirma, la reserva entra (por internet o WhatsApp, nunca); - mesa fuera de servicio: «Esa mesa no se puede reservar: está bloqueada o fuera de servicio.»; mesa ya reservada a esa hora: «La mesa 5 ya tiene una reserva de 21:00 a 23:00.». Dos reservas a la vez sobre el último hueco o sobre la misma mesa y hora: entra una y la otra recibe su motivo (en la franja llena, el personal puede después reservar igualmente; en la mesa, nunca).

RESERVATION-F07 Confirmar una reserva

Estado: hecho Actor: empleado, responsable Pantalla: Reservas (fila → «Confirmar») Pasos: 1. «Confirmar» en una reserva Pendiente. 2. Pasa a Confirmada y, si tiene mesa, Mesas la retiene: desde una hora antes la mesa sale Reservada en el plano con el nombre y la hora (TABLE-F25). Entra: la reserva. Sale: la reserva confirmada (avisa: reservation.reservation.status_changed). Si falla: desde otro estado: «Esta reserva está confirmada: no se puede confirmar.»; con su mesa fuera de servicio (bloqueada, desactivada, borrada o en una zona desactivada), que no se podría retener: «La mesa 5 (Terraza) no se puede reservar: está bloqueada o fuera de servicio.», y sigue Pendiente.

RESERVATION-F08 Modificar una reserva (día, hora, comensales, mesa)

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Reservas (fila → «Editar», o tocar la fila) Pasos: 1. Cambia el día, la hora, los comensales, la duración, la mesa (o quítala), el contacto o las notas. «Guardar». 2. El cambio pasa la misma puerta que el alta (sin contar la propia reserva). Si estaba confirmada, Mesas mueve su retención a la mesa y la hora nuevas, o la suelta si se queda sin mesa (TABLE-F26). 3. Una reserva sentada, completada, cancelada o no presentada solo cambia sus notas. Entra: los campos cambiados. Sale: la reserva cambiada (avisa: reservation.reservation.updated). Si falla: los motivos de F06; en otro estado: «Esta reserva ya no se puede cambiar: solo sus notas.».

RESERVATION-F09 Cancelar una reserva

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Reservas (fila → «Cancelar») Pasos: 1. «Cancelar» en una reserva Pendiente o Confirmada; escribe el motivo si quieres y confirma. 2. Pasa a Cancelada, deja su hueco libre y Mesas suelta su mesa (TABLE-F27). Entra: la reserva y el motivo. Sale: la reserva cancelada (avisa: reservation.reservation.status_changed). Si falla: desde otro estado: «Esta reserva está sentada: su estado no puede pasar a cancelada.».

RESERVATION-F10 Marcar que no se presentaron

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Reservas (fila → «No presentado») Pasos: 1. «No presentado» en una reserva Pendiente o Confirmada y confirma. 2. Pasa a No presentada, deja su hueco libre y Mesas suelta su mesa. Entra: la reserva. Sale: la reserva no presentada (avisa: reservation.reservation.status_changed).

RESERVATION-F11 Sentar a la reserva

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Reservas (fila → «Sentar») Pasos: 1. Llega el grupo: «Sentar» en su reserva Pendiente o Confirmada. 2. Pasa a Sentada. Si tiene mesa, se sienta en Mesas con sus comensales y su cliente: se abre la cuenta de la mesa en Ventas y la retención se gasta (TABLE-F28). Si el grupo ya se sentó en esa mesa desde el plano (gastando la retención de esta reserva), solo se marca la reserva, con la cuenta de la mesa. Entra: la reserva. Sale: la reserva sentada y, si se pudo, la cuenta de la mesa (avisa: reservation.reservation.status_changed; Mesas avisa table.session.opened). Si falla: desde otro estado: «Esta reserva está completada: su estado ya no puede cambiar.»; la mesa fuera de servicio: «La mesa 5 (Terraza) no se puede reservar: está bloqueada o fuera de servicio.»; la mesa ocupada por otros (también por el grupo de otra reserva sentado antes, aunque Mesas gastara al sentarlo la retención de esta): «La mesa 5 (Terraza) está ocupada ahora mismo: libérala, o pasa la reserva a otra mesa antes de sentarla.»; si Mesas o Ventas rechazan sentar, su motivo. En todos, la reserva no cambia.

RESERVATION-F12 Completar la reserva

Estado: hecho Actor: empleado, responsable Pantalla: Reservas (fila → «Completar») Pasos: 1. El grupo se va: «Completar» en su reserva Sentada. Entra: la reserva. Sale: la reserva completada (avisa: reservation.reservation.status_changed). Si falla: sin sentar antes: «Esta reserva está confirmada: no se puede completar sin sentarla antes.».

RESERVATION-F13 Liberar las reservas pendientes que nadie confirmó

Estado: declarado; en fase 1 el worker no ejecuta relay ni tareas (la acción existe y se puede pedir a mano, por el asistente o la API) Actor: sistema Pantalla: ninguna Pasos: 1. Cada cuarto de hora, las reservas que siguen Pendientes pasados los minutos de los ajustes (15) desde su hora se cancelan con el motivo «Sin confirmar» y dejan su hueco libre. 2. Las confirmadas, sentadas y las de otros días no se tocan. Entra: la hora. Sale: las reservas liberadas (avisa: reservation.reservation.unconfirmed_released, solo si liberó alguna).

RESERVATION-F14 Apuntar en la lista de espera

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Lista de espera → «Añadir cliente» Pasos: 1. Busca al cliente o escribe su nombre y, si quieres, su teléfono (con teléfono se liga a su ficha como una reserva), la fecha, la hora que prefiere, los comensales y las notas. «Añadir a la lista de espera». Entra: cliente (o nombre y teléfono), fecha, hora preferida, comensales, notas. Sale: la entrada (avisa: reservation.waitlist.created). Si falla: sin nombre ni cliente: lo dice el formulario; un teléfono que no es de su país: el motivo de Clientes.

RESERVATION-F15 Marcar contactado o quitar de la lista de espera

Estado: hecho Actor: empleado, responsable Pantalla: Lista de espera (fila → «Contactado», «Quitar») Pasos: 1. «Contactado» cuando se le llama; «Quitar» (y confirmar) cuando ya no espera. Entra: la entrada. Sale: la entrada contactada o quitada (avisa: reservation.waitlist.updated, reservation.waitlist.deleted).

RESERVATION-F16 Convertir una entrada de la lista de espera en reserva

Estado: hecho Actor: empleado, responsable, asistente Pantalla: Lista de espera (fila → «Convertir») Pasos: 1. Hay sitio: «Convertir». Se crea la reserva con los datos de la propia entrada (cliente, fecha, hora preferida, comensales, notas), con la duración por defecto, y la entrada queda Convertida. 2. La conversión comprueba que la hora no haya pasado, el día bloqueado, el horario del negocio y la franja con sitio: es el personal quien la hace, a menudo para ahora mismo (sin antelación, días máximos ni límites de comensales). Con la franja llena, se pregunta «¿Convertir igualmente?». Entra: la entrada. Sale: la reserva (origen «Lista de espera») y la entrada convertida (avisa: reservation.reservation.created, reservation.waitlist.converted). Si falla: hora pasada, franja llena o día bloqueado: su motivo, y nada cambia; ya convertida: «Esta entrada ya se convirtió en reserva.».

RESERVATION-F17 Reserva que llega por WhatsApp

Estado: fuera — espera a la app de WhatsApp (whatsapp_inbox), que no está portada. La acción de alta ya acepta el origen WhatsApp con sus reglas (antelación mínima).

RESERVATION-F18 Cambiar o anular la reserva por WhatsApp

Estado: fuera — espera a la app de WhatsApp (no hecho tampoco en el producto actual).

RESERVATION-F19 Avisar por WhatsApp cuando el restaurante confirma

Estado: fuera — espera a la app de WhatsApp (no hecho tampoco en el producto actual).

RESERVATION-F20 Borrar una reserva

Estado: hecho Actor: administrador, propietario Pantalla: Reservas (fila → «Borrar») Pasos: 1. «Borrar» y confirma. Mejor cancelar: guarda el motivo. 2. La reserva desaparece del libro y Mesas suelta su mesa. Entra: la reserva. Sale: nada (avisa: reservation.reservation.deleted y reservation.reservation.status_changed con el estado deleted).

RESERVATION-F21 Unir las reservas de dos fichas de cliente

Estado: declarado; en fase 1 el worker no ejecuta relay ni tareas (la reacción existe y está probada) Actor: sistema Pantalla: ninguna Pasos: 1. En Clientes se unen dos fichas de la misma persona. 2. Sus reservas y sus entradas de espera pasan a la ficha que queda; el nombre con el que reservaron no cambia. Entra: el aviso customer.customer.merged (id la que queda, absorbed_id la absorbida). Sale: reservas y entradas re-apuntadas (avisa: reservation.customer.reassigned, solo si movió alguna). Repetirlo no cambia nada.

RESERVATION-F22 Borrar los datos personales de un cliente (RGPD)

Estado: declarado; en fase 1 el worker no ejecuta relay ni tareas (la reacción existe y está probada) Actor: sistema Pantalla: Reservas, Lista de espera Pasos: 1. En Clientes se borran los datos personales de una ficha. 2. Sus reservas se quedan sin nombre, teléfono, correo, notas, notas internas ni motivo de cancelación, y sus entradas de espera sin nombre, teléfono, correo ni notas (también las quitadas). La pantalla dice «Cliente borrado». 3. Se conservan el día, la hora, los comensales, la mesa, el estado y el enlace a la ficha. El nombre también se borra de los avisos que sus reservas dejaron en el registro de avisos (status_changed y updated lo llevan para Mesas). Mesas olvida el nombre de sus retenciones por su cuenta (TABLE-F31). Entra: el aviso customer.customer.erased (id de la ficha). Sale: reservas y entradas sin datos personales (avisa: reservation.customer.erased, solo si cambió alguna). Repetirlo no cambia nada.

RESERVATION-F23 Elegir una mesa libre para la reserva

Estado: hecho Actor: empleado, responsable, asistente Pantalla: formulario de reserva → Mesa Pasos: 1. Con la fecha, la hora y los comensales puestos, el campo Mesa ofrece las mesas en servicio que están libres a esa hora (sin otra reserva viva que se pise), primero las que caben al grupo, con su aforo y su zona; las que se quedan pequeñas salen avisadas, y se pueden elegir igual. 2. Por voz: «en la mesa 5» o «en la 4 de la terraza». Entra: fecha, hora, duración, comensales. Sale: nada (consulta).

Reservas: lo que entra y lo que sale

Todo se puede pedir por las pantallas, por el asistente (por voz o por texto, con la sesión de la propia persona) y por la API, con las mismas reglas y los mismos permisos. Pensado para la voz: una reserva se nombra por su id o por el nombre o el teléfono del cliente con su fecha («la reserva de Ana de mañana»); una mesa por su id o por su número («mesa 5»), con la zona si el número se repite; un cliente por su id, su nombre o su teléfono. Si una referencia casa con varias, se rechaza diciendo cuáles (409 *_ambiguous).

Lo que ofrece: consultas (leen, no cambian nada)

Qué da Quién puede Flujos Servicio
Las reservas de unos días (o de todo el libro buscando), con filtros, orden y páginas (hasta 100) ver reservas F05–F12 reservation.reservation.list
Una reserva ver reservas F08 reservation.reservation.get
Un día: cubiertos, reservas, bloqueos, horario del negocio y ocupación de cada franja ver reservas F05 reservation.availability.day
Las mesas libres para una fecha, hora, duración y grupo ver reservas F23 reservation.availability.tables
Las franjas horarias, con filtros y páginas ver franjas F01 reservation.time_slot.list
Las fechas bloqueadas, con filtros y páginas ver bloqueos F02 reservation.blocked_date.list
La lista de espera, en orden de llegada, con búsqueda, filtros y páginas ver lista de espera F14–F16 reservation.waitlist.list
Las reglas (con la zona horaria del negocio) ver ajustes F03, F04 reservation.settings.get

Todas se pueden seguir en vivo.

Lo que ofrece: acciones (cambian datos)

Qué hace Quién puede Flujos Servicio
Apunta una reserva (overbook llena a sabiendas una franja llena, solo el personal) apuntar reservas F06 reservation.reservation.create
Cambia una reserva cambiar reservas F08 reservation.reservation.update
Confirma, sienta, completa, cancela o marca no presentada cambiar reservas F07, F09–F12 reservation.reservation.confirm, .seat, .complete, .cancel, .no_show
Borra una reserva borrar reservas F20 reservation.reservation.delete
Libera las pendientes vencidas cambiar reservas F13 reservation.reservation.release_unconfirmed
Crea o quita una franja cambiar franjas F01 reservation.time_slot.create, .delete
Bloquea o desbloquea una fecha cambiar bloqueos F02 reservation.blocked_date.create, .delete
Apunta, marca contactada, convierte (también a sabiendas en una franja llena) o quita una entrada de espera cambiar lista de espera F14–F16 reservation.waitlist.create, .update, .convert, .delete
Guarda las reglas cambiar ajustes F03, F04 reservation.settings.update

Solo para la plataforma (sin ruta en la API, como sistema): reservation.customer.reassign y reservation.customer.erase (reacciones a Clientes).

Lo que avisa

Aviso Cuándo Qué lleva
reservation.reservation.created Alta (también desde la lista de espera) id, status, table_id, date, time, party_size
reservation.reservation.status_changed Confirmar, sentar, completar, cancelar, no presentado, borrar id, status (deleted al borrar), previous_status, table_id, date, time, duration_minutes, party_size, guest_name, customer_id
reservation.reservation.updated Cambiar id y los campos que cambiaron (table_id, date, time, duration_minutes, party_size, guest_name); table_id vacío = sin mesa
reservation.reservation.deleted Borrar id
reservation.reservation.unconfirmed_released Liberar pendientes count
reservation.time_slot.created, .deleted Franjas id
reservation.blocked_date.created, .deleted Bloqueos id, date
reservation.waitlist.created, .updated, .converted, .deleted Lista de espera id (reservation_id al convertir)
reservation.settings.updated Guardar las reglas los campos cambiados
reservation.customer.reassigned, reservation.customer.erased Reacciones a Clientes id (y absorbed_id)

status_changed y updated llevan el nombre del cliente y su ficha porque es la carga que Mesas necesita para pintar la retención (su contrato, TABLE-F25–F27); los demás, solo ids y números.

A qué reacciona

Aviso De Qué hace Servicio
customer.customer.merged Clientes Pasa sus reservas y entradas a la ficha que queda (F21) reservation.customer.reassign
customer.customer.erased Clientes Borra sus datos personales de reservas y entradas (F22) reservation.customer.erase

Lo que necesita de otras apps

  • Mesas (requisito): la mesa de cada reserva (sus mesas, para elegirla y comprobar que está en servicio) y, en la misma transacción de cada cambio, la retención de su mesa: table.hold.sync_reservation (confirmar, cancelar, no presentada, borrar), table.hold.move_reservation (quitar la mesa de una confirmada) y table.hold.release (sentar pronto); sentar llama a table.session.open con la sesión de quien sienta.
  • Clientes (requisito): la ficha del cliente (find_customer), buscarla por teléfono (customer.customer.by_phone) y crearla (customer.customer.create), con la sesión de quien reserva.
  • Horarios (requisito): el horario del negocio de cada día (schedule.hours.for_range), leído en nombre de quien reserva aunque no tenga permiso en Horarios.

Quién la usa

App Para qué Servicio
Mesas Retener, mover y soltar la mesa de cada reserva sus avisos y sus acciones de plataforma

Quién puede qué

Permiso Propietario Administrador Responsable Empleado Servicio
Ver reservas sí sí sí sí reservation.view_reservation
Apuntar reservas sí sí sí sí reservation.add_reservation
Cambiar reservas (y su estado) sí sí sí sí reservation.change_reservation
Borrar reservas sí sí no no reservation.delete_reservation
Ver franjas sí sí sí sí reservation.view_timeslot
Crear y quitar franjas sí sí sí no reservation.change_timeslot
Ver bloqueos sí sí sí sí reservation.view_blockeddate
Bloquear y desbloquear fechas sí sí sí no reservation.change_blockeddate
Ver la lista de espera sí sí sí sí reservation.view_waitlistentry
Cambiar la lista de espera sí sí sí sí reservation.change_waitlistentry
Ver ajustes sí sí sí sí reservation.view_settings
Cambiar ajustes sí sí sí no reservation.manage_settings

Los papeles llegan del SaaS con prefijo (hub_owner, hub_admin, hub_manager, hub_employee). Sentar pide además «Sentar» de Mesas (table.add_session) y «Montar la cuenta» de Ventas (sale.add_sale); apuntar con un cliente nuevo, «Gestionar clientes» de Clientes (customer.manage): los cuatro papeles los tienen.