Skip to content
APLIN Help Center home
APLIN Help Center home

Nos integramos con tu ERP para almacenes que usan Aplin OS

La integración con ERPs se lleva por medio de un intercambio de APIs, algunos endpoints deben ser provistos por el ERP, y otros leídos por el ERP. APLIN OS es un sistema de gestión de almacén y es la fuente de verdad de dónde están los productos y cuánto inventario hay.

¿Quién lleva las ubicaciones?

Esta función sólo está disponible con uso in-house de APLIN OS.

Nuestra sugerencia es que el ERP no lleve las posiciones dentro del almacén (eg, A-1-1-1), únicamente la cantidad de piezas disponibles, bloqueadas, en cuarentena... por almacén.

La estrategia de sincronización descrita en este documento es vía polling. Es decir, el ERP abrirá endpoints para que preguntemos cada cierto tiempo qué recursos son nuevos para crearlos, o han cambiado para actualizarlos. Y APLIN OS hará lo mismo. APLIN OS integrará los endpoints del ERP para traer esta información, y el ERP integrará los endpoints de APLIN OS respectivamente.

La comunicación se deberá llevar por medio de una API en formato JSON.

La integración pretende sincronizar:

  • Artículos: Catálogo de productos, con descripción, medidas, etc.

  • Inventarios: Cuánto hay de cada producto y en cada estado.

  • Ingresos: Artículos y cantidades de cada uno a recibir.

  • Ordenes: Artículos y cantidades de cada uno por enviar.

  • Devoluciones: Artículos y cantidades retornadas a almacén, la orden y guía de retorno.

  • ⚠️ No recomendado  - Piezas: (Solo disponible en uso in-house) En donde está y qué estado tiene cada pieza del inventario.

Quién crea, o captura del otro sistema Artículos, Ingresos y Órdenes depende, no hay una respuesta correcta o incorrecta.

Es decir, permite una integración flexible donde podemos sincronizar, por ejemplo, el ERP para que capture de APLIN OS las órdenes, que APLIN OS capture del ERP los ingresos, y los artículos se creen por separado en ambos sistemas.

¿Qué pasa si hay responsabilidades cruzadas?

No deberá haber responsabilidades cruzadas de creación de recursos en Artículos. Los artículos deberán crearse en APLIN OS, en el ERP, o en ambos por separado. Aunque deberán estar relacionados por un SKU compartido y único entre productos.

Sin embargo, existen escenarios en donde APLIN OS crea ciertas ordenes, e ingresos, y el ERP crea otras. En ese caso es importante que el ERP exponga claramente un parámetro de qué ordenes, o ingresos crear e idealmente en los endpoints solo comparta los que si deban crearse.

Intercambio de información

Pull (Lectura) de información del ERP hacia APLIN OS

Para que APLIN OS cree la información del ERP de Ingresos, Ordenes y Artículos; el ERP debe tener endpoints que permitan obtener la información filtrando por fecha de creación:

  • GET /inbounds

  • GET /orders

  • GET /articles

Los endpoints podrán tener cualquier URL pero deberán tener un cuerpo que pueda relacionarse con los campos que se detallan a continuación.

Para que APLIN pueda actualizar información ya creada usando la información del ERP necesita además proveer la capacidad de filtrar por fecha de actualización a la información.

¡No toda la información se actualizará!

No siempre podrá actualizarse información ya creada en APLIN OS.

Es responsabilidad del ERP consultar la API de APLIN OS de los recursos para saber cuándo se pueden cambiar y cuándo no. Si un recurso no puede cambiarse por integración deberá ser modificado directamente en la plataforma.

Pull de información de APLIN OS hacia el ERP

Para que el ERP pueda mantener sincronizada la información en base al avance de los procesos de almacén APLIN OS provee los siguientes endpoints:

  • GET /inventory

  • GET /inbounds

  • GET /orders

  • GET /articles

  • GET /items

Los endpoints que APLIN OS provee pueden filtrarse por fecha de creación, actualización y estatus.

¿Tu operación tiene múltiples almacenes y debe tener estados de tránsito?

Para ello, estableceremos un parámetro en las órdenes e ingresos que hará lo siguiente:

  • Al enviar una orden, no se descontará el stock si no que se cambiara a una ubicación de tránsito.

  • Al recibir un ingreso, no se creará nuevo inventario si no que se descontará de la ubicación de tránsito.

Sincronización de órdenes

Proceso funcional

  1. El ERP tiene un endpoint con las órdenes por surtir.

  2. El endpoint indica el tipo de orden (eg, dropship o mayoreo) y el canal (eg, amazon).

  3. APLIN OS crea esas órdenes y las libera automáticamente * si hay stock, de lo contrario permanecen abiertas y se liberan en cuanto tengan stock disponible.

  4. Desde el Dashboard de APLIN OS, un Supervisor realiza la asignación para surtido.

  5. Un Operador surte las piezas de las órdenes y las órdenes cambian a Surtido una vez que estén concluidas de surtir.

  6. El ERP nos pregunta por el estado de las órdenes y las marca enviadas cuando se envíen en APLIN OS.

* APLIN OS también podrá apartar el inventario de las órdenes, mantenerlas abiertas, hasta que el ERP indique que deben ser procesadas - por ejemplo al ser pagadas -.

Modificaciones en las salidas:

  • Preguntaremos constántemente al ERP sobre las ventas.

  • Si una de las líneas cambia o la orden se cancela, antes de que se se inicie el surtido se refleja en el sistema. En caso de que se modifique posterior al surtido solo podrá haber cambios negativos (quitar piezas, líneas o cancelación completa).

  • Las piezas retiradas de las órdenes serán marcadas para retorno a almacén por un operador.

  • El ERP deberá bloquear la modificación positivo (eg, agregar líneas o piezas) en órdenes que ya hayan iniciado su asignación.

Endpoint GET Órdenes del ERP

Filtros

APLIN OS necesitará filtrar órdenes por:

  • Número de orden.

  • Estatus.

  • Fecha de última actualización.

Campos

Campo

Descripción

order.orderNumber

Cadena de texto que servirá como identificador de la orden

order.type

Identificador del tipo de orden necesario para su correcto procesamiento (Dropship, retail, etc.)

order.buyer

Objeto que debe contar con los siguientes campos:

  • name: Nombre del comprador

  • lastName: Apellido del comprador

  • email: Correo electrónico del comprador para contacto (opcional)

  • phone: Teléfono del comprador para contacto (opcional)

order.lines

Array de objetos. Cada uno de los objetos debe contener la siguiente información respecto a los artículos que forman parte de la orden:

  • sku: Identificador del artículo

  • quantity: Cantidad de piezas dentro de la orden

order.address

Objeto que debe contar con los siguientes campos:

  • name: Nombre de la persona que recibirá la orden

  • lastName: Apellido de la persona que recibirá la orden

  • phone: Teléfono del destinatario de la orden para contacto

  • street1: Dirección de entrega de la orden

  • street2: Campo opcional  de complemento para dirección de entrega de la orden

  • reference: Campo opcional de detalles o indicaciones para identificación de dirección de entrega

  • country: País destino de la orden

  • city: Ciudad destino de la orden

  • company: Nombre de empresa de destino (opcional)

  • state: Estado destino de la orden

  • zip: Código postal destino de la orden

order.created

Fecha y hora de creación de la orden

order.updated

Fecha y hora de la última actualización de la orden. Es útil para saber si se debe reflejar alguna actualización en las órdenes registradas

order.skip

Bool que servirá para identificar si la creación de una orden debe omitirse. Al tener este valor en true, la orden no será creada ni verá sus actualizaciones reflejadas en sistema

Sincronización de ingresos

Proceso funcional

  1. Vamos a leer un endpoint que nos dice los ingresos por arribar.

  2. El endpoint indica el tipo de ingreso.

  3. En el dashboard de APLIN OS un supervisor va a marcarlos como Arribados.

  4. Esto cambia el estado de Pendiente a En proceso: Arribado y disponibiliza el ingreso para seleccionar en la handheld.

  5. Un operador selecciona el ingreso en la handheld y inicia a contar las piezas.

  6. Cada cierto tiempo, el ERP pregunta a APLIN OS los ingresos por estado para actualizar el estado del ingreso.

  7. Si el ingreso se concluyó de contar con faltantes, el estado cambia a Diferencia y esta es aprobada en el Dashboard por un supervisor.

  8. Si el ingreso terminó de contar sin faltantes, o se aprobó la diferencia este cambia a un estado de Ingresado.

Modificaciones al ingreso:

  1. Preguntaremos constántemente al ERP los cambios de los ingresos no finalizados, y en caso de que se agregue o elimine una línea, o se cancele el ingreso editaremos la cantidad esperada de cada linea del ingreso en APLIN OS para reflejar el movimiento.

Endpoint GET Ingresos del ERP

Filtros

APLIN OS necesitará filtrar ingresos por:

  • Número de orden.

  • Estatus.

  • Fecha de última actualización.

Campos

Campo

Descripción

inbound.inboundNumber

Cadena de texto que servirá como identificador del ingreso

inbound.type

Identificador del tipo de ingreso (Nuevo ingreso, Logística inversa, material de empaque, fiscal, etc.)

inbound.lines

Array de objetos. Cada uno de los objetos debe contener la siguiente información respecto a los artículos que forman parte del ingreso:

  • sku: Identificador del artículo

  • quantity: Cantidad de piezas reportadas dentro del ingreso

  • batch: Identificador del lote al que pertenecen los productos.

inbound.warehouse

Objeto que incluye el nombre del almacén en donde se recibirá el ingreso.

inbound.supplier

Campo opcional que consiste en una cadena de texto que servirá como identificador del proveedor relacionado al ingreso

inbound.created

Fecha y hora de creación del ingreso

inbound.updated

Fecha y hora de la última actualización del ingreso. Es útil para saber si se debe reflejar alguna actualización en los ingresos registrados

inbound.skip

Bool que servirá para identificar si la creación de un ingreso debe omitirse. Al tener este valor en true, el ingreso no será creado ni verá sus actualizaciones reflejadas en sistema

Sincronización de artículos

Proceso funcional

  1. El ERP como catálogo maestro de productos tiene un endpoint en el cual consultar los productos, sus contenidos por caja, códigos de barras...

  2. APLIN OS preguntará cada cierto tiempo al ERP por su catálogo y validará que no falte ningún producto, actualizará los productos cambiados y creará los nuevos.

  3. Los únicos datos acerca del catálogo que se crearán en APLIN OS son las estructuras de los Kits, que al igual que las ubicaciones, zonas... son datos de configuración que cambian poco.

Un artículo se compone de

  1. Identificación: Como lo reconocemos con una handeld → SKU y Código de Barras.

  2. Tipo: Si el producto es un kit, un bundle, o un producto de stock.

  3. Unidad de Inventario: En qué unidad se lleva el inventaro de ese producto → Presentación, Contenido, y Unidad.

  4. Descripción: Qué producto es → Familia, Descripción y Variante.

  5. Nombre. El nombre del producto se forma automáticamente en APLIN OS concatenando la Unidad de Inventario y la Descripción.

  6. Empaque Maestro: Si el producto viene en un empaque maestro, podemos usar este campo.

Cuando estamos integrados con el ERP, idealmente el ERP nos proporciona estos campos y APLIN OS crea el Nombre. Sin embargo, existe una modalidad no sugerida de uso, en el que el ERP nos da únicamente el Nombre y excluye la Unidad de Inventario, la Descripción y otros campos del producto.

Endpoint GET Articulos

Filtros

  1. Sku

  2. Última fecha de modificación

Campos

Campo

Descripción

article.sku

Cadena de texto que sirve como identificador del artículo para su creación en sistema.

Si el artículo tiene variantes no se considerará este campo y se tomará el SKU de la variación.

article.name

Cadena de texto que incluye el nombre del artículo, este será el nombre que aparecerá en los procesos del FSA. En caso de que este campo se encuentre vacío, el nombre del artículo se construirá concatenando los valores ingresados en los campos de unidad de inventario y descripción del artículo

article.category

Cadena de texto describiendo la familia o tipo de artículo que servirá para agruparlo dentro del sistema. Esta categoría deberá ser dada de alta con anticipación en el sistema

article.barcode

Cadena de texto opcional representando el código de barras relacionado al producto, este será el valor que servirá para identificar el artículo dentro del flujo de procesamiento de pedido en almacén. Este valor puede encontrarse vacío, pero será necesario tener activada la política “Conteo de piezas por foto” para la categoría logística del producto, de lo contrario los procesos del FSA que involucren este producto se encontrarán bloqueados.

article.inventoryUnit

Objeto que servirá como descripción de la unidad de inventario, la cual es la presentación del artículo que se contabilizará al recibir y será la unidad de venta:

  • presentation: Tipo de contenedor en el que se encuentra el producto (Caja, bolsa, botella, pieza, etc)

  • content: Contenido dentro de la presentación. Puede tratarse de cantidad de piezas o basarse en una unidad de medida (Piezas, litros, kilogramos, etc.)

  • unit: Unidad de medida utilizada en la presentación del producto

En caso de que el nombre del artículo no se incluya en la response del endpoint, el nombre será creado concatenando los valores de los campos inventoryUnit y description.

article.type

Indica si el producto es un kit, un bundle, o un producto de stock.

article.piecesPerBox

Cantidad de piezas por caja.

article.description

Objeto que describe el modelo y la línea de producto a la que pertenece el artículo, debe contener los siguientes campos:

  • articleFamily:  Indica el tipo de producto (Playera, vino, libro, etc.)

  • description: Modelo o línea del producto (Tapete de yoga o playera de Formula 1)

  • varlant: Cadena de texto opcional que permite diferenciar al artículo de otros con el mismo modelo (Tapete de yoga rosa o playera de Formula 1 roja)

En caso de que el nombre del artículo no se incluya en la response del endpoint, el nombre será creado concatenando los valores de los campos inventoryUnit y description.

El campo articleFamily

variations[]

Objeto opcional con información de la variación del producto (ej. talla, color)

  • id: Identificador de la variación

  • sku: SKU de la variación

  • type: Tipo de la variación (ej. talla, color)

  • value: Valor de la variación (ej. M/Azul, G/Rojo)

article.created

Fecha y hora de creación del artículo

article.updated

Fecha y hora de la última actualización del artículo. Es útil para saber si se debe reflejar alguna actualización en los artículos registrados

article.skip

Bool que servirá para identificar si la creación de un artículo debe omitirse. Al tener este valor en true, el artículo no será creado ni verá sus actualizaciones reflejadas en sistema

Endpoints ofrecidos por APLIN OS

APLIN OS cuenta con su propia API que permite a los usuarios consultar la información relacionada a sus órdenes, artículos e ingresos. Esta información puede ser utilizada como consulta general o para hacer integraciones a ERPs.

A continuación se describen a detalle algunos de los campos disponibles en la respuesta del API de APLIN OS.

Nuestra documentación completa está en Postman

Link a nuestra documentación API.

GET Ordenes - /orders

Campo

Descripción

id

Identificador de la orden dentro del sistema

source

Identificador del origen de la orden, en caso de que la orden se haya obtenido desde un marketplace, el nombre de la plataforma aparecerá en este campo.
En caso de que la orden haya sido creada desde APLIN OS, se mostrará el valor de Dashboard o API

buyer

Información del comprador de la orden incluyendo:

  • name: Nombre del comprador

  • lastName: Apellido del comprador

  • phone: Teléfono registrado del comprador

  • email: Correo electrónico registrado del comprador

created

Fecha de creación de la orden

organization

Objeto con los siguientes campos:

  • name: Nombre del cliente

address

Información de la dirección de entrega incluyendo:

  • name: Nombre del destinatario

  • lastName: Apellido del destinatario

  • phone: Teléfono del destinatario

  • street1: Primera línea de dirección destino

  • street2: Complemento de la línea de dirección destino

  • zip: Código postal de la dirección destino

  • country: País destino de la orden

  • state: Estado destino de la orden

  • city: Ciudad destino de la orden

  • phone: Teléfono registrado del destinatario de la orden

  • email: Correo electrónico del destinatario de la orden

  • reference: Referencia de la dirección de entrega

courier

Información de la paquetería asociada a la orden incluyendo:

  • code: Código para identificación del transporter en sistema

  • serviceCode: Código para identificación del tipo de servicio del transporter en sistema

  • serviceName: Indicador del nivel de servicio asociado a la orden

  • name: Identificador de la paquetería asociada a la orden

shipments

Array de objetos que permite consultar la información de los envios relacionadas a la orden incluyendo:

  • fileName: Nombre del archivo asociado a la guía en sistema

  • waybill: Código de rastreo asociado a la guía

  • generatedByPartner: Bool que permite identificar si la orden fue generada dentro del servicio de transporters de APLIN OS

  • fileUrl: Dirección URL para consulta y descarga de la guía

  • parcelId: Identificador de la caja relacionada a la guía

lines

Array de objetos que contiene el desglose de los productos y cantidades que forman parte de la orden incluyendo:

  • id: Identificador de la linea

  • quantity: Cantidad ordenada

  • bookedQuntity: Cantidad asignada a la orden

  • packedQuantity: Cantidad empacada

  • product: Objeto con la información del producto

  • id: Identificador del producto

  • sku: SKU del producto (si el producto cuenta con variaciones será null)

  • name: Nombre del producto

  • variation: Objeto con información de la variación del producto (ej. talla, color)

  • id: Identificador de la variación

  • sku: SKU de la variación

  • type: Tipo de la variación (ej. talla, color)

  • value: Valor de la variación (ej. M/Azul, G/Rojo)

isFulfillable

Indica si se cuenta con suficiente stock asignado para que la orden pueda ser procesada

status

Estatus en el que se encuentra la orden dentro del flujo de surtido

parcels

Array de objetos con la información de las cajas enviadas

  • id: Identificador de la caja

  • shipmentId: Identificador del envio asociado

  • weight: Peso de la caja

logs

Array de objetos con información de los eventos que suceden durante el proceso de fulfillment

  • eventType: Tipo del evento (ej. DELIVERED, PICKED, PACKED, etc)

  • details: Información adicional del evento

  • timestamp: Fecha y hora del evento

GET Inbounds - /inbounds

Campo

Descripción

inboundNumber

Identificador del ingreso dentro del sistema

supplier

Nombre del proveedor

source

Origen de la creación del ingreso, puede ser tanto “dashboard” como “api”

created

Fecha de creación del ingreso

organization

Objeto con información del cliente:

  • name: Nobre del cliente

type

Identificador del tipo de ingreso (Nuevo ingreso, Logística inversa, material de empaque, etc.)

status

Estatus operativo en el que se encuentra el ingreso

logs

Desglose de la fecha y hora del momento en el que el ingreso fue actualizando su estatus. Cada estatus incluye:

  • user: Usuario que realizó el movimiento de actualización

  • source: Puede ser “dashboard” si el cambio de estatus se hizo de forma manual o “system” si el estatus se actualizó de forma automática al terminar algún proceso de ingreso

  • timestamp: Marca temporal indicando la fecha y hora del cambio de estatus

Los diferentes estatus que se encuentran en este campo son:

  • created: Fecha de creación del ingreso

  • receptionDate: Fecha agendada de recepción del contenedor en almacén

  • receivedDate: Fecha real de recepción del contenedor en almacén

  • lastStatusUpdate: Ultimo registro de actualización del ingreso

  • closedDate: Fecha y hora de finalización del ingreso

lines

Array de objetos que contiene el desglose de los productos y cantidades reportadas que forman parte del ingreso incluyendo:

  • batchNumber: Identificador del lote registrado por el usuario asignado a la pieza

  • quantityDeclared: Cantidad de piezas reportadas dentro del ingreso

  • quantityReceived: Cantidad real de piezas recibidas en el ingreso

  • product: Objeto con la información del producto

  • id: Identificador del producto

  • sku: SKU del producto (si el producto cuenta con variaciones será null)

  • name: Nombre del producto

  • variation: Objeto con información de la variación del producto (ej. talla, color)

  • id: Identificador de la variación

  • sku: SKU de la variación

  • type: Tipo de la variación (ej. talla, color)

  • value: Valor de la variación (ej. M/Azul, G/Rojo)

GET Artículos - /articles

Campo

Descripción

sku

Identificador del producto dentro de sistema (Opcional, si el producto tiene variaciones el valor será null)

barcodes

Array de códigos de barras relacionados al producto, este valor es opcional

  • value: Valor del código de barras

  • isDefault: Boolean que indica si el codigo de barras es el default

levels

Array de objetos con información de los niveles de inventario

  • available: Cantidad disponible para venta

  • commited: Cantidad reservada para ordenes existentes

  • unavailable: Cantidad reservada a ordenes existentes

  • onHand: Cantidad total de articulos en el almacen

boxes (hay que borrar)

Cantidad de empaques en los que el producto se encuentra actualmente

supplier

Proovedor del producto

tags

Array de strings de las etiquetas del producto

brand

Marca del producto

description

Cadena de texto que describe el modelo y la línea de producto a la que pertenece el artículo

presentation

Contenedor, empaque o envase del producto en la que se cuenta el inventario.

content

Contenido (en numero) de la presentación con la que se cuenta el inventario.

unit

Unidad de medida del contenido de la presentación

category

Qué tipo de producto o familia es. Objeto

  • name: Nombre de la categoria

variations[]

Objeto con información de la variación del producto (ej. talla, color)

  • id: Identificador de la variación

  • sku: SKU de la variación

  • type: Tipo de la variación (ej. talla, color)

  • value: Valor de la variación (ej. M/Azul, G/Rojo)

name

Nombre del producto.

En caso de no ser proporcionado por el cliente, se formará al concatenar los valores registrados en los campos inventoryUnit y description