Última Actualización: 26 de Junio de 2025 (Refleja el canje de recompensas LCo integrado en el carrito de pedido como funcionalidad completada y validada.)
Bienvenido a la experiencia moderna de pedir y disfrutar en tu establecimiento favorito con LoyalPyME Camarero. Diseñado para agilizar el servicio, personalizar tu pedido, mejorar la comunicación y ahora, ¡canjear tus recompensas de fidelidad directamente en tu pedido!
Este flujo describe la experiencia del cliente desde su llegada hasta la finalización y pago de su pedido, incluyendo las interacciones con el personal de cocina/barra (KDS) y de sala (Camarero).
- Bienvenida: Al llegar, el cliente encuentra un código QR único en su mesa, provisto por el establecimiento. [cite_start]Este QR contiene el
tableIdentifierúnico de esa mesa. [cite: 10] - Escaneo Instantáneo: Usando la cámara de su smartphone (o una app de lectura de QR), el cliente escanea el código. [cite_start]El QR lo redirige a una URL del tipo
https://[tuDominio.com]/m/[businessSlug]/[tableIdentifier]. [cite: 10] - [cite_start]Estado: [COMPLETADO] [cite: 10]
- [cite_start]Acceso Inmediato: Al acceder a la URL, se carga la carta digital del negocio (
businessSlug), contextualizada para la mesa (tableIdentifier). [cite: 11] - [cite_start]Verificación de Pedido Activo (Fundamental): [cite: 10]
- [cite_start]Al cargar la página, el sistema revisa
localStoragebuscando una entrada con la claveactiveOrderInfo_BUSINESSSLUG_TABLEIDENTIFIER. [cite: 10] - [cite_start]Si existe un pedido activo (
activeOrderIdForTable,activeOrderNumberForTable): [cite: 10]- [cite_start]La UI muestra un mensaje destacado: "Tienes el pedido #{{orderNumber}} en curso para esta mesa." [cite: 10]
- [cite_start]Opciones Clave: [cite: 11]
- [cite_start]"Ver Estado del Pedido": Enlaza directamente a
/order-status/:activeOrderId. [cite: 11] - [cite_start]"[COMPLETADO Y VALIDADO]" Añadir más Ítems a este Pedido: La carta se mantiene interactiva, permitiendo al cliente añadir nuevos productos al pedido en curso. [cite: 11]
- [cite_start]"Ver Estado del Pedido": Enlaza directamente a
- [cite_start]Si NO existe pedido activo: La página funciona en modo "crear nuevo pedido", con el carrito vacío. [cite: 11]
- [cite_start]Al cargar la página, el sistema revisa
- [cite_start]Navegación y Detalle del Ítem (
MenuItemCard.tsx): [cite: 11]- [cite_start]Categorías del menú presentadas en componentes tipo acordeón (
CategoryAccordion.tsx). [cite: 11] - [cite_start]Cada ítem se muestra en una tarjeta (
MenuItemCard.tsx) con su imagen, nombre (i18n), descripción (i18n), precio base, lista de alérgenos y etiquetas. [cite: 11]
- [cite_start]Categorías del menú presentadas en componentes tipo acordeón (
- [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 11]
[cite_start]3. 🎨 Personaliza tu Plato (MenuItemCard.tsx, ModifierGroupInteractiveRenderer.tsx) [cite: 11]
- [cite_start]Al seleccionar un ítem, se abre un modal o sección para la configuración de modificadores. [cite: 11]
- [cite_start]Selección de Modificadores: [cite: 11]
- [cite_start]Se presentan los
ModifierGroups asociados al ítem. [cite: 11] - [cite_start]Cada grupo muestra sus
ModifierOptions según eluiType(RADIO para selección única, CHECKBOX para múltiple). [cite: 11] - [cite_start]Validación en Tiempo Real Frontend: Se aplican las reglas
minSelections,maxSelections, yisRequired. [cite: 11] - [cite_start]Cálculo de Precio Dinámico: El precio del ítem se actualiza instantáneamente en la UI. [cite: 12]
- [cite_start]Se presentan los
- [cite_start]Cantidad y Notas: El cliente puede ajustar la cantidad del ítem y añadir instrucciones especiales. [cite: 12]
- [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 12]
- [cite_start]Acumulación de Ítems: Los ítems configurados se añaden al estado local
currentOrderItemsy se persisten enlocalStorage. [cite: 12] - [cite_start]Modal del Carrito: Permite la revisión detallada del pedido, modificación de cantidades, eliminación de ítems y edición de notas generales (
orderNotes). [cite: 12] - [NUEVO Y VALIDADO] Canje de Recompensas y Descuentos LCo:
- Para los clientes que han iniciado sesión en el programa de fidelización (LCo), el modal del carrito ahora muestra una sección de "Mis Recompensas".
- Desde aquí, el cliente puede ver las recompensas que se puede permitir con sus puntos y aplicarlas directamente:
- Canjear Productos Gratis: Al hacer clic, el producto asociado a la recompensa se añade al carrito con precio 0€ y una insignia distintiva. Su cantidad no puede ser modificada.
- Aplicar Descuentos: Al seleccionar una recompensa de descuento (ej. 10% o 5€ menos), el total del pedido se recalcula instantáneamente para reflejar el beneficio. Solo se puede aplicar un descuento de este tipo por pedido.
- Estado: [COMPLETADO Y VALIDADO]
[cite_start]5. ⭐ Opcional: Identifícate para Beneficios LCo (Integración con LoyalPyME Core) [cite: 12]
- [cite_start]Contexto: Si el
Businesstiene el módulo LCo activo. [cite: 12] - Flujo: Si el cliente está logueado en su cuenta de LoyalPyME, su
customerIdse obtiene y se asocia al pedido al enviarlo. [cite_start]Este paso es crucial para poder ver y canjear las recompensas en el carrito de compra. [cite: 12] - [cite_start]Impacto: Al pagar el pedido, el backend asociará los puntos de fidelidad a esta cuenta de cliente. [cite: 12]
- [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 12]
- [cite_start]Desde el
ShoppingCartModal, el cliente pulsa "Enviar Pedido" o "Añadir al Pedido". [cite: 12] - Payload: Se construye un DTO que incluye el array de
items,orderNotes?,tableIdentifier, ycustomerId?.- [NUEVO] El payload ahora puede incluir
redeemedRewardIden cada ítem (si se canjeó como producto gratis) y/o unappliedLcoRewardIdglobal (si se aplicó un descuento al total).
- [NUEVO] El payload ahora puede incluir
- [cite_start]Endpoint: La lógica del frontend (
handleOrderSubmission) decide si llamar aPOST /public/order/:businessSlug(para crear) o aPOST /public/order/:orderId/items(para añadir). [cite: 13] - [cite_start]Backend: Valida exhaustivamente la petición (disponibilidad, reglas de modificadores, validez de las recompensas), recalcula precios, debita los puntos del cliente y crea/actualiza los registros en la base de datos de forma transaccional y atómica. [cite: 13]
- [cite_start]Frontend Post-Envío: Muestra notificación de éxito, guarda
activeOrderInfoenlocalStorage(si es nuevo), limpia el carrito y redirige a/order-status/:orderId. [cite: 13] - [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 13]
- [cite_start]Acceso y Visualización: Muestra
orderNumber,tableIdentifier, estado general delOrdery estado individual de cadaOrderItem. [cite: 13] - [cite_start]Polling Automático: Refresca datos llamando a
GET /public/order/:orderId/statuscada ~10 segundos. [cite: 13] - [cite_start]Lógica de Pedido Finalizado: Si
orderStatusesPAIDoCANCELLED, detiene el polling, muestra un mensaje final y permite iniciar un nuevo pedido (limpiandolocalStorage). [cite: 13] - [cite_start]Botones de Acción: [cite: 13]
- [cite_start]"Volver al Menú": Enlaza de vuelta a la carta para poder añadir más ítems al pedido activo. [cite: 13]
- "[COMPLETADO Y VALIDADO]" Botón "Pedir la Cuenta": Se muestra si el pedido está en un estado apropiado. [cite_start]Al pulsarlo, llama a
POST /public/order/:orderId/request-bill, y la UI refleja "Cuenta solicitada..." al actualizarse el estado aPENDING_PAYMENT. [cite: 13]
- [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 14]
👨🍳 II. [cite_start]Flujo del Personal de Cocina/Barra (KDS - Kitchen Display System) - [COMPLETADO Y VALIDADO] [cite: 14]
[cite_start]El KDS (KitchenDisplayPage.tsx) es el panel de control digital para la preparación eficiente y coordinada de los pedidos. [cite: 14]
- [cite_start]El personal se autentica, selecciona su destino KDS ("COCINA", "BARRA") y ve una cola de
OrderItems pendientes o en preparación, ordenados cronológicamente. [cite: 14] - [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 14]
[cite_start]2. 🔄 Gestión del Estado de Preparación de Ítems (PATCH /api/camarero/kds/items/:orderItemId/status) [cite: 14]
- [cite_start]A través de botones de acción, el personal cambia el estado de los ítems de
PENDING_KDS->PREPARING->READY, o los cancela. [cite: 14] - [cite_start]El backend actualiza el estado general del
Order(IN_PROGRESS,ALL_ITEMS_READY, etc.) en consecuencia. [cite: 14] - [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 14]
[cite_start]Esta sección detalla la funcionalidad para el rol WAITER a través de las interfaces de servicio. [cite: 14]
- [cite_start]Autenticación: Login estándar para
UserRole.WAITER(email/password). [cite: 14] - [cite_start]Panel Principal: Actualmente compuesto por
WaiterPickupPage.tsxyWaiterOrderManagementPage.tsx. [cite: 14]
- [cite_start]El camarero ve una lista de
OrderItems que están en estadoREADY. [cite: 14] - Al entregar un ítem, lo marca como "Servido" (
SERVED). [cite_start]El ítem desaparece de la lista. [cite: 15] - [cite_start]Cuando todos los ítems de un pedido están servidos, el
Order.statusgeneral cambia aCOMPLETED. [cite: 15] - [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 15]
- [cite_start]Visualizar Pedidos para Cobro: En la lista de pedidos, se destacan aquellos con
Order.status = PENDING_PAYMENT. [cite: 15] - [cite_start]Procesar Pago y Marcar como Pagado: [cite: 15]
- [cite_start]El camarero tiene una acción "Marcar Como Pagada" para un pedido
PENDING_PAYMENT. [cite: 15] - [cite_start]Al usarla, se llama a
POST /api/camarero/staff/order/:orderId/mark-as-paid. [cite: 15] - [cite_start]El backend (
OrderService.markOrderAsPaid) actualizaOrder.status = PAID, registrapaidAty elpaidByUserId. [cite: 15]
- [cite_start]El camarero tiene una acción "Marcar Como Pagada" para un pedido
- [cite_start]Liberar Mesa e Integración LCo: [cite: 15]
- Backend: Automáticamente, tras marcar como
PAID, el servicio actualiza elTable.statusaAVAILABLE. [cite_start]Si el pedido tenía uncustomerLCoIdy el módulo LCo está activo, se dispara la asignación de puntos. [cite: 15] - [cite_start]Frontend: La UI del camarero y del cliente reflejan el cambio de estado. [cite: 15]
- Backend: Automáticamente, tras marcar como
- [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 15]
- [cite_start]CRUD completo de
MenuCategory,MenuItem,ModifierGroup,ModifierOptionfuncional. [cite: 15] - [cite_start]Estado: [COMPLETADO Y VALIDADO] [cite: 15]
- [cite_start]Funcionalidades básicas para la gestión de mesas y personal están implementadas, permitiendo el flujo actual. [cite: 16]
- [cite_start]Estado: [FUNCIONALIDAD BASE COMPLETADA] [cite: 16]
✨ Beneficios para el Negocio con LoyalPyME Camarero (Visión Actual):
- [cite_start]Eficiencia Operativa: Reducción de errores en la toma de comandas, comunicación directa y clara con cocina/barra. [cite: 16]
- Mejora de la Experiencia del Cliente: Autonomía para pedir, personalizar, seguir el estado del pedido y canjear sus recompensas al instante.
- Aumento del Engagement y la Conversión: Al mostrar las recompensas directamente en el carrito, se incentiva al cliente a completar el pedido y a utilizar sus puntos, aumentando la satisfacción y la percepción de valor.
- [cite_start]Optimización de Tiempos: Agilización del proceso de pedido, preparación, servicio y pago. [cite: 16]
- [cite_start]Incremento Potencial de Ventas: Facilidad para añadir ítems a un pedido existente. [cite: 16]
- Recopilación de Datos: Información valiosa sobre ítems populares, tiempos de preparación, y ahora también, sobre las recompensas más canjeadas.
- [cite_start]Imagen Moderna y Profesional: Adopción de tecnología para mejorar el servicio. [cite: 16]
- [cite_start]Integración con Fidelización (LCo): Cada pedido pagado se convierte automáticamente en una oportunidad para fidelizar. [cite: 16]