Problema:

La empresa McDonald's enfrenta un problema de flujo de información con los pedidos realizados por medio de plataformas de terceros como Uber Eats, Glovo, Just Eat, etc. Los códigos de pedido utilizados por los Repartidores y McDonald's son diferentes, lo que complica la identificación y actualización del estado de los pedidos.

Solución:

Implementar un sistema gestionado por AiManager para McDonald's que centraliza la información de los pedidos y permite la interacción mínima entre McDonald's y los Repartidores. Este sistema utilizará códigos QR y pantallas táctiles para actualizar y mostrar el estado de los pedidos.

Objetivo:

Optimizar el flujo de información y reducir la cantidad de interacciones necesarias entre McDonald's y los Repartidores, asegurando que los pedidos sean gestionados de manera eficiente y segura.

Seguridad en la Gestión de Pedidos con Códigos QR

El sistema de seguridad implementado para la gestión de pedidos de repartidores, similar al utilizado en McDonald's, se basa en el uso de códigos QR digitales y variables, los cuales se actualizan periódicamente. Esto asegura que los repartidores no puedan informar su llegada antes de que el pedido esté listo, evitando fraudes y protegiendo la integridad del proceso de recogida de pedidos.

Ejemplo de Seguridad

Actualización de Código QR: Cada minuto, el código QR disponible en la pantalla táctil se actualiza automáticamente y caduca a los 5 minutos siguientes. Esto garantiza que solo los repartidores que lleguen en el momento adecuado puedan escanear el código correcto y proceder con la actualización del estado de su pedido.

Tecnologías Utilizadas

  • JWT (JSON Web Token): Utilizamos JWT para encapsular y firmar la información crítica del código QR, como la organización y la sucursal. Estos tokens tienen una duración de 5 minutos para asegurar que no puedan ser reutilizados después de su expiración. Los tokens se generan en el backend y se almacenan en Redis, junto con la URL corta asociada.
  • Códigos QR: Los códigos QR generados contienen una URL corta asociada a un JWT. De esta manera, se garantiza que el código sea único y no reutilizable una vez haya expirado.

Seguridad en el Sistema

1. Firma y Expiración del JWT

  • El JWT está firmado utilizando el algoritmo HMAC SHA-256, lo que asegura que solo el servidor que posee la clave secreta puede generar o validar los tokens.
  • Cada JWT incluye una propiedad de expiración (exp), configurada para caducar en 5 minutos. Esto asegura que los códigos QR sean temporales y que los tokens antiguos no puedan ser reutilizados.

2. Actualización del Código QR

  • El código QR que se genera contiene una URL corta asociada al JWT. Cada 5 minutos, el código QR se actualiza automáticamente, asegurando que solo los repartidores que escaneen el código en el momento adecuado puedan procesar el pedido.
  • Este proceso de actualización automática evita que los repartidores puedan informar su llegada antes de tiempo o reutilizar un código QR antiguo para manipular el estado del pedido.

Ejemplo de Implementación de Seguridad en McDonald's

En el sistema de gestión de pedidos de McDonald's, se utiliza un mecanismo similar en el que los códigos QR se actualizan automáticamente cada 5 minutos para evitar fraudes. Este sistema asegura que los repartidores no puedan escanear códigos QR antes de que el pedido esté realmente listo, protegiendo así la integridad del proceso de recogida de pedidos.

Al usar un token que expira en un corto período de tiempo (5 minutos), se minimiza la ventana de oportunidad para cualquier intento de manipulación o reutilización del código QR.

Protección de Datos y Encriptado:

Para garantizar la seguridad de los datos, se han implementado múltiples medidas de protección, incluyendo cifrado avanzado y controles de acceso:

Cifrado de Datos:

Los datos están encriptados utilizando el estándar de cifrado avanzado (AES) con una clave de 256 bits y protocolos criptográficos seguros TLS. Estos son estándares de última generación que garantizan que la piratería no pueda robarse datos, ya que están protegidos por un fuerte cifrado.

Controles de Acceso:

El acceso a los datos de los usuarios está restringido según el puesto de trabajo. Solo los empleados autorizados pueden acceder a la información, y el acceso es revocado inmediatamente cuando un empleado deja la empresa.

Cumplimiento con Estándares y Legislación:

Cumplimos con el Reglamento General de Protección de Datos (RGPD), asegurando que los datos personales se manejan de acuerdo con las leyes de protección de datos vigentes.

Identificación:

Además del código, los Repartidores podrán elegir un nombre clave o un emoticono o color para facilitar la rápida identificación en la pantalla.

Alertas:

  • Pantalla de Espera: Si el pedido está listo antes de que el Repartidor llegue, se mostrará el Código del Repartidor en la pantalla de espera, lo que permitirá al Repartidor identificar rápidamente su pedido y evitará confusiones, agilizando los tiempos de recogida.
  • Notificación en el Celular: Cuando el pedido esté listo, si el Repartidor ha escaneado el código QR con su celular, recibirá una notificación en su dispositivo. Esto permitirá al Repartidor esperar fuera del local y solo entrar cuando el pedido esté listo, mejorando la eficiencia y reduciendo el tiempo de espera dentro del local.

Ventajas:

  • Seguridad: La variabilidad del código QR evita el fraude y asegura que la información de llegada del Repartidor sea precisa.
  • Eficiencia: Reduce el tiempo y las interacciones necesarias entre el Repartidor y el personal de McDonald's, mejorando la velocidad de entrega.
  • Claridad: La identificación mediante nombres claves o emoticonos facilita la rápida visualización y gestión de los pedidos.
  • Actualización en tiempo real: Los estados de los pedidos se actualizan en tiempo real en la pantalla o en el móvil del Repartidor, asegurando transparencia en el proceso.

Diagrama de Secuencia:

sequenceDiagram
   participant SistemaPedidos as Sistema de Pedidos (Uber Eats, Glovo, etc.)
   participant AiManager as AiManager McDonald's
   participant McDonalds as McDonald's
   participant Repartidor as Repartidor

   SistemaPedidos->>McDonalds: Envía Pedido
   McDonalds->>McDonalds: Empieza la preparación del pedido

   %% Bifurcación de los escenarios %%
   alt EL REPARTIDOR LLEGA Y EL PEDIDO ESTÁ LISTO
       McDonalds->>AiManager: Ingresa el código Repartidor
       AiManager->>Repartidor: Mostrar Estado Listo
       Repartidor->>AiManager: Se lleva el pedido o Selecciona/busca el Código del Pedido con su celular mediante QR o lo ingresa en la pantalla táctil
   else EL REPARTIDOR LLEGA Y EL PEDIDO NO ESTÁ LISTO
       Repartidor->>AiManager: Ingresa el Código del Pedido con su celular mediante QR o lo ingresa en la pantalla táctil
       AiManager->>Repartidor: Muestra en pantalla o celular Estado En Preparación
       McDonalds->>AiManager: Busca o selecciona el código Repartidor
       AiManager->>Repartidor: Muestra el Estado Listo
   end

   McDonalds->>Repartidor: Entregar Pedido
   Repartidor->>SistemaPedidos: Confirmar Entrega
   SistemaPedidos->>AiManager: Confirmar Entrega

Explicación del Diagrama:

  1. Inicio del Pedido:
    • El sistema de pedidos (Uber Eats, Glovo, etc.) envía el pedido a AiManager McDonald's.
    • AiManager notifica a McDonald's para que empiece la preparación del pedido.
  2. Bifurcación de Escenarios:
    • Si el pedido está listo antes de que llegue el Repartidor:
      • McDonald's ingresa el código del Repartidor en AiManager.
      • El Repartidor se lleva el pedido o escanea el QR y selecciona/busca el código del pedido en AiManager.
      • AiManager muestra al Repartidor el estado "Listo".
    • Si el Repartidor llega antes de que el pedido esté listo:
      • El Repartidor escanea el QR e ingresa el código del Repartidor en AiManager.
      • AiManager muestra al Repartidor el estado "En Preparación" en su celular o pantalla.
      • McDonald's busca o selecciona el código del Repartidor en AiManager cuando el pedido está listo.
      • AiManager muestra al Repartidor el estado "Listo".
  3. Finalización del Pedido:
    • McDonald's entrega el pedido al Repartidor.
    • El Repartidor confirma la entrega en el sistema de pedidos.
    • El sistema de pedidos confirma la entrega a AiManager.

Diagrama de Flujo

graph TD
    subgraph Leyenda
        A1[<span style="background-color:#CAE6E2">Sistema de Pedidos</span>]:::legend
        A2[<span style="background-color:#F79E2D">AiManager</span>]:::legend
        A3[<span style="background-color:#FFEF7D">McDonald's</span>]:::legend
        A4[<span style="background-color:#D0B4FF">Repartidor</span>]:::legend
    end
    classDef legend fill:#f7f7f7,stroke:#000,stroke-width:1px;

    A5[<span style="background-color:#CAE6E2">Sistema de Pedidos</span>]:::orderSystem --> B[<span style="background-color:#FFEF7D">McDonald's</span>]:::mcdonalds
    B --> C[<span style="background-color:#FFEF7D">Preparación del Pedido</span>]:::mcdonalds
    C --> D{<span style="background-color:#FFEF7D">Pedido Listo?</span>}:::mcdonalds
    D --> |Sí| E[<span style="background-color:#F79E2D">Ingresar Código de Repartidor en AiManager</span>]:::aiManager
    D --> |No| F[<span style="background-color:#D0B4FF">Repartidor escanea QR e ingresa Código del Repartidor</span>]:::Repartidor
    F --> G[<span style="background-color:#FFEF7D">Mostrar Estado En Preparación</span>]:::mcdonalds
    G --> H[<span style="background-color:#FFEF7D">McDonald's busca Código del Repartidor</span>]:::mcdonalds
    H --> I[<span style="background-color:#FFEF7D">Mostrar Estado Listo</span>]:::mcdonalds
    I --> J[<span style="background-color:#FFEF7D">Entregar Pedido</span>]:::mcdonalds
    J --> K[<span style="background-color:#D0B4FF">Confirmar Entrega en Sistema de Pedidos</span>]:::Repartidor
    K --> L[<span style="background-color:#F79E2D">Confirmar Entrega en AiManager</span>]:::aiManager
    E --> M[<span style="background-color:#D0B4FF">Repartidor se lleva el pedido o escanea QR y busca Código del Pedido</span>]:::Repartidor
    M --> N[<span style="background-color:#FFEF7D">Mostrar Estado Listo</span>]:::mcdonalds

    classDef orderSystem fill:#CAE6E2,stroke:#000,stroke-width:1px;
    classDef aiManager fill:#F79E2D,stroke:#000,stroke-width:1px;
    classDef mcdonalds fill:#FFEF7D,stroke:#000,stroke-width:1px;
    classDef Repartidor fill:#D0B4FF,stroke:#000,stroke-width:1px;

Estado de los pedidos:

  • Estado de las Órdenes: Los posibles estados de una orden reflejan el progreso y la interacción entre el personal de McDonald's y los repartidores:

    • pending: El repartidor ha llegado, pero el pedido aún no está listo.
    • ready: El pedido está listo, pero el repartidor aún no ha llegado para recogerlo.
    • readyForPickup: El pedido ha sido confirmado tanto por el personal de McDonald's como por el repartidor. Listo para ser entregado.
    • delivered: El pedido ha sido entregado con éxito al repartidor.
    • cancelled: El pedido ha sido cancelado y no será preparado ni entregado.

Pantallas del Sistema de Turnero McDonald's y su Función:

Repartidor:

  • Estado del Pedido (repartidor/estado-del-pedido):
    • Pantalla donde el repartidor puede ver el estado de su pedido mientras espera. Muestra la información del pedido en tiempo real.
  • Ingreso Código Pedido (repartidor/ingreso-codigo-pedido):
    • Pantalla para que el repartidor ingrese el código del pedido, luego de haber escaneado el código QR en la pantalla de notificar llegada.
  • Notificar Llegada (repartidor/notificar-llegada):
    • Pantalla para notificar la llegada del repartidor. Aquí el repartidor puede escanear un código QR o ingresar manualmente el código del pedido.

Pantalla de Estado:

  • Estado Pedidos (estado/estado-pedidos):
    • Pantalla para mostrar el estado de todos los pedidos. Utilizada para visualizar el estado actual de cada pedido y su tiempo de espera.

Personal de McDonald's:

  • Finalizar Pedido (mcdonalds/finalizar-pedido):
    • Pantalla para que el personal de McDonald's marque un pedido como finalizado. Permite gestionar y actualizar el estado de los pedidos para notificarlos como listos para recoger.