Documentación API WMS

Esta documentación describe los endpoints disponibles en la API FastTrack para la gestión de operaciones logísticas.

URL Base: https://fasttrack.proteus.com.ar/api/wms

Esta URL es el punto de entrada para todas las APIs de WMS.

Convención de parámetros:
  • Los campos indicados con el comentario // Requerido son obligatorios y deben enviarse en la solicitud.
  • Los campos indicados con el comentario // Opcional pueden omitirse o enviarse vacíos según corresponda.

Estructura de la URL y la operacion_logistica (ambiente)

La URL base https://fasttrack.proteus.com.ar/api es el punto de entrada

La estructura general de la URL es:

https://fasttrack.proteus.com.ar/api/{ambiente}/{segmento_fijo}/{endpoint}

Donde:

  1. {ambiente}:
    • Es un segmento OPCIONAL que identifica una operación logística o ambiente específico (ej: "testing").
    • Si se usa, DEBE terminar con una barra (/).
    • Ejemplo: testing/
  2. {segmento_fijo}:
    • Es un segmento REQUERIDO que generalmente es:
      • wms/ para la mayoría de las operaciones del WMS.
      • auth/ para la autenticación (login).
  3. {endpoint}:
    • Es el nombre específico del endpoint que deseas consumir.
    • Ejemplos: consultaStock, altaEntregas, login.

Ejemplos de URL completas:

A. Sin especificar ambiente (usa el ambiente por defecto):

  • Consultar Stock: https://fasttrack.proteus.com.ar/api/wms/consultaStock
  • Autenticarse: https://fasttrack.proteus.com.ar/api/wms/auth/login

B. Especificando ambiente (ejemplo: "preprod" seria ambiente de testing):

  • Consultar Stock: https://fasttrack.proteus.com.ar/api/preprod/wms/consultaStock
  • Autenticarse: https://fasttrack.proteus.com.ar/api/preprod/wms/auth/login

Uso del Token de Autenticación (access_token)

  1. Obtención del Token:
    • Realiza una solicitud POST al endpoint /auth/login (con o sin prefijo de ambiente, según se necesite).
    • Envía username y password en el cuerpo de la solicitud (como application/x-www-form-urlencoded).
    • Si las credenciales son válidas, la respuesta JSON contendrá un access_token dentro del objeto result.
  2. Uso del Token en Solicitudes Posteriores:
    • Para TODAS las demás solicitudes a los endpoints protegidos (ej: /wms/altaEntregas, /wms/consultaStock), DEBES incluir el access_token obtenido.
  3. Método de Inclusión (Encabezado Authorization):
    • La forma estándar y requerida es incluir el token en el encabezado (Header) Authorization de la solicitud HTTP, utilizando el esquema Bearer.
    • Formato del encabezado:
      Authorization: Bearer {tu_access_token_obtenido}
      (Reemplaza {tu_access_token_obtenido} con el token real).
Importante:

Si no incluyes un access_token válido en el encabezado Authorization para los endpoints que lo requieren, la API responderá con un error de "No autorizado" (generalmente código de estado HTTP 401).


Endpoints


URL Base: https://fasttrack.proteus.com.ar/api/{ambiente}/wms

Autenticación

POST /auth/login

Generar token de autenticación. Inicia sesión en el sistema y obtiene un token de acceso. Las credenciales pueden enviarse en el cuerpo de la petición (body) en formato JSON o mediante parámetros en la URL (query parameters).

Request:
{
    "username": "usuario_ejemplo", // Campo requerido
    "password": "contraseña123" // Campo requerido
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "access_token": "eaeddab7d82fc03e895af68dacf673c02ac53577",
        "expires_at": "2025-03-08 20:23:41"
    }
}
Response (error):
{
    "success": false,
    "error": "Error en la autenticación",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (falta username/password) 401: Credenciales incorrectas 500: Error interno del servidor
Entregas

POST /altaEntregas

Alta de entregas.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 5,
    "idOperacion": 44,
    "codigoCanal": "",
    "referencia": "pedido-2",
    "idDestino": "",
    "idDeposito": 1,
    "direccionmanual": 1,
    "nombreDestino": "Río Uruguay Logística SRL",
    "direccionDestino": "Av. Córdoba 2211",
    "localidadDestino": "Rosario",
    "provinciaDestino": "Santa Fe",
    "cp": "2000",
    "latitud": "",
    "longitud": "",
    "totalBultos": 4,
    "totalKilos": 12.8,
    "totalVolumen": 52.34,
    "totalValorDeclarado": 350.75,
    "montoACobrar": 350.75,
    "numeroRemito": "RR15",
    "fechaRemito": "2026-06-10",
    "expreso": "NORMAL",
    "tipoEntrega": "RETIRO",
    "tipoProducto": "ELECTRONICA",
    "masiva": 0,
    "observaciones": "Fragil - manejar con cuidado",
    "observacionesSecundarias": "No dejar en portería",
    "idVendedor": "",
    "codigoVendedor": "",
    "detalleProductos": [
        {
            "codigo": "789123456",
            "nombre": "Monitor 24'' LG UltraGear",
            "cantidad": 2,
            "idCalidad": 1,
            "codigoexterno": "LG-UG24"
        }
    ],
    "cuitDestinatario": "30712345678",
    "telefonoDestinatario": "3415123456",
    "mailDestinatario": "compras@riouruguay.com.ar"
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Procesadas": 10
    }
}
Response (error):
{
    "success": false,
    "error": "Error al procesar alta de entregas o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos en la solicitud 401: No autorizado / Token inválido 500: Error interno del servidor

POST /consultaEntregas

Consultar entregas por ID de dador y referencia.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "referencia": "PV34534523"
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Entregas": [
            {
                "idEntrega": 456,
                "referencia": "PV34534523",
                "referenciados": null,
                "idEstadoWMS": 12,
                "descEstadoWMS": "Confirmada",
                "idEstadoTMS": 3,
                "descEstadoTMS": "En Viaje",
                "tipoEntrega": "RETIRO POR DEPOSITO",
                "idFranjaHoraria": 3,
                "nombreFranjaHoraria": "14 a 18",
                "bultos": 5,
                "documentos": [
                    {
                        "tipo": "Remito",
                        "numero": 123456
                    }
                ],
                "imagenes": [
                    {
                        "nombre": "Nombre de la imagen",
                        "imagen": "ruta/imagen.jpeg"
                    }
                ],
                "eventos": [
                    {
                        "idEvento": 3,
                        "descEvento": "Ruteo",
                        "fechaEvento": "2022-07-07 09:58:00",
                        "baseEvento": "CABA",
                        "motivoRechazo": "",
                        "HR": 321
                    }
                ],
                "eventosExpresos": [
                    {
                        "idEvento": 4,
                        "descEvento": "Entregado",
                        "fechaEvento": "2022-07-15 11:45:00"
                    }
                ],
                "eta": "12:25",
                "contenido": [
                    {
                        "codigo": 7798098844271,
                        "cantidad": 1
                    }
                ]
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar entregas o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Entrega no encontrada 500: Error interno

POST /consultaPreparados

Consulta entregas que están en estado preparado.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Entregas": [
            {
                "idEntrega": 303,
                "referencia": 9900123456,
                "idEstadoWMS": 13,
                "descEstadoWMS": "Preparada",
                "idEstadoTMS": 4,
                "descEstadoTMS": "Entregado",
                "tipoEntrega": "Retiro en Depósito",
                "bultos": 1,
                "documentos": [
                    {
                        "tipo": "Remito",
                        "numero": "0005-00004561"
                    }
                ],
                "contenido": [
                    {
                        "codigo": 31710010402,
                        "cantidad": 10,
                        "calidad": "Disponible"
                    },
                    {
                        "codigo": 31730034400,
                        "cantidad": 10,
                        "calidad": "Disponible"
                    }
                ]
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar preparados o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /marcaPreparados

Marca una entrega como consultada (para el flujo de consultaPreparados).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idEntrega": "243" // ID de la entrega consultada previamente
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": []
}
Response (error):
{
    "success": false,
    "error": "Error al marcar preparado o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Entrega no encontrada 500: Error interno

POST /liberarEntrega

Libera o bloquea una entrega preparada.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idEntrega": 243,
    "bloqueado": "0" // 0 para liberar, 1 para bloquear
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": []
}
Response (error):
{
    "success": false,
    "error": "Error al liberar/bloquear entrega o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Entrega no encontrada 500: Error interno

POST /modificarEntrega

Modifica datos de una entrega existente (tipo, fecha, productos, documentos).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idEntrega": 243,
    "tipoEntrega": "Distribución", // Opcional
    "fecha": "2025-03-24", // Opcional
    "bloqueado": "0", // Opcional
    "detalleProductos": [
        {
            "codigo": "59001038",
            "nombre": "nuevo producto",
            "cantidad": 2,
            "idCalidad": 1
        }
    ],
    "documentos": [
        {
            "tipoDocumento": "Remito",
            "numero": "0010-000578626",
            "cai": "1245648461348",
            "fechaCai": "2025-04-10"
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Entrega": [
            {
                "idEntrega": 243,
                "referencia": "PV34534523",
                "documento": "33333333",
                "idEstadoWMS": 12,
                "descEstadoWMS": "Confirmada",
                "idEstadoTMS": 3,
                "descEstadoTMS": "En Viaje",
                "detalleProductos": [
                    {
                        "id": 918,
                        "codigo": "59001038",
                        "nombre": "nuevo producto",
                        "cantidad": 2,
                        "idCalidad": 1
                    }
                ],
                "documentos": [
                    {
                        "idDocumento": 12298,
                        "tipoDocumento": "Factura",
                        "numero": "0010-0000598765",
                        "cai": "2103453455654",
                        "fechaCai": "2025-03-26"
                    }
                ]
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al modificar entrega o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Entrega no encontrada 500: Error interno

POST /altaEtiquetas

Adjunta archivos de etiquetas (PDF, etc.) a una entrega existente, codificados en Base64.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "referencia": "ABC123", // Referencia de la entrega
    "etiquetas": [
        {
            "nombre": "Etiqueta_Producto_XYZ.pdf", // Nombre del archivo
            "archivo": "JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9UaXRsZSA8RkVGRjAwNDQwMDZGMDA2MzAwNzUwMDZ..." // Contenido en Base64
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "etiquetas": "Se dieron de alta X etiquetas para la entrega: ABC123"
    }
}
Response (error):
{
    "success": false,
    "error": "Error al dar de alta etiquetas o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. Base64 incorrecto) 401: No autorizado / Token inválido 404: Entrega no encontrada por referencia 500: Error interno

POST /consultaNovedadesEntregas

Consulta IDs de entregas que han tenido novedades (cambios de estado, etc.) desde la última consulta marcada.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Entregas": [
            {
                "id": 1,
                "tabla": "entregas",
                "idexterno": 12345
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar novedades o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /altaEntregasEventos

Registra eventos personalizados asociados a una guía/entrega.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "numeroGuia": "102515464", // Número de guía asociado
    "eventos": [
        {
            "codigo": "EVE01", // Código del evento personalizado
            "descripcion": "Este es el evento", // Descripción del evento
            "fecha": "2024-11-15 11:05:43" // Fecha y hora del evento
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Procesados": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al registrar eventos o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Guía no encontrada 500: Error interno
Stock

POST /consultaStock

Consultar Stock. Consulta el stock disponible en un depósito específico para ciertos productos y calidad.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idDeposito": 1,
    "codigoProductos": [
        6031512,
        6080040,
        5010331
    ],
    "codigoCalidad": 500
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Stocks": [
            {
                "codigo": "98255920ZD",
                "idProducto": 193,
                "calidad": "Disponible",
                "total": 10
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar stock o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /cambioDeCalidad

Registra un cambio de calidad para una cantidad específica de un producto.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoProducto": "CODP123", // Código del producto afectado
    "codigoCalidadOrigen": "CODCO123", // Código de la calidad actual
    "codigoCalidadDestino": "CODCD123", // Código de la nueva calidad
    "fecha": "2024-11-15", // Fecha del cambio
    "cantidad": "10" // Cantidad a cambiar de calidad
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al registrar cambio de calidad o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. stock insuficiente, códigos no existen) 401: No autorizado / Token inválido 500: Error interno
Ingresos Pendientes

POST /altaIngresoPendiente

Registra un ingreso de mercadería pendiente de recepción.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "fecha": "2022-10-01",
    "nroRemito": "R-0001-00000001",
    "idDeposito": 1,
    "codigoProveedor": "4086",
    "idCalidad": "1", // Opcional si se usa codigoCalidad
    "codigoCalidad": "245", // Opcional si se usa idCalidad
    "productos": [
        {
            "codigo": "ART0027",
            "cantidad": 1,
            "valor": "15.05", // Opcional
            "descripcion": "Descripción", // Opcional
            "cajon": "CAJON", // Opcional
            "nroSerie": "12345678", // Opcional si requiereSerie=1
            "um": "CM", // Opcional
            "lote": "725", // Opcional si usaLote=1
            "vencimiento": "2022-12-15", // Opcional si usaVto=1
            "secuencia": "123" // Opcional
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Procesadas": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear ingreso pendiente o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaRecepciones

Consulta recepciones de mercadería que han sido cerradas.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Recepciones": [
            {
                "idCabecera": 110,
                "fechaCierre": "2022-11-16",
                "proveedor": null,
                "documento": "INGRESO2",
                "contenido": [
                    {
                        "codigo": "GENAURHS-610R",
                        "cantidad": 50,
                        "calidad": "Disponible",
                        "fechavto": null,
                        "lote": "",
                        "nroserie": null
                    },
                    {
                        "codigo": "PRODUCTO2",
                        "cantidad": 60,
                        "calidad": "Disponible",
                        "fechavto": null,
                        "lote": "",
                        "nroserie": null
                    }
                ]
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar recepciones o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /marcaRecepciones

Marca una recepción como consultada (para el flujo de consultaRecepciones).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idCabecera": "110" // ID de la recepción consultada previamente
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": []
}
Response (error):
{
    "success": false,
    "error": "Error al marcar recepción o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Recepción no encontrada 500: Error interno
Proveedores

POST /altaProveedor

Crea o actualiza un proveedor.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Proveedor S.A.",
    "codigoExterno": "1111", // Código único del proveedor en el sistema externo
    "fansasia": "Proveedor Fantasia", // Opcional
    "cuit": "11-111111111-1", // Opcional
    "email": "proveedor@proveedor.com.ar", // Opcional
    "web": "proveedor.com.ar", // Opcional
    "domicilio": "AV CONSTITUYENTES 5364", // Opcional
    "idCiudad": "3887", // ID de la ciudad (obtenido de consultaCiudad) - Opcional
    "codPostal": "1431", // Opcional
    "telefono": "111111111" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar proveedor o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. código externo duplicado si es creación) 401: No autorizado / Token inválido 500: Error interno

POST /consultaProveedor

Consulta un proveedor por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoExterno": "1111",
    "completo": "0" // 0 para básico, 1 para detalles completos (opcional, default 0)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "codigoexterno": "1111",
                "nombre": "Nombre del proveedor",
                "cuit": "30-12345678-0",
                "email": "email@ejemplo.com"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar proveedor o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Proveedor no encontrado 500: Error interno
Clientes

POST /altaCliente

Crea o actualiza un cliente y sus destinos asociados.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "nombre": "Cliente",
    "razonSocial": "Cliente S.A", // Opcional
    "direccion": "Av. de Mayo 100", // Opcional
    "idLocalidad": "1", // ID de la localidad/ciudad (obtenido de consultaCiudad) - Opcional
    "telefono": "11111111", // Opcional
    "mail": "cliente@cliente.com.ar", // Opcional
    "cuit": "11-111111111-1", // Opcional
    "codigo": "1111", // Código único del cliente en el sistema externo
    "idRanking": "1", // Opcional
    "idDadorDeCarga": "1", // ID del dador de carga asociado
    "listaPrecios": "123456", // Código de la lista de precios (obtenido de consultaListaPrecios) - Opcional
    "listaPreciosOferta": "654321", // Opcional
    "destinos": [
        {
            "codigo": "123", // Código único del destino para este cliente
            "nombre": "Destino S.A.",
            "direccion": "Av. de Mayo 1338",
            "idCiudad": "3778", // ID de la ciudad (obtenido de consultaCiudad)
            "codPostal": "1431", // Opcional
            "codPostalLargo": "C1431EZR", // Opcional
            "latitud": "-34.609264", // Opcional
            "longitud": "-58.3873816", // Opcional
            "codigoZona": "123456" // Código de la zona (obtenido de consultaZona) - Opcional
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar cliente o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaCliente

Consulta un cliente por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "1111",
    "completo": "0" // 0 para básico, 1 para detalles completos (opcional, default 0)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "nombre": "Nombre del cliente",
                "razonsocial": "Razón social",
                "telefono": "11-1231-5656",
                "mail": "mail@ejemplo.com",
                "cuit": "30-12345678-0",
                "suspendido": 0,
                "destinos": [
                    {
                        "id": 1,
                        "nombre": "Nombre del destino",
                        "direccion": "Costa Rica 5546",
                        "ciudad": "CIUDAD DE BUENOS AIRES",
                        "provincia": "Ciudad Autónoma de Buenos Aires",
                        "codigopostalcorto": 1234,
                        "latitud": -34.58325197969,
                        "longitud": -58.434227243289
                    }
                ]
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar cliente o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Cliente no encontrado 500: Error interno
Productos

POST /altaProducto

Crea o actualiza un producto.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "codigo": "AR12", // Código único del producto en el sistema externo
    "nombre": "Cafetera",
    "descripcion": "Cafetera", // Opcional
    "idRubro": "1", // ID del rubro (obtenido de consultaRubro) - Opcional
    "idSubRubro": "1", // ID del subrubro (obtenido de consultaSubRubro) - Opcional
    "idMetodoDeConsumo": "1", // Opcional (ej. FIFO, LIFO)
    "idProveedor": "1", // ID del proveedor (obtenido de consultaProveedor) - Opcional
    "idDadorDeCarga": "1", // ID del dador de carga asociado
    "idUnidadMedidaAlmacenaje": "1", // Opcional
    "largo": "1", // Opcional
    "ancho": "1", // Opcional
    "alto": "1", // Opcional
    "volumen": "1", // Opcional
    "pesobruto": "1", // Opcional
    "pesoneto": "1", // Opcional
    "tara": "1", // Opcional
    "modulo": "100", // Opcional
    "requiereSerie": "0", // 0 o 1
    "usaVto": "1", // 0 o 1
    "usaLote": "1", // 0 o 1
    "mezclaLote": "1", // 0 o 1 - Opcional
    "codigoDeBarra": "A240", // Opcional
    "codigoAlias": "AAA240000" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar producto o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaProducto

Consulta un producto por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "AR12",
    "completo": "0" // 0 para básico, 1 para detalles completos (opcional, default 0)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "codigo": 113882,
                "nombre": "Nombre del producto",
                "descripcion": "Desc1",
                "pesobruto": 17.9,
                "volumen": 0.087912,
                "alto": 37,
                "ancho": 36,
                "largo": 66,
                "rubro": "Rubro",
                "subrubro": "Subrubro",
                "inactivo": 0
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar producto o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Producto no encontrado 500: Error interno

POST /altaListaPrecios

Crea o actualiza una lista de precios y sus ítems asociados.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123456", // Código único de la lista de precios
    "nombre": "Lista de precios",
    "observaciones": "Esto es una lista de precios", // Opcional
    "fechadesde": "2025-03-31", // Opcional
    "fechahasta": "2025-03-10", // Opcional
    "items": [
        {
            "codigo": "XXX666", // Código del producto
            "valor": "4444", // Precio
            "codigoCliente": "2" // Código del cliente específico (opcional, si es por cliente)
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar lista de precios o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaListaPrecios

Consulta una lista de precios por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123456",
    "completo": "0" // 0 para básico, 1 para detalles completos con ítems (opcional, default 0)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 2,
                "nombre": "Lista de prueba cambio",
                "observaciones": "Observación de prueba",
                "fechahasta": "2025-03-31",
                "fechadesde": "2025-03-10",
                "codigoexterno": 123456
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar lista de precios o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Lista de precios no encontrada 500: Error interno

POST /altaProductosPrecios

Añade o actualiza el precio de un producto específico dentro de una lista de precios existente.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123456", // Código del producto
    "valor": "5000", // Nuevo precio
    "codigoListaPrecios": "1234", // Código de la lista de precios
    "codigoCliente": "12" // Código del cliente (opcional, si aplica)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al actualizar precio de producto o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. lista o producto no existen) 401: No autorizado / Token inválido 500: Error interno

POST /consultaProductosPrecios

Consulta el precio de un producto dentro de una lista de precios.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123456",
    "completo": 0
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "fk_productos": 1,
                "fechadesde": "2025-03-10",
                "valor": 5000,
                "fk_listadeprecios": 2
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar precio de producto o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Precio no encontrado para el producto/lista 500: Error interno

POST /altaCodigoProducto

Asocia un código alternativo (ej. EAN, DUN) a un producto existente.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "codigo": "113882", // El código alternativo a asociar
    "idProducto": "", // Opcional: ID interno del producto (si se conoce)
    "codigoProducto": "12345", // Código externo del producto (si no se usa idProducto)
    "idTipoCodigo": "3", // ID del tipo de código (ej. 3 para EAN13)
    "cantidad": "5", // Cantidad de unidades base que representa este código (ej. 1 para unidad, 6 para caja)
    "idDadorDeCarga": "1"
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al asociar código alternativo o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. producto no existe, tipo de código inválido) 401: No autorizado / Token inválido 500: Error interno

POST /consultaCodigoProducto

Consulta la información asociada a un código alternativo de producto.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "113882",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": {
            "id": 1,
            "fk_productos": 7477,
            "fk_tipocodigo": 3,
            "fk_clientes": 1,
            "codigo": 113882,
            "cantidad": 1,
            "borrado": 0
        }
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar código alternativo o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Código no encontrado 500: Error interno
Equipos

POST /altaEquipo

Crea o actualiza un equipo (vehículo, remolque).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "1", // Código único del equipo
    "patente": "AAA333",
    "idMarca": "1", // ID de la marca (obtenido de consultaMarcas) - Opcional
    "idEmpresa": "2", // ID de la empresa propietaria (obtenido de consultaEmpresa) - Opcional
    "idTipoEquipo": "3" // ID del tipo de equipo (ej. Camión, Semirremolque) - Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar equipo o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaEquipo

Consulta un equipo por su código.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "1",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "patente": "AAA111",
                "codigo": "123",
                "empresa": "Empresa de prueba",
                "tipoequipo": "Chasis"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar equipo o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Equipo no encontrado 500: Error interno
Empresas

POST /altaEmpresa

Crea o actualiza una empresa (transportista, etc.).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123", // Código único de la empresa
    "nombre": "Empresa S.A."
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar empresa o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaEmpresa

Consulta una empresa por su código.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "nombre": "Empresa",
                "cuit": "30-12345678-0",
                "codigo": "1234"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar empresa o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Empresa no encontrada 500: Error interno
Provincias

POST /altaProvincia

Crea o actualiza una provincia.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Chaco",
    "codigoExterno": "123", // Código único de la provincia
    "idPais": "1" // ID del país (generalmente 1 para Argentina) - Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar provincia o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaProvincia

Consulta una provincia por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoExterno": "123",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 2,
                "codigoexterno": 901,
                "nombre": "Ciudad Autónoma de Buenos Aires"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar provincia o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Provincia no encontrada 500: Error interno
Ciudades

POST /altaCiudad

Crea o actualiza una ciudad/localidad.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "12", // Código único interno (puede ser CP corto u otro) - Opcional
    "nombre": "Chaco", // Nombre de la ciudad
    "codigoExterno": "123", // Código único externo de la ciudad
    "idProvincia": "10" // ID de la provincia (obtenido de consultaProvincia)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar ciudad o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaCiudad

Consulta una ciudad por su código (interno o externo).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "5637193326", // Puede ser código interno o externo
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 3889,
                "codigoexterno": null,
                "nombre": "MONSERRAT",
                "provincia": "Ciudad Autónoma de Buenos Aires"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar ciudad o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Ciudad no encontrada 500: Error interno
Destinos

POST /altaDestino

Crea o actualiza un destino (punto de entrega) asociado a un cliente.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "codigo": "852", // Código único del destino para el cliente
    "nombre": "Destino ejemplo",
    "direccion": "Av. Juan B. Justo 2000",
    "idCiudad": "10005", // ID de la ciudad (obtenido de consultaCiudad)
    "idZona": "110", // ID de la zona (obtenido de consultaZona) - Opcional
    "idCliente": "1", // ID interno del cliente (si se conoce) - Opcional
    "codigoCliente": "225", // Código externo del cliente (si no se usa idCliente)
    "idDadorDeCarga": 1,
    "comentarios": "Comentario sobre el destino" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar destino o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. cliente no existe) 401: No autorizado / Token inválido 500: Error interno

POST /consultaDestino

Consulta un destino por nombre o código, opcionalmente filtrado por cliente.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "P00007",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "nombre": "Destino",
                "direccion": "Costa Rica 5546",
                "ciudad": "CIUDAD DE BUENOS AIRES",
                "provincia": "Ciudad Autónoma de Buenos Aires",
                "codigopostalcorto": "1234",
                "latitud": -34.58325197969,
                "longitud": -58.434227243289
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar destino o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Destino no encontrado 500: Error interno
Rubros

POST /altaRubro

Crea o actualiza un rubro de producto.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Agricola",
    "codigoExterno": "123" // Código único del rubro
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar rubro o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaRubro

Consulta un rubro por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoExterno": "123",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 5,
                "codigoexterno": "AC",
                "nombre": "Rubro"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar rubro o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Rubro no encontrado 500: Error interno
SubRubros

POST /altaSubRubro

Crea o actualiza un subrubro de producto, asociado a un rubro.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Fertilizante",
    "codigoExterno": "123", // Código único del subrubro
    "idRubro": "2" // ID del rubro padre (obtenido de consultaRubro)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar subrubro o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. rubro no existe) 401: No autorizado / Token inválido 500: Error interno

POST /consultaSubRubro

Consulta un subrubro por su código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoExterno": "123",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 557,
                "codigoexterno": "123",
                "nombre": "TABLETAS",
                "rubro": "TABLETAS",
                "codigoRubro": "1234"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar subrubro o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: SubRubro no encontrado 500: Error interno
Personal

POST /altaPersonal

Crea o actualiza datos de personal (choferes, etc.).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Federico Lopez",
    "idEmpresa": "1", // ID de la empresa (obtenido de consultaEmpresa) - Opcional
    "legajo": "5525", // Legajo único del personal
    "telefono": "132456798", // Opcional
    "documento": "30999888", // Opcional
    "fechaIngreso": "2022-01-31" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar personal o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaPersonal

Consulta personal por su legajo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "legajo": "5525",
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 1,
                "legajo": "5525",
                "nombre": "Chofer",
                "dni": "12345678",
                "cuil": "20-1234578-8",
                "empresa": "Empresa"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar personal o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Personal no encontrado 500: Error interno
Expresos

POST /altaExpreso

Crea o actualiza un expreso/transportista.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "codigo": "22", // Código único del expreso
    "nombre": "Expreso",
    "direccion": "Av. Juan B. Justo 2000", // Opcional
    "codigoCiudad": "02007010002", // Código de la ciudad (obtenido de consultaCiudad) - Opcional
    "idDadorDeCarga": "1" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar expreso o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaExpreso

Consulta un expreso por su código.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "5525", // Código del expreso a consultar
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": [
            {
                "id": 11,
                "nombre": "Andreani Emp",
                "direccion": "Av. Juan B. Justo 2000",
                "ciudad": "Ciudad Autónoma de Buenos Aires",
                "codigopostalcorto": "1234",
                "latitud": "-34.59113966488604",
                "longitud": "-58.43902614232909",
                "leyendaguia": "Esta es la leyenda"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar expreso o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Expreso no encontrado 500: Error interno
Hojas de Ruta

POST /consultaHojadeRuta

Consulta una hoja de ruta por su ID interno o número externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idHojaRuta": "5525", // ID interno (si se conoce) - Opcional
    "numero": "1234568" // Número externo (si no se usa idHojaRuta) - Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "HojasDeruta": [
            {
                "id": 5525,
                "numero": "5525",
                "fecha": "2025-01-31",
                "fechasalida": "2025-01-31 09:45:01",
                "fechafin": "2025-01-31 10:52:02",
                "fechacierre": "2025-01-31 11:07:32",
                "horariocarga": "10:00:00",
                "estado": "Cerrada",
                "camion": "AA 053 EV",
                "acoplado": null,
                "tipoequipo": "Semirremolque",
                "chofer": "NOMBRE DEL CHOFER",
                "nombretransportista": "NOMBRE DE LA EMPRESA",
                "codigotransportista": 1562,
                "tipoviaje": "Ventas",
                "tipozona": "Sin definir",
                "kilometros": 1939,
                "Entregas": [
                    {
                        "id": 1229,
                        "referencia": "Pedido6",
                        "bultos": 0,
                        "peso": 18750,
                        "volumen": 0,
                        "destino": "DESTINO DE LA ENTREGA",
                        "destinoDireccion": "DIRECCIÓN DE LA ENTREGA",
                        "cliente": "CLIENTE",
                        "status": "Rechazado",
                        "motivoRechazo": "DESTINATARIO CERRADO"
                    }
                ],
                "Adicionales": [
                    {
                        "id": 1228,
                        "nombre": "Nombre del adicional",
                        "cantidad": 5,
                        "valor": 120.5,
                        "compra": "SI",
                        "venta": "NO"
                    }
                ],
                "LiquidacionesCompra": [],
                "LiquidacionesVenta": []
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar hoja de ruta o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos (ej. no se provee ID ni número) 401: No autorizado / Token inválido 404: Hoja de ruta no encontrada 500: Error interno

POST /setearNumeroHojaDeRuta

Asigna o modifica el número externo de una hoja de ruta existente.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idHojaRuta": "5525", // ID interno de la hoja de ruta
    "numero": "2" // Nuevo número externo a asignar
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": []
    }
}
Response (error):
{
    "success": false,
    "error": "Error al setear número de hoja de ruta o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Hoja de ruta no encontrada 500: Error interno

POST /consultaNovedadesHojadeRuta

Consulta IDs de hojas de ruta que han tenido novedades desde la última consulta marcada.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "HojasDeruta": [
            1233
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar novedades de hoja de ruta o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 401: No autorizado / Token inválido 500: Error interno
Vendedores

POST /altaVendedores

Crea o actualiza un vendedor.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoExterno": "123HDG", // Código único del vendedor
    "nombre": "Nombre del vendedor",
    "iniciales": "NV" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar vendedor o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaVendedores

Consulta un vendedor por su ID interno o código externo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idVendedor": "5525", // Opcional
    "codigoExterno": "1234568", // Opcional
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": []
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar vendedor o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Vendedor no encontrado 500: Error interno
Zonas

POST /altaZona

Crea o actualiza una zona geográfica o de ruteo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigoExterno": "123HDG", // Código único de la zona
    "nombre": "Nombre de la zona",
    "despachoBloqueado": "0", // 0 o 1 - Opcional
    "orden": "1" // Orden de visita/ruteo - Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar zona o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaZona

Consulta una zona por su código o nombre.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "54654", // Código externo o interno
    "nombre": "Nombre de la zona", // Opcional si se usa código
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": []
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar zona o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Zona no encontrada 500: Error interno
Canales

POST /altaCanales

Crea o actualiza un canal de venta.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "codigo": "123HDG", // Código único del canal
    "nombre": "Nombre del canal"
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar canal o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaCanales

Consulta un canal de venta por su ID interno o código.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idCanal": "5525", // Opcional
    "codigo": "1234568", // Opcional
    "completo": "0" // Opcional
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "data": []
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar canal o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Canal no encontrado 500: Error interno
Devolución

POST /altaDevolucion

Registra una devolución de productos.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "id_propietario": "P2", // ID o código del propietario/dador
    "numeroOrigen": "12088", // Número de referencia de la entrega original
    "prefijo": "0000", // Prefijo del documento de devolución
    "numero": "1231222", // Número del documento de devolución
    "items": [
        {
            "coditm": "5100SF", // Código del producto devuelto
            "cantidad1": "12", // Cantidad devuelta (puede haber cantidad2 para otra UM)
            "cantidad2": "5", // Opcional
            "motivoRechazo": "1" // ID del motivo de rechazo/devolución
        }
    ]
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al registrar devolución o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno
Documentos

POST /altaDocumento

Asocia un documento (Factura, Remito) a una entrega existente usando la referencia.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "referencia": "10340-2025-09-15", // Referencia de la entrega
    "nombreDocumento": "Factura", // Tipo de documento
    "numero": "0006-00097099" // Número del documento
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": []
}
Response (error):
{
    "success": false,
    "error": "Error al asociar documento o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Entrega no encontrada por referencia 500: Error interno
Marcas

POST /altaMarcas

Crea o actualiza una marca (para productos, equipos, etc.).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Nombre de la marca",
    "producto": "1", // 1 si aplica a productos, 0 si no
    "equipo": "0", // 1 si aplica a equipos, 0 si no
    "neumatico": "0" // 1 si aplica a neumáticos, 0 si no
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "id": 1
    }
}
Response (error):
{
    "success": false,
    "error": "Error al crear/actualizar marca o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /consultaMarcas

Consulta marcas por nombre y tipo.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "nombre": "Nombre marca", // Opcional
    "producto": "1" // Opcional (1 o 0)
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "marcas": [
            {
                "id": 1,
                "nombre": "Nombre marca",
                "producto": "Si",
                "neumatico": "No",
                "equipo": "No"
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar marcas o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Marcas no encontradas 500: Error interno
Movimientos

POST /consultaMovimientos

Consulta movimientos de stock (ajustes, transferencias) pendientes de marcar.

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "completo": 0
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": {
        "Movimientos": [
            {
                "idRef": 12554,
                "fecha": "2022-11-16",
                "idComprobante": 1,
                "nombreComprobante": "Ajuste",
                "numero": 345,
                "negativos": [
                    {
                        "codigoProducto": "5326",
                        "nombreProducto": "GENAURHS-610R",
                        "cantidad": -1,
                        "idCalidad": 1,
                        "nombreCalidad": "Disponible",
                        "fechavto": null,
                        "lote": "",
                        "nroserie": null
                    }
                ],
                "positivos": [
                    {
                        "codigoProducto": "5378",
                        "nombreProducto": "GENAURHS-625J",
                        "cantidad": 1,
                        "idCalidad": 1,
                        "nombreCalidad": "Disponible",
                        "fechavto": null,
                        "lote": "",
                        "nroserie": null
                    }
                ]
            }
        ]
    }
}
Response (error):
{
    "success": false,
    "error": "Error al consultar movimientos o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 500: Error interno

POST /wms/marcaMovimientos

Marca un movimiento de stock como consultado (para el flujo de consultaMovimientos).

Headers:
{
    "Authorization": "Bearer {access_token}"
}
Request:
{
    "idDadorDeCarga": 1,
    "idRef": "12554" // ID de referencia del movimiento consultado
}
Response (éxito):
{
    "success": true,
    "error": null,
    "unauthorized": false,
    "result": []
}
Response (error):
{
    "success": false,
    "error": "Error al marcar movimiento o token inválido",
    "unauthorized": true,
    "result": null
}
200: Éxito 400: Datos inválidos 401: No autorizado / Token inválido 404: Movimiento no encontrado 500: Error interno