Odoo Rescue, ERP Recovery[Launched]

Odoo Rescue: reparación de un sistema operativo roto

Odoo Rescue: reparación de un sistema operativo roto preview

Arquitectura del sistema //

Odoo 19Odoo.shPythonXML-RPCBaseLinker APIShopifyAllegro APISendGridQWebMRP

🔹 1. Visión General Del Proyecto

El cliente era una empresa de fabricación y comercio que trabajaba con eco-packaging, almacenes, marketplaces, ventas B2B/B2C y operaciones internas en Odoo. El sistema ya era el centro del negocio, pero después de años de cambios manuales, módulos externos, importaciones y ajustes en vivo con Studio, se había convertido en un nudo operativo difícil de gobernar

La dirección no necesitaba otro pequeño arreglo de Odoo. Necesitaba un sistema único que conectara departamentos, empleados, almacén, producción, ventas, correo, CRM, marketplaces, e-commerce y operaciones finales en un flujo controlado

Mi rol fue el de rescue engineer: entrar en un ERP caótico, desmontar deuda técnica y de procesos, y reconstruir un modelo operativo end-to-end desde la recepción de materia prima hasta la venta del producto terminado

🔹 2. Punto De Partida

Deuda de infraestructura: Odoo corría en Hetzner con una mezcla de módulos custom y de terceros, algunos de los cuales no estaban listos para migrar a Odoo 19
Catálogo sin modelo claro: productos mezclados entre plantillas, variantes, bundles, empaques, EAN, SKU de BaseLinker y lógica de almacén. Parte de los registros había sido creada por importaciones defectuosas como duplicados separados
Base de contactos contaminada: duplicados, registros vacíos, entradas de prueba, formatos inconsistentes de datos bancarios, regiones y contactos
Almacén y producción sin estructura de control: BoMs, materias primas, códigos de barras, salas de almacenamiento e impresión de etiquetas existían, pero necesitaban estabilización y normalización
CRM y correo sin control completo: los mensajes se perdían en Discuss o en procesos manuales, los follow-ups los hacían managers a mano y las solicitudes de venta no tenían una ruta estable hacia quotation
Riesgos de seguridad y calidad: durante la auditoría encontré una vulnerabilidad histórica en Followers: un contacto externo había sido suscrito por error a discusiones internas y durante bastante tiempo recibió copias de correspondencia operativa. También existían scheduled actions / cron jobs y automatizaciones de fondo sin dueño claro

🔹 3. Alcance Del Trabajo

Migrar Odoo desde Hetzner a Odoo.sh / Odoo Cloud y adaptar el sistema a Odoo 19
Auditar módulos custom, conservar lo necesario, eliminar lo incompatible y estabilizar PBX y UI después de la actualización
Limpiar contactos, leads, datos bancarios y regiones
Normalizar catálogo de productos y nomenclatura de producción: plantillas, variantes, SKU, EAN, empaques, fotos, peso, dimensiones, materias primas y mapping de BaseLinker
Configurar lógica de almacén: BoM, materias primas RAW, códigos de barras, salas de almacenamiento, etiquetas y estructura production-ready
Configurar control de asistencia y disciplina operativa: la oficina debía trackear tiempo dentro de Odoo, mientras almacén y producción trabajaban mediante escaneo de códigos de barras
Construir automatización de correo y CRM: AI routing, lead qualification, deterministic rules, follow-ups y sales draft flow
Preparar e-commerce, portal B2B/B2C, integraciones Shopify / Allegro / delivery y tracking layer
Reintegrar el catálogo limpio, la lógica de almacén y los datos de producto en marketplaces y tienda online

🔹 4. Solución Y Ejecución

Infrastructure & Odoo 19 Migration

Audité el antiguo entorno Hetzner y la carpeta de módulos Odoo
ERP migrado a Odoo.sh / Odoo Cloud, con la base actualizada a Odoo 19
Código custom y consultas ORM adaptadas a la nueva versión del core
Migré y adapté un conjunto de módulos custom y de terceros para telefonía, HR, compras, procesos internos y extensiones de servicio de Odoo
Los módulos incompatibles de telefonía y OCA fueron retirados de la arquitectura objetivo para no arrastrar deuda técnica a la nueva instalación Odoo 19

Product Catalog Recovery

Audité el estado real del catálogo: productos, variantes, empaques, bundles, materias primas, SKU, EAN, fotos, precios, dimensiones y BaseLinker mapping estaban mezclados sin una lógica común
A partir del análisis técnico y una investigación data-driven preparé varias opciones de reestructuración, con riesgos e impactos para almacén, marketplaces, e-commerce y producción
Tras aprobar el modelo objetivo, creé una naming convention para todo lo que podía tener nombre: productos, plantillas, variantes, empaques, bundles, materias primas, SKU, lógica EAN, fotos y atributos
El catálogo pasó de ser una masa caótica de registros a una jerarquía controlada product template → product variant, donde cada sellable SKU tenía rol, nombre, empaque, EAN, peso, dimensiones y conexión con BaseLinker
Los nombres de producto se reescribieron no solo para la lógica interna de inventario, sino también para el comportamiento real de búsqueda de los clientes: la investigación data-driven alineó nombres y metadatos con consultas reales, apoyando el crecimiento de ventas tras actualizar tienda y marketplaces
El desorden de importaciones se resolvió con contexto: detecté una ola de 719 productos/plantillas mal creados, separé los registros realmente usados en ventas o almacén y archivé el ruido no utilizado sin perder datos operativos
El resultado fue un catálogo mantenible: SKU, nombres, atributos, fotos, metadatos, BaseLinker mapping y lógica de almacén dejaron de contradecirse y se convirtieron en una base estable para sincronizar tienda y marketplaces

Warehouse, BoM & Barcode Logic

Las materias primas se movieron a una estructura RAW
Se crearon BoMs para productos terminados y kits
Las existencias se vincularon a salas de almacenamiento concretas
Se corrigió la impresión de etiquetas tras la migración a Odoo 19: los reportes pasaron al nivel product.product y se ajustaron QWeb templates, nombres de archivos de impresión, barcode fields y variant attributes
Se detectaron y aislaron 11 conflictos EAN, con 8 pares EAN confirmados migrados mediante pipeline backup / plan / rollback / verify

CRM, Contacts & Database Hygiene

Se eliminaron 1380 contactos duplicados, 34 registros de prueba y 59 fichas vacías
Se normalizaron IBAN, BIC/SWIFT y direcciones bancarias para 10 bancos
Se estandarizaron voivodías y localización para 11 idiomas
Se prepararon cold leads y listas custom para lead generation, CRM outreach y posterior sales enrichment
Se redujo el ruido CRM de leads creados automáticamente: los correos de contactos existentes debían entrar en el historial de comunicación de ese contacto, no crear una nueva ficha de lead cada vez

Mail Routing, AI Qualification & Sales Automation

Diseñé e implementé MelonRing AISMR — un módulo Odoo para inbound email routing, AI qualification, deterministic rules y audit trail
Se configuró la lógica de routing: nuevas consultas comerciales crean crm.lead con categoría, responsable, tags, prioridad y summary, mientras que los emails de contactos existentes se vinculan al registro existente y no generan leads duplicados
Se implementaron reglas Poka-yoke contra envíos masivos directos por SMTP local
Se cerró una fuga histórica vía mail.followers: se limpiaron suscripciones incorrectas, se bloqueó añadir contactos externos a objetos internos sensibles y la prevención quedó como regla explícita del sistema
Se revisaron scheduled actions / cron jobs: se eliminaron tareas de fondo redundantes o activadas sin conciencia operativa, que duplicaban lógica estándar, recalculaban datos o creaban carga imprevisible sin dueño de negocio
La infraestructura de correo se movió a SendGrid, se verificó SPF/DKIM y el bounce rate bajó de ~15% a menos de 1%
Se construyó una capa de sales automation: qualification states, draft-input snapshots, partner/product/qty/pricing candidates y manager review antes de quotation generation

E-commerce & Integrations

Se configuró Shopify sync, rutas de almacén, ubicaciones de tránsito y conversión automática de pedidos
Se prepararon técnicamente integraciones FedEx PL, DHL e InPost para cálculo de entrega y generación de etiquetas
Se preparó Odoo E-commerce y portal B2B como reemplazo de Shopify
Se añadió un Odoo theme layer custom y MelonRing Meta Pixel tracking para Odoo Website Sale
Se preparó Allegro Odoo Sync para importar pedidos vía Allegro REST API
Después de normalizar productos, materias primas, SKU, EAN, fotos, peso y dimensiones, los datos actualizados se reintegraron en marketplaces y tienda online

🔹 5. Stack Técnico

ERP Core: Odoo 19, Odoo.sh / Odoo Cloud, Python, XML/QWeb, ORM
Data & Integration: XML-RPC, BaseLinker API, Shopify integration, Allegro REST API, CSV pipelines
CRM & AI: Odoo CRM, mail.thread, crm.lead, OpenAI-style AI qualification architecture, deterministic rule engine
Sales & E-commerce: Odoo Sales, Website Sale, B2B/B2C portal, quotation draft workflow, Meta Pixel
Warehouse & Manufacturing: Inventory, Barcode, MRP, BoM, product.product, product.template, product dimensions, label reports
Communication: Zadarma PBX, SendGrid SMTP, IMAP/SMTP routing, SPF/DKIM, mail followers cleanup

🔹 6. Resultados Y Valor De Negocio

ERP estabilizado después de la migración: Odoo pasó de Hetzner a Odoo.sh, se actualizó a Odoo 19 y se limpió de módulos incompatibles
Operaciones convertidas en un flujo único: la dirección recibió una base técnica que conecta departamentos, empleados, almacén, producción, ventas, CRM, correo e integraciones en un solo sistema, desde materias primas hasta venta final
Catálogo bajo control: alrededor de 400 plantillas y variantes se movieron a una jerarquía limpia, y el BaseLinker/Odoo SKU mapping pasó a ser deliberado, no una importación ciega
Los datos actualizados volvieron a ventas: catálogo normalizado, lógica de almacén, fotos, SKU, EAN, peso y dimensiones fueron reintegrados en marketplaces y tienda online
Base de datos limpiada: se eliminaron 1380 contactos duplicados, 34 registros de prueba y 59 fichas vacías, con datos y regiones normalizados
Almacén con base real para automatizar: BoM, materias primas RAW, códigos de barras, salas de almacenamiento y etiquetas pasaron a un modelo más estable
Reputación de correo protegida: SendGrid + SPF/DKIM redujeron el bounce rate de ~15% a menos de 1%
CRM con capa de automatización: inbound email routing, AI qualification, follow-up automation y sales draft flow con revisión de manager
Riesgos operativos reducidos: se encontró y cerró una fuga histórica por Followers, se bloquearon envíos masivos peligrosos, se limpiaron scheduled actions / cron jobs redundantes y se resolvieron errores críticos QWeb/PBX/Owl 2 tras la migración

🔹 7. Estado Actual

Launched / Technically Ready. El sistema quedó técnicamente estabilizado, con módulos clave e integraciones preparadas. Parte del efecto de negocio depende de la adopción interna: disciplina en CRM, escaneo en almacén, pruebas de servicios de mensajería y trabajar dentro de Odoo en lugar de volver a procesos manuales

¿Tienes un problema parecido que ya toca resolver?

Los sistemas fiables no salen de hablar bonito. Veamos cómo la ingeniería quirúrgica puede devolver ritmo a tu producto