Расчет бонусного баланса происходит по следующей схеме:
Примечание: пересчет бонусного баланса происходит при создании нового начисления или списания баллов, а также ежедневно в 0:00 по UTC обновляется с учетом срока действия баллов.
1. Поиск задействованных в расчете начислений и списаний.
1.1 Добавление активных на момент проверки начислений в список задействованных начислений.
1.2 Цикл для каждого задействованного начисления:
1.2.1 Добавление списаний, произведенных в период активности обрабатываемого начисления, в список задействованных списаний.
1.2.2 Цикл для каждого нового списания:
1.2.2.1 Добавление активных на момент списания начислений в список задействованных начислений.
2. Применение найденных списаний (расчет).
2.1 Сумма каждого списания вычитывается из начислений активных на момент данного списания, по порядку завершения действия начислений. Обработка списаний производится начиная с более ранних по дате списания.
3. Получение результирующего баланса.
3.1 Сумма начислений активных на момент проверки баланса (с учетом произведенных вычетов на шаге 2).