BRIDGE API - REST - Importación de Pedidos
Este servicio permitirá crear desde fuentes externas, un pedido.
- Se invoca de la siguiente manera: https://[direccion_ip]:[puerto]/order/create - Ejemplo: https://200.100.100.100:8090/order/create
- Se invoca via POST.
Tener en cuenta:
- Primero se debe invocar al servicio de autenticación para obtener un token.
- Cuando se llama a cualquier servicio este token se envía como un parámetro más de la llamada en el header (x-access-token).
- Si al llamar al servicio el token expiró, se recibirá respuesta de token inválido y se deberá volver a pedir uno nuevo.
JSON ejemplo con cliente persona
{ "externalNumber": "00001", "notes": "", "contactInfo": "", "creationDate": "2020-07-01 08:51:00", "estimatedAvailabilityDate": "2020-07-03 08:51:00", "channelCode": "web", "currencyCode": "peso", "netAmount": 3000, "manualDiscountAmount": 0, "orderTypeCode": "web", "isPaid": false, "party": { "code": "0243145377", "firstName": "Martin", "lastName": "Malievac", "email": "[email protected]", "typeCode": "Person", "identificationType": 1, "identifier": "24314537", "birthYearNumber": 1975, "birthMonthNumber": 1, "birthDayNumber": 3, "partyRoleAssignment": [{ "partyRole": "EMPLE"}], "partyContactMethods": [ { "name": "Personal", "address": { "firstLine": "Almafuerte 4430", "secondLine": "Puerta 10, Piso 2", "betweenStreets": "Armenia y Rivadavia" "cityCode": "MUN", "stateCode": "BsAs", "countryCode": "AR", "postalCode": "1605" }, "emailAddress": "[email protected]", "telephone": { "countryCode": "54", "areaCode": "11", "telephoneNumber": "36637487", "extensionNumber": "-" }, "principalForDelivery": true, "principalForBilling": true, "useForBilling": true }, { "name": "Trabajo", "address": { "firstLine": "Venezuela 3158", "secondLine": "Piso 6. Interno 066", "betweenStreets": "Colectora Panamericana y Estanislao del Campo" "cityCode": "VMA", "stateCode": "BsAs", "countryCode": "AR", "postalCode": "1603" }, "emailAddress": "[email protected]", "telephone": { "countryCode": "54", "areaCode": "11", "telephoneNumber": "41100000", "extensionNumber": "066" }, "principalForDelivery": false, "principalForBilling": false } ] }, "detail": [ { "itemCode": "ABC001", "description": "SAMSUNG S10", "storeCode": "UNICENTER", "locationCode": "ventas2", "orderedQty": 1, "unitPrice": 1000, "deliveryOrPickup": "delivery", "deliveryCompany": "Andreani", "packageId": "12345670A", "pickupLocationCode": "-", "requiredDate": "2020-07-10 00:00:00", "partyContactMethodName": "Personal", "notes": "es para regalo", "options": [ {"code":"AB1", "description": "ColorAB1", }, ], "serializedUnits": [ { "serialNumber": "123456789", "importDocNumber": "12345", "customsNumber": "123455", "customsDate": "2020-07-10 00:00:00", "unitCount": 1 }, { "serialNumber": "22222222", "importDocNumber": "33333", "customsNumber": "44444", "customsDate": "2020-07-10 00:00:00", "unitCount": 1 }, ], "priceModifiers": [ { "percent": 5, "amount": 50, "reasonText": "Segunda Unidad" } ] }, { "itemCode": "S20", "description": "SAMSUNG S20", "storeCode": "WEB", "locationCode": "ventas2", "orderedQty": 2, "unitPrice": 2000, "deliveryOrPickup": "pickup", "deliveryCompany": "-", "pickupLocationCode": "Unicenter", "requiredDate": "2020-07-10 00:00:00", "sellerID":"jose", "sellerName":"Jose Perez", "pickupInformation": "Retira por la tarde, luego de las 6." } ], "transaction": { "id": "5f19d8989eefbe5418406887", "storeCode": "unicenter", "terminalCode": "20", "operatorCode": "martinm", "trxNumber": 4, "trxDate": "2020-07-10 00:00:00" }, "payments": [ { "tender": "peso", "amount": 2000 }, { "tender": "VI", "amount": 2950, "planDescriptor": "9 meses sin intereses", "sellerName": "MIRGOR", "authorizationCode": "1", "couponNumber": "1", "lotNumber": "1", "installments": "9", "referenceNumber": "1" } ] }
Descripción de los campos:
Importante: los campos que poseen este ícono , son valores tipificados que deben respetar los valores expuestos por BRIDGE en sus servicios (ver BRIDGE API - REST - Consulta de Maestros: https://share.linx.com.br/x/D5d8Cg)
NOTA: los campos de importes deben ser enviados hasta dos decimales
Campo | Tipo | Descripción | Requerido | Ejemplos | Validación (código) | |
---|---|---|---|---|---|---|
externalNumber | String | Código de la orden del originante | SI | 000001 | 991: el código de orden es requerido. 996: Ya existe el código de orden originante [Código] para el canal [Código de Canal] | |
notes | String | Comentarios sobre la orden | NO | Enviar por la tarde | ||
creationDate | String | Fecha de creación | SI | 2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | 992: la fecha de creación es requerida. | |
estimatedAvailabilityDate | String | Fecha de entrega estimada | NO | Si no viene informada se toma la fecha de creación del pedido | ||
channelCode | String | Canal de Origen | NO | magento: este código será asignado por Napse de acuerdo al canal. ver servicio channel/all | 993: el canal de origen es requerido. | |
currencyCode | String | Moneda | SI | peso ver servicio currency/all | 994: la moneda es requerida. | |
netAmount: | Number | Monto final del pedido, incluyendo el costo de entrega, menos los descuentos. | SI | 1000 NOTA: El total del pedido tiene que ser enviado con 2 decimales (campo netAmount) Este monto se validará con la suma de los items menos los descuentos (orderQuantity x magnitude/units x unitPrice - priceModifiers)
| 995: el monto final del pedido es requerido.
| |
manualDiscountAmount | Number | Importe de descuentos a la transacción | NO | Informar 0 si no existe ninguno | ||
orderTypeCode | String | Código del tipo de orden | NO | Por default: 'web' Tipos posibles:
ver servicio orderType/all | ||
isPaid | Boolean | Indicador de cobrado | NO | Valida si viene este parámetro o los pagos | ||
originStore | String | Tienda que se defina como online | NO | Tienda que se define como online (por configuración) para determinar el tipo de escenario (compra en linea retiro en tienda, compra en linea envio a domicilio, etc) | ||
contactInfo | String | Notas de contacto | NO | Se pueden enviar notas que saldrán informadas en el POS como INFORMACION ADICIONAL y en el BM como notas de contacto Disponible a partir de v7.5.2 | ||
externalSellerID | String | Id del vendedor externo | NO | josem Disponible a partir de v7.5.4 | no tendrá validaciones con los usuarios de BRIDGE | |
externalSellerName | String | Nombre del vendedor externo | NO | José Martinez Disponible a partir de v7.5.4 | ||
orderReference (orden de referencia). Sólo si la orden es de devolución (orderTypeCode == "return") | ||||||
internalNumberOriginal | String | Código Interno de la Orden | NO | bridge0000000299 | 999: Número de orden original no válido (si viene informado y no existe en la collection Order) | |
processStock | Boolean | Indica si un pedido de devolución mueve stock o no | No (por defecto es true) | true o false | ||
party (cliente asociado a la transacción). Requerido | ||||||
code | String | Código del cliente (BRIDGE genera el código con el tipo de documento concantenado con el nro de documento como una de las opciones) Ej: "code" : "0330505817423", (para un cliente CUIT=03, nro 305058description17423) |
(se pasa a opcional. Si no viene informado se creará el código del cliente con el método que aplique Bridge) | 024314537 | 997: el código del cliente es requerido. | |
firstName | String | Nombre del Cliente | SI (solo si es typeCode = 'Person') | Martin | 997: el nombre de la persona o empresa, es requerido. | |
lastName | String | Apellido del cliente | SI (solo si es typeCode = 'Person') | Malievac | 997: el apellido es requerido para clientes de tipo "Person" | |
name | String | Razón social | SI (sólo si es typeCode = 'Organization') | IBM | ||
String | Correo del cliente | SI | [email protected] | 997: el correo electrónico es requerido. | ||
typeCode | String | Tipo de cliente (persona física o jurídica/empresa) | SI identificationType | Valores posibles:
| Error: “El campo party.typeCode debe coincidir con Person u Organization” | |
identificationType | Number | Tipo de documento | SI | Valores posibles: 1: DNI ver servicio partyIdentificationType/all ----------- Para Uruguay Valores posibles: 1: NIE 2: RUC 3: CEDULA 4: OTRO 5: PASAPORTE 6: DNI UY 7: NIFE | 997: el tipo de identificación es requerido. | |
identifier | String | Número de documento o identificación NOTA: en el caso de CUIT o CUIL informar sin guiones (ej: 30505817423) | SI | 24314537 ------------------ Para Uruguay: Longitud por tipo de identificación
| 997: el número de identificación es requerido. | |
birthYearNumber | Number | Año de nacimiento | NO | 1975 | ||
birthMonthNumber | Number | Mes de nacimiento | NO | 3 | ||
birthDayNumber | Number | Día de nacimiento | NO | 1 | ||
partyRoleAssignment (asignación de tipo de cliente)
| ||||||
partyRole | String | Código del tipo de cliente | NO | "partyRoleAssignment": [{ "partyRole": "EMPLE"} ], Puede ser una lista de tipo de clientes (debe ser uno de los códigos habilitados en la tabla partyRole.code) | ||
partyContactMethods (direcciones del cliente). Requerido
| ||||||
name | String | Nombre del método de contacto | SI | Personal, Trabajo, etc. Este dato debe ser único, en caso de encontrarse repetido dentro de la lista, se informará: "No puede realizar un pedido con dos métodos de contacto con el mismo nombre" | 1002: el nombre del método de contacto es requerido. | |
address.firstLine | String | Calle y número | SI | Almafuerte 1000 | 1003: la dirección es requerida. | |
address.secondLine | String | Otra info | NO | Piso 10, Puerta 12 | ||
adress.betweenStreets | String | Entre Calles | NO | |||
address.cityCode | String | Ciudad | SI | MUN. Importante: código del listado de ciudades existentes, ver servicio city/all | 1004: la ciudad es requerida. | |
address.stateCode | String | Provincia | SI | BsAs. Importante: código del listado de provincias existentes, ver servicio state/all | 1005: la provincia es requerida. | |
address.countryCode | String | Pais | SI | ARG. Importante: código del listado de países existentes, ver servicio country/all | 1006: el país es requerido. | |
emailAddress | String | Email asociado a ese método de contacto | SI | Se puede poner el principal si no es diferente | 1007: el correo electrónico en el método de contacto, es requerido. | |
telephone.countryCode | String | código de País | NO | 54 | 1008: el código de país del teléfono es requerido. | |
telephone.areaCode | String | código de área | NO | 11 | 1009: el código de área del teléfono es requerido. | |
telephone.telephoneNumber | String | número de teléfono | SI | 36637777 | 1010: el número de teléfono es requerido. | |
extensionNumber | String | extensión | NO | 066 | ||
principalForDelivery | Boolean | NO | Opcional: true/false. En caso de enviar más de una dirección 'marcada' para delivery se va a tomar una sola. Idem para la dirección de facturación. | |||
principalForBilling | Boolean | NO | Opcional: true/false. En caso de enviar más de una dirección 'marcada' para delivery se va a tomar una sola. Idem para la dirección de facturación. | |||
useForBilling | Boolean | Indicador de que debe utilizarse este método de contacto para facturación | NO | Opcional: true/false En caso de enviar este indicador = true se tomará esta dirección para facturar, sino toma la primera definida | ||
taxRegistrations (Datos fiscales, sólo requerido para un cliente del tipo "Organization". En el caso de Argentina se espera que se informen uno para la condición ante el IVA y de aplicar el de Ingresos Brutos, caso contrario no se podrá calcular percepciones) En el caso de otros países se debe encontrar configurado como Cliente impuestos - impuestos Ibb son requeridos = no (Configuración/sistema/tienda/clientes) cuando se integra con Bridge NOTA:
| ||||||
aliqEffectiveDate | Date | Fecha de vigencia desde para la alícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informar | NO | 2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
aliqExpirationDate | Date | Fecha de vigencia desde para la alícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informar | NO | 2020-07-31 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
aliquot | Number | Alícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informar | NO | 4.00 | ||
inscEffectiveDate | Date | Fecha de inicio de vigencia de la condición fiscal informada NOTA: considerar que BRIDGE valida la vigencia en la facturación | SI | 2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
inscExpirationDate | Date | Fecha de fin de vigencia de la condición fiscal informada NOTA: considerar que BRIDGE valida la vigencia en la facturación | SI | 2030-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
taxJurisdictionCode | String | Código de la jurisdicción | SI | ver servicio taxJurisdiction/all | ||
taxTypeCode | String | Código del tipo de impuesto | SI | Valores posibles:
| ||
taxCategoryCode | String | Código de la categoría impositiva (de IVA o de IB) | SI | ver servicio taxJurisdictionTaxType/all | ||
name | String | Nombre de la razón social y tipo de impuesto (es descriptivo del registro) | SI | IBM - IVA | ||
number | String | Número de la condición fiscal informada (CUIT o Nro de Ingresos Brutos para ARG) | SI | 30663205621 | ||
detail (Detalle del pedido). Debe haber al menos | ||||||
itemCode | String | SKU del producto | SI | SAM01 ver servicio item/all o /item/[código] | 1011: el código del producto es requerido. | |
barcode | String | Código de barras del artículo | No | Es un dato opcional. Si viene informado se debe considerar que es el sku-barcode para el pedido (a partir de v7.5) | ||
storeCode | String | Código de tienda desde donde saldrá el stock. | SI | UNICENTER ver servicio store/all | 1012: el código de tienda del stock es requerido. | |
locationCode | String | Código de depósito desde donde saldrá el stock | NO | VENTAS2. Se toma el código erp. ver servicio location/all | Si no se informa, toma el default del ítem. | |
description | String | Descripción del producto |
(se pasa a opcional) Si viene informado se toma ese valor, sino el del maestro | Samsung Galaxy S2 | 1013: la descripción del producto es requerida. | |
orderedQty | Number | Cantidad pedida | SI | 1 NOTA: en el caso de enviar items que requieran serie (serialNumberRequired) la cantidad debe ser igual a 1, no puede ser mayor ya que es una relación posterior al surtir/facturar de una unidad con su serie | 1014: la cantidad pedida es obligatoria. | |
units | Number Decimal | Unidades asociadas a la presentación (código de barras) | No | a partir de v7.5.4 NOTA: es un campo opcional. Para facilitar el seguimiento de soporte, se solicita su envío si se envía el campo "barcode" en el pedido (sólo se considera si se envío el campo "barcode") Se valida con el valor definido en el maestro de códigos de barra (ABM de Códigos de barras, campo "unidades") | ||
magnitude | Number Decimal | Magnitud (cuando el artículo requiere peso por ejemplo) | No | a partir de v7.5.4 NOTA: es un campo opcional. Sólo será considerado si el artículo enviado en el pedido se encuentra configurado con una unidad de medida definida con decimales (Ej.: gramos, metro, etc.) | ||
packagePrice | Boolean | Indicador si el precio enviado es por paquete o unitario | No | a partir de v7.8 Se asume false si no se envía
| ||
unitPrice | Number | Precio unitario | SI | 1000 | 1015: el precio unitario es requerido. | |
deliveryOrPickup | String | Si la linea será con retiro en tienda o envío | SI | delivery o pickup | 1016: es requerido informar si la línea es para delivery o retiro. | |
deliveryCompany | String | Codigo de la compañía que realizará el envío | SI (si el método es delivery) | oca ver servicio orderDeliveryCompany/all | ||
packageId | String | Código del paquete de delivery (este código es el que se utilizará para asociar los datos del shipping) | SI (si el método es delivery) | 01 | ||
pickupLocationCode | String | Código de la locación en donde retirará | SI (si eligió la opción pickup) | UNICENTER. El código debe estar estipulado. ver servicio orderPickupLocation/all | 1017: el código del punto de retiro es requerido. | |
pickupInformation | String | Descripción de quien hará el retiro | Si, si eligió la opción pickup | Juan Perez retirará, teléfono: XXXXX | 1018: si eligió la opción de retiro, indicar los datos de la persona que hará el retiro. | |
requiredDate | String | Fecha de envío requerida o de retiro en tienda | NO | Formato: yyyy-MM-dd HH:mm:ss | ||
partyContactMethodName | String | Dirección de envío del cliente | SI (si eligió como opción delivery) | Personal, debe existir entre una de las direcciones informadas para el cliente | 1019: el nombre de la dirección de envío al cliente es inválido. | |
sellerID | String | Id del vendedor | NO | josem Disponible a partir de v7.5.2 | (debe ser un usuario existente en BRIDGE, tabla user.name) Si no existe no se asocia pero el pedido se crea | |
sellerName | String | Nombre del vendedor | NO | José Martinez Disponible a partir de v7.5.2 | ||
notes | String | Nota del artículo | NO | "notes": "es para regalo" Disponible a partir de v7.5.4 | ||
options [code, description] | Lista | Lista de opciones o variantes de un artículo (por cada una se detalle el código y descripción) | NO | Ejemplo options: [ | ||
serializedUnits: en caso de que BRIDGE no realice el surtido del pedido (ej: MELI Fulfillment), se detallan los números de serie ó si se realizó una venta en tienda física (POS) con envío a domicilio y ya fueron indicados los nro de series | ||||||
SerialNumber | String | Nro de serie del item | SI | Requerido sólo si se envía lista de series | ||
importDocNumber | String | Nro de despacho | NO | |||
customsNumber | String | Aduana | NO | |||
customsDate | String | Fecha de despacho | NO | |||
unitCount | Number | Cantidad (para informar items con nro de serie es cantidad = 1) | SI | Requerido sólo si se envía lista de series | ||
transaction: este campo se usa en el caso de que la transacción haya sido facturada en bridge, no se usa en caso de que la orden venga de canales externos. | ||||||
id | String | El ID de mongodb de la transacción | SI | |||
storeCode | String | El código de tienda BRIDGE | SI | |||
terminalCode | String | El código de terminal BRIDGE | SI | |||
operatorCode | String | El código de operador BRIDGE | SI | |||
trxNumber | Number | El número de transacción BRIDGE | SI | |||
trxDate | Date | La fecha de la transacción BRIDGE | SI | Formato: yyyy-MM-dd HH:mm:ss | ||
retail.priceModifiers : descuentos otorgados a los productos, esto se encuentra dentro de la colección detail | ||||||
percent | Number | Porcentaje de descuento | SI (si es informada la línea) | 5 | 1020: si informa un descuento, debe informar el porcentaje. | |
amount | Number | Monto de descuento | SI (si es informada la línea) | 1000 | 1021: si informa un descuento, debe informar el monto. | |
reasonText | String | Razón del descuento | SI | Oferta del día | 1022: si informa descuento, debe informar la razón. | |
payments (pagos asociados al pedido) NOTA: verificar que el medio de pago enviado como pago se encuentre asociado al canal del pedido ya que para su facturación se valida esta relación | ||||||
tender | String | Código del medio de pago | SI | peso. Importante: ver servicio tender/all para los códigos de pago permitidos. | 1022: debe informar un medio de pago válido. | |
amount: | Number | Monto del pago | SI | 1000 | 1022: debe informar el monto del pago. | |
planDescriptor | String | Descripción del plan de pagos elegido | currencyCode | 9 meses sin intereses | 1023: debe informar el plan de pagos. | |
sellerName | String | Nombre de la entidad | SI (para pagos con tarjeta) | Mirgor | 1024: debe informar el nombre del merchant. | |
authorizationCode | String | Codigo de autorización de la tarjeta | SI (para pagos con tarjeta) |
| 1025: debe informar el código de autorización de la tarjeta. | |
couponNumber | String | Número de cupón | SI (para pagos con tarjeta) | 1 | 1026: debe informar el número de cupón | |
lotNumber | String | Número de Lote | SI (para pagos con tarjeta) | 1 | 1027: debe informar número de lote. | |
installments | String | Cuotas | SI (para pagos con tarjeta) | 9 | 1028: debe informar la cantidad de cuotas. | |
referenceNumber | String | Referencia de la tarjeta | SI (para pagos con tarjeta) | 44444444, en el caso de MercadoPago, allí va el id de la cuenta. | 1029: debe informar código de referencia de la tarjeta. | |
paymentDate | Date | Día del pago | opcional | "paymentDate":"2024-06-25T10:33:34.280Z", | ||
surcharge | Number | Monto de recargo (es un dato adicional. el monto del pago ya debería incluirlo. Este campos es solo informativo) | opcional (para tarjetas) | 990.0 Ejemplo de una venta con pago que incluye un recargo: Si se vende un ítem cuyo pago tuvo un recargo financiero, el monto del pago debe incluirlo y puede ser informado como dato adicional el porcentaje de recargo y monto de recargo
| ||
planSurcharge | Number | Porcentaje de recargo aplicado (es un dato adicional, esto no recalcula sobre lo informado en el monto de pago) | opcional (para tarjetas) | 10.0 |
Respuesta del servicio:
{ "ack": 0, "message": "El pedido ha ingresado con éxito.", "internalNumber": "bridge0000000012" }
- ack es el código de respuesta, en caso de ser un error, mirar tabla a continuación.
- message: descripción del error en caso de existir.
- internalNumber: en caso de haberse creado con éxito, el número de orden asignado por Bridge.
Código de Error | Descripción |
---|---|
0 | El pedido ha ingresado con éxito. |
900 | El pedido no posee stock suficiente en la/s tienda/s para ser surtido. |
901 | Debe informar un cliente. |
902 | Debe informar para el cliente, al menos una dirección de envío. |
903 | Debe informar al menos un producto en el pedido. |
904 | La sumatoria de los pagos, debe ser igual al monto del pedido. |
905 | No puede realizar un pedido que sea surtido de diferentes tiendas. |
9999 | Error desconocido |
EJEMPLO de JSON: CLIENTE ORGANIZACION/EMPRESA
Para poder recibir un pedido con un cliente organización o empresa se debe considerar el envío del party con sus datos fiscales. Se adjunta un ejemplo