В таблице cs_accnt с первичным ключом nm содержится
текущий тариф (колонка tarif), стек/очередь будущих тарифов
(колонка tarifn), и готовность к переключению (srdy).
Описание tarifn в
другом
документе, нас пока интересует только
тот факт, что из tarifn можно получить следующий тариф.
Содержимым srdy должна управлять тарифная
программа, которая в данный момент ведет договор, или другие процессы (например, оператор),
а само переключение происходит внешними относительно тарифных программ средствами.
Процесс переключения может вызываться на разных этапах.
Сейчас это: tick, hour,
day, month.
Правила переключения содержатся в таблице taritch,
ее колонки frotr и totar
являются первичным ключом, и каждая из них - внешний ключ к тарифу.
Эти колонки определяют тарифы, с которого предстоит переключиться
и на который произойдет переключение, соответственно.
Если колонка f_bing непустая,
то в ней задано имя функции с параметром nm
и булевым результатом, и именно эта функция вызывается для переключения.
Если ее результат TRUE, то переключение считается на этом этапе выполненным,
и общий процесс только зачищает srdy
и продвигает стек/очередь будущих тарифов. Если результат этой
процедуры другой, процесс переключения производится по общим правилам.
Эти правила заданы в колонке twis.
Эта колонка, как и srdy - битовая
строка, и значения битов в этих строках до некоторой степени похожи,
и имеют общее пространство имен, заданное таблицей tars
и/или макрокомандой tarsNUM().
В srdy используется только
подмножество tarsNUM() битов:
tick,
hour,
day,
month
выставляются тарифным планом в знак того, что тарифный план отдает
клиента на соответствующем этапе, разрешает переход только если в
twis тоже установлен
соответствующий бит; нулевое значение этих битов запрещает
переход только если в twis
выставлен бит end;
ftick,
fhour,
fday,
fmonth
могут устанавливаться, например, оператором или другим процессом
в знак желания отобрать клиента у текущего тарифа независимо
от желания тарифной программы, учитываются только если в
twis тоже установлен
соответствующий бит;
end
маскирует тариф из стека - он исключается из кандидатов
для переключения на него.
Если тарифы, с которого и на который происходит переключение, совпадают,
и этот тариф повторяемый (бит t_rpt),
то переход происходит упрощенно - зачищается srdy
и продвигает стек/очередь будущих тарифов.
Если есть заказ на переключение в
tick, hour,
day, month
в srdy клиента, и на соответствующем
этапе переключение почему либо не случилось, то у таких клиентов выключается
auto в cs_cl.bits.