FSP 1.0

FSP / Модули / pricing / rules

Нормативные правила FSP Pricing 1.0

Правила расчёта цены: выбор правила, условия, модификаторы, ступени, округление, версии прайса. Обязательны для соответствия модулю.

Строк: 25. Машиночитаемо: JSON · CSV

IDПравило
PRICE-001Цена может зависеть от класса размера и от сырых метрик: веса, сторон, объёма и объёмного веса.
PRICE-002Условия одной группы объединяются AND, группы объединяются OR.
PRICE-003Пустая цена не равна нулю.
PRICE-004Индивидуальная цена возвращает MANUAL_QUOTE_REQUIRED.
PRICE-005Модификаторы показываются отдельной строкой расчёта.
PRICE-006price_rules.amount обязателен для flat, per_unit, per_metric и minimum_charge. Для tiered и manual_quote поле пустое.
PRICE-007Каждая строка price_tiers обязана содержать собственный amount и ссылку price_rule_id.
PRICE-008Каждый price_adjustments обязан содержать value и ссылку price_rule_id.
PRICE-009Подходящие price_rules сортируются по priority по возрастанию. Одинаковый priority в одном offer запрещён и возвращает PRICE_RULE_PRIORITY_CONFLICT.
PRICE-010Если применимого активного правила нет, возвращается PRICE_RULE_NO_MATCH; нулевая цена допустима только как явный amount=0.
PRICE-011Модификаторы применяются по priority. Одинаковый priority в одном stacking_group запрещён; application_base определяет базу fixed/percent/multiplier.
PRICE-012minimum_charge требует base_price_rule_id и рассчитывается как max(результат базового правила, amount). Циклические ссылки запрещены.
PRICE-013Диапазоны price_tiers одного правила не пересекаются, не имеют дыр, сортируются по sequence; quantity_from включена, quantity_to исключена.
PRICE-014До умножения amount количество округляется по rounding_mode и rounding_step после применения minimum_billable_quantity.
PRICE-015Денежный результат округляется half_up до rate_cards.money_scale; НДС рассчитывается по vat_mode и vat_rate и показывается отдельно.
TIME-001Для calculation_datetime выбирается ровно одна active-версия rate_card с effective_from <= t < effective_to; пересечение периодов запрещено.
STORAGE-001Бесплатный период хранения задаётся условиями по storage_age_days; метод FIFO/FEFO/LIFO не заменяет ценовое условие.
PRICE-016calculation_method=tiered требует tier_mode, tier_variable и tier_scope. Переменная берётся только из реестра «Переменные диапазонов», область — только из реестра «Области диапазонов»; иное значение возвращает TIER_VARIABLE_UNKNOWN или TIER_SCOPE_UNKNOWN.
PRICE-017tier_mode=slab: вся тарифицируемая величина считается по ставке диапазона, в который попало итоговое значение переменной. tier_mode=progressive: величина делится по диапазонам, каждая часть считается по своей ставке, результат суммируется.
PRICE-018Ставки диапазонов не обязаны меняться монотонно: цена может расти и убывать по шкале. Бесплатный диапазон задаётся явным amount=0 и не равен пустой цене.
PRICE-019tier_scope задаёт группу, внутри которой переменная считается заново: расчёт выполняется по каждой группе отдельно, суммы групп складываются. Режим и область обязаны входить в списки, разрешённые переменной.
PRICE-020Разная цена первой и последующих единиц одного товара задаётся tier_variable=unit_sequence с областью уровня товара (order_sku, supply_sku, batch) и tier_mode=progressive. Отдельная услуга для этого не создаётся.
PRICE-021minimum_billable_quantity и округление по PRICE-014 применяются к тарифицируемому количеству до разбиения по диапазонам; к частям в режиме progressive повторно не применяются.
STORAGE-002Зависимость цены хранения от срока задаётся диапазонами по storage_age_days в сутках от приёмки партии: в режиме progressive каждые сутки тарифицируются по ставке своего диапазона, в режиме slab по storage_stay_days весь срок считается по ставке итогового диапазона. Направление ставок любое.
STORAGE-003При частичном списании возраст остатка определяется методом ротации inventory_rotation_method (FIFO/FEFO/LIFO). Без указанного метода ступени по сроку не рассчитываются и возвращается STORAGE_ROTATION_REQUIRED.