Saltar al contenido principal

Integracion con Procura

Flujo: De Requisicion Interna a Compra

Cuando un item de una requisicion de material no tiene stock disponible en el almacen, se enruta al modulo de Procura para iniciar el proceso de compra. El sistema crea un Analisis de Procura (ProcurementAnalysis) que gestiona todo el ciclo hasta la recepcion del material.

graph LR
A[Requisicion de Material] -->|Sin stock| B[Enrutar a Procura]
B --> C[Analisis de Procura]
C --> D[Cotizacion y Analisis]
D --> E[Asignacion de Proveedores]
E --> F[Ordenes de Compra]
F --> G[Recepcion de Material]
G -->|STOCK_REPLENISHMENT| H[Requisicion FULFILLED]
G -->|Otro proposito| I[Requisicion READY_FOR_DISPATCH]
I --> J[Logistica despacha]
J --> H

Creacion del Analisis de Procura

Cuando logistica enruta items a procura (via /fulfill-and-procure o /route-procurement), el sistema crea automaticamente un ProcurementAnalysis:

Datos que se propagan

DatoOrigenDestino
TituloAuto-generado"Analisis de Procura - {codigo_requisicion}"
Requisicion origenMaterialRequisition.idProcurementAnalysis.materialRequisitionId
ItemsMaterialRequisitionItemProcurementAnalysisItem
Descripcion del itemMaterialRequisitionItem.descriptionProcurementAnalysisItem.description
CantidadCantidad pendiente (no despachada)ProcurementAnalysisItem.quantity
UnidadMaterialRequisitionItem.unitProcurementAnalysisItem.unit
Item de inventarioMaterialRequisitionItem.inventoryItemIdProcurementAnalysisItem.inventoryItemId
Vinculo de trazabilidadMaterialRequisitionItem.idProcurementAnalysisItem.materialRequisitionItemId

Actualizacion de Items

Al enrutarse a procura, cada item de la requisicion se actualiza:

  • fulfillmentStatus cambia a PROCUREMENT (o PARTIAL si ya tenia despacho parcial)
  • procurementQuantity se incrementa con la cantidad enrutada
  • metadata registra: quien enruto, cuando, y el ID/codigo del analisis de procura creado

Estado de la Requisicion

Segun el resultado de la operacion:

EscenarioEstado resultante
Todos los items enrutados a procura, ninguno despachadoAWAITING_PROCUREMENT
Algunos despachados, otros en procuraPARTIALLY_FULFILLED
Todos despachadosFULFILLED

Trazabilidad

El sistema mantiene trazabilidad completa en toda la cadena:

MaterialRequisitionItem
-> ProcurementAnalysisItem.materialRequisitionItemId
-> SupplierAllocation.procurementAnalysisItemId
-> PurchaseOrderItem
-> InventoryMovement (ENTRY al recibir)
  • La vista de detalle de la requisicion muestra el estado de cada item: si fue despachado del almacen o si esta en proceso de compra
  • El fulfillmentStatus del item se actualiza automaticamente a traves del ciclo

Cierre de Ciclo: Recepcion de OC

Cuando la Orden de Compra generada desde el analisis de procura se recibe completamente, el sistema cierra el ciclo automaticamente:

Segun proposito de la requisicion

PropositoAccion al recibir OCEstado final
STOCK_REPLENISHMENTItems marcados como FULFILLED automaticamente. Stock ya actualizado por la recepcionFULFILLED
Otros (DEPARTMENT_ASSIGNMENT, PROJECT_ASSIGNMENT, ASSET_ASSIGNMENT)Requisicion pasa a READY_FOR_DISPATCH. Logistica debe despachar manualmenteREADY_FOR_DISPATCH

Proceso automatico

  1. El PurchaseOrderReceiptService detecta que la OC esta completa (todos los items recibidos)
  2. Busca el ProcurementAnalysis vinculado a la OC (via metadata.purchaseOrderIds)
  3. Obtiene la MaterialRequisition vinculada al analisis
  4. Sincroniza inventoryItemId de items de OC -> items de analisis -> items de requisicion
  5. Actualiza el estado de la requisicion segun el proposito
  6. Registra la transicion en el ActivityTimeline
  7. Envia notificaciones

Notificacion por recepcion parcial

Cada vez que se recibe material de una OC (aunque sea parcial), si la requisicion esta en estado AWAITING_PROCUREMENT:

  1. La requisicion pasa automaticamente a READY_FOR_DISPATCH
  2. Se notifica a usuarios con permiso requisitions:fulfill (equipo de logistica)
  3. El mensaje incluye el codigo de la OC y la requisicion

Notificaciones

Al enrutar a procura

  • Destinatario 1: Solicitante original -- se le informa que sus items requieren compra
  • Destinatario 2: Personal de procura (usuarios con permiso procurement:create o procurement:*)
  • Contenido: Numero de items, codigo de requisicion, estimado total

Al recibir material (AWAITING_PROCUREMENT -> READY_FOR_DISPATCH)

  • Destinatario: Personal de logistica (usuarios con permiso requisitions:fulfill)
  • Contenido: Material recibido de OC {codigo}, requisicion {codigo} tiene items listos para despacho
  • Prioridad: Alta

Al completar ciclo (STOCK_REPLENISHMENT -> FULFILLED)

  • Destinatario: Solicitante original
  • Contenido: Los materiales de tu requisicion {codigo} han sido recibidos y el stock ha sido actualizado

Ejemplo Completo

  1. Juan del departamento de Produccion solicita 50 metros de tuberia 4" y 10 valvulas check
  2. Su gerente aprueba -> director aprueba -> requisicion RM-2026-0015 en estado APPROVED
  3. El almacenista Pedro verifica stock:
    • Tuberia 4": 30m disponibles (parcial)
    • Valvulas check: 0 disponibles
  4. Pedro usa Despacho + Procura combinado:
    • Despacha 30m de tuberia (movimiento EXIT generado)
    • Enruta a procura: 20m de tuberia + 10 valvulas check
  5. Se crea Analisis de Procura PA-2026-0008 vinculado a RM-2026-0015
  6. Requisicion pasa a PARTIALLY_FULFILLED
  7. Contratacion analiza, asigna proveedores, director aprueba
  8. Se genera OC-2026-0033 al proveedor
  9. Al recibir el material, la requisicion pasa a READY_FOR_DISPATCH
  10. Pedro recibe notificacion, abre la requisicion y despacha los items restantes
  11. Requisicion RM-2026-0015 pasa a estado FULFILLED