Cheaf Docs
Orders/Order Unfulfilled

Manejo de Pedidos No Completados en Tiempo Real

Documentación completa del proceso `handle_unfulfilled_order_in_realtime` que gestiona la visibilidad de los pedidos no completados en el dashboard operativo del partner.

Identificador de la Función: handle_unfulfilled_order_in_realtime

Ubicación: /app/realtime/signals.py

Tipo: Django Signal (post_save receiver)


Disparador

Esta regla se activa automáticamente cada vez que un pedido es marcado como No Completado (UnfulfilledOrder) cuando un pedido es:

  1. Creado por primera vez.
  2. Modificado (actualizado) en el sistema.

Objetivo Principal

Gestionar la visibilidad de los No Completados en dashboard operativo del Partner (carrusel). Esto implica:

  • Crear una notificación en tiempo real cuando un pedido es un No Completado.
  • Eliminar dicha notificación cuando el pedido fue gestionado.

Contexto y Definiciones

  • UnfulfilledOrder: Un pedido que no pudo ser completado durante la operación de la tienda.
  • Order: Representa el pedido general al que pertenece el Unfulfilled.
  • Carrusel: Dashboard operativo donde aparecen los pedidos no completados que requieren gestión del partner.

Reglas de Negocio Detalladas

1. Manejo al CREAR un Nuevo Pedido No Completado

Condición Principal:

Se registra un nuevo pedido No Completado.

Sub-Condiciones y Acciones:

Regla 1.1: Pedido Sin Respuesta de Tienda

  • Condición:
    • La tienda aún NO ha dado una respuesta sobre este pedido (unfulfilled_order.store_answer es nulo/vacío)
    • Y el estado del unfulfilled NO es "4" (Unfulfilled by User)
  • Acción:
    • Crear registro en el sistema de tiempo real
    • Mostrar en carrusel del partner

Regla 1.2: Pedido Cancelado con Stock No Devuelto (Cancelado a Destiempo Retail)

  • Condición:
    • La tienda aún NO ha dado una respuesta (unfulfilled_order.store_answer es nulo/vacío)
    • Y el stock NO ha sido devuelto (order.stock_returned = False)
    • Y el pedido está cancelado (order.status = "8")
  • Acción:
    • Crear registro en el sistema de tiempo real
    • Genera un Unfulfilled by User.
    • Mostrar en carrusel del partner para gestión de conciliación

Casos de Uso:

  • Caso A: Pedidos que requieren respuesta del partner (encuesta).
  • Caso B: Pedidos cancelados a destiempo que requieren paso por caja para conciliación

2. Manejo al ACTUALIZAR un Pedido No Completado

Condición Principal:

Se modifica un pedido No Completado existente.

Sub-Condiciones y Acciones:

Regla 2.1: Pedido Respondido por la Tienda

  • Condición:
    • La tienda HA DADO una respuesta sobre el pedido (unfulfilled_order.store_answer tiene un valor) es decir contesto la encuesta.
  • Acción:
    • Eliminar registro del sistema de tiempo real
    • Remover del carrusel (considerado gestionado)

Regla 2.2: Pedido Resuelto Sin Respuesta Directa

  • Condición:
    • La tienda aún NO ha dado una respuesta (unfulfilled_order.store_answer es nulo/vacío)
    • Y el estado del unfulfilled NO se encuentra entre:
      • "9" (Unfulfilled)
      • "14" (In Review)
  • Acción:
    • Eliminar registro del sistema de tiempo real
    • Remover del carrusel (considerado resuelto automáticamente)

Regla 2.3: Pedido Pasado por Caja Sin Respuesta Directa.

  • Acción:
    • Eliminar registro del sistema de tiempo real
    • Remover del carrusel (considerado gestionado)

Estados y Códigos

Estados de UnfulfilledOrder

  • "4": Unfulfilled by User (No Recogido)
  • "9": Unfulfilled (Pendiente)
  • "14": In Review (En revisión)

Estados de Order

  • "8": Canceled (Cancelado)
  • "4": Unfulfilled by User (No Recogido)
  • "9": Unfulfilled (Pendiente)
  • "14": In Review (En revisión)

Campos Clave

  • store_answer: Respuesta de la tienda (null/vacío = sin respuesta)
  • stock_returned: Indica si el stock fue devuelto (Boolean)
  • status: Estado del pedido/unfulfilled

Comportamiento del Sistema

Creación en Carrusel

Los pedidos aparecen en el carrusel cuando:

  1. Son nuevos unfulfilled sin respuesta de tienda
  2. Son pedidos cancelados con stock no devuelto

Eliminación del Carrusel

Los pedidos se eliminan del carrusel cuando:

  1. La tienda proporciona una respuesta
  2. El estado cambia a uno que indica resolución
  3. El Pedido es pasado por Caja (Cencosud/Retail).

Gestión Automática

  • Timeout: Si el pedido no es gestionado en 24 horas, el cron cencosud_unfulfilled lo procesará