Ir al contenido

Crear o Actualizar Orden de Trabajo

Endpoint para registrar o actualizar órdenes de trabajo en el sistema TitanicSoft desde Synergy. Permite la sincronización de órdenes con información de cliente, rutas, tarifas y vehículos.

Endpoint: /api/orden_trabajo

  • POST - Para crear una nueva orden de trabajo
  • PUT - Para actualizar una orden existente (synergy_id DEBE existir y no estar anulada)

{
"synergy_id": "COT-2025-REM-0001",
"fecha": "2026-03-16",
"cliente_synergy_id": "REM-0001",
"cliente_contacto": "CLIENTE CONTACTO",
"subcliente": {
"tipo_documento": "RUC",
"numero_documento": "20791265117",
"razon_social": "EMPRESA SERVICIOS TECNOLÓGICOS"
},
"origen": {
"lugar": "HUANCAYO",
"direccion": "Av. Industrial 123, Tambo",
"secuencia": "123-456-789",
"ubigeo": "150126"
},
"destino": {
"lugar": "LIMA",
"direccion": "Calle Los Pinos 456, Arequipa",
"secuencia": "987-654-321",
"ubigeo": "040101"
},
"tarifa": {
"tipo_servicio": "TRANSPORTE",
"tipo_medida": "FLETE",
"costo_medida": 3500.00
},
"orden_servicio": "OS-CLIENTE-2025-001",
"producto": "Cemento Portland + Varillas",
"cantidad_medida": 1,
"monto_extra": 50.00,
"operacion_monto_extra": "SUMA",
"total_orden": 3500.00,
"peso_ida": 23050,
"peso_retorno": 0,
"numero_contenedor": "CONT-123456",
"referencia_carga_cliente": "Obra Los Portales - Etapa 2",
"moneda": "USD",
"tipo_cambio": "3.45",
"detalle_importes_adicionales": [
{
"cantidad": 500,
"descripcion": "SOBREESTADIA",
"costo_unitario": 25.50,
"importe": 12750.00
},
{
"cantidad": 200,
"descripcion": "SOBREESTADIA",
"costo_unitario": 35.00,
"importe": 7000.00
}
]
}

CampoTipoLongitudObligatorioDescripción
synergy_idString1-20SíID único de la orden en Synergy
fechaDate10SíFecha de la orden. Formato: Y-m-d
cliente_synergy_idString1-20SíID del cliente en Synergy (debe existir)
cliente_contactoString1-100NoNombre del contacto del cliente
orden_servicioStringmáx 100SíNúmero de orden de servicio
productoStringmáx 300SíDescripción del producto/carga
cantidad_medidaDecimal-SíCantidad según tipo de medida (mayor que 0)
total_ordenDecimal-SíTotal de la orden (mayor o igual a 0)
peso_idaDecimal-SíPeso de ida en kg (mayor o igual a 0)
peso_retornoDecimal-SíPeso de retorno en kg (mayor o igual a 0)
monedaString3SíMoneda. Valores: PEN, USD
tipo_cambioDecimal-CondicionalTipo de cambio (obligatorio si moneda = USD)
monto_extraDecimal-SíMonto adicional (mayor o igual a 0)
operacion_monto_extraString-SíOperación del monto extra. Valores: SUMA, RESTA
numero_contenedorStringmáx 100NoNúmero de contenedor
referencia_carga_clienteStringmáx 500NoReferencia de carga del cliente
CampoTipoLongitudObligatorioDescripción
tipo_documentoString2-30SíTipo de documento. Valores permitidos: DNI, RUC, CARNET DE EXTRANJERIA, PASAPORTE
numero_documentoString1-15SíNúmero de documento del subcliente. Se valida cantidad de dígitos según tipo de documento
razon_socialString1-100SíRazón social o nombre del subcliente

Reglas de validación por tipo de documento:

  • DNI → exactamente 8 dígitos numéricos
  • RUC → exactamente 11 dígitos numéricos
  • CARNET DE EXTRANJERIA / PASAPORTE → entre 1 y 15 caracteres
CampoTipoLongitudDescripción
lugarString1-150Lugar o ciudad de origen (referencial)
direccionString1-150Dirección de origen
secuenciaString1-20Identificador de la dirección de origen (se almacena en direcciones)
ubigeoString6 exactosCódigo de ubigeo de origen
CampoTipoLongitudDescripción
lugarString1-150Lugar o ciudad de destino (referencial)
direccionString1-150Dirección de destino
secuenciaString1-20Identificador de la dirección de destino (se almacena en direcciones)
ubigeoString6 exactosCódigo de ubigeo de destino
CampoTipoLongitudDescripción
tipo_servicioStringmáx 30Tipo de servicio (ej: FLETE, MUDANZA)
tipo_medidaStringmáx 30Tipo de medida (ej: TONELADA, VIAJE, M3, FLETE)
costo_medidaDecimal-Costo por unidad de medida (mayor que 0)

Detalle Importes Adicionales (Array Opcional)

Sección titulada «Detalle Importes Adicionales (Array Opcional)»

Si se envía, cada elemento debe tener:

CampoTipoDescripción
cantidadDecimalCantidad (mayor que 0)
descripcionStringDescripción del concepto (máx 100)
costo_unitarioDecimalCosto unitario (mayor o igual a 0)
importeDecimalImporte total (mayor o igual a 0)

{
"codigo_http": 201,
"estado": "success",
"accion": "CREADO",
"titanic_id": 456,
"numero_orden": "ORD-00001234",
"synergy_id": "OT-2025-001234",
"mensaje": "Orden CREADO exitosamente"
}
{
"codigo_http": 200,
"estado": "success",
"accion": "ACTUALIZADO",
"titanic_id": 456,
"numero_orden": "ORD-00001234",
"synergy_id": "OT-2025-001234",
"mensaje": "Orden ACTUALIZADO exitosamente"
}

1. Conflicto - Orden Ya Existe (POST) - Código 409

Sección titulada «1. Conflicto - Orden Ya Existe (POST) - Código 409»
{
"codigo_http": 409,
"estado": "conflict",
"mensaje": "La orden ya existe con este synergy_id",
"detalles": {
"synergy_id": "OT-2025-001234",
"numero_orden_existente": "ORD-00001234",
"titanic_id": 456,
"solucion": "Use PUT para actualizar la orden existente"
}
}

2. No Encontrado - Orden No Existe (PUT) - Código 404

Sección titulada «2. No Encontrado - Orden No Existe (PUT) - Código 404»
{
"codigo_http": 404,
"estado": "not_found",
"mensaje": "La orden no existe con este synergy_id",
"detalles": {
"synergy_id": "OT-2025-001234",
"solucion": "Use POST para crear una nueva orden"
}
}

3. No Editable - Orden Anulada (PUT) - Código 400

Sección titulada «3. No Editable - Orden Anulada (PUT) - Código 400»
{
"codigo_http": 400,
"estado": "validation_error",
"mensaje": "La orden no puede ser editada porque está anulada",
"detalles": {
"estado_actual": "ANULADO",
"numero_orden": "ORD-00001234"
}
}
{
"codigo_http": 404,
"estado": "not_found",
"mensaje": "Cliente no encontrado en TitanicSoft"
}
{
"codigo_http": 404,
"estado": "not_found",
"mensaje": "Vehículo no encontrado con la placa proporcionada"
}

6. Error en Tipo / Número de Documento de Subcliente - Código 400

Sección titulada «6. Error en Tipo / Número de Documento de Subcliente - Código 400»
{
"codigo_http": 400,
"estado": "validation_error",
"mensaje": "Número de documento de subcliente inválido",
"detalles": {
"numero_documento": "El DNI debe tener exactamente 8 dígitos"
}
}