Алгоритм начисления, примеры тарифов

Модуль определяет потребление договором абонплаты по наличию услуги из модуля в договоре. Алгоритм работы следующий. Начисление производится за определённый месяц.

1) производится выборка потребителей услуг данного модуля, получая набор сочетаний: договоры - услуга - период - количество;

2) для каждого сочетания производится разбивка по действующим на период тарифные планы, получая тарифицируемые сочетания: договор - услуга - тариф - период - количество;

Пример получения

В договоре определены:

  • Абонплата 1 - с 1 по 10 число;

  • Абонплата 2 - с 9 по 31 число;

  • Тариф 1 - с 2 по 31 число.

Получаем два тарифицируемых сочетания:

  • Абонплата 1 - Тариф 1 - с 2 по 10 число;

  • Абонплата 2 - Тариф 1 - с 9 по 31 число;

Каждое сочетание тарифицируется по тарифу.

1) При помесячном режиме начисления цена в тарифе запрашивается один раз, используя дату окончания периода для передачи в тарифный запрос. При стоимости пропорционально периоду цена определяется пропорционально отношению количество дней, когда абонплата в месяце была открыта и статус активен к общему числу дней месяца. Количества для помесячного режима также всегда рассчитываются на дату окончания периода. Помесячный режим всегда рассчитывается до конца расчётного месяца.

2) При подневном режиме передаётся запрос в тариф на каждый день, входящий в период сочетания. Для каждого дня оценивается стоимость и количества, анализируется статус договора. Снятие может быть произведено как до текущего дня, так и до конца месяца, в зависимости от настройки узла.

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

3) При погодовом режиме начисление производится только в том месяце, в который была добавлена абонплата. Стоимость абонплаты определяется на конец месяца.

4) При авансовом режиме начисления:

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

Если период абонплаты открыт, то цена запрашивается на ДАТУ_НАЧАЛА=МАКСИМУМ(День начала периода; День начала месяца). Стоимость дня умножается на количество дней от ДАТЫ_НАЧАЛА до конца месяца. При указании цены за месяц дневная цена получается делением месячной на количество дней в месяце начисления.

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