Cómo Cambiar el Estado de las Órdenes

Guía completa para actualizar el estado de las órdenes desde diferentes interfaces y entender el flujo de trabajo

¿Por qué es importante actualizar los estados?

Mantener actualizados los estados de las órdenes es fundamental para:

  • • Coordinar el trabajo entre cocina, meseros y cadetes
  • • Informar a los clientes sobre el progreso de sus pedidos
  • • Generar notificaciones en tiempo real
  • • Mantener un flujo de trabajo eficiente
  • • Facilitar el seguimiento y análisis del servicio

Transiciones de Estado Permitidas

Flujo Normal de una Orden

pending
confirmed
confirmed
preparing
preparing
ready
ready
out_for_delivery
out_for_delivery
delivered

Cancelación de Órdenes

Una orden puede cancelarse desde cualquier estado excepto:

  • delivered - Ya fue entregada
  • cancelled - Ya está cancelada

Importante: La cancelación revierte el stock automáticamente y registra la acción en el log de auditoría.

Permisos por Rol

Admin / Manager

Control total

  • Puede cambiar cualquier estado
  • Puede cancelar órdenes
  • Puede asignar/reasignar cadetes
  • Acceso desde panel de administración

Cocina

Vista de preparación

  • confirmedpreparing
  • preparingready
  • No puede cancelar órdenes
  • No puede asignar cadetes

POS / Cajero

Punto de venta

  • Puede crear órdenes (inician en confirmed)
  • Puede asignar cadetes a órdenes
  • readyout_for_delivery (con cadete)
  • Puede cancelar órdenes recientes

Cadete

Delivery

  • out_for_deliverydelivered
  • Solo puede marcar como entregada
  • No puede cancelar órdenes
  • Acceso desde app móvil

Cómo Cambiar el Estado - Paso a Paso

Desde el Panel de Administración

  1. 1

    Accede a la sección de Órdenes

    Navega a /{slug}/admin/orders

  2. 2

    Selecciona la orden

    Haz clic en la orden que deseas actualizar. Se abrirá un modal con los detalles.

  3. 3

    Cambia el estado

    En el modal, encontrarás un dropdown con los estados disponibles. Selecciona el nuevo estado.

  4. 4

    Confirma el cambio

    Haz clic en "Actualizar Estado". El sistema validará la transición y emitirá notificaciones.

Desde la Vista de Cocina

  1. 1

    Accede a la vista de cocina

    Navega a /{slug}/kitchen e inicia sesión con PIN

  2. 2

    Visualiza las órdenes pendientes

    Verás tarjetas con las órdenes en estado confirmed

  3. 3

    Marca como "En Preparación"

    Haz clic en "Comenzar a Preparar". El estado cambiará a preparing

  4. 4

    Marca como "Lista"

    Cuando termines, haz clic en "Marcar como Lista". El estado cambiará a ready

💡 Consejo: La vista de cocina se actualiza en tiempo real. No necesitas refrescar la página para ver nuevas órdenes.

Desde el Punto de Venta (POS)

  1. 1

    Accede al POS

    Navega a /{slug}/pos e inicia sesión

  2. 2

    Ve a "Órdenes"

    Navega a /{slug}/pos/orders

  3. 3

    Gestiona órdenes

    Desde aquí puedes:

    • • Asignar cadetes a órdenes listas
    • • Ver el estado actual de cada orden
    • • Cancelar órdenes si es necesario
  4. 4

    Marca como "En Camino"

    Al asignar un cadete, la orden cambia automáticamente a out_for_delivery

Desde la App de Cadete

  1. 1

    Accede con tu PIN único

    Usa el link personalizado: /{slug}/cadete/{id}

  2. 2

    Visualiza tus entregas

    Verás todas las órdenes asignadas a ti en estado out_for_delivery

  3. 3

    Revisa los detalles

    Haz clic en una orden para ver la dirección, productos, monto a cobrar, etc.

  4. 4

    Marca como entregada

    Cuando completes la entrega, haz clic en "Marcar como Entregada". El estado cambiará a delivered

💡 Consejo: Al marcar como entregada, se calcula automáticamente tu comisión según la configuración del cadete (porcentaje o monto fijo).

Endpoint de la API

Actualizar Estado de una Orden

PATCH/api/{slug}/orders/{orderId}/status

Request Body:

{
  "status": "preparing"  // Nuevo estado
}

Headers:

Authorization: Bearer <token>
Content-Type: application/json

Response (200 OK):

{
  "success": true,
  "order": {
    "_id": "65a1234567890abcdef12345",
    "orderNumber": "ORD-1001",
    "status": "preparing",
    "items": [...],
    "total": 2500,
    "updatedAt": "2024-01-15T14:30:00.000Z"
  }
}

Posibles Errores:

400Transición de estado no válida
401No autorizado (token inválido o expirado)
403Sin permisos para cambiar este estado
404Orden no encontrada

Notificaciones en Tiempo Real

¿Cómo funcionan las notificaciones?

Cuando se actualiza el estado de una orden, el sistema emite eventos WebSocket que permiten actualizaciones en tiempo real en todas las interfaces conectadas.

orderUpdatedEvento principal

Se emite cada vez que cambia el estado de una orden.

// Socket.IO Namespace: /orders
// Room: tenantId

socket.emit('orderUpdated', {
  order: {
    _id: "...",
    orderNumber: "ORD-1001",
    status: "preparing",
    items: [...],
    // ... resto de la orden
  }
});

orderReadyOrden lista para entregar

Se emite cuando una orden cambia a estado ready.

socket.emit('orderReady', {
  order: {
    _id: "...",
    orderNumber: "ORD-1001",
    status: "ready",
    // ...
  }
});

orderAssignedCadete asignado

Se emite cuando se asigna un cadete a una orden.

socket.emit('orderAssigned', {
  order: {
    _id: "...",
    orderNumber: "ORD-1001",
    status: "out_for_delivery",
    assignedCadete: {
      name: "Juan Pérez",
      phone: "123456789"
    }
    // ...
  }
});

orderDeliveredOrden entregada

Se emite cuando una orden es marcada como entregada.

socket.emit('orderDelivered', {
  order: {
    _id: "...",
    orderNumber: "ORD-1001",
    status: "delivered",
    deliveredAt: "2024-01-15T15:45:00.000Z"
    // ...
  }
});

orderCancelledOrden cancelada

Se emite cuando se cancela una orden.

socket.emit('orderCancelled', {
  order: {
    _id: "...",
    orderNumber: "ORD-1001",
    status: "cancelled",
    cancellationReason: "Cliente solicitó cancelación"
    // ...
  }
});

💡 Consejo: Todas las interfaces (Admin, Kitchen, POS, Cadete) están suscritas a estos eventos para mantener la información actualizada sin necesidad de refrescar la página.

Validaciones y Reglas de Negocio

⚠️No se puede retroceder de estado

El sistema solo permite avanzar en el flujo. Por ejemplo, no puedes cambiar de ready a preparing.

ℹ️Órdenes POS inician confirmadas

Las órdenes creadas desde el POS (punto de venta) inician directamente en estado confirmed, saltándose el estado pending.

🚚Cadete requerido para "En Camino"

Para cambiar una orden a out_for_delivery, debe tener un cadete asignado. Si la orden es para retiro en local, se puede marcar directamente como delivered desde ready.

🔒Órdenes entregadas son inmutables

Una vez que una orden está en estado delivered, no se puede modificar su estado ni cancelar. Esto garantiza la integridad de los registros de ventas.

📦Cancelación revierte stock

Al cancelar una orden, el sistema automáticamente revierte el stock de ingredientes que fueron descontados al crear la orden. Esto se registra en el log de movimientos de stock.

Auditoría completa

Cada cambio de estado se registra con: usuario que realizó el cambio, timestamp, estado anterior, estado nuevo, y dirección IP. Esto permite un seguimiento completo de la orden.

Mejores Prácticas

Actualiza los estados rápidamente

Mantén los estados actualizados en tiempo real. Esto mejora la coordinación del equipo y la experiencia del cliente.

Usa las notificaciones

Aprovecha las notificaciones en tiempo real para coordinar el trabajo entre cocina, meseros y cadetes sin necesidad de comunicación manual.

Asigna cadetes desde el POS

Cuando una orden esté lista, asigna el cadete inmediatamente desde el POS para optimizar los tiempos de entrega.

Cancela con cuidado

Antes de cancelar una orden, asegúrate de que realmente es necesario. Recuerda que la cancelación revierte el stock y queda registrada en la auditoría.

Monitorea el flujo

Revisa regularmente las órdenes que llevan mucho tiempo en un estado. Esto ayuda a identificar cuellos de botella en el proceso.

Capacita a tu equipo

Asegúrate de que todo el equipo entienda el flujo de estados y la importancia de mantenerlos actualizados correctamente.

Solución de Problemas

❌ Error: "Transición de estado no válida"

Causa: Estás intentando hacer una transición que no está permitida.

Solución:

  • Verifica el estado actual de la orden
  • Consulta el diagrama de transiciones válidas arriba
  • Asegúrate de seguir el flujo correcto
  • Recuerda que no puedes retroceder de estado
🔒 Error: "Sin permisos para cambiar este estado"

Causa: Tu rol no tiene permisos para realizar ese cambio de estado.

Solución:

  • Verifica tu rol actual (Admin, Kitchen, POS, Cadete)
  • Revisa la sección "Permisos por Rol" arriba
  • Si necesitas más permisos, contacta a un administrador
  • Algunas acciones solo las puede hacer el Admin
🚚 Error: "Debe asignar un cadete primero"

Causa: Intentas marcar la orden como "En Camino" sin asignar un cadete.

Solución:

  • Asigna un cadete a la orden primero
  • Puedes hacerlo desde el panel de administración o el POS
  • Si la orden es para retiro en local, marca como "delivered" directamente desde "ready"
🔄 Las notificaciones no se actualizan en tiempo real

Causa: Problema de conexión WebSocket.

Solución:

  • Verifica tu conexión a internet
  • Recarga la página (F5)
  • Comprueba que el servidor backend esté funcionando
  • Revisa la consola del navegador para ver errores de WebSocket
  • Si el problema persiste, contacta al soporte técnico
❌ No puedo cancelar una orden

Causa: La orden ya fue entregada o cancelada.

Solución:

  • Las órdenes en estado "delivered" o "cancelled" no se pueden modificar
  • Si necesitas hacer un ajuste, crea una nueva orden o un reembolso
  • Consulta con un administrador para casos especiales

Guías Relacionadas

¿Necesitas más ayuda?

Si tienes dudas sobre el cambio de estados o necesitas asistencia, estamos aquí para ayudarte.

Centro de ayuda: guías y tutoriales | Nandu