Статус договора

Статус - это глобальная характеристика договора, общая для всех подключенных услуг. Перечень статусов в системе и их коды задаются переменной contract.status.list конфигурации сервера, например, так:

contract.status.list=0:Активен;1:В отключении;2:Отключен;3:Закрыт;4:Приостановлен;5:В подключении

Код статуса должен быть уникален. В зависимости от статуса договора различные модули меняют свое поведение. Открывается, либо блокируется доступ к услугам, начисляется, либо не начисляется абонентская плата.

Текущий статус договора отображается отдельным узлом в дереве карточки договора в виде: Статус <значение>. При выборе узла дерева в таблице отображается статусы договора.

images/download/attachments/43384998/x_476.png

Внизу отображается таблица с историей изменения статусов.

В этом же окне возможно изменение статусов для договоров с указанием периодов и комментария. При смене статуса оператор указывает период и новый статус. В комментарии может быть указана причина изменения. Например: "По гарантийному письму ХХХХ". Период может быть указан с пустой датой окончания, в этом случае период считается не ограниченным сверху.

Вновь установленный статус перетирает все статусы с пересекающимися периодами. В один день возможен только один статус договора.

Не все статусы доступны для ручной установки, перечень запрещённых задаётся переменной конфигурации сервера contract.status.no.manual.set. Данные статусы могут устанавливаться, например, скриптами.

Если какой-либо статус более не используется, то его код должен быть указан в переменной конфигурации сервера contract.status.deprected, коды указываются через запятую. Статус останется в истории смен, но будет недоступен в фильтрации и установке.

Если устанавливаемый статус договора включает текущую дату, то действующий статус договора меняется сразу. Однако возможна ситуация, когда меняется текущий статус и остается задание на изменение статуса договора в дальнейшем. Такие задания выполняет стандартная задача планировщика Установка статусов договоров.

При смене статуса супердоговора изменяются статусы его зависимых субдоговоров. Включить смену статусов независимых договоров можно опцией конфигурации сервера independ.subcontract.status.change=1.

Настройка активных статусов в модулях

Статусы экземпляра модуля, в которых сервис доступен, указываются в переменной конфигурации модуля contract.status.active.codes. Коды статусов указываются через запятую. Например.

contract.status.active.codes=0

Статусы, в которых сервис считается приостановленным указываются в переменной contract.status.suspend.codes. Например.

contract.status.suspend.codes=3,4

Для модуля NPay данная переменная означает статусы, при которых не снимается абонплата. Для модулей с потреблением услуг влияет, например, на узлы-диапазоны в тарифных планах. Значение в узлах уменьшается в зависимости от времени, которое сервис был пристановлен. Более подробно это описано в документации модулей.

Роль статуса в дебетовых договорах

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

Роль статуса в кредитовых договорах

Для кредитовых договоров статус тесно завязан с системой работы с кредитовыми должниками. Он может изменятся в результате оплаты договора. Активный статус для кредитовых договоров задаётся переменной конфигурации сервера credit.contract.active.status. Например.

credit.contract.active.status=0

В активном статусе работает аналогичная дебетовым договорам аварийная блокировка/разблокировка сервисов в модулях по балансу и лимиту договора.

Основная рабочая область оператора для отключения кредитовых должников вкладка Сервис=>Администрирование=>Монитор статуса. Перед началом работы необходимо сделать срез балансов, нажав соответствующую кнопку. Все описанные далее алгоритмы применимы только к кредитовым договорам.

images/download/attachments/43384998/kernel_status_monitor.png

Монитор выводит информацию по состоянию кредитовых договоров, их статусах и сальдо (входящий остаток на начало месяца плюс платежи за месяц). Таблицу с результатами выборки договоров можно выгрузить в csv формате.

Все фильтры соединяются по условию И. Возможна фильтрация по:

  • 1. группе договора + исключение определенных групп договоров;

  • 2. минимальному объему наработки по указанным услугам за прошлый и текущий месяц;

  • 3. режиму договора: кредит/дебет;

  • 4. статусу договора;

  • 5. периоду, который договор был в данном состоянии в днях или месяцах;

  • 6. сумме сальдо (указывается диапазон от и до);

  • 7. соотношению текущего баланса или баланса на начало месяца с лимитом;

  • 8. размеру превышения модуля отрицательного сальдо начала месяца над наработкой какого-то количества предыдущих месяцев.

Изменения статусов договоров производится идентично смене статуса одного договора (см. выше), необходимые договоры выбираются в таблице с использованием клавиш Ctrl и Shift. Двойной клик по строке таблицы открывает договор.

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

В случае, если отключенный статус попадает в перечень из переменной конфигурации credit.contract.open.by.payment.status, договор может быть возвращён в активный статус по приходу платежа, если сальдо станет положительным.

По звонку отключенного клиента с обещанием оплаты оператор может перевести его в активный статус на несколько дней. При этом период активного статуса указывается с датой открытия и закрытия. Если до окончания периода клиент не оплатит, отключенный статус станет действующим и клиента заблокирует. В случае оплаты вновь установленный активный статус перекроет будущий отключенный. При этом перекрытие производится только для статусов, которые указаны в переменной конфигурации credit.contract.override.future.to.active.status.

При неоплате клиента в течении какого-то времени возможна его выборка монитором статуса и перевод в другой отключенный статус, из которого уже не выводит платёж.

Если по каким-либо причинам такое поведение статусов нежелательно, то можно отключить автоматическую активацию договора при изменении сальдо на положительное. Для этого в концигурации сервера необходимо указать флаг do.not.open.contract.on.payment=1. Отсутствие этой записи или установка флага в 0 оставит поведение по умолчанию.

Если же возникла необходимость отключить данное поведение не для всех договоров, а только для каких-либо групп договоров, то необходимо установить флаг.

do.not.open.groups.on.payment=X,Y,Z,...

Где X, Y, и Z - это номера групп договоров, для которых стандартное поведение нежелательно.

Изменение стандартной логики перетирания статусов

Имеется возможность задать свою любую логику перетирания статусов при установке. Стандартная логика заключается в полном перекрытии лежащих уже в договоре отрезков статуса. Иногда требуется при разных условиях выполнять разные действия. Для этого предназначено событие BGBS Задание логики перетирания статусов. В скрипте (обработчике этого события) можно отслеживать откуда выполняется попытка установить статус (сервер, клиент, web) и полностью изменить алгоритм.

На WiKi-странице "Изменение стандартной логики перетирания статусов" приведены дополнительные подробности и прилагается полный рабочий скрипт, представляющий собой в точности реализованную стандартную логику. Его также можно использовать для изучения алгоритма. Там же расположено описание алгоритма установки статусов и примеры скриптов.

Возможность включается установкой в конфигурации сервера флага

# Использовать ли событие Задание логики установки/перетирания статусов (иначе используется стандартное поведение)
use.event.set.status.logic=1