Se conecta con sistemas ERP y MES como

Integraciones / ERP / Odoo

Guía de integración de Odoo con SkyPlanner APS para la programación de la producción

Esta guía explica a partners de Odoo, desarrolladores y responsables de TI cómo conectar Odoo Manufacturing con SkyPlanner APS. Para conocer los argumentos de negocio y lo que ya permite hacer el botón Plan de Odoo, consulta la página de programación de la producción con Odoo y ¿Permite Odoo programar la producción respetando la capacidad real de máquinas y personal?.

Diagrama de Gantt de SkyPlanner APS con tareas programadas en distintas estaciones de trabajo y una lista de pedidos debajo.

Odoo sigue siendo el sistema de referencia para productos, listas de materiales, operaciones, órdenes de producción, existencias y cálculo de costes. A partir de esos datos, SkyPlanner elabora el programa con su motor Arcturus. La integración con Odoo es bidireccional:

  • Se importan las órdenes de producción, las órdenes de fabricación, las operaciones de las listas de materiales, los centros de trabajo y los pedidos de compra.
  • El inicio y el fin previstos y los centros de trabajo se actualizan en mrp.workorder.
  • El avance y los tiempos registrados se devuelven a Odoo como Time Logs.
  • Los webhooks de SkyPlanner envían los cambios del programa en cuanto se producen.

Durante la puesta en marcha, el equipo de SkyPlanner configura la integración mediante la API externa estándar de Odoo, adaptándola a tu versión, alojamiento y personalizaciones. También ofrece soporte tras la entrada en producción. Esta guía está dirigida a partners y desarrolladores que quieran participar o desarrollar por su cuenta sobre la API REST documentada de SkyPlanner (referencia de la API). La gestión de productos, materiales y pedidos de compra se describe en la documentación pública de SkyPlanner.

Paso cero: comprobar el plan y el alojamiento de Odoo

Primero averigua qué modalidad de Odoo utiliza el cliente. Eso determina cómo abordar la integración.

ConfiguraciónAPI externaMódulos personalizadosVía de integración
Odoo Online, One App Free o StandardNoNoCSV/XLSX, o cambiar al plan Custom
Odoo Online, plan CustomSíNoAPI externa
Odoo.sh (plan Custom)SíSíAPI externa, módulo opcional
En instalaciones propias, Community o EnterpriseSíSíAPI externa, módulo opcional

La documentación de la API de Odoo indica que el acceso a la API externa está «only available on Custom Odoo pricing plans» (disponible solo en los planes Custom de Odoo), no en One App Free ni en Standard. Su página de precios describe Standard como una modalidad alojada en Odoo Online «without custom modules» (sin módulos personalizados). Compruébalo en la fase inicial, no a mitad del desarrollo.

Opciones de integración de Odoo

OpciónVersionesAutenticaciónFunción en una integración de programación de la producción
API externa JSON-2: POST /json/2/<model>/<method>Nueva en 19.0Clave de API en Authorization: bearer <key>, con la cabecera opcional X-Odoo-DatabaseOpción predeterminada para nuevos desarrollos: search_read para leer y write para actualizar las fechas en Odoo
XML-RPC / JSON-RPC externos: /xmlrpc/2, /jsonrpc, servicios common, objectHasta 19.0; retirada previstacommon.authenticate con usuario y contraseña o clave de API, seguido de execute_kwNecesario para clientes con versiones de 16.0 a 18.0
Controladores personalizados en un móduloTodasPor ruta, p. ej., auth='bearer'Envío de datos combinados: una orden de producción con sus órdenes de fabricación en una sola llamada
Reglas de automatización: «Send Webhook Notification»Documentadas desde 17.0POST saliente a una URLEnvío al crear o editar órdenes de producción y órdenes de fabricación
Importación de registros (CSV, XLSX) y exportaciónTodasSesión de usuarioDatos de prueba y cargas puntuales de datos maestros

Prepare ya la transición. Odoo ha previsto la retirada de XML-RPC y JSON-RPC en Odoo 22 (otoño de 2028) y Odoo Online 21.1 (invierno de 2027). Desarrolle sobre JSON-2 para 19.0 y encapsule el acceso por RPC en un único adaptador para las bases de datos más antiguas, de modo que la actualización solo requiera un cambio. La retirada no afecta a los controladores personalizados con @route(type='jsonrpc').

Autenticación

Crea un usuario exclusivo para la integración, con permisos de lectura en Manufacturing e Inventory y de escritura en las órdenes de fabricación. Genera su clave en Preferences > Account Security > New API Key. En 19.0, las claves duran como máximo tres meses, por lo que el middleware debe gestionar su rotación y generar una alerta ante fallos de autenticación. Sin estas medidas, una clave caducada detiene la sincronización sin que nadie lo advierta. Por parte de SkyPlanner, la API REST utiliza JWT, de modo que el middleware almacena ambas credenciales.

Cada llamada JSON-2 se ejecuta en su propia transacción SQL, por lo que una escritura repartida entre varias llamadas no es atómica. Realiza las escrituras por orden de fabricación y registra cada resultado.

Eventos

Odoo envía los cambios mediante reglas de automatización. Una regla sobre mrp.production o mrp.workorder con el activador «On create and edit» y la acción «Send Webhook Notification» envía un POST con los campos seleccionados a una URL. Cree la regla en Studio o, en modo desarrollador, desde el formulario Automation Rules. Combínela con consultas periódicas mediante search_read sobre write_date para detectar importaciones y cualquier cambio que la regla no haya recogido. En sentido contrario, los webhooks de SkyPlanner envían los cambios de programación y estado en cuanto se producen.

Los nombres de los campos varían entre versiones. En 19.0, cada base de datos muestra sus modelos, campos y métodos en /doc; en versiones anteriores, llame a fields_get. Defina las correspondencias a partir de esa información, no de memoria.

Mapeo de datos: de Odoo a SkyPlanner

Modelo de OdooObjeto de SkyPlannerDirecciónFrecuencia
product.product / product.template (default_code, uom_id, qty_available)Producto o materialOdoo → SkyPlannerCarga inicial y después a diario o cuando haya cambios
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproductProducto multinivel, necesidades de materiales por operaciónOdoo → SkyPlannerCuando haya cambios
mrp.routing.workcenter (pestaña Operations: workcenter_id, sequence, time_mode, time_cycle_manual, blocked_by_operation_ids)Operaciones del proceso con su secuencia y tiempo de ejecuciónOdoo → SkyPlannerCuando haya cambios
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids)Estación de trabajo, eficiencia, preparación y limpieza, estaciones de trabajo alternativasOdoo → SkyPlanner; después se mantiene en SkyPlannerCarga inicial
mrp.workcenter.capacity (capacity)Piezas por ciclo, tiempos de preparación y limpieza específicos de cada productoOdoo → SkyPlannerCarga inicial
resource.calendar, resource.calendar.attendance, resource.calendar.leavesTurnos y ausenciasOdoo → SkyPlannerCarga inicial; ausencias cuando haya cambios
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids)Orden con fecha de entrega y prioridadOdoo → SkyPlannerWebhook al confirmar, más consultas periódicas
mrp.workorder (operation_id, workcenter_id, duration_expected, state)Tarea en una estación de trabajoOdoo → SkyPlannerWebhook y consultas periódicas
stock.quant, stock.move (movimientos de componentes)Existencias y necesidades de materiales para programar según la disponibilidad de materialesOdoo → SkyPlannerPeriódicamente, p. ej., cada 15 a 60 minutos
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received)Pedidos de compra y materiales pendientes de recepción, disponibles en la fecha de entrega previstaOdoo → SkyPlannerWebhook al confirmar o editar el pedido de compra, más las mismas consultas periódicas
Inicio, fin y estación de trabajo previstosmrp.workorder.date_start, date_finished, workcenter_idSkyPlanner → OdooAl cambiar la programación, mediante un webhook de SkyPlanner
Mobile Confirmations, registros de tiempomrp.workcenter.productivity (Time Logs: workcenter_id, workorder_id, date_start, date_end, loss_id)SkyPlanner → OdooCon cada confirmación
Cantidad producida, operación terminadaqty_producing en la orden de fabricación y después button_finish; button_mark_done en la orden de producciónSkyPlanner → Odoo, o registro en Odoo Shop FloorCon cada confirmación

Patrones de integración

Primero, los datos maestros.

Carga los centros de trabajo y los calendarios; después, los productos, las listas de materiales y las operaciones, que hacen referencia a los centros de trabajo. Durante la prueba de 30 días, esas mismas listas se importan mediante archivos CSV exportados. La herramienta de importación y exportación de Odoo funciona en cualquier vista de lista.

Sincronización de órdenes.

Importe las órdenes de producción en estado confirmed y progress junto con sus órdenes de fabricación. Excluya las órdenes de producción en borrador o trátelas como demanda provisional. Los subconjuntos con su propia lista de materiales pueden llegar como órdenes de producción subordinadas independientes, y Odoo planifica cada orden de producción por separado. Asócielos a subproductos de SkyPlanner para que los subconjuntos terminen antes de que empiece la orden principal.

Escritura del programa en Odoo.

Cuando cambia la programación, un webhook de SkyPlanner activa la integración, que llama al método write del ORM en cada mrp.workorder afectado. En Odoo 19.0, esto supone una solicitud JSON-2 por orden de fabricación:

« 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}} «

JSON-2 recibe cada argumento del método por su nombre, además de ids y context, por lo que el argumento de write(vals) se envía bajo la clave vals. En las versiones de 16.0 a 18.0, la misma llamada se ejecuta como execute_kw(db, uid, key, 'mrp.workorder', 'write', [[4711], vals]) mediante XML-RPC o JSON-RPC, y en 16.0 las claves son date_planned_start y date_planned_finished. Las fechas y horas se envían en UTC. Siga estas reglas para escribir los datos correctamente:

  • Envía ambas fechas en la misma llamada.
  • Añada workcenter_id solo cuando el motor haya elegido una máquina alternativa.
  • Escribe solo en los campos de programación, nunca en las cantidades ni en las listas de materiales.

Al escribir las fechas, se desplaza la reserva del centro de trabajo en Odoo, por lo que sus vistas de planificación muestran el programa de SkyPlanner.

De la planta a Odoo. Los operarios registran el trabajo en SkyPlanner Mobile Confirmations. Para cada confirmación, la integración llama a create en mrp.workcenter.productivity (JSON-2: POST /json/2/mrp.workcenter.productivity/create con vals_list). Rellena workorder_id, workcenter_id, date_start, date_end y un loss_id de tipo Productive, y el tiempo de mano de obra y los costes se contabilizan en Odoo.

Cuando termina una operación, la integración establece la cantidad producida y llama a button_finish en la orden de fabricación. La última orden de fabricación deja la orden de producción lista para button_mark_done. Cada confirmación se registra una sola vez, y el identificador de su registro en Odoo se guarda junto al registro de tiempo de SkyPlanner, de modo que un reintento del webhook nunca crea un segundo Time Log.

En las plantas que utilizan la aplicación Shop Floor de Enterprise, el flujo se invierte: SkyPlanner lee el estado de la orden de fabricación y qty_produced, y Autopilot reprograma automáticamente cuando cambia la producción.

Responsabilidad sobre los datos. Deja las reglas por escrito antes de la entrada en producción:

DatosSistema responsable
Productos, listas de materiales, operaciones, cantidades y estado de las órdenes de producciónOdoo
Secuencia de las órdenes de fabricación, horas de inicio y fin, elección del centro de trabajoSkyPlanner
Matriz de tiempos de preparación y cambio, requisitos de herramientas y operarios, recursos alternativosSkyPlanner
Calendarios de los centros de trabajo y Time OffUn único sistema, elegido durante la definición del alcance
Time Logs, existencias y cálculo de costesOdoo, a partir de las confirmaciones de SkyPlanner

Los planificadores deben dejar de pulsar Plan y Unplan en Odoo para las órdenes de producción que programa SkyPlanner. De lo contrario, Odoo reserva sus propias franjas y sobrescribe las fechas de SkyPlanner.

Fases habituales del proyecto

La implantación suele completarse en unas semanas desde el inicio de la puesta en marcha. Antes, la prueba gratuita de 30 días funciona con exportaciones CSV de tus propios datos de Odoo. El proyecto incluye:

  1. Correspondencia de datos maestros: modelos y campos de Odoo por versión (consulte /doc o fields_get), unidades de medida y sistema encargado de mantener los calendarios y Time Off.
  2. Depuración: revisar los calendarios de los centros de trabajo, Setup Time y Cleanup Time, y utilizar duraciones Fixed en lugar de Computed en las operaciones de las listas de materiales.
  3. Carga inicial: productos, centros de trabajo con sus calendarios, listas de materiales y sus operaciones.
  4. Sincronización de órdenes y pedidos de compra: órdenes de producción confirmadas y en curso con sus órdenes de fabricación, además de las líneas de purchase.order con sus fechas de llegada previstas.
  5. Escritura de la programación en Odoo: fechas y centros de trabajo en mrp.workorder, con rotación de las claves de API en Odoo.
  6. Confirmaciones de planta: enviar a Odoo los Time Logs y las finalizaciones de las órdenes de fabricación.
  7. Pruebas en paralelo con el programa actual, seguidas de la entrada en producción.

Problemas que conviene evitar en Odoo

  • Campos de fecha que han cambiado de nombre. Hasta 16.0, date_planned_start y date_planned_finished contenían las fechas previstas, y date_start/date_finished, las reales. Desde 17.0, date_start y date_finished son las fechas previstas. Si se copia la correspondencia de campos de un proyecto de 16.0, en 17+ se leen las fechas reales como previstas sin que se genere ningún aviso.
  • Las fechas de las órdenes de fabricación son reservas. En 19.0, date_start y date_finished de mrp.workorder se calculan a partir de un registro de resource.calendar.leaves (leave_id) en el calendario del centro de trabajo. Al escribir las fechas en la orden de fabricación, se actualiza esa reserva. Nunca escriba directamente en la tabla de ausencias.
  • Las órdenes de fabricación iniciadas bloquean la acción Unplan. Odoo impide desplanificar una orden de producción cuando aparece «Some work orders have already started» (algunas órdenes de fabricación ya se han iniciado). Al actualizar los datos en Odoo, omita las órdenes de fabricación en estado progress o done y mueva solo las que no hayan empezado.
  • Las duraciones varían. Las operaciones configuradas como Computed toman su duración de las últimas órdenes de fabricación (10 por defecto), ajustada según Time Efficiency. Configúralas como Fixed para la prueba o acepta que los datos de entrada varíen. Las operaciones se definen en cada lista de materiales, sin un maestro compartido de rutas de fabricación, por lo que hay que depurar cada lista por separado.
  • Calendarios incorrectos. Cada centro de trabajo necesita un calendario de horarios laborales. El planificador de Odoo busca huecos hasta 700 días en el futuro y después se detiene con el mensaje «Impossible to plan the workorder» (no se puede programar la orden de fabricación). Corrige los calendarios antes de la primera carga.
  • Unidades de medida. mrp.bom.line tiene su propio product_uom_id, que puede diferir de la unidad de inventario del producto. Convierta las unidades antes de comprobar la disponibilidad de materiales.

Quién configura la integración con Odoo

Cada planta utiliza Odoo de una forma distinta: con sus propias operaciones en las listas de materiales, calendarios de centros de trabajo, centros alternativos y módulos personalizados. El equipo de SkyPlanner aporta la experiencia necesaria para ajustar el mapeo a esa configuración.

  1. El equipo de SkyPlanner configura la integración según tu entorno de Odoo durante la puesta en marcha y ofrece soporte tras la entrada en producción. La integración utiliza la API REST y los webhooks de SkyPlanner, junto con la API JSON-2 o RPC de Odoo. Esta es la vía habitual.
  2. Tu partner de Odoo puede participar. Conoce tu configuración y tus módulos personalizados y puede desarrollar sobre la misma API REST documentada. Esta permite leer y escribir órdenes, productos, materiales, pasos del proceso y registros de tiempo, con autenticación JWT y documentación Swagger/OpenAPI.
  3. Tus propios desarrolladores pueden hacer lo mismo, normalmente mediante un pequeño componente de middleware que se ejecuta junto con Odoo, o mediante un módulo en Odoo.sh o en instalaciones propias. Basta con una clave API para empezar (tutorial de integración), y el equipo de SkyPlanner ayuda cuando es necesario.

Este mismo modelo ya funciona en producción con otros ERP. En Laboratory & Allied, el equipo interno de TI desarrolló la integración con SAP Business One en gran medida por su cuenta, con ayuda de SkyPlanner. UTU utiliza SkyPlanner junto con su ERP NetSuite.

Por qué compensa la integración

Escribir los datos en Odoo es lo que permite aprovechar la integración en el trabajo diario. Una vez que funciona este envío de datos a Odoo:

  • Las órdenes de fabricación de Odoo tienen fechas reales de programación. El motor Arcturus AI secuencia todas las órdenes de producción abiertas en segundos. Las fechas y estaciones de trabajo que elige se escriben en mrp.workorder, donde las muestran las vistas de planificación de Odoo.
  • Nadie reprograma a mano. Autopilot reprograma automáticamente cuando cambia la producción, y el webhook envía las nuevas fechas a Odoo.
  • La planta cierra el ciclo. Los operarios registran el trabajo desde el móvil o la tableta con Mobile Confirmations, Production Timer y Quick Log Mode, y los Time Logs se envían a Odoo para la gestión de existencias y el cálculo de costes. La programación y la ejecución se gestionan en una sola herramienta, tanto en Community como en Enterprise.
  • La programación respeta restricciones que Odoo no contempla. Una matriz de tiempos de preparación define los tiempos de cambio según la secuencia para cada par de productos. Las herramientas son recursos productivos de capacidad limitada compartidos entre máquinas, y una tarea puede requerir varios operarios a la vez. El motor recurre a máquinas o personal alternativos cuando la opción principal no está disponible. Las fechas que se actualizan en mrp.workorder respetan todas estas restricciones.
  • La llegada de materiales marca el programa. Las existencias disponibles y los pedidos de compra abiertos de Odoo alimentan la programación en función de los materiales. Los componentes pedidos se consideran disponibles en la fecha de entrega del pedido de compra, y las existencias se actualizan cuando este se marca como Delivered. Para cada tarea se comprueba qué hay en el almacén y qué está en camino.

Puedes evaluar el programa antes de empezar a trabajar en la integración. Inicia la prueba gratuita de 30 días con exportaciones CSV y visualiza tus propias órdenes de fabricación de Odoo en el Gantt, con hasta 20 puestos de trabajo y sin tarjeta de crédito. El precio parte de 199 € al mes con 5 puestos de trabajo incluidos, facturación mensual y cancelación en cualquier momento. La integración se presupuesta de antemano según tus procesos y necesidades, junto con tu plan, para que conozcas el coste total antes de empezar. Consulta las funcionalidades y los clientes, o reserva una demo.

Opiniones de fabricantes sobre SkyPlanner

Kalle Kalliomäki, especialista en cadena de suministro de UTU, en la planta de producción de cuadros eléctricos de Ulvila

2 hahorradas cada semana

“Con SkyPlanner, hemos pasado de planificar la producción en hojas de Excel a optimizarla en tiempo real.”

Kalle Kalliomäki, especialista en cadena de suministro
UTU · Cuadros eléctricos y aparamenta

La planificación de la producción ahorra 2 horas de trabajo cada semana, y las nuevas colas de trabajo llegan a la línea en segundos.

Leer el testimonio de UTU

Operarios con trajes de sala limpia en una línea de llenado de botellas de la planta farmacéutica de Laboratory & Allied en Nairobi

+90%de eficiencia en producción

«La eficiencia en producción ha aumentado un 90%.»

Abdul Rucyinga, responsable de TI
Laboratory & Allied · Fabricación farmacéutica

La eficiencia en producción ha aumentado un 90%, y elaborar un plan optimizado de tres meses para todos los puestos de trabajo lleva menos de 30 minutos.

Leer el testimonio de Laboratory & Allied

Hannu Ryynänen, director general de Mamec, en la nave de producción de la empresa en Lohja

1.000sde órdenes de fabricación programadas automáticamente

«Ahora controlamos la producción de otra manera y conocemos nuestra capacidad a un nivel completamente distinto.»

Hannu Ryynänen, director general
Mamec · Mezcladoras industriales, bombas y fabricación por contrato de alta tecnología

Miles de órdenes de fabricación se programan automáticamente, y toda la organización dispone de una visión de la producción en tiempo real.

Leer el testimonio de Mamec

Vista aérea de la fábrica de sistemas de seguridad para cubiertas de Piristeel en Kauhava

99,2%de cumplimiento de plazos de entrega

«SkyPlanner nos ha dado la visibilidad necesaria para identificar los cuellos de botella y ha aportado claridad a la gestión de la producción.»

Toni Tuori, responsable de producción
Piristeel · Sistemas de seguridad para cubiertas y de evacuación de aguas pluviales

El cumplimiento de plazos de entrega ha alcanzado el 99,2% este año, y la programación permite ahorrar hasta cuatro horas de trabajo al día.

Leer el testimonio de Piristeel

Preguntas frecuentes

¿Funciona la integración en Odoo Online?

Sí, en el plan Custom, a través de la API externa. One App Free y Standard no tienen acceso a la API externa, y Standard no admite módulos personalizados. Por tanto, en esos planes solo se pueden importar y exportar archivos CSV/XLSX.

¿Debemos usar JSON-2 o XML-RPC?

JSON-2 en Odoo 19.0 y versiones posteriores. XML-RPC y JSON-RPC siguen siendo necesarios para las versiones de la 16.0 a la 18.0, pero está previsto eliminarlos en Odoo 22.

¿Cómo se devuelve la programación a Odoo?

Mediante el método write del ORM en cada mrp.workorder: POST /json/2/mrp.workorder/write con ids y vals en 19.0, o execute_kw con write mediante XML-RPC o JSON-RPC en las versiones de 16.0 a 18.0. Los valores son date_start, date_finished (date_planned_start y date_planned_finished en 16.0) y, si ha cambiado, workcenter_id. Odoo mueve también la reserva del centro de trabajo, de modo que sus vistas de planificación muestran las fechas de SkyPlanner.

¿Cómo llegan a Odoo las confirmaciones de los operarios?

Como Time Logs: la integración crea registros de mrp.workcenter.productivity asociados a la orden de fabricación, con inicio, fin y un motivo de pérdida Productive, y después llama a button_finish cuando termina la operación. Cada confirmación se registra una sola vez, por lo que los reintentos no duplican el tiempo.

¿Quién mantiene la integración tras la puesta en marcha?

El equipo de SkyPlanner configura la integración durante la incorporación y ofrece soporte tras la puesta en marcha, incluidas las adaptaciones necesarias cuando cambia la configuración de Odoo. Si la desarrolla su partner o su equipo de desarrollo, cuentan con la API REST documentada y la documentación de SkyPlanner, además de la ayuda del equipo cuando la necesiten.

¿Qué ocurre con las órdenes de fabricación que ya se han iniciado?

No las modifique al devolver los datos a Odoo. Odoo impide desprogramar una MO cuando una orden de fabricación ya está en curso o terminada. SkyPlanner lee su estado y avance, y los tiene en cuenta al programar el trabajo restante.

¿Cuánto tarda la integración con Odoo?

La implantación suele completarse en unas semanas desde el inicio de la incorporación. Empiece con la prueba de 30 días utilizando exportaciones CSV: así la programación quedará validada con sus propios datos de Odoo antes de comenzar el trabajo con la API.