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
| ID | Estado | Descripción |
|---|---|---|
| 1 | SIN_ASIGNAR | Sin chofer/vehículo asignado |
| 2 | ASIGNADA | Listo para iniciar |
| 3 | EN_TRANSITO | En ruta |
| 4 | COMPLETA | Todos los stops completados |
| 5 | INCOMPLETA | Terminado con stops pendientes |
| 6 | ANULADA | Cancelado |
1. Iniciar dispatch
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:
{
"dispatch_source_id": "guia.despacho:501",
"source_system": "external_erp"
}Campos
| Campo | Tipo | Descripción |
|---|---|---|
dispatch_id | int | ID interno del dispatch |
dispatch_source_id | string | source_id del dispatch en el sistema externo |
source_system | string | Sistema externo (requerido con dispatch_source_id) |
Proporcionar
dispatch_ido (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)
Marca un stop como iniciado (EN_TRANSITO). Propaga el estado al documento asociado.
Campos
| Campo | Tipo | Descripción |
|---|---|---|
driver_id | int | Requerido. ID del chofer asignado |
dispatch_stop_id | int | ID del stop (recomendado, obtenido de GET /sync/dispatch/{sourceId}) |
task_id | string | Referencia tipo STOP:1201 o ENT_FAC:2108 |
task_type | string | Ver tabla de tipos abajo |
document_id | int | ID del documento asociado al stop |
receipt_id | int | ID de la factura si es stop ENT_FAC o ENT_REC |
receipt_source_id | string | source_id de la factura (resuelve a receipt_id) |
document_source_id | string | source_id del documento (resuelve a document_id) |
source_system | string | Sistema externo (requerido con source_ids) |
Valores de task_type
| task_type | stop_type_id | Acción | Documento asociado |
|---|---|---|---|
INICIO_RUTA | 1 | Inicio de ruta en hub | — (hub) |
REC_FAC | 2 | Recolección de factura en cliente | receipt |
REC_OC | 3 | Recolección de orden de compra | purchase_order |
REC_FPS | 4 | Recolección traslado FPS | transfer |
REC_TTC | 5 | Recolección traslado TTC | transfer |
ENT_TTC | 6 | Entrega traslado TTC | transfer |
REC_DEV | 7 | Recolección de devolución | return |
ENT_FAC | 8 | Entrega de factura al cliente | receipt |
ENT_SEDE | 9 | Entrega de devolución en sede | return |
FIN_RUTA | 10 | Fin de ruta en hub | — (hub) |
ENT_REC | 11 | Entrega de recolecciones en sede | receipt |
Recomendación: usar
dispatch_stop_idsiempre que sea posible.task_type+document_ides el método legado; requiere que el documento esté en un dispatch activo del mismo driver.
3. Completar un stop (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
| Campo | Tipo | Descripción |
|---|---|---|
driver_id | int | Requerido |
dispatch_stop_id | int | ID del stop (recomendado) |
task_id / task_ids | string / string[] | Referencia al stop |
task_type | string | Tipo de tarea |
document_id / receipt_id | int | IDs internos del documento |
document_source_id / receipt_source_id | string | source_ids para resolución |
source_system | string | Requerido con source_ids |
lines | array | Líneas con cantidades entregadas (ver abajo) |
materials | array | Materiales recolectados (formato canónico) |
notes | string | Notas de entrega (máx 2000 chars) |
Campos de lines[]
| Campo | Tipo | Descripción |
|---|---|---|
product_code | string | Código del producto |
expected_quantity | number | Cantidad esperada |
delivered_quantity | number | Cantidad entregada |
not_delivered_quantity | number | Cantidad no entregada |
reason_code / reason | string | Motivo si no se entregó todo |
Cuando
delivered_quantity==expected_quantitypara todas las líneas, el documento se marcaCOMPLETA (4). El dispatch se marcaCOMPLETAautomáticamente al completar el último stop activo.
4. Cancelar un stop (task/cancel)
Cancela un stop. Revierte el dispatch a ASIGNADA (2) y los documentos afectados a su estado anterior.
Campos
| Campo | Tipo | Descripción |
|---|---|---|
driver_id | int | Requerido |
reason | string | Requerido. Motivo (3–500 chars) |
dispatch_stop_id | int | ID del stop |
task_id | string | Alternativa a dispatch_stop_id |
task_type + document_id | string + int | Identificación legada |
document_source_id / receipt_source_id | string | source_ids opcionales |
5. Confirmar recolección (pickup/status)
Actualiza el estado de una recolección (OC, traslado, FPS, devolución). Soporta acciones CONFIRM, COMPLETE, RESET, CANCEL.
Acciones disponibles
| Acción | Descripción |
|---|---|
CONFIRM | Confirma que el item fue recolectado |
COMPLETE | Marca la recolección como completada |
RESET | Revierte a estado pendiente |
CANCEL | Cancela la recolección |
Campos
| Campo | Tipo | Descripción |
|---|---|---|
driver_id | int | Requerido |
action | string | Requerido. Ver acciones arriba |
dispatch_stop_id | int | ID del stop (recomendado) |
task_id / task_ids | string / string[] | Alternativa a dispatch_stop_id |
pickup_type | string | REC_FAC, REC_OC, REC_FPS, REC_TTC, REC_DEV |
document_id | int | ID del documento de recolección |
document_source_id | string | source_id del documento |
source_system | string | Requerido con source_ids |
lines | array | Líneas con product_code y collected_quantity |
reason / notes | string | Motivo/notas adicionales |
6. Consultar dispatch por 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_erpResponse
{
"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 returnNota:
dispatch_stop_ides la forma recomendada de identificar un stop. Se obtiene del campostops[].dispatch_stop_iden la respuesta deGET /sync/dispatch/{source_id}.