Páginas filhas
  • APIs Integrações - Pedido

Objetivo

Este documento tem como objetivo explicar o funcionamento da integração do Pedido de Venda.

Pré-Requisitos e Restrições

  • Necessário a instalação do  serviço winthor-pedido-venda
  • Caso o atributo "seller" não seja enviado na requisição, a API consultará o RCA definido no parâmetro "4012 - Código do RCA para cadastro de clientes na Ciashop" da rotina 132- Parâmetros da Presidência.
  • A região padrão de preço deverá ser informada na opção 4257-CODREGIAOPRECOCIASHOP da rotina 132- Parâmetros da Presidência.
  • A precificação deverá ser realizada por Filial no parâmetro 2277 - Tipo de precificação selecionando o tipo de precificação conforme necessidade.
  • A tabela PCLOGPEDIDOAPI, é responsável por guardar os retornos dos pedidos importados via integração, sendo Operação (I - inclusão, A - alteração, C - cancelamento) e Status (A - Aceito, R - Rejeitado, P - Processando).
  • Através da lista de pedidos é possível pesquisar por Filial ou Multifiliais (separado por vírgula) para obter os dados.
  • Os dados de Razão social do intermediador e CNPJ do intermediador serão representados pelos campos, "intermediaryCompanyName" e  "idIntermediaryEmployer" respectivamente.
  • Considera-se na totalização do pedido frete e outras despesas.
  • Ao inserir um pedido através da API, o campo "PCPEDI.PBASERCA" gravará de acordo com o campo “PCPEDI.PTABELA”, não é necessário enviá-lo pela API.
  • Será persistidos os dados de cartão que a operadora do cartão retorna como o NSU e DTNSU (data de aprovação do cartão).
  • No envio do JSON deve-se enviar no campo productSKUERPReferenceKey o código auxiliar seguido do código do produto. Exemplo: 100-1 
  • Ao inserir um pedido, deverá enviar a informação do atributo  acceptOrderWithoutTax. As figuras tributárias consideradas são referente a rotina 271 ou rotina 514 em caso de tributação por estado (parâmetro 1092 - Usar tributação por estado (UF), rotina 132) para o item. Caso não tenha a informação da figura tributária em alguma das rotinas e o atributo "acceptOrderWithoutTax" esteja sendo enviado com "false" , o pedido será rejeitado, do contrário se o parâmetro não for enviado, ou for enviado como "true", mesmo que não haja tributação vinculada o pedido será registrado, porém com o valor "0" na coluna PCPEDI.CODST e demais colunas de imposto.
  • Caso o processo de desconto por item seja utilizado, o valor do desconto deve ser informado no campo listOfOrderItem.discountValue no body do json de envio do pedido. O campo sellPrice deve conter o valor correspondente ao valor tabela - valor do desconto. O preço tabela corresponderá ao preço de venda + o valor do desconto, e o percentual do desconto será calculado automaticamente. É necessário que haja uma política de desconto cadastrada na Rotina 561 para o conjunto de dados que serão enviados, de forma a controlar o percentual de desconto aplicado. Caso não haja política cadastrada, o pedido será integrado com a posição "Bloqueado".
  • Ainda sobre o processo de desconto por item, a API está validando o parâmetro 1463 - % Máximo de desconto Médio nos Orçamentos e Pedidos de Venda da Rotina 132, de forma que mesmo havendo política de desconto que permita o percentual informado, o pedido não será integrado se o percentual for superior ao informado no parâmetro. Caso o parâmetro esteja com o valor "0", essa validação será desconsiderada e o pedido será integrado bloqueado.
  • Ao enviar os atributos "deductionsCmv": {"discountsCofins": 0,"discountsIcms":  0,"discountsPis": 0}  no corpo da requisição, será reduzido o valor do CMV considerando os descontos de: PIS, COFINS e ISENÇÃO de ICMS  (Rotina 514- Figura triutária) os valores enviados serão apenas gravados. Esses mesmos dados serão retornados na API de consulta de pedido.
  • Sugestão do time de produto modificar o parâmetro(4591) para não permitir alterar o Código Auxiliar ver Link DDRET-6481 DT Criar Parâmetro para Edição de CODAUXILIAR
  • Para o processo de múltiplas cobranças, o mesmo só poderá ser utilizado caso o parâmetro 3968 - Permite incluir multiplas cobranças? da Rotina 132 esteja marcado como "Sim". Para cobranças do tipo cartão, o envio do campo "nsu" é obrigatório.
  • Ao enviar um item no pedido que seja bonificado/brinde o campo "gift" precisa está como "true", além disso o parâmetro 3045 da rotina 132 deve esta liberado (marcado igual a Sim).
  • Ao inserir um pedido, é possível passar o parâmetro booleano "acceptSearchAutomaticFreightType" para permitir ou não a definição automática do tipo de frete baseado no que foi cadastrado para o fornecedor daquela venda. Caso você não informe o tipo de frete (parâmetro "freightDispatch"), e você informe o campo do fornecedor (parâmetro "carrierId"), ele consulte qual o tipo de envio é o padrão para aquele fornecedor, e faça a definição da venda com o mesmo tipo.
  • Para validar se o pedido já existe, a api utiliza os campos orderIdHube e orderIdMktplace da requisição (correspondente aos campos pcpedc.numpedhube e pcpedc.numpedmktplace do banco). É utilizada a combinação dos dois campos para validar se o pedido já existe, portanto só serão integrados os pedidos se os dois campos forem distintos de algum registro já existente no banco.
  • Sobre o preenchimento do campo de percentual de IPI, esse valor é preenchido quando o método da API busca as informações do produto, com valores cadastrados na rotina 271.
    A partir da versão 1.2.14.4, ao passar pela rotina de cálculo de IPI, será verificado o valor do parâmetro 4753 - Define o valor do percentual do IPI configurado no produto (BUSCAVALORPERCENTUALIPIAPIPEDIDO) , que tem o valor padrão "Sim". Se mantido como "Sim", o sistema continuará definindo o valor preenchido para o percentual de IPI na rotina 271. Caso seja definido como "Não", o sistema atribuirá o valor do percentual de IPI como 0.

  • Para recalculo do valor do IPI o parâmetro  4681 - Habilita cálculo reverso para impostos dos itens de valor agregado no pedido de venda deve está marcado igual a sim, o valor de IPI será calculado caso o campo sellPriceIPI não seja informado. 
  • Importante:

    • Para que seja calculado o valor do IPI, é necessário as seguintes condições:
      • Não tenha valor de IPI já calculado ou enviado no JSON pelo campo sellPriceIPI.
      • Tenha percentual de IPI Venda, isso é cadastrado na rotina 271.
      • Tenha preço de venda.
      • O parâmetro 4681 - Habilita cálculo reverso para impostos dos itens de valor agregado no pedido de venda (FIL_CALCREVERSOPEDIDOVENDA) esteja com valor "Sim".
    • Se for enviado valor de IPI pelo campo sellPriceIPI na API, esse valor será gravado na tabela normalmente.
  • Observação sobre a utilização do processo de múltiplas cobranças:
    • Mesmo enviando a lista de múltiplas cobranças (listPayment) faz-se necessário o envio dos atributos chargingId e paymentPlanId no cabeçalho do pedido. Essas informações serão gravadas na tabela PCPEDC, mas no momento de faturar o pedido serão desconsideradas, pois será considerado o que está gravado na tabela PCFORMAPGTOPEDIDO.
  • Será inserido a data atual no campo PCPEDC.DTCALCFRETE sempre que o valor de frete PCPEDC.VLFRETE referente ao campo do JSON "valueFreight" for maior que zero.


 Integração


A integração consiste em receber e enviar dados do pedido que serão utilizados no E-Commerce.

Os dados integrados são: 

APIPCPEDCPCPEDIDescriçãoTipoObrigatório
createData

pcpedc.data

pcpedi.dataData de criação do pedido

Data (DD/MM/YYYY)

Sim
idpcpedc.codclipcpedi.codcliIdentificador do ClienteNuméricoSim
orderIdpcpedc.numpedpcpedi.numpedIdentificador do pedidoNuméricoNão
orderStatuspcpedc.posicao
Estado do pedido - Veja mais TextoNão
chargingIdpcpedc.codcob
Identificador de cobrança. Caso não informada no cabeçalho do pedido, será gravada a cobrança padrão "BK";TextoNão
TotalPricepcpedc.vltotal
Preço total do pedidoNuméricoNão
paymentPlanIdpcpedc.codplpag
Identificador do plano de pagamentoTextoSim
saleTypepcpedc.condvenda
Tipo de venda

     "1"  - Venda normal

     "5" - Bonificação ou brinde.*

     "7" - Venda para Entrega Futura*

     "8" - Simples Remessa de Venda para Entrega Futura*

  • Para uso futuro.
NuméricoSim
branchIdpcpedc.codfilial
Código da FilialTextoSim
saleOriginpcpedc.origemped

Origem do pedido do Winthor

ex:

B=Balcão
R=Balcão Reserva
K=Venda Broker
C=Callcenter
F=Força de Venda
T=Telemarketing
W=Venda WEB
A=Auto Serviço

TextoNão
comissionPercent
pcpedi.percomPercentual de comissãoNuméricoNão
productSKUERPReferenceKey
pcpedi.codprodEmbalagem do produtoTextoSim
sellPrice
pcpedi.pvendaPreço do produtoNuméricoSim
quantity
pcpedi.qtQuantidade do produtoNuméricoSim
realCost
pcpedi.vlcustorealCusto RealNuméricoNão
warehouseBranchId
pcpedi.codfilialretiraFilial Retira, 
Caso não informado assume a filial do pedido branchId  
TextoSim
position
pcpedi.numseqSequência do pedidoNuméricoNão
taxFigureId
pcpedi.codstFigura tributária da rotina 514NuméricoNão
discountValue
pcpedi.perdescPercentual de desconto aplicado no itemNuméricoNão
valueFreightpcpedc.vlfrete 
Valor de freteNuméricoNão

pcpedc.dtcalcfrete
Caso seja enviado o valor de frete (valueFreight) maior que zero, o campo (DTCALCFRETE) será preenchido.Data (DD/MM/YYYY)Não
intermediaryCompanyNamepcpedc.descintermediador
Razão Social do Intermediador marketplace ou e-commerceTextoNão
idIntermediaryEmployerpcpedc.cnpjintermediador
CNPJ do Intermediador marketplace ou e-commerceTextoNão
carrierIdpcpedc.codfornecfrete
Identificado da transportadoraNuméricoNão
sellerpcpedc.codusurpcpedi.codusurCódigo do RCA, caso não enviado será utilizado o definido no parâmetro "4012 - Código do RCA para cadastro de clientes na Ciashop" da rotina 132- Parâmetros da PresidênciaNuméricoNão
lastChangepcpedc.dtfat (prioridade 1)
Data de faturamento do pedidoData (DD/MM/YYYY)Não
lastChangepcpedc.data (prioridade 2)
Data de emissão do pedidoData (DD/MM/YYYY)Não
orderIdHubepcpedc.numpedhube
Número do pedido realizado via hube ou conectorTextoNão
orderIdMktplacepcpedc.numpedmktplace
Número do pedido realizado via marketplaceTextoNão
freightDispatchpcpedc.fretedespacho

Utiliza despacho de frete (freteiros)

Valores:

    "C"  - CIF - Contratação do Frete por conta do Remetente  ( Tag ModFrete Nfe= 0)

     "F" - FOB - Contratação do Frete por conta do Destinatário  ( Tag ModFrete Nfe= 1)

     "T" - Contratação do Frete por conta de Terceiros  ( Tag ModFrete Nfe= 2)

     "R" - Transporte Próprio por conta do Remetente ( Tag ModFrete Nfe= 3)

     "D" - Transporte Próprio por conta do Destinatário ( Tag ModFrete Nfe= 4)

     "G" - Gratuito - Sem Ocorrência de Transporte  ( Tag ModFrete Nfe= 9)

    

   

TextoNão
uniqueSequentialNumberpcpedc.nsu
NSUTEF - Apenas para forma de pagamento cartãoNuméricoNão
dateUniqueSequentialNumberpcpedc.dtnsu
Data do número sequencial único do cartão de créditoData (DD/MM/YYYY)Não
otherExpensespcpedc.vloutrasdesp
Outras despesas Numérico

Não


gift
pcpedi.bonificItem bonificado/brindeBoolean

Não

observationpcpedc.obs
Observação do pedidoStringNão
deliveryType
 pcpedi.tipoentrega

Tipo de entrega

Valores:
   RP - Retira Posterior
   RI  - Retira Imediata
   EN - Entrega Normal
   EF  - Encomenda


*Obs: disponível a partir da versão: 1.2.0.1078

StringNão
deliveryStatus

Status Entrega


Valores:
   A: Aguardando 
   R: Pronto Retirada
   E: Entregue


*Obs: disponível a partir da versão: 1.2.0.1078

StringNão
deliveryAddressIdpcpedc.codendentcli

Código do endereço de entrega

*Obs: disponível a partir da versão: 1.2.0.1097

NuméricoNão

sellPriceIPI

pcpedi.vlipi
Valor do IPINuméricoNão
shippingTrackingCodeSalepcpedc.codigorastreiofretevenda
Código de rastreio do frete para uma vendaStringNão






Exemplo do envio da requisição:

URI
method: 'POST',
url: '/api/wholesale/v1/orders/'
Body Request
{
    "createData": "2020-03-23T13:24:36.955102+13:24",
    "orderIdHube": "string",
    "orderIdMktplace": "string",
    "orderStatus": "string",
    "chargingId": "string",
    "carrierId": 0,
	"seller": 0,
    "paymentPlanId": 0,
	"observation": 0,
    "saleType": 0,
	"freightDispatch": "string",
    "branchId": "string",
	"TotalPrice": 0,
    "saleOrigin": "W",
    "uniqueSequentialNumber": "string",
    "dateUniqueSequentialNumber": "string",
    "intermediaryCompanyName": "string",
    "idIntermediaryEmployer": "string",
    "valueFreight": 0,
	"CustomerVendorInternalId": "string",
	"position": 0,
    "otherExpenses": 0
	"deliveryAddressId":0,
    "shippingTrackingCodeSale": "AA1234567892",    

    "customer": {
        "id": 0
    },
	"permissions": {
        "acceptOrderWithoutTax": true,
	 	"acceptSearchAutomaticFreightType": false
    },
	/** Somente enviado para a utilização do cenário de múltiplas cobranças **/
	"listPayment": [
        {
            "chargingId" : "string",
            "paymentPlanId" : 0,
            "expirationDate" : "0000-00-00T00:00:00",
            "value" : 0.0,
            "nsu" : 0
        }
    ],
	"listOfOrderItem": [
        {
            "productSKUERPReferenceKey": "string",
            "sellPrice":0,
			"discountValue":0,
            "quantity": 0.0,
            "realCost": 0.0,
            "warehouseBranchId": "string",
            "gift": true,
            "giftPrice": 0,
            "taxFigureId": 0,                   
            "deliveryType": "RI"
             "deductionsCmv": {
                "discountsCofins": 0,
                "discountsIcms":  0,
                "discountsPis": 0
            
             }    
        }
   ]
}
Body Response
{
    "branchId": "string",
    "carrierId": 0,
    "chargingId": "string",
    "createData": "2021-08-06T15:40:00.000000+15:40",
    "customer": {
        "activityId": 0,
        "addressInfo": "",
        "billingAddress": "",
        "billingZipCode": "",
        "businessDistrict": "",
        "cityId": 0,
        "commercialAddress": "",
        "commercialZipCode": "",
        "corporate": false,
        "corporatePhone": "",
        "countryId": 0,
        "email": "",
        "finalCostumer": false,
        "id": 0,
        "paymentPlanId": 0,
        "sellerId": 0,
        "squareId": 0,
        "stateInscription": "",
        "tradeName": ""
    },
    "lastChange": "2021-08-06T15:40:00",
	/** Somente retornado em caso de utilização do cenário de múltiplas cobranças **/
	"listPayment": [
        {
            "chargingId" : "string",
            "paymentPlanId" : 0,
            "expirationDate" : "0000-00-00T00:00:00",
            "value" : 0.0,
            "nsu" : 0
        }
    ],     
	"listOfOrderItem": [
        {
            "accountingCost": 0.0,
            "basePriceRCA": 0.0,
            "comissionPercent": 0,
			"discountPercentage": 0,             
			"fecp": 0,
            "financialCost": 0.0,
            "gift": false,
            "giftPrice": 0,
            "packingId": 0,
            "position": 0,
            "productId": 0,
            "productSKUERPReferenceKey": "00000-00",
            "quantity": 0.0,
            "realCost": 0.0,
            "replacementCost": 0.0,
            "resourceValueCMV": 0,
            "resourceValueCustumerCMV": 0,
            "sellPrice": 0.0,
            "sellPriceBaseST": 0,
            "sellPriceIPI": 0,
            "sellPriceST": 0,
            "stGNRE": 0,
            "tablePrice": 0.0,
            "tablePriceIPI": 0,
            "tablePriceST": 0,
            "taxFigureId": 0,
            "truncItem": false,
            "wantageQuantity": 0,
            "warehouseBranchId": "string",
            "deliveryType": "RI",
            "deliveryStatus": "R"         
        }
    ],
	"permissions": {
        "acceptOrderWithoutTax": true,
	 	"acceptSearchAutomaticFreightType": false
    },
    "orderId": "string",
    "orderIdHube": "string",
	"orderIdMktplace: "string",
    "orderStatus": "string",
    "otherExpenses": 0,
    "paymentPlanId": 0,
    "saleOrigin": "W",
    "saleType": 0,
    "saleTypePayment": "string",
    "totalValue": "0.0",
	"observation": "string",
    "shippingTrackingCodeSale": "string" }

As consultas referente aos pedido, apresentam o JSON na resposta da requisição:  

URI
method: 'GET',
url: '/api/wholesale/v1/orders/'      -> Passar no Parms o campo orderId, para obter dados do pedido.

OU 

url: '/api/wholesale/v1/orders/list'  -> Passar na requisição os dados do Parms abaixo.
Params
branchId          : 0					- Código da Filial **requerido
daysOfSearch      : 0					- Dias de Pesquisa (Se não informado, o padrão será 15 dias)
orderId		      : 0					- Número Pedido
lastChange        : 2021-03-02T16:43:00	- Última alteração
viewDocument  	  : true/ false			- Dados da nota fiscal 
saleOrigin   	  : T					- Origem Venda (Todas existentes no Winthor) Padrão W
order		 	  : lastChange			- Ordenação de busca 
orderStatus  	  : C					- Status do Pedido
page		 	  : 1					- Número Página
pageSize     	  : 10					- Tamanho da página
hasOrderIdHube	  : true/ false			- Pedidos que com id de Hube - Disponível a partir da versão 1.0.84.229(Winthor-pedido-venda) 
hasOrderIdMktplace: true/ false			- Pedidos que com id de Marketplace  - Disponível a partir da versão 1.0.84.229(Winthor-pedido-venda)   
integrationOrigin :             		- Filtra pela coluna ORIGEMINTEGRACAO - Disponível a partir da versão 1.3.0.40(Winthor-pedido-venda)   
 
Body Response
{
    "branchId": "string",
    "carrierId": 0,
    "chargingId": "string",
    "createData": "2021-08-06T15:40:00.000000+15:40",
    "customer": {
        "activityId": 0,
        "addressInfo": "",
        "billingAddress": "",
        "billingZipCode": "",
        "businessDistrict": "",
        "cityId": 0,
        "commercialAddress": "",
        "commercialZipCode": "",
        "corporate": false,
        "corporatePhone": "",
        "countryId": 0,
        "email": "",
        "finalCostumer": false,
        "id": 0,
        "paymentPlanId": 0,
        "sellerId": 0,
        "squareId": 0,
        "stateInscription": "",
        "tradeName": ""
    },
    "document": {
        "createData": "1900-01-01T00:00:00",
        "documentNumber": 0,
        "keyDocument": "",
        "lastChange": "1900-01-01T00:00:00"
    },
    "lastChange": "2021-08-06T15:40:00",
	/** Somente retornado em caso de utilização do cenário de múltiplas cobranças **/
	"listPayment": [
        {
            "chargingId" : "string",
            "paymentPlanId" : 0,
            "expirationDate" : "0000-00-00T00:00:00",
            "value" : 0.0,
            "nsu" : 0
        }
    ],
     "listOfOrderItem": [
        {
            "accountingCost": 0.0,
            "basePriceRCA": 0.0,
            "comissionPercent": 0,
			"discountPercentage": 0,
            "fecp": 0,
            "financialCost": 0.0,
            "gift": false,
            "giftPrice": 0,
            "packingId": 0,
            "position": 0,
            "productId": 0,
            "productSKUERPReferenceKey": "00000-00",
            "quantity": 0.0,
            "realCost": 0.0,
            "replacementCost": 0.0,
            "resourceValueCMV": 0,
            "resourceValueCustumerCMV": 0,
            "sellPrice": 0.0,
            "sellPriceBaseST": 0,
            "sellPriceIPI": 0,
            "sellPriceST": 0,
			"sellPriceIcmsPart": 0,
            "stGNRE": 0,
            "tablePrice": 0.0,
            "tablePriceIPI": 0,
            "tablePriceST": 0,
            "taxFigureId": 0,
            "truncItem": false,
            "wantageQuantity": 0,
            "warehouseBranchId": "string"
        }
            "deductionsCmv": {
                "discountsCofins": 0,
                "discountsIcms":  0,
                "discountsPis": 0
            }     
   ],
	"permissions": {
        "acceptOrderWithoutTax": true,
	 	"acceptSearchAutomaticFreightType": false
    },
    "orderId": "string",
    "orderIdHube": "string",
	"orderIdMktplace: "string",
    "orderStatus": "string",
    "otherExpenses": 0,
    "paymentPlanId": 0,
    "saleOrigin": "W",
    "saleType": 0,
    "saleTypePayment": "string",
    "totalValue": "0.0",
	"observation": "string",
    "shippingTrackingCodeSale": "string" } 

As requisições de Cancelamento referente aos pedido, apresentam o JSON na resposta da requisição:  

URI
method: 'DELETE',
url: '/api/wholesale/v1/orders/'      -> Passar no Parms o campo id e Motivo para cancelar o pedido
Params
Id		            : 0					- ID/Número Pedido (Obrigatório)
sendMessageRca      : true/ false		- Enviar mensagem pro RCA? 
reasonCancellation  : C					- Motivo Cancelamento (Obrigatório)   




Observação: Os pedidos com itens do tipomerc = CB (CESTA BASICA) terão os itens da cesta gravados na tabela PCPEDICESTA no campo CODPRODMP.

  • Sem rótulos