Особенности округления сумм заказа и списаний, к которым применены скидки

Общая информация

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

Этапы вычисления и округления суммы заказа

Итоговая сумма заказа вычисляется в несколько этапов:

  1. Вычисление суммы заказа без применения скидки.
  2. Округление суммы заказа по правилам математического округления до сотых.
  3. Вычисление размера скидки от округленной суммы заказа. Размер скидки рассчитывается как произведение скидки, выраженной в долях единицы, на округленную сумму заказа, вычисленную в п.2.
  4. Вычисление суммы заказа с применением скидки. Сумма заказа со скидкой вычисляется как разность округленной суммы заказа (см. п.2) и размера скидки, вычисленного в п.3.
  5. Вычисление эталонной суммы заказа со скидкой: округление суммы заказа с применением скидки, полученной в п.4, по правилам математического округления до сотых.
  6. Вычисление эталонной скидки по заказу: от округленной суммы заказа без учета скидки, вычисленной в п.2, отнимается эталонная сумма заказа со скидкой, вычисленная в п.5.

Пример вычисления и округления эталонной суммы заказа и эталонной скидки по заказу

Исходные данные:

Параметр заказаЗначение параметра
ТипЗаказ на покупку подписки
Период подписки3 месяца
Дата создания заказа17.06.2018
Стоимость установки периода подписки$0,00
Абонентская плата за период подписки, в месяц$0,00
Стоимость установки единицы ресурса$0,00
Абонентская плата за единицу ресурса, в месяц$8,00

Количество заказанного ресурса

7
Скидка, применимая к заказу34,3%

Вычисление:

  1. Умножаем период подписки на количество заказанного ресурса и на стоимость единицы ресурса в месяц. Находим, что неокругленная сумма заказа без применения скидки равна $168,00.
  2. Округляем полученный результат до сотых. Получаем округленную сумму заказа без применения скидки, равную $168,00.
  3. Умножаем округленную сумму заказа без применения скидки на скидку, выраженную в долях единицы. Получаем размер скидки от округленной суммы заказа, равную $57,624.
  4. От округленной суммы заказа без применения скидки отнимаем размер скидки, найденной на предыдущем этапе. Получаем сумму заказа с применением скидки, равную $110,376.
  5. Округляем полученный результат до сотых. Получаем округленную сумму заказа с применением скидки, равную $110,38. Эта величина является эталонной суммой заказа, к которой в дальнейшем при помощи корректировок необходимо привести сумму всех списаний.
  6. От округленной суммы заказа без применения скидки, вычисленной на этапе 2, отнимаем эталонную сумму заказа со скидкой, вычисленную на предыдущем шаге. Получаем эталонную скидку по заказу, равную $57,62. В дальнейшем к ней при помощи корректировок необходимо привести сумму всех скидок по списаниям.

Этапы вычисления и округления сумм списаний

Вычисление и округление сумм списаний и скидок по ним выполняется по описанному алгоритму для всех типов списаний.

Сумма каждого списания вычисляется и округляется таким же образом, как и сумма заказа. Скидки по списаниям также вычисляются аналогично скидке по заказу.

Если сумма списания по правилам математического округления должна быть округлена до нуля, то при вычислении и округлении сумма такого списания приравнивается к 0,01.

Например, сумма списания до применения скидки составляет 0,01. К списанию применяется скидка 70%. Сумма списания после применения скидки равна 0,003. По правилам математического округления при округлении до сотых мы должны получить размер округленной суммы списания, равный 0. Но вместо этого сумма списания приравнивается к 0,01.

Исключением является только случай, когда к заказу применяется скидка 100%. В этом случае скидка по списанию приравнивается к 0,01, а сумма списания — к нулю.

Пример вычисления и округления сумм списаний и скидок по списаниям

Исходные данные:

Подписка с финансовым днем первого числа сгенерировала четыре списания с параметрами, приведенными в таблице.

При расчете суммы списания период списания округляется до тысячных.


Параметр списанияЗначение параметра для списания 1Значение параметра для списания 2Значение параметра для списания 3Значение параметра для списания 4
ТипСписание типа Абонентская плата за ресурсСписание типа Абонентская плата за ресурсСписание типа Абонентская плата за ресурсСписание типа Абонентская плата за ресурс
Период списания, в месяцах0,467 месяца1 месяц1 месяц0,533 месяца
Абонентская плата за единицу ресурса, в месяц$8,00

Количество заказанного ресурса

7
Скидка, применимая к списанию34,3%

Вычисление:

  1. Умножаем период каждого списания на количество заказанного ресурса и на стоимость единицы ресурса в месяц. Находим, что:
    1. Неокругленная сумма списания 1 без применения скидки равна $26,152.
    2. Неокругленная сумма списания 2 без применения скидки равна $56,000.
    3. Неокругленная сумма списания 3 без применения скидки равна $56,000.
    4. Неокругленная сумма списания 4 без применения скидки равна $29,848.
  2. Округляем полученные результаты до сотых. Получаем:
    1. Округленную сумму списания 1 без применения скидки, равную $26,15.
    2. Округленную сумму списания 2 без применения скидки, равную $56,00.
    3. Округленную сумму списания 3 без применения скидки, равную $56,00.
    4. Округленную сумму списания 4 без применения скидки, равную $29,85.
  3. Для каждого списания умножаем округленную сумму без применения скидки на скидку, выраженную в долях единицы. Получаем:
    1. Размер скидки от округленной суммы списания 1, равный $8,96945.
    2. Размер скидки от округленной суммы списания 2, равный $19,20800.
    3. Размер скидки от округленной суммы списания 3, равный $19,20800.
    4. Размер скидки от округленной суммы списания 4, равный $10,23855.
  4. Для каждого списания от округленной суммы без применения скидки отнимаем размер скидки, найденной на предыдущем этапе. Получаем:
    1. Сумму списания 1 с применением скидки, равную $17,18055.
    2. Сумму списания 2 с применением скидки, равную $36,79200.
    3. Сумму списания 3 с применением скидки, равную $36,79200.
    4. Сумму списания 4 с применением скидки, равную $19,61145.
  5. Округляем полученные результаты до сотых. Получаем:
    1. Округленную сумму списания 1 с применением скидки, равную $17,18.
    2. Округленную сумму списания 2 с применением скидки, равную $36,79.
    3. Округленную сумму списания 3 с применением скидки, равную $36,79.
    4. Округленную сумму списания 4 с применением скидки, равную $19,61.
    Эти величины являются эталонными суммами списаний, к которым в дальнейшем применяются корректировки, чтобы привести их сумму к эталонной сумме заказа.
  6. Для каждого списания от округленной суммы без применения скидки, вычисленной на этапе 2, отнимаем эталонную сумму со скидкой, вычисленную на предыдущем шаге. Получаем:
    1. Эталонную скидку по списанию 1, равную $8,97.
    2. Эталонную скидку по списанию 2, равную $19,21.
    3. Эталонную скидку по списанию 3, равную $19,21.
    4. Эталонную скидку по списанию 4, равную $10,24.
    Суммы эталонных скидок по списаниям в дальнейшем при помощи корректировок необходимо привести к эталонной скидке по списаниям.

Расчет корректировок

Применяется два типа корректировок:

  • Корректировка сумм списаний.
  • Корректировка сумм скидок по списаниям.

Чтобы рассчитать корректировку сумм списаний, необходимо:

  1. Сложить эталонные суммы списаний.
  2. От эталонной суммы заказа отнять полученную на предыдущем шаге сумму.

Чтобы рассчитать корректировку сумм скидок по списаниям, необходимо:

  1. Сложить эталонные скидки по списаниям.
  2. От эталонной скидки по заказу отнять полученную на предыдущем шаге сумму.

Пример расчета корректировок

Рассчитаем корректировку сумм списаний:

  1. Сложим эталонные суммы списаний: $17,18 + $36,79 + $36,79 + $19,61 = $110,37.
  2. Полученную сумму отнимем от эталонной суммы заказа: $110,38 - $110,37 = $0,01.

Рассчитаем корректировку сумм скидок по списаниям:

  1. Сложим эталонные скидки по списаниям: $8,97 + $19,21 + $19,21 + $10,24 = $57,63.
  2. Полученную сумму отнимем от эталонной скидки по заказу: $57,62 - $57,63 = -$0,01.

Применение корректировок

Корректировка сумм списаний

Корректировки применяются только к списаниям типа Абонентская плата.

Корректировка сумм списаний применяется следующим образом:

  1. Сравниваются периоды первого и последнего списаний по подписке. Если периоды списаний равны, то выбирается последнее списание. Если они не равны, то выбирается списание с большим периодом.

    Если корректировка применяется для заказа на изменение количества ресурсов или заказа на переключение плана подписки, то вместо первого списания по подписке берется списание за текущий финансовый период.

  2. Сумма выбранного списания пересчитывается: складывается эталонная сумма списания и сумма корректировки. Если в результате получается отрицательное число, то сумма списания приравнивается к нулю, а получившееся в результате сложения отрицательное число прибавляется к сумме того из крайних списаний по подписке (см. п.1), чей период больше. Так происходит до тех пор, пока в результате не получится положительное число или ноль.

Пример перерасчета сумм списаний с учетом корректировки

Эталонная сумма заказа составила $0,19.

Пусть по подписке создано шесть списаний со следующими периодами и эталонными суммами:

  • Списание 1 с периодом 0,4 месяца и суммой $0,02.
  • Списание 2 с периодом 1 месяц и суммой $0,05.
  • Списание 3 с периодом 1 месяц и суммой $0,05.
  • Списание 4 с периодом 1 месяц и суммой $0,05.
  • Списание 5 с периодом 1 месяц и суммой $0,05.
  • Списание 6 с периодом 0,6 месяца и суммой $0,03.

Корректировка суммы списаний таким образом равна: $0,19 - ($0,02 + $0,05 + $0,05 + $0,05 + $0,05 + $0,03) = - $0,06.

Проведем корректировку:

  1. Сравним периоды первого и шестого списаний: 0,4 < 0,6. Период списания 6 больше.
  2. Применим корректировку к списанию 6 с большим периодом: $0,03 + (- $0,06) = - $0,03. Получаем отрицательное число.
  3. Приравняем сумму списания 6 к нулю.
  4. Чтобы применить оставшуюся часть корректировки, сравним периоды списания 1 и списания 5: 0,4 < 1 . Период списания 5 больше.
  5. Применим оставшуюся часть корректировки к списанию 5 с большим периодом: $0,05 + (- $0,03) = $0,02. Получаем положительное число. Применение корректировки закончено.

В итоге получаем следующие списания:

  • Списание 1 с суммой $0,02.
  • Списание 2 с суммой $0,05.
  • Списание 3 с суммой $0,05.
  • Списание 4 с суммой $0,05.
  • Списание 5 с суммой $0,02.
  • Списание 6 с суммой $0,00.

Сумма всех списаний после применения корректировки равна: $0,02 + $0,05 + $0,05 + $0,05 + $0,02 + $0,00 = $0,19, что соответствует эталонной сумме заказа.

Корректировка скидок по списаниям

Корректировки применяются только к скидкам по списаниям типа Абонентская плата.

Корректировка скидок по списаниям применяется следующим образом:

  1. Сравниваются периоды первого и последнего списания по подписке. Если эти периоды равны, то выбирается последнее списание. Если они не равны, то выбирается списание с большим периодом.

    Если корректировка применяется для заказа на изменение количества ресурсов или заказа на переключение плана подписки, то вместо первого списания по подписке берется списание за текущий финансовый период.

  2. Сумма скидки по списанию с большим периодом пересчитывается: складывается эталонная сумма скидки по списанию и сумма корректировки. Если в результате получается отрицательное число, то сумма скидки по списанию приравнивается к нулю, а получившееся в результате сложения отрицательное число прибавляется к сумме скидки по тому крайнему списанию, чей период больше (см. п.1). Так происходит до тех пор, пока в результате не получится положительное число или ноль.

Пример перерасчета сумм списаний с учетом корректировки

Эталонная скидка по заказу составила $0,81.

Пусть по подписке создано шесть списаний со следующими эталонными скидками:

  • Списание 1 с периодом 0,667 месяца и со скидкой $0,10.
  • Списание 2 с периодом 1 месяц и со скидкой $0,15.
  • Списание 3 с периодом 1 месяц и со скидкой $0,15.
  • Списание 4 с периодом 1 месяц и со скидкой $0,15.
  • Списание 5 с периодом 1 месяц и со скидкой $0,15.
  • Списание 6 с периодом 0,333 месяца и со скидкой $0,05.

Корректировка скидок по списаниям таким образом равна: $0,81 - ($0,10 + $0,15 + $0,15 + $0,15 + $0,15 + $0,05) = $0,06.

Проведем корректировку:

  1. Сравним периоды первого и шестого списаний: 0,667 > 0,333. Период списания 1 больше.
  2. Применим корректировку к скидке по списанию 1: $0,10 + $0,06 = $0,16. Получаем положительное число. Применение корректировки закончено.

В итоге получаем следующие скидки по списаниям:

  • Списание 1 со скидкой $0,16.
  • Списание 2 со скидкой $0,15.
  • Списание 3 со скидкой $0,15.
  • Списание 4 со скидкой $0,15.
  • Списание 5 со скидкой $0,15.
  • Списание 6 со скидкой $0,05.

Сумма скидок по всем списаниям после применения корректировки равна: $0,16 + $0,15 + $0,15 + $0,15 + $0,15 + $0,05 = $0,81, что соответствует эталонной скидке по заказу.