Особенности округления сумм Заказа и Списаний, к которым применены скидки
Общая информация
Сумма Заказа и суммы Списаний округляются до сотых. В некоторых случаях при применении скидки это приводит к расхождению суммы Заказа и суммы Списаний по Подписке. Чтобы этого избежать, округление и применение скидки к суммам Заказа и Списаний выполняется по специальному алгоритму. К суммам Списаний и скидок по Списаниям применяются корректировки.
Этапы вычисления и округления суммы Заказа
Итоговая сумма Заказа вычисляется в несколько этапов:
- Вычисление суммы Заказа без применения скидки.
- Округление суммы Заказа по правилам математического округления до сотых.
- Вычисление размера скидки от округленной суммы Заказа. Размер скидки рассчитывается как произведение скидки, выраженной в долях единицы, на округленную сумму Заказа, вычисленную в п.2.
- Вычисление суммы Заказа с применением скидки. Сумма Заказа со скидкой вычисляется как разность округленной суммы Заказа (см. п.2) и размера скидки, вычисленного в п.3.
- Вычисление эталонной суммы Заказа со скидкой: округление суммы Заказа с применением скидки, полученной в п.4, по правилам математического округления до сотых.
- Вычисление эталонной скидки по Заказу: от округленной суммы Заказа без учета скидки, вычисленной в п.2, отнимается эталонная сумма Заказа со скидкой, вычисленная в п.5.
Пример вычисления и округления эталонной суммы Заказа и эталонной скидки по Заказу
Исходные данные:
Параметр Заказа | Значение параметра |
---|---|
Тип | Заказ на покупку Подписки |
Период Подписки | 3 месяца |
Дата создания Заказа | 17.06.2018 |
Стоимость установки периода Подписки | $0,00 |
Абонентская плата за период Подписки, в месяц | $0,00 |
Стоимость установки единицы Ресурса | $0,00 |
Абонентская плата за единицу Ресурса, в месяц | $8,00 |
Количество заказанного Ресурса | 7 |
Скидка, применимая к Заказу | 34,3% |
Вычисление:
- Умножаем период Подписки на количество заказанного Ресурса и на стоимость единицы Ресурса в месяц. Находим, что неокругленная сумма Заказа без применения скидки равна $168,00.
- Округляем полученный результат до сотых. Получаем округленную сумму Заказа без применения скидки, равную $168,00.
- Умножаем округленную сумму Заказа без применения скидки на скидку, выраженную в долях единицы. Получаем размер скидки от округленной суммы Заказа, равную $57,624.
- От округленной суммы Заказа без применения скидки отнимаем размер скидки, найденной на предыдущем этапе. Получаем сумму Заказа с применением скидки, равную $110,376.
- Округляем полученный результат до сотых. Получаем округленную сумму Заказа с применением скидки, равную $110,38. Эта величина является эталонной суммой Заказа, к которой в дальнейшем при помощи корректировок необходимо привести сумму всех Списаний.
- От округленной суммы Заказа без применения скидки, вычисленной на этапе 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 без применения скидки равна $26,152.
- неокругленная сумма Списания 2 без применения скидки равна $56,000.
- неокругленная сумма Списания 3 без применения скидки равна $56,000.
- неокругленная сумма Списания 4 без применения скидки равна $29,848.
- Округляем полученные результаты до сотых. Получаем:
- округленную сумму Списания 1 без применения скидки, равную $26,15.
- округленную сумму Списания 2 без применения скидки, равную $56,00.
- округленную сумму Списания 3 без применения скидки, равную $56,00.
- округленную сумму Списания 4 без применения скидки, равную $29,85.
- Для каждого Списания умножаем округленную сумму без применения скидки на скидку, выраженную в долях единицы. Получаем:
- размер скидки от округленной суммы Списания 1, равный $8,96945.
- размер скидки от округленной суммы Списания 2, равный $19,20800.
- размер скидки от округленной суммы Списания 3, равный $19,20800.
- размер скидки от округленной суммы Списания 4, равный $10,23855.
- Для каждого Списания от округленной суммы без применения скидки отнимаем размер скидки, найденной на предыдущем этапе. Получаем:
- сумму Списания 1 с применением скидки, равную $17,18055.
- сумму Списания 2 с применением скидки, равную $36,79200.
- сумму Списания 3 с применением скидки, равную $36,79200.
- сумму Списания 4 с применением скидки, равную $19,61145.
- Округляем полученные результаты до сотых. Получаем:
- округленную сумму Списания 1 с применением скидки, равную $17,18.
- округленную сумму Списания 2 с применением скидки, равную $36,79.
- округленную сумму Списания 3 с применением скидки, равную $36,79.
- округленную сумму Списания 4 с применением скидки, равную $19,61.
- Для каждого Списания от округленной суммы без применения скидки, вычисленной на этапе 2, отнимаем эталонную сумму со скидкой, вычисленную на предыдущем шаге. Получаем:
- эталонную скидку по Списанию 1, равную $8,97.
- эталонную скидку по Списанию 2, равную $19,21.
- эталонную скидку по Списанию 3, равную $19,21.
- эталонную скидку по Списанию 4, равную $10,24.
Расчет корректировок
Применяется два типа корректировок:
- Корректировка сумм Списаний.
- Корректировка сумм скидок по Списаниям.
Чтобы рассчитать корректировку сумм Списаний, необходимо:
- Сложить эталонные суммы Списаний.
- От эталонной суммы Заказа отнять полученную на предыдущем шаге сумму.
Чтобы рассчитать корректировку сумм скидок по Списаниям, необходимо:
- Сложить эталонные скидки по Списаниям.
- От эталонной скидки по Заказу отнять полученную на предыдущем шаге сумму.
Пример расчета корректировок
Рассчитаем корректировку сумм Списаний:
- Сложим эталонные суммы Списаний: $17,18 + $36,79 + $36,79 + $19,61 = $110,37.
- Полученную сумму отнимем от эталонной суммы Заказа: $110,38 - $110,37 = $0,01.
Рассчитаем корректировку сумм скидок по Списаниям:
- Сложим эталонные скидки по Списаниям: $8,97 + $19,21 + $19,21 + $10,24 = $57,63.
- Полученную сумму отнимем от эталонной скидки по Заказу: $57,62 - $57,63 = -$0,01.
Применение корректировок
Корректировка сумм Списаний
Корректировки применяются только к Списаниям типа Абонентская плата.
Корректировка сумм Списаний применяется следующим образом:
Сравниваются периоды первого и последнего Списаний по Подписке. Если периоды Списаний равны, то выбирается последнее Списание. Если они не равны, то выбирается Списание с большим периодом.
Если корректировка применяется для Заказа на изменение количества Ресурсов или Заказа на переключение плана Подписки, то вместо первого Списания по Подписке берется Списание за текущий Финансовый период.
- Сумма выбранного Списания пересчитывается: складывается эталонная сумма Списания и сумма корректировки. Если в результате получается отрицательное число, то сумма Списания приравнивается к нулю, а получившееся в результате сложения отрицательное число прибавляется к сумме того из крайних Списаний по Подписке (см. п.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.
Проведем корректировку:
- Сравним периоды первого и шестого Списаний: 0,4 < 0,6. Период Списания 6 больше.
- Применим корректировку к Списанию 6 с большим периодом: $0,03 + (- $0,06) = - $0,03. Получаем отрицательное число.
- Приравняем сумму Списания 6 к нулю.
- Чтобы применить оставшуюся часть корректировки, сравним периоды Списания 1 и Списания 5: 0,4 < 1 . Период Списания 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). Так происходит до тех пор, пока в результате не получится положительное число или ноль.
Пример перерасчета сумм Списаний с учетом корректировки
Эталонная скидка по Заказу составила $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.
Проведем корректировку:
- Сравним периоды первого и шестого Списаний: 0,667 > 0,333. Период Списания 1 больше.
- Применим корректировку к скидке по Списанию 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, что соответствует эталонной скидке по Заказу.