Catálogos Maestros
Clientes y Proyectos

Sincronización de Clientes y Proyectos

En esta sección se documentan los endpoints para sincronizar clientes y sus proyectos asociados. Puedes sincronizar un cliente junto con sus proyectos en una sola llamada, o hacerlo de forma independiente.


1. Clientes

POST/transportes/sync/clients

Crea o actualiza clientes. Admite proyectos inline en la misma llamada.

Caso de uso

  • Crear cliente antes de sincronizar proyectos y facturas.
  • Crear cliente y proyectos relacionados en una sola llamada.

Campos del Payload

Requeridos

CampoTipoDescripción
source_idstringID único en el sistema de origen
source_systemstringSistema externo (ej. external_erp)
client_codestringCódigo del cliente

Opcionales

CampoTipoDescripción
is_activebooleanEstado activo
client_idintID interno del cliente
namestringNombre del cliente
phonestringTeléfono
emailstringCorreo electrónico
projectsobject / arrayProyectos inline

Campos de projects[]

Requeridos

CampoTipoDescripción
source_idstringID del proyecto en el sistema origen
project_codestringCódigo del proyecto

Opcionales

CampoTipoDescripción
source_systemstringSistema origen (hereda del padre si no se especifica)
is_activebooleanEstado activo
project_namestringNombre del proyecto
exact_addressstringDirección exacta
contact_namestringNombre del contacto en obra
latitudenumberLatitud
longitudenumberLongitud
in_gambooleanDentro del GAM
zip_codestringCódigo postal
delivery_window_fromstringHora de inicio de ventana de entrega
delivery_window_tostringHora fin de ventana de entrega
phonestringTeléfono del proyecto
google_addressstringDirección formateada de Google Maps

Ejemplos

Request

{
  "source_id": "res.partner:2253",
  "source_system": "external_erp",
  "client_code": "C-100",
  "name": "Acme Logistics",
  "phone": "555-0300",
  "email": "purchases@example.com",
  "projects": [
    {
      "source_id": "project.project:9001",
      "project_code": "9001",
      "project_name": "Proyecto Escazu",
      "exact_address": "Escazu, San José",
      "latitude": 9.93,
      "longitude": -84.14
    }
  ]
}

Response

{
  "ok": true,
  "code": "SYNC_OK",
  "message": "Sync processed successfully.",
  "data": {
    "client_id": 35,
    "client_code": "C-100",
    "source_id": "res.partner:2253",
    "source_system": "external_erp",
    "projects": [
      {
        "project_id": 120,
        "project_code": "9001",
        "upsert_action": "created"
      }
    ],
    "synced_at": "2026-04-07T12:00:00.000Z",
    "upsert_action": "updated",
    "project_upsert_actions": ["created"]
  },
  "meta": {
    "route": "/transportes/sync/clients",
    "method": "PostClientSync",
    "operation": "upsert",
    "upsert_action": "mixed",
    "upsert_actions": ["updated", "created"],
    "timestamp": "2026-04-07T12:00:00.000Z"
  }
}

2. Proyectos (Independientes)

POST/transportes/sync/projects

Crea o actualiza proyectos. El cliente debe existir o resolverse por client_code.

Caso de uso

  • Crear proyectos para poder asignar facturas a obra/proyecto.
  • Actualizar dirección, contacto y coordenadas del proyecto.

Dependencias

Si client_code no existe, el endpoint responde con un error SYNC_MISSING_DEPENDENCIES solicitando sincronizar primero el recurso clients.

Campos del Payload

Requeridos

CampoTipoDescripción
source_idstringID único en el sistema de origen
source_systemstringSistema externo
project_codestringCódigo del proyecto

Opcionales

CampoTipoDescripción
is_activebooleanEstado activo
project_idintID interno del proyecto
client_codestringCódigo del cliente al que pertenece
client_modelstringModelo del cliente
project_namestringNombre del proyecto
exact_addressstringDirección exacta
contact_namestringNombre del contacto
latitudenumberLatitud
longitudenumberLongitud
in_gambooleanDentro del GAM
zip_codestringCódigo postal
delivery_window_fromstringHora inicio de ventana de entrega
delivery_window_tostringHora fin de ventana de entrega
phonestringTeléfono
google_addressstringDirección formateada de Google Maps

Ejemplos

Request

{
  "source_id": "project.project:9001",
  "source_system": "external_erp",
  "project_code": "9001",
  "client_code": "C-100",
  "project_name": "Proyecto Escazu",
  "exact_address": "Frente a edificio GAMA, Guachipelin",
  "contact_name": "Juan Pérez",
  "phone": "555-0500",
  "latitude": 9.93,
  "longitude": -84.14,
  "delivery_window_from": "7",
  "delivery_window_to": "16"
}

Response

{
  "ok": true,
  "code": "SYNC_OK",
  "message": "Sync processed successfully.",
  "data": 120,
  "meta": {
    "route": "/transportes/sync/projects",
    "method": "PostProjectSync",
    "operation": "upsert",
    "upsert_action": "updated",
    "timestamp": "2026-04-07T12:00:00.000Z"
  }
}