Логика расчета скидки в ценовых схемах

Данная статья описывает только алгоритм расчета цены, более общая статья про работу с ценовыми схемами по ссылке Работа с ценовыми схемами

I Основание для расчета

Тут указывается по какой базе определяем скидку.
Поддерживается два вида основания:

  • Смены
  • Кол-во экземпляров

Соответственно при расчете берется либо кол-во смен либо кол-во экземпляров и по этому числу определяются шаги которые нужно применить.
В формах операции и правке если меняются смены или кол-во то происходит перерасчет цены согласно новому числу. 

II Способ указания скидки

Тут указывается каким образом указать какая скидка какому шагу соответствует. 
Например, у нас есть на продукте цена за смену 1000 рублей. 
Всего три опции:

  • Процент скидки - можем указать скидку в процентах, например 10% приведет к цене 900 рублей;
  • Сумма скидки - сумма на которую снижаем, например 250 рублей приведет к цене 750 рублей;
  • Фиксированная цена - просто фиксированная цена, например 800 рублей, для нее не имеет значение какова была базовая;

III Округление

Округление применяется когда способ указания скидки - процент или сумма скидки. В таком случае часто получается некрасивые цены с копейками и нужно округлить их до красивых сумм.

В таком случае можно указать уровень округления, например до сотен рублей или до тысяч, и указать направление округления - вверх или вниз.  

Округление применяется в последнюю очередь к уже рассчитанной цене на обязательстве. 

Примеры округления:

  • 1 рубль в большую сторону: 3.01 → 4, 3.99 → 4;
  • 1 рубль в меньшую сторону: 3.01 → 3, 3.99 → 3;
  • 100 рублей в большую сторону: 101.34 → 200, 199.99 → 200;
  • 100 рублей в меньшую сторону: 101.34 → 100, 199.99 → 100;

IV Тип применения шагов

В ниже в статье примеры будут приведены для схем с основанием расчета от числа смен и скидкой указанной в процентах. Однако логика расчета аналогична для расчета на основе кол-ва экземпляров или заданной на шаге фиксированной цене / сумме скидки.

Данный параметр наиболее сложный для понимания, поэтому он описан наиболее подробно и вынесен на иконку ценовой схемы.

Два типа:

  •  Ступенчатая - шаг определяет цену за все смены (или экземпляры) позиции;
  •  Многоуровневая - шаг определяет цену только за свой "участок" от прошлого шага и до следующего;

Ниже подробнее.

Ступенчатая ценовая схема

Тип ценовой схемы, при котором цена на все смены уменьшается при достижении определенного числа смен в обязательстве. 

Ценовая схема следующая


Для продукта с ценой смены 100 рублей:

У данного продукта вначале цена за смену будет 100 рублей,
после достижения двух смен, стоимость всех смен будет пересчитана по 80 рублей,
а после достижения 5 смен,  стоимость всех смен будет пересчитана по 50 рублей.


Пример расчета:

У нас есть обязательство по продукту, описанному выше, с числом оплачиваемых смен равным 10:
Таким образом аренда одного экземпляра на 10 смен будет стоить 50 руб. / см. * 10 смен = 500 рублей. 
А цена за смену будет 50 рублей.


Многоуровневая ценовая схема

Тип ценовой схемы, при котором в момент расчета смены разбиваются на уровни, каждый из которых относится к определенному шагу ценовой схемы и имеет отдельную скидку.

Ценовая схема следующая


Для продукта с ценой смены 100 рублей:

У данного продукта вначале цена за смену будет 100 рублей,
после достижения двух смен, стоимость только смен после второй будет добавляться по 80 рублей за смену,
а после достижения 5 смен,  стоимость только смен после пятой будет добавляться по 50 рублей за смену.


Пример расчета:

У нас есть обязательство по продукту, описанному выше, с числом оплачиваемых смен равным 10:
Если у нас обязательство в 10 смен, получим 3 уровня с разной скидкой:

  • От 0 до 2 смены считается по цене 100 рублей всего 2 смены;
  • От 2 до 5 смен считается со скидкой 80 рублей, всего 3 смены;
  • От 5 до 10 смен считается со скидкой 50 рублей, всего 5 смен.

Таким образом стоимость обязательства = 100 * 2 + 80 * 3 + 50 * 5 = 690 рублей 
Чтобы получить среднюю цену за смену и отобразить в обязательстве система берет среднюю = 690 рублей / 10 смен = 69 рублей за смену