Integrações / ERP / Odoo
Guia de integração do Odoo com o SkyPlanner APS para programação da produção
Este guia mostra aos parceiros Odoo, programadores e responsáveis de TI como ligar o Odoo Manufacturing ao SkyPlanner APS. Para conhecer as vantagens para o negócio e o que o botão Plan do Odoo já faz, consulte a página de programação da produção com o Odoo e O Odoo permite programar a produção respeitando a capacidade real das máquinas e do pessoal?.
O Odoo continua a ser o sistema de referência para produtos, listas de materiais, operações, ordens de produção, existências e cálculo de custos. O SkyPlanner usa estes dados para criar a programação com o seu motor Arcturus. A integração com o Odoo funciona nos dois sentidos:
- São importadas ordens de produção, ordens de fabrico, operações das listas de materiais, centros de trabalho e encomendas a fornecedores.
- O início e o fim previstos e os centros de trabalho são gravados no Odoo em
mrp.workorder. - O progresso e os tempos registados são devolvidos ao Odoo como Time Logs.
- Os webhooks do SkyPlanner enviam as alterações à programação assim que ocorrem.
Durante a implementação inicial, a equipa SkyPlanner configura a integração através da API externa padrão do Odoo, adaptando-a à sua versão, alojamento e personalizações. Após a entrada em produção, continua a prestar suporte. Este guia destina-se a parceiros e programadores que queiram participar ou desenvolver a sua própria integração com a API REST documentada do SkyPlanner (referência da API). O tratamento de produtos, materiais e encomendas a fornecedores está descrito na documentação pública do SkyPlanner.
Passo zero: verificar o plano e o alojamento do Odoo
Comece por identificar a instalação Odoo que o cliente utiliza. É isso que determina a abordagem.
| Configuração | API externa | Módulos personalizados | Abordagem prática |
|---|---|---|---|
| Odoo Online, One App Free ou Standard | Não | Não | CSV/XLSX ou mudança 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 indica que o acesso à API externa está “only available on Custom Odoo pricing plans” (disponível apenas nos planos Custom do Odoo), não nos planos One App Free ou Standard. A página de preços descreve o Standard como alojado no Odoo Online “without custom modules” (sem módulos personalizados). Esclareça este ponto no levantamento inicial, não a meio do desenvolvimento.
Opções de integração do Odoo
| Opção | Versões | Autenticação | Função 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 | Opção predefinida para novas implementações: search_read para leitura, write para gravar as datas no Odoo |
XML-RPC / JSON-RPC externos: /xmlrpc/2, /jsonrpc, serviços common, object | Até à versão 19.0; remoção prevista | common.authenticate com nome de utilizador e palavra-passe ou chave de API, seguido de execute_kw | Necessário para clientes nas versões 16.0 a 18.0 |
| Controladores personalizados num módulo | Todas | Por rota, por exemplo, auth='bearer' | Dados combinados: uma ordem de produção com as respetivas ordens de fabrico numa única chamada |
| Regras de automatização: “Send Webhook Notification” (enviar notificação por webhook) | Na documentação desde a versão 17.0 | Envio de POST para um URL | Envio ao criar ou editar ordens de produção e ordens de fabrico |
| Importação de registos (CSV, XLSX) e exportação | Todas | Sessão do utilizador | Dados para o período de teste e carregamentos pontuais de dados mestre |
Prepare-se desde já para a remoção. A Odoo prevê remover XML-RPC e JSON-RPC no Odoo 22 (outono de 2028) e no Odoo Online 21.1 (inverno de 2027). Desenvolva sobre JSON-2 para a versão 19.0 e isole o acesso por RPC num único adaptador para bases de dados mais antigas. Assim, uma atualização exige apenas uma alteração. Os controladores personalizados com @route(type='jsonrpc') não são afetados pela remoção.
Autenticação
Crie um utilizador dedicado à integração, com acesso de leitura a Manufacturing e Inventory e de escrita às ordens de fabrico. Gere a respetiva chave em Preferences > Account Security > New API Key. Na versão 19.0, as chaves têm uma validade máxima de três meses, pelo que o middleware tem de assegurar a rotação de chaves e emitir um alerta em caso de falha de autenticação. Sem estas medidas, uma chave expirada interrompe a sincronização sem que ninguém se aperceba. Do lado do SkyPlanner, a API REST usa JWT, pelo que o middleware guarda ambas as credenciais.
Cada chamada JSON-2 é executada na sua própria transação SQL. Por isso, uma escrita repartida por várias chamadas não é atómica. Faça a escrita por ordem de fabrico e registe cada resultado.
Eventos
O Odoo envia alterações através de regras de automatização. Uma regra em mrp.production ou mrp.workorder, com o acionador On create and edit e a ação “Send Webhook Notification” (enviar notificação por webhook), envia um POST com os campos selecionados para um URL. Crie a regra no Studio ou, em modo de programador, no formulário Automation Rules. Combine-a com uma consulta periódica search_read sobre write_date para detetar importações e tudo o que tenha escapado à regra. No sentido inverso, os webhooks do SkyPlanner enviam as alterações à programação e ao estado à medida que ocorrem.
Os nomes dos campos variam entre versões. Na versão 19.0, cada base de dados apresenta os seus modelos, campos e métodos em /doc; nas versões anteriores, utilize fields_get. Faça o mapeamento com base nessa informação, 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 | Carregamento inicial, depois diariamente ou quando há alterações |
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproduct | Produto multinível, necessidades de materiais por etapa | Odoo → SkyPlanner | Quando há alterações |
mrp.routing.workcenter (separador Operations: 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 | Quando há alterações |
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids) | Centro de trabalho, eficiência, preparação e limpeza, centros de trabalho alternativos | Odoo → SkyPlanner, com manutenção posterior no SkyPlanner | Carregamento inicial |
mrp.workcenter.capacity (capacity) | Peças por ciclo, tempos de preparação e limpeza específicos de cada produto | Odoo → SkyPlanner | Carregamento inicial |
resource.calendar, resource.calendar.attendance, resource.calendar.leaves | Turnos e ausências | Odoo → SkyPlanner | Carregamento inicial; ausências quando há alterações |
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids) | Ordem com prazo e prioridade | Odoo → SkyPlanner | Webhook na confirmação, complementado por consulta periódica |
mrp.workorder (operation_id, workcenter_id, duration_expected, state) | Tarefa num centro de trabalho | Odoo → SkyPlanner | Webhook, complementado por consulta periódica |
stock.quant, stock.move (movimentos de componentes) | Existências e necessidades de materiais para programação em função dos materiais | Odoo → SkyPlanner | Periodicamente, por exemplo, com intervalos de 15 a 60 minutos |
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received) | Encomendas de compra e materiais a receber, disponíveis na data de entrega prevista | Odoo → SkyPlanner | Webhook na confirmação ou edição da encomenda de compra, complementado pela mesma consulta periódica |
| Início e fim previstos e centro de trabalho | mrp.workorder.date_start, date_finished, workcenter_id | SkyPlanner → Odoo | Quando a programação muda, através de um webhook do SkyPlanner |
| Mobile Confirmations, registos de tempos | 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 fabrico, seguido de button_finish; button_mark_done na ordem de produção | SkyPlanner → Odoo, ou registo no Odoo Shop Floor | A cada confirmação |
Padrões de integração
Primeiro, os dados mestre.
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. Durante o período experimental de 30 dias, estas mesmas listas são importadas a partir de exportações CSV. A ferramenta de importação e exportação do Odoo funciona em qualquer vista de lista.
Sincronização de ordens.
Importe as ordens de produção nos estados confirmed e progress com as respetivas ordens de fabrico. Exclua as ordens de produção em rascunho ou trate-as como procura provisória. Os subconjuntos com lista de materiais própria podem chegar como ordens de produção filhas separadas, e o Odoo planeia cada ordem de produção de forma independente. Mapeie-os para subprodutos do SkyPlanner, para que os subconjuntos fiquem concluídos antes de se iniciar a produção do produto pai.
Escrita da programação 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 afetado. No Odoo 19.0, isto corresponde a um pedido JSON-2 por ordem de fabrico:
“ 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, pelo 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]) por XML-RPC ou JSON-RPC e, na versão 16.0, as chaves são date_planned_start e date_planned_finished. As datas e horas são enviadas em UTC. Algumas regras garantem uma gravação correta:
- Envie ambas as datas na mesma chamada.
- Inclua
workcenter_idapenas quando o motor tiver escolhido uma máquina alternativa. - Escreva apenas nos campos de programação, nunca nas quantidades ou nas listas de materiais.
A escrita das datas desloca a reserva do centro de trabalho no próprio Odoo. Assim, as vistas de planeamento do Odoo apresentam o plano do SkyPlanner.
Do chão de fábrica de volta ao Odoo. Os operadores registam 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). 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 respetivos custos são registados no Odoo.
Quando uma operação fica concluída, a integração define a quantidade produzida e chama button_finish na ordem de fabrico. A última ordem de fabrico deixa a ordem de produção pronta para button_mark_done. Cada confirmação é registada uma única vez e o identificador do respetivo registo no Odoo fica guardado com o registo de tempos do SkyPlanner. Assim, a repetição de um webhook nunca cria um segundo Time Log.
Nas fábricas que utilizam a aplicação Enterprise Shop Floor, o fluxo é inverso: o SkyPlanner lê o estado da ordem de fabrico e qty_produced, e o Autopilot refaz automaticamente a programação quando a produção muda.
Responsabilidade pelos dados. Documente as regras antes da entrada em produção:
| Dados | Sistema responsável |
|---|---|
| Produtos, listas de materiais, operações, quantidades, estado da ordem de produção | Odoo |
| Sequência das ordens de fabrico, horas de início e fim, escolha do centro de trabalho | SkyPlanner |
| Matriz de tempos de preparação e mudança, requisitos de ferramentas e operadores, recursos alternativos | SkyPlanner |
| Calendários dos centros de trabalho e Time Off | Um único sistema, escolhido na definição do âmbito |
| Time Logs, existências e cálculo de custos | Odoo, alimentado pelas confirmações do SkyPlanner |
Os responsáveis pelo planeamento deixam de usar os botões Plan e Unplan do Odoo nas ordens de produção programadas pelo SkyPlanner. Caso contrário, o Odoo faz as suas próprias reservas, sobrepondo-as às datas do SkyPlanner.
Etapas habituais do projeto
A implementação fica normalmente concluída em poucas semanas após o início do processo de integração. Antes disso, o período experimental gratuito de 30 dias usa exportações CSV dos seus próprios dados do Odoo. O projeto em si inclui:
- Mapeamento dos dados mestre: modelos e campos do Odoo por versão (consulte
/docoufields_get), unidades de medida e definição do sistema que mantém os calendários e o Time Off. - Revisão dos dados: calendários dos centros de trabalho, Setup Time e Cleanup Time, e durações em modo Fixed em vez de Computed nas operações das listas de materiais.
- Carregamento inicial: produtos, centros de trabalho com os respetivos calendários, listas de materiais e respetivas operações.
- Sincronização de ordens e encomendas de compra: ordens de produção confirmadas e em curso com as respetivas ordens de fabrico, além das linhas de
purchase.ordercom as datas de chegada previstas. - Gravação da programação no Odoo: datas e centros de trabalho em
mrp.workorder, com rotação das chaves de API no Odoo. - Confirmações do chão de fábrica: envio de Time Logs e de conclusões de ordens de fabrico para o Odoo.
- Testes em paralelo com o plano atual, seguidos da entrada em produção.
Armadilhas a evitar no Odoo
- Campos de data com novos nomes. Até à versão 16.0,
date_planned_startedate_planned_finishedcontinham as datas previstas edate_start/date_finishedas datas reais. A partir da versão 17.0,date_startedate_finishedsão as datas previstas. Um mapeamento copiado de um projeto na versão 16.0 lê silenciosamente as datas reais como previstas nas versões 17+. - As datas das ordens de fabrico são reservas de capacidade. Na versão 19.0,
date_startedate_finishedemmrp.workordersão calculados a partir de um registo deresource.calendar.leaves(leave_id) no calendário do centro de trabalho. Gravar as datas na ordem de fabrico atualiza essa reserva. Nunca grave diretamente na tabela de ausências. - As ordens de fabrico já iniciadas impedem a ação Unplan. O Odoo recusa anular o planeamento de uma ordem de produção quando “Some work orders have already started” (algumas ordens de fabrico já foram iniciadas). Ao gravar os dados no Odoo, ignore as ordens de fabrico em
progressoudonee desloque apenas as que ainda não começaram. - As durações variam. As operações em modo Computed obtêm a duração a partir das últimas ordens de fabrico (10 por predefinição), ajustada pelo parâmetro Time Efficiency. Para o período experimental, mude para Fixed ou aceite que os dados de entrada variem. As operações pertencem a cada lista de materiais, sem dados mestre partilhados de gamas operatórias. Por isso, cada lista de materiais precisa da sua própria revisão.
- Calendários com erros. Cada centro de trabalho precisa de um calendário de horários de trabalho. O sistema de planeamento do próprio Odoo procura disponibilidade até 700 dias no futuro e depois para com a mensagem “Impossible to plan the workorder” (impossível programar a ordem de fabrico). Corrija os calendários antes do primeiro carregamento.
- Unidades de medida.
mrp.bom.linetem o seu próprioproduct_uom_id, que pode diferir da unidade de stock do produto. Faça a conversão antes de verificar a disponibilidade dos materiais.
Quem configura a integração com o Odoo
Cada fábrica utiliza o Odoo à sua maneira: operações nas listas de materiais, calendários dos centros de trabalho, centros de trabalho alternativos e módulos personalizados próprios. A equipa SkyPlanner traz a experiência necessária para fazer o mapeamento correto dessa configuração.
- A equipa SkyPlanner configura a integração de acordo com a sua instalação Odoo durante a implementação inicial e presta suporte após a entrada em produção. A integração usa a API REST e os webhooks do SkyPlanner e a API JSON-2 ou RPC do Odoo. Esta é a abordagem padrão.
- O seu parceiro Odoo pode participar. O parceiro conhece a sua configuração e os módulos personalizados e pode desenvolver a integração com a mesma API REST documentada. Esta permite ler e escrever ordens, produtos, materiais, etapas de processo e registos de tempos, com autenticação JWT e documentação Swagger/OpenAPI.
- Os seus próprios programadores podem fazer o mesmo, normalmente através de um pequeno middleware que funciona a par do Odoo, ou de um módulo no Odoo.sh ou numa instalação local. Basta uma chave de API para começar (tutorial de integração), e a equipa SkyPlanner ajuda sempre que necessário.
Este modelo já está em produção com outros ERP. Na Laboratory & Allied, a equipa interna de TI desenvolveu a integração com o SAP Business One em grande parte de forma autónoma, com a ajuda do SkyPlanner. A UTU utiliza o SkyPlanner a par do seu ERP NetSuite.
Porque compensa integrar
É o envio dos dados atualizados para o Odoo que torna a integração útil no dia a dia. Quando esse envio está a funcionar:
- As ordens de fabrico do Odoo passam a ter datas realistas. O motor Arcturus AI sequencia todas as ordens de produção em aberto em segundos. As datas e os centros de trabalho que escolhe são gravados em
mrp.workorder, onde ficam visíveis nas vistas de planeamento do Odoo. - Deixa de ser preciso replanear à mão. O Autopilot reprograma automaticamente quando a produção muda, e o webhook envia as novas datas para o Odoo.
- O chão de fábrica fecha o ciclo. Os operadores registam o trabalho no telemóvel ou tablet com Mobile Confirmations, Production Timer e Quick Log Mode. Os Time Logs são enviados para o Odoo para atualizar as existências e calcular os custos. A programação e a execução funcionam numa única ferramenta, tanto em Community como em Enterprise.
- A programação respeita restrições que o Odoo não contempla. Uma matriz de tempos de preparação define as mudanças entre cada par de produtos em função da sequência. As ferramentas são recursos de capacidade finita partilhados entre máquinas, e uma tarefa pode ocupar vários operadores em simultâneo. O motor recorre a máquinas ou pessoas alternativas quando o recurso principal não está disponível. As datas gravadas em
mrp.workorderrespeitam todas estas restrições. - O plano segue a chegada dos materiais. As existências disponíveis e as encomendas a fornecedores em aberto no Odoo alimentam a programação em função dos materiais. Os componentes encomendados são considerados disponíveis na data de entrega da encomenda, e as existências são atualizadas quando esta é marcada como Delivered. Para cada tarefa, verifica-se o que existe em armazém e o que está a caminho.
Pode avaliar a programação antes de qualquer trabalho de integração. Inicie o período experimental gratuito de 30 dias com exportações CSV e veja as suas próprias ordens de fabrico do Odoo no Gantt, com até 20 postos de trabalho e sem cartão de crédito. Os preços começam nos 199 € por mês, com 5 postos de trabalho incluídos, faturação mensal e cancelamento a qualquer momento. O orçamento da integração é apresentado antecipadamente, juntamente com o seu plano, de acordo com o seu processo e as suas necessidades. Assim, conhece o custo total antes de começar. Consulte as funcionalidades e os clientes ou agende uma demonstração.
Opiniões de fabricantes sobre o SkyPlanner
2 hpoupadas por semana
“Com o SkyPlanner, passámos do planeamento da produção em folhas de cálculo Excel para a otimização da produção em tempo real.”
Kalle Kalliomäki, especialista em cadeia de abastecimento
UTU · Quadros elétricos e aparelhagem de comutação
O planeamento da produção poupa 2 horas de trabalho por semana, e uma nova fila de tarefas chega à linha em segundos.
+90%de eficiência na produção
“A eficiência na produção aumentou 90%.”
Abdul Rucyinga, Responsável de TI
Laboratory & Allied · Indústria farmacêutica
A eficiência na produção aumentou 90%, e criar um plano otimizado de três meses para todos os postos de trabalho demora menos de 30 minutos.
1.000sde ordens de fabrico programadas automaticamente
“Temos agora um controlo diferente sobre a produção e a nossa compreensão da capacidade está a um nível completamente diferente.”
Hannu Ryynänen, CEO
Mamec · Misturadores industriais, bombas e fabrico por contrato de alta tecnologia
Milhares de ordens de fabrico são programadas automaticamente, e toda a organização tem uma visão da produção em tempo real.
99,2%de fiabilidade das entregas
“O SkyPlanner deu-nos visibilidade para identificar os estrangulamentos e tornou a gestão da produção mais clara.”
Toni Tuori, Responsável de Produção
Piristeel · Sistemas de segurança para coberturas e de drenagem de águas pluviais
A fiabilidade das entregas atingiu 99,2% este ano, e a programação permite poupar até quatro horas de trabalho por dia.
Perguntas frequentes
A integração funciona no Odoo Online?
No plano Custom, sim, através 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, estes planos estão limitados à importação e exportação de ficheiros CSV/XLSX.
Devemos usar JSON-2 ou XML-RPC?
JSON-2 no Odoo 19.0 e versões posteriores. As versões 16.0 a 18.0 ainda precisam de XML-RPC e JSON-RPC, mas a remoção de ambos está prevista para o Odoo 22.
Como é enviada a programação de volta para o Odoo?
Através do 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 por 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 versão 16.0) e, se tiver mudado, workcenter_id. O Odoo desloca também a reserva do centro de trabalho, pelo que as suas vistas de planeamento mostram as datas do SkyPlanner.
Como chegam ao Odoo as confirmações dos operadores?
Como Time Logs: a integração cria registos de mrp.workcenter.productivity associados à ordem de fabrico, com início, fim e um motivo de perda do tipo Productive, e chama button_finish quando a operação fica concluída. Cada confirmação é registada uma única vez, pelo que as novas tentativas não duplicam os tempos.
Quem mantém a integração após a entrada em produção?
A equipa SkyPlanner configura a integração durante a implementação inicial e presta suporte após a entrada em produção, incluindo as adaptações necessárias quando a configuração do Odoo muda. Se a integração for desenvolvida pelo seu parceiro ou pelos seus programadores, estes usam a API REST documentada e a documentação do SkyPlanner, com o apoio da equipa sempre que necessário.
O que acontece às ordens de fabrico que já foram iniciadas?
Não as altere ao escrever os dados de volta no Odoo. O Odoo impede a anulação do planeamento de uma MO assim que uma ordem de fabrico está em curso ou concluída. O SkyPlanner lê o estado e o progresso dessas ordens e programa o trabalho restante tendo-as em conta.
Quanto tempo demora a integração com o Odoo?
A implementação fica normalmente concluída em poucas semanas após o início do processo. Comece pela avaliação de 30 dias com dados exportados em CSV, para validar a programação com os seus próprios dados do Odoo antes de iniciar o trabalho com a API.