BRIDGE API - REST - Importación de grupo de documentos a facturar


© 2024 Napse. Todos los derechos reservados.

CONTENIDO



Este servicio permitirá crear desde fuentes externas, un grupo de documentos u ordenes en la tienda para luego ser retomadas por el punto de venta

  1. Se invoca de la siguiente manera: https://[direccion_ip]:[puerto]/billOrderGroup/create - Ejemplo: https://200.100.100.100:8090/billOrderGroup/create
  2. Se invoca via POST.
  3. Es un servicio de API tienda, NO estará disponible en API Central


Tener en cuenta:

  1. Primero se debe invocar al servicio de autenticación para obtener un token.
  2. 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).
  3.  Si al llamar al servicio el token expiró, se recibirá respuesta de token inválido y se deberá volver a pedir uno nuevo.

Ver BRIDGE API - REST – Autenticación: token


JSON ejemplo con cliente persona

JSON - Cliente Persona
    "externalNumber": "SIS_79_0001",
    "channelCode": "bridge",//opcional, defecto bridge
    "currencyCode": "ARS", //opcional, defecto moneda base del sistema 
    "party": {
        "code": "13308913",
        "firstName": "Margarita",
        "lastName": "Roddi",
        "email": "[email protected]",
        "typeCode": "Person",
        "identificationType": 1,
        "identifier": "13308913",
        "partyRoleAssignments": [
            {"partyRole":"1"}
        ],
        "partyContactMethods": [
            {
                "name": "Facturacion",
                "address": {
                    "firstLine": "Av. del Libertador 6000",
                    "countryCode": "ARG",
                    "cityCode": "CRR_0027",
                    "stateCode": "BSAS"
                },
                "emailAddress": "[email protected]",
                "telephone": {
                    "telephoneNumber": "011 4744901"
                },
                "principalForDelivery": false,
                "principalForBilling": true
            },
            {
                "name": "Trabajo2",
                "address": {
                    "firstLine": "Av. Directorio 5000",
                    "countryCode": "ARG",
                    "cityCode": "CRR_0027",
                    "stateCode": "BSAS"
                },
                "emailAddress": "[email protected]",
                "telephone": {
                    "telephoneNumber": "011 4744901"
                },
                "principalForDelivery": true,
                "principalForBilling": false,
                "useForBilling": true
            }
        ]
    },
    "documents": [
        {
            "externalDocumentNumber": "123456789",
            "manualDiscountAmount": 20,
            "notes": "", //opcional
            "items": [
                {
                    "itemCode": "PESABLE123", 
                    "barcode" : "77998866",
                    "description":  ,
                    "locationCode": "DEP1",
                    "magnitude": 1.455,
                    "unitPrice": 300,
                    "orderedQty": 1,
                    "packagePrice": false,
                    "otherUnitOfMeasureCode": , 
                    "priceModifier":
                         {
                            "amount": 5,
                            "reasonText": "Cupon de regalo"
                        }
                     ,
                    "serie": "12345678",   
                    "notes":""
                },
                {
                    "itemCode": "PARACETAMOL",
                    "description": "Paracetamol 600",
                    "locationCode": "DEP1",
                    "barcode": "555222333",
                    "units": 6,
                    "unitPrice": 100,
                    "orderedQty": 2,
                    "otherUnitOfMeasureCode": "BL",
                    "notes":"no requiere receta"
          }
             ]
        }

    ]

}


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 Maestroshttps://share.linx.com.br/x/D5d8Cg)


NOTA: los campos de importes deben ser enviados hasta dos decimales



CampoTipoDescripciónRequeridoEjemplosValidación (código)


externalNumberStringCódigo del grupo de documentosSI

"SIS_79_0001"

Validaciones: al menos debe tener un caracter

999: externalNumber debe tener al menos un 1 caracter

(si no pasa la validación del tipo de dato)

--------------

994: Ya existe el código de grupo originante [Código]para el canal: [Código de Canal]

channelCodeStringCódigo del canal de OrigenNO

"EXTERNALSYS"

ver servicio channel/all

(opcional. por defecto será "bridge")

999: No se encontró el canal con código: [Código]

 

currencyCodeStringCódigo de la monedaSI

"ARS"

ver servicio currency/all

(opcional, por defecto toma la moneda base del sistema) 

999: No se encontró la moneda con código: [Código]


notesStringComentarios sobre el grupo de documentos a facturarNO

"Pedido de Margarita Roddi"

opcional


party (cliente asociado a los documentos). Requerido

codeString

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)

NO

(opcional. Si no viene informado se creará el código del cliente con el método que aplique Bridge para la creación de nuevos clientes en la tienda)

"13308913"



firstNameStringNombre del ClienteSI (solo si es typeCode = 'Person')

"Margarita",

999: el nombre de la persona es requerido.

lastNameStringApellido del clienteSI (solo si es typeCode = 'Person')

"Roddi",

999: el apellido es requerido para clientes de tipo "Person"

nameStringRazón socialSI (sólo si es typeCode = 'Organization')IBM

emailStringCorreo del clienteSI

"marga@electroweb.com.ar"

Se validará según se encuentre definido en la tienda (puede ser requerido para factura electrónica) 




typeCodeStringTipo de cliente (persona física o jurídica/empresa)

SI


Valores posibles:

  • Person
  • Organization
Error: “El campo party.typeCode debe coincidir con Person u Organization

identificationTypeNumberTipo de documentoSI

Valores posibles:

1: DNI
2: Pasaporte
3: CUIT (sólo para Organization)
4: CUIL

ver servicio partyIdentificationType/all

999: el tipo de identificación es requerido.

identifierString

Número de documento o identificación

NOTA: en el caso de CUIT o CUIL informar sin guiones (ej: 30505817423)

SI

"13308913",


999: el número de identificación es requerido.

partyRoleAssignment (asignación de tipo de cliente) 

  • para clientes nuevos: toma el configurado por default (property: Código de tipo de cliente por defecto) o el que venga informado en el request 
  • para clientes ya existentes: no se actualiza el partyRole (venga o no informado en el request de creación del documento)

partyRole

String Código del tipo de clienteNO

"partyRoleAssignment": [{

"partyRole": "EMPLE"}

],  

Puede ser una lista de tipo de clientes (debe ser uno de los códigos habilitados como Tipo de cliente en BRIDGE)


partyContactMethods (direcciones del cliente). Requerido

  • para clientes nuevos: se valida que venga informado al menos un método de contacto y se crean los registros de partyContactMethod
  • para clientes existentes: se validará si en el request viene algún método de contacto con principalForBilling/principalForDelivery = true
      - SI: se busca el método de contacto actual del cliente que tenga  principalForBilling/principalForDelivery = true y se setea a false.
      - Continua con creación/actualización métodos de contacto (si no existe se crea, si existe se actualiza. Validando por name del partyContactMethod)
    para clientes ya existentes: 

nameStringNombre del método de contactoSI

"Facturacion"

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.firstLineStringCalle y númeroSI

"Av. del Libertador 6000"

1003: la dirección es requerida.

address.secondLineStringOtra infoNO"Piso 10"

adress.betweenStreets  StringEntre CallesNO

address.cityCodeStringCiudadSIMUN. Importante: código del listado de ciudades existentes, ver servicio city/all1004: la ciudad es requerida.

address.stateCodeStringProvinciaSI"BSAS". Importante: código del listado de provincias existentes, ver servicio state/all1005: la provincia es requerida.

address.countryCodeStringPaisSI"ARG". Importante: código del listado de países existentes, ver servicio country/all1006: el país es requerido.


emailAddressStringEmail asociado a ese método de contactoSISe puede poner el principal si no es diferente1007: el correo electrónico en el método de contacto, es requerido.

telephone.countryCodeStringcódigo de PaísNO541008: el código de país del teléfono es requerido.

telephone.areaCodeStringcódigo de áreaNO111009: el código de área del teléfono es requerido.

telephone.telephoneNumberStringnúmero de teléfonoSI366377771010: el número de teléfono es requerido.

principalForDelivery

Boolean
NOOpcional: 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.



principalForBillingBoolean
NOOpcional: 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ónNO 

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:

  • para nuevos clientes del tipo empresa se valida que venga informado y se crean los registros de taxRegistrationTaxType
  • para clientes ya existentes: 
    • Se dejará como opcional (siempre y cuando exista el cliente)
    • Si vienen informadas no se actualizarán 

aliqEffectiveDateDateFecha 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 informarNO2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss

aliqExpirationDateDateFecha 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 informarNO2020-07-31 08:51:00 Formato: yyyy-MM-dd HH:mm:ss

aliquotNumberAlícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informarNO4.00

inscEffectiveDateDate

Fecha de inicio de vigencia de la condición fiscal informada

NOTA: considerar que BRIDGE valida la vigencia en la facturación

SI2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss

inscExpirationDateDate

Fecha de fin de vigencia de la condición fiscal informada

NOTA: considerar que BRIDGE valida la vigencia en la facturación

SI2030-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss

taxJurisdictionCodeString

Código de la jurisdicción


SIver servicio taxJurisdiction/all

taxTypeCodeStringCódigo del tipo de impuestoSI

Valores posibles:

  • IB
  • IVA
  • MNC


taxCategoryCodeStringCódigo de la categoría impositiva (de IVA o de IB)SIver servicio taxJurisdictionTaxType/all

nameStringNombre de la razón social y tipo de impuesto (es descriptivo del registro)SIIBM - IVA

numberStringNúmero de la condición fiscal informada (CUIT o Nro de Ingresos Brutos para ARG, sin guiones)SI30663205621
documents (Grupo de documentos). Debe haber al menos un documento


externalDocumentNumberStringCódigo del documento u orden dentro del listado SI

"123456789"

NOTA: debe ser único dentro del grupo de documentos

994: El externalDocumentNumber no puede repetirse dentro del grupo


manualDiscountAmountNumberImporte de descuento del documentoNO

NOTA: el total de cada documento o pedido no puede ser menor a 0.

Este total se calcula sumando todos los montos netos de cada artículo - el monto de descuento a nivel pedido.



notesStringComentarios o notas sobre el documentoNO"Receta de OSDE"


externalSellerNameString

Nombre del vendedor o del usuario que genera la comanda en el sistema externo

(no tendrá validación ya que no es un usuario Bridge)

NO"Juan Perez"a partir de v7.9.7


externalTerminalString

Código de terminal del sistema externo que  informa la comanda

(no tendrá validación)

NO"101"a partir de v7.9.7


netAmountnumberMonto del pedido (no se harían validaciones, sino que seria lo informado por el sistema externo) NO15000.00a partir de v7.9.7


documentsQtyintegerCantidad de documentos enviado en el grupo (no tendrá validación) NO3a partir de v7.9.7


documentAdditionalInfo 

[{"key": "", "value": "" }]

array

Datos de receta (afiliado, OS, etc) a nivel documento dentro de un pedido (no en la cabecera)

  • key: se enviaría el campo (ejemplo "NRO_AFILIADO")
  • value: se enviaría el valor que tomará ese campo  (ejemplo: "123023")

Lista de valores posibles:

  • FECHA_EMISION
  • NRO_AFILIADO
  • OBRA_SOCIAL
  • PLAN
  • MATRICULA_MEDICO
  • NOMBRE_MEDICO
  • NRO_RECETA
  • VENCIMIENTO_RECETA
NOdocumentAdditionalInfo 

[{"key": "NRO_AFILIADO", "value": "123456"},

{key": "OBRA_SOCIAL", "value": "OSDE"}, 

{key": "PLAN", "value": "310"},

{key": "NRO_AFILIADO", "value": "30212350310"}

]

a partir de v7.9.7


allowChangebooleanIndicador si el documento/receta puede o no ser modificado (ej: no admite surtido parcial)NOdefault: truea partir de v7.9.7

items (Lista de artículos de cada documento) 

NOTAS:

  • SERIE: 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 facturar una unidad con su serie

itemCodeStringSKU del productoSI

"PESABLE123",

ver servicio item/all o /item/[código]

999: no se encontró el producto con código [Código del item]


barcodeStringCódigo de barras del artículoNO

"77998866"

NOTA: Es un dato opcional. Si viene informado se debe considerar que es el sku-barcode (debe existir esa relación) y debe encontrarse definido en BRIDGE como alias habilitado.

999: El barcode [Código de barras] para el artículo [Código del item] no existe.

descriptionStringDescripción o nombre del producto

NO

(opcional) Si viene informado se toma ese valor, sino el del maestro

"Artículo pesable"

NOTA: En el caso de que no venga informado y se informó un código de barras toma  la descripción del código de barras, sino toma la descripción del item definido en el  maestro de items. 


locationCodeStringCódigo de depósito desde donde saldrá el stockNO

"DEP1"

ver servicio location/all

999: el artículo no tiene depósito asociado

Si no se informa el depósito, toma el asignado como default del ítem


orderedQtyNumberCantidad 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

Del mismo modo si el item se vende por magnitud (peso, longitud, etc) 

999: la cantidad pedida es obligatoria.

999: El artículo no admite cantidad mayor a 1 por ser pesable


unitsNumber Decimal

Unidades asociadas a la presentación (código de barras) 

Se multiplica "units" por "orderedQty"


NO

2

Campo opcional. Por defecto toma el valor = 1.

NOTAS: 

  • Sólo se considera si se envío el campo "barcode")
  • Si se envió se valida con el valor definido en el maestro de códigos de barra (ABM de Códigos de barras, campo "unidades") 
999: La cantidad de unidades para el barcode [Código de barras]  no coincide.
 

magnitudeNumber DecimalMagnitud (cuando el artículo requiere magnitud, por ejemplo peso, largo, etc) NO

1.455

Campo opcional.

NOTA: 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.)

  • Si el articulo se vende por magnitud ES un dato requerido

999: El articulo requiere magnitud.

999: El artículo no admite cantidad mayor a 1 por ser pesable


packagePriceBoolean

Indicador si el precio enviado es por paquete o unitario

NO

Se asume false si no se envía

  • packagePrice = true (considera que el "unitPrice" informado corresponde al precio del paquete/bulto y no lo multiplicará por las units) 
  • packagePrice = false (considera que el "unitPrice" informado es unitario y para guardarlo se deberá calcular multiplicado las "units")


unitPriceNumberPrecio unitarioSI300999: el precio unitario es requerido.

otherUnitOfMeasureCodeStringCódigo de unidad de medida equivalenteNO

"Bolsa"

NOTA: Debe ser uno de los códigos de unidades de medida existente en BRIDGE y debe estar asociada al item

999: El artículo no posee la unidad de medida: [Código de unidad de medida] asociada y habilitada.

serieStringNro de serie del artículoNO

"12345678"

NOTA: Si es enviado, tiene que ser un nro de serie existente para el item y contar con stock 

  • Es requerido si el item se encuentra definido como "Requiere nro de serie"

999: Debe especificarse numero de serie para el artículo [Código del item] 

999: No se encontró la serie  [Código de serie] para el item [Código del item] 


notesStringNota o comentario adicional del artículoNO 

"Requiere datos adicionales"




lotNumber

string

Nro de lote

NO "A123"a partir de v7.9.7

trace

string

Nro de traza

NO

"123654"

priceModifier : descuento otorgado al artículo (es único) 

NOTA: el monto de descuento no puede ser superior al monto total del artículo (Cantidad solicitada x precio unitario) 

Las variantes del cálculo del monto dependerá del artículo y sus características:

  • orderedQty x unitPrice (se considera otros escenarios donde exista packagePrice ó otherUnitOfMeasure) 
  • orderedfQty x magnitude x unitPrice (si es vendido por magnitud) 
  • orderedQty x unitPrice x units (si fue enviado el bardcode) 

En todos estos escenarios se le restará el descuento. Ese monto neto por cada item debe ser mayor o igual a 0.


amountNumberMonto de descuentoSI (si es informada la línea)5999: si informa un descuento, debe informar el monto.

reasonTextStringRazón del descuentoNOOferta del día



Respuesta del servicio: 

response
{
    "ack": 0,
    "message": "El grupo de facturación se ha ingresado con éxito.",
    "internalNumber": "bridge000001000012"
}


  • 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 lista de documentos asignado por Bridge.


 El nro interno (internalNumber) que se informa en la respuesta será el que se asocie al grupo de documentos recibidos. Este se conformará con la cadena de caracteres "bridge"+ 12 dígitos:

  • 6 para el código de tienda (completado con ceros a la izquierda) 
  • 6 para el nro secuencial (completado con ceros a la izquierda) 
  • Ejemplo:
    • "internalNumber": "bridge000001000012"
      • Código dela tienda: 1
      • Nro secuencial para la tienda: 12




Validaciones sobre el stock 

Configuraciones disponibles y validaciones


Configuración del sistema

Validaciones aplicadas
1

Nombre de la propiedad:"Admite crear grupos de facturación sin stock", 

Descripción: "Admite crear grupos de facturación sin stock o no"

  • Si la configuración "Admite crear grupos de facturación sin stock"= NO

Al recibir un grupo de documentos a facturar (billOrderGroup) se valida stock de los productos (solo aquellos que son stockItem y del tipo NORM)

  • Sumariza las cantidades solicitadas de los artículos que apliquen a control de stock (para todos los documentos)
  • Considera agruparlos por articulo y depósito
  • Se valida con las cantidades disponibles de inventario menos las unidades reservadas (itemInventory)
  • En caso de que alguno de los items no cumpla con el stock teórico se responderá con un mensaje de error y no se creará el grupo de documentos

Respuesta de error: "No hay suficiente stock para el item [Código del item] 


  • Si la configuración "Admite crear grupos de facturación sin stock" = SI, no se valida stock de los artículos 
2

Nombre de la propiedad: "Reserva stock sin considerar flag de requiere reserva para itemType normal"

Descripción: "Indica si reserva stock sin considerar flag de requiere reserva para itemType normal."

Si la config "Reserva stock sin considerar flag de requiere reserva para itemType normal"= SI, reserva para todo item del tipo NORM (sin considerar que tenga el indicador de "Requiere reserva activo") 


Si la config "Reserva stock sin considerar flag de requiere reserva para itemType normal"= NO, reserva sólo sobre aquellos que tengan el indicador de "Requiere reserva activo"

Validación sobre items que requieren serie

  • Si el item se encuentra definido como "Requiere serie"
    • se valida que venga informado en el request junto con los datos del item
    • si viene informado:
      • Se valida que este definido en la lista de items/series (serializedUnit) y tiene que tener stock (cantidad actual menos la reservada mayor a 0)
    • si no viene informado, se informará con un error y no se creará el grupo de documentos 

Respuesta de error: "Debe especificarse número de serie para el artículo [Código del item] 

  • Sem rótulos