© 2024 Napse. Todos los derechos reservados.
IMPORTANTE
Recomendaciones
Se sugieren los siguientes puntos a modo de recomendación para los envíos de información mediante los servicios de integración:
Envío en lotes:
- Se recomienda realizar el envío de registros en lotes siempre que el tipo de servicio lo permita.
- A su vez, es recomendable el envío de registros en orden, para evitar errores por claves foráneas inexistentes.
- Evitar el envío de un registro por solicitud. Por ejemplo, para la actualización del maestro de artículos, es preferible enviar lotes de registros en lugar de uno a uno.
Cantidad recomendada por lote:
- Para la mayoría de los servicios, se recomienda enviar lotes de hasta 5000 registros para garantizar un procesamiento eficiente.
- En casos donde se manejan entidades grandes, el servicio de "ítems" específicamente, es preferible reducir el tamaño del lote a un máximo de 3000 registros.
- Para el caso del servicio de "customer", se recomienda utilizar un tamaño de lote de 1000 registros.
Peso máximo por lote:
- El tamaño máximo recomendado para cada lote es de 5 MB, considerando tanto los datos enviados como los recursos de red y procesamiento.
Recomendaciones adicionales para optimizar el funcionamiento:
- En conexiones menos estables, limitar los lotes a un máximo de 2000 registros (a excepción del servicio de "customer" que se recomienda 1000 registros).
- Realizar los envíos durante horarios de baja demanda para reducir la carga del sistema y mejorar el tiempo de respuesta.
INTRODUCCIÓN
En un entorno digital cada vez más interconectado, la integración eficiente de sistemas es fundamental para garantizar el flujo seguro y estructurado de información entre plataformas. Bridge es una solución que permite la gestión centralizada de datos mediante la importación y actualización de información a través de servicios web basados en JSON y autenticación OAuth 2.0.
¿Qué es Bridge API?
Bridge API permite la comunicación entre distintos sistemas utilizando servicios basados en JSON y autenticación mediante OAuth 2.0. Su objetivo es proporcionar un mecanismo seguro y eficiente para la carga, actualización y consulta de datos dentro del ecosistema de Bridge.
¿Qué es JSON y por qué se usa?
JSON (JavaScript Object Notation) es un formato ligero y legible para el intercambio de datos. Su estructura basada en clave-valor permite la representación de objetos complejos de manera clara y eficiente, lo que lo hace ideal para la integración de APIs como Bridge.
¿Cómo funciona OAuth 2.0?
OAuth 2.0 es un protocolo de autorización utilizado para validar el acceso a los servicios de Bridge. En lugar de enviar credenciales en cada solicitud, se genera un token de acceso que debe incluirse en cada petición a la API. Este mecanismo garantiza seguridad y control en las transacciones.
Para acceder a los servicios de Bridge, es necesario obtener un token de autenticación. El procedimiento detallado para la generación, uso y renovación del token se encuentra en el documento BRIDGE API - REST – Autenticación: token, donde se explica paso a paso cómo gestionar el proceso de autenticación.
Se recomienda revisar dicho documento para comprender el flujo completo de autenticación y asegurarse de que las solicitudes a la API se realicen con un token válido.
Objetivo
Este manual tiene como propósito proporcionar una guía detallada sobre el uso de los servicios de integración de Bridge, explicando la estructura de los mensajes en formato JSON, los métodos de autenticación mediante OAuth 2.0, y los pasos necesarios para enviar información de manera correcta y segura. Se detallarán los distintos tipos de datos que pueden integrarse, las rutas de servicio, y las mejores prácticas para asegurar una implementación eficiente.
Público
Este documento está dirigido a equipos técnicos y de desarrollo de software, incluyendo analistas funcionales, desarrolladores, arquitectos de software e integradores de sistemas que necesiten interactuar con la plataforma Bridge. Se espera que los lectores tengan conocimientos básicos sobre API REST, JSON y autenticación OAuth 2.0, aunque se proporcionarán explicaciones claras y ejemplos prácticos para facilitar su comprensión e implementación.
PUNTOS IMPORTANTES
- Son servicios REST
- En los servicios, irá información en formato JSON
- Se deberá realizar una autenticación previa, obteniendo un token, siguiendo el siguiente instructivo: BRIDGE API - REST – Autenticación: token
- Se deberá invocar al servicio según la siguiente ruta: https://demo.napse:8381/api/v1/import (o la que corresponda según el proyecto)
- Si la tienda es "0", significa que va a todas las tiendas.
- A partir de ahora, se deberá enviar cada maestro según la prioridad y el formato definido en el presente documento.
ESTRUCTURA GENERAL DEL SERVICIO
El servicio de importación de datos en Bridge permite la carga y actualización de diversas entidades a través de solicitudes en formato JSON. Esta estructura estandarizada facilita la integración con otros sistemas y asegura la consistencia en el envío de información.
Cada solicitud debe incluir información clave, como el tipo de entidad a procesar, el identificador de la tienda (si aplica) y un conjunto de datos organizados en una colección de entidades. La estructura general es flexible y se adapta a distintos tipos de información, como marcas, productos, categorías, entre otros.
A continuación, se detalla la estructura general del JSON utilizado en las solicitudes de importación.
| Clave | Tipo de Dato | Descripción |
| service | String | Tipo de entidad que se está enviando (ej. "brand" para marcas). |
| store | String / Número | Identificador de la tienda donde se aplicarán los datos. |
| entityCollection | Objeto | Contiene el conjunto de datos a cargar, agrupados según el tipo de entidad. |
| nombre_entidad_plural | Array | Lista de objetos que representan las entidades a cargar. Ejemplo: "brands" si se están enviando marcas. |
| nombre_entidad_singular | Objeto | Contiene los atributos específicos de la entidad a cargar. Ejemplo: "brand" para cada marca dentro de "brands". |
| atributo1 | Variable | Un atributo de la entidad (Ej: "name" para el nombre de la marca). |
| atributo2 | Variable | Otro atributo de la entidad (Ej: "description" para la descripción de la marca). |
Todas las solicitudes a Bridge API siguen un esquema similar:
{
"service": "<nombre_del_servicio>",
"store": "<id_tienda>",
"entityCollection": {
"<nombre_entidad_plural>": [
{
"<nombre_entidad_singular>": {
"<atributo1>": "<valor1>",
"<atributo2>": "<valor2>",
"<atributoN>": "<valorN>"
}
}
]
}
}
Ejemplo simple de envío - Bridge / Importe Service:
- CASO DE USO: Envío de marca.
| POST | http://demo.napse:8381/api/v1/import |
{
"service": "brand",
"store": "0",
"entityCollection": {
"brands": [
{
"brand": [
{
"name": "Jeep",
"description": "Jeep !!!"
},
{
"name": "Peugeot",
"description": "Peugeot !!!"
}
]
}
]
}
}
{
"ack": "0",
"detail": "2 registros fueron creados/actualizados",
}
PROVEEDORES
El servicio de integración de proveedores en Bridge permite la carga y actualización de información sobre los proveedores dentro del sistema.
Nombre del Servicio: supplier
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
Suppliers | List | Lista de proveedores a crear o actualizar. | Si |
La lista suppliers debe contener entidades del tipo "supplier", cada una representando un proveedor con su información correspondiente.
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
code | String (100) | Identificador del proveedor. | Si |
name | String (100) | Nombre o razón social del proveedor. | Si |
fantasyName | String (100) | Nombre de fantasía del proveedor. | No |
address | String (100) | Dirección del proveedor. | No |
phone | String (100) | Teléfono del proveedor. | No |
String (100) | Email del proveedor | No | |
fiscalId | String (100) | Identificador fiscal del proveedor, en Argentina corresponde al CUIT. | No |
activeFlag | Boolean (true/false) | Flag que indica que el proveedor está habilitado en el sistema. default: true | Si |
caiRequired | Boolean | Flag que indica si requiere CAI para las recepciones del módulo de abastecimiento | No |
asn | Boolean | Flag que indica si esta integrado con la recepción de remitos electrónicos o ASN | No |
frequency | Integer(4) | Días que transcurren entre órdenes de compras | No |
automaticMail | Boolean | Indica si se debe enviar de forma automática la orden de compra confirmada al proveedor | No |
String(100) | Email al que se debe enviar de forma automática la orden de compra confirmada al proveedor | No |
{
"service": "supplier",
"store": "0",
"entityCollection": {
"suppliers": [
{
"supplier": [
{
"code": "Proveedor1244",
"name": "Proveedor1244",
"fantasyName": "Proveedor1244",
"address": "VEDIA 2944",
"phone": "123456789",
"email": "[email protected]",
"fiscalId": "36-12345674-1",
"activeFlag": true,
"caiRequired": false,
"asn": true,
"frequency": 0
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack":999,
"detail":"El supplier ingresado en el orden 1 no posee nombre (name),
CODE: Proveedor1244"
}
MARCA DEL ARTÍCULO
El servicio de integración de marcas de artículos en Bridge permite la carga y actualización de información sobre las marcas asociadas a los artículos dentro del sistema.
Nombre del Servicio: brand
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
Brands | List | Lista de marcas a crear o actualizar. | Si |
La lista brands debe contener entidades del tipo "brand", cada una representando una marca con su información correspondiente. La estructura del JSON para este servicio es la siguiente:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
name | String(100) | Identificador de la marca comercial. | Si |
description | String(200) | Nombre de la marca. | Si |
disabled | Boolean | Flag que indica si la marca está habilitada en el sistema. | No |
{
"service": "brand",
"store": "0",
"entityCollection": {
"brands": [
{
"brand": [
{
"name": "Jeep Compass",
"description": "Jeep Compass",
"disabled": false
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "entityImport -> brandImportFromWebService -> ERROR -> Error al crear/actualizar Brand: Jeep Compass, el campo 'description' es obligatorio."
}
NIVELES DE JERARQUÍA DE LOS ARTÍCULOS
El servicio de integración de Niveles de Jerarquía en Bridge permite la carga y actualización de información la lista de niveles de jerarquía que posee la estructura departamental en la cual se agruparán los artículos o Lista de departamentos y secciones que contiene la estructura departamental.
Nombre del Servicio: merchandiseHierarchy
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
merchHierarchyLevels | List | Lista de niveles de jerarquía que posee la estructura departamental en la cual se agruparán los artículos. | No |
merchHierarchyGroups | List | Lista de departamentos y secciones que contiene la estructura departamental. | No |
La lista merchHierarchyLevels debe contener entidades "hierarchyLevel", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
code | String (25) | Código del nivel jerárquico. | Si |
description | String (100) | Nombre del nivel jerárquico. | Si |
level | Integer | Profundidad del nivel, siendo 1 el nivel más alto en la jerarquía. | Si |
active | Boolean | Flag que indica que el nivel está habilitado en el sistema. Por default es true. | No |
La lista merchHierarchyGroups debe contener entidades "hierarchyGroup", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
code | String (10) | Código de la agrupación jerárquica. | Si |
description | String (100) | Descripción de la agrupación. | Si |
level | String (25) | Código del nivel jerárquico en que se encuentra esta agrupación. | Si |
parentGroup | String (10) | Código de la agrupación "padre" de esta agrupación jerárquica. Si esta agrupación es de nivel 1, entonces no posee un valor en esta propiedad. | No |
departamentalItemCode | String (25) | Código del artículo genérico utilizado para ventas departamentales. Sirve para indicar qué artículo se agregará a la transacción al momento de realizar una venta departamental. En general el artículo debería requerir precio, para que obligue al operador a ingresarlo. | No |
disabled | Boolean | Flag que indica que la agrupación está deshabilitada en el sistema. Por default es false. | No |
isWeb | Boolean | Flag que indica si es una categoría para la web o no (nuevo campo agregado para Bridge Web) | No |
{
"service": "merchandiseHierarchy",
"store": "0",
"entityCollection": {
"merchHierarchyLevels": [
{
"hierarchyLevel": [
{
"code": "DPT220",
"description": "Departamento220",
"level": 220,
"active": true
}
]
}
],
"merchHierarchyGroups": [
{
"hierarchyGroup": [
{
"code": "MUJ220",
"description": "Mujer",
"level": "RUB220",
"parentGroup": "INDU",
"departamentalItemCode": "",
"disabled": false,
"isWeb": true
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "No se pudo ingresar ninguna categoria"
}
ATRIBUTOS DE UN ARTICULO
Son atributos que puede tomar un artículo con valores u opciones asociados
Nombre del Servicio: itemAttribute
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemAttributes | List | Lista de atributos del ítem a crear o actualizar. | Si |
La lista itemAttributes debe contener entidades “itemAttribute”, las cuales poseen la siguiente estructura:
Propiedad | tipo de dato | Descripción | Requerido |
code | String | Código del atributo del ítem | Si |
name | String | Descripción del atributo del ítem | Si |
dataType | String | Tipo de dato que puede tomar el atributo Los tipos posibles son: list, string, number, date, boolean | Sí |
editOpcionsFlag | Boolean | Un campo que NO es requerido, que permita habilitar/deshabilitar la opción de permitir editar opciones en el POS | No |
showInfo | Boolean | Indicador si se requiere mostrar o no la información de la opción del atributo (default si no se recibe: false) | No |
| showRgb | Boolean | Indicador si se requiere mostrar o no el RGB asignado a la opción del atributo (default si no se recibe: false) | No |
| disabled | Boolean | Indicador de atributo deshabilitado o no (default si no se recibe: false) | No |
| options | List | Lista de opciones o valores que tendrá el atributo del ítem El tag debe agregarse aunque no sea del tipo lista el atributo. <options/> Requerido con todos los datos cuando el atributo es tipo "lista" | No |
{
"service": "itemAttribute",
"store": "0",
"entityCollection": {
"itemAttributes": [
{
"itemAttribute": [
{
"code": "outlet",
"dataType": "list",
"name": "outlet",
"disabled": false,
"showInfo": true,
"showRgb": false,
"options": [
{
"option": [
{
"value": "NACoul",
"order": 1,
"info": "NACoul"
},
{
"value": "IMPORTADOoul",
"order": 2,
"info": "IMPORTADOoul"
}
]
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "No se pudo ingresar ningun atributo"
}
MAESTRO DE ARTÍCULOS
Este servicio tiene dependencias de otros maestros (marca, proveedores, niveles de jerarquía, unidades de medida, impuesto IVA, depósitos, taxCategory) En caso de que se envíen artículos con datos de los maestros mencionados como dependencias, se debe considerar que esas referencias se hayan informado previamente a Bridge.
Nombre del Servicio: item
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
items | List | Lista de artículos a crear o actualizar. | Si |
La lista items debe contener entidades "item", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido | Campo de importación |
|---|---|---|---|---|
itemCode | String (25) | Código del artículo. | Si | |
description | String (50) | Descripción del artículo | Si | |
hierarchyGroupCode | String (10) | Código de la agrupación jerárquica de nivel más bajo al que pertenece el artículo. | No | |
price | Decimal(11,2) | Precio de venta por unidad. | Si | |
unitCostPrice | Decimal(11,2) | Costo de la unidad. | No | |
specialPrice | Decimal(11,2) | Precio especial de venta para clientes. | No | |
vatCode | String (3) | Código del tipo de IVA asociado al artículo. | Si | |
notForSaleFlag | Boolean | Flag que indica que el artículo no está a la venta. | No | |
notForDiscountsFlag | Boolean | Flag que indica que el artículo no admite descuentos. | No | |
priceRequiredFlag | Boolean | Flag que indica que el artículo requiere el ingreso del precio. | No | |
weightRequiredFlag | Boolean | Flag que indica que el artículo requiere el ingreso de peso. | No | |
quantityRequiredFlag | Boolean | Flag que indica que el artículo requiere el ingreso de una cantidad o magnitud. | No | |
quantityAllowedFlag | Boolean | Flag que indica que el artículo admite el ingreso de cantidad. | No | |
restrictedSaleFlag | Boolean | Flag de venta en horario restringido | No | |
logExceptionFlag | Boolean | Flag que indica si debe registrarse en el log de excepciones. | No | |
authorizationRequiredFlag | Boolean | Flag que indica que el artículo requiere autorización del supervisor. | No | |
foodStampFlag | Boolean | Flag Food Stamp, indica si está asociado al medio de pago Food Stamp. | No | |
serialNumberRequiredFlag | Boolean | Flag que indica que el artículo requiere el ingreso de número de serie. | No | |
returnNotAllowedFlag | Boolean | Flag que indica que el artículo no admite ser devuelto. | No | |
supplierCode | String (100) | Código del proveedor del artículo. | No | |
brandCode | String (100) | Código de la marca del artículo. | No | |
itemType | String (25) | Código del tipo de artículo.
| Si | |
promotionalPrice | Decimal(11,2) | Precio promocional. | No | |
promotionalPriceDateFrom | DateTime | Fecha y hora de inicio de la vigencia del precio promocional | No | |
promotionalPriceDateTo | DateTime | Fecha de hora de finalización de la vigencia del precio promocional | No | |
uomCode | String (25) | Código de la unidad de medida para el artículo.
| Si | |
lastUpdateSaleUnitPrice | DateTime | Fecha y hora de la última actualización del precio de venta. | No | |
genericItemFlag | Boolean | Flag que indica que el artículo es genérico. | Si | |
kitComponentFlag | Boolean | Flag que indica que el artículo es un componente de un kit. | Si | |
inventoryLocationCode | Varchar (25) | Código del almacén o depósito por defecto | Si | Se importa en el campo location |
commissionPercent | Decimal(6,2) | Porcentaje de comisión sobre el artículo que le corresponde al asociado. | No | |
disabled | Boolean | Flag que indica que el artículo está deshabilitado | Si | |
itemVATCategory | String (2) | Categoría de IVA del ítem. Los valores posibles son: C, E, F, o G: | Si | |
uom2Code | String (1) | Código de la segunda unidad de medida para el artículo. | No | |
uom2Units | Decimal(14,2) | Factor de conversión entre la primera y la segunda unidad de medida | No | |
uom2Operation | String (1) | Tipo de conversión. | No | |
stockReservationRequired | Boolean | Indicador de requiere reserva de stock. Default false. Modifica el flag "Requiere reserva de stock" (FL_STKRES_RQ)) | No | Si el parámetro store.itemSerializedFlagWithReservationByService = true cuando en el servicio de importación el item venga con el campo serialNumberRequiredFlag = true, importar item.stockReservationRequired = true Si el parámetro store.itemSerializedFlagWithReservationByService = false procede como actualmente (si viene el valor en este campo lo setea con ese valor sino importa el default: false) |
genericFieldString1 | String (50) | Campo para uso genérico | No | Importar en ITM_USR_DATA, campo USR_I_STRNG |
genericFieldString2 | String (50) | Campo para uso genérico | No | Importar USR_II_STRNG |
genericFieldString3 | String (50) | Campo para uso genérico | No | Importar USR_III_STRNG |
genericFieldString4 | String (50) | Campo para uso genérico | No | Importar USR_IV_STRNG |
genericFieldBoolean1 | Boolean | Campo para uso genérico | No | Importar en USR_I_FL |
genericFieldBoolean2 | Boolean | Campo para uso genérico | No | Importar en USR_II_FL |
genericFieldBoolean3 | Boolean | Campo para uso genérico | No | Importar en USR_III_FL |
genericFieldBoolean4 | Boolean | Campo para uso genérico | No | Importar en USR_IV_FL |
genericFieldDecimal1 | Decimal(8,2) | Campo para uso genérico | No | Importar en campo USR_I_INT |
genericFieldDecimal2 | Decimal(8,2) | Campo para uso genérico | No | Importar en campo USR_II_INT |
genericFieldDecimal3 | Decimal(8,2) | Campo para uso genérico | No | Importar en campo USR_III_INT |
genericFieldDecimal4 | Decimal(8,2) | Campo para uso genérico | No | Importar en campo USR_IV_INT |
importDocReq | Boolean | Indicador si requiere de documento de importación (para serializables) | No | |
sellerRequired | Boolean | Indicador si requiere el ingreso del vendedor | No | |
webDescription | Varchar (max) | Descripción ampliada del artículo para la web | No | |
extendedWebDescription | Varchar (max) | Descripción detallada del artículo para la web | No | |
internalTaxes | List | Lista de impuestos internos | No | |
itemPictures | List | Lista de imágenes asociadas | No | |
formRequiredFlag | boolean | Flag indicador de formulario requerido | No (opcional) | Default = false si no viene informado |
| upc | String | Código Universal de Producto del Articulo | No | Es un dato que permite agrupar varios artículos para listas de precios por umbral y su acumulación de unidades |
| manufacturer | string | Código del fabricante En este campo los valores admitidos deben encontrarse dados de alta dentro de la tabla manufacturer (campo code) | No (opcional) | |
| exemptFlag | boolean | Flag de item exento | No (opcional) | Default = false si no viene informado |
| otherUnitOfMeasure | list | Lista de unidades de medida complementarias otherUnitOfMeasure <uomCode>blister</uomCode> <conversionFactor>0.1</conversionFactor> | No (opcional) | |
| printCommandsFlag | boolean | Flag de ítem para impresión de comanda | No (opcional) | Default = False si no viene informado. |
| maxStock | Decimal(11,2) | Stock Máximo que la Tienda puede tener por Producto | No (opcional) | Default = 0 si no viene informado. |
| securityStock | Decimal(11,2) | Stock de Seguridad Adicional al forecast | No (opcional) | Default = 0 si no viene informado. |
| attributes | List | Atributos de un item | No (opcional) | "attributes":[ { |
| creditAllowed | boolean | Flag que indica si el articulo puede ser vendido con crédito propio | No (opcional, default=false) | |
| blockedForIcd | boolean | Flag para Artículo bloqueado para Compras y Reposición: No permite reposición | No (opcional) | Default = false si no viene informado |
| alcoholicBeverage | boolean | Flag que indica si el articulo debe ser validado como bebida alcohólica | No (opcional) default=false | |
| affiliateBenefit | boolean | Flag que indica si el articulo tiene el beneficio de Afiliado | No (opcional, default=false) | |
| affiliate | boolean | Flag que indica si el cliente es Afiliado | No (opcional, default=false) | |
| serialFormat | string | Permite definir el tipo de formato admitido para el nro de serie | opcional | |
| externalCode | number | Permite definir el código externo del item | No (opcional) | |
| singleSaleFlag | boolean | No admite otro artículo en la venta | No (opcional) | |
| returnRestricction | boolean | Aplica restricciones a la devolución. | No (opcional) | |
| requiresDate | boolean | Requiere Fecha. | No (opcional) | |
minSalePrice | Decimal | Precio mínimo de venta (para cálculo de márgenes para pedidos si aplicara por configuración) | No | minSalePrice |
minStockForChannels | number | Cantidad de unidades definidas como stock mínimo para canales | No | |
| fullDescription | string | Descripcion ampliada | No (opcional) | |
| stockItemFlag | object | ¿Es un artículo que maneja stock?
<itemDepth>1</itemDepth> (Decimal) <itemHeight>2</itemHeight> (Decimal) <itemWidth>3</itemWidth> (Decimal) <itemDiameter>4</itemDiameter> (Decimal) | No (opcional) | |
| itemDepth | NumberDecimal | Profundidad del ítem | No (opcional) | |
| itemHeight | NumberDecimal | Altura del ítem | No (opcional) | |
| itemNetWeight | NumberDecimal | Peso del ítem | No (opcional) | |
minStockForChannels | NumberDecimal | Stock Minimo para Canales | No (opcional) | |
| itemGrossWeight | NumberDecimal | Peso bruto del ítem | No (opcional) | |
| itemDiameter | NumberDecimal | Diámetro del ítem | No (opcional) | |
| itemWidth | NumberDecimal | Ancho del ítem | No (opcional) | |
| calculateCommission | boolean | Calcula comision | No (opcional) | |
| relevance | integer | Relevancia | No (opcional) | |
| published | boolean | Publicado | No (opcional) | |
| detailedDescription | string | Descripcion detallada | No (opcional) | |
| barcode | string | CodBarra | No (opcional) | |
| requiresPrescriptionFlag | boolean | Requiere receta | No (opcional) | |
| onConsignment | boolean | Consignado | No (opcional) | |
| classification | string | Clasificacion | No (opcional) | |
| daysToReturn | integer | Dias para devoluciones y cambios | No (opcional) | |
| invoiceNotAllowed | boolean | No permite facturar | No (opcional) | |
| notForSale | boolean | No admite otro artículo en la venta | No (opcional) | |
| packQty | integer | Empaque Mínimo | No (opcional) | |
| gtin | integer | Código GTIN | No (opcional) | |
| requiresValidationExternalFlag | boolean | Requiere Validación Externa | No (opcional) | |
| restrictedSaleGroup | string | Define el grupo con el cual se va a permitir vender el ítem dentro de la una misma venta | No (opcional) | |
| exemptTaxedFlag | boolean | Indica si el Item es exento de impuestos | No (opcional) | Default = false si no viene informado. |
fiscalCategory | string (25) | Clave fiscal del producto o servicio. Nota para México: este valor está relacionado al campo ClaveProdServ de un CFDI y se deben utilizar las claves de los diversos productos o servicios de conformidad con el catálogo c_ClaveProdServ publicado en el Portal del SAT. | No | |
saleLocationCode | string | Código del "Depósito para la Venta" | No (opcional) | Se importa en el campo saleLocation |
{
"service": "item",
"store": "0",
"entityCollection": {
"items": [
{
"@_type": "list",
"item": [
{
"@_type": "bean",
"itemCode": "22042010",
"noBalanceControlRequired": true,
"description": "Mate Stanley",
"hierarchyGroupCode": "IND",
"price": 15000,
"promotionalPrice": 15000,
"itemType": "NORM",
"vatCode": 1,
"uomCode": "u",
"daysToChange": 4,
"genericItemFlag": false,
"kitComponentFlag": false,
"inventoryLocationCode": "DEP1",
"saleLocationCode": "DEP1",
"disabled": false,
"itemVATCategory": "G",
"restrictedSaleGroup": "TEST"
}
]
}
]
}
}
Request de item con atributo
{
"service": "item",
"store": "0",
"entityCollection": {
"items":[
{
"item":[
{
"itemCode":"300100002537",
"noBalanceControlRequired":true,
"description":"Termo Stanley 900ml",
"hierarchyGroupCode":"IND",
"price":80000,
"itemType":"NORM",
"vatCode":1,
"uomCode":"u",
"daysToChange":4,
"genericItemFlag":false,
"kitComponentFlag":false,
"inventoryLocationCode":"DEP1",
"saleLocationCode":"DEP1",
"disabled":false,
"itemVATCategory":"G",
"restrictedSaleGroup":"T1",
"attributes":[
{
"attribute":[
{
"code":"COLOR",
"option":"AZUL"
}
]
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "Item con codigo: , /itemCode must NOT have fewer than 1 characters."
}
CÓDIGOS DE BARRAS – ALIAS
Este servicio tiene dependencia de otro maestro (items) En caso de que se envíen códigos de barras asociados a artículos, los mismos se deben haber informado previamente a Bridge.
Validaciones
Se validará que el código de barras no exista asociado a otro ítem.
- Un ítem puede tener N códigos de barra asignados
- Un código de barras sólo puede estar asignado a un único ítem (si existe el código se pisa el ítem)
UPDATE 7.9
Se incorpora el campo disabledInPos Indicando si el codigo de barras se encuentra habilitado o no para ser consultado y viaualizado en el POS. Default false
Nombre del Servicio: alias
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
aliases | List | Lista de códigos de barra a crear o actualizar. | Si |
La lista aliases debe contener entidades "alias", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemCode | String (25) | Código del artículo para el que se agregará o actualizará el código de barras. | Si |
barcode | String (25) | Código de barras. | Si |
description | String (255) | Descripción del código de barras. | Si |
units | Integer | Unidades (si no viene informado se setea = 1) | No |
storeCode | Varchar (20) | Tienda (se guarda luego el ID de tienda en CD_STR_RT) | No |
disabled | Boolean | Si el mismo se encuentra activo o no. Default false | No |
disabledInPos | Boolean | Indica si el codigo de barras se encuentra habilitado o no para ser consultado y viaualizado en el POS. Default false | No |
UPDATE 7.9
Se incorpora el campo disabledInPos Indicando si el codigo de barras se encuentra habilitado o no para ser consultado y viaualizado en el POS. Default false
{
"service": "alias",
"store": "0",
"entityCollection": {
"aliases": [
{
"alias": [
{
"itemCode": "2025",
"barcode": "7791821477292",
"description": "Item 2025",
"units": 20,
"storeCode": 15,
"disabled": false,
"disabledInPos": true
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "El barcode ingresado en el orden 1 no posee código de barras y un campo requerido (barcode)"
}
ARTÍCULOS DE TIPO STOCK
Este servicio tiene dependencia de otro maestro (items) En caso de que se envíen artículos para ser definidos del tipo stock, los artículos se deben haber informado previamente a Bridge.
Nombre del Servicio: stockItems
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
stockItems | List | Lista de artículos de tipo stock a crear o actualizar. | Si |
La lista stockItems debe contener entidades "stockItem", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemCode | String (25) | Código del artículo de tipo stock que se agregará o acutalizará. | Si |
styleCode | String (25) | Código de estilo. | No |
colorCode | String (25) | Código de color. | No |
sizeCode | String (25) | Código de tamaño. | No |
containerCode | String (25) | Código de envase. | No |
Type | String (2) | Código de tipo de stock ítem. | No |
saleWeightOrUnitCountCode | String | Código identificador de venta por peso o por unidad. Indica si se vende por peso o como una unidad. | No |
pickupCode | String(2) | Código de retiro. Define dónde y cómo un cliente puede retirar este artículo. | No |
unitPriceFactor | Decimal(10,4) | Número de unidades de medida por unidad de venta. Se utiliza como divisor en el cálculo del precio de venta de la unidad del artículo común, por ejemplo, 1,67 dólares por libra o $ 2,59 por 32 floz. | No |
availableForSaleDate | DateTime | Fecha de disponibilidad para la venta. Por ejemplo, ciertos libros tienen fechas de publicación específicos, fechas de lanzamiento de entretenimiento de música. | No |
inventoryAccountingMethodCode | String (2) | Código que define el método de contabilidad del artículo. Ej. Venta al por menor, etc. | No |
sellUnitLastReceivedBaseCostAmount | Money | Costo base de la unidad. Excluye subsidios, descuentos, cargos y otros importes que pueden cambiar el costo del artículo. | No |
sellUnitLastReceivedNetCostAmount | Money | Costo neto de la unidad. Incluye subsidios, descuentos, cargos y demás sumas que pueden cambiar el costo del artículo. Donde no hay subsidios, etc el costo neto será igual al costo base para un artículo. | No |
sellUnitLandedCostAmount | Money | Costo del artículo más servicios. El costo del artículo más el seguro, acarreo, transporte, entrega, seguros, derechos de aduana, etc, que se suman al costo total de entrega de un artículo importado a la tienda. | No |
sellUnitLastReceivedCostsEstablishedDate | DateTime | Fecha en que se establecieron los últimos costos recibidos (neto y de base). | No |
shrinkFlag | Boolean | Flag que indica que el artículo NO estará disponible en las funcionalidades de conteo y ajuste de stock (se aplicaria al caso de items padre de kits donde el stock sólo se lleva por hijos y no por padre) | No |
swellFlag | Boolean | Flag por aumento de peso. Para indicar que el artículo podría aumentar peso desde el momento del pedido hasta el momento de su recepción. | No |
model | String | Número o nombre de modelo asignado por el fabricante del artículo. | No |
depth | Decimal (15,4) | Medida de la profundidad del artículo. | No |
width | Decimal (15,4) | Medida del ancho del artículo. | No |
height | Decimal (15,4) | Medida del alto del artículo. | No |
diameter | Decimal (15,4) | Medida del diámetro del artículo. | No |
grossWeight | Decimal (15,4) | Peso bruto del artículo. | No |
netWeight | Decimal (15,4) | Peso neto del artículo. | No |
drainedWeight | Decimal (15,4) | Peso drenado del líquido. | No |
sizeUomCode | String (25) | Código de unidad de medida utilizada para indicar el tamaño del artículo. | No |
weightUomCode | String (25) | Código de unidad de medida utilizada para indicar el peso del artículo. | No |
repositionPoint | Decimal (15,4) | Refiere al umbral de reposición necesario para el cálculo del pedido sugerido | No |
{
"service": "stockItems",
"store": "0",
"entityCollection": {
"stockItems": [
{
"stockItem": [
{
"itemCode": "2025",
"pickupCode": 1,
"depth": 10,
"width": 20,
"height": 300,
"grossWeight": 400,
"sizeUomCode": "cm",
"weightUomCode": "g"
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "No se pudo ingresar ningun item"
}
RELACIÓN DE ARTÍCULOS CON PROVEEDORES
Este servicio permitetener por proveedor la lista de artículos que el mismo puede entregar a la tienda. Será utilizada para la generación de órdenes de compra con sus respectivos costos y su código de articulo para el proveedor.
Nombre del Servicio: itemSupplierItem
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemSupplierItems | List | Lista de relación entre artículos y proveedores a crear o actualizar. | Si |
La lista itemSupplierItems debe contener entidades "itemSupplierItem", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
item | String(25) | Código del artículo. | Si |
supplier | String (100) | Identificador del proveedor. | Si |
barcode | String (25) | Código de barras para identificar la presentación del artículo | No |
lastReceiptSaleByUnitCount | Decimal (19,3) | Ultima cantidad recibida | No |
lastReceiptSaleUnitBaseCost | Decimal (19,3) | Costo base por unidad | No |
countMinOrder | Decimal (19,3) | Cantidad mínina por pedido | No |
countMaxOrder | Decimal (19,3) | Cantidad máxima por pedido | No |
disabled | boolean | Indica si la relación está deshabilitada (Def=false) | No |
| defaultBarcode | boolean | Indica Código de Barras por defecto | No |
effectiveDateTime | date | Fecha vigencia inicio del barcode para el pedido sugerido (barcodes de temporada) | No |
| expirationDateTime | date | Fecha vigencia fin del barcode para el pedido sugerido (barcodes de temporada) | No |
| supplierItemCode | string | Código SKU del Proveedor | No |
| store.code | string | Código de la Tienda. | No |
{
"service": "itemSupplierItem",
"store": "0",
"entityCollection": {
"itemSupplierItems": [
{
"itemSupplierItem": [
{
"item": 2025,
"supplier": 1808,
"lastReceiptSaleByUnitCount": 50,
"lastReceiptSaleUnitBaseCost": 20
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "No se importaron algunos registros"
}
LISTA DE PRECIOS DE ARTÍCULOS
Este servicio tiene dependencia de otro maestro (items).
En caso de que se envíen listas de precios, los artículos se deben haber informado previamente a Bridge.
El lote de registros debería pertenecer a la misma tienda. Por tal motivo en el request a enviar, el campo <store>codigoTienda</store> debería venir informado el código de la tienda a la cual pertenecen los registros informados dentro del mismo lote.
No se debería enviar <store>0</store>. Esto es para evitar que todas las tiendas reciban registros que no son de esa tienda.
Nombre del Servicio: itemSellingPrices
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemSellingPrices | List | Lista de listas de precios | Si |
La lista itemSellingPrices debe contener entidades "itemSellingPrice", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido | Detalle | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
itemSellingPriceNumber | Integer | Número de lista de precios | Si | |||||||||||||||||||||
stores | List | Lista de tiendas (opcional) si no vienen informados códigos de tienda se asume que es para todas Ej: <stores></stores> <stores type="list"> <store type="bean"> <storeCode>1</storeCode> </store> </stores> | No | con cada Code recibido, se busca el id del store
Cuando se importa la lista de precios, se considera la o las tiendas informadas dentro del request, para las cuales se generará la replicación. Si viene la lista vacía <stores></stores> se debe generar la replicación a todas las tiendas, sino solo a las tiendas informadas Ya no se tendrá en cuenta el parámetro externo para definir las tiendas a las que se debe replicar | ||||||||||||||||||||
effectiveDateTime | Date | Fecha de inicio de vigencia. | Si | |||||||||||||||||||||
expirationDateTime | Date | Fecha de expiración de la vigencia. | Si | |||||||||||||||||||||
Ítems | List | Lista de precios de artículos a crear o actualizar. | Si | |||||||||||||||||||||
partyRoleCode | Varchar (25) | Código de tipo de rol de un cliente | No | |||||||||||||||||||||
| currencyCode | Varchar (3) | Código de la moneda
| No | |||||||||||||||||||||
itemSellingPricesStatus | Integer | Estado de la lista de precios. | No | NOTA: si se encuentra configurada la propiedad "Workflow de aprobación lista de precios" = SI, siempre se importará como "Pendiente de aprobación" ignorando el valor que se setea en este campo Status (a partir de v7.9) | ||||||||||||||||||||
channels | Lista | Lista de canales de la lista de precios (opcional) Ej: <channels></channels> <channels type="list"> <channel type="bean"> <code>bridge</code> </channel> </channels> | No | |||||||||||||||||||||
storeGroups | Lista de grupo de tiendas (opcional) <storeGroups type="list"> <storeGroup type="bean"> <code>NORTE</code> </storeGroup> </storeGroups> | No | NOTA: modificaciones al grupo de tienda posteriores al envío de las listas no afectarán las listas. |
La lista items debe contener entidades "item", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemCode | Varchar (25) | Código de producto | Si |
Barcode | Varchar (25) | Código de alias | No |
currentSaleUnitRetailPriceAmount | float | Precio actual. | Si |
currentSaleUnitRetailPriceEffectiveDate | Date | Fecha de vigencia desde para el precio actual | Si |
currentSaleUnitRetailPriceExpirationDate | Date | Fecha de vigencia hasta para el precio actual | Si |
permanentSaleUnitRetailPriceAmount | Float | Precio permanente. | Si |
PermanentSaleUnitRetailPriceEffectiveDate | Date | Fecha de vigencia desde para el precio permanente | Si |
currentSaleUnitRetailPriceTypeCode | Varchar (50) | Tipo de precio representado por el precio actual (current). Default 'pr1' | No |
manufacturerSaleUnitRecommendedRetailPriceAmount | Money | Precio de venta recomendado por el proveedor. | Si |
supplierItem | varchar (100) | Código del proveedor del ítem | no (opcional) |
supplierItemAmount | Money | Monto que el proveedor reconoce (monto del recupero) | no (opcional) |
supplierFinancial | varchar (100) | Código del proveedor financiero del ítem | no (opcional) |
supplierFinancialAmount | money | monto que el proveedor Financiero reconoce | no (opcional) |
limit | number | límite de unidades que se podrán vender a ese precio | no (opcional) |
discountable | boolean | Indicador si aplica o no promociones (si no se envía default: true) | no (opcional) |
manualDiscount | boolean | Indicador si aplica descuento manual si o no (si no se envía default: true) | no (opcional) |
currentPackagePriceQuantity | number | Cantidad a superar para precio mayorista (umbral) | no (opcional) |
currentPackagePrice | number | Precio mayorista superando la cantidad definida como umbral | no (opcional) |
currentPackagePriceInitEffectiveDate | date | Fecha de inicio de vigencia de umbral | no (opcional) |
currentPackagePriceEndEffectiveDate | date | Fecha de fin de vigencia del umbral | no (opcional) |
| isDefault (v1.3) | boolean | Indicador si la lista es default (para los casos en los cuales se trabaja con código de barras en listas de precios) | no (opcional) |
| currentSalePriceUnitOfMeasure | NumberDecimal | Precio por Unidad de Medida Actual. | no (opcional) |
| currentSalePriceUnitOfMeasurePermanent | NumberDecimal | Precio por Unidad de Medida Permanente. | no (opcional) |
| unitOfMeasure | string | Unidad de Medida de Precio Actual. | no (opcional) |
{
"service": "itemSellingPrices",
"store": "0",
"entityCollection": {
"itemSellingPrices": [
{
"itemSellingPrice": [
{
"itemSellingPriceNumber": 221,
"stores": [
{
"store": [
{
"storeCode": 15
}
]
}
],
"effectiveDateTime": "05-01-2025",
"expirationDateTime": "12-12-2025",
"partyRoleCode": "",
"currencyCode": "",
"items": [
{
"item": [
{
"itemCode": "1112",
"barcode": "",
"currentSaleUnitRetailPriceAmount": 15000,
"currentSaleUnitRetailPriceEffectiveDate": "05-01-2025",
"currentSaleUnitRetailPriceExpirationDate": "12-12-2025",
"currentSaleUnitRetailPriceTypeCode": "pr1",
"permanentSaleUnitRetailPriceAmount": 8000,
"permanentSaleUnitRetailPriceEffectiveDate": "12-12-2025",
"manufacturerSaleUnitRecommendedRetailPriceAmount": 8000,
}
]
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "En la lista de precio ingresada en orden 1, La tienda 46 no existe, por lo tanto no se procesará nada dentro de esa lista"
}
STOCK POR DEPÓSITO
Este servicio tiene dependencias de otros maestros (ítems y depósitos) En caso de que se envíen las unidades en stock, los artículos y depósitos ya se deben haber informado previamente a Bridge.
Este servicio es utilizado para realizar la carga inicial de stock en una tienda ya sea porque se trata de una nueva tienda o porque se quiere pisar el stock al inicio del período con el stock del ERP. Es preciso especificar en el request a qué tienda debe ser replicado el stock.
Consideraciones:
- Si se trata de una tienda Bridge, la misma debe estar cerrada para que el stock se actualice.
- Las reservas realizadas serán dadas de baja
- Si hubieran artículos serializables o que requieren lote, se deberá enviar el listado completo de series / lotes con stock.
- Si hubiera diferencias entre la lista de series / lotes y las cantidades informadas, el stock de ese artículo no será actualizado.
- No se actualizará el stock de los ítems no informados. Es decir, si la relación entre la tienda/depósito/SKU/estado no fuera enviada en el servicio, el stock de la base de datos no será actualizado
Nombre del Servicio: stock
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
stocks | List | Lista de artículos con su respectivo stock para un depósito en particular | Si |
La lista stocks debe contener entidades "stock", las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
storeCode | Varchar (20) | Código de la tienda | Si |
locationCode | String (25) | Código del depósito | Si |
itemInventoryState | String (25) | Estado del depósito. La lista de valores disponibles es: | Si |
revenueCenter | String (50) | Código identificador del Centro de Costo al que está asociado por default el depósito | Si |
items | List | Lista de artículos en el depósito junto con su cantidad de unidades en stock | Si |
La lista items debe contener entidades “item”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemCode | String (25) | Código del artículo | Si |
stockUnits | Decimal (7) | Cantidad de unidades en stock (default 0) | Si |
serializedItems | List | Lista de series o lotes del artículo Sólo se procesará esta lista cuando el parámetro store.serialStockImportProcess = true | Si cuando el ítem requiere serie o lote. |
La lista items serializables o que requieren lote/despacho debe contener entidades “serializedItem”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
serialNumber | String (50) | Nro de serie NOTA: se podrá recibir el mismo nro de serie siempre y cuando pertenezca a un item diferente ejemplo de combinación posible: heladera art 123, serie 1122 microondas art 980, serie 1122 | Si cuando el ítem requiere serie |
serializedUnitCode | String (50) | Código del serialized NOTA: este código debe ser único por item (se importa en el campo SerializedUnit.code) | Si cuando el ítem requiere serie |
importDocNumber | String (50) | Nro de lote o pedimento | Si cuando el ítem requiere lote |
customsNumber | String (50) | Número de aduana | No |
customsDate | DateTime | Fecha de aduana | No |
manufacturingDate | DateTime | Fecha de fabricación | No |
stockUnits | Decimal (7) | Cantidad de unidades en stock (default 0) | Si |
IMPORTANTE
La sumatoria de stockUnits de la lista debe ser igual a la cantidad de stockUnits informada en el ítem.
{
"service": "stock",
"store": "0",
"entityCollection": {
"stocks": [
{
"stock": [
{
"storeCode": 15,
"locationCode": "DEP1",
"revenueCenter": "RCD",
"itemInventoryState": "OnSale",
"items": [
{
"item": [
{
"itemCode": "1112",
"stockUnits": 3,
"serializedItems": [
{
"serializedItem": [
{
"serialNumber": "000000000000000020",
"stockUnits": 1,
"serializedUnitCode": "0000000001"
},
{
"serialNumber": "000000000000000021",
"serializedUnitCode": "0000000002",
"stockUnits": 1
},
{
"serialNumber": "000000000000000022",
"serializedUnitCode": "0000000003",
"stockUnits": 1
}
]
}
]
}
]
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "Se importo con exito"
}
{
"ack": 0,
"detail": "No se importaron algunos registros"
}
MONEDA/MEDIO DE PAGO: COTIZACIÓN DE MONEDAS
Se podrá enviar la cotización asociada a una moneda que tomará el medio de pago que así lo tenga asociado.
Este servicio tiene dependencia de otro maestro (tender).
Las configuraciones del medio de pago deben aplicar sobre un medio de pago ya existente con lo cual ya tendrá su configuración de tienda y mediante el servicio se actualizará.
Nombre del Servicio: storeTender
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
storeTenders | List | Lista de configuraciones de medios de pago del tipo efectivo a actualizar. | Si |
La lista "storeTenders" debe contener entidades “storeTender”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
tenderTypeCode | String (25) | En este campo los valores admitidos deben encontrarse dados de alta dentro de la tabla tender (código) | si |
supervisorRequired | Boolean | Flag requiere autorización del supervisor | no - default: false |
foreignCurrency | Boolean | Indicador de moneda extranjera | si |
foreignCurrencyQuoteFactor | Decimal | Cotización de moneda extranjera Debe ser mayor a 0 | si |
foreignCurrencySellingQuoteFactor | Decimal | Cotización de moneda extranjera tipo de vendedor (utilizado para facturación en moneda extranjera) Debe ser mayor a 0 | si |
{
"service": "storeTender",
"store": "0",
"entityCollection": {
"storeTenders": [
{
"storeTender": [
{
"tenderTypeCode": "Dllr",
"supervisorRequired": false,
"foreignCurrency": true,
"foreignCurrencyQuoteFactor": 6130,
"foreignCurrencySellingQuoteFactor": 6660
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": "No se pudo ingresar ninguna configuración de medio de pago"
}
CLIENTES
Servicios relacionados al cliente, condición impositiva y tipo de cliente
Este servicio permitirá informar la lista de clientes con sus datos tanto personales (nombre, apellido, etc), de contacto (domicilio, teléfono, mail) como los fiscales (tipo de categoría impositiva, CUIT, IIBB, etc)
Dependiendo del tipo de cliente podrá ser persona u organización.
Nombre del Servicio: customer
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
customers | List | Lista de clientes a crear o actualizar. | Si |
La lista customers debe contener entidades “customer”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
code | Varchar (50) | Código del cliente Las posibles configuraciones son: A) DocNbr&Store
Ejemplo <CustomerID> 0100099988877ABC1 </CustomerID> - Código del cliente <Type>1</Type> -- tipo de doc DNI <Identifier>99988877</Identifier> -- Nro de documento <RetailStoreID>ABC1</RetailStoreID> -- código de tienda B) DocNbr
Ejemplo <CustomerID> 0100099988877 </CustomerID> - código del cliente <Type>1</Type> -- tipo de doc DNI <Identifier>99988877</Identifier> - Nro de documento Tipos de documentos:
| Si |
store | Varchar (10) | Código de identificación de la tienda | No |
origin | String | Origen de creación del cliente (el texto que se recibe se guarda en el campo party.origin) | No |
birthCountryCode | String | Nacionalidad | No |
highestEducationLevelName | Varchar (100) | Nivel educativo | No |
lifeCycleType | Varchar (50) | Tipo de ciclo de vida del cliente en la tienda | No |
annualIncomeAmount | Decimal | Ingreso anual | No |
maritalStatusCode code
| Varchar (50) | Estado civil - Código del Estado civil (tiene que ser un valor existente de la CR_MaritalStatus (campo CODE) Ejemplo: <maritalStatusCode> | No |
religiousAffiliationName | Varchar (50) | Preferencia religiosa | No |
| itemSellingPriceNumber | int | Lista de precios asociada al cliente (debe ser un nro de lista existente en tienda) Opcional | No |
customerAccounts
| List | Cuentas del cliente con el retailer (ver “ Cuenta del cliente ” para el detalle de su estructura) Es opcional (se utiliza para asociar cuentas y tarjetas) Si no se enviará esta información se podrá enviar la lista vacía <accounts type="list"></accounts> | No |
party | Bean | Entidad que representa al Participante con sus datos ( la estructura puede verse bajo el título "Tipo de cliente") | Si |
Varchar (100) | Direccion de email (se utilizará generar el usuario web para Bridge Web) | No | |
disabled | boolean | Indicador de cliente deshabilitado | No (default: false) |
exemptFlag | boolean | Indicador de cliente exento | No (default: false) |
partyCrParty | Varchar(25) | Personería del cliente: F para física, J para jurídica, E para extranjero | No |
partyCrSegment | Varchar(25) | Clase de cliente: VIP, Dificil de cobrar, etc. Enviar el código | No |
partyCrWorkActivity | Varchar(25) | Corresponde al Ramo del cliente. Enviar el código | No |
partyCrProfile | Varchar(25) | Corresponde al tipo de cliente crediticio (Z1 / Z2) | No |
| isCreditParty (a partir de v7.4) | boolean | Indica si es un "Cliente de crédito" | No (default: false) |
| creditDisabled | boolean | Indica si "Cuenta corriente deshabilitada" | No (default: false) |
| creditLimitAmount | number | Monto límite de crédito | No |
| creditTransactionLimitAmount | number | Monto límite de compra (en una sola transacción) | No |
creditDayLimitAmount | number | Monto límite de compra por día | No |
| billPeriod | string | Período de facturación (semanal: 7, quincenal: 15, mensual: 30) Si se envía, se deben enviar solo los valores 7, 15 o 30 | No |
| billExpirationDays | number | Días de vencimiento factura | No |
| isPrePaidParty | boolean | Indica si "es un cliente de prepago" | No (default: false) |
| prepaidDisabled | boolean | Cliente de prepago deshabilitado | No (default: false) |
| affiliate | boolean | Indica si el cliente se encuentra habilitado para realizar operaciones con productos que posean el beneficio de Afiliado (recaudos, Colombia) | No (default: false) |
| partyFiscalRegime | string | Código de regimen fiscal (utilizado en Mx para su factura electrónica) | No |
Tipo de cliente
Se informa detalle sobre el cliente, el cual dependiendo de si es persona física u organización se requieren de algunos datos puntuales:
- Persona física: firstName, lastName, genderType, type, birthday, month year
- Organización: name, type, taxesRegistrations
- Ambos: identifications, roleAssignments
La entidad <party> posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
firstName | Varchar (50) | Primer nombre (Persona Física) | Si para persona (es requerido si es cliente del tipo persona) No para organización (no es requerido si es un cliente del tipo organización) | ||||||||||||||||||||||||
middleNames | Varchar (50) | Segundo nombre (Persona Física) | No | ||||||||||||||||||||||||
lastName | Varchar (50) | Apellido (Persona Física) | Si para persona (es requerido si es cliente del tipo persona) No para organización (no es requerido si es un cliente del tipo organización) | ||||||||||||||||||||||||
secondLastName | Varchar (50) | Segundo apellido (Persona Física) | No | ||||||||||||||||||||||||
genderType | Char (1) | Genero (Persona Física) “F” o “M” | No | ||||||||||||||||||||||||
name | Varchar (150) | Nombre de la organización (Organizacion) | No para persona (no es requerido si es cliente del tipo persona) Si para organización (si es requerido si es un cliente del tipo organización) | ||||||||||||||||||||||||
typecode | Varchar (3) | Tipo de participante. Posibles valores: PRS o OGN Persona (PRS) o Organización (OGN) | Si | ||||||||||||||||||||||||
birthCountryCode | Varchar (15) | Nacionalidad (se debe enviar el código. Para Argentina enviar ARG)
| No | ||||||||||||||||||||||||
birthDayNumber | Integer | Dia de nacimiento | No | ||||||||||||||||||||||||
birthMonthNumber | Integer | Mes del nacimiento | No | ||||||||||||||||||||||||
birthYearNumber | Integer | Año de nacimiento | No | ||||||||||||||||||||||||
roleAssignments | List | Lista de roles que puede tener el participante (L a estructura puede verse bajo el título "Rol del participante", ver “Rol del participante”) | Si | ||||||||||||||||||||||||
identifications | List | Lista de identificaciones del participante ( La estructura puede verse bajo el título "Identificaciones", ver “Identificaciones” ) | Si | ||||||||||||||||||||||||
taxesRegistration | List | Lista de impuestos del cliente (L a estructura puede verse bajo el título "Impuestos" , ver “Impuestos” ) Es opcional. | No |
Rol del cliente
Los roles de un participante permiten definir que tipo de relación mantiene el participante con el retailer, pudiendo ser su cliente, empleado, etc.
La asignación de rol para el participante es requerida. La lista no puede venir vacía. El tipo de rol del cliente, es el dato que el POS utilizará para su envío a PROMO para cálculo de promociones por tipo de cliente.
La lista roleAssignments debe contener entidades “ partyRoleAssignment ”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido | ||||||||||||||||||||||||||||
partyRole id
| Varchar (15) | Identificador del rol. Este campo será utilizado para el envío a PROMO por tipo de cliente. Este listado es del tipo de roles que se crean por setup en la instalación. Puede ser unos de los siguientes valores:
| Si | ||||||||||||||||||||||||||||
Name | Varchar | Nombre del rol. Se valida que corresponda al nombre del rol indicado en el campo partyRoleId (campo NM_RO_PRTY) Ej: “Cliente”, “Empleado” Este campo es caseSensitive, con lo cual debe enviarse tal cual se encuentra creado en el ABM de tipos de clientes (campo nombre) | Si | ||||||||||||||||||||||||||||
effectiveDate | Date | Fecha de inicio de vigencia del rol | Si | ||||||||||||||||||||||||||||
expirationDate | Date | Fecha de expiración del rol | Si | ||||||||||||||||||||||||||||
statusCode | Integer | Estado de la asignación del rol al party | No | ||||||||||||||||||||||||||||
contactMethods | List | Lista de métodos de contacto (L a estructura puede verse bajo el título "Metodos de contacto" , ver “ Metodos de contacto” ) | SI (al menos debe tener uno) |
Métodos de contacto del cliente
Un cliente puede tener más de un medio de contacto con el retailer. Por cada método de contacto del cliente (ej: laboral, particular) se podrá recibir una dirección, un teléfono, un mail
La lista contactMethods debe contener entidades “ partyContactMethod ”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
purposeType id | Integer | Id del tipo de propósito del contacto. El listado de los valores ya precargados por setup son los siguientes valores: 1 – Emergencia 2 – Consulta (default) | Si |
methodType id | Integer | Id del tipo de método de contacto. Estos valores vienen configurados en el setup o podrán ser ajustados por BM. Puede ser unos de los siguientes valores: 1 – Particular 2 – Laboral | Si |
name | String | Nombre del método de contacto (ej: personal, laboral) | No |
externalSellerID | String | Opcional ID del vendedor externo | No |
externalSellerName | String | Opcional Nombre del vendedor externo
<partyContactMethod type="bean">
<purposeType id="2" />
<methodType id="2" />
<effectiveDate format="dd-MM-yyyy">01-01-2000</effectiveDate>
<expirationDate format="dd-MM-yyyy">31-12-2050</expirationDate>
<externalSellerID>123</externalSellerID>
<externalSellerName>Juan Perez</externalSellerName>
</partyContactMethod>
| No |
effectiveDate | Date | Fecha de inicio vigencia | Si |
expirationDate | Date | Fecha expiración del contacto | Si |
address | Bean | Domicilio (L a estructura puede verse bajo el título "Domicilio", ver “Domicilio” ) | No |
emailAddress | Bean | Correo Electrónico(L a estructura puede verse bajo el título "Correo electrónico", ver “Correo electrónico” ) | No |
telephone | Bean | Teléfono(L a estructura puede verse bajo el título "Teléfono" , ver “Teléfono” ) | No |
itemSellingPriceNumber | int | Lista de precios asociada al cliente (debe ser un nro de lista existente en tienda) para ese domicilio en particular (disponible a partir de versión 7.8) | No |
deliveryCode | String | Código del reparto o distribución (a partir de v7.8) | No |
Domicilio
Permite dar de alta la dirección de un cliente para un determinado tipo de contacto con el mismo. Es requerido contar con la primera línea de la dirección, su ciudad.
La entidad address posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
city | Bean | Ciudad. (L a estructura puede verse bajo el título "Ciudad", ver “ Ciudad ” ) | Si |
country | Bean | País. (L a estructura puede verse bajo el título "País", ver “ País ” ) | No |
state | Bean | Estado. (L a estructura puede verse bajo el título "Estado", ver “ Estado ” ) | No |
firstLine | Varchar (150) | 1ra línea de la dirección | Si |
secondLine | Varchar (100) | 2da línea de la dirección | No |
thirdLine | Varchar (100) | 3ra línea de la dirección | No |
fourthLine | Varchar (100) | 4ta línea de la dirección | No |
postalCode | Varchar (20) | Código postal (si se envia cityLocation, lo toma automáticamente ) | No |
postalCodeEx | Varchar (20) | Extensión del código postal | No |
betweenStreets | Varchar (100) | Entre calles | No |
cityLocation | Varchar (20) | Colonia (País, Estado, ciudad y Colonia) | No |
Ciudad
La entidad ciudad posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
code | Varchar (15) | Código de ciudad Enviar campo CODE de tabla CITY | Si |
País
La entidad país posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
code | Varchar (15) | Código de país Enviar campo CODE de la tabla COUNTRY | Si |
Estado
La entidad estado posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
code | Varchar (15) | Código de estado Enviar campo CODE de la tabla STATE | Si |
Correo electrónico
La entidad emailAddress posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
name | Varchar (100) | Correo Electronico | Si |
Telefono
La entidad telephone posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
areaCode | Varchar (6) | Código de área | Si |
telephoneNumber | Varchar (20) | Número de teléfono local | Si |
countryCode | Varchar (3) | Código de país | Si |
extensionNumber | Varchar (15) | Número de extensión telefónica | No |
completeNumber | Varchar (32) | Número telefónico completo | No |
Identificaciones
Las identificaciones asociadas al cliente permitiendo registrar su documento, pasaporte o CUIT.
Si un cliente es del tipo persona tendrá su DNI o pasaporte. Un cliente del tipo organización su CUIT.
La lista de identificaciones no puede estar vacía. En caso de que el cliente no sea consumidor final, se valida que la primera identificación sea tipo CUIT (Requisito de la impresora fiscal)
La lista “identifications” debe contener entidades “partyIdentification”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
identificationType id
| Integer | Id del tipo de identificador. Puede ser unos de los siguientes valores Para Argentina:
Para Uruguay
Para México
Para Chile
Para Colombia
| Si |
identifierValue | Varchar (20) | Nro de la identificación | Si |
issueDate | Date | Fecha de emisión de la identificación | No |
expirationDate | Date | Fecha de expiración de la identificación | No |
Cliente Persona
{
"service": "customer",
"store": "0",
"entityCollection": {
"customers": [
{
"@_type": "list",
"customer": [
{
"@_type": "bean",
"code": 123456,
"store": 1,
"party": [
{
"@_type": "bean",
"firstName": "DANIEL",
"lastName": "GONZALEZ",
"genderType": "M",
"typeCode": "PRS",
"birthCountryCode": "ARG",
"birthDayNumber": 22,
"birthMonthNumber": "08",
"birthYearNumber": 1994,
"roleAssignments": [
{
"@_type": "list",
"partyRoleAssignment": [
{
"@_type": "bean",
"partyRole": [
{
"@_id": "1",
"name": "Cliente"
}
],
"effectiveDate": [
{
"#text": "23-08-2017",
"@_format": "dd-MM-yyyy"
}
],
"expirationDate": [
{
"#text": "30-12-2200",
"@_format": "dd-MM-yyyy"
}
],
"contactMethods": [
{
"@_type": "list",
"partyContactMethod": [
{
"@_type": "bean",
"purposeType": [
{
"@_id": "2"
}
],
"methodType": [
{
"@_id": "1"
}
],
"effectiveDate": "2017-08-23T16:32:37.947",
"expirationDate": "2200-12-30 00:00:00.000",
"address": [
{
"@_type": "bean",
"city": [
{
"@_type": "bean",
"code": 7346
}
],
"country": [
{
"@_type": "bean",
"code": "PER"
}
],
"state": [
{
"@_type": "bean",
"code": 7
}
],
"firstLine": "AVDA SAN MARTIN 486",
"postalCode": 3206
}
],
"emailAddress": [
{
"@_type": "bean",
"name": "[email protected]"
}
],
"telephone": [
{
"@_type": "bean",
"areaCode": 11,
"telephoneNumber": 23878065,
"countryCode": 54
}
]
}
]
}
],
"sequenceNumber": 1
}
]
}
],
"identifications": [
{
"@_type": "list",
"partyIdentification": [
{
"@_type": "bean",
"identificationType": [
{
"@_id": "1"
}
],
"identifierValue": 95873666
}
]
}
]
}
]
}
]
}
]
}
}
Tipo de cliente empresa
Adicionalmente tiene datos impositivos asociados
- IMPUESTOS
La lista de impuestos asociadas al cliente, permiten tener su información fiscal dependiendo sea un participante del tipo persona u organización (CUIT e IIBB)
Es opcional si es del tipo persona, pero requerido para una organización.
La lista taxRegistrations debe contener entidades “taxRegistration”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
number | Varchar (30) | Número de registro (nro de CUIT o de IIBB) | Si |
name | Varchar (50) | Nombre de la persona u organización para el registro (es solo informativo para dejar registro del tipo de registro impostivo del cliente. Ej: “Resp iscripto IVA”) | Si |
taxTypes | List | Tipos de impuestos ( La estructura puede verse bajo el título "Tipos de impuestos", ver “Tipos de impuestos” ) | Si |
- TIPOS DE IMPUESTOS
Se informarán todos los datos impositivos del cliente referidos a certificado de eximición (si los tuviera) y los datos de alícuota del mismo (si tuviera una diferencial por padrón)
La lista taxTypes debe contener entidades “ taxRegistrationTaxType ”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
jurisdictionNType | Bean | Identificador del tipo de jurisdicción e impuesto (La estructura puede verse bajo el título “Tipo de jurisdicción e impuestos”, ver “ Relaciones impositivas anidadas ” | Si |
inscEffectiveDate | Date | Fecha efectiva desde la cual la jurisdicción reconoce el registro impositivo del cliente | Si |
inscExpirationDate | Date | Fecha de expiración desde la cual la jurisdicción ya no reconoce el registro impositivo del cliente | Si |
unifiedFactor | Integer | Coeficiente unificado (es un valor que se le asigna al cliente en base a su nivel de facturación que permite eximirlo del cobro de la alícuota si el coeficiente unificado del cliente supera el determinado valor configurado para el coeficiente unificado para el impuesto) | No |
certificates | List | Lista de certificados(L a estructura puede verse bajo el título "Certificados", ver “Certificados”) Es opcional y se informan los certificados de eximición de IIBB | No |
aliquot | decimal | Alícuota del cliente (es el porcentaje que se debe aplicar de percepción según padrón, en caso de contar con esta alícuota, se utilizará ésta en lugar de la alícuota configurada por defecto para el impuesto, siempre y cuando la misma se encuentre en vigencia fecha de alícuotas vigentes) | No |
aliqEffectiveDate | date | Fecha de vigencia de alícuota (desde) Si se envía la alícuota se validará la fecha de vigencia en el POS | No |
aliqExpirationDate | date | Fecha de vigencia de alícuota (hasta) Si se envía la alícuota se validará la fecha de vigencia en el POS | No |
- CERTIFICADOS
Es una lista opcional. Su fin es informar los certificados de eximición de IIBB con su vigencia y su porcentaje de eximición del cliente. Estos certificados deben estar relacionados con la jurisdicción en la cual el cliente se encuentre registrado.
Si no tiene certificados asociados la lista irá vacía. <certificates type="list"></certificates>
La lista certificates debe contener entidades “certificate”, las cuales poseen la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
sequenceNumber | Integer | Número secuencia para los certificado de exención, ya que podrían recibirse más de un certificado cada uno con vigencia y jurisdicción diferente | Si |
certificateIssueDate | Date | Fecha de validez del certificado de exención (desde) | Si |
certificateExpirationDate | Date | Fecha de vencimiento del certificado de exención (hasta) | Si |
percentage | real | Porcentaje de liberación impositiva | Si |
rateClass | Bean | Código de clase de impuesto L a estructura puede verse bajo el título "Clase de impuesto", ver “ Clase de impuesto ” ) | Si |
- CLASE DE IMPUESTOS
La entidad clase de impuesto posee la siguiente estructura:
Propiedad | Tipo de dato | Descripción | Requerido |
code | Varchar (25) | Código de clase de impuesto (lista válida: IIBBBsAs, IIBBSL, IIBBStFe, IIBBTU, IVA, IVAPer) | Si |
- RELACIONES IMPOSITIVAS ANIDADAS
Permiti definir cuál es el tipo de impuesto, la categoría del cliente ante ese impuesto y la jurisdicción
Propiedad | Tipo de dato | Descripción | Requerido |
jurisdiction | Bean | Jurisdicción. L a estructura puede verse bajo el título "Jurisdicción", ver “ Jurisdicción” ) | Si |
taxCategory | Bean | Categoría impositiva del cliente. L a estructura puede verse bajo el título "Categoría del cliente", ver “ Categoría del cliente ” ) | Si |
type | Bean | Tipo de impuesto. L a estructura puede verse bajo el título “Impuesto", ver “ Impuesto ” ) | Si |
JURISDICCIÓN
Propiedad | Tipo de dato | Descripción | Requerido |
taxJurisdictionCode | String (25) | Identificador de la jurisdicción Ejemplo: BA= Buenos Aires | Si |
CATEGORÍA DEL CLIENTE
Propiedad | Tipo de dato | Descripción | Requerido |
code | String (25) | Identificador de la categoría impositiva del cliente Ejemplo: IBBCM | Si |
IMPUESTO
Propiedad | Tipo de dato | Descripción | Requerido |
code | String (25) | Identificador del tipo de impuesto Valores posibiles: IVA, IB, MNC | Si |
{
"service": "customer",
"store": "0",
"entityCollection": {
"customers": [
{
"@_type": "list",
"customer": [
{
"@_type": "bean",
"code": 920180,
"store": 1,
"party": [
{
"@_type": "bean",
"name": "PINTURERIA ORO SA",
"typeCode": "OGN",
"roleAssignments": [
{
"@_type": "list",
"partyRoleAssignment": [
{
"@_type": "bean",
"contactMethods": [
{
"@_type": "list",
"partyContactMethod": [
{
"@_type": "bean",
"purposeType": [
{
"@_id": "2"
}
],
"methodType": [
{
"@_id": "1"
}
],
"name": "Laboral",
"effectiveDate": "2017-01-20T16:12:17",
"expirationDate": "2200-12-30 00:00:00.000",
"address": [
{
"@_type": "bean",
"city": [
{
"@_type": "bean",
"code": 10859
}
],
"country": [
{
"@_type": "bean",
"code": "ARG"
}
],
"state": [
{
"@_type": "bean",
"code": "AR-B"
}
],
"firstLine": "CASA 60 SAN JOSE LA HERAS",
"postalCode": 9017
}
],
"emailAddress": [
{
"@_type": "bean",
"name": "[email protected]"
}
]
}
]
}
],
"sequenceNumber": 1,
"partyRole": [
{
"@_id": "1",
"name": "Cliente"
}
],
"effectiveDate": [
{
"#text": "20-01-2017",
"@_format": "dd-MM-yyyy"
}
],
"expirationDate": [
{
"#text": "30-12-2200",
"@_format": "dd-MM-yyyy"
}
]
}
]
}
],
"identifications": [
{
"@_type": "list",
"partyIdentification": [
{
"@_type": "bean",
"identificationType": [
{
"@_id": "3"
}
],
"identifierValue": 20225939420
}
]
}
],
"taxRegistrations": [
{
"taxRegistration": [
{
"@_type": "bean",
"name": "PINTURERIA ORO SA",
"number": 20225939420,
"taxTypes": [
{
"@_type": "list",
"taxRegistrationTaxType": [
{
"@_type": "bean",
"inscEffectiveDate": "2017-01-20T16:12:17",
"inscExpirationDate": "2155-01-20T16:12:17",
"jurisdictionNType": [
{
"@_type": "list",
"jurisdiction": [
{
"#text": "-- en caso del IVA siempre es ARG porque",
"@_type": "bean",
"taxJurisdictionCode": "ARG"
}
],
"taxCategory": [
{
"@_type": "bean",
"code": "RI"
}
],
"type": [
{
"@_type": "bean",
"code": "IVA"
}
]
}
]
}
]
}
]
},
{
"@_type": "bean",
"name": "PINTURERIA ORO SA",
"number": 20225939420,
"taxTypes": [
{
"@_type": "list",
"taxRegistrationTaxType": [
{
"@_type": "bean",
"inscEffectiveDate": "2017-01-20T16:12:17",
"inscExpirationDate": "2155-01-20T16:12:17",
"certificates": [
{
"@_type": "list"
}
],
"jurisdictionNType": [
{
"@_type": "list",
"jurisdiction": [
{
"@_type": "bean",
"taxJurisdictionCode": "BA"
}
],
"taxCategory": [
{
"@_type": "bean",
"code": "L"
}
],
"type": [
{
"@_type": "bean",
"code": "IB"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 999,
"detail": "No se pudo ingresar ningun cliente"
}
CONFIGURACIÓN POR TIENDA
Mediante este servicio se genera una nueva configuración de Productos por Tienda en la base de datos.
Nombre del servicio: itemStore
Parámetros de Entrada:
| Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
| itemStores | list | Lista de itemStore a crear o actualizar | Si |
Se podrá recibir una lista de itemStores conteniendo elementos del tipo “itemStore", que posee la siguiente estructura:
| Propiedad | Tipo de dato | Descripción | Requerido | Campo a importar en ItemStore |
|---|---|---|---|---|
internalCode | String (25) | Código de artículo | Si |
|
storeCode | String | Código de tienda | Si |
|
notForSale | Integer | Item no a la venta. Valores posibles:
| No | "notForSale" |
disabled | Integer | Item deshabilitado Valores posibles:
| No | "disabled" |
blockedForIcd | Integer | Item Bloqueado para la compra (solo en órdenes de compra) Valores posibles:
| No | "blockedForIcd" |
ivaType | String (3) | Código del tipo de IVA asociado al artículo. En este campo los valores admitidos deben encontrarse dados de alta dentro de la tabla VAT (campo code) | No |
|
brand | String (100) | Código de la marca del artículo. En este campo los valores admitidos deben encontrarse dados de alta dentro de la tabla Brand (campo name) | No |
|
itemType | String (25) | Código del tipo de artículo. En este campo los valores admitidos son:
| No |
|
maxStock | Decimal(11,2) | Cantidad máxima de stock permitida utilizado únicamente para la funcionalidad de pedido sugerido | No | "maxStock" |
securityStock | Decimal(11,2) | Stock de seguridad utilizado únicamente para la funcionalidad de pedido sugerido | No | "securityStock" |
price | NumberDecimal("0.0000") | Precio de venta | No | "price" |
unitCost | NumberDecimal("0.0000") | Precio de costo - Si método de costeo = ppp, se actualizará en tienda, únicamente en la carga inicial. Cualquier costo posterior que se envíe, no pisará el costo de la tienda. | No | "unitCost" |
minSalePrice | Decimal | Precio mínimo de venta (para cálculo de margenes si aplicara por configuración) | No | minSalePrice |
minStockForChannels | Decimal | Cantidad de stock mínimo para canales por tienda | No | minStockForChannels |
| location | Varchar(25) | Código del almacén o depósito por default. | No | "location" |
| saleLocation | Varchar(25) | Código del almacén o depósito para la venta. | No | "saleLocation" |
| onConsignment | Integer | Item en consignación Valores posibles:
| No | "onConsignment" |
Consideraciones de algunos campos no informados en el servicio:
| Propiedad | Tipo de dato | Descripción |
|---|---|---|
internalCode | itemStore.item → item.internalCode | Con el código del ítem recibido, se obtiene el ID del ítem |
description | itemStore.item → item.description | Con el ID del item se obtiene el item.description |
storeCode | itemStore.store → store.code | Con el código de la tienda recibido, se obtiene el ID del store |
processed | por defecto false | |
notForSale | Si no es informado, por defecto deben ser 0 | |
disabled | Si no es informado, por defecto deben ser 0 | |
blockedForIcd | Si no es informado, por defecto deben ser 0 | |
createdAt | Si es un nuevo registro importar la fecha actual, sino no se modifica | |
updatedAt | Actualizar con la fecha actual | |
hierarchyGroup | ||
processed | Importar con valor false (para que luego lo tome el job de API que los procesa) | |
onConsignment | Si no es informado, por defecto debe ser 0 |
{
"service": "itemStore",
"store": "0",
"entityCollection": {
"itemStores": [
{
"itemStore": [
{
"internalCode": 2025,
"storeCode": 15
},
{
"internalCode": 1112,
"storeCode": 15
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registros fueron actualizados"
}
{
"ack": 999,
"detail": " - Errores: el internalCode 98222000000000000 no existe o no esta informado."
}
AJUSTE DE INVENTARIO
Por medio de este servicio se genera un nuevo ajuste de inventario en la base de datos.
Nombre del servicio: inventoryAdjustmentDocument
Parámetros de Entrada:
| Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
createDateTimestamp | date | Fecha de creación del ajuste | SI |
sourceRetailStore | String | Código de la tienda | Si |
receiptDate | date | Fecha de finalización del ajuste | No |
contractReferenceNumber | String | Descripción del ajuste | No |
location | String | Depósito | Si |
state | String | Estado (OnSale corresponde a Items a la venta) | SI |
inventoryAdjustmentType | String | Motivo del ajuste Debe ser un código de tipo de ajuste existente en Administración -> Motivos -> Motivos de ajuste de inventario | SI |
InventoryControlDocument LineItems | List | Lista de artículos del ajuste | SI |
La lista inventoryControlDocumentLineItems debe contener entidades "inventoryControlDocumentLineItem", las cuales poseen la siguiente estructura:
| Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemCode | String | Código del artículo. | Si |
unitCount | Decimal | Cantidad a ajustar por unidad de compra | Si |
barcode | String | Código de barras | No. Si no se envía, la unidad de compra será por defecto 1 |
{
"service": "inventoryAdjustmentDocument",
"store": "0",
"entityCollection": {
"adjustmentDocument": [
{
"createDateTimestamp": "2025-02-25",
"sourceRetailStore": 15,
"receiptDate": "2025-02-25",
"contractReferenceNumber": 2020,
"location": "DEP1",
"state": "OnSale",
"inventoryAdjustmentType": "JUSTIFIED_DEPLETIONS",
"inventoryControlDocumentLineItems": [
{
"inventoryControlDocumentLineItem": [
{
"item": 2025,
"unitCount": 5
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "Se importo con exito"
}
{
"ack": 0,
"detail": "El tipo de ajuste Js no existe o no es admitido para ajustes."
}
LISTA DE PRECIOS PROMOCIONALES
Una Lista de Precios Promocional es un mecanismo que permite aplicar precios especiales a ciertos artículos dentro de una tienda o grupo de tiendas durante un período determinado. Estas listas permiten establecer descuentos fijos, porcentuales o precios específicos sobre una lista de precios base, facilitando la gestión de promociones en el punto de venta.
El servicio de Carga de Listas Promocionales permite la creación, activación, desactivación y gestión de estas listas de manera automatizada mediante una API. Esto mejora la eficiencia en la administración de precios promocionales, asegurando que los descuentos se apliquen correctamente y con la trazabilidad necesaria en el sistema.
UPDATE 7.9
El servicio de Lista de Precios Promocionales está disponible a partir de la versión 7.9 de Bridge. Para utilizar esta funcionalidad, es necesario asegurarse de que el sistema esté actualizado a esta versión o una superior.
Consideraciones para su Uso
Para utilizar correctamente el servicio de Carga de Listas Promocionales, es importante tener en cuenta los siguientes aspectos:
Dependencia de Artículos:
- Los artículos incluidos en la lista promocional deben haber sido previamente informados en Bridge.
- No es posible cargar descuentos para productos inexistentes en el sistema.
Vinculación con Tiendas:
- El lote de registros debe pertenecer a la misma tienda.
- En el request de creación, el campo
<store><codigoTienda></store>debe indicar el código de la tienda correspondiente. - No se deberá enviar
<store>0</store>, ya que esto provocaría que la promoción se aplique a todas las tiendas sin distinción.
Parámetros de Configuración:
- Las listas promocionales pueden aplicar descuentos de tres tipos:
- 4: Descuento por importe fijo.
- 5: Descuento por porcentaje.
- 6: Nuevo precio específico.
- Se deben establecer fechas de vigencia (inicio y fin) para cada lista promocional.
- Es posible incluir información adicional en los campos
text1,text2ytext3, que pueden ser utilizados para mostrar mensajes personalizados en el POS.
- Las listas promocionales pueden aplicar descuentos de tres tipos:
Estados de la Lista Promocional:
- Una lista de precios promocional se encuentra en estado PROCESADO=FALSE hasta que el sistema ejecute el proceso de actualización de precios.
- Es posible inactivar una lista promocional mediante el campo
disabled=true.
Este servicio está diseñado para optimizar la gestión de precios promocionales, asegurando una aplicación correcta en los puntos de venta y proporcionando herramientas para su administración eficiente en Bridge.
Nombre del Servicio: itemSellingPricesPromo
Parámetros de entrada:
Propiedad | Tipo de dato | Descripción | Requerido |
|---|---|---|---|
itemSellingPricesPromo | List | Lista de listas de precios promocionales | Si |
La lista itemSellingPricesPromo debe contener entidades "itemSellingPricePromo", las cuales poseen la siguiente estructura:
| Propiedad | Tipo de dato | Descripción | Requerido |
| promoPriceListName | String | Nombre que identifica a la lista de precios promocional | Sí |
| promoPriceListNumber | Number | Número de la lista de precios que se va adeshabilitar | Sí cuando disabled = true |
| effectiveDate | Date | Fecha de inicio de vigencia | Sí |
| expirationDate | Date | Fecha de fin de vigencia | Sí |
| disabled | Boolean | Indica si la lista está deshabilitada o no (default si no se recibe: false) Si se recibe, debe enviarse el campo promoPriceListNumber | No |
| items | Lista | Lista de ítems que tendrán precios promocionales | Sí para carga No para desactivar la lista |
| Stores | Lista | Lista de tiendas que tendrán precios promocionales. |
|
| StoresGroup | Lista | Lista de grupos de tiendas que tendrán precios promocionales |
|
UPDATE V7.9
Se actualiza el servicio itemSellingPricesPromo para permitir segmentación por tiendas (stores) y grupos de tiendas (storesGroup) al momento de aplicar listas de precios promocionales. Esta funcionalidad permite diferenciar descuentos aplicados por segmentos geográficos o comerciales específicos.
La lista ítems debe contener entidades "item", las cuales poseen la siguiente estructura:
| Propiedad | Tipo de dato | Descripción | Requerido |
| internalCode | String | Código del item (SKU) | Sí |
| valueType | Number | Tipo de descuento Valores posibles: · 4: Importe · 5: Porcentaje · 6: Nuevo precio | Sí |
| value | NumberDecimal | Valor | Sí |
| effectiveDate | Date | Fecha de inicio de la vigencia del precio promocional Formato dd-mm-yyyy | Sí |
| expirationDate | Date | Fecha de fin de la vigencia del precio promocional Formato dd-mm-yyyy | Sí |
| sellingPriceListNumber | Number | Número de lista de precio para el que aplica el precio promocional | Sí |
| text1 | String | Texto 1 | No |
| text2 | String | Texto 2 | No |
| text3 | String | Texto 3 | No |
Consideraciones del servicio itemSellingPricePromo
- El número de la lista promocional [ItemSellingPricePromoHeader.promoPriceListNumber] se genera automáticamente y es un consecutivo.
- Deben aplicarse todas las validaciones necesarias para que, una vez aceptada la lista promocional por servicio, quede en estado Completa (status=0)
- Todos los registros de ItemSellingPricePromo deben se crean con el flag processed=false
- Es posible desactivar una lista promocional por servicio. Cuando se recibe disabled=true
{
"service": "itemSellingPricesPromo",
"store": "0",
"entityCollection": {
"ItemSellingPricesPromo": [
{
"ItemSellingPricePromo": [
{
"promoPriceListName": 15,
"effectiveDate": "01-01-2025",
"expirationDate": "12-03-2026",
"disabled": false,
"items": [
{
"item": [
{
"internalCode": 1715,
"valueType": 4,
"value": 40,
"effectiveDate": "01-01-2025",
"expirationDate": "12-03-2026",
"sellingPriceListNumber": 15,
"text1": "rebaja golosinas",
"text2": "ofertas",
"text3": "caramelos"
}
]
}
]
}
]
}
]
}
}
{
"ack": 0,
"detail": "1 registro fue creado"
}
{
"ack": 999,
"detail": "Error en lista de precios promocional (15):\n Error en item (17102025): El item no existe."
}
1 comentário
Alejandro Fabián Silva
Muy buena documentacion