Operaciones
Ciclo de vida del Dispatch

Ciclo de vida del Dispatch (Sync)

Una vez creado un dispatch con /transportes/sync/dispatch, los sistemas externos pueden ejecutar el flujo completo sin necesidad de la app del chofer usando estos endpoints.

Autenticación: todos usan el header Authorization: Bearer <token> (AuthSyncToken), igual que el resto de endpoints /sync/*.


Estados del dispatch

IDEstadoDescripción
1SIN_ASIGNARSin chofer/vehículo asignado
2ASIGNADAListo para iniciar
3EN_TRANSITOEn ruta
4COMPLETATodos los stops completados
5INCOMPLETATerminado con stops pendientes
6ANULADACancelado

1. Iniciar dispatch

POST/transportes/sync/dispatch/start

Transiciona el dispatch de ASIGNADA (2) a EN_TRANSITO (3). Propaga el estado a todos los documentos vinculados.

También puede identificarse por source_id externo:

Identificar por source_id
{
  "dispatch_source_id": "guia.despacho:501",
  "source_system": "external_erp"
}

Campos

CampoTipoDescripción
dispatch_idintID interno del dispatch
dispatch_source_idstringsource_id del dispatch en el sistema externo
source_systemstringSistema externo (requerido con dispatch_source_id)

Proporcionar dispatch_id o (dispatch_source_id + source_system).

Response

{
  "ok": true,
  "code": "SYNC_OK",
  "data": {
    "dispatch_id": 501,
    "statusOk": true,
    "message": "Dispatch started successfully."
  },
  "meta": {
    "route": "/transportes/sync/dispatch/start",
    "method": "PostDispatchStartSync",
    "upsert_action": "processed"
  }
}

2. Iniciar un stop (task/start)

POST/transportes/sync/dispatch/task/start

Marca un stop como iniciado (EN_TRANSITO). Propaga el estado al documento asociado.

Campos

CampoTipoDescripción
driver_idintRequerido. ID del chofer asignado
dispatch_stop_idintID del stop (recomendado, obtenido de GET /sync/dispatch/{sourceId})
task_idstringReferencia tipo STOP:1201 o ENT_FAC:2108
task_typestringVer tabla de tipos abajo
document_idintID del documento asociado al stop
receipt_idintID de la factura si es stop ENT_FAC o ENT_REC
receipt_source_idstringsource_id de la factura (resuelve a receipt_id)
document_source_idstringsource_id del documento (resuelve a document_id)
source_systemstringSistema externo (requerido con source_ids)

Valores de task_type

task_typestop_type_idAcciónDocumento asociado
INICIO_RUTA1Inicio de ruta en hub— (hub)
REC_FAC2Recolección de factura en clientereceipt
REC_OC3Recolección de orden de comprapurchase_order
REC_FPS4Recolección traslado FPStransfer
REC_TTC5Recolección traslado TTCtransfer
ENT_TTC6Entrega traslado TTCtransfer
REC_DEV7Recolección de devoluciónreturn
ENT_FAC8Entrega de factura al clientereceipt
ENT_SEDE9Entrega de devolución en sedereturn
FIN_RUTA10Fin de ruta en hub— (hub)
ENT_REC11Entrega de recolecciones en sedereceipt

Recomendación: usar dispatch_stop_id siempre que sea posible. task_type + document_id es el método legado; requiere que el documento esté en un dispatch activo del mismo driver.


3. Completar un stop (task/complete)

POST/transportes/sync/dispatch/task/complete

Marca un stop como completado. Registra cantidades entregadas por línea. Si es el último stop pendiente, el dispatch se completa automáticamente.

Campos

CampoTipoDescripción
driver_idintRequerido
dispatch_stop_idintID del stop (recomendado)
task_id / task_idsstring / string[]Referencia al stop
task_typestringTipo de tarea
document_id / receipt_idintIDs internos del documento
document_source_id / receipt_source_idstringsource_ids para resolución
source_systemstringRequerido con source_ids
linesarrayLíneas con cantidades entregadas (ver abajo)
materialsarrayMateriales recolectados (formato canónico)
notesstringNotas de entrega (máx 2000 chars)

Campos de lines[]

CampoTipoDescripción
product_codestringCódigo del producto
expected_quantitynumberCantidad esperada
delivered_quantitynumberCantidad entregada
not_delivered_quantitynumberCantidad no entregada
reason_code / reasonstringMotivo si no se entregó todo

Cuando delivered_quantity == expected_quantity para todas las líneas, el documento se marca COMPLETA (4). El dispatch se marca COMPLETA automáticamente al completar el último stop activo.


4. Cancelar un stop (task/cancel)

POST/transportes/sync/dispatch/task/cancel

Cancela un stop. Revierte el dispatch a ASIGNADA (2) y los documentos afectados a su estado anterior.

Campos

CampoTipoDescripción
driver_idintRequerido
reasonstringRequerido. Motivo (3–500 chars)
dispatch_stop_idintID del stop
task_idstringAlternativa a dispatch_stop_id
task_type + document_idstring + intIdentificación legada
document_source_id / receipt_source_idstringsource_ids opcionales

5. Confirmar recolección (pickup/status)

POST/transportes/sync/dispatch/pickup/status

Actualiza el estado de una recolección (OC, traslado, FPS, devolución). Soporta acciones CONFIRM, COMPLETE, RESET, CANCEL.

Acciones disponibles

AcciónDescripción
CONFIRMConfirma que el item fue recolectado
COMPLETEMarca la recolección como completada
RESETRevierte a estado pendiente
CANCELCancela la recolección

Campos

CampoTipoDescripción
driver_idintRequerido
actionstringRequerido. Ver acciones arriba
dispatch_stop_idintID del stop (recomendado)
task_id / task_idsstring / string[]Alternativa a dispatch_stop_id
pickup_typestringREC_FAC, REC_OC, REC_FPS, REC_TTC, REC_DEV
document_idintID del documento de recolección
document_source_idstringsource_id del documento
source_systemstringRequerido con source_ids
linesarrayLíneas con product_code y collected_quantity
reason / notesstringMotivo/notas adicionales

6. Consultar dispatch por source_id

GET/transportes/sync/dispatch/{source_id}

Obtiene el detalle completo de un dispatch identificado por su source_id externo.

Requiere el query param source_system:

GET /transportes/sync/dispatch/guia.despacho:501?source_system=external_erp

Response

{
  "ok": true,
  "code": "SYNC_OK",
  "data": {
    "dispatch_id": 501,
    "status_id": 3,
    "status_description": "EN_TRANSITO",
    "driver_id": 1,
    "vehicle_id": 12,
    "stops": [...]
  }
}

Flujo completo de ejemplo

1. POST /sync/receipts          → receipt_id: 101
2. POST /sync/pickups           → purchase_order_id: 201
3. POST /sync/dispatch          → dispatch_id: 501
4. POST /sync/dispatch/start    → dispatch ASIGNADA → EN_TRANSITO
5. POST /sync/dispatch/task/start  (stop hub de inicio)
6. POST /sync/dispatch/task/start  (stop ENT_FAC receipt 101)
7. POST /sync/dispatch/task/complete (receipt 101 entregada, lines con quantidades)
8. POST /sync/dispatch/pickup/status (OC 201 confirmada con CONFIRM → COMPLETE)
9. POST /sync/dispatch/task/start + task/complete (stop hub de fin)
   → dispatch auto-completa a COMPLETA (4)
10. POST /sync/returns          → return_id: 301 (desde receipt 101)
11. POST /sync/dispatch          → dispatch de return con stop REC_DEV
12. POST /sync/dispatch/start + task/start + task/complete del return

Nota: dispatch_stop_id es la forma recomendada de identificar un stop. Se obtiene del campo stops[].dispatch_stop_id en la respuesta de GET /sync/dispatch/{source_id}.