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?.
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ção | API externa | Módulos personalizados | Caminho recomendado |
|---|---|---|---|
| Odoo Online, One App Free ou Standard | Não | Não | CSV/XLSX ou migração para o plano Custom |
| Odoo Online, plano Custom | Sim | Não | API externa |
| Odoo.sh (plano Custom) | Sim | Sim | API externa, módulo opcional |
| Instalação local, Community ou Enterprise | Sim | Sim | API 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ção | Versões | Autenticação | Papel na integração com a programação da produção |
|---|---|---|---|
API externa JSON-2: POST /json/2/<model>/<method> | Introduzida na versão 19.0 | Chave de API em Authorization: bearer <key>, cabeçalho opcional X-Odoo-Database | Padrã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, object | Até a versão 19.0; remoção programada | common.authenticate com login e senha ou chave de API, seguido de execute_kw | Necessário para clientes nas versões 16.0 a 18.0 |
| Controladores personalizados em um módulo | Todas | Por 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.0 | Envio de POST para uma URL | Envio ao criar ou editar ordens de fabricação e ordens de produção |
| Importação de registros (CSV, XLSX) e exportação | Todas | Sessão do usuário | Dados 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 Odoo | Objeto do SkyPlanner | Sentido | Frequência |
|---|---|---|---|
product.product / product.template (default_code, uom_id, qty_available) | Produto ou material | Odoo → SkyPlanner | Carga 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.byproduct | Produto com estrutura multinível, necessidades de materiais por etapa | Odoo → SkyPlanner | A 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ção | Odoo → SkyPlanner | A 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 alternativos | Odoo → SkyPlanner; depois, manutenção no SkyPlanner | Carga inicial |
mrp.workcenter.capacity (capacity) | Peças por ciclo, tempos de setup e desmontagem específicos por produto | Odoo → SkyPlanner | Carga inicial |
resource.calendar, resource.calendar.attendance, resource.calendar.leaves | Turnos e ausências | Odoo → SkyPlanner | Carga 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 prioridade | Odoo → SkyPlanner | Webhook na confirmação, mais consultas periódicas |
mrp.workorder (operation_id, workcenter_id, duration_expected, state) | Operação em um centro de trabalho | Odoo → SkyPlanner | Webhook, 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 materiais | Odoo → SkyPlanner | Em 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 entrega | Odoo → SkyPlanner | Webhook na confirmação ou edição do pedido de compra, mais as mesmas consultas periódicas |
| Início e fim planejados e centro de trabalho | mrp.workorder.date_start, date_finished, workcenter_id | SkyPlanner → Odoo | A cada alteração da programação, via webhook do SkyPlanner |
| Mobile Confirmations, apontamentos de tempo | mrp.workcenter.productivity (Time Logs: workcenter_id, workorder_id, date_start, date_end, loss_id) | SkyPlanner → Odoo | A cada confirmação |
| Quantidade produzida, operação concluída | qty_producing na ordem de produção, seguido de button_finish; button_mark_done na ordem de fabricação | SkyPlanner → Odoo, ou registro no Odoo Shop Floor | A 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_idsomente 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:
| Dados | Sistema responsável |
|---|---|
| Produtos, listas de materiais, operações, quantidades e status das ordens de fabricação | Odoo |
| Sequência das ordens de produção, horários de início e término e escolha do centro de trabalho | SkyPlanner |
| Matriz de tempos de preparação e transição, requisitos de ferramentas e operadores e recursos alternativos | SkyPlanner |
| Calendários dos centros de trabalho e Time Off | Um único sistema, escolhido na definição de escopo |
| Time Logs, estoque e custeio | Odoo, 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:
- Mapeamento de dados mestres: modelos e campos do Odoo por versão (consulte
/docoufields_get), unidades de medida e definição de qual sistema mantém os calendários e o Time Off. - 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.
- Carga inicial: produtos, centros de trabalho com seus calendários, listas de materiais e suas operações.
- 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.ordercom as datas previstas de chegada. - Gravação da programação no Odoo: datas e centros de trabalho em
mrp.workorder, com rotação de chaves de API no Odoo. - 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.
- 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_startedate_planned_finishedarmazenavam as datas planejadas, edate_start/date_finished, as realizadas. A partir da 17.0,date_startedate_finishedsã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_startedate_finishedemmrp.workordersão calculados a partir de um registro deresource.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
progressoudonee 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.linetem seu próprioproduct_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.
- 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.
- 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.
- 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.workordere 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.workorderrespeitam 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
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.
+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.
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.
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.
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.