projects/org/pirotehnika/app/pim/standards/DATABASE.md

СТРУКТУРА БАЗЫ ДАННЫХ PIM

Версия: 2.0.0
Дата: 2025-12-25
Статус: Стандарт


НАЗНАЧЕНИЕ

Описание структуры базы данных системы PIM: таблицы, поля, связи, индексы.


СОДЕРЖАНИЕ

  1. Обзор таблиц
  2. Таблица pim_products
  3. Таблица pim_pirotehnika
  4. Таблица price_cost_rules
  5. Справочник полей

1. ОБЗОР ТАБЛИЦ

Система использует 3 основные таблицы:

  1. pim_products - базовая информация о ВСЕХ товарах
  2. pim_pirotehnika - характеристики пиротехнических изделий
  3. price_cost_rules - правила расчета себестоимости

Схема связей

pim_products (article) ←─┐
       ↓                  │
       ↓                  │ 1:1
       ↓                  │
pim_pirotehnika (article)─┘

price_cost_rules (brand)
       ↓
       ↓ N:1
       ↓
pim_products (brand)

2. ТАБЛИЦА pim_products

Назначение: Базовая информация о товаре (артикул, название, цены, бренд)

Применяется к: ВСЕМ товарам (пиротехника, упаковка, аксессуары)

# Поле Тип Nullable Default PK/FK Индекс Описание
1 article VARCHAR(50) NOT NULL - PK Артикул товара (уникальный)
2 code_1c VARCHAR(11) NULL - - Код из 1С (НФ-NNNNNNNN)
3 ref_key_1c VARCHAR(36) NULL - - UUID из 1С (Ref_Key)
4 name VARCHAR(1000) NOT NULL - - - Полное название товара
5 name_short VARCHAR(150) NULL - - - Краткое название (Description из 1С)
6 brand VARCHAR(100) NOT NULL 'Unknown' FK Бренд (из справочника)
7 category VARCHAR(100) NOT NULL - - Категория товара
8 product_type VARCHAR(50) NOT NULL 'simple' - - Тип: simple/bundle
9 base_price NUMERIC(10,2) NOT NULL 0.00 - - Базовая цена (из прайса)
10 cost_price NUMERIC(10,2) NOT NULL 0.00 - - Себестоимость (расчетная)
11 discount_percent NUMERIC(5,2) NULL - - - Процент скидки
12 barcode VARCHAR(13) NULL - - Штрихкод EAN-13
13 weight_kg NUMERIC(10,3) NULL - - - Вес в килограммах
14 height_mm INTEGER NULL - - - Высота упаковки в мм
15 width_mm INTEGER NULL - - - Ширина упаковки в мм
16 length_mm INTEGER NULL - - - Длина упаковки в мм
17 is_bundle BOOLEAN NOT NULL false - - Является ли набором
18 created_at TIMESTAMP NOT NULL NOW() - - Дата создания
19 updated_at TIMESTAMP NOT NULL NOW() - Дата обновления

Индексы

CREATE INDEX idx_pim_products_article ON pim_products(article);
CREATE INDEX idx_pim_products_code_1c ON pim_products(code_1c);
CREATE INDEX idx_pim_products_ref_key_1c ON pim_products(ref_key_1c);
CREATE INDEX idx_pim_products_brand ON pim_products(brand);
CREATE INDEX idx_pim_products_category ON pim_products(category);
CREATE INDEX idx_pim_products_barcode ON pim_products(barcode);
CREATE INDEX idx_pim_products_updated_at ON pim_products(updated_at);

3. ТАБЛИЦА pim_pirotehnika

Назначение: Характеристики пиротехнических изделий

Применяется к: ТОЛЬКО товарам категории "Фейерверки"

# Поле Тип Nullable Default FK Описание
1 article VARCHAR(50) NOT NULL - FK → pim_products Артикул товара (PK)
КАЛИБР
2 caliber_inch NUMERIC(5,2) NULL - - Калибр в дюймах (0.8, 1.2, 1.75 и т.д.)
3 caliber_mm NUMERIC(6,2) NULL - - Калибр в мм (вычисляется: inch × 25.4)
4 calibers_text VARCHAR(50) NULL - - Калибры текстом ("0.8"-1.2"", "20-30 мм")
5 calibers JSONB NULL - - Массив калибров для комби ["20","25","30"]
ЗАЛПЫ И ЭФФЕКТЫ
6 shots_count INTEGER NULL - - Количество залпов/выстрелов (1-500)
7 effects_count INTEGER NULL - - Количество эффектов (1-50)
8 effects TEXT NULL - - Описание эффектов (текст)
ВРЕМЯ И ВЫСОТА
9 duration_sec INTEGER NULL - - Время работы в секундах (5-600)
10 height_mm INTEGER NULL - - Высота разрыва в мм (5000-150000)
ТИП И НАЗВАНИЕ
11 salute_type VARCHAR(50) NOT NULL - - Тип изделия (батарея, фонтан, ...)
12 commercial_name VARCHAR(200) NULL - - Коммерческое название (без характеристик)
13 description TEXT NULL - - Описание товара (до 2000 символов)
МЕДИА
14 photo_url TEXT NULL - - URL фото (полный адрес)
15 photo_hub VARCHAR(500) NULL - - Путь в Hub (files.0kt.ru/...)
16 video_youtube VARCHAR(200) NULL - - URL YouTube видео
17 video_rutube VARCHAR(200) NULL - - URL Rutube видео
УПАКОВКА
18 pack_qty INTEGER NULL - - Количество штук в упаковке
19 packing VARCHAR(100) NULL - - Фасовка (6 шт/уп, 12 уп/кор)
ФЛАГИ (Boolean)
20 is_combo BOOLEAN NOT NULL false - Комбинированная (несколько калибров)
21 is_fan BOOLEAN NOT NULL false - Веерный залп
22 is_with_fountain BOOLEAN NOT NULL false - С фонтаном
23 is_gender BOOLEAN NOT NULL false - Гендерная (розовый/синий)
24 is_daytime BOOLEAN NOT NULL false - Дневная (дымовая)
25 is_dual_box BOOLEAN NOT NULL false - Двойная коробка
26 is_modul BOOLEAN NOT NULL false - Модульная батарея
27 is_available BOOLEAN NOT NULL true - Товар в наличии
БЕЗОПАСНОСТЬ
28 safety_distance_m INTEGER NULL - - Безопасное расстояние в метрах
29 weight_kg NUMERIC(10,3) NULL - - Вес нетто в кг
30 dimensions VARCHAR(50) NULL - - Размеры ДxШxВ в мм (300x200x150)
СЕРТИФИКАЦИЯ
31 certificate_number VARCHAR(100) NULL - - Номер сертификата (ТС RU ...)
32 certificate_expiry DATE NULL - - Срок действия сертификата
33 hazard_class VARCHAR(10) NULL - - Класс опасности (1.4G, 1.3G, ...)
34 un_code VARCHAR(10) NULL - - Код ООН (UN0336, UN0337, ...)
35 country VARCHAR(50) NULL - - Страна производства
МЕТАДАННЫЕ
36 created_at TIMESTAMP NOT NULL NOW() - Дата создания
37 updated_at TIMESTAMP NOT NULL NOW() - Дата обновления

Индексы

CREATE INDEX idx_pim_pirotehnika_article ON pim_pirotehnika(article);
CREATE INDEX idx_pim_pirotehnika_salute_type ON pim_pirotehnika(salute_type);
CREATE INDEX idx_pim_pirotehnika_caliber_mm ON pim_pirotehnika(caliber_mm);
CREATE INDEX idx_pim_pirotehnika_shots_count ON pim_pirotehnika(shots_count);

4. ТАБЛИЦА price_cost_rules

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

# Поле Тип Nullable Default Описание
1 id SERIAL NOT NULL - ID правила (PK)
2 brand VARCHAR(100) NOT NULL - Бренд (из справочника)
3 discount_percent NUMERIC(5,2) NOT NULL - Процент скидки (0.00-99.99)
4 min_price NUMERIC(10,2) NULL - Минимальная цена (порог)
5 max_price NUMERIC(10,2) NULL - Максимальная цена (порог)
6 priority INTEGER NOT NULL 0 Приоритет применения
7 is_active BOOLEAN NOT NULL true Активно ли правило

Формула расчета:

cost_price = base_price × (1 - discount_percent / 100)

5. СПРАВОЧНИК ПОЛЕЙ

5.1 Категории полей

Все поля разделены на категории:

  1. Идентификаторы - уникальные ключи (article, code_1c, ref_key_1c)
  2. Названия - name, name_short, commercial_name
  3. Категоризация - category, salute_type, brand, product_type
  4. Калибр - caliber_inch, caliber_mm, calibers, calibers_text
  5. Характеристики залпов - shots_count, effects_count, effects
  6. Время и высота - duration_sec, height_mm
  7. Цены - base_price, cost_price, discount_percent
  8. Габариты - weight_kg, height_mm, width_mm, length_mm, dimensions
  9. Медиа - photo_url, photo_hub, video_youtube, video_rutube
  10. Флаги - is_combo, is_fan, is_available, и т.д.
  11. Безопасность - safety_distance_m, hazard_class, un_code
  12. Сертификация - certificate_number, certificate_expiry, country

5.2 Обязательные поля

Для ВСЕХ товаров (pim_products)

Поле Почему обязательно Откуда берется
article Уникальный идентификатор Из 1С или генерируется
name Название для отображения Из 1С или генерируется
brand Для расчета себестоимости Из прайса или 1С
category Для группировки товаров Из 1С (Parent)
product_type Тип товара (simple/bundle) Из 1С (ЭтоНабор)
base_price Для расчета себестоимости Из прайса
cost_price Отпускная цена Расчет по правилам

Для пиротехники (pim_pirotehnika)

Поле Почему обязательно Когда обязательно
salute_type Определяет тип изделия ВСЕГДА
shots_count Важная характеристика Для батарей, свечей, ракет
caliber_inch Важная характеристика Для батарей, свечей
duration_sec Важная характеристика Для фонтанов, дымов

5.3 Вычисляемые поля

Поле Формула Пример
caliber_mm caliber_inch × 25.4 1.2" → 30.48 мм
cost_price base_price × (1 - discount% / 100) 1000 × (1 - 30/100) = 700
height_mm height_m × 1000 (из 1С метры) 50 м → 50000 мм
is_combo len(calibers) > 1 ["20","25","30"] → true

5.4 Справочники значений

salute_type

Код Название Применение
батарея Батарея салютов Многозарядная установка (10-500 залпов)
фонтан Фонтан Наземный фонтан искр (высота 1-10м)
римская свеча Римская свеча Вертикальная свеча с выстрелами
петарда Петарда Звуковой эффект
ракета Ракета Летающая ракета
миномет Миномет Одиночный выстрел
набор Набор Комплект изделий
вулкан Вулкан Наземный вулкан
колесо Колесо Вращающееся колесо
торт Торт Компактная батарея
дым Дымовое изделие Цветной дым
хлопушка Хлопушка Конфетти
бенгальские Бенгальские огни Ручные бенгальские
летающий Летающее изделие НЛО, вертолеты
наземный Наземный фейерверк Наземные эффекты

Калибры

Дюймы Миллиметры Применение
0.5" 12.7 мм Мини-фонтаны
0.6" 15.24 мм Малые римские свечи
0.8" 20.32 мм Стандартные свечи
1.0" 25.4 мм Малые батареи
1.2" 30.48 мм ⭐ САМЫЙ ПОПУЛЯРНЫЙ - средние батареи
1.5" 38.1 мм Крупные батареи
1.75" 44.45 мм Профессиональные
2.0" 50.8 мм Мощные батареи
2.5" 63.5 мм Очень мощные
3.0" 76.2 мм Максимальные

Коды ООН

Код Описание Класс опасности
UN0336 Фейерверки 1.4G
UN0337 Фейерверки 1.4S
UN0431 Изделия пиротехнические для технических целей 1.4G
UN0432 Изделия пиротехнические для технических целей 1.4S

Классы опасности

Класс Описание Применение
1.1G Взрывчатые вещества Не используется в розничных фейерверках
1.2G Метательные ВВ Салюты крупных калибров
1.3G Взрывчатые вещества Батареи салютов крупные
1.4G Взрывчатые вещества ⭐ БОЛЬШИНСТВО РОЗНИЧНЫХ ФЕЙЕРВЕРКОВ
1.4S Изделия, содержащие ВВ Бенгальские огни, хлопушки

Бренды

Бренд Префиксы Страна Типичная скидка
Пиротехника Урала PU-, ПУ- Россия 25-30%
Русский фейерверк RF-, РФ- Россия 25-30%
Maxsem MAX-, 0xxx Россия 20-25%
JF-Pyro JF-, DM- Китай 30-40%
Народный Фейерверк HF-, NF- Китай 30-40%
Фейерверк-Мастер FM-, ФМ- Россия 25-30%

Версия: 2.0.0
Дата: 2025-12-25