Особенности округления сумм заказа и списаний, к которым применены скидки
Общая информация
Сумма заказа и суммы списаний округляются до сотых. В некоторых случаях при применении скидки это приводит к расхождению суммы заказа и суммы списаний по подписке. Чтобы этого избежать, округление и применение скидки к суммам заказа и списаний выполняется по специальному алгоритму. К суммам списаний и скидок по списаниям применяются корректировки.
Этапы вычисления и округления суммы заказа
Итоговая сумма заказа вычисляется в несколько этапов:
- Вычисление суммы заказа без применения скидки.
- Округление суммы заказа по правилам математического округления до сотых.
- Вычисление размера скидки от округленной суммы заказа. Размер скидки рассчитывается как произведение скидки, выраженной в долях единицы, на округленную сумму заказа, вычисленную в п.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, что соответствует эталонной скидке по заказу.