В различных модулях используется различный алгоритм порядка просмотра тарифных планов.
Алгоритм 1:
1. ищется тариф, содержащий модульное поддерево экземпляра модуля среди персональных тарифов договора, используется фильтр по дате, сортировка по позиции тарифа; если найдено - то 3; |
2. ищется тариф, содержащий модульное поддерево среди глобальных тарифов договора, используется фильтр по дате, сортировка по позиции тарифа; |
3. в найденном модульном поддереве ищется цена на все услуги, которые нужно тарифицировать; если цена какой-то услуги там не найдена, то ошибка тарификации. |
При такой схеме в один день в договоре может активно действовать только один тариф, содержащий модульное поддерево экземпляра модуля. Если таких тарифов окажется несколько, то будет выбран первый из них в соответствии с алгоритмом. Если в найденном тарифе не окажется цен на все требуемые услуги - получится ошибка тарификации, другие тарифы просматриваться не будут.
Алгоритм 2:
1. выбирается список тарифов, содержащих модульное поддерево экземпляра модуля среди персональных тарифов договора, используется фильтр по дате, сортировка по позиции тарифа; |
2. выбирается список тарифов, содержащих модульное поддерево экземпляра модуля среди глобальных тарифов договора, используется фильтр по дате, сортировка по позиции тарифа. |
Для каждой из тарифицируемых сущностей (услуга, тип трафика) ищется последовательно цена в списках 1 и 2. Как только находится тариф с ценой - поиск прекращается.
В ряде модулей (Phone, NPay) алгоритм поиска тарифа отличается от перечисленных здесь и описан отдельно.