Odoo Rescue, ERP Recovery[Launched]

Odoo Rescue: ремонт зламаної операційної системи

Odoo Rescue: ремонт зламаної операційної системи preview

Архітектура системи //

Odoo 19Odoo.shPythonXML-RPCBaseLinker APIShopifyAllegro APISendGridQWebMRP

🔹 1. Огляд проєкту

Клієнт — виробничо-торгова компанія, яка працює з еко-пакуванням, складами, маркетплейсами, B2B/B2C продажами та внутрішніми операціями в Odoo. Система вже була центральним місцем для бізнесу, але після років ручних змін, сторонніх модулів, імпортів і живих правок через Studio вона перетворилась на складний операційний вузол

Керівнику потрібно було не просто відремонтувати окремі модулі. Йому потрібна була одна система, яка зв'язує всі відділи, усіх працівників, склад, виробництво, продажі, пошту, CRM, маркетплейси, e-commerce і фінальні операції в єдиний керований потік

Моя роль була rescue engineer: зайти в хаотичний ERP-контур, розібрати технічні й процесні завали та зібрати end-to-end операційну модель — від отримання сировини до продажу готового товару

🔹 2. З чим прийшов клієнт

Інфраструктурний борг: Odoo працювала на Hetzner з набором кастомних і сторонніх модулів, частина яких не була готова до міграції на Odoo 19
Каталог без чіткої моделі: товари були змішані між шаблонами, варіантами, наборами, упаковками, EAN, BaseLinker SKU та складською логікою. Частина товарів була створена кривим імпортом як окремі дублікати
Забруднена база контактів: дублікати, порожні картки, тестові записи, різні формати банківських реквізитів, регіонів і контактних даних
Склад і виробництво без контрольної структури: BoM, сировина, штрихкоди, кімнати зберігання та label printing існували, але вимагали стабілізації й нормалізації
CRM і пошта не давали повного контролю: листи губилися в Discuss або ручному процесі, follow-up-и робилися менеджерами вручну, а sales-запити не мали стабільного шляху до quotation
Ризики безпеки та якості: під час аудиту я знайшов історичну вразливість у механізмі Followers: зовнішній контакт був помилково підписаний на внутрішні обговорення й протягом тривалого часу отримував копії службового листування. Також у системі накопичились неконтрольовані scheduled actions / cron jobs і автоматизації, які запускали фонові операції без зрозумілого власника

🔹 3. Поставлені завдання

Перенести Odoo з Hetzner на Odoo.sh / Odoo Cloud і адаптувати систему під Odoo 19
Провести аудит кастомних модулів, залишити потрібне, прибрати несумісне, стабілізувати PBX і UI після оновлення
Очистити базу контактів, лідів, банківських реквізитів і регіонів
Нормалізувати каталог товарів і виробничу номенклатуру: шаблони, варіанти, SKU, EAN, упаковки, фото, вагу, габарити, сировину й BaseLinker mapping
Налаштувати складську логіку: BoM, RAW-сировину, штрихкоди, кімнати зберігання, етикетки та базову production-ready структуру
Налаштувати контроль відвідуваності та операційної дисципліни: офіс мав трекати робочий час всередині Odoo, а склад і виробництво працювати через сканування штрихкодів
Побудувати поштову й CRM-автоматизацію: AI routing, lead qualification, deterministic rules, follow-up-и, sales draft flow
Підготувати e-commerce, B2B/B2C портал, Shopify / Allegro / delivery integrations і tracking layer
Реінтегрувати оновлений каталог, складську логіку й товарні дані назад у маркетплейси та оновити інтернет-магазин після нормалізації Odoo

🔹 4. Рішення та хід роботи

Infrastructure & Odoo 19 Migration

Проведено аудит старого Hetzner-середовища та папки Odoo modules
ERP перенесено на Odoo.sh / Odoo Cloud, база оновлена до Odoo 19
Адаптовано кастомний код і ORM-запити під нову версію ядра
Перенесено та адаптовано набір ключових кастомних і сторонніх модулів для телефонії, HR, закупівель, внутрішніх процесів і службових розширень Odoo
Несумісні телефонні та OCA-модулі були прибрані з цільової архітектури, щоб не тягнути технічний борг у нову Odoo 19 інсталяцію

Product Catalog Recovery

Проведено аудит поточного стану каталогу: товари, варіанти, упаковки, набори, сировина, SKU, EAN, фото, ціни, габарити й BaseLinker mapping були змішані між собою без єдиної логіки
На основі технічного аналізу та data-driven дослідження підготовлено кілька варіантів перебудови каталогу, з ризиками, наслідками для складу, маркетплейсів, e-commerce та виробництва
Після погодження обраної моделі створено naming convention для всього, що має назву: товарів, шаблонів, варіантів, упаковок, наборів, сировини, SKU, EAN-логіки, фото й атрибутів
Каталог переведено з хаотичного набору записів у контрольовану ієрархію product template → product variant, де кожен sellable SKU мав зрозумілу роль, назву, упаковку, EAN, вагу, габарити й зв'язок із BaseLinker
Назви товарів були переписані не тільки за внутрішньою логікою обліку, а й за пошуковою поведінкою клієнтів: data-driven дослідження допомогло привести назви та метадані до реальних пошукових запитів, що підтримало ріст продажів після оновлення магазину й маркетплейсів
Безлад після імпортів було розібрано системно: виявлено хвилю з 719 криво створених товарів/шаблонів, відокремлено записи, які реально використовувались у продажах або складі, а невикористаний шум безпечно заархівовано без втрати операційних даних
Результатом став каталог, який можна підтримувати: SKU, назви, атрибути, фото, метадані, BaseLinker mapping і складська логіка перестали конфліктувати між собою та стали основою для нормальної синхронізації з магазином і маркетплейсами

Warehouse, BoM & Barcode Logic

Сировину винесено в RAW-структуру
Створено BoM для готової продукції та комплектів
Складські залишки прив'язано до конкретних кімнат зберігання
Виправлено друк етикеток після міграції на Odoo 19: звіти переведено на рівень product.product, поправлено QWeb-шаблони, назви файлів друку, barcode fields і variant attributes
Виявлено й ізольовано 11 EAN-конфліктів, 8 підтверджених EAN-пар перенесено через backup / plan / rollback / verify pipeline

CRM, Contacts & Database Hygiene

Очищено 1380 дублів контактів, 34 тестові та 59 порожніх карток
Нормалізовано IBAN, BIC/SWIFT і банківські адреси для 10 банків
Стандартизовано воєводства й локалізацію для 11 мов
Підготовлено cold leads і кастомні списки для lead generation, CRM outreach та подальшого sales enrichment
Прибрано CRM-шум від автоматично створених лідів: пошта від існуючих контактів мала потрапляти в історію комунікації з цим контактом, а не створювати нову картку ліда щоразу

Mail Routing, AI Qualification & Sales Automation

Спроєктовано та реалізовано MelonRing AISMR — Odoo-модуль для inbound email routing, AI qualification, deterministic rules і audit trail
Налаштовано логіку маршрутизації: нові бізнес-запити створюють crm.lead з категорією, відповідальним, тегами, пріоритетом і summary, а листи від існуючих контактів привʼязуються до наявного запису та не плодять дублікати лідів
Реалізовано Poka-yoke правила проти масових розсилок напряму через локальний SMTP
Закрито історичний витік через mail.followers: очищено помилкові підписки, заблоковано додавання зовнішніх контактів до чутливих внутрішніх обʼєктів і винесено це в явне системне правило
Проведено ревізію scheduled actions / cron jobs: прибрано зайві або неусвідомлено активовані фонові задачі, які дублювали стандартну логіку, перераховували дані або створювали непередбачуване навантаження без бізнес-власника
Поштову інфраструктуру переведено на SendGrid, SPF/DKIM верифіковано, bounce rate знижено з ~15% до менш ніж 1%
Побудовано sales automation layer: qualification states, draft-input snapshots, partner/product/qty/pricing candidates, manager review перед quotation generation

E-commerce & Integrations

Налаштовано Shopify sync, складські маршрути, транзитні локації та авто-конвертацію замовлень
Технічно підготовлено FedEx PL, DHL та InPost delivery integrations для розрахунку доставки й генерації наліпок
Підготовлено Odoo E-commerce та B2B-портал як заміну Shopify
Додано кастомний Odoo theme layer і MelonRing Meta Pixel tracking для Odoo Website Sale
Підготовлено Allegro Odoo Sync для імпорту замовлень через Allegro REST API
Після нормалізації товарів, сировини, SKU, EAN, фото, ваги й габаритів оновлені дані реінтегровано в маркетплейси та інтернет-магазин

🔹 5. Технічний стек

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. Результати та цінність для бізнесу

ERP стабілізовано після міграції: Odoo перенесено з Hetzner на Odoo.sh, оновлено до Odoo 19 і очищено від несумісних модулів
Операції зведено в один потік: керівник отримав технічну основу, яка зв'язує відділи, працівників, склад, виробництво, продажі, CRM, пошту та інтеграції в одну систему — від отримання сировини до продажу готового товару
Каталог став керованим: близько 400 шаблонів і варіантів приведено до ієрархії, а BaseLinker/Odoo SKU mapping зроблено контрольовано, без сліпого імпорту
Оновлені дані повернулись у продажі: нормалізований каталог, складська логіка, фото, SKU, EAN, вага й габарити були реінтегровані в маркетплейси та інтернет-магазин
База очищена: видалено 1380 дублів контактів, 34 тестові й 59 порожніх карток, нормалізовано реквізити й регіони
Склад отримав основу для автоматизації: BoM, RAW-сировина, штрихкодування, кімнати зберігання та етикетки переведені у стабільнішу модель
Поштова репутація захищена: SendGrid + SPF/DKIM знизили bounce rate з ~15% до менш ніж 1%
CRM отримала automation layer: inbound email routing, AI qualification, follow-up automation і sales draft flow з manager review
Операційні ризики знижено: знайдено й закрито історичний витік внутрішнього листування через Followers, заблоковано небезпечні масові розсилки, очищено зайві scheduled actions / cron jobs і прибрано критичні QWeb/PBX/Owl 2 помилки після міграції

🔹 7. Поточний статус

Launched / Technically Ready. Система стабілізована технічно, ключові модулі й інтеграції підготовлені. Частина бізнес-ефекту залежить від впровадження регламентів всередині команди: використання CRM, сканування складу, тестування кур'єрських служб і дисципліна роботи в Odoo замість ручних процесів

Маєте схожий вузол, який пора розв'язати?

Надійні системи не народжуються з балачок. Давайте розберемо, як точна інженерія може повернути темп вашому продукту