architect/arh/operations/DATA_INVENTORY_PIROTEHNIKA.md

ИНВЕНТАРИЗАЦИЯ ДАННЫХ: Pirotehnika

Дата: 2025-12-22
Статус: DRAFT
Цель: Полная инвентаризация всех данных для миграции в L2-DATA


ОБЗОР

Результат исследования проекта $WORKSPACE/projects/pirotehnika/


1. ИСТОЧНИКИ ДАННЫХ (Data Sources)

1.1. Базы данных

Источник Тип Расположение Владелец Записей
NocoDB PostgreSQL postgresql 91.218.142.168:8085 pirotehnika ~28,000
Schema pt7k98pv0fwi1el Workspace ID NocoDB 58 таблиц

Физический сервер: @dev-pro.server
Статус: Production (active)
Backup: ?


1.2. Внешние API

API Тип URL Назначение Протокол
OZON Seller API REST https://api-seller.ozon.ru Заказы, товары, остатки HTTPS
Почта России REST https://otpravka-api.pochta.ru Отправка посылок HTTPS
1C ? ? Каталог товаров ?

Вопросы:
- [ ] Как подключаемся к 1С? (API, файлы, БД?)
- [ ] Есть ли API у поставщиков или только файлы?


1.3. Файловые источники

Источник Формат Расположение Частота Размер
Прайсы поставщиков XLSX, CSV $DATASPACE/projects/pirotehnika/ ? ?
Изображения товаров JPG, PNG $DATASPACE/projects/pirotehnika/_shared/images/products/ Manual ?
Экспорты CSV, JSON $DATASPACE/projects/pirotehnika/exports/ Auto ?

Хранилище: @beget-s3.storage

Вопросы:
- [ ] Где физически лежат прайсы? (FTP, email, локально?)
- [ ] Как часто обновляются прайсы?
- [ ] Сколько поставщиков? Какие форматы?


2. ТАБЛИЦЫ БАЗЫ ДАННЫХ

2.1. PIM (Product Information Management)

Группа: Управление товарами

Таблица Записей Назначение Master Источник
pim_products 1,042 Товары с ценами и брендами Прайсы
pim_catalog 762 Характеристики пиротехники Manual
pim_cost_rules 5 Скидки по брендам Manual
pim_sku_mappings 2,050 Связь артикулов с SKU PIM
pim_bundle_items 0 Состав наборов Manual

Итого: 5 таблиц, ~3,900 записей

Структура pim_products:

- article (PK)
- name
- brand_id  Brands
- supplier_id  Suppliers
- category_id  Categories
- base_price (из прайса)
- cost_price (base_price × скидка)
- sku (для OZON)

Структура pim_catalog:

- article (PK)
- caliber (калибр, мм)
- shots_count (выстрелов)
- duration_sec (время работы, сек)
- height_m (высота полёта, м)
- effects (JSON)
- safety_distance_m
- weight_kg
- certificate_number
- country

2.2. PRODUCTS (Каталог из 1С)

Группа: Основной каталог

Таблица Записей Назначение Master Источник
Products 4,626 Каталог из 1С (БЕЗ цен!) 1C
OZON_Products 2,051 Карточки на OZON OZON API
PIM_Catalog 762 Устаревшая Legacy
Products_Market 0 Пустая Manual

Итого: 4 таблицы, ~7,400 записей

Связи:

Products (1C) ──article──> pim_products ──sku──> OZON_Products
    │                            │
    └── Каталог БЕЗ цен          └── Цены, бренды, себестоимость

2.3. PRICES (Цены)

Группа: Ценообразование

Таблица Записей Назначение Источник
pim_cost_rules 5 Скидки по брендам Manual
PriceList 2 Прайс-листы поставщиков Файлы
PriceListItem 1,626 Позиции прайс-листов Файлы
Prices_History 2,501 История изменений цен System

Итого: 4 таблицы (+4 пустых), ~4,100 записей

Правила ценообразования:

base_price (из прайса) × (1 - скидка%) = cost_price

Скидки по брендам (pim_cost_rules):
- JF-Pyro:     50%
- Maxsem:      50%
- Стрелецкий:  50%
- Салют Люкс:  55%
- УПЗ:         60%

2.4. ORDERS (Заказы)

Группа: Заказы с маркетплейсов

Таблица Записей Назначение Источник
Order 757 Заказы NocoDB (старые) OZON API
OrderItem 783 Позиции заказов OZON API
OZON_Orders 343 Заказы OZON (сырые) OZON API
OZON_OrderItems 350 Позиции OZON OZON API

Итого: 6 таблиц, ~2,200 записей


2.5. REFERENCE (Справочники)

Группа: Справочные данные

Таблица Записей Назначение
Suppliers 5 Поставщики
Brands 6 Бренды
Categories 20 Категории товаров
Channel 6 Каналы продаж (O1, O2, O3, WB, YM, Site)
Effects 46 Эффекты пиротехники
Attributes 26 Атрибуты товаров

Итого: 9 таблиц, ~120 записей

Поставщики (5):
1. JF-Pyro (скидка 50%)
2. Maxsem (скидка 50%)
3. УПЗ (скидка 60%)
4. Стрелецкий (скидка 50%)
5. Салют Люкс (скидка 55%)

Каналы продаж (6):
- O1, O2, O3 (OZON аккаунты)
- WB (Wildberries)
- YM (Яндекс.Маркет)
- Site (pirotehnika.spb.ru)


2.6. ANALYTICS (Аналитика)

Группа: Расчетные данные

Таблица Записей Назначение
analytics_order_profitability 39 ROI, маржа, прибыль по заказам
analytics_product_profitability 0 Агрегация по товарам
OZON_Analytics_Stocks 1,221 Аналитика остатков

Итого: 4 таблицы, ~1,300 записей


2.7. MAPPINGS (Связи артикулов)

Группа: Маппинги между системами

Таблица Записей Назначение
SKU_Mappings 1,702 Связь артикулов с SKU OZON
pim_sku_mappings 2,050 Связь PIM артикулов с SKU

Итого: 4 таблицы, ~3,800 записей


2.8. FINANCE (Финансы)

Таблица Записей Источник
OZON_Transactions 830 OZON API
OZON_Payouts 0 OZON API

Итого: 3 таблицы, ~800 записей


2.9. WAREHOUSE (Склад)

Таблица Записей Источник
Warehouse 15 Manual
OZON_Warehouses 14 OZON API

Итого: 4 таблицы, ~30 записей


2.10. CRM

Таблица Записей Назначение
CRM_Clients 3,727 Клиенты
CRM_Sales 251 Продажи

Итого: 3 таблицы, ~4,000 записей


2.11. SYSTEM (Системные)

Таблица Записей Назначение
_metadata_tables 58 Реестр таблиц
Users 1 Пользователи
LegalEntity 3 Юридические лица

Итого: 5 таблиц, ~60 записей


3. ПОТОКИ ДАННЫХ (Data Flows)

3.1. Входящие потоки

ИСТОЧНИКИ ДАННЫХ
│
├─→ 1C
│   └─→ Products (4,626 товаров)
│       └─→ Каталог БЕЗ цен и брендов
│
├─→ ПРАЙСЫ (Excel от поставщиков)
│   └─→ PriceList → PriceListItem
│       └─→ pim_products (цены, бренды)
│
├─→ OZON API
│   ├─→ OZON_Products (2,051 карточек)
│   ├─→ OZON_Orders (343 заказа)
│   ├─→ OZON_Transactions (830 транзакций)
│   └─→ OZON_Analytics_Stocks (1,221 позиций)
│
└─→ MANUAL (Ручной ввод)
    ├─→ pim_catalog (характеристики пиротехники)
    ├─→ Categories, Brands, Suppliers
    └─→ pim_cost_rules (правила скидок)

3.2. Обработки данных

PIPELINE
│
1. ИМПОРТ ПРАЙСОВ
   Excel → PriceListItem → pim_products
   - Парсинг Excel файлов
   - Нормализация данных
   - Применение скидок по брендам
   - Обновление себестоимости
│
2. СИНХРОНИЗАЦИЯ 1C
   1C → Products
   - Импорт каталога
   - Обновление артикулов
   - Статус синхронизации
│
3. СИНХРОНИЗАЦИЯ OZON
   pim_products → OZON_Products
   - Создание/обновление карточек
   - Обновление цен и остатков
   - Получение заказов
│
4. РАСЧЕТ АНАЛИТИКИ
   Orders + Prices → analytics_order_profitability
   - ROI по заказам
   - Маржинальность
   - Прибыльность товаров

3.3. Исходящие потоки

ПОТРЕБИТЕЛИ ДАННЫХ
│
├─→ OZON (маркетплейс)
│   └── pim_products → OZON API
│       - Карточки товаров
│       - Цены
│       - Остатки
│
├─→ pirotehnika.spb.ru (сайт)
│   └── Products → OpenCart MySQL
│       - Каталог
│       - Цены
│
├─→ MP1 API (FastAPI)
│   └── NocoDB → REST API
│       - Дашборды
│       - Аналитика
│
└─→ Экспорты (CSV/JSON)
    └── NocoDB → Files
        - Выгрузки для маркетплейсов
        - Отчеты

4. СУЩЕСТВУЮЩИЕ КОННЕКТОРЫ

4.1. Реализованные

Коннектор Путь Статус Назначение
pochta projects/pirotehnika/data/connectors/pochta/ ✅ Active Почта России API

Структура:

pochta/
├── __init__.py
├── client.py
├── config.py
├── models.py
├── constants.py
├── mcp_server.py
└── README.md

4.2. Необходимые (отсутствуют)

Коннектор Приоритет Назначение Формат
nocodb HIGH Подключение к NocoDB PostgreSQL Python client
ozon HIGH OZON Seller API REST API
1c MEDIUM Синхронизация с 1С ? (уточнить)
suppliers MEDIUM Парсинг прайсов поставщиков Excel/CSV
beget-s3 LOW S3 хранилище файлов S3 API

5. СКРИПТЫ И ОБРАБОТКИ

5.1. Существующие скрипты

Скрипт Путь Назначение
sync_1c.py data/nocodb/scripts/ Синхронизация с 1С
filemanager.py data/scripts/ Управление файлами
process.py data/scripts/ Обработка данных

Вопросы:
- [ ] Что делают эти скрипты точно?
- [ ] Как часто запускаются?
- [ ] Есть ли расписание (cron)?


5.2. Необходимые обработки

Обработчик Назначение Вход Выход
price_parser Парсинг прайсов Excel XLSX/CSV PriceListItem
product_normalizer Нормализация данных товаров Raw data pim_products
ozon_sync Синхронизация с OZON pim_products OZON_Products
analytics_calculator Расчет аналитики Orders + Prices Analytics

6. СЕРВИСЫ (Потребители данных)

6.1. Внутренние сервисы

Сервис Тип Использует данные
mp1 FastAPI NocoDB (все таблицы)
ozon CLI scripts pim_products, OZON_*
mini-erp Streamlit Orders, Analytics
erp Odoo 18 Planned

6.2. Внешние системы

Система Тип Данные
pirotehnika.spb.ru OpenCart Products (синхронизация?)
pirofey.ru Drupal Products (синхронизация?)
OZON Marketplace OZON_Products, OZON_Orders

7. ПРОБЛЕМЫ И ВОПРОСЫ

7.1. Критические вопросы

  1. Подключение к 1С:
    - [ ] Как происходит синхронизация? (API, файлы, прямой доступ к БД?)
    - [ ] Как часто?
    - [ ] В каком направлении? (1C → NocoDB или bidirectional?)

  2. Прайсы поставщиков:
    - [ ] Где физически хранятся файлы?
    - [ ] Как часто обновляются?
    - [ ] Сколько поставщиков всего?
    - [ ] Какие форматы (XLSX, CSV, другие)?

  3. Физическое хранилище PostgreSQL:
    - [ ] Где физически БД? (какая схема на сервере?)
    - [ ] pt7k98pv0fwi1el - это workspace ID NocoDB, а какая настоящая схема PostgreSQL?
    - [ ] Backup есть? Как часто?

  4. Сайты (pirotehnika.spb.ru, pirofey.ru):
    - [ ] Как синхронизируются товары с NocoDB?
    - [ ] Есть ли коннектор?
    - [ ] Какая база данных используется? (MySQL на beget?)


7.2. Технические вопросы

  1. Дублирование таблиц:
    - Products vs pim_products vs PIM_Catalog vs OZON_Products
    - Order vs OZON_Orders vs orders
    - Какая таблица master?

  2. Пустые таблицы:
    - orders (0), order_items (0), OZON_Shipments (0), и др.
    - Зачем созданы? Планируется использование?

  3. Устаревшие таблицы:
    - PIM_Catalog (762) - устаревшая
    - Bundles - старая
    - Можно удалить?


8. СЛЕДУЮЩИЕ ШАГИ

Перед началом миграции нужно:

  1. Уточнить:
    - [ ] Подключение к 1С
    - [ ] Местоположение прайсов
    - [ ] Физическая схема PostgreSQL
    - [ ] Синхронизация с сайтами

  2. Создать:
    - [ ] Коннекторы (nocodb, ozon, 1c, suppliers)
    - [ ] Схемы данных для L2-DATA
    - [ ] План миграции

  3. Обсудить:
    - [ ] Какие таблицы master?
    - [ ] Что делать с дубликатами?
    - [ ] Что делать с пустыми/устаревшими таблицами?


Статус: DRAFT - требуется обсуждение и уточнение
Следующий шаг: Обсудить критические вопросы с пользователем