Pular para conteúdo

Referência técnica — Pedido de Compra Omie

Atualizado: 2026-07-07 · por: sessão manual · exceção de alumínio no conflito de descrição · rev: 2

Empresas e app keys (multi-tenant Omie)

Empresa empresa.nome (BPEX) Omie app_key app_secret Particularidades
Onix contém "onix" ${OMIE_APP_KEY_ONIX} ${OMIE_APP_SECRET_ONIX} Cadastro de Projeto OK
ATARES Revestimentos contém "atares" ${OMIE_APP_KEY_ATARES} ${OMIE_APP_SECRET_ATARES} Exige codigo_produto_integracao no IncluirProduto
LGR contém "lgr" ${OMIE_APP_KEY_LGR} ${OMIE_APP_SECRET_LGR} Cadastro de Projeto OK
BPX contém "bpx" ${OMIE_APP_KEY_BPX} ${OMIE_APP_SECRET_BPX} Cadastro de Projeto OK
Dale contém "dale" ${OMIE_APP_KEY_DALE} ${OMIE_APP_SECRET_DALE} Sem permissão "Cadastro de Projetos / Inclusão" — pendente liberar no painel Omie

⚠️ O Code node identifica a empresa por body.pedido_compra.empresa.nome (lowercase, includes-match), NÃO por empresa_id. Os app_keys e app_secrets vivem hardcoded no nó Code dos workflows MP e MO. Para puxar valores atualizados: GET /rest/workflows/WwDzIseoYVxbzJZK e ler nodes['Code'].parameters.jsCode.


Mapping de campos BPEX → Omie

Cabeçalho do PC (IncluirPedCompra)

Omie BPEX origem Notas
cCodIntPed pedido_compra.id identificador único do PC no BPEX
dDtPrevisao $today (formato dd/MM/yyyy) data de previsão = hoje
cCodParc derivado de pedido_compra.prazo_pagamento "3 parcelas" → "003", "2 parcelas" → "002", senão "001"
nCodFor clientes_cadastro_resumido[0].codigo_cliente resultado do Acha código do cliente
cCodCateg hardcoded "2.11.99" categoria fiscal padrão Bepex
nCodCompr Code.json.comprador id de comprador no Omie, varia por empresa
cObs Pedido incluido via API ${now} timestamp
cObsInt pedido_compra.id observação interna = id BPEX
frete_incluir.cTpFrete hardcoded "9" "Sem frete"

Item do PC (produtos_incluir)

Omie BPEX origem (MP) Notas
nCodProd _codigo_produto_resolvido (Distribuir) int gerado pelo Omie, descoberto via lookup ou auto-criação
nQtde $json.quantidade (do Split Out) obrigatório
nValUnit $json.valor (do Split Out) obrigatório
cObs =PVJ-${pedido_venda.id}-PCJ-${pedido_compra.id}-ITJ-${id} rastreabilidade BPEX

Cadastro de produto novo (IncluirProduto, MP)

Omie BPEX origem Obrigatório?
codigo omie.mp.codigo (BPXxxxxxxx) sempre
codigo_produto_integracao omie.mp.codigo (mesmo valor) sim, na ATARES (sempre passar nas demais não dói)
descricao omie.mp.descricao sempre
unidade item.unidade_medida sempre
ncm item.ncm (formatado XXXX.XX.XX) sempre
valor_unitario item.preco_peca sempre
peso_liq item.peso_peca sempre
peso_bruto item.peso_peca (= liq) sempre
modelo item.nome sempre
tipoItem hardcoded "01" sempre
inativo hardcoded "N" sempre
recomendacoes_fiscais.origem_mercadoria hardcoded "0" sempre
recomendacoes_fiscais.market_place hardcoded "S" sempre

Cadastro de projeto novo (IncluirProjeto, MO)

Omie BPEX origem Notas
codigo pedido_venda.id identificador único do orçamento no BPEX
nome pedido_venda.id nome = mesmo do código (padrão Bepex)
inativo hardcoded "N" sempre

Erros Omie conhecidos e tratamento

faultstring / mensagem faultcode Humanizado pelo Code1
tag [cProduto] ausente "Produto(s) não cadastrado(s) no Omie: "
Pedido de compra j(á cadastrado) "Pedido já cadastrado no omie anteriormente"
Cannot read properties of undefined (reading 'toLowerCase') [line 6] "empresa emissora não definida"
tag [nValUnit] ausente Client-105 "Existe campo valor unitário não preenchido"
tag [nQtde] ausente Client-105 (não humanizado — bug do paired-item, fixar upstream)
tag [codigo_produto_integracao] Client-103 (não humanizado — fixar adicionando o campo)
existem registros para a "Cliente provavelmente não cadastrado no Omie"
Consumo redundante Client-6 "Omie bloqueou por consumo redundante (aguarde alguns minutos e reenvie)"
já existe no Omie com descrição diferente (interno, Stop and Error) pass-through

Exceção alumínio (MP, desde 2026-07-07): quando é produto de alumínio e a descrição do Omie difere da do BEPEX pela posição do token "ALUMINIO"/espaços (ex.: Omie "ALUMINIO 6000 x 1000 x 1.2" vs BEPEX "6000 x 1000 x 1.2 ALUMINIO"), o nó Alum equivalente? trata como o mesmo produto e o Set Reaproveitado reusa o codigo_produto do Omie — não cai no Stop and Error. Detalhe do fluxo em arquitetura.md (§ MP, pegadinha 11); cronologia em bugs-fix-log.md (2026-07-07). Medida temporária até a base de alumínio no Omie ser normalizada.


Endpoints Omie utilizados

Endpoint call Onde
/api/v1/geral/produtos/ ListarProdutosResumido nó "Acha código do produto" (MP)
/api/v1/geral/produtos/ ConsultarProduto nó "ConsultarProduto por codigo" (MP, ramo do código)
/api/v1/geral/produtos/ IncluirProduto nó "IncluirProduto" (MP, auto-criar)
/api/v1/geral/clientes/ ListarClientesResumido nó "Acha código do cliente"
/api/v1/geral/projetos/ ListarProjetos / IncluirProjeto apenas MO
/api/v1/produtos/pedidocompra/ IncluirPedCompra nó "adiciona pedido de compra"

Limites Omie

  • Consumo redundante — chamadas idênticas em < ~60s caem com "REDUNDANT". Por isso o batching batchSize: 1, batchInterval: 1500 no "Acha código do produto".
  • Códigos de camposcodigo aceita até 60 chars, codigo_produto_integracao até 60 chars, codInt até 20 chars (atenção em probes de teste).

Body do webhook BPEX (POST do orçamento → n8n)

Estrutura aproximada (capturada de execuções reais):

{
  "body": {
    "id": <id da requisição>,
    "data": <timestamp>,
    "pedido_compra": {
      "id": <PC id BPEX>,
      "prazo_pagamento": "<string>",
      "empresa_id": <int>,
      "categoria_compra": "MP" | "MO"
    },
    "itens": [
      {
        "id": <id do item no PC>,
        "quantidade": <number>,
        "valor": <number/string>,
        "valor_total": <number/string>,
        "cliente": { "id": <>, "cnpj": "...", ... },
        "pedido_venda": { "id": <PV id BPEX>, "empresa_id": <int>, ... },
        "item": { "id": <item base id>, "nome": "...", "ncm": "...", "unidade_medida": "PCS", "preco_peca": <>, "peso_peca": <>, ... },
        "pedido_venda_item": { "id": <>, "quantidade_mp": <>, ... },
        "omie": {
          "base": { "codigo": "BPXxxxxxxx-O", "descricao": "..." },
          "mp":   { "codigo": "BPX007175", "descricao": "2000 x 1200 x 1.25 GALVANIZADA" },
          "mo":   { "codigo": "BPXxxxxxxx-MO", "descricao": "..." },
          "dobra":{ "codigo": "BPXxxxxxxx-PIN", "descricao": "..." }
        }
      }
    ]
  }
}

Mesmo PC pode ter N items (vários PVs ou várias dimensões de chapa diferentes). Items com mesmo omie.mp.descricao aparecem duplicados intencionalmente — o dedupe acontece só pra busca do produto Omie, mas o produtos_incluir final preserva as duplicatas.


Credentials e tokens (resumo)

  • n8n: sessão cookie + headers browser-id / push-ref (ver skill n8n-bepex)
  • Omie: app_key + app_secret no payload da chamada HTTP (sem header de auth)
  • BPEX: o callback usa URL fixa configurada no nó "status de sucesso" (verificar parameters do nó pra detalhes)
  • Chatwoot Bepex: account 3, inbox 26, via MCP (mcp__46639869-4bfb-4c51-894b-388b0b3dc06a__*)