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’.

Imagem
JSON completo para integração de cotações
{
    "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.
JSON de integração das formas de pagamento
{
    "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.
JSON de integração dos compradores

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)
}
JSON retornado após a consulta (Salvando Dados no ERP vindos do Cotei)
{
    "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).
JSON para solicitação de login automático na tela F410PCO - Portal Cotei

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.

Este artigo ajudou você?