Informações - O que é OmniCommerce

Foi desenvolvido um novo motor logístico na plataforma LinxCommerce onde conta com serviços de maior performance, por exemplo ElasticSearch, conjunto de APIs.  

Além da nova tecnologia, o novo motor logístico faz com que clientes possam ter uma oferta omni no seu site, ofertando assim estoques não só do CD, mas também lojas físicas, franquias, etc. Sendo assim, é possível o cliente passar para uma oferta denominada de OmniCommerce

Além da nova tecnologia empregada e a mudança no modelo de oferta, também dispomos de um serviço de monitoria quanto as performances dos serviços empregados, assim como, monitoria de cliente a cliente que utiliza a oferta OmniCommerce.


Métodos para Integração no novo motor logístico

Para que haja integração com o novo motor logístico, abaixo listamos os métodos de maior atenção que divergem da integração atual para que passem a fazer a gestão das lojas, estoques em maior quantidade e performance, e a gestão de pedidos que passará a ser por entregas. 

1.1 Criação/Atualização de lojas (Locations) - Via Layer

Através do método SaveLocationSeller é possível criar/editar as locations.  

A terminologia por conter seller não remete propriamente a feature de Seller que a plataforma dispõe. O motivo maior desta terminologia tange a possibilidade de clientes utilizarem as locations como lojas e/ou franquias, na qual surge a necessidade que haja um split do pedido, e consequentemente, o split do pagamento para que as lojas/franquias correspondentes ao pedido já possam receber o respectivo valor diretamente na sua conta bancária cadastrada. 

Vale ressaltar que a manipulação é a mesma realizada pelo Admin: ou seja, os ajustes realizados são disseminados entre a API de Inventory e as estruturas de banco de dados do Commerce (sellers e warehouses). 

https://NomeDaLoja.layer.core.dcg.com.br/reference.html?url=/swagger.json#!/MultiSite/SaveLocationSeller 

 Os campos obrigatórios para esta integração são: 

"Name": "string", 
"LocationId": "string", 
"IsEnabled": "False", 
"City": "string", 
"State": "string", 
"PostalCode": "string", 
"AddressLine": "string", 
"AddressNumber": "string", 
"Neighbourhood": "string", 
"EMail": "string", 
"BusinessUnitID": 0,

O padrão das informações a serem inseridas segue os mesmos padrões já utilizados nos demais métodos da Layer seja para questão de datas e/ou valores fixos.   

1.2 - Manipulação de Estoques (Criação / Atualização)  - Métodos via API OmniCommerce: 

Em relação à alteração de posições de estoque, os endpoints são do novo serviço de inventory. Todas as chamadas executadas nesses métodos correspondem a recontagem. 

Para execução dos métodos abaixo, a autenticação passa pela geração de um token através do método abaixo: 

http://omnilite.layer.core-tst.dcg.com.br/v1/Security/API.svc/web/GenerateAccessToken 

Obs: para execução do método acima, a autenticação é através do mesmo usuário e senha do admin, contanto que esse usuário possui as permissões de administrador

Métodos na API do OmniCommerce para atualização de estoque: 

Swagger: https://api.linxcommerce.io/inventory/v1/swagger/index.html 

Endpoint PRD: https://api.linxcommerce.io 

Endpoint de Staging servirá para ambientes de homologação (HLG): api-stg.linxcommerce.io 

{{Endpoint}}/inventory/v1/stocks 

{ 
  "sku": "string", 
  "location": { 
    "locationId": "string", 
    "totalQuantity": 0, 
    "movementType": "Recount", 
    "threshold": { 
      "minimum": 0, 
      "disableOnMinimum": true 
    }, 
    "backorder": { 
      "enabled": true, 
      "threshold": 0 
    }, 
    "preorder": { 
      "enabled": true, 
      "threshold": 0, 
      "limitDate": "2023-02-24T17:10:19.356Z" 
    }, 
    "status": { 
      "disable": true, 
      "disableFrom": "2023-02-24T17:10:19.356Z", 
      "disableTo": "2023-02-24T17:10:19.356Z", 
      "finishedReplenishment": false 
    }, 
    "handlingDays": { 
      "inStock": 0, 
      "outOfStock": 0 
    } 
  } 
} 

{{Endpoint}} /inventory/v1/stocks/batch 

[ 
  { 
    "sku": "string", 
    "location": { 
      "locationId": "string", 
      "totalQuantity": 0, 
      "movementType": "Recount", 
      "threshold": { 
        "minimum": 0, 
        "disableOnMinimum": true 
      }, 
      "backorder": { 
        "enabled": true, 
        "threshold": 0 
      }, 
      "preorder": { 
        "enabled": true, 
        "threshold": 0, 
        "limitDate": "2023-03-09T14:39:21.492Z" 
      }, 
      "status": { 
        "disable": true, 
        "disableFrom": "2023-03-09T14:39:21.492Z", 
        "disableTo": "2023-03-09T14:39:21.492Z", 
        "finishedReplenishment": false 
      }, 
      "handlingDays": { 
        "inStock": 0, 
        "outOfStock": 0 
      } 
    } 
  } 
] 

2 - Busca de Pedidos na fila(GetOrder) 

Em relação ao consumo dos pedidos, o que muda principalmente é que a estrutura utiliza o sistema de fulfillments (entregas). 

Além do mais, com o OmniCommerce temos a possibilidade de termos um pedido com várias entregas, ou então, cada entrega tornar-se um pedido, o que é denominado como split de pedidos. 

{{EndPointLayer}}/v1/Queue/API.svc/web/SearchQueueItems 

Pedidos com split de pedidos: temos que identificar o tipo do retorno do pedido após execução do método SearchQueueItems, para que aí então possamos buscar as informações dos pedidos através de métodos específicos.  

Quando na propriedade EntityKeyName retornar o valor OrderGroupNumber deveremos utilizar o método {{EndPointLayer}}/v1/Sales/API.svc/web/GetOrderGroupByNumber para buscar as informações do pedido: 


Já quando retornar o valor OrderGroupID na propriedade EntityKeyName, deveremos utilizar o método {{EndPointLayer}}/v1/Sales/API.svc/web/GetOrderGroup: 

Pedidos com mais de uma entrega: Pedidos com N entregas caracterizam-se em pedidos que não há rateio entre as locations engajadas no fechamento do pedido. Sendo assim, todas as entregas são relacionadas ao mesmo pedido, ficando assim: 


Quando necessário consumir um pedido deste cenário, via layer, poderemos identificá-los da seguinte forma quando retornado para consumo no método SearchQueueItems. 

Quando na propriedade EntityKeyName retornar o valor OrderNumber deveremos utilizar o método {{EndPointLayer}}/v1/Sales/API.svc/web/GetOrderByNumber para buscar as informações do pedido. 

Já quando retornar o valor OrderID na propriedade EntityKeyName, deveremos utilizar o método {{EndPointLayer}}/v1/Sales/API.svc/web/GetOrder: 

Coletar o conteúdo da propriedade Orders.Fulfillments.FulfillmentID, e utilizar o método http://omnilite.layer.core-tst.dcg.com.br/v1/Fulfillment/API.svc/web/GetFulfillment para obter os dados específicos da entrega. Neste retorno será listado os itens que correspondem a entrega em questão, assim como, os valores, transportadora responsável, e até mesmo o status da entrega em específica. 

3 - Atualização de Pedidos (UpdateOrder) 

Para atualizar os pedidos, utilizamos o método v1/Sales/API.svc/web/UpdateOrder, onde através dele serão inseridas as informações de Nota Fiscal e Código de rastreio. 

WorkflowTypes permitidos: 

ConfirmPayment, Invoiced, Shipped, Delivered, Canceled, PickupReady, PickupFail. 

{ 

  "OrderID": "string", 

  "OrderNumber": "string", 

  "WorkflowType": "string", 

  "Payments": [ 

    { 

      "TransactionID": "string", 

      "Amount": 0 

    } 

  ], 

  "Invoice": { 

    "OrderInvoiceID": "string", 

    "FulfillmentID": "string", 

    "Code": "string", 

    "Url": "string", 

    "IsIssued": true, 

    "Series": "string", 

    "Number": "string", 

    "CFOP": "string", 

    "XML": "string", 

    "InvoicePdf": "string", 

    "Observation": "string", 

    "Operation": "string", 

    "ProcessedAt": "2023-03-15T17:43:15.983Z", 

    "UpdatedAt": "2023-03-15T17:43:15.983Z", 

    "IssuedAt": "2023-03-15T17:43:15.983Z", 

    "CreatedAt": "2023-03-15T17:43:15.983Z", 

    "ID": "string" 

  }, 

  "Shipment": { 

    "TrackingNumber": "string", 

    "TrackingUrl": "string" 

  }, 

  "ValidateCompleteWorkflow": true 

} 


4 - Atualização de entrega (UpdateFulfillment) 

Método em processo de criação. Método servirá para atualizar cada uma das entregas. 

{ 

"FulfillmentNumber": "string", 

"FulfillmentID": "string", 

"WorkflowType": "string", 

"Invoice": { 

"OrderInvoiceID": "string", 

"Code": "string", 

"Url": "string", 

"IsIssued": "bool", 

"Series": "string", 

"Number": "string", 

"CFOP": "string", 

"XML": "string", 

"InvoicePdf": "string", 

"Observation": "string", 

"Operation": "string", 

"ProcessedAt": DateTime, 

"UpdatedAt": DateTime, 

"IssuedAt": DateTime, 

"CreatedAt": DateTime, 

"ID": "string" 

}, 

"Shipment": { 

"TrackingNumber": "string", 

"TrackingUrl": "string", 

"Volumes": [{ 

"PackageNumber": "string", 

"TrackingNumber": "string", 

"TrackingUrl": "string", 

"PackageInfo": { 

"Description": "string", 

"Weight": decimal, 

"Height": decimal, 

"Width": decimal, 

"Length": decimal, 

"PackageType": "string", 

"InsuranceAmount": decimal, 

"Source": "string", 

"items": [{ 

"sku": "SKU1", 

"IntegrationID": "string" 

"quantity": 1 

}] 

} 

}] 

} 

} 

 

5 - Tratamento / Exceção de entregas. (EM BREVE) 

6 - Coleção Postman: 

https://api.postman.com/collections/2169989-3d1709da-6914-4d8d-8c9d-ffe4894fd586?access_key=PMAT-01GVKGP6JVVPMSS7NCDS9VKFS9 

 

Observação 1: Caso seja necessária alguma informação que ainda não dispomos nos métodos de quem for consumir os métodos listados acima, basta entrar em contato com os times de produto e tecnologia e avaliaremos a implementação dos ajustes que forem necessários. 

Observação 2: Caso haja alguma propriedade em tela que não exista no método, poderão acionar-nos para adicionarmos alguma propriedade faltante. 

  • Sem rótulos