Gestión de reservas
Desde la pestaña Reservas puedes ver, filtrar y gestionar todas las reservas del local en tiempo real.
🔍 Filtros
- Filtra por fecha usando el selector de día o las tarjetas de acceso rápido (Hoy, Ayer, Esta semana…)
- Filtra por turno con el desplegable
- Filtra por estado pulsando las tarjetas de estadísticas. Las tarjetas de estado (Pendientes, Confirmadas, En casa…) se acumulan sobre el filtro de fecha activo: si antes filtraste por hoy y pulsas «Pendientes», verás solo las pendientes de hoy.
- Total hoy fija siempre la fecha de hoy y limpia el filtro de estado. Los contadores de estado muestran el desglose de la fecha seleccionada en cada momento.
- Usa la búsqueda rápida para localizar reservas por código, nombre, teléfono, fecha, estado o notas.
- Usa Columnas para mostrar u ocultar campos de la tabla según lo que necesites revisar.
- Pulsa Todas para limpiar todos los filtros.
↕️ Orden
Pulsa el nombre de una columna para ordenar ascendente o descendente. Usa Orden múltiple para combinar varias columnas.
📅 Calendario
Alterna entre vista de tabla y calendario para revisar las reservas agrupadas por día y hora.
�️ Reprogramar arrastrando
En la vista de calendario, arrastra cualquier tarjeta de reserva a otra columna de día para cambiar su fecha. El sistema actualiza la reserva automáticamente y muestra un aviso de confirmación.
�👁️ Ver ficha
Pulsa el botón 👁️ para abrir la ficha completa de la reserva: nombre, contacto, número de personas, turno, franja horaria, notas y estado.
✏️ Editar
Solo disponible para usuarios con permiso can_edit (por defecto, admin). Permite modificar todos los datos de la reserva y guardar cambios.
🗑️ Eliminar
Solo disponible para usuarios con permiso can_delete (por defecto, admin). Elimina permanentemente la reserva tras confirmación. Esta acción no se puede deshacer.
☑️ Acciones en bloque
Marca el checkbox de una o varias filas de la tabla para seleccionarlas. Aparece automáticamente una barra de acciones en la que puedes elegir el estado de destino y pulsar Aplicar para cambiar todas las reservas seleccionadas de una vez. Usa Deseleccionar para cancelar la selección sin hacer cambios.
- El checkbox del encabezado selecciona o deselecciona toda la página.
- Requiere permiso
can_cancelo rol admin. - Máximo 200 reservas por operación.
📷 Escanear QR
El botón Escanear QR abre la cámara del dispositivo para leer el QR de la reserva enviado por email. Si el QR es válido, la reserva pasa a En casa y queda registrado el check-in.
- Requiere permiso
manage_reservations. - Si el navegador no permite cámara o lector QR, puedes pegar manualmente el enlace/token del QR.
- Respeta las mismas reglas de llegada, estado y disponibilidad de mesa que el check-in normal.
R-2026-000013, pensado para buscarla y compartirla con el cliente sin depender del ID interno.
Estados de una reserva
| Estado | Significado |
|---|---|
| pendiente | Reserva recibida, aún sin confirmar |
| confirmada | Reserva aceptada por el local |
| 🏠 en casa | El cliente ha llegado y está actualmente en el local. Solo activable dentro del margen de llegada configurado |
| cancelada | Reserva anulada |
| no show | El cliente no se presentó |
| completada | Reserva finalizada correctamente |
can_cancel pueden cambiar el estado desde la ficha. Los admins pueden además editar todos los campos.
Una reserva completada queda cerrada y ya no se puede modificar. Las reservas canceladas o no show solo se pueden modificar o recuperar mientras sigan dentro de la ventana válida: primero se usa el margen de llegada; si no está configurado, el tiempo de estancia máxima; y si tampoco existe, solo el mismo día de la reserva.
Clientes frecuentes
La pestaña Clientes (solo para admin) muestra un registro automático de los clientes que han hecho al menos una reserva en este local y han facilitado su número de teléfono. No hay que crear clientes manualmente: el sistema los registra en el momento de la reserva.
🔍 Búsqueda
Filtra la lista por nombre o teléfono en tiempo real usando el campo de búsqueda superior.
📊 Estadísticas
Por cada cliente se muestra: total de reservas, fecha de última visita, reservas completadas y no-shows.
📋 Historial
Pulsa 📋 Historial junto a cualquier cliente para ver el listado completo de sus reservas en este local con todos sus detalles.
¿Cómo se registra un cliente?
Portal del cliente
El Portal del cliente es una pequeña cuenta privada para clientes repetitivos. No requiere usuario ni contraseña: se abre desde un enlace seguro asociado a una reserva, usando el mismo token privado que ya protege la autogestión de la reserva.
🔗 Acceso privado
Si el módulo está activo, el cliente ve el bloque Mi cuenta al abrir su enlace de reserva. También recibe un botón Ver mi cuenta e historial en los emails de reserva.
📅 Historial
Muestra próximas reservas, historial reciente, total de reservas, visitas completadas, personas acumuladas y hora favorita.
🏆 Top productos
Si existen tickets de POS vinculados a sus reservas, el portal muestra los productos que más ha pedido, unidades y gasto acumulado por producto.
🔒 Privacidad
El cliente solo ve información asociada a su identidad en este local. El sistema cruza cliente, teléfono o email de la reserva actual para localizar su historial.
Cómo lo usa el cliente
customer_portal esté activo.customer_portal. Depende de reservations y clients. Si no está activo, no aparece el acceso público ni el botón en los emails.
Configuración de turnos
Los turnos son los bloques de servicio del local (p. ej. Desayuno, Comida, Cena). Cada turno tiene un nombre, los días de la semana en que se ofrece, y una o varias franjas horarias.
📅 Días activos
Cada turno puede estar activo días concretos de la semana. Los días marcados son los únicos en que ese turno aparece disponible en el formulario público.
🕑 Franjas horarias
Cada turno puede tener múltiples franjas (ej. 09:00, 09:30, 10:00). Los clientes eligen una franja al reservar.
✅ Activo / Inactivo
Un turno inactivo no aparece en el formulario público ni en los filtros de reservas. Útil para pausar un servicio temporalmente.
Cómo crear un turno nuevo
Bloqueos
La pestaña Bloqueos permite cerrar la agenda de reservas durante uno o varios días, o solo durante una franja horaria concreta, por ejemplo festivos, vacaciones, reformas o eventos privados.
📅 Rango de fechas
Un bloqueo puede ser de un solo día o abarcar varios días. Si no indicas horas, cualquier fecha dentro del rango queda no disponible para reservar.
🕐 Franja horaria
Si completas hora inicio y hora fin, solo se desactivan las horas de llegada dentro de esa franja. El resto del día sigue disponible.
💬 Mensaje
El mensaje se muestra dentro del formulario público cuando el cliente elige una fecha bloqueada.
✅ Activo / Inactivo
Puedes dejar un bloqueo configurado pero inactivo para reutilizarlo más adelante sin eliminarlo.
Gestión de usuarios
Desde la pestaña Usuarios (solo visible para el admin) puedes crear y gestionar las cuentas del personal del local.
👤 Admin
Acceso completo al panel: reservas, turnos, usuarios, configuración, roles y clientes. El admin inicial se crea en el setup; pueden crearse más usuarios con rol admin desde este panel.
🧑💼 Staff
Acceso básico al panel de reservas. Sus permisos adicionales (ver clientes, editar, cancelar, eliminar…) dependen del rol que tenga asignado. Consulta la sección Roles y permisos.
Cómo crear un usuario
Editar o eliminar un usuario
Para eliminar un usuario staff, pulsa el botón 🗑️ y confirma la acción.
Mesas y plano visual
La pestaña Mesas permite crear áreas y mesas. El plano se abre desde Reservas > Plano visual como una vista de trabajo que reemplaza temporalmente la lista de reservas.
Plano visual
Filtra por fecha, hora y área para ver qué mesa estará libre, pendiente, confirmada, en casa, completada o bloqueada.
Editar plano
Activa Editar plano para mover o redimensionar mesas. Las posiciones se guardan automáticamente.
Figuras del local
En modo edición puedes agregar cuadrados, círculos o triángulos. Para cambiar el texto, haz clic dentro de la figura y escribe directamente.
Acciones rápidas
Desde cada mesa ocupada puedes abrir la reserva, marcar llegada, completar, marcar no show o cambiar la mesa asignada.
Título del panel
Al abrir el plano visual, el título del panel cambia de Reservas a Plano visual. Al cerrar el plano vuelve a Reservas.
🏠 Barra de estancia
Las mesas en estado En casa muestran la hora de llegada y la hora prevista de salida, más una barra de progreso verde que avanza conforme transcurre el tiempo. Requiere Tiempo de estancia > 0 en Configuración → Reservas.
🏷️ Características de la mesa
Al crear o editar una mesa puedes marcar tres atributos opcionales:
- ♿ Accesible — mesa adaptada para movilidad reducida
- 👧 Apto para niños — zona o disposición adecuada para familias
- 🪑 Trona disponible — la mesa dispone de trona de bebé
El modo de asignación accesibilidad prioritaria usa estas marcas para elegir automáticamente la mesa más adecuada para cada reserva.
🕐 Ajustes temporales de capacidad
La pestaña Ajustes temporales permite reducir provisionalmente los comensales efectivos de una mesa para un rango de fechas y horas. El motor de reservas usa esa capacidad reducida durante ese período y vuelve automáticamente a la capacidad original cuando el ajuste caduca.
Caso típico: quieres unir la mesa 2 (2 pax) con la mesa 3 (3 pax) para un grupo de 3. Sin ajuste, el sistema rechaza la combinación porque la mesa 3 sola ya cubre las 3 plazas. Reduciendo temporalmente la mesa 3 a 1 pax, la combinación ya no es redundante y queda disponible.
- Ve a Mesas → Ajustes temporales y pulsa Nuevo ajuste.
- Selecciona la mesa cuya capacidad quieres reducir.
- Indica los comensales efectivos que tendrá durante el período (p. ej. 1).
- Fija la fecha desde y fecha hasta que abarca el ajuste.
- Si el ajuste solo aplica en un rango horario, desactiva Todo el día y añade hora de inicio y fin.
- Guarda. El sistema aplicará la capacidad reducida a partir de ese momento y la descartará cuando el período termine.
Ocupación por franja
La pestaña Ocupación permite revisar, por fecha y turno, cuántas personas hay reservadas en cada franja horaria y compararlo con la capacidad configurada.
Lectura rápida
Cada fila muestra la hora, una barra de ocupación con el porcentaje dentro y el contador ocupación / total. Si el local no tiene límite de capacidad, se muestra el símbolo ∞.
Colores por porcentaje
Por defecto, bajo es 0–29 %, medio empieza en 30 %, alto empieza en 80 %, lleno es 100 % y sobreventa es más de 100 %.
Capacidad usada
Si Mesas está activo, la capacidad se calcula sumando los comensales de las mesas activas. Si no, usa Máx. personas por franja de Configuración → Reservas.
Pedidos y tickets
El módulo Pedidos permite abrir tickets de consumo ligados a una reserva, una mesa, un walk-in o una venta manual. Requiere que el módulo orders esté activado por el superadmin. Permiso necesario para acceder: view_orders.
🎫 Código de ticket
Formato T-YYYY-NNNNNN, generado automáticamente. Único e irrepetible dentro del local.
📌 Orígenes
- Reserva — ticket asociado a una reserva existente
- Mesa — vinculado a una mesa del plano
- Walk-in — cliente sin reserva previa
- Manual — venta libre sin asignación
- POS — creado desde la pantalla de caja del terminal
🔄 Estados del ticket
- Abierto — se pueden seguir añadiendo ítems
- Cerrado — ticket bloqueado, pendiente de pago
- Pagado — pago registrado
- Cancelado — ticket anulado
🍳 Estado de cocina
Los tickets POS tienen una columna Cocina en la lista de pedidos que muestra el estado KDS en tiempo real. La lista se refresca automáticamente cada 10 segundos.
- — sin enviar
- Enviado — cocina lo recibió
- En Preparación — en proceso
- Listo ✓ — listo para servir
- Servido — el POS confirmó que el pedido salió a sala
➕ Añadir ítems
Dentro del ticket abierto, busca un producto del catálogo, elige variante si la tiene, introduce la cantidad y el precio unitario. El total se recalcula al instante.
🗑️ Eliminar ítems
Solo se pueden eliminar ítems cuando el ticket está en estado Abierto. Pulsa el botón de borrado en la línea del ítem.
💰 Total
Suma automática de todos los ítems del ticket, mostrada siempre actualizada en el pie del detalle.
Cómo crear un ticket
Enviar a cocina (tickets POS)
Los tickets creados desde el terminal POS pueden enviarse a la pantalla de cocina (KDS) directamente desde su ficha. El botón solo aparece si el módulo kds está activado y el ticket no ha sido enviado aún.
view_orders permite ver la lista y abrir tickets. manage_orders permite crear, editar ítems, cambiar estados y enviar a cocina. Los admins tienen ambos permisos por defecto.
POS / Punto de venta
El módulo POS permite organizar el catálogo de productos en grupos temáticos, configurar terminales y operar una pantalla de caja completa donde se toman pedidos y se asignan mesas. Requiere que el módulo pos esté activado por el superadmin. Para acceder se necesita alguno de los permisos de terminales o grupos POS.
🗂️ Grupos de productos
Los grupos son compartidos por todos los locales de la organización. Cada grupo tiene nombre, color, orden de visualización y una lista de productos del catálogo.
🖥️ Terminales POS
Cada terminal es propio de un local. Tiene nombre, descripción y una selección de grupos del catálogo que muestra. Puedes crear N terminales en el mismo local.
🔗 Asignar grupos al terminal
Desde la lista de terminales, pulsa Grupos para seleccionar cuáles aparecen en ese terminal. Los grupos se ordenan según su campo de orden.
🍽️ Asignar productos a un grupo
Desde la lista de grupos, pulsa Productos. Aparece un buscador con los productos activos del catálogo. Marca los que quieras incluir y guarda.
Cómo configurar un terminal POS
Pantalla de caja (cashier)
Al pulsar Abrir en un terminal activo se despliega una pantalla a pantalla completa con el panel de productos a la izquierda y el carrito a la derecha. En móvil se muestran como dos pestañas inferiores (Productos y Pedido).
🧾 Panel de productos
Arriba aparecen los grupos del terminal como pestañas. Al seleccionar un grupo se muestran sus productos en cuadrícula. Toca un producto para añadirlo al carrito; toca varias veces para aumentar la cantidad.
🛒 Carrito
Muestra las líneas del pedido con nombre, cantidad y precio por línea. Usa los botones − / + para ajustar unidades. El total se actualiza al instante. Pulsa Vaciar para limpiar el carrito sin crear ticket.
🪑 Asignar mesa
Antes de crear el ticket pulsa Asignar mesa para abrir el selector de mesas. Una vez asignada, el nombre de la mesa aparece en azul en el carrito. Puedes quitar la asignación con el botón ✕.
🎫 Crear ticket
Pulsa Crear ticket para registrar el pedido. Si hay una mesa asignada con un ticket ya abierto, los productos se añaden a ese ticket existente. En caso contrario se crea un ticket nuevo. Al finalizar, la pantalla navega automáticamente a Pedidos donde el camarero puede enviar el pedido a cocina.
Aviso de listos
Cuando cocina marca tickets como Listo, aparece en la cabecera del POS un aviso pulsante Listos N. Al pulsarlo se abre una lista con los pedidos listos y un botón Servido por cada pedido.
Selector de mesas y walk-in
El selector muestra todas las mesas activas del local agrupadas por área. Un código de color indica el estado real de cada mesa en ese momento:
🟢 Disponible
La mesa está libre y sin ningún ticket abierto. Al seleccionarla aparece el wizard walk-in: elige el número de comensales (1–20) y pulsa Ocupar mesa. El sistema crea automáticamente una reserva en estado En casa para hoy, asigna la mesa y genera un ticket vacío listo para recibir productos. La mesa queda bloqueada para nuevas reservas a partir de ese momento.
🔵 Ocupada / Ticket abierto
La mesa tiene una reserva en estado En casa o ya existe un ticket abierto sobre ella. Al seleccionarla el carrito se vincula a ese ticket y los productos que añadas se agregarán al pedido ya iniciado, sin crear uno nuevo.
⚫ Reservada (no llegó)
La mesa tiene una reserva confirmada o pendiente para hoy pero el cliente aún no ha llegado. No se puede asignar desde el POS hasta que el cliente haga el check-in y la reserva pase a En casa.
Flujo de operación típico
Acceso directo al terminal (URL dedicada)
Además de abrir el terminal desde el panel de admin, existe una URL exclusiva para el modo caja que no muestra ningún elemento del panel de administración. Es ideal para tablets o dispositivos fijos en la barra o sala.
URL de acceso
Navega a /{slug}/pos/ desde cualquier navegador. Aparece directamente una pantalla de login sin el panel de administración.
Selección de terminal
Tras iniciar sesión se muestran los terminales accesibles para ese usuario. Si solo tiene uno asignado, el terminal se abre directamente sin pasar por la lista.
Sesión compartida
Si el mismo navegador ya tiene una sesión activa del panel de admin, la página POS la detecta y salta directamente a la selección de terminal sin pedir login de nuevo.
Salir del terminal
El botón ← Salir en la cabecera vuelve a la lista de terminales del mismo local. El cierre de sesión se gestiona desde la pantalla de selección de terminal.
/{slug}/pos/ como acceso directo en la pantalla de inicio del dispositivo de caja para un acceso de un solo toque.
view_pos_terminals permite ver terminales y abrir caja; manage_pos_terminals permite crear, editar y eliminar terminales. view_pos_groups y manage_pos_groups controlan la biblioteca de grupos y productos del POS. Los admins tienen todos los permisos por defecto.
KDS / Cocina
El módulo KDS conecta el camarero con la cocina en tiempo real. Los pedidos creados desde el POS viajan a la pantalla de cocina al pulsar Enviar a cocina, progresan por tres estados y avisan al camarero cuando están listos para servir. Requiere los módulos orders, pos y kds activos.
Tablero de cocina
Tres columnas
El tablero muestra Enviado, En preparación y Listo. Cada ticket POS enviado aparece en la columna correspondiente a su estado actual.
Mover tickets
Arrastra una tarjeta a otra columna para cambiar el estado del ticket completo. También puedes usar los botones de acción dentro de la tarjeta. Funciona con ratón y con pantallas táctiles.
Ítems individuales
Toca una línea dentro de la tarjeta para alternarla entre Pendiente y Listo. Las líneas listas aparecen resaltadas para que cocina identifique rápido lo que falta.
Tiempo real
El tablero se refresca solo cada 2,5 segundos sin recargar la página. El botón Actualizar fuerza una recarga inmediata. Orden alterna la dirección de ordenación por hora de creación.
Origen POS exclusivo
Solo aparecen tickets abiertos de origen POS que han sido enviados a cocina. Los tickets manuales, de reserva o sin enviar no se muestran en el tablero.
Último estado: servido
Cuando el POS marca un pedido como Servido, deja de mostrarse como pendiente en cocina y desaparece del aviso de listos.
Pantalla completa
Usa Ocultar menú en la barra lateral para maximizar el espacio del tablero. Ideal para una tablet o monitor dedicado en la cocina.
Vista del camarero (tab Pedidos)
Columna «Cocina»
La lista de pedidos incluye una columna Cocina con el badge de estado KDS para cada ticket POS: Enviado, En Preparación o Listo ✓. Se actualiza automáticamente cada 10 segundos.
Banner «Listo para servir»
Cuando la cocina marca un ticket como Listo, el detalle del ticket muestra un banner verde pulsante «Listo para servir». El camarero solo tiene que abrir el ticket para verlo.
Alerta en POS
Si el camarero está dentro de la pantalla de caja, verá el aviso Listos N. Al abrirlo puede marcar cada ticket como Servido sin salir del POS.
Botón «Enviar a cocina»
Visible en el detalle del ticket cuando el pedido es POS, está abierto y todavía no ha sido enviado. Tras pulsarlo el badge cambia a Enviado y el ticket aparece en el tablero KDS al instante.
Flujo completo camarero–cocina
view_kds permite abrir el tablero de cocina. manage_kds permite mover tickets y marcar ítems. manage_orders permite enviar tickets a cocina desde la pestaña Pedidos.
Proveedores
La pestaña Proveedores permite mantener un directorio de los proveedores de la organización y registrar los precios por producto de cada uno. Los proveedores son compartidos entre todos los locales de la organización. Requiere que el superadmin active el módulo vendors.
Directorio de proveedores
Cada proveedor guarda nombre, NIF/CIF/RUC, persona de contacto, teléfono, email, dirección, condiciones de pago, moneda y notas internas. Se pueden marcar como activos o inactivos sin eliminarlos.
Precios por producto
Dentro de cada proveedor puedes añadir los productos del catálogo que suministra con su costo unitario, moneda, cantidad mínima de pedido y plazo de entrega en días. Un producto puede tener precio en N proveedores distintos.
Vista desde el producto
Al abrir la ficha de cualquier producto en la pestaña Productos, si el módulo Proveedores está activo, aparece una sección "Proveedores" con todos los proveedores que lo suministran y sus precios, para comparar fácilmente.
Flujo habitual
- Ve a Proveedores y pulsa + Proveedor para crear el proveedor con sus datos de contacto y condiciones de pago.
- Una vez guardado, se abre de nuevo el modal con la sección Precios por producto. Pulsa + Añadir producto.
- Selecciona el producto del catálogo, introduce el costo unitario, la moneda, la cantidad mínima y el plazo de entrega. Guarda el precio.
- Repite para todos los productos que suministra ese proveedor.
- Para ver los proveedores de un producto, abre la ficha del producto en Productos → Editar. Verás la sección "Proveedores" al final del formulario.
view_vendors permite consultar el directorio y los precios. manage_vendors permite crear, editar y eliminar proveedores y precios. El módulo requiere que catalog también esté activo.
Catálogo
La pestaña Catálogo permite preparar productos para futuros módulos de pedidos, pagos, facturación e inventario. El catálogo es global para la organización, y cada local decide qué productos ofrece y si están disponibles ahora. Este módulo no gestiona precios: los precios irán en el módulo de listas de precios.
Categorías
Organizan los productos por familias como cafés, brunch, repostería o bebidas. Son compartidas por los locales de la organización.
Productos
Guardan los datos maestros: nombre, descripción base, GTIN, categoría, variantes, modificadores y alérgenos.
Variantes
Sirven para tamaños o versiones del producto, por ejemplo pequeño, mediano y grande. Se configuran dentro de la ficha del producto.
Modificadores y alérgenos
Los modificadores son opciones como leche vegetal o extra shot. Los alérgenos permiten marcar información alimentaria como gluten, lactosa o frutos secos. Ambos se comparten dentro de la organización.
catalog. Por defecto está desactivado en nuevas organizaciones/locales. El superadmin debe activarlo para que aparezca en el menú del admin y para que la API acepte peticiones.
Web pública
La pestaña Web pública permite crear la página comercial del local, separada del formulario de reservas. La web vive en /{slug}/web/. El botón de reserva es opcional y solo aparece si Reservas está activo y la configuración lo permite. Requiere que el superadmin active el módulo public_site.
Inicio / Hero
Configura si la web está activa, el título principal, subtítulo, imagen hero, texto del botón de reserva y texto del botón secundario hacia la carta.
Catálogo público
Si el módulo Productos está activo, usa el catálogo global de la organización y solo muestra productos ofrecidos, disponibles y visibles para este local. No crea productos duplicados. Si Productos está desactivado, la web funciona sin carta.
Productos destacados
Marca productos como destacados, define una etiqueta como Nuevo o Popular, asigna una imagen pública y controla el orden en que aparecen.
Galería
Permite añadir imágenes del local, barra, productos o ambiente. Cada imagen tiene título, texto alternativo, orden y estado visible/invisible.
SEO
Configura cómo se presenta la web fuera de la propia página. Meta title es el título que usan buscadores y pestañas; Meta description resume el local en resultados y enlaces compartidos; Imagen Open Graph es la imagen de vista previa cuando se comparte la web en redes, WhatsApp o herramientas similares.
Contacto y redes
Define dirección, teléfono, email, WhatsApp, Instagram, Facebook, TikTok y enlace a Google Maps.
Cómo publicar la web
Configuración del local
En la pestaña Configuración (solo admin) puedes personalizar el local. La pantalla se organiza en subpestañas: General, Notificaciones, Canales, Reservas y Mesas.
La configuración está dividida en varias secciones:
🏠 Información del local
| Campo | Descripción |
|---|---|
| Emoji / ícono | Icono decorativo que acompaña al nombre del local en la página pública. |
| Nombre del local | Aparece en el encabezado de la página pública y en la pantalla de login. |
| Tagline | Subtítulo o lema del local, visible bajo el nombre en la página pública. |
| Teléfono de contacto | Número de contacto que se muestra en la página pública. |
| Horario de apertura | Texto libre con los horarios del local, visible en la página pública. |
🏢 Tipo de negocio
🔔 Notificaciones push
| Campo | Descripción |
|---|---|
| Activar notificaciones push | Interruptor general de Firebase Cloud Messaging para el local. Si está apagado, no se envían avisos al equipo ni al cliente. |
| Clave pública VAPID | Clave pública de Firebase Cloud Messaging necesaria para que el navegador pueda suscribirse. Se obtiene en Firebase Console, en Cloud Messaging, Web Push certificates. |
| Modal tras reservar | Opcional. Muestra una ventana al cliente justo después de reservar para invitarle a activar notificaciones en ese dispositivo. |
| Recordatorio antes de la reserva | Opcional. Envía un push al cliente suscrito unos minutos antes de la hora reservada. Configura los minutos de antelación y selecciona la zona horaria del local en el desplegable con GMT, por ejemplo GMT+02:00 - Europe/Madrid o GMT-05:00 - America/Lima. |
| Nueva reserva | Permite decidir si el equipo recibe un aviso cuando entra una reserva nueva. |
| Destinatarios del equipo | Permite enviar avisos a todos los usuarios con push activo, solo a usuarios seleccionados, o a nadie del equipo. |
| Estados que notifican al equipo | Define qué cambios de estado generan avisos internos: pendiente, confirmada, cancelada, no show o completada. |
| Estados que notifican al cliente | Define qué cambios de estado se notifican únicamente al cliente que hizo la reserva. |
| Aislamiento por local | Las suscripciones, la configuración y los envíos se guardan por local. Un local no usa tokens ni reglas de notificación de otro local. |
✉️ Email transaccional
| Campo | Descripción |
|---|---|
| Activar envío de emails | Permite enviar desde el admin el enlace privado para gestionar una reserva. |
| Servidor SMTP / Puerto / SSL | Datos técnicos del proveedor de email, por ejemplo Gmail, Outlook, Brevo SMTP u otro servicio. |
| Usuario y contraseña SMTP | Credenciales de la cuenta remitente o contraseña de aplicación del proveedor. |
| Email y nombre remitente | Identidad que verá el cliente al recibir el correo. |
customer_portal está activo, los emails de reserva añaden un botón Ver mi cuenta e historial. Desde ahí el cliente ve próximas reservas, historial y productos más pedidos sin crear contraseña.
� Automatización de email al cliente
Controla cuándo se envía el email automáticamente, sin necesidad de hacerlo de forma manual desde la ficha de cada reserva.
| Opción | Descripción |
|---|---|
| Enviar al crear reserva | Si el cliente proporcionó su email en el formulario, se le envía automáticamente el enlace de gestión en cuanto se crea la reserva. |
| Enviar al cambiar estado | Marca los estados que deben disparar un email automático. Por ejemplo, activa solo Confirmada y Cancelada para que el cliente reciba aviso en esos momentos clave. |
�📝 Mensajes de email por estado
En la subpestaña Canales puedes personalizar el texto introductorio del email que recibe el cliente cuando su reserva cambia a cada estado. Si el campo está vacío se usa el mensaje genérico del sistema.
| Estado | Cuándo se envía |
|---|---|
| pendiente | Al crear la reserva (con auto-confirmar desactivado) |
| confirmada | Al confirmar la reserva |
| cancelada | Al cancelar la reserva |
| no show | Al marcar al cliente como no presentado |
| completada | Al completar la reserva |
{{name}}, {{code}}, {{date}}, {{time}}, {{party}} y {{status}} en el texto. El sistema los reemplaza automáticamente con los datos reales de cada reserva.
WhatsApp Business
| Campo | Descripción |
|---|---|
| Activar WhatsApp | Permite enviar plantillas de WhatsApp Business Cloud API desde la ficha de una reserva. |
| Phone Number ID | ID del número de WhatsApp en Meta. No es el teléfono visible, es el identificador técnico del número. |
| Access token | Token de sistema de Meta con permisos para enviar mensajes de WhatsApp. |
| Plantillas | WhatsApp exige plantillas aprobadas para iniciar conversaciones. La plantilla de enlace usa variables: nombre, código, fecha, hora y enlace. La de estado usa: nombre, código, estado y enlace. |
| Automatizaciones | Opcionalmente puedes enviar el enlace al crear la reserva o avisar por WhatsApp cuando cambie el estado. |
📋 Creación de reservas
| Campo | Descripción |
|---|---|
| Tamaño máximo de grupo | Número máximo de personas por reserva en el formulario público. |
| Máx. personas por franja | Límite total de personas que pueden reservar la misma fecha, turno y hora. Usa 0 para no limitar. |
| Umbrales de ocupación | Define cuándo una franja se marca como bajo, medio o alto en la pestaña Ocupación. Valores por defecto: bajo hasta 29 %, medio desde 30 % y alto desde 80 %. |
| Tiempo de estancia | Minutos que una reserva ocupa capacidad desde su hora de llegada. Por ejemplo, con 90 minutos, una reserva de las 20:00 también cuenta para 20:30 y 21:00. Usa 0 para mantener el comportamiento clásico: solo la hora de llegada. |
| Tipos de personas | Permite definir categorías como adultos, niños o silla bebé. Si se activa el selector, el cliente elige cantidades por tipo y el detalle queda visible en la reserva. |
| Prefijo telefónico por defecto | Prefijo de país que aparece preseleccionado en el campo de teléfono del formulario público. |
| Idioma por defecto | Idioma del formulario público (Español / English). Tiene prioridad sobre el idioma del navegador del cliente. |
| Mostrar campo de notas | Activa o desactiva el campo de notas opcionales en el formulario público. |
| Auto-confirmar reservas | Si está activo, las reservas se crean directamente en estado confirmada en lugar de pendiente. |
| Auto no show | Opcional y apagado por defecto. Marca como no show las reservas pendientes o confirmadas cuando ya pasó la hora de llegada más el margen configurado. |
| Margen de llegada | Minutos de cortesía antes de aplicar el auto no show. Mientras la reserva esté dentro del margen, el admin la muestra como En margen; después puedes gestionarla como No show si el cliente no llega. |
🪑 Mesas y asignación automática
Estos modos se configuran en Configuración → Mesas. Se usan cuando el módulo Mesas está activo y el sistema debe buscar una mesa para una reserva.
| Modo | Cómo funciona |
|---|---|
| Mejor encaje | Busca cubrir la reserva dejando el menor número posible de asientos libres. |
| Mesa individual primero | Intenta asignar una sola mesa antes de combinar varias mesas. |
| Prioridad por áreas | Respeta el orden de áreas y busca primero en las zonas con mayor prioridad. |
| Distribución equilibrada | Reparte reservas entre zonas o mesas para no concentrar todo en el mismo sitio. |
| Concentrar por zonas | Agrupa reservas en la misma zona para dejar otras zonas libres o cerradas. |
| Prioridad accesible / niños | Favorece mesas marcadas como accesibles, aptas para niños o con trona. |
| Revisión manual | No asigna automáticamente; deja la reserva pendiente de selección manual por el equipo. |
Seguridad y 2FA
Nombre que aparece en la app 2FA
Al activar 2FA, el código QR usa como emisor el Nombre del local configurado. Si no existe, usa el nombre técnico del local o su slug.
Cambios de nombre
Si cambias el nombre del local, los nuevos QR usarán el nuevo nombre. Las cuentas 2FA ya añadidas en Google Authenticator, Authy u otra app conservan el texto anterior hasta que el usuario desactive y vuelva a activar 2FA.
Render y producción
En el servidor debe existir la variable TWO_FACTOR_ENCRYPTION_KEY. Sin ella, el panel muestra el aviso de configuración pendiente y no debe usarse 2FA en producción.
TWO_FACTOR_ENCRYPTION_KEY: genera una clave aleatoria de 32 bytes con node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" y pégala en las variables de entorno de Render. No la cambies después de que haya usuarios con 2FA activo, porque esa clave se usa para descifrar sus secretos guardados.
Roles y permisos
El sistema de roles permite definir permisos granulares para el personal del local. Desde la pestaña Roles (solo admin) puedes crear roles personalizados y asignarlos a usuarios. El rol admin tiene acceso total y no necesita permisos adicionales; los permisos solo aplican a usuarios con rol staff.
Permisos disponibles
| Permiso | Descripción |
|---|---|
| ── Reservas ── | |
view_reservations | Ver lista y ficha de reservas, ver pestaña Ocupación |
manage_reservations | Cambiar estado, editar y eliminar reservas |
view_clients | Ver la pestaña Clientes frecuentes e historial |
view_customer_portal | Ver configuración o accesos relacionados con el Portal del cliente |
manage_customer_portal | Gestionar futuras opciones del Portal del cliente |
manage_shifts | Crear y editar turnos |
manage_blocks | Crear y gestionar bloqueos de fechas y franjas |
| ── Mesas ── | |
manage_tables | Crear, editar y eliminar mesas y áreas; usar el plano visual |
| ── Comercio ── | |
manage_catalog | Crear y editar productos y categorías del catálogo |
manage_price_lists | Configurar listas de precios y precios por local |
view_public_site | Ver la configuración de la web pública |
manage_public_site | Gestionar contenido, productos, galería, SEO y contacto de la web pública |
view_orders | Ver la pestaña Pedidos y abrir tickets |
manage_orders | Crear tickets, añadir ítems y cambiar estados |
view_kds | Ver la pantalla KDS de cocina |
manage_kds | Mover tickets KDS y marcar ítems listos/pendientes |
view_pos_terminals | Ver terminales POS y abrir caja |
manage_pos_terminals | Crear, editar y eliminar terminales POS |
view_pos_groups | Ver grupos POS |
manage_pos_groups | Crear, editar y eliminar grupos POS |
| ── Administración ── | |
manage_users | Crear, editar y desactivar usuarios y roles |
manage_settings | Modificar la configuración del local |
view_stats | Ver la pestaña Estadísticas |
view_logs | Ver la pestaña Logs operativos |
Accesos por tipo de usuario
| Acción | Admin | Staff (según rol) |
|---|---|---|
| Ver lista de reservas | ✅ | Requiere view_reservations |
| Cambiar estado / editar reserva | ✅ | Requiere manage_reservations |
| Ver clientes frecuentes | ✅ | Requiere view_clients |
| Ver / gestionar Portal del cliente | ✅ | Requiere view_customer_portal / manage_customer_portal |
| Gestionar turnos | ✅ | Requiere manage_shifts |
| Gestionar bloqueos | ✅ | Requiere manage_blocks |
| Gestionar mesas y plano | ✅ | Requiere manage_tables |
| Gestionar web pública | ✅ | Requiere manage_public_site |
| Ver / gestionar pedidos | ✅ | Requiere view_orders / manage_orders |
| Ver / gestionar KDS | ✅ | Requiere view_kds / manage_kds |
| Ver / gestionar POS | ✅ | Requiere permisos de terminales o grupos POS |
| Gestionar usuarios y roles | ✅ | Requiere manage_users |
| Cambiar configuración del local | ✅ | Requiere manage_settings |
| Ver estadísticas | ✅ | Requiere view_stats |
| Ver logs operativos | ✅ | Requiere view_logs |
Cómo crear un rol personalizado
Módulos del sistema
El panel de administración funciona por módulos. Cada módulo activa un conjunto de funcionalidades: pestañas de navegación, rutas de API y opciones de configuración. Un módulo desactivado oculta completamente su interfaz y bloquea las llamadas al servidor.
🧩 Módulos disponibles
- Clientes — historial y frecuencia de visitas
- Portal del cliente — cuenta privada ligera con historial de reservas y productos favoritos
- Bloques — cierre de fechas y franjas
- Mesas — inventario y plano visual
- Logs — registro de errores y cambios
- Estadísticas — gráficos de ocupación y tendencias
- Catálogo — productos, variantes y categorías
- Listas de precios — precios base y por local
- Web pública — página comercial del local en
/{slug}/web/ - Pedidos — tickets de consumo
- POS — terminales y grupos de productos
- KDS — pantalla de cocina con tickets enviados desde POS
- Productos — catálogo global con control de stock por local, movimientos y alertas de reposición
- Pagos — seguimiento del estado de pago
- Conector MCP — endpoint para clientes MCP externos usando su propio modelo de IA
🔧 ¿Quién activa los módulos?
El superadmin activa o desactiva módulos por organización, y puede sobreescribir la configuración a nivel de local individual. El admin del local no puede cambiar qué módulos están disponibles.
👁️ Visibilidad
Si un módulo está desactivado, la pestaña correspondiente no aparece en la navegación del panel. Las rutas de API también quedan bloqueadas, por lo que no es posible acceder a esos datos aunque se sepa la URL.
📦 Módulos por defecto
Algunos módulos están activos para todos los locales (Mesas, Logs, Estadísticas). Otros, como POS, KDS, Catálogo o Portal del cliente, están desactivados por defecto y deben habilitarse explícitamente desde el panel del superadmin.
Conector MCP
La pestaña MCP permite preparar un endpoint para que un cliente conecte herramientas externas compatibles con MCP. El local controla si está activo y qué herramientas concretas se exponen.
Endpoint y token
El admin copia la URL del endpoint. Para Claude remoto no hace falta copiar el token manual: Claude usa OAuth. El token manual queda para clientes técnicos que permitan enviar Authorization: Bearer TOKEN.
Herramientas de lectura
Permite consultas como reservas, ocupación, mesas, clientes, logs o ayuda funcional según los módulos activos y herramientas permitidas.
help_search
Herramientas de acción
Las acciones se habilitan marcando cada herramienta de forma explícita. Las disponibles son crear reserva, cambiar estado y asignar mesas.
reservations_createreservations_update_statusreservations_assign_tables
Actividad
El panel muestra conexiones y cambios de configuración para poder auditar cuándo se usó o rotó el acceso.
confirm: true. Para ejecutar de verdad, la llamada debe repetir la acción con confirm: true. Esto permite que la IA primero explique qué va a cambiar antes de tocar datos.
CoffeeNW - Modelo y pega la URL https://tu-dominio.com/api/slug/mcp. Deja vacíos OAuth Client ID y OAuth Client Secret. Claude abrirá una pantalla de autorización de CoffeeNW para iniciar sesión con un admin del local.
manage_reservations, no podrá crear reservas ni cambiar estados aunque la tool esté marcada en MCP.
help_search permite responder preguntas sobre cómo funciona el SaaS, como estados de reserva, turnos, mesas, cierre de día o MCP. Los resultados se filtran por módulos activos del local.
reservations_update_status con {"reservation_code":"R-2026-000342","status":"confirmed"}. El sistema responde en modo simulación. Para ejecutar, se repite añadiendo "confirm": true.
POST. Los métodos disponibles son initialize, tools/list, tools/call y ping. Soporta OAuth remoto para Claude y token bearer manual para clientes propios.
Soporte y tickets
La pestaña Soporte permite abrir consultas o incidencias directamente desde el admin del local. El ticket queda asociado al local, la organización y la URL desde donde se creó.
Crear un ticket
Indica un asunto claro, categoría, prioridad y descripción. Conviene explicar qué intentabas hacer, qué ocurrió y el mensaje visible si lo hay.
Seguimiento
La lista muestra estado, prioridad y última actualización. Al abrir un ticket puedes ver el historial completo de respuestas.
Responder
Si soporte necesita más información, el ticket quedará como esperando respuesta. Puedes contestar desde el mismo hilo.
Cerrar
Cuando el problema esté resuelto, puedes cerrar el ticket. Si aparece otro problema, abre un ticket nuevo con el contexto actualizado.
Logs operativos
La pestaña Logs está disponible para admin o usuarios con permiso de configuración. Ayuda a revisar actividad técnica y trazabilidad de reservas.
Errores recientes
Muestra respuestas HTTP 500 registradas por el backend, con fecha, origen y detalle técnico cuando exista.
Cambios de estado
Registra creación, confirmación, cancelación, no show, completado y eliminación de reservas, indicando usuario u origen del cambio.
Retención y limpieza
Permite configurar cuántos días conservar logs. La limpieza se ejecuta automáticamente cada día y también puede lanzarse manualmente desde la pestaña.
Estadísticas
La pestaña Estadísticas ofrece gráficos y métricas agregadas sobre la actividad del local en un período configurable. Está disponible para admin o usuarios con permiso de configuración.
📅 Rango de fechas
Usa los botones de acceso rápido (7 días, 30 días, 90 días, Este año) o selecciona manualmente las fechas de inicio y fin y pulsa Aplicar. Los presets calculan el rango hasta hoy.
📊 KPIs
Cinco indicadores en la parte superior: Total reservas, Total personas, Tasa de cancelación, Tasa de no-show y Ratio de completado.
📆 Reservas por día
Barras verticales con el total de reservas de cada día del período. Útil para detectar picos de demanda o caídas inesperadas.
🕐 Reservas por hora
Distribución de reservas activas por franja horaria. Permite identificar los horarios con más carga a lo largo del período.
⭐ Franjas más populares
Ranking de las 10 franjas con más reservas. Excluye cancelaciones y no-shows para reflejar la demanda real.
📅 Por día de la semana
Muestra qué días generan más reservas agrupando todo el período por día de la semana (Dom–Sáb).
🔵 Distribución de estados
Barras horizontales con el volumen de reservas en cada estado: pendiente, confirmada, en casa, completada, cancelada y no-show.
📉 Cancelaciones y no-show por día
Barras apiladas día a día con cancelaciones (rojo) y no-shows (naranja). Útil para detectar patrones problemáticos. Solo aparecen los días con al menos un evento de este tipo.
Tasa de cancelación y tasa de no-show se calculan sobre el total de reservas del período.
El ratio de completado usa como denominador solo las reservas ya cerradas (completadas + en casa + no-show), ignorando las aún activas o pendientes.
Cómo reserva un cliente
El formulario público está en /{slug}/, accesible sin necesidad de cuenta. El proceso es el siguiente:
public_site está activo, el cliente puede entrar primero en /{slug}/web/ para ver la página comercial, galería y contacto. La carta aparece solo si catalog está activo. El botón de reserva aparece solo si reservations está activo y no se ha ocultado en la configuración.
customer_portal está activo, el cliente puede abrir /{slug}/reservas/?portal=TOKEN desde el email o desde su enlace de reserva para ver su historial, próximas reservas y top productos.
Productos e Inventario
El módulo Productos unifica el catálogo global con el control de stock por local. Cada producto puede marcarse como inventariable para llevar seguimiento de existencias. Requiere que el módulo Productos esté activado por el superadmin.
🛍️ Productos inventariables
Al editar un producto, activa Control de stock para añadir: unidad (pcs, kg, g, L, mL, cajas, bolsas), stock mínimo (alerta) y coste por unidad. El stock actual por local se gestiona con movimientos.
📥 Movimientos de stock
- Entrada — suma al stock (recepción de mercancía)
- Salida — resta al stock (consumo o merma)
- Ajuste — corrige el stock con un valor positivo o negativo (recuento físico)
Cada movimiento queda registrado con usuario, fecha y notas.
⚠️ Alertas de stock bajo
Cuando el stock actual de un producto inventariable cae por debajo de su stock mínimo, aparece un banner de alerta en la pestaña Productos. El stock es independiente por local.
🔐 Permisos
- Ver catálogo — acceso de lectura al catálogo de productos
- Gestionar catálogo — crear y editar productos, categorías, modificadores y alérgenos
- Ver inventario — ver stock actual e historial de movimientos
- Gestionar inventario — registrar entradas, salidas y ajustes de stock