Última Actualización: 26 de Junio de 2025 (Refleja el canje integrado de recompensas en el carrito de LC como una funcionalidad completada y validada).
Cuando un negocio decide activar tanto el módulo de fidelización LoyalPyME Core (LCo) para la gestión de la lealtad de sus clientes, como el módulo de operativa de servicio LoyalPyME Camarero (LC) para digitalizar la experiencia en el local, se desbloquea un potencial extraordinario. La integración fluida y pensada entre ambos módulos crea una experiencia de cliente superior, cohesiva y gratificante, al mismo tiempo que proporciona al negocio herramientas más potentes para la gestión, el análisis y el crecimiento.
Este documento detalla los puntos de contacto, las sinergias y los flujos de trabajo específicos que surgen cuando LCo y LC operan conjuntamente.
Para un cliente que interactúa con un establecimiento que ha activado y sincronizado LoyalPyME Core y LoyalPyME Camarero, el recorrido se enriquece, ofreciendo conveniencia operativa y recompensas por su lealtad de manera integrada.
- Punto de Entrada Principal (LC): El cliente escanea el QR de mesa (
/m/:businessSlug/:tableIdentifier), explora la carta, personaliza ítems y prepara su pedido. Este flujo es gestionado porPublicMenuViewPage.tsx. - Integración Visible de LCo: En la interfaz de la carta LC, se presentan opciones para "Iniciar Sesión" (si ya tiene cuenta LCo) o "Registrarse" (para crear una).
- Objetivo: Asociar un
customerIdde LCo alOrderque se cree en LC para habilitar el canje de recompensas y la acumulación de puntos.
- Flujo de Login/Registro: Al seleccionar "Iniciar Sesión" o "Registrarse" desde LC, se usan modales para los formularios de LCo, manteniendo al cliente en el contexto del pedido.
- Sincronización de Sesión: Tras una autenticación/registro exitoso, el frontend almacena el
customerIdy token JWT de LCo.
- El cliente configura su pedido en la interfaz LC y procede al envío.
- Payload del Pedido LC: Si el cliente se identificó con LCo, el
customerIdse incluye en elCreateOrderPayloadDto. Adicionalmente, el payload ahora incluyeredeemedRewardIden los ítems canjeados y/o unappliedLcoRewardIdglobal para descuentos sobre el total. - Procesamiento Backend (LC): El servicio
order-creation.service.tsasocia elcustomerIdal campoOrder.customerLCoIdy procesa las recompensas aplicadas.
- Evento Disparador Clave: La acumulación de puntos LCo se produce cuando un
Orderdel Módulo Camarero, que tiene uncustomerLCoIdasociado, cambia suOrderStatusaPAID. - ¿Quién marca el pedido como
PAID? El Camarero, desde su interfaz de gestión de pedidos (WaiterOrderManagementPage), después de que el cliente haya pagado físicamente. - Lógica de Backend para la Integración LCo-LC:
- Detección del Evento: El
order-payment.service.tsdetecta el cambio de estado aPAID. - Verificación: Comprueba que
Order.customerLCoIdno es nulo. - Cálculo de Puntos: Obtiene
Order.finalAmountyBusiness.pointsPerEuro, y aplica posibles multiplicadores de puntos delTierdel cliente. - Actualización de Datos en LCo: De forma robusta, crea un registro en
ActivityLog(LCo) de tipoPOINTS_EARNED_ORDER_LC, actualiza los puntos (User.points), el gasto total y las visitas del cliente, y dispara la reevaluación de su nivel de fidelización.
- Notificación al Cliente (Futuro): Se planea enviar un email o notificación push informando los puntos ganados.
- Detección del Evento: El
- Esta es una funcionalidad clave ya implementada que se construye sobre la identificación del cliente.
- Visualización y Canje en Carrito (
ShoppingCartModal.tsx):- Si el cliente está identificado con LCo, el modal del carrito muestra una sección "Mis Recompensas" con las ofertas que puede permitirse con sus puntos.
- Recompensas de Producto Gratis: El cliente puede seleccionar una recompensa de tipo "Producto Gratis" (ej. "Café Gratis"). Al hacerlo, ese
MenuItemse añade al carrito con precio 0 y una marca distintiva de "recompensa". - Recompensas de Descuento: El cliente puede aplicar una recompensa de tipo "Descuento" (ej. "5€ de descuento"). Al hacerlo, el total del pedido se recalcula instantáneamente para reflejar el descuento. Solo un descuento de este tipo puede estar activo a la vez.
- Sincronización Transaccional en Backend:
- Payload Enriquecido: El pedido enviado desde el frontend incluye los
redeemedRewardIdde los ítems gratis y/o elappliedLcoRewardIddel descuento global. - Validación Atómica: El backend (
order-creation.service.ts) recibe el pedido y, dentro de una única transacción, realiza todas las validaciones:- Verifica que el cliente tiene suficientes puntos.
- Verifica que la recompensa es válida y aplicable.
- Debita los puntos correspondientes de la cuenta del cliente (
User.points). - Crea el
Ordery susOrderItems, aplicando los descuentos y precios correctos. - Genera un registro en
ActivityLogpara el canje de la recompensa.
- Esta naturaleza transaccional asegura que no se canjee una recompensa sin crear el pedido correctamente, o viceversa, manteniendo la integridad de los datos.
- Payload Enriquecido: El pedido enviado desde el frontend incluye los
- El
ActivityLogdel cliente en su dashboard LCo (ActivityTab.tsx) es la fuente central de información. - Entradas de Integración LC+LCo:
POINTS_EARNED_ORDER_LC: Detalla los puntos ganados por pedidos en el Módulo Camarero.REWARD_REDEEMED_IN_LC_ORDER: Detalla las recompensas LCo canjeadas directamente en los pedidos LC.POINTS_REDEEMED_REWARD: Se mantiene para canjes realizados desde el propio dashboard de cliente.
- Ubicación: Sección de "Recompensas" y "Gestión de Carta" en el panel de admin.
- Parámetros Configurables por el
BUSINESS_ADMIN:- Acumulación de Puntos:
- Interruptor: "Habilitar/Deshabilitar Acumulación de Puntos LCo desde Pedidos LC" (Funcionalidad Futura).
- Campo
pointsPerEuroen la configuración del negocio (Ya implementado).
- [COMPLETADO] Mapeo de Recompensas LCo: La integración se configura al crear la recompensa. En el
RewardForm.tsx, si el admin elige el tipo "Producto Gratis", se le presenta un selector con todos losMenuItemde su carta (obtenidos de la API de LC), permitiéndole vincular la recompensa directamente a un producto.
- Acumulación de Puntos:
- Perfil de Cliente Unificado (Admin LCo -
AdminCustomerManagementPage):- Al ver un cliente LCo, mostrar una nueva pestaña/sección "Actividad en Módulo Camarero":
- Resumen: Nº total de pedidos LC, gasto total LC, fecha último pedido LC.
- (Opcional) Lista de los N últimos pedidos LC con enlace a sus detalles.
- Al ver un cliente LCo, mostrar una nueva pestaña/sección "Actividad en Módulo Camarero":
- Sincronización de Métricas Clave LCo:
User.totalSpendyUser.totalVisits(LCo) se actualizan no solo por QR LCo, sino también porOrders LC pagados y asociados al cliente. - Reportes Combinados: Posibilidad de segmentar y analizar el impacto de LC en la progresión de niveles de LCo y el impacto de las recompensas LCo en las ventas de LC.
- Incentivos Dirigidos: Crear Recompensas LCo específicas (ej. "Doble Puntos en tu primer pedido LC") o Beneficios de Nivel LCo atractivos para usar con LC.
- Promoción de LCo dentro de la Experiencia LC: Mensajes/banners configurables por el admin en
PublicMenuViewPagepara incentivar registro/login en LCo.
- Estado
PAIDenOrderLC (CRUCIAL): El mecanismo para marcar unOrderLC comoPAIDpor el camarero es robusto y es el disparador principal para la asignación de puntos LCo. - [COMPLETADO] Transaccionalidad en Canjes LCo en Pedidos LC: La lógica de canje de recompensas y débito de puntos durante la creación de un pedido LC ya está implementada de forma transaccional en
order-creation.service.tspara asegurar la consistencia de datos entre los módulos. - Consistencia de Datos del Cliente: Si un cliente actualiza sus datos en LCo, los snapshots en
OrderyOrderItemaseguran que los datos históricos de pedidos LC se mantienen intactos.
La Sinergia Estratégica:
La integración de LoyalPyME Camarero (LC) con LoyalPyME Core (LCo) no es solo una suma de funcionalidades, sino una multiplicación de valor. LC moderniza y agiliza la experiencia de servicio, capturando datos de consumo detallados. LCo utiliza estos datos para construir programas de lealtad que incentivan la recurrencia, aumentan el valor de vida del cliente y fortalecen la relación.