Detalhamento técnico da integração Gestão Empresarial com o Cotei
Esta documentação traz os detalhes técnicos da integração Gestão Empresarial com o Cotei para diagnóstico de problemas.
Observação
Quando é criada uma nova rodada de cotação, caso exista uma cotação corrente no COTEI, esta é finalizada e é gerada uma nova cotação no COTEI com mesmo número de cotação. O processo de finalização e de envio de cotação seguem o mesmo fluxo já existente, para sinalizar essa ação no banco de dados, o campo E998CTE.ACAENV = ‘S’ e a finalização tem E998CTE.ACAENV = ‘X’.
{
"cotacoes": [ // É enviado uma cotação por vez
{
"codigo": "(E998CTE.NUMPCT)",
"codigoLista": "(E998CTE.CODEMP)",
"status": "(0 para cotação aberta e 3 para cotação finalizada)",
"comprador": {
"email": "(E099USU.INTNET)",
"nome": "(R910USU.NOMCOM)"
},
"dataLimite": "(E410PCT.DATLCW)",
"descricao": "(E410PCT.OBSPCT)",
"empresa": "(E070EMP.NOMEMP)",
"cnpj": "(CNPJ da proprietária)",
"fornecedores": [ // Todos os fornecedores serão listados dentro desse grupo
{
"cnpjFornecedor": "(E095FOR.CGCCPF)",
"codigo": "(E095FOR.CODFOR)",
"nome": "(E095FOR.NOMFOR)",
"email": "(E095FOR.INTNET)"
}
],
"identificador": "(E998CTE.IDEUNI)",
"itens": [ // Todos itens serão listados dentro desse grupo
{
"codigo": "(E410COT.NUMCOT)",
"descricao": "(E405SOL.CPLPRO)",
"quantidade": "(E410COT.QTDCOT)",
"unidade": "(E410COT.UNIMED)",
"marcaObrigatoria": { }, // Parâmetro de integração na tela F191CPT
"anexo": [
{
"descricao": "(Nome do arquivo localizado em E000ANX.LOCANX)",
"file": "(Arquivo binário localizado aqui E000ANX.LOCANX)"
}
],
"endereco": { // Se E070ENT.SEQENT > 0 // Se E070FIL.CEPENT > 0 // terceira opção
"bairro": "(E070ENT.BAIENT// E070FIL.BAIENT// E070FIL.BAIFIL)",
"cep": "(E070ENT.CEPENT// E070FIL.CEPENT// E070FIL.CEPFIL)",
"complemento": "(E070ENT.CPLENT// E070FIL.CPLENT// E070FIL.CPLENT)",
"descricao": " ",
"logradouro": "(E070ENT.ENDENT// E070FIL.ENDENT// E070FIL.ENDFIL)",
"municipio": "(E070ENT.CIDENT// E070FIL.CIDENT // E070FIL.CIDFIL)",
"numero": "(E070ENT.NUMENT// “ ”//E070FIL.NENFIL)",
"telefone": ["(E070FIL.NUMFON)"],
"uf": "(E070ENT.ESTENT// E070FIL.ESTENT// E070FIL.SIGUFS)"
},
"especificacao": [ // Especificações do item
// (Casos citados abaixo)
]
}
]
}
]
}Especificação do item:
- se o item possui código de barras, o mesmo é adicionado;
- se o item possui anexos, mas não especificação, é adicionada a especificação Vide anexo;
- se o item não recebeu nenhuma especificação, é adicionada a especificação Sem especificação;
- o identificador de regras CPR-410AICOT01 pode alterar a especificação/descrição de um item por meio de regras.
Outros detalhes:
- o identificador de regras CPR-410DGCOT01 pode alterar a descrição e o nome da empresa nos dados da cotação por meio de regras;
- o JSON completo é enviado somente ao enviar uma cotação pela primeira vez;
- para alterações na cotação, os campos relativos ao fornecedor e item não são enviados;
- para inclusão de novos fornecedores são enviados os campos de fornecedor apenas;
- o JSON não é enviado para apagar uma cotação. O comando é executado somente com o uso da URL.
- a descrição do item pode ser composta de formas diferentes, dependendo da parametrização utilizada. A parametrização padrão envia o campo E410SOL.CPLPRO e se este campo estiver vazio, envia os dados do item (descrição e complemento do serviço ou descrição e complemento do produto + descrição e complemento da derivação). Se é necessário o envio do complemento da solicitação de compra e também dos dados do item, é necessário utilizar o parâmetro global CotConIte.
{
"condicoes": [ // Todos as formas de pagamento serão listadas dentro desse grupo
{
"codigo": "(E028CPG.CODCPG)",
"codigoLista": "(E028CPG.CODEMP)",
"descricao": "(E028CPG.DESCPG)"
},
]
}Observações:
- são integradas apenas as condições com aplicação C - Compras ou A – Ambos;
- o identificador de regras CPR-410CDPCO01 pode ser utilizado para adicionar filtros na busca das condições de pagamento para integração.
Inclusão (POST)
[
{
"cnpj": "(Cnpj da Proprietária)",
"email": "(E099USU.INTNET)",
"filiais":
[
{
"código": "(CE070FIL.E070FIL.NumCgc)",
"nome": "(CE070FIL.E070FIL.NomFil)"
}
],
"idusuario": "(E998CTA.IDEUNI)",
"nome": "(E099USU.NOMUSU)",
"status": "(E099USU.SITUSU)",
"tipousuario": "C" // <- (Fixo "C" - Comprador)
}
]Alteração (PUT)
{
"cnpj": "(Cnpj da Proprietária)",
"email": "(E099USU.INTNET)",
"filiais": [
{
"código": "(CE070FIL.E070FIL.NumCgc)",
"nome": "(CE070FIL.E070FIL.NomFil)"
}
],
"idusuario": "(E998CTA.IDEUNI)",
"nome": "(E099USU.NOMUSU)",
"status": "(E099USU.SITUSU)",
"tipousuario": "C" // <- (Fixo "C" - Comprador)
} {
"cotacoesRetorno":[
{
"codigo": "(Utilizado para busca da cotação)",
"identificador": "(Utilizado para a busca da cotação)",
"status": "(Não utilizado)",
"fornecedores": [
{
"codigo": "(Utilizado para busca da cotação)",
"itens": [
{
"codigo": "(Utilizado para busca da cotação)",
"quantidade": "(E410COT.QTDCOT, E410COT.QTDFOR)",
"valor": "(E410COT.PRECOT e E410COT.PREFOR)",
"icms": "(E410COT.ICMCOT)",
"ipi": "(E410COT.IPICOT)",
"desconto": "(Utilizado para montar o E410COT.VLRDSC), E410COT.VLRDSC é montado e é melhor explicado abaixo",
"marca": "(E410COT.MARFOR)",
"diasEntrega": "(E410COT.PRZENT)",
"observacao": "(E410COT.OBSCOT) E410COT.OBSCOT é montada e melhor explicada abaixo"
}
],
"diasEntrega": "(Não utilizado)",
"valorFrete": "(E410COT.FRECOT), E410COT.FRECOT é montada e melhor explicada abaixo",
"tipoPreco": "(E410COT.CIFFOB como ‘C’ quando CIF e ‘F quando FOB’)",
"codigoCondicaoPagto": "(E410COT.CODCPG)",
"descricaoCondicaoPagto": "(Não é utilizado)",
"desconto": "(Utilizado para montar o E410COT.VLRDSC)",
"status": "Respondido // O Status é utilizado internamente. Mais detalhes abaixo."
}
]
}
]
}E410COT.VLRDSC:
- é composto pelo desconto do item + o desconto da cotação rateado pelos itens.
E410COT.FRECOT:
- é composto pelo valor do frete rateado entre os itens.
Status e F410COT.OBSCOT:
- a consulta pode receber os seguintes status: Respondido, Cotar, Não Participar e Não Fornecido;
- quando o status for Não Participar ou Não Fornecido, o campo F410COT.OBSCOT recebe a informação referente ao status e os dados da cotação ficam zerados;
- quando o status for Respondido, os dados da cotação são atualizados conforme acima e a informação de que a cotação foi respondida é adicionada à observação;
- são atualizados apenas os dados de cotações com situação = 1 (Em processo de cotação);
- quando o Fornecedor clica no botão + no Cotei para inserir as observações no item, essa observação será montada junto com a informação dos status. Confira neste artigo como é a feita a integração de observação do Cotei para o ERP (Gestão Empresarial | ERP).
Envio requisição:
{
"email": "(E099USU.INTNET)"
}Observação:
- No header do JSON é enviado o CNPJ da proprietária no parâmetro documentocontrato, para que seja possível localizar o usuário (através do e-mail) dentro da empresa cadastrada no Cotei.
curl --location 'https://gateway-cotei-api-v2-r4xjq73.uc.gateway.dev/generateToken?api_key=' (api_key) \
--header 'documentocontrato: (CNPJ da proprietária)' \
--header 'Content-Type: application/json' \
--data-raw '{ "email": "(E099USU.INTNET)" }'JSON Retorno:
{
"token": "(Token de acesso emitido pelo Cotei)"
} Observação
Ao consultar uma cotação pendente na fila de retorno, a API do Cotei pode retornar o JSON: '\{"status":"Erro interno do servidor","erro":\{\}\}'
Ele também pode ser retornado se na consulta de várias cotações houver uma com problemas no Cotei. Isto faz com que o retorno de resposta das cotações fique travado.
Para resolver o problema, utilize o parâmetro QTD_CONSULTA_RETORNO no processo agendado 137 - Integração ERP x Cotei. Ele permite informar a quantidade de cotações da fila de pendência de retorno a serem consultadas por cada requisição. Quando não informado, todas as cotações pendentes serão consultadas na mesma requisição. Exemplo de preenchimento: QTD_CONSULTA_RETORNO=1.
Assim, é possível identificar, através dos logs (do processo agendado ou o log texto ativado na tela F191CPT), qual cotação está com problemas para então fechá-la ou excluí-la.
English
Español

English
Español

