Настройка шаблонов сценариев ценообразования

Настройка шаблонов ценообразования производится при создании/редактировании сценариев ценообразования. Чтобы создание шаблона стало доступно, нужно сделать активной галочку "Уникальный алгоритм формирования цены".

Для написания шаблона мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев. Подробнее с языком можно ознакимиться здесь.

Шаблон на вход получает объект model, содержащий следующие поля:

  • Settings - [объект с параметрами] - предпосчитанные настройки необходимые для ценообразования товара
  • ProductCard - [объект с параметрами] - карточка товара (основные данные и свойства)
  • SupplierPrices - [список объектов] - список данных активных цен поставщиков
  • CompetitorPrices - [список объектов] - список данных активных цен конкурентов
  • CommonAlgorithmPrice - [объект с параметрами] - данные о цене, посчитанные стандартным алгоритмом

Объект Settings содержит следующие поля:

  • MinSupplierPrice - [объект с параметрами] - данные о минимальной цене поставщика
  • MinCompetitorPrice - [объект с параметрами или null] - данные о минимальной цене конкурента
  • DeliveryTownPrice - [число] - цена доставки по городу
  • DeliveryCountryPrice - [число] - цена доставки по стране
  • MinExtraCharge - [число] - минимальная наценка (%)
  • MaxExtraCharge - [число] - максимальная наценка (%)
  • FixedExtraCharge - [число] - фиксированная наценка
  • TargetMargin - [число] - целевая маржинальность (%)
  • AverageOrderExpenses - [число] - средние расходы на один заказ товара. Заполнены, если хотя бы для одного товара задана целевая маржинальность
  • AverageOrderCommissionPercent - [число] - средний процент комиссии на один заказ товара (%). Заполнен, если хотя бы для одного товара задана целевая маржинальность
  • GlobalMinRetailPrice - [число] - МРЦ среди поставщиков для которых указано "Глобальное МРЦ" в опциях поставщиков
  • MinRetailPrice - [число] - МРЦ среди всех поставщиков

Объект CommonAlgorithmPrice содержит следующие поля:

  • Price - [число] - вычисленная цена
  • SupplierPrice - [число] - цена поставщика
  • SupplierPriceSellerCode - [текст или null] - код товара в системе поставщика
  • DeliveryTime - [число] - время доставки (дней)
  • SupplierId - [число] - Id поставщика
  • OriginalPrice - [число или null] - цена до акции
  • DeliveryTownPrice - [число] - цена доставки по городу
  • DeliveryCountryPrice - [число] - цена доставки по стране
  • CompetitorPrice - [число или null] - цена конкурента
  • InStockAmount - [число] - количество товаров в наличии
  • MinRetailPrice - [число или null] - МРЦ
  • CompetitorName - [текст или null] - Название конкурента

Объект MinSupplierPrice из объекта Settings и объекты из списка SupplierPrices содержат следующие данные о цене поставщика:

  • Supplier - [объект с параметрами] - данные о поставщике
  • Price - [число] - цена
  • MinRetailPrice - [число] - МРЦ
  • InStockAmount - [число] - количество товаров в наличии
  • Product - [объект с параметрами] - данные о товаре
  • DeliveryTime - [число] - время доставки (дней)
  • DeliveryTownPrice - [число или null] - цена доставки по городу
  • DeliveryCountryPrice - [число или null] - цена доставки по стране
  • ConsiderLocalMinRetailPrice - [логическое значение] - соблюдать ли "МРЦ только для предложений от этого поставщика" выбранное на вкладке с опциями поставщиков
  • PriceSellerCode - [строка или null] - код товара в системе поставщика

Объект Supplier содержит следующие данные о поставщике:

  • Id - [число] - Id
  • Name - [текст] - название
  • ExternalId - [текст или null] - внешний код
  • BundleIds - [список чисел] - спикок Id пакетов, в которые входит поставщик

Объект Product содержит следующие данные о товаре поставщика:

  • Id - [текст или null] - Id
  • Name - [текст] - название
  • Article - [текст или null] - артикул
  • CategoryName - [текст или null] - категория
  • VendorName - [текст или null] - бренд
  • Ean - [текст или null] - EAN

Объект MinCompetitorPrice из объекта Settings и объекты из списка CompetitorPrices содержат следующие данные о цене конкурента:

  • Competitor - [объект с параметрами] - данные о конкуренте
  • Product - [объект с параметрами] - данные о товаре
  • Price - [число] - цена
  • InStockAmount - [число] - количество товаров в наличии

Объект Competitor содержит следующие данные о конкуренте:

  • Id - [число] - Id
  • Name - [текст] - название
  • ExternalId - [текст или null] - внешний код

Объект Product содержит следующие данные о товаре конкурента:

  • Id - [текст или null] - Id
  • Name - [текст] - название
  • Article - [текст или null] - артикул
  • CategoryName - [текст или null] - категория
  • VendorName - [текст или null] - бренд

Объект ProductCard содержит следующие поля:

Список Tags состоит из объектов содержащих следующие данные о тегах:

  • Id - [число] - Id
  • Name - [текст] - название

Список Properties состоит из объектов содержащих следующие данные о свойствах:

  • Id - [число] - Id
  • Name - [текст] - название
  • Type - [текст] - тип
  • Unit - [текст] - визическая величина
  • StringValue - [текст] - тестовое значение, когда тип равен "String"
  • BooleanValue - [логическое значение] - логическое значение, когда тип равен "Boolean"
  • IntegerValue - [число] - целое число, когда тип равен "Integer"
  • DecimalValue - [число] - дробное число, когда тип равен "Decimal"
  • MinRangeValue - [число] - дробное число, нижняя граница диапазона, когда тип равен "Range"
  • MaxRangeValue - [число] - дробное число, верхняя граница диапазона, когда тип равен "Range"
  • EnumValue - [текст или null] - тестовое значение, когда тип равен "Enum"
  • FlagValues - [список текстовых значений] - список текстовых значений, когда тип равен "Flag" (множественный выбор)

Поле Unit может иметь следующие значения:

  • NotUnit - неизвестная величина
  • Nanometers - нанометры
  • Micrometers - микрометры
  • Millimeters - миллиметры
  • Centimeters - сантиметры
  • Meters - метры
  • Milligrams - миллиграммы
  • Grams - граммы
  • Kilograms - килограммы
  • Tons - тонны
  • Seconds - секунды
  • Minutes - минуты
  • Hours - часы
  • Days - дни
  • Weeks - недели
  • Months - месяцы
  • Years - годы
  • Kelvins - кельвины
  • DegreeCelsius - градусы по цельсию
  • SquareMeters - квадратные метры
  • SquareCentimeters - квадратные сантиметры
  • Milliliters - миллилитры
  • Liters - литры
  • CubicMillimeters - кубические миллиметры
  • CubicCentimeters - кубические сантиметры
  • CubicMeters - кубические метры
  • Amperes - амперы
  • Kiloamperes - килоамперы
  • Volts - вольты
  • Kilovolts - киловольты
  • Watts - ватты
  • Kilowatts - киловатты
  • Megawatts - мегаватты
  • Ohms - омы
  • Kiloohms - килоомы
  • Candles - канделы
  • Luxes - люксы
  • Lumens - люмены
  • Joules - джоули
  • Hertz - герцы
  • Kilohertz - килогерцы
  • Megahertz - мегагерцы
  • Gigahertz - гигагерцы
  • Bits - биты
  • Bytes - байты
  • Kilobytes - килобайты
  • Megabytes - мегабайты
  • Gigabytes - гигабайты
  • Terabytes - терабайты
  • BitsPerSecond - биты в секунду
  • KilobitsPerSecond - килобиты в секунду
  • MegabitsPerSecond - мегабиты в секунду
  • GigabitsPerSecond - гигабиты в секунду
  • AmpereHours - ампер-часы
  • MilliampereHours - миллиампер-часы
  • WattHours - ватт-часы
  • KilowattHours - киловатт-часы
  • MegawattHours - мегаватт-часы
  • Grands - штуки
  • GramsPerSquareCentimeter - граммы на квадратный сантиметр
  • GramsPerSquareMeter - граммы на квадратный метр
  • Inches - дюймы
  • CubicMetersPerMinute - кубические метры в минуту
  • MetersPerSecond - метры в секунду
  • MetersPerHour - метры в час
  • Percents - проценты
  • Pixels - пиксели
  • Megapixels - мегапиксели
  • Diaphragm - диафрагма
  • FramesPerSeconds - фреймы в секунду
  • ScreenDensity - разрешение экрана
  • Decibels - децибелы
  • GramsPerMinute - граммы в минуту
  • KilogramsPerMinute - килограммы в минуту
  • KilogramsPerHour - килограммы в час
  • RotationsPerMinute - обороты в минуту
  • LitersPerHour - литры в час
  • Bars - бары
  • CubicMetersPerHour - кубические метры в час
  • DotsPerInch - точки на дюйм
  • MillilitersPerHour - миллилитры в час
  • MillilitersPerSecond - миллилитры в секунду
  • MillilitersPerMinute - миллилитры в минуту
  • PixelsPerInch - пиксели на дюйм
  • LitersPerMinute - литры в минуту
  • LitersPerDays - литры в день
  • BeatsPerMinute - удары в минуту
  • SheetsPerMinute - страницы в минуту
  • SheetsPerSecond - страницы в секунду
  • Sheets - листы
  • InputOutputOperationsPerSecond - опрерации ввода-вывода в секунду
  • KilometersPerHour - километры в час
  • Kilometers - километры
  • CentimetersPerMinute - сантиметры в минуту
  • MetersPerMinute - метры в минуту
  • KilogramsPerDays - килограммы в день
  • FramesPerMinute - кадры в минуту
  • Horsepowers - лошадиные силы
  • Milliseconds - миллисекуды
  • NewtonMeters - ньютон-метры
  • MovesPerMinute - ходы в минуту
  • DecibelsPerMilliwatt - децибелы на милливатт
  • AngleDegrees - градусы углов
  • VoltAmperes - вольт-амперы
  • MillionPacketsPerSecond - миллионы пакетов в секунду
  • Dins - вязкость (DIN)
  • GuideNumbers - ведущие числа
  • StandardAtmospheres - стандартные атмосферы
  • WattsPerKilogram - ватты на килограмм
  • ThousandGrands - тысячи штук
  • IsotropicDecibels - изотропные децибелы
  • GrandsPerSquareMeter - штуки на метр квадратный
  • DimensionlessQuantity - безразмерная величина
  • WattsPerSquareMeter - ватты на квадратный метр
  • GrandsPerSleepingArea - штуки на спальное место
  • VibrationsPerMinute - колебания в минуту
  • LitersPerSquareMeter - литры на квадратный метр
  • Milliamperes - миллиамперы
  • KilovoltAmperes - киловольт-амперы
  • Kilonewtons - килоньютоны
  • CutsPerMinute - резов в минуту
  • CandelaPerSquareMeter - канделы на квадратный метр
  • PointsPerSecond - пункты в секунду
  • GramsPerKilowattHour - граммы на киловатт-час
  • MillimetersPerSecond - миллиметры в секунду
  • MillimetersPerMinute - миллиметры в минуту
  • SquareMetersPerHour - квадратные метры в час
  • SquareMetersPerMinute - квадратные метры в минуту
  • Pascals - паскали
  • Megapascals - мегапаскали
  • PersonHours - человеко-часы
  • Newtons - ньютоны
  • NewtonsPerSquareMillimeter - ньютоны на квадратный миллиметр
  • LitersPerSecond - литры в секунду
  • GramsPerHour - граммы в час
  • MetersPerSquareSecond - метры на секунду в квадрате
  • SquareCentimetersPerMinute - квадратные сантиметры в минуту
  • GrandsPerHour - штуки в час
  • KilogramsPerSquareMeter - килограммы на квадратный метр
  • Hectares - гектары
  • Ares - сотки
  • Kilopascals - килопаскали
  • HectaresPerHour - гектаров в час
  • GrandsPerMinute - штук в минуту
  • SquareMillimeters - квадратные миллиметры
  • PoundsPerSquareInch - фунты на квадратный дюйм
  • Farads - фарады
  • Millifarads - миллифарады
  • Microfarads - микрофарады
  • Nanofarads - нанофарады
  • Picofarads - пикофарады

Шаблон на вход должен получать объект model, а возращать один из трех типов данных:

  • true
  • false
  • объект с таким же набором полей как у CommonAlgorithmPrice (можно оставлять только часть полей, остальные сохранят свои значения)

Пример шаблона для исключения товаров тяжелеее 100 кг (проверка по свойству с названием "Вес"):

func normalize(value)
    ret string.downcase(string.strip(value))
end

func get_property(prop_name)
    normalized_prop_name = normalize(prop_name)
    for prop in model.ProductCard.Properties
        if normalize(prop.Name) == normalized_prop_name
            ret prop
        end
    end
    ret null
end

prop = get_property("Вес")
if (prop != null && prop.Unit == "Kilograms" && (prop.Type == "Decimal" && prop.DecimalValue > 100 || prop.Type == "Integer" && prop.IntegerValue > 100))
    ret false
else
    ret true
end

Пример шаблона для установки зачеркнутых цен на 20 процентов выше от вычисленных:

ret {
    OriginalPrice: model.CommonAlgorithmPrice.Price * 1.2
}