Дата: 2025-12-26
Автор: Claude Opus (Архитектор)
В системе 3 базы данных:
| База | Тип | Назначение | Статус |
|---|---|---|---|
| PostgreSQL pt7k98pv0fwi1el | Production | PIM (товары, цены, остатки) | ✅ ГЛАВНАЯ |
| PostgreSQL pkxgq45k5mwsdwh | Production | MCRM (клиенты, задачи, кампании) | ✅ Production |
| SQLite pim.db | Локальная | Тестирование рефакторинга | ⚠️ Не используется |
HOST = "localhost"
PORT = 5433
USER = "nocodb"
PASSWORD = "NocoDB2025Secure"
DATABASE = "nocodb"
SCHEMA = "pt7k98pv0fwi1el"
pt7k98pv0fwi1el104 таблицы, включая:
pim_products (4626 товаров) — характеристикиpim_product_images — фото товаровpim_site_products — привязка к сайтамPriceList (3 прайса) — загруженные прайс-листыPriceListItem (1716 позиций) — позиции прайсовpim_cost_rules — правила наценкиprice_rules — расчёт ценprices_suppliers — скидки поставщиковstocks (122 записи) — остатки по складамwarehouses (9 складов) — складыwarehouse_types — типы складовanalytics_product_profitability — рентабельностьprice_history — история изменения ценref_product_types — типы товаровproduct_bundles — наборыapp/pim/) — прямое подключение к PostgreSQLprojects/mcrm/) — читает товары из pim_productsapp/mp1/) — экспорт на OZON/маркетплейсыdata/connectors/, data/scripts/) — загрузка прайсовHOST = "localhost"
PORT = 5433
USER = "nocodb"
PASSWORD = "NocoDB2025Secure"
DATABASE = "nocodb"
SCHEMA = "pkxgq45k5mwsdwh"
pkxgq45k5mwsdwh6 таблиц:
| Таблица | ID | Назначение | Записей |
|---|---|---|---|
crm_prj_clients |
mrt2ihqnfelqwsm | Клиенты | ? |
crm_prj_tasks |
m5885vq360vt89w | Задачи | ? |
crm_prj_messages |
m7gk0dajlk0ezzm | Сообщения | ? |
crm_prj_campaigns |
mhvsf1dyk5bjbc7 | Рассылки | ? |
CrmPrjCampaignMessages |
mept56ctcsqvjcp | Сообщения кампаний | ? |
crm_app_managers |
mlwz2qzwlkg5ltl | Менеджеры | ? |
Только MCRM (projects/mcrm/)
/opt/claude-workspace/projects/org/pirotehnika/data/nocodb/pim.db
4 таблицы:
| Таблица | Записей | Описание |
|---|---|---|
pim_products |
424 | Товары (характеристики) |
supplier_cost |
424 | Цены от поставщиков (НОВОЕ) |
supplier_stock |
27 | Остатки у поставщиков (НОВОЕ) |
suppliers |
3 | Справочник поставщиков |
❌ НЕ ИСПОЛЬЗУЕТСЯ в production
История:
- Создана: 2025-12-26 10:20
- Цель: Тестирование рефакторинга (разделение цен/остатков)
- Проблема: Рефакторинг ошибочно применён к SQLite вместо PostgreSQL
Только тестовые скрипты:
- app/pim/test_refactoring.py — тесты
- app/pim/test_retail_pricing.py — тесты расчёта цен
- app/pim/import_from_json.py — импорт в SQLite (тест)
┌─────────────────────────────────────────────────────────────┐
│ PostgreSQL :5433 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ ┌──────────────────────┐ │
│ │ pt7k98pv0fwi1el (PIM) │ │ pkxgq45k5mwsdwh (CRM)│ │
│ │ ───────────────────── │ │ ─────────────────────│ │
│ │ • pim_products (4626) │ │ • crm_prj_clients │ │
│ │ • stocks (122) │ │ • crm_prj_tasks │ │
│ │ • warehouses (9) │ │ • crm_prj_campaigns │ │
│ │ • PriceListItem (1716) │ │ • crm_prj_messages │ │
│ │ • price_rules │ │ • crm_app_managers │ │
│ │ • ... (104 таблицы) │ │ │ │
│ └────────▲────────────────┘ └──────────────────────┘ │
│ │ │
└───────────┼─────────────────────────────────────────────────┘
│
│ Читает товары
│ (pim_products)
│
┌───────┴──────────┐
│ MCRM │
│ :8091 │
│ │
│ • Клиенты │
│ • Воронка │
│ • Рассылки │
│ • Каталог ──────┼──► Берёт из PIM
└──────────────────┘
MCRM НЕ имеет своих товаров!
MCRM напрямую читает товары из PIM через PostgreSQL:
# projects/mcrm/app/services/pim_client.py
class PIMClient:
def __init__(self):
self.base_id = "pt7k98pv0fwi1el" # ← Схема PIM!
# projects/mcrm/app/routers/pricing.py
PG_SCHEMA_PIM = "pt7k98pv0fwi1el"
SELECT * FROM pt7k98pv0fwi1el.pim_products # ← Прямой доступ к PIM
Примеры использования:
pim_productspim_productspim_productspim_productsPIM (pt7k98pv0fwi1el):
├─ pim_products
│ ├─ article, name, brand
│ ├─ cost_price ← ДУБЛИКАТ (есть в PriceListItem)
│ └─ stock_qty ← ДУБЛИКАТ (есть в stocks)
├─ PriceListItem (цены из прайсов)
└─ stocks (остатки по складам)
MCRM (pkxgq45k5mwsdwh):
├─ crm_prj_clients
└─ ... (свои таблицы CRM)
└─ Товары читает из pt7k98pv0fwi1el.pim_products ↑
PIM (pt7k98pv0fwi1el):
├─ pim_products (ТОЛЬКО характеристики)
│ └─ article, name, brand, category
├─ supplier_cost (цены от поставщиков) ← НОВОЕ
│ └─ article + supplier_code → cost_price
├─ supplier_stock (остатки у поставщиков) ← НОВОЕ
│ └─ article + supplier_code → quantity
└─ stocks (остатки на складах)
└─ article + warehouse_id → quantity
MCRM (pkxgq45k5mwsdwh):
└─ Без изменений, продолжает читать pim_products
Преимущества:
1. ✅ Нет дубликатов (cost_price удалён из pim_products)
2. ✅ История цен (supplier_cost с valid_from/valid_to)
3. ✅ Цены от разных поставщиков для одного товара
4. ✅ MCRM продолжит работать (pim_products остаётся)
SQLite база была создана по ошибке — рефакторинг должен был применяться к PostgreSQL, а не к локальной SQLite.
Удалить SQLite базу после применения миграции к PostgreSQL:
# После успешной миграции PostgreSQL
rm /opt/claude-workspace/projects/org/pirotehnika/data/nocodb/pim.db
Или переместить в архив:
mv /opt/claude-workspace/projects/org/pirotehnika/data/nocodb/pim.db \
/opt/claude-workspace/projects/org/pirotehnika/app/pim/archive/2025-12-26-refactoring/pim_test.db
План: MIGRATION_PLAN.md
Кратко:
1. Создать supplier_cost, supplier_stock в PostgreSQL (pt7k98pv0fwi1el)
2. Мигрировать данные из pim_products и PriceListItem
3. Обновить код для использования новых таблиц
4. Удалить cost_price, stock_qty из pim_products
5. MCRM продолжит работать (читает pim_products)
Время: ~2 часа
1. Зачем вторая база?
2. С какой базой работает CRM?
MCRM работает с ДВУМЯ базами:
- pkxgq45k5mwsdwh — свои данные (клиенты, задачи, кампании)
- pt7k98pv0fwi1el — читает товары из PIM
MCRM напрямую читает pt7k98pv0fwi1el.pim_products через PostgreSQL.
Версия: 1.0.0
Дата: 2025-12-26
Автор: Claude Opus (Архитектор)