projects/org/pirotehnika/data/PRODUCT_RULES.md

Правила обработки товаров

Версия: 1.0
Дата: 2025-12-26


Цветной дым (разбивка по цветам)

Проблема

От производителя приходит один артикул - упаковка/коробка с дымом.
После разбивки появляется несколько артикулов - по цветам и количествам.

Правило разбивки

Базовый артикул → Производные артикулы

Формат производного артикула:
{базовый_артикул}-{цвет}-{количество}

Пример:
JF-DM30 (базовый)
  ↓
JF-DM30-красный-1шт
JF-DM30-красный-3шт
JF-DM30-красный-5шт
JF-DM30-красный-10шт
JF-DM30-синий-1шт
JF-DM30-синий-3шт
...

Цвета дыма

Стандартные цвета для разбивки:
- красный
- синий
- жёлтый
- зелёный
- розовый
- фиолетовый
- бирюзовый
- оранжевый
- белый
- чёрный

Количества

Стандартные фасовки:
- 1шт (штучно)
- 3шт (малая упаковка)
- 5шт (средняя упаковка)
- 10шт (большая упаковка)

Примеры реальных артикулов

JF DM30 (30 секунд, 4,5×11 см)

JF-DM30-красный-1шт    → Цветной дым красный 4,5×11 см. 30 сек. - 1 шт.
JF-DM30-красный-3шт    → Цветной дым красный 4,5×11 см. 30 сек. - 3 шт.
JF-DM30-красный-5шт    → Цветной дым красный 4,5×11 см. 30 сек. - 5 шт.
JF-DM30-красный-10шт   → Цветной дым красный 4,5×11 см. 30 сек. - 10 шт.
JF-DM30-синий-1шт      → Цветной дым синий 4,5×11 см. 30 сек. - 1 шт.
...

JF DM60 (60 секунд, 4×13 см)

JF-DM60-super-розовый-10шт   → Цветной дым с чекой розовый 4×13 см. 90 сек. - 10 шт.
JF-DM60-super-B              → (базовый, без разбивки)

JF DM60SHG (высокая версия)

JF DM60SHG розовый     → Дым цветной розовый (артикул с пробелом!)
JF DM60SHG             → Дым цветной DM60SHG (базовый)

Обработка в PIM

Правила импорта:

  1. Базовый артикул (от поставщика):
    - Имеет цену за коробку
    - Имеет остаток в коробках
    - Содержит все цвета

  2. Производные артикулы (разбитые):
    - Создаются автоматически или вручную
    - Цена = (цена_базового / количество_в_коробке) × количество
    - Остаток = остаток_базового × количество_в_коробке
    - Добавляется характеристика: color = {цвет}
    - Добавляется характеристика: package_qty = {количество}

Пример расчёта:

Базовый: JF-DM30 (коробка 60 шт, цена 6000 руб, остаток 10 коробок)
  
Производные:
JF-DM30-красный-1шт    100 руб  (6000/60×1),  600 шт  (10×60)
JF-DM30-красный-3шт    300 руб  (6000/60×3),  200 шт  (10×60/3)
JF-DM30-красный-10шт   1000 руб (6000/60×10),  60 шт  (10×60/10)

Синхронизация с сайтом

Проблема артикулов:
- В PIM: JF DM60SHG розовый (с пробелом)
- На сайте: JF DM60SHG (без цвета)

Решение:
1. Базовый артикул на сайте должен быть без цвета
2. Цвет передаётся через параметры/модификации товара
3. Или создавать отдельные товары для каждого цвета

Правила именования

Шаблон названия:

Цветной дым [с чекой] {цвет} {размер} {длительность} - {количество} шт. {артикул}

Примеры:
- Цветной дым красный 4,5×11 см. 30 сек. - 1 шт. JF-DM30-красный-1шт
- Цветной дым с чекой розовый 4×13 см. 90 сек. - 10 шт. JF-DM60-super-розовый-10шт

Категории

Иерархия:

Пиротехника
  └── Дымы
      ├── Цветной дым 30 сек
      ├── Цветной дым 60 сек
      ├── Цветной дым с чекой
      └── Цветной дым профессиональный

Аналогичные правила

Подобная разбивка применяется для:

Бенгальские огни

Базовый: JF-B07 (коробка 100 шт)
  
JF-B07-x02   Бенгальские огни 2 шт
JF-B07-x10   Бенгальские огни 10 шт
JF-B07-x50   Бенгальские огни 50 шт

Петарды в упаковках

Базовый: PS K0201 (блок 1000 шт)
  
PS K0201      Петарда Корсар 2 (20 шт в упаковке)
PS K0201-x5   Петарда Корсар 2 (5 упаковок = 100 шт)

Технические детали

Поля в PIM для разбитых товаров

Поле Описание Пример
article Полный артикул с цветом и количеством JF-DM30-красный-10шт
base_article Базовый артикул (для связи) JF-DM30
color Цвет товара красный
package_qty Количество в упаковке 10
is_split_product Признак разбитого товара true
parent_ref_key Ref_Key базового товара {uuid}

SQL для поиска разбитых товаров

-- Все разбитые товары дыма
SELECT article, name, color, package_qty, base_price
FROM pim_products
WHERE article LIKE 'JF-DM%'
AND article LIKE '%-%-'  -- содержит два дефиса (цвет и количество)
ORDER BY article;

-- Группировка по базовому артикулу
SELECT 
    REGEXP_REPLACE(article, '-(.*?)-(.*?)$', '') as base_article,
    COUNT(*) as variants,
    STRING_AGG(DISTINCT color, ', ') as colors
FROM pim_products
WHERE article LIKE 'JF-DM%'
GROUP BY base_article;

Автоматизация

Скрипт для создания разбитых товаров

Расположение: data/scripts/split_smoke_products.py

Функции:
1. Найти базовые артикулы дыма
2. Создать производные артикулы для всех цветов
3. Рассчитать цены и остатки
4. Создать записи в PIM

Запуск:

python3 data/scripts/split_smoke_products.py --article "JF-DM30"

История изменений

Дата Версия Изменения
2025-12-26 1.0 Первая версия правил

См. также:
- PIM структура
- Импорт из 1С
- Синхронизация с сайтами