Conecta com sistemas ERP e MES como

Integrações / ERP / Odoo

Guia de integração do Odoo para programação da produção com SkyPlanner APS

Este guia mostra a parceiros Odoo, desenvolvedores e líderes de TI como conectar o Odoo Manufacturing ao SkyPlanner APS. Para entender os benefícios para o negócio e o que o botão Plan do Odoo já faz, leia a página sobre programação da produção no Odoo e O Odoo oferece programação da produção que respeita a capacidade real das máquinas e da equipe?.

Gráfico de Gantt do SkyPlanner APS com operações programadas nos centros de trabalho e uma lista de ordens abaixo.

O Odoo continua sendo a fonte oficial dos dados de produtos, listas de materiais, operações, ordens de fabricação, estoque e custeio. O SkyPlanner usa esses dados para montar a programação com seu motor Arcturus. A integração com o Odoo funciona nos dois sentidos:

  • O SkyPlanner recebe ordens de fabricação, ordens de produção, operações das listas de materiais, centros de trabalho e pedidos de compra.
  • O início e o fim planejados e os centros de trabalho são gravados de volta em mrp.workorder.
  • O andamento e os tempos apontados retornam como Time Logs do Odoo.
  • Os webhooks do SkyPlanner enviam as alterações na programação assim que elas acontecem.

Durante a implantação, a equipe do SkyPlanner configura a integração pela API externa padrão do Odoo, de acordo com sua versão, hospedagem e personalizações, e presta suporte após a entrada em operação. Este guia é voltado a parceiros e desenvolvedores que querem participar desse trabalho ou desenvolver por conta própria com a API REST documentada do SkyPlanner (referência da API). O tratamento de produtos, materiais e pedidos de compra está descrito na documentação pública do SkyPlanner.

Passo zero: verifique o plano e a hospedagem do Odoo

Primeiro, identifique qual configuração do Odoo o cliente utiliza. Isso define o caminho a seguir.

ConfiguraçãoAPI externaMódulos personalizadosCaminho recomendado
Odoo Online, One App Free ou StandardNãoNãoCSV/XLSX ou migração para o plano Custom
Odoo Online, plano CustomSimNãoAPI externa
Odoo.sh (plano Custom)SimSimAPI externa, módulo opcional
Instalação local, Community ou EnterpriseSimSimAPI externa, módulo opcional

A documentação da API do Odoo informa que o acesso à API externa está “only available on Custom Odoo pricing plans” (disponível apenas nos planos Custom do Odoo), e não nos planos One App Free ou Standard. A página de preços descreve o Standard como hospedado no Odoo Online “without custom modules” (sem módulos personalizados). Verifique isso no levantamento inicial, não no meio do desenvolvimento.

Opções de integração do Odoo

OpçãoVersõesAutenticaçãoPapel na integração com a programação da produção
API externa JSON-2: POST /json/2/<model>/<method>Introduzida na versão 19.0Chave de API em Authorization: bearer <key>, cabeçalho opcional X-Odoo-DatabasePadrão para novas integrações: search_read para leitura, write para gravar as datas de volta
XML-RPC / JSON-RPC externos: /xmlrpc/2, /jsonrpc, serviços common, objectAté a versão 19.0; remoção programadacommon.authenticate com login e senha ou chave de API, seguido de execute_kwNecessário para clientes nas versões 16.0 a 18.0
Controladores personalizados em um móduloTodasPor rota, por exemplo, auth='bearer'Payloads combinados: uma ordem de fabricação (MO) com suas ordens de produção em uma única chamada
Regras de automação: “Send Webhook Notification” (Enviar notificação de webhook)Na documentação a partir da versão 17.0Envio de POST para uma URLEnvio ao criar ou editar ordens de fabricação e ordens de produção
Importação de registros (CSV, XLSX) e exportaçãoTodasSessão do usuárioDados para o teste e cargas pontuais de dados mestres

Prepare-se agora para a remoção. A Odoo programou a remoção de XML-RPC e JSON-RPC no Odoo 22 (outono de 2028 no hemisfério norte) e no Odoo Online 21.1 (inverno de 2027 no hemisfério norte). Desenvolva com JSON-2 para a versão 19.0 e isole o acesso via RPC em um único adaptador para bases de dados mais antigas. Assim, a atualização exigirá uma única alteração. Controladores personalizados com @route(type='jsonrpc') não são afetados pela remoção.

Autenticação

Crie um usuário exclusivo para a integração, com acesso de leitura a Manufacturing e Inventory e permissão de escrita nas ordens de produção. Gere a chave em Preferences > Account Security > New API Key. Na versão 19.0, as chaves têm validade máxima de três meses. Por isso, o middleware precisa de rotação de chaves e de um alerta para falhas de autenticação. Sem esses recursos, uma chave expirada interrompe a sincronização sem que ninguém perceba. No SkyPlanner, a API REST usa JWT, portanto o middleware armazena as duas credenciais.

Cada chamada JSON-2 é executada em sua própria transação SQL. Por isso, uma gravação distribuída entre várias chamadas não é atômica. Faça a gravação por ordem de produção e registre cada resultado.

Eventos

O Odoo envia alterações por meio de regras de automação. Uma regra em mrp.production ou mrp.workorder, com o gatilho Ao criar e editar e a ação “Send Webhook Notification” (Enviar notificação de webhook), envia um POST com os campos selecionados para uma URL. Crie a regra no Studio ou, no modo de desenvolvedor, pelo formulário de regras de automação. Complemente a regra com consultas periódicas usando search_read e write_date para capturar importações e tudo o que ela não detectar. No sentido inverso, os webhooks do SkyPlanner enviam as alterações de programação e de status assim que elas ocorrem.

Os nomes dos campos variam entre as versões. Na 19.0, cada base de dados lista seus modelos, campos e métodos em /doc; nas versões anteriores, use fields_get. Faça o mapeamento com base nessas informações, não de memória.

Mapeamento de dados: do Odoo para o SkyPlanner

Modelo do OdooObjeto do SkyPlannerSentidoFrequência
product.product / product.template (default_code, uom_id, qty_available)Produto ou materialOdoo → SkyPlannerCarga inicial; depois, diariamente ou a cada alteração
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproductProduto com estrutura multinível, necessidades de materiais por etapaOdoo → SkyPlannerA cada alteração
mrp.routing.workcenter (aba Operações: workcenter_id, sequence, time_mode, time_cycle_manual, blocked_by_operation_ids)Etapas do processo com sequência e tempo de execuçãoOdoo → SkyPlannerA cada alteração
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids)Centro de trabalho, eficiência, setup e desmontagem, centros de trabalho alternativosOdoo → SkyPlanner; depois, manutenção no SkyPlannerCarga inicial
mrp.workcenter.capacity (capacity)Peças por ciclo, tempos de setup e desmontagem específicos por produtoOdoo → SkyPlannerCarga inicial
resource.calendar, resource.calendar.attendance, resource.calendar.leavesTurnos e ausênciasOdoo → SkyPlannerCarga inicial; ausências a cada alteração
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids)Ordem com prazo de entrega e prioridadeOdoo → SkyPlannerWebhook na confirmação, mais consultas periódicas
mrp.workorder (operation_id, workcenter_id, duration_expected, state)Operação em um centro de trabalhoOdoo → SkyPlannerWebhook, mais consultas periódicas
stock.quant, stock.move (movimentações de componentes)Saldo em estoque e necessidades de materiais para programação orientada pela disponibilidade de materiaisOdoo → SkyPlannerEm intervalos programados, por exemplo, de 15 a 60 minutos
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received)Pedidos de compra e materiais a receber, disponíveis na data prevista de entregaOdoo → SkyPlannerWebhook na confirmação ou edição do pedido de compra, mais as mesmas consultas periódicas
Início e fim planejados e centro de trabalhomrp.workorder.date_start, date_finished, workcenter_idSkyPlanner → OdooA cada alteração da programação, via webhook do SkyPlanner
Mobile Confirmations, apontamentos de tempomrp.workcenter.productivity (Time Logs: workcenter_id, workorder_id, date_start, date_end, loss_id)SkyPlanner → OdooA cada confirmação
Quantidade produzida, operação concluídaqty_producing na ordem de produção, seguido de button_finish; button_mark_done na ordem de fabricaçãoSkyPlanner → Odoo, ou registro no Odoo Shop FloorA cada confirmação

Padrões de integração

Primeiro, os dados mestres.

Carregue os centros de trabalho e os calendários. Depois, carregue os produtos, as listas de materiais e as operações, que fazem referência aos centros de trabalho. No teste de 30 dias, essas mesmas listas são importadas a partir de arquivos CSV exportados do Odoo. A ferramenta de importação e exportação do Odoo funciona em qualquer visualização de lista.

Sincronização de ordens.

Importe as ordens de fabricação nos status confirmed e progress, com suas ordens de produção. Deixe de fora as ordens de fabricação em rascunho ou trate-as como demanda provisória. Subconjuntos com lista de materiais própria podem chegar como ordens de fabricação filhas separadas, e o Odoo planeja cada ordem de fabricação de forma independente. Mapeie-as para subprodutos no SkyPlanner para que os subconjuntos sejam concluídos antes do início da ordem principal.

Gravação da programação de volta no Odoo.

Quando a programação muda, um webhook do SkyPlanner aciona a integração, que chama o método write do ORM em cada mrp.workorder afetada. No Odoo 19.0, isso corresponde a uma requisição JSON-2 por ordem de produção:

“ POST /json/2/mrp.workorder/write Authorization: bearer <api-key> {"ids": [4711], "vals": {"date_start": "2026-11-03 06:00:00", "date_finished": "2026-11-03 09:30:00", "workcenter_id": 7}} “

O JSON-2 recebe cada argumento do método pelo nome, além de ids e context, de modo que write(vals) passa a usar a chave vals. Nas versões 16.0 a 18.0, a mesma chamada é executada como execute_kw(db, uid, key, 'mrp.workorder', 'write', [[4711], vals]) via XML-RPC ou JSON-RPC; na 16.0, as chaves são date_planned_start e date_planned_finished. Envie datas e horários em UTC. Siga estas regras para evitar problemas na gravação:

  • Envie as duas datas na mesma chamada.
  • Inclua workcenter_id somente quando o motor escolher uma máquina alternativa.
  • Grave apenas os campos de programação, nunca as quantidades ou as listas de materiais.

A gravação das datas altera a reserva do centro de trabalho no próprio Odoo. Assim, as visualizações de planejamento do Odoo passam a mostrar a programação do SkyPlanner.

Retorno dos dados do chão de fábrica ao Odoo. Os operadores registram o trabalho no SkyPlanner Mobile Confirmations. Para cada confirmação, a integração chama create em mrp.workcenter.productivity (JSON-2: POST /json/2/mrp.workcenter.productivity/create com vals_list). Ela preenche workorder_id, workcenter_id, date_start, date_end e um loss_id do tipo Productive, e o tempo de mão de obra e os custos são lançados no Odoo.

Quando uma operação é concluída, a integração define a quantidade produzida e chama button_finish na ordem de produção. A última ordem de produção deixa a ordem de fabricação pronta para button_mark_done. Cada confirmação é lançada uma única vez, e o ID do registro no Odoo fica salvo junto ao apontamento de tempo do SkyPlanner. Assim, uma nova tentativa de envio do webhook nunca cria um segundo Time Log.

Nas fábricas que usam o aplicativo Enterprise Shop Floor, o fluxo é inverso: o SkyPlanner lê o status da ordem de produção e qty_produced, e o Autopilot reprograma automaticamente quando há alterações na produção.

Responsabilidade pelos dados. Documente as regras antes da entrada em operação:

DadosSistema responsável
Produtos, listas de materiais, operações, quantidades e status das ordens de fabricaçãoOdoo
Sequência das ordens de produção, horários de início e término e escolha do centro de trabalhoSkyPlanner
Matriz de tempos de preparação e transição, requisitos de ferramentas e operadores e recursos alternativosSkyPlanner
Calendários dos centros de trabalho e Time OffUm único sistema, escolhido na definição de escopo
Time Logs, estoque e custeioOdoo, alimentado pelas confirmações do SkyPlanner

Os planejadores deixam de usar os botões Plan e Unplan no Odoo para as ordens de fabricação programadas pelo SkyPlanner. Caso contrário, o Odoo faz suas próprias reservas de horários, sobrepondo as datas do SkyPlanner.

Etapas típicas do projeto

A implementação normalmente é concluída em poucas semanas após o início da implantação. Antes disso, o teste gratuito de 30 dias usa arquivos CSV exportados dos seus próprios dados do Odoo. O projeto em si inclui:

  1. Mapeamento de dados mestres: modelos e campos do Odoo por versão (consulte /doc ou fields_get), unidades de medida e definição de qual sistema mantém os calendários e o Time Off.
  2. Revisão dos dados: calendários dos centros de trabalho, Setup Time e Cleanup Time, além da configuração das durações das operações das listas de materiais como Fixed em vez de Computed.
  3. Carga inicial: produtos, centros de trabalho com seus calendários, listas de materiais e suas operações.
  4. Sincronização de ordens e pedidos de compra: ordens de fabricação confirmadas e em andamento, com suas ordens de produção, além das linhas de purchase.order com as datas previstas de chegada.
  5. Gravação da programação no Odoo: datas e centros de trabalho em mrp.workorder, com rotação de chaves de API no Odoo.
  6. Confirmações do chão de fábrica: envio dos Time Logs e das conclusões das ordens de produção de volta ao Odoo.
  7. Testes em paralelo com a programação atual, seguidos da entrada em operação.

Cuidados com o Odoo

  • Campos de data renomeados. Até a versão 16.0, date_planned_start e date_planned_finished armazenavam as datas planejadas, e date_start/date_finished, as realizadas. A partir da 17.0, date_start e date_finished são as datas planejadas. Um mapeamento copiado de um projeto na versão 16.0 lê datas realizadas como planejadas na 17+ sem indicar o erro.
  • As datas das ordens de produção são reservas de capacidade. Na versão 19.0, date_start e date_finished em mrp.workorder são calculados a partir de um registro de resource.calendar.leaves (leave_id) no calendário do centro de trabalho. Gravar as datas na ordem de produção atualiza essa reserva. Nunca grave diretamente na tabela de ausências.
  • Ordens de produção iniciadas bloqueiam a ação Unplan. O Odoo se recusa a desfazer o planejamento de uma ordem de fabricação quando “Some work orders have already started” (Algumas ordens de produção já foram iniciadas). Ao gravar a programação de volta, ignore as ordens de produção em progress ou done e mova apenas o que ainda não começou.
  • As durações variam. As operações configuradas como Computed têm sua duração calculada com base nas últimas ordens de produção (10 por padrão), ajustada por Time Efficiency. Configure-as como Fixed durante o teste ou aceite que os dados de entrada vão variar. As operações pertencem a cada lista de materiais, sem um cadastro compartilhado de roteiros de produção. Por isso, cada lista precisa ser revisada individualmente.
  • Calendários com problemas. Todo centro de trabalho precisa de um calendário de horários de trabalho. O programador do próprio Odoo busca disponibilidade até 700 dias à frente e então interrompe o processo com a mensagem “Impossible to plan the workorder” (não é possível programar a ordem de produção). Corrija os calendários antes da primeira carga.
  • Unidades de medida. mrp.bom.line tem seu próprio product_uom_id, que pode ser diferente da unidade de estoque do produto. Faça a conversão antes de verificar a disponibilidade de materiais.

Quem configura a integração com o Odoo

Cada fábrica usa o Odoo de um jeito: tem suas próprias operações nas listas de materiais, calendários dos centros de trabalho, centros de trabalho alternativos e módulos personalizados. A equipe do SkyPlanner traz a experiência necessária para mapear corretamente os dados dessa configuração.

  1. A equipe do SkyPlanner configura a integração de acordo com seu ambiente Odoo durante a implantação e presta suporte após a entrada em operação. A integração usa a API REST e os webhooks do SkyPlanner, além da API JSON-2 ou RPC do Odoo. Esse é o caminho padrão.
  2. Seu parceiro Odoo pode participar. Ele conhece sua configuração e seus módulos personalizados e pode desenvolver com a mesma API REST documentada. Essa API permite ler e gravar ordens, produtos, materiais, etapas de processo e apontamentos de tempo, com autenticação JWT e documentação Swagger/OpenAPI.
  3. Seus próprios desenvolvedores podem fazer o mesmo, geralmente com um pequeno middleware junto ao Odoo ou com um módulo no Odoo.sh ou na instalação local. Uma chave de API é suficiente para começar (tutorial de integração), e a equipe do SkyPlanner ajuda quando necessário.

Esse mesmo modelo já está em operação com outros ERPs. Na Laboratory & Allied, a equipe interna de TI desenvolveu a integração com o SAP Business One em grande parte por conta própria, com a ajuda do SkyPlanner. A UTU usa o SkyPlanner junto com seu ERP NetSuite.

Por que a integração compensa

É a gravação dos dados de volta no Odoo que faz a integração gerar valor no dia a dia. Quando esse fluxo está em operação:

  • As ordens de produção do Odoo recebem datas efetivas para execução. O motor Arcturus AI sequencia todas as ordens de fabricação em aberto em segundos. As datas e os centros de trabalho escolhidos são gravados em mrp.workorder e exibidos nas visualizações de planejamento do Odoo.
  • Ninguém reprograma manualmente. O Autopilot reprograma a produção automaticamente quando há mudanças, e o webhook envia as novas datas ao Odoo.
  • O chão de fábrica fecha o ciclo. Os operadores apontam o trabalho pelo celular ou tablet com Mobile Confirmations, Production Timer e Quick Log Mode, e os Time Logs são enviados ao Odoo para controle de estoque e custeio. Programação e execução funcionam em uma única ferramenta, tanto no Community quanto no Enterprise.
  • A programação considera restrições que o Odoo não considera. Uma matriz de tempos de preparação define as trocas conforme a sequência de cada par de produtos. As ferramentas são recursos de capacidade finita compartilhados entre máquinas, e uma operação pode exigir vários operadores ao mesmo tempo. O motor recorre a máquinas ou profissionais alternativos quando o recurso principal não está disponível. As datas gravadas de volta em mrp.workorder respeitam todas essas restrições.
  • A chegada dos materiais orienta a programação. O estoque disponível e os pedidos de compra em aberto no Odoo alimentam a programação baseada em materiais. Os componentes encomendados são considerados disponíveis na data de entrega do pedido de compra, e o estoque é atualizado quando o pedido é marcado como Delivered. Cada operação é verificada em relação ao que está no almoxarifado e ao que está a caminho.

Você pode avaliar a programação antes de qualquer trabalho de integração. Inicie o teste gratuito de 30 dias com arquivos CSV exportados e veja suas próprias ordens de produção do Odoo no Gantt, com até 20 estações de trabalho e sem cartão de crédito. Os preços começam em 199 € por mês, com 5 estações de trabalho incluídas, cobrança mensal e cancelamento a qualquer momento. O orçamento da integração é apresentado antecipadamente, junto com seu plano, de acordo com seu processo e suas necessidades. Assim, você conhece o custo total antes de começar. Veja os recursos e os clientes ou agende uma demonstração.

Avaliações de fabricantes sobre o SkyPlanner

Kalle Kalliomäki, especialista em cadeia de suprimentos da UTU, na área de produção de quadros elétricos em Ulvila

2 heconomizadas por semana

“Com o SkyPlanner, nosso planejamento da produção saiu das planilhas do Excel para a otimização da produção em tempo real.”

Kalle Kalliomäki, especialista em cadeia de suprimentos
UTU · Quadros elétricos e equipamentos de manobra

O planejamento da produção economiza 2 horas de trabalho por semana, e uma nova fila de operações chega à linha em segundos.

Leia o depoimento da UTU

Operadores com trajes para salas limpas em uma linha de envase de frascos na fábrica farmacêutica da Laboratory & Allied em Nairóbi

+90%de eficiência na produção

“A eficiência na produção aumentou 90%.”

Abdul Rucyinga, diretor de TI
Laboratory & Allied · Indústria farmacêutica

A eficiência na produção aumentou 90%, e um plano otimizado para três meses, abrangendo todos os postos de trabalho, fica pronto em menos de 30 minutos.

Leia o depoimento da Laboratory & Allied

Hannu Ryynänen, CEO da Mamec, no galpão de produção da empresa em Lohja

1.000sde ordens de produção programadas automaticamente

“Hoje temos outro controle da produção, e nossa compreensão da capacidade está em um patamar completamente diferente.”

Hannu Ryynänen, CEO
Mamec · Misturadores industriais, bombas e fabricação sob contrato de produtos de alta tecnologia

Milhares de ordens de produção são programadas automaticamente, e toda a organização tem uma visão da produção em tempo real.

Leia o depoimento da Mamec

Vista aérea da fábrica de sistemas de segurança para telhados da Piristeel em Kauhava

99,2%de pontualidade de entrega

“O SkyPlanner deu visibilidade aos gargalos e trouxe mais clareza à gestão da produção.”

Toni Tuori, gerente de produção
Piristeel · Sistemas de segurança para telhados e de escoamento de águas pluviais

A pontualidade de entrega chegou a 99,2% neste ano, e a programação economiza até quatro horas de trabalho por dia.

Leia o depoimento da Piristeel

Perguntas frequentes

A integração funciona no Odoo Online?

No plano Custom, sim, por meio da API externa. Os planos One App Free e Standard não têm acesso à API externa, e o Standard não permite módulos personalizados. Por isso, nesses planos, a integração se limita à importação e exportação de arquivos CSV/XLSX.

Devemos usar JSON-2 ou XML-RPC?

JSON-2 no Odoo 19.0 e nas versões posteriores. XML-RPC e JSON-RPC ainda são necessários nas versões 16.0 a 18.0, mas a remoção de ambos está prevista para o Odoo 22.

Como a programação volta para o Odoo?

Pelo método write do ORM em cada mrp.workorder: POST /json/2/mrp.workorder/write com ids e vals na versão 19.0, ou execute_kw com write via XML-RPC ou JSON-RPC nas versões 16.0 a 18.0. Os valores são date_start, date_finished (date_planned_start e date_planned_finished na 16.0) e, se houver alteração, workcenter_id. O Odoo também move a reserva de capacidade do centro de trabalho, de modo que suas visualizações de planejamento exibem as datas do SkyPlanner.

Como os apontamentos dos operadores chegam ao Odoo?

Como Time Logs: a integração cria registros em mrp.workcenter.productivity vinculados à ordem de produção, com início, fim e motivo de perda do tipo Productive. Em seguida, chama button_finish quando a operação é concluída. Cada confirmação é lançada uma única vez, para que novas tentativas não dupliquem o tempo apontado.

Quem mantém a integração depois da entrada em operação?

A equipe do SkyPlanner configura a integração durante a implantação e oferece suporte após a entrada em operação, inclusive para ajustes quando a configuração do seu Odoo mudar. Se o seu parceiro ou seus desenvolvedores criarem a integração, eles terão como base a API REST documentada e a documentação do SkyPlanner, com ajuda da equipe quando necessário.

O que acontece com as ordens de produção que já foram iniciadas?

Não as altere ao gravar os dados de volta no Odoo. O Odoo bloqueia a desprogramação de uma MO quando uma ordem de produção está em andamento ou concluída. O SkyPlanner lê o estado e o progresso dessas ordens e programa o trabalho restante respeitando o que já está em execução ou concluído.

Quanto tempo leva a integração com o Odoo?

A implementação normalmente é concluída em poucas semanas após o início da implantação. Comece pelo teste de 30 dias com arquivos CSV exportados. Assim, a programação é validada com seus próprios dados do Odoo antes do início do trabalho com a API.