📖 Guía de ayuda — Panel de administración

← Volver al panel
📋

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_cancel o 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.
Código: Cada reserva tiene un código público, por ejemplo R-2026-000013, pensado para buscarla y compartirla con el cliente sin depender del ID interno.
Fecha creación: En la tabla de reservas indica cuándo se realizó la reserva. Es distinta de la fecha reservada por el cliente.

Estados de una reserva

EstadoSignificado
pendienteReserva recibida, aún sin confirmar
confirmadaReserva aceptada por el local
🏠 en casaEl cliente ha llegado y está actualmente en el local. Solo activable dentro del margen de llegada configurado
canceladaReserva anulada
no showEl cliente no se presentó
completadaReserva finalizada correctamente
Cambio de estado: Los usuarios staff con permiso 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?

El cliente rellena el formulario público de reserva e introduce su número de teléfono.
El sistema busca si ya existe un cliente con ese teléfono. Si no, crea una ficha nueva automáticamente.
Si ya existía, actualiza el nombre y acumula la visita al historial.
La reserva queda vinculada a ese cliente, permitiendo consultar su historial desde el panel.
Multi-local: Los clientes se identifican globalmente por teléfono, pero cada local solo ve las reservas que le corresponden. Un cliente habitual de varios locales aparecerá en cada uno con su propio historial independiente.

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

El cliente hace una reserva e indica teléfono y, si quiere recibir emails, email.
El email de reserva incluye el botón Ver mi cuenta e historial, siempre que el módulo customer_portal esté activo.
Al abrir el enlace, ve una pantalla con próximas reservas, historial y productos más pedidos.
Desde el portal puede volver a la gestión de su reserva actual mediante el botón Gestionar reserva.
Requisito: el superadmin debe activar el módulo 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

Pulsa el botón + Nuevo turno en la pestaña Turnos.
Introduce el nombre del turno (ej. "Desayuno").
Marca los días de la semana en que este turno está disponible.
Guarda el turno. Aparecerá en la lista.
Pulsa + Franja dentro del turno para añadir horas disponibles.
Repite el paso 5 para todas las franjas horarias del turno.
Consejo: Si necesitas cambiar los días u horas de un turno, edítalo con el botón ✏️. Para eliminar una franja horaria individual, usa el botón 🗑️ junto a la franja.
🚫

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.

Efecto en reservas: el sistema bloquea el día completo o la franja horaria tanto en la página pública como en el backend, así que no se puede reservar aunque alguien intente enviar la petición manualmente.
👥

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

Ve a la pestaña Usuarios.
Introduce el nombre de usuario y una contraseña segura.
Selecciona el rol que tendrá el usuario (admin, staff u otro rol personalizado).
Activa o desactiva si el usuario puede recibir notificaciones push.
Pulsa Crear usuario. Aparecerá en la tabla de usuarios.
Nota: No es posible editar ni eliminar la cuenta del admin principal desde este panel.

Editar o eliminar un usuario

En la tabla de usuarios, pulsa ✏️ junto al usuario que quieres modificar.
Cambia la contraseña y/o el permiso de cancelación.
Pulsa Guardar para aplicar los cambios.

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.

Cómo crear un ajuste temporal
  1. Ve a Mesas → Ajustes temporales y pulsa Nuevo ajuste.
  2. Selecciona la mesa cuya capacidad quieres reducir.
  3. Indica los comensales efectivos que tendrá durante el período (p. ej. 1).
  4. Fija la fecha desde y fecha hasta que abarca el ajuste.
  5. Si el ajuste solo aplica en un rango horario, desactiva Todo el día y añade hora de inicio y fin.
  6. 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.

Umbrales configurables: en Configuración → Reservas → Umbrales de ocupación puedes cambiar los límites de bajo, medio y alto. La leyenda de Ocupación se actualiza con esos valores.
🎫

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

Ve a la pestaña Pedidos.
Pulsa + Nuevo ticket.
Selecciona el origen (reserva, mesa, walk-in o manual) y rellena los datos adicionales si aplica.
Pulsa Crear ticket. El ticket queda en estado Abierto.
Desde la ficha del ticket, usa el buscador de productos para añadir ítems uno a uno.
Cuando el consumo esté completo, cambia el estado a Cerrado y luego a Pagado.

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.

Abre el detalle de un ticket POS desde la lista de Pedidos.
Pulsa el botón naranja Enviar a cocina. El badge cambia a Enviado y el ticket aparece en el tablero KDS.
La cocina procesa el pedido y lo mueve a En Preparación y después a Listo.
Cuando la cocina marca el ticket como Listo, el POS muestra la alerta Listos con el número de pedidos pendientes de servir.
El camarero abre la alerta, revisa la lista y pulsa Servido cuando el pedido sale a sala.
Permisos: 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

Ve a la pestaña POS y selecciona la sub-pestaña Terminales.
Pulsa + Nuevo terminal, escribe el nombre y guarda.
En la fila del terminal recién creado, pulsa Grupos y marca los grupos que debe mostrar.
Si aún no tienes grupos, ve a la sub-pestaña Grupos y crea al menos uno.
En la fila del grupo, pulsa Productos y selecciona los artículos del catálogo que forman ese grupo.
El terminal ya está configurado. Pulsa Abrir en la fila del terminal para entrar en la pantalla de caja.

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

Abre la pantalla de caja pulsando Abrir en la fila del terminal.
Pulsa Asignar mesa en el carrito y selecciona la mesa donde se sienta el cliente.
Si la mesa está disponible, introduce los comensales en el wizard walk-in y pulsa Ocupar mesa. Si está ocupada, se vincula automáticamente al ticket existente.
Selecciona un grupo en el panel de productos y toca los artículos que pide el cliente.
Repite para cada mesa o añade más productos al mismo pedido.
Pulsa Crear ticket. Los productos se registran en Pedidos y la mesa aparece ocupada en el plano visual.
En la ficha del ticket (tab Pedidos), pulsa Enviar a cocina para que el pedido aparezca en el tablero KDS.
Cuando cocina lo deje en Listo, el POS muestra Listos N. Abre la lista y pulsa Servido cuando salga a sala.

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.

Tip: Guarda /{slug}/pos/ como acceso directo en la pantalla de inicio del dispositivo de caja para un acceso de un solo toque.
Permisos: 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

El camarero crea un ticket desde el POS y regresa automáticamente a la pestaña Pedidos.
Abre la ficha del ticket y pulsa el botón naranja Enviar a cocina. El badge pasa a Enviado.
En el tablero KDS, la cocina arrastra el ticket a En preparación cuando empieza a trabajar.
Al terminar, la cocina mueve el ticket a Listo. Opcionalmente marca cada ítem como listo de forma individual.
El camarero ve el badge Listo ✓ en la lista de Pedidos y la alerta Listos N dentro del POS.
Al sacar el pedido a sala, pulsa Servido. Ese es el último estado de cocina.
Después cierra el ticket cuando el cliente paga.
Permisos: 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

  1. Ve a Proveedores y pulsa + Proveedor para crear el proveedor con sus datos de contacto y condiciones de pago.
  2. Una vez guardado, se abre de nuevo el modal con la sección Precios por producto. Pulsa + Añadir producto.
  3. Selecciona el producto del catálogo, introduce el costo unitario, la moneda, la cantidad mínima y el plazo de entrega. Guarda el precio.
  4. Repite para todos los productos que suministra ese proveedor.
  5. 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.
Permisos: 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.
🌐

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

El superadmin activa los módulos Reservas y Web pública para el local. Productos solo es necesario si quieres mostrar carta.
Entra en Web pública, marca Web pública activa y completa los textos principales.
Añade una imagen hero. Puedes pegar una URL o subir un archivo de imagen desde tu equipo.
Revisa Productos públicos: activa visibilidad web, marca destacados y añade etiquetas si hace falta.
Añade imágenes en Galería y completa SEO, contacto y redes. Si dejas SEO vacío, la web usa como fallback el título, subtítulo e imagen hero.
Pulsa Guardar y usa Abrir web para revisar el resultado en una nueva pestaña.
Precios: la web pública muestra el precio de la lista activa aplicable al local cuando existe. Si no hay lista aplicable, usa el precio base del producto.
Importante: la web pública no sustituye al formulario de reservas. Es una página comercial que enlaza al flujo de reservas actual, por lo que no duplica reservas ni crea un sistema paralelo.
SEO: estos campos no cambian el contenido visible del hero. Sirven para buscadores, pestañas del navegador y tarjetas de vista previa al compartir la URL. Para una web sencilla, basta con un título claro, una descripción breve y una imagen representativa.
⚙️

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

CampoDescripción
Emoji / íconoIcono decorativo que acompaña al nombre del local en la página pública.
Nombre del localAparece en el encabezado de la página pública y en la pantalla de login.
TaglineSubtítulo o lema del local, visible bajo el nombre en la página pública.
Teléfono de contactoNúmero de contacto que se muestra en la página pública.
Horario de aperturaTexto libre con los horarios del local, visible en la página pública.

🏢 Tipo de negocio

Valores predefinidos por tipo: elige el tipo de establecimiento en el desplegable — Restaurante, Café, Bar, Hotel, Coworking u Otro — y pulsa ✨ Aplicar valores del tipo de negocio para pre-rellenar automáticamente los parámetros más habituales: tamaño máximo de grupo, tiempo de estancia, auto-confirmación, lista de espera y visibilidad del campo de notas. Puedes ajustar cualquier valor después de aplicar.

🔔 Notificaciones push

CampoDescripción
Activar notificaciones pushInterruptor general de Firebase Cloud Messaging para el local. Si está apagado, no se envían avisos al equipo ni al cliente.
Clave pública VAPIDClave 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 reservarOpcional. Muestra una ventana al cliente justo después de reservar para invitarle a activar notificaciones en ese dispositivo.
Recordatorio antes de la reservaOpcional. 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 reservaPermite decidir si el equipo recibe un aviso cuando entra una reserva nueva.
Destinatarios del equipoPermite enviar avisos a todos los usuarios con push activo, solo a usuarios seleccionados, o a nadie del equipo.
Estados que notifican al equipoDefine qué cambios de estado generan avisos internos: pendiente, confirmada, cancelada, no show o completada.
Estados que notifican al clienteDefine qué cambios de estado se notifican únicamente al cliente que hizo la reserva.
Aislamiento por localLas 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.
Si no llegan avisos al admin: comprueba que el navegador tenga permitidas las notificaciones para el dominio publicado, por ejemplo desde el icono de información/candado de Chrome. Después entra al admin, guarda la configuración de notificaciones y verifica que tu usuario tenga Push on en la sección Usuarios.

✉️ Email transaccional

CampoDescripción
Activar envío de emailsPermite enviar desde el admin el enlace privado para gestionar una reserva.
Servidor SMTP / Puerto / SSLDatos técnicos del proveedor de email, por ejemplo Gmail, Outlook, Brevo SMTP u otro servicio.
Usuario y contraseña SMTPCredenciales de la cuenta remitente o contraseña de aplicación del proveedor.
Email y nombre remitenteIdentidad que verá el cliente al recibir el correo.
Código QR en el email: Cada email de confirmación incluye automáticamente un código QR que codifica el enlace privado de gestión de la reserva. El cliente puede mostrar el QR en el local y el staff puede usar Reservas → Escanear QR para registrar la llegada sin buscar manualmente la reserva.
Portal del cliente: si el módulo 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ónDescripción
Enviar al crear reservaSi 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 estadoMarca 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.
Requisito: el cliente debe haber indicado su email al hacer la reserva. Si no tiene email registrado, la automatización se omite silenciosamente. El envío manual desde la ficha de la reserva siempre está disponible independientemente de estas opciones.

�📝 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.

EstadoCuándo se envía
pendienteAl crear la reserva (con auto-confirmar desactivado)
confirmadaAl confirmar la reserva
canceladaAl cancelar la reserva
no showAl marcar al cliente como no presentado
completadaAl completar la reserva
Variables disponibles: usa {{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

CampoDescripción
Activar WhatsAppPermite enviar plantillas de WhatsApp Business Cloud API desde la ficha de una reserva.
Phone Number IDID del número de WhatsApp en Meta. No es el teléfono visible, es el identificador técnico del número.
Access tokenToken de sistema de Meta con permisos para enviar mensajes de WhatsApp.
PlantillasWhatsApp 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.
AutomatizacionesOpcionalmente puedes enviar el enlace al crear la reserva o avisar por WhatsApp cuando cambie el estado.

📋 Creación de reservas

CampoDescripción
Tamaño máximo de grupoNúmero máximo de personas por reserva en el formulario público.
Máx. personas por franjaLímite total de personas que pueden reservar la misma fecha, turno y hora. Usa 0 para no limitar.
Umbrales de ocupaciónDefine 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 estanciaMinutos 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 personasPermite 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 defectoPrefijo de país que aparece preseleccionado en el campo de teléfono del formulario público.
Idioma por defectoIdioma del formulario público (Español / English). Tiene prioridad sobre el idioma del navegador del cliente.
Mostrar campo de notasActiva o desactiva el campo de notas opcionales en el formulario público.
Auto-confirmar reservasSi está activo, las reservas se crean directamente en estado confirmada en lugar de pendiente.
Auto no showOpcional 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 llegadaMinutos 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.

ModoCómo funciona
Mejor encajeBusca cubrir la reserva dejando el menor número posible de asientos libres.
Mesa individual primeroIntenta asignar una sola mesa antes de combinar varias mesas.
Prioridad por áreasRespeta el orden de áreas y busca primero en las zonas con mayor prioridad.
Distribución equilibradaReparte reservas entre zonas o mesas para no concentrar todo en el mismo sitio.
Concentrar por zonasAgrupa reservas en la misma zona para dejar otras zonas libres o cerradas.
Prioridad accesible / niñosFavorece mesas marcadas como accesibles, aptas para niños o con trona.
Revisión manualNo asigna automáticamente; deja la reserva pendiente de selección manual por el equipo.
Auto-confirmación: si las reservas se auto-confirman y Mesas está activo, el sistema intenta asignar mesa según el modo elegido. En Revisión manual, la mesa queda para que el equipo la seleccione manualmente.
Los cambios se guardan pulsando Guardar configuración y son visibles de inmediato en la página pública.
🔐

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.

Valor recomendado para 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

PermisoDescripción
── Reservas ──
view_reservationsVer lista y ficha de reservas, ver pestaña Ocupación
manage_reservationsCambiar estado, editar y eliminar reservas
view_clientsVer la pestaña Clientes frecuentes e historial
view_customer_portalVer configuración o accesos relacionados con el Portal del cliente
manage_customer_portalGestionar futuras opciones del Portal del cliente
manage_shiftsCrear y editar turnos
manage_blocksCrear y gestionar bloqueos de fechas y franjas
── Mesas ──
manage_tablesCrear, editar y eliminar mesas y áreas; usar el plano visual
── Comercio ──
manage_catalogCrear y editar productos y categorías del catálogo
manage_price_listsConfigurar listas de precios y precios por local
view_public_siteVer la configuración de la web pública
manage_public_siteGestionar contenido, productos, galería, SEO y contacto de la web pública
view_ordersVer la pestaña Pedidos y abrir tickets
manage_ordersCrear tickets, añadir ítems y cambiar estados
view_kdsVer la pantalla KDS de cocina
manage_kdsMover tickets KDS y marcar ítems listos/pendientes
view_pos_terminalsVer terminales POS y abrir caja
manage_pos_terminalsCrear, editar y eliminar terminales POS
view_pos_groupsVer grupos POS
manage_pos_groupsCrear, editar y eliminar grupos POS
── Administración ──
manage_usersCrear, editar y desactivar usuarios y roles
manage_settingsModificar la configuración del local
view_statsVer la pestaña Estadísticas
view_logsVer la pestaña Logs operativos

Accesos por tipo de usuario

Acción Admin Staff (según rol)
Ver lista de reservasRequiere view_reservations
Cambiar estado / editar reservaRequiere manage_reservations
Ver clientes frecuentesRequiere view_clients
Ver / gestionar Portal del clienteRequiere view_customer_portal / manage_customer_portal
Gestionar turnosRequiere manage_shifts
Gestionar bloqueosRequiere manage_blocks
Gestionar mesas y planoRequiere manage_tables
Gestionar web públicaRequiere manage_public_site
Ver / gestionar pedidosRequiere view_orders / manage_orders
Ver / gestionar KDSRequiere view_kds / manage_kds
Ver / gestionar POSRequiere permisos de terminales o grupos POS
Gestionar usuarios y rolesRequiere manage_users
Cambiar configuración del localRequiere manage_settings
Ver estadísticasRequiere view_stats
Ver logs operativosRequiere view_logs

Cómo crear un rol personalizado

Ve a la pestaña Roles.
Pulsa + Nuevo rol.
Escribe el nombre del rol y activa los permisos que quieras conceder.
Pulsa Guardar. El rol quedará disponible al crear nuevos usuarios.
Solo el admin puede crear y gestionar roles y usuarios. Para cambiar el rol de un usuario ve a Usuarios → ✏️ Editar.
🧩

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.

Nota para el admin: Si no ves alguna pestaña que esperas (como Pedidos, POS o KDS), es posible que el módulo correspondiente no esté activado para tu local. Contacta con el superadmin para habilitarlo.
🔌

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_create
  • reservations_update_status
  • reservations_assign_tables

Actividad

El panel muestra conexiones y cambios de configuración para poder auditar cuándo se usó o rotó el acceso.

Importante: este módulo no incluye un asistente propio ni consume modelos desde el SaaS. El cliente usa su propia aplicación o cuenta de IA compatible con MCP. Las acciones de escritura solo aparecen si la herramienta está marcada como permitida.
Confirmación obligatoria: las tools de escritura hacen simulación si no reciben 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.
Conectar Claude: en Añadir conector personalizado, escribe un nombre como 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.
Permisos efectivos: Claude solo verá y ejecutará herramientas permitidas por la configuración MCP, por el rol del usuario que autorizó OAuth y por la restricción MCP personalizada del usuario si existe. Por ejemplo, si el usuario no tiene manage_reservations, no podrá crear reservas ni cambiar estados aunque la tool esté marcada en MCP.
Restricción por usuario: en Usuarios puedes dejar que un usuario herede todas las herramientas permitidas o personalizar su lista. Si personalizas y no marcas ninguna herramienta, ese usuario podrá autorizar OAuth pero no tendrá tools disponibles.
Ayuda funcional: la tool 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.
Token manual: el token bearer manual no pertenece a un usuario concreto, así que no aplica restricciones por usuario. Úsalo solo para integraciones técnicas controladas; para Claude remoto usa OAuth.
Ejemplo: para confirmar una reserva, primero puede llamarse 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.
Prueba técnica: el endpoint acepta JSON-RPC por 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.

Cómo se calculan las tasas:
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:

Web pública: si el módulo 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.
Portal del cliente: si el módulo 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.
El cliente elige la fecha en el calendario.
Se muestran los turnos disponibles para ese día según la configuración.
El cliente selecciona un turno y una franja horaria. En cada botón, la hora aparece destacada y las plazas disponibles se muestran como dato secundario.
Rellena sus datos: nombre, teléfono/email, número de personas y notas opcionales.
Pulsa Reservar. Si el local tiene auto-confirmar activo, la reserva queda directamente en estado confirmada; de lo contrario queda en pendiente.
La confirmación muestra el código de reserva y un enlace privado para que el cliente pueda volver a ver o cancelar su reserva. Si el Portal del cliente está activo, también aparece el acceso Mi cuenta.
El admin o staff la confirma, cancela o gestiona desde el panel según los permisos de su rol.
Consejo: El enlace de autoservicio funciona como acceso privado a esa reserva. Compártelo solo con el cliente que hizo la reserva.
🛍️

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
Consejo: Usa Ajuste tras un recuento físico para que el sistema refleje la realidad exacta del almacén. El stock se lleva por local, por lo que cada sucursal gestiona su propio nivel de existencias.