Абонплаты, зависящие от наработки по объёму в других модулях
Модуль абонплат может производить начисление в зависимости от объёмов наработок в других модулях.
Зависимости можно выставить только для подневного и помесячного режима начислений.
Все используемые при тарификации объёмы должны быть описаны в конфигурации экземпляра модуля. Объём наработки описывается в конфигурации экземпляра модуля абонплат следующим образом.
module
.amount.<id>.title=<title>
module
.amount.<id>.mid=<mid>
module
.amount.<id>.
class
=<class_name>
module
.amount.<id>.sids=<sids>
Где:
<id> - уникальный числовой идентификатор объёма, нумерация должна быть последовательной и непреревной, число не должно меняться впоследствии, при изменении нумерации необходима правка всех тарифов, где используются данные объёмы;
<title> - название объёма;
<mid> - код экземпляра модуля, в котором рассчитывается объём;
<class_name> - класс, рассчитывающий объём;
<sids> - коды услуг через запятую.
В данный момент поддерживаются следующие классы, которые могут быть указаны в <class_name> для расчёта объёма услуги (байт, либо секунд):
bitel.billing.server.npay.bean.DialUpModuleAmount - количество байт или секунд в экземпляре модуля DialUp;
bitel.billing.server.npay.bean.IPNModuleAmount - количествто байт в экземпляре модуля IPN;
ru.bitel.bgbilling.modules.inet.npay.InetModuleAmount - количествто байт в экземпляре модуля Inet;
bitel.billing.server.npay.bean.PhoneModuleAmount - количество секунд округлённой длительности в экземляре модуля Phone.
Указанный в конфигурации объём можно использовать в узле тарифного плана типа Условие по объёму услуги. При размещении данного узла в узле типа Дневной режим снятия объем будет вычисляться за каждый день для использования в условиях по объёму. При размещении в узле типа Месячный режим снятия объем будет вычисляться за рассчитываемый период (период сочетания, см. алгоритм).
Рассмотрим пример конфигурации экземпляра модуля для начисления несколько типов абонплат и использующую при начислении значения входящих трафиков модуля DialUP, IPN и голосового трафика модулей Телефонии(Phone. VoiceIp, Voice). Если необходимо учитывать суммарную наработку по нескольким услугам, они перечисляются через запятую.
module.amount.
1
.title=Входящий DialUP трафик
module.amount.
1
.mid=
21
module.amount.
1
.
class
=bitel.billing.server.npay.bean.DialUpModuleAmount
module.amount.
1
.sids=
23
#
module.amount.
2
.title=Входящий внешний IPN трафик
module.amount.
2
.mid=
33
module.amount.
2
.
class
=bitel.billing.server.npay.bean.IPNModuleAmount
module.amount.
2
.sids=
40
#
module.amount.
3
.title=Объем трафика телефонии
module.amount.
3
.mid=
73
module.amount.
3
.
class
=bitel.billing.server.npay.bean.PhoneModuleAmount
module.amount.
3
.sids=
83
,
84
,
85
,
86
#
module.amount.
4
.title=Входящий трафик INET
module.amount.
4
.mid=
179
module.amount.
4
.
class
=ru.bitel.bgbilling.modules.inet.npay.InetModuleAmount
module.amount.
4
.sids=
203
#
module.amount.
5
.title=Входящий Voiceip трафик
module.amount.
5
.mid=
79
module.amount.
5
.
class
=bitel.billing.server.npay.bean.VoipModuleAmount
module.amount.
5
.sids=
122
module.amount.
5
.title=Входящий Voice трафик
module.amount.
5
.mid=
217
module.amount.
5
.
class
=bitel.billing.server.npay.bean.VoiceModuleAmount
module.amount.
5
.sids=
150
Приведённая выше конфигурация используется в следующих примерах тарифов:
Начисление 1 го рубля только за те дни, когда была наработка в модуле DialUP
Начисление за дни, когда у клиента не было достаточной наработки по IPN, "штрафа" в 10 рублей, стимулирующий тариф.
Все приведённые выше примеры могут быть совмещены с узлами типа: Фильтр по времени и Период.
Тариф, снимающий абонплату за предоплаченные 100 МБ в месяц, если клиент наработал меньше, то снятие происходит пропорционально реально потреблённому объёму.
Тот же тариф, но снимающий в случае, если объем менее 100, как выгоднее: т.е. анализируется доля потреблённых дней в месяце и доля потреблённого объёма, большая доля умножается на цену за месяц.
Необходимо учитывать, что в узле типа "Условие" нижняя граница включена в диапазон, а верхняя - нет. 0 в верхней границе диапазона означает неограниченный объем.