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

МАППИНГ ПОЛЕЙ 1С → PIM

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


НАЗНАЧЕНИЕ

Правила маппинга полей из 1С OData API в структуру PIM.


СОДЕРЖАНИЕ

  1. Основные поля
  2. Дополнительные реквизиты
  3. Справочники GUID
  4. Примеры маппинга

1. ОСНОВНЫЕ ПОЛЯ

1.1 Маппинг 1С → pim_products

# Поле в 1С Тип 1С Поле в PIM Тип PIM Обработка
ИДЕНТИФИКАТОРЫ
1 Ref_Key UUID ref_key_1c VARCHAR(36) Прямое копирование
2 Code String(11) code_1c VARCHAR(11) Прямое копирование
3 Артикул String(50) article VARCHAR(50) Прямое копирование
НАЗВАНИЯ
4 Description String(100) name_short VARCHAR(150) Прямое копирование
5 НаименованиеПолное String(1000) name VARCHAR(1000) Прямое копирование
КАТЕГОРИЯ
6 Parent_Key UUID category VARCHAR(100) Маппинг по справочнику
7 КатегорияНоменклатуры_Key UUID product_type VARCHAR(50) Маппинг по справочнику
ГАБАРИТЫ
8 Вес Number(10,3) weight_kg NUMERIC(10,3) Прямое копирование
9 Высота Number(10,2) height_mm INTEGER Прямое копирование
10 Ширина Number(10,2) width_mm INTEGER Прямое копирование
11 Длина Number(10,2) length_mm INTEGER Прямое копирование
ПРОЧЕЕ
12 ЭтоНабор Boolean is_bundle BOOLEAN Прямое копирование
13 Штрихкод String(13) barcode VARCHAR(13) Прямое копирование

2. ДОПОЛНИТЕЛЬНЫЕ РЕКВИЗИТЫ

2.1 Структура в 1С

В 1С дополнительные характеристики передаются в массиве ДополнительныеРеквизиты:

{
  "ДополнительныеРеквизиты": [
    {"Свойство": "GUID", "Значение": "значение"}
  ]
}

2.2 Таблица маппинга по GUID

БРЕНД

GUID реквизита 1С Название Поле PIM Обработка
b86639de-7d0c-11ee-919d-3cecefa69fd9 Бренд brand Прямое

КАЛИБР

GUID реквизита 1С Название Поле PIM Обработка
7c85ff2d-6890-11ee-919d-3cecefa69fd9 Калибр макс цифра caliber_inch Прямое (дюймы)
- (вычисляемое) caliber_mm inch × 25.4
9c4aafaf-e5ae-11ed-919d-3cecefa69fd9 Калибры calibers_text Прямое

ЗАЛПЫ

GUID реквизита 1С Название Поле PIM Обработка
9c4aafd8-e5ae-11ed-919d-3cecefa69fd9 Кол-во выстрелов shots_count Прямое
a7b59bb8-6890-11ee-919d-3cecefa69fd9 Количество эффектов effects_count Прямое
19b43d79-7d77-11ee-919d-3cecefa69fd9 Спецэффекты effects Прямое

ВРЕМЯ И ВЫСОТА

GUID реквизита 1С Название Поле PIM Обработка
9c4aafe2-e5ae-11ed-919d-3cecefa69fd9 Время работы duration_sec Прямое (секунды)
9c4aafe3-e5ae-11ed-919d-3cecefa69fd9 Высота разрыва height_mm метры × 1000

ТИП

GUID реквизита 1С Название Поле PIM Обработка
9c4aafe4-e5ae-11ed-919d-3cecefa69fd9 Вид фейерверка salute_type Прямое

МЕДИА

GUID реквизита 1С Название Поле PIM Обработка
1a8a2229-8fe3-11ee-919d-3cecefa69fd9 Файл изображения photo_url Прямое
4ff1d78c-6eef-11ee-919d-3cecefa69fd9 Видео Youtube video_youtube Прямое
df5d5f35-acf5-11f0-ba8b-1c98ec2a5329 Видео Rutube video_rutube Прямое

УПАКОВКА

GUID реквизита 1С Название Поле PIM Обработка
be4a9332-6895-11ee-919d-3cecefa69fd9 штук в упаковке pack_qty Прямое
4e8da965-836a-11ee-919d-3cecefa69fd9 Фасовка текст packing Прямое
12e08fe1-9013-11ee-919d-3cecefa69fd9 наличие is_available Прямое

3. СПРАВОЧНИКИ GUID

3.1 Parent_Key (категории)

GUID Название категории
0699197f-e960-11ed-919d-3cecefa69fd9 Батареи салютов
62b720db-68a0-11ee-919d-3cecefa69fd9 Фонтаны пиротехнические
414d8f60-e957-11ed-919d-3cecefa69fd9 Римские свечи
414d8518-e957-11ed-919d-3cecefa69fd9 Петарды
414d8cba-e957-11ed-919d-3cecefa69fd9 Ракеты
185b58c6-e960-11ed-919d-3cecefa69fd9 Свечи бенгальские огни
1aee671d-e960-11ed-919d-3cecefa69fd9 Цветной дым
04fd1a14-68a1-11ee-919d-3cecefa69fd9 Хлопушки пиротехнические
5cb9ea4d-68a0-11ee-919d-3cecefa69fd9 Летающие фейерверки
414d85a3-e957-11ed-919d-3cecefa69fd9 Фестивальные шары

3.2 Маппинг категорий → типы салютов

Для автоматического определения salute_type из категории 1С:

CATEGORY_TO_SALUTE_TYPE = {
    # Категория в 1С → salute_type
    'Батареи салютов': 'батарея',
    'Фонтаны пиротехнические': 'фонтан',
    'Римские свечи': 'римская свеча',
    'Петарды': 'петарда',
    'Ракеты': 'ракета',
    'Свечи бенгальские огни': 'бенгальские',
    'Цветной дым': 'дым',
    'Хлопушки пиротехнические': 'хлопушка',
    'Летающие фейерверки': 'летающий',
    'Фестивальные шары': 'миномет',
    'Дневные фейерверки': 'дым',  # Дневные салюты = дым
    'Салюты и фейерверки': 'батарея',  # Общая категория
}

4. ПРИМЕРЫ МАППИНГА

4.1 Пример 1: Батарея салютов

Данные из 1С:

{
  "Ref_Key": "b12e7ca3-29cb-11ef-8279-00155d029d48",
  "Code": "НФ-00001234",
  "Артикул": "SAL-PU-049",
  "Description": "Батарея салютов Праздничный",
  "НаименованиеПолное": "Батарея салютов 25 залпов 0.8\" Праздничный Пиротехника Урала",
  "Вес": 2.5,
  "Высота": 200,
  "Ширина": 150,
  "Длина": 250,
  "Parent_Key": "0699197f-e960-11ed-919d-3cecefa69fd9",
  "ЭтоНабор": false,

  "ДополнительныеРеквизиты": [
    {"Свойство": "b86639de-7d0c-11ee-919d-3cecefa69fd9", "Значение": "Пиротехника Урала"},
    {"Свойство": "7c85ff2d-6890-11ee-919d-3cecefa69fd9", "Значение": 1.2},
    {"Свойство": "9c4aafd8-e5ae-11ed-919d-3cecefa69fd9", "Значение": 49},
    {"Свойство": "9c4aafe3-e5ae-11ed-919d-3cecefa69fd9", "Значение": 50}
  ]
}

Результат в PIM (pim_products):

{
  "article": "SAL-PU-049",
  "code_1c": "НФ-00001234",
  "ref_key_1c": "b12e7ca3-29cb-11ef-8279-00155d029d48",
  "name": "Батарея салютов \"Праздничный\" 30мм 49 залпов",
  "name_short": "Батарея салютов Праздничный",
  "brand": "Пиротехника Урала",
  "category": "Батареи салютов",
  "product_type": "simple",
  "weight_kg": 2.500,
  "height_mm": 200,
  "width_mm": 150,
  "length_mm": 250,
  "is_bundle": false
}

Результат в PIM (pim_pirotehnika):

{
  "article": "SAL-PU-049",
  "salute_type": "батарея",
  "commercial_name": "Праздничный",
  "caliber_inch": 1.2,
  "caliber_mm": 30.48,
  "calibers_text": "1.2\"",
  "shots_count": 49,
  "height_mm": 50000,
  "is_combo": false,
  "weight_kg": 2.500,
  "dimensions": "250x150x200"
}

4.2 Алгоритм нормализации

async def normalize_1c_record(record: dict) -> dict:
    """Нормализовать данные из 1С в PIM формат"""

    # Извлечь доп.реквизиты
    dop_rekvizity = record.get('ДополнительныеРеквизиты', [])

    # Маппинг GUID → значения
    brand = get_dop_rekvizit(dop_rekvizity, 'b86639de-7d0c-11ee-919d-3cecefa69fd9')
    caliber_inch = get_dop_rekvizit_decimal(dop_rekvizity, '7c85ff2d-6890-11ee-919d-3cecefa69fd9')
    shots_count = get_dop_rekvizit_int(dop_rekvizity, '9c4aafd8-e5ae-11ed-919d-3cecefa69fd9')

    # Вычисления
    caliber_mm = caliber_inch * Decimal('25.4') if caliber_inch else None

    # Категория из справочника
    category = get_category_name(record['Parent_Key'])

    # Salute type из маппинга
    salute_type = CATEGORY_TO_SALUTE_TYPE.get(category, 'unknown')

    return {
        # pim_products
        'article': record['Артикул'],
        'code_1c': record['Code'],
        'ref_key_1c': record['Ref_Key'],
        'name': record['НаименованиеПолное'],
        'name_short': record['Description'],
        'brand': brand,
        'category': category,
        'product_type': 'bundle' if record.get('ЭтоНабор') else 'simple',
        'weight_kg': record.get('Вес'),
        'height_mm': record.get('Высота'),
        'width_mm': record.get('Ширина'),
        'length_mm': record.get('Длина'),
        'is_bundle': record.get('ЭтоНабор', False),

        # pim_pirotehnika
        'salute_type': salute_type,
        'caliber_inch': caliber_inch,
        'caliber_mm': caliber_mm,
        'shots_count': shots_count,
    }

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