Версия: 2.0.0
Дата: 2025-12-25
Статус: Стандарт
Описание структуры базы данных системы PIM: таблицы, поля, связи, индексы.
Система использует 3 основные таблицы:
pim_products - базовая информация о ВСЕХ товарахpim_pirotehnika - характеристики пиротехнических изделийprice_cost_rules - правила расчета себестоимостиpim_products (article) ←─┐
↓ │
↓ │ 1:1
↓ │
pim_pirotehnika (article)─┘
price_cost_rules (brand)
↓
↓ N:1
↓
pim_products (brand)
Назначение: Базовая информация о товаре (артикул, название, цены, бренд)
Применяется к: ВСЕМ товарам (пиротехника, упаковка, аксессуары)
| # | Поле | Тип | 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);
Назначение: Характеристики пиротехнических изделий
Применяется к: ТОЛЬКО товарам категории "Фейерверки"
| # | Поле | Тип | 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);
Назначение: Правила расчета себестоимости по брендам
| # | Поле | Тип | 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)
Все поля разделены на категории:
| Поле | Почему обязательно | Откуда берется |
|---|---|---|
article |
Уникальный идентификатор | Из 1С или генерируется |
name |
Название для отображения | Из 1С или генерируется |
brand |
Для расчета себестоимости | Из прайса или 1С |
category |
Для группировки товаров | Из 1С (Parent) |
product_type |
Тип товара (simple/bundle) | Из 1С (ЭтоНабор) |
base_price |
Для расчета себестоимости | Из прайса |
cost_price |
Отпускная цена | Расчет по правилам |
| Поле | Почему обязательно | Когда обязательно |
|---|---|---|
salute_type |
Определяет тип изделия | ВСЕГДА |
shots_count |
Важная характеристика | Для батарей, свечей, ракет |
caliber_inch |
Важная характеристика | Для батарей, свечей |
duration_sec |
Важная характеристика | Для фонтанов, дымов |
| Поле | Формула | Пример |
|---|---|---|
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 |
| Код | Название | Применение |
|---|---|---|
батарея |
Батарея салютов | Многозарядная установка (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