В таблице 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
.