Уровни участников ПЛ
- Карточка настройки уровня
- Уровни участников
- Уровни текущих периодов
- Уровни календарных периодов
- Уровни скользящих периодов
- Уровни календарных периодов с дополнительным основанием
- Настройки уровней участника для многопартнёрской системы
- Ручное назначение уровня контакту на определенный период
- Замена карт
Уровни – это количественные, дискретные характеристики степени участия клиентов в программе лояльности. Уровни могут изменяться с течением времени, поэтому они могут в какой-то мере отражать вовлеченность участника в программу. Параметры уровней настраиваемые, их нужно установить вначале использования, впоследствии изменять параметры уровней в течение периода действия – нельзя. Какой именно параметр будет характеризовать участие в программе лояльности определяется основанием расчёта уровня. В качестве этого основания может выступать: сумма покупок (сумма покупок со скидкой) участника за какой-то период, суммарное количество начисленных баллов за период, количество дней посещения с совершением покупок, а также произвольные события, которые можно отслеживать счётчиками системы. Периоды могут быть календарными и текущими. В случае использования календарных периодов, уровень присваивается на основании накопления предыдущего календарного периода и действует весь текущий период и заканчивается в один день для всех участников. В случае использования текущих периодов уровень присваивается в тот день, когда накопления конкретного участника превзойдут порог уровня и действуют весь текущий период, но этот период может закончится не в один день для всех участников, дата окончания устанавливается индивидуально для каждого участника.
Поскольку процедуры расчёта уровней выполняются на одном сервере, то присвоение уровней происходит по локальному времени сервера системы и не зависит от часового пояса участника.
Если для расчёта уровней используются события, которые являются покупками, то эти события можно учесть либо по времени самого события, которое указано в запросе на регистрацию либо по времени регистрации события. Режимы учёта регулируются значением системной настройки Loyalty.SystemJob.Level.SettlementDate. Если значение настройки установлено как 1, y или Y – то расчёт происходит по дате, указанной в запросе, при прочих значениях – по дате регистрации события. В случае, если используются офлайновые загрузки чеков или точки продаж распределены по разным часовым поясам, по избежание потери отдельных покупок нужно использовать режим расчёта относительно даты регистрации запроса.
Для использования уровней необходимо завести записи самих уровней и одну (или несколько) записей настроек уровней.
Карточка настройки уровня
Запись настройки уровней определяет общий алгоритм расчёта: основание для расчёта уровней, для каких участников будут рассчитываться уровни (контакт или карта), тип периода накопления и др.

Рис. Настройка уровня в системе
Карточка Настройки уровня содержит следующие параметры:
| Поле | Описание | Обязательное поле | Редактирование |
| Активно | Бинарное поле, означающее, будет ли использоваться запись данного определения атрибута при регистрируемых событиях в системе (обрабатываться процессингом). | Да | Поле доступно для редактирования, заполняется вручную |
| Ответственный | Пользователь, ответственный за создание и ведение данной записи. | Да | Поле доступно для редактирования. Заполняется из справочника пользователей. |
| Подразделение | Подразделение, к которому относится данная запись. | Да | Поле доступно для редактирования. Заполняется из справочника подразделений. |
| Общие сведения | |||
| Наименование | Название настройки уровня. | Да | Поле доступно для редактирования, заполняется вручную
|
| Вид периода | Вид периода расчёта уровней. Допустимые значения:
Значение по умолчанию: Текущий. | Нет | Поле доступно для редактирования, заполняется вручную |
| Объект расчёта | Параметр, определяющий в отношении каких участников, будут рассчитываться уровни. Допустимое значение:
| Да | Поле доступно для редактирования, заполняется вручную |
| Основание расчёта | Параметр, определяющий какие накопления будут учитываться при расчёте уровней. Допустимые значения:
Значение по умолчанию: Сумма покупок со скидкой. | Да | Поле доступно для редактирования, заполняется вручную |
| Учитывать возвраты | Параметр, указывающий, необходимость учитывать возвраты для расчёта уровня. Возможные значения:
Значение по умолчанию: Нет. | Да | Поле доступно для редактирования, заполняется вручную |
| Не учитываемый период (дн.) | Количество дней, на которое откладывается подсчет накоплений. Применимо в случаях возврата товара. Поле отображается, если параметр «Вид периода» = Текущий или Скользящий. | Нет | Поле доступно для редактирования, заполняется вручную |
| Кампания | Поле отображается, если параметр «Вид периода» = Текущий или Скользящий. Ссылка на акцию программы лояльности. Если понижение уровня участника сопровождается списанием баллов, то баллы будут списаны в рамках данной кампании. | Нет | Поле доступно для редактирования, заполняется вручную |
| Настройки | |||
| Накопления действия уровня | Поле отображается, если параметр «Вид периода» = Текущий или Скользящий. Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться текущее значение накоплений (на текущем уровне), от которых зависит уровень участника. | Да | Поле доступно для редактирования, заполняется вручную |
| Сумма накоплений для перехода | Поле отображается, если параметр «Вид периода» = Текущий или Скользящий. Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться величина накоплений, которые необходимо сделать до конца периода действия текущего уровня, чтобы повысить уровень. | Да | Поле доступно для редактирования, заполняется вручную |
| Сумма накоплений для сохранения | Поле отображается, если параметр «Вид периода» = Текущий или Скользящий. Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться величина накоплений, которые необходимо сделать до конца периода действия текущего уровня, чтобы он сохранился. | Да | Поле доступно для редактирования, заполняется вручную |
| Дата начала | Поле отображается, если параметр «Вид периода» = Текущий или Скользящий. Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться значение даты начала действия присвоенного уровня. | Да | Поле доступно для редактирования, заполняется вручную |
| Маркетинговый список | Поле отображается, если параметр «Вид периода» = Текущий. Ссылка на маркетинговый список. Ежедневно данный список очищается и при пересчёте уровней в него добавляются только те контакты, у которых в данные сутки произошло изменение уровня. Имеет смысл заполнять только для уровней контактов. | Нет | Поле доступно для редактирования, заполняется вручную |
| Маркетинговый список для полного пересчёта | Поле отображается, если параметр «Вид периода» = Текущий. Ссылка на маркетинговый список. Если в данном списке есть контакты, то для этих контактов в ближайшие сутки будут полностью пересчитаны уровни с момента регистрации в программе лояльности. | Нет | Поле доступно для редактирования, заполняется вручную |
| Правило счётчика | Поле отображается, если параметр «Основание расчёта» = События счётчиков. Ссылка на правило счётчика. В случае, если основание расчёта есть «События счётчиков», то в качестве накоплений будут учитываться величины счётчиков, созданных по этому правилу. | Нет | Поле доступно для редактирования, заполняется вручную |
| Тип балла | Поле отображается, если параметр «Основание расчёта» = Баллы за покупки. Параметр, определяющий какие именно баллы учитываются в накоплениях. Допустимые значения:
Значение по умолчанию: Бонус. | Нет | Поле доступно для редактирования, заполняется вручную |
| Группа баллов | Поле отображается, если параметр «Основание расчёта» = Баллы за покупки. Ссылка на группу баллов. Баллы, начисленные в рамках этой группы, будут учитываться в качестве накоплений. | Нет | Поле доступно для редактирования, заполняется вручную |
| Дополнительные настройки | |||
| Общие накопления | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться величина накоплений по основанию расчёта за всё время участия в программе лояльности. | Да | Поле доступно для редактирования, заполняется вручную |
| Тип периода | Величина, в которой измеряется длительность периодов расчёта уровней. Конкретное число периодов задаётся в записи уровня. Допустимые значения:
Значение по умолчанию: Месяц. | Да | Поле доступно для редактирования, заполняется вручную |
| Дата завершения | Поле отображается, если параметр «Вид периода» = Текущий. Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться значение даты окончания действия присвоенного уровня. | Да | Поле доступно для редактирования, заполняется вручную |
Параметры дополнительного основания. Секция отображается, если параметр «Вид периода» = Календарный, «Основание расчета» =Сумма покупок+Статусные бонусы, Сумма покупок со скидкой+Статусные бонусы
| |||
| Кампания для основания Доп.: | Ссылка на акцию программы лояльности, в рамках которой будут, например, списываться баллы, при понижении уровня участника | Да | Поле доступно для редактирования, заполняется вручную |
| Накопления действия Доп.: | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться текущее значение дополнительных накоплений (на текущем уровне), от которых зависит уровень участника. | Да | Поле доступно для редактирования, заполняется вручную |
| Сумма накоплений для перехода Доп.: | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться величина дополнительных накоплений, которые необходимо сделать до конца периода действия текущего уровня, чтобы повысить уровень. | Да | Поле доступно для редактирования, заполняется вручную |
| Общие накопления Доп.: | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться величина дополнительных накоплений по основанию расчёта за всё время участия в программе лояльности. | Да | Поле доступно для редактирования, заполняется вручную |
| Сумма накоплений для сохранения Доп.: | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться величина дополнительных накоплений, которые необходимо сделать до конца периода действия текущего уровня, чтобы он сохранился. | Да | Поле доступно для редактирования, заполняется вручную |
| Дата начала Доп.: | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться значение даты начала действия присвоенного уровня. | Да | Поле доступно для редактирования, заполняется вручную |
| Дата окончания Доп.: | Ссылка на определение расширенного атрибута участника. В данном расширенном атрибуте каждого отдельного участника будет сохраняться значение даты окончания действия присвоенного уровня. | Да | Поле доступно для редактирования, заполняется вручную |
| Зависимости | |||
| Партнёры | Представление, в котором показаны партнёры, относящиеся к текущей настройке | ||
| Уровни | Представление, в котором показаны уровни, относящиеся к текущей настройке | ||
Внешний вид карточки Настройка уровней:

Рис. Карточка настройки уровня (Обзор)

Рис. Карточка настройки уровня (Детализация)
Уровни участников
С настройкой уровней связана своя система уровней.

Рис. Справочник уровней в Системе
Система может состоять из одного и более уровней. Запись уровня состоит из параметров, характеризующих данный уровень: порог накоплений, количество периодов действия и др.
Запись уровня содержит следующие параметры:
| Поле | Описание | Обязательное поле | Редактирование |
| Активно | Бинарное поле, означающее, будет ли использоваться запись данного определения атрибута при регистрируемых событиях в системе (обрабатываться процессингом). | Да | Поле доступно для редактирования, заполняется вручную |
| Ответственный | Пользователь, ответственный за создание и ведение данной записи. | Да | Поле доступно для редактирования. Заполняется из справочника пользователей. |
| Подразделение | Подразделение, к которому относится данная запись. | Да | Поле доступно для редактирования. Заполняется из справочника подразделений. |
| Общие сведения | |||
| Наименование | Наименование уровня. | Да | Поле доступно для редактирования, заполняется вручную |
| Внешний идентификатор | Код интеграции с внешними системами. | Нет | Поле доступно для редактирования, заполняется вручную |
| Изображение | Ссылка на изображение уровня. | Нет | Поле доступно для редактирования, заполняется вручную |
| Партнер | Ссылка на партнёра. Данный партнер будет проставлен в созданном уровне. | Да | Поле доступно для редактирования, заполняется вручную |
| Настройка уровня | Ссылка на настройку, к системе которой принадлежит данный уровень. | Да | Поле доступно для редактирования, заполняется вручную |
| Участник | Параметр, определяющий вид участников, для которых будет рассчитываться уровень. Возможные значения:
Значение по умолчанию: Контакт. | Да | Поле доступно для редактирования, заполняется вручную
|
| Описание | Подробное описание данного уровня. | Нет | Поле доступно для редактирования, заполняется вручную |
| Общие настройки | |||
| Накопление для перехода | Порог уровня. Если сумма накоплений участника превысила данное значение в какой-то день расчёта, то участнику будет присвоен данный уровень (со следующего дня). | Да | Поле доступно для редактирования, заполняется вручную |
| Повышающий коэффициент для бонусов | Величина коэффициента, на который будут умножаться ставки бонусных правил, если настройка правила требует учитывать уровни участников. | Да | Поле доступно для редактирования, заполняется вручную |
| Повышающий коэффициент для скидок | Величина коэффициента, на который будут умножаться ставки дисконтных правил, если настройка правила требует учитывать уровни участников. | Да | Поле доступно для редактирования, заполняется вручную |
| Настройки текущего и календарного периодов | |||
| Накопление для сохранения | Величина накоплений, которую необходимо совершить участнику (будучи на данном уровне) для того, чтобы сохранить этот уровень на следующий период. | Нет | Поле доступно для редактирования, заполняется вручную |
| Период накопления | Целое число периодов настройки уровней, которое действует данный уровень (тип периода задаётся в настройке уровней в поле «Тип периода уровня»). Минимальное значение: 1 месяц. | Нет | Поле доступно для редактирования, заполняется вручную |
| Степень понижения | Параметр, определяющий, каким образом понижать уровень, если совершённая величина накоплений за период действия текущего уровня не достаточна для сохранения. Возможные значения:
Значение по умолчанию: Один уровень. | Нет | Поле доступно для редактирования, заполняется вручную |
| Учитывать остаток | Параметр, определяющий как поступать с накоплениями после завершения периода действия уровня и его понижения. Например, участник что-то накопил, но недостаточно для сохранения уровня. Уровень будет понижен, но остаток накоплений прошлого периода можно сохранить, но можно не сохранять. Возможные значения:
Значение по умолчанию: Да. | Да | Поле доступно для редактирования, заполняется вручную |
| Списывать баллы | Параметр, определяющий необходимость списывать баллы при понижении уровня. Возможные значения:
Значение по умолчанию: Нет. | Нет | Поле доступно для редактирования, заполняется вручную |
| Тип списания | Параметр, определяющий, что именно списывать. Допустимые значения:
Значение по умолчанию: Количество. | Нет | Поле доступно для редактирования, заполняется вручную |
| Вид баллов | Параметр определяющий, какие именно баллы будут списаны. Допустимые значения:
Значение по умолчанию: Бонус. | Нет | Поле доступно для редактирования, заполняется вручную |
| Количество баллов | Параметр, определяющий, сколько именно баллов будет списано при понижении уровня, если тип списания есть «Количество». | Нет | Поле доступно для редактирования, заполняется вручную |
| Настройки дополнительного основания | |||
| Накопления для перехода Доп.: | Порог уровня. Если сумма дополнительных накоплений участника превысила данное значение в какой-то день расчёта, то участнику будет присвоен данный уровень (со следующего дня). | Нет | Поле доступно для редактирования, заполняется вручную |
| Накопления для сохранения Доп.: | Величина дополнительных накоплений, которые необходимо совершить участнику (будучи на данном уровне) для того, чтобы сохранить этот уровень на следующий период. | Нет | Поле доступно для редактирования, заполняется вручную |
| Настройка любимого продукта | |||
| Максимальное количество выбранных ПА | Максимальное количество записей персональных акций, которые участник может себе назначить в качестве любимых товаров. | Нет | Поле доступно для редактирования, заполняется вручную |
| Максимальное количество назначенных ПА | Максимальное количество персональных акций, которые участник может себе выбрать из предложенных рекомендательным сервисом. | Нет | Поле доступно для редактирования, заполняется вручную |
| Максимальное количество платных, выбранных ПА | Количество любимых товаров (категорий), которые участник может приобрести за баллы в ЛК. | Нет | Поле доступно для редактирования, заполняется вручную |
| Стоимость создания (бонусные баллы) | Количество списываемых баллов за выбор дополнительного любимого товара (категории). | Нет | Поле доступно для редактирования, заполняется вручную |
Настройка любимых коллекций продуктов | |||
| Лимит для Любимой коллекции продуктов | Параметр определяет максимально возможное количество любимых коллекций продуктов для контакта на данном уровне участия. | Нет | Поле доступно для редактирования, заполняется вручную |
| Платный лимит для Любимой коллекции продуктов | Параметр определяет максимально возможное для данного уровня участия количество любимых коллекций продуктов, доступное контакту для выбора в обмен на бонусы при исчерпании лимита бесплатного выбора. | Нет | Поле доступно для редактирования, заполняется вручную |
| Стоимость платного выбора | Количество бонусов за выбор любимой коллекции продуктов при исчерпании лимита бесплатного выбора. | Нет | Поле доступно для редактирования, заполняется вручную |
| Исключаемые кампании | Ссылка на список кампаний, из которых запрещено списывать баллы для платного выбора Любимой коллекции продуктов | Нет | Поле доступно для редактирования, заполняется вручную |
Информация для Личного кабинета | |||
| Сведения для ЛК1 | Дополнительная информация об уровне (например, цвет для отображения в МП). Строковый параметр. | Нет | Поле доступно для редактирования, заполняется вручную |
| Сведения для ЛК2 | Дополнительная информация об уровне. Строковый параметр. | Нет | Поле доступно для редактирования, заполняется вручную |
| Сведения для ЛК3 | Дополнительная информация об уровне. Строковый параметр. | Нет | Поле доступно для редактирования, заполняется вручную |
| Сведения для ЛК4 | Дополнительная информация об уровне. Строковый параметр. | Нет | Поле доступно для редактирования, заполняется вручную |
| Значение для ЛК1 | Дополнительная информация об уровне (например, размер кешбека). Числовой параметр. | Нет | Поле доступно для редактирования, заполняется вручную |
| Значение для ЛК2 | Дополнительная информация об уровне. Числовой параметр. | Нет | Поле доступно для редактирования, заполняется вручную |
| Зависимости | |||
| Контакты | Представление, в котором показаны контакты, относящиеся к текущему уровню | ||
| Карты | Представление, в котором показаны карты, относящиеся к текущему уровню | ||
| Фильтры по контактам | Представление, в котором показаны фильтры по контактам (уровни контактов и уровни карт), относящиеся к текущему уровню | ||
Внешний вид карточки Уровня участника:

Рис. Карточка уровня (Обзор)
Рис. Карточка уровня (Детализация)
Уровни участников могут быть присвоены либо контакту, либо карте. Также могут быть автоматически рассчитываемыми, но также уровни можно присвоить вручную. Для этого есть возможность изменения признака редактируемости уровня.
Важно! Если уровень в какой-то момент стал редактируемым, то с этого момента он исключается из процедуры автоматического пересчёта, параметры его накоплений более не пересчитываются. Аналогично, если уровень стал с какого-то момента нередактируемым, то накопления, необходимые для его пересчёта начинают пересчитываться с момента изменения признака. Процедуры обратного пересчёта уровней для этих случаев не предусматривается.
Бессрочных периодов для расчета уровней не предусмотрено. Но можно настроить так, чтобы уровень только повышался. Чтобы настроить непонижаемый уровень, в параметре «Степень понижения» (настройка «Уровень»), нужно указать «Нет». А в настройке периода накопления задать продолжительный период.
Записи уровней определяют количество записей (персональных акций), которые могут быть связаны с участником в виде рекомендованных или любимых товаров. В записи уровня указываются лимиты на количество таких записей, которые участник может выбрать в своём личном кабинете.

Рис. Параметры настройки количества платных и бесплатных персональных акций для конкретного уровня.
В случае когда выбор любимой категории / любимой коллекции продуктов реализуется не через настройки персональных акций, а при помощи добавления Контакта в маркетинговый список правила начисления методом POST RuleForSelection/BindContact, используется секция "Настройка любимых коллекций продуктов".
Информация об установленных в системе лимитах передается на сайт и в МП посредством методов API:

Рис. Параметры настройки любимых товарных общностей (платных и бесплатных) для конкретного уровня.
С помощью новых методов GET LevelAccumulation/GetAllByContact и GET Level/GetAll участнику ПЛ можно выводить в ЛК МП информацию о накоплениях контакта на текущем уровне, о действующих уровнях программы, порогах перехода на каждый уровень, периодах действия уровня, параметрах поощрений, соответствующих уровню, способах отображения уровня в МП и тп.
Все параметры уровня и настройки уровня, возвращаемые методами, перечислены в их описании.
Для передачи информации об уровне менеджеру программы лояльности необходимо ввести в интерфейсе Manzana Loyalty основные параметры действующих уровней, в том числе для каждого из уровней указать соответствующие ему описание, параметры поощрений, способы отображения уровня в МП.
Для дополнительной информации об уровне есть отдельный блок "Информация для Личного кабинета", в котором 4 строковых и 2 числовых параметра. В них можно указать, например, размер кешбека, цвет для отображения в МП и тп.

Рис. Информационные параметры об уровне для ЛК
Уровни текущих периодов
По данному алгоритму рассчитываются уровни карт и контактов в случае, если параметр «Вид периода» настройки уровней установлен в значение «Текущий».
Рис. Карточка настройки уровня с видом периода «Текущий»
В этом случае, при достижении порога уровня на основании прошлых покупок до текущей даты, этот уровень будет присвоен контакту на какой-то период в будущем и не понизится в течение всего этого периода. Причём дата окончания срока действия уровня известна уже в момент его присвоения.
Агрегаты расчёта уровней
Уровни пересчитываются особой процедурой в офлайн режиме. Для пересчёта используются покупки участника за предыдущие календарные сутки. Поскольку пересчёт производится ежедневно, то таким образом исчерпывается вся история продаж участника. Тем не менее, при пересчёте рассматривается не вся история продаж, а только за последние сутки, поэтому для сохранения информации по накоплениям предусмотрены специальные агрегаты.
В качестве этих агрегатов используются расширенные атрибуты участника: либо расширенные атрибуты контакта, либо карты. Какие именно атрибуты будут использоваться для хранения накоплений участника задаётся один раз в записи настройки уровней. Эта запись определяет всю систему уровней для одного вида участников: контакта или карты.

Рис. Параметр выбора применения уровней для контакта или карты в карточке настройки уровней.

Рис. Определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
В определениях расширенных атрибутов, в которых хранятся накопления участника ПЛ, поле "Тип атрибута" всегда заполняется значением "Число", поскольку в них записываются величины накоплений.

Рис. Тип атрибута для определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
Основные агрегаты (расширенные атрибуты участника):
- Накопления действия уровня – сумма накоплений участника, с которой сравниваются пороги уровней, и если накопления превзошли порог, то участнику присваивается соответствующий уровень. (Накопления действия уровня не учитывают накопления порога текущего уровня).
- Сумма накоплений для перехода – в этом агрегате ежедневно обновляется значение, которое участнику нужно накопить до конца действия текущего уровня, чтобы перейти на следующий.
- Сумма накоплений для сохранения – в этом агрегате ежедневно обновляется значение, которое нужно накопить участнику до конца действия текущего уровня, чтобы этот текущий уровень продлить на следующий период.
- Дата начала – в этом агрегате устанавливается для конкретного участника дата, с которой начал действовать его текущий уровень.
- Дата завершения – в этом агрегате устанавливается для конкретного участника дата, до которой будет действовать его текущий уровень.
- Общие накопления - в этом агрегате сохраняется величина накоплений по основанию расчёта за всё время участия в программе лояльности.
Поскольку агрегаты сохраняются в расширенных атрибутах участников, то их значения можно использовать в метапеременных, и таким образом коммуницировать с клиентом, информируя его, например, о том, что приближается дата окончания действия уровня и необходимо в оставшееся время совершить покупок на определённую сумму, чтобы этот уровень сохранить или повысить.
Расширенные атрибуты для уровней – технические, в интерфейсе системы доступны для просмотра через рефереснные представления:
- ea_level_total_by_level - Накопления действия уровня
- ea_level_summ_for_change - Сумма накоплений для перехода
- ea_level_summ_for_keep - Сумма накоплений для сохранения
- ea_level_enddate - Дата начала
- ea_level_startdate - Дата завершения
- ea_level_total_summ - Общие накопления

Рис. Технические расширенные атрибуты в карточке контакта
Важно! Все агрегаты получают значения в результате отработки офлайновой процедуры и не изменяются сразу после совершения покупок в течение суток до момента запуска процедуры пересчёта.
Виды накоплений для изменения уровней
Уровни могут быть реализованы для следующих характеристик покупок:
- Сумма покупок
- Сумма покупок со скидкой
- Сумма скидок
- Баллы за покупки
- События счётчиков

Рис. Основания расчёта в карточке Настройки уровней, если Вид периода=Текущий
Например, если накопления – это сумма покупок со скидкой, то уровни будут определяться суммарным значением величины денег, которые участник заплатил за свои покупки с учётом предоставленных ему скидок. Остальные параметры аналогично.
Если уровни зависят от баллов за покупки, то рассматриваются только баллы, начисленные в результате совершения покупок, и не учитываются баллы, полученные клиентов иным способом: например, начисленные через задание по расписанию или вручную.
Если, например, основание сумма со скидкой, но необходимо рассматривать только покупки свыше определённой суммы, то для таких алгоритмов следует использовать события счётчиков. Однако следует иметь в виду, что использование счётчиков снижает производительность системы, поэтому их использование допустимо при не слишком частых продажах (менее 100 чеков в минуту, определяется условиями SLA).
Для накоплений рассматриваются только покупки. Чеки возвратов не учитываются. Также не учитываются отмены чеков задним числом, то есть отмены чеков предыдущих суток.
Уровни пересчитываются только для участников, в записях которых признак редактирования уровня выставлен в значение «Нет».

Рис. Параметр признака редактирования уровня в карточке контакта

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

Рис. Параметры «Накопление для перехода» и «Накопление для сохранения» в карточке уровня
Также для этого участника сохраняются значения двух расширенных атрибутов: в один записывается дата присвоения уровня (в данном случае текущая дата расчёта), во второй атрибут записывается дата окончания действия уровня, которая определяется величиной периода накопления, заданной в записи уровня, и типом периода действия, заданного в настройке уровней.

Рис. Параметры «Дата начала» и «Дата завершения» в карточке Настройка уровней
Если повышения уровня не происходит, всё равно пересчитываются агрегаты накоплений, если за предыдущие сутки какие-то покупки были совершены. В этом случае даты действия уровня не изменяются.
Понижение уровня
Постоянно отслеживается дата окончания действия уровня, записанная для каждого участника в специальном расширенном атрибуте. Если дата завершения пришлась на прошлые календарные сутки, то анализируются накопления.
Если накоплений достаточно для сохранения уровня, то этот же уровень присваивается на следующий период.

Рис. Параметр «Накопление для сохранения» в карточке Уровня
Соответственным образом изменяются атрибуты для дат действия уровней. При этом агрегату (расширенному атрибуту) для накоплений действия уровня присваивается значение порога сохранённого уровня. Одновременно пересчитываются атрибуты для перехода – устанавливается как разница между порогами для текущего и следующего уровня, и атрибуты для сохранения – присваивается значение из записи уровня.
Если же накоплений недостаточно для сохранения текущего уровня, то уровень понижается. В зависимости от параметра уровня «Степень понижения», уровень может быть понижен до предыдущего (значение «Один уровень») или сброшен совсем (значение «Все уровни»). Также уровень может быть присвоен на основании текущих накоплений, агрегированных в значении атрибута накоплений действия уровня.
Рис. Параметр «Степень понижения» в карточке Уровня
Если предусматривается сброс (значение «Все уровни»), то все атрибуты обнуляются и накопления рассчитываются с самого начала, как будто этот участник только что зарегистрировался.
Если предусматривается понижение до предыдущего уровня (значение «Один уровень»), то участнику присваивается предыдущий по иерархии уровень данной системы. При этом агрегату (расширенному атрибуту) для накоплений действия уровня присваивается значение порога этого предыдущего уровня, но если в настройке уровней указано учитывать остаток, то часть накоплений, которая была всё-таки собрана участником будучи на уровне выше (разница между порогом этого уровня и текущими накоплениями), может быть добавлена к текущим накоплениям, и расчёт начнётся уже с этого значения.

Рис. Параметр «Учитывать остаток» в карточке Уровня
Атрибуты для сохранения и перехода пересчитываются в соответствии с параметрами того уровня, на который случилось понижение. Также изменяются атрибуты для дат действия этого, уже ставшего текущим, уровня для участника.
Если предусматривается изменение уровня по факту накоплений, то по окончанию действия, если участник не накопил достаточно для сохранения уровня – участнику присваивается уровень максимального порога, который меньше текущих накоплений действия уровня. Остаток накоплений между текущими накоплениями и порогом присвоенного уровня также может быть учтён в новом значении агрегата накоплений, а может быть и не учтён – в зависимости от значения параметра «Учитывать остаток» того уровня, который присваивается участнику.
При понижении уровня возможно списание баллов. В зависимости от параметра уровня «Тип списания», можно списать какое-то определённое количество баллов (значение «Количество») или весь активный баланс (значение «Все активные»). Если количества баллов, необходимого для списания, недостаточно на активном балансе участника, возможен уход в отрицательный баланс.

Рис. Параметры «Тип списания» и «Количество» в карточке Уровня
При списании баллов создаётся отрицательная порция на всю величину списания. Данная порция относится к кампании, которая задана в записи настройки уровней. Гашение этой порции баллов производится общей процедурой гашения баллов, поэтому расчёт уровней с настройками списания происходит ранее выполнения процедуры гашения баллов.
Логирование
При любых изменениях уровней создаются записи истории уровней, которые можно просмотреть на карточке контакта на табе «История уровней».

Рис. История уровней в карточке контакта.
Частый пересчёт накоплений
Для алгоритма текущих периодов предусмотрен пересчёт накоплений и возможное присвоение уровней не один раз в календарные сутки, а каждые пять минут, за исключением интервала времени с 23:55 по 07:00 (покупки, совершённые в этот интервал времени, будут учтены первым запуском процедуры в 7 часов).
При частом пересчёте используется только время регистрации самого чека по серверному времени, в том числе и в случаях, когда дата покупки отличается от даты регистрации покупки.
В текущей функциональности частый пересчёт работает только по основанию расчета сумма покупок и сумма покупок со скидкой.
Для включения алгоритма частого пересчёта необходимо установить системную настройку Loyalty.SystemJob.Level.FrequentCalculation.TurnOn в значение Y, а также для партнёра создать расширенный атрибут, ключ которого равен Loyalty.SystemJob.Level.FrequentCalculation.TurnOn, а текстовое значение равно Y. Все чеки контактов принадлежащих партнёру, у которого атрибут установлен в указанное значение будут обрабатываться по частому алгоритму. Идентификатор последнего чека обработанного чека будет записываться в специальную таблицу, при следующем расчёте будут рассмотрены чеки, начиная со следующего идентификатора и поступившие на момент запуска расчёта. Идентификатор последнего прочитанного чека снова будет записан в специальную таблицу.
Частый расчёт производится для той же системы уровней, ссылка на настройку которой указана в записи партнёра.
Для корректного расчёта период задержки расчёта должен быть установлен в значение 0, поскольку расчёт производится только по дате процессинга чека. Также не происходит заполнение маркетинговых списков, в которые попадают контакты, для которых случилось изменение уровня по результатам отработки суточной процедуры.
Уровни календарных периодов
По данному алгоритму рассчитываются уровни карт и контактов в случае, если параметр «Вид периода» настройки уровней установлен в значение «Календарный».
В качестве календарных периодов доступны значения Месяц, Год и Скользящий. В качестве основания расчёта уровней можно использовать следующие счетчики:
Рис. Основания расчета для календарного периода
Календарные уровни с периодом год
Пересчёт уровней календарных периодов происходит одновременно для всех участников один раз в календарный период. Дата конкретного пересчёта уровней не закреплена всегда за 31 декабря, но может быть глобально установлена каким-то днём года, как значение системной настройки Loyalty.SystemJob.Level.TransitionDate (в качестве значения настройки используются день и месяц, например, 0901 означает 1 сентября). Величина данной даты обозначается как начало или окончание расчётного периода.
После регистрации участнику на следующий день присваивается минимальный уровень и далее, в зависимости от накоплений, уровень участника может быть повышен в течение расчётного периода ежедневно. Например, в день пересчёта участнику присвоен «Уровень3», потому что на момент пересчёта его накоплений в виде активных баллов хватило только для этого уровня. Далее, в течение года с момента присвоения уровня, участнику постоянно начисляются баллы. Если в какой-то день его баланса баллов становится достаточно для присвоения какого-то следующего уровня, например, «Уровня5» - то в начале следующих календарных суток этот уровень и будет присвоен участнику. Гашение баллов внутри периода, то есть окончание их срока действия не учитывается, также не учитывается использование баллов в качестве оплаты покупок, сертификатов и т.д. Таким образом, внутри учётного периода уровень может быть только повышен.
Далее, в дату окончания расчётного периода участнику присваивается уровень согласно его накоплениям в расчётный период. При этом учитывается окончание срока действия баллов внутри предыдущего периода. Расчёт уровней происходит после гашения баллов, на основание текущего баланса активных баллов участника. Таким образом при окончании периода уровень в основном может быть только понижен, но если в последний день периода случилось начисление баллов достаточно для повышения – то уровень может быть и повышен.
Агрегаты расчёта уровней
В качестве агрегатов для пересчёта уровней также используются расширенные атрибуты, которые задаются настройкой уровней.

Рис. Определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
В определениях расширенных атрибутов, в которых хранятся накопления участника ПЛ, поле "Тип атрибута" всегда заполняется значением "Число", поскольку в них записываются величины накоплений.

Рис. Тип атрибута для определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
Ежедневно анализируются взаимоотношения с участником за предыдущие сутки. Если их события есть в предыдущих сутках, то величина событий суммируется и добавляется к уже сохранённым в расширенных атрибутах агрегатам для общих накоплений уровня и накоплений действия уровня. На основании текущей величины агрегата для накоплений действия уровня анализируется возможность присвоения уровня: если значение агрегата больше порога какого-то уровня – этот уровень присваивается участнику, но присваивается виртуально, без записи в историю изменения уровней.
Если при этом случилось, что присвоенный уровень по иерархии выше текущего реального уровня участника, то этот виртуальный уровень присваивается участнику как реальный с созданием записи в истории изменения уровней. При этом изменяется значение атрибута участника для даты начала действия уровня: его значению присваивается значение текущей даты изменения.
Для этого присвоенного уровня уже рассчитываются величины накоплений для сохранения и накоплений для перехода, и эти величины записываются в соответствующие значения расширенных атрибутов участника.
Если накоплений недостаточно для перехода, то соответствующие величины рассчитываются исходя из параметров текущего уровня и полученных накоплений.
При достижении даты окончания расчётного периода анализируются полученные накопления и участнику присваивается уровень с минимальным порогом, который превосходит агрегат накоплений действия уровня. Данному агрегату и, соответственно, значению расширенного атрибута участника присваивается нулевое значение. Значение агрегата для общих накоплений и значение соответствующего расширенного атрибута при этом не изменяется.
Агрегаты накоплений для сохранения вычисляются исходя из нулевых начальных накоплений и порога присвоенного уровня.
Атрибут для даты окончания действия уровня также меняет значение: дата и месяц устанавливаются как дата и месяц окончания расчётного периода, а год устанавливается следующий за текущим.
Если полученный уровень отличается от текущего уровня участника, то изменяется и расширенный атрибут для даты начала действия уровня: дата и месяц устанавливаются как дата и месяц окончания расчётного периода, а год устанавливается как текущий.
Если полученный уровень совпадает с предыдущим, то значение расширенного атрибута для даты начала действия уровня не изменяется.
Также производится очистка значений виртуальных уровней.
Важно! Все агрегаты получают значения в результате отработки офлайновой процедуры и не изменяются сразу после совершения покупок в течение суток до момента запуска процедуры пересчёта.
Важно! Расширенные атрибуты для уровней контакта отображаются на форме контакта на вкладке «Связанные записи» в пункте «Технические РА».

Рис. Технические расширенные атрибуты в карточке контакта
Виды накоплений для изменения уровней
Для уровней годовых календарных периодов реализовано несколько видов накоплений (см. рис. ниже).
Рис. Основания расчета для календарного периода
Таким образом, уровни календарного года могут зависеть от сумм покупок, количества дней с покупками, начисленных баллов и купленных товаров.
В случае начисления баллов, уровни календарного года будут зависеть от начисленных любым образом баллов, а не только в результате совершения покупок.
Начисленные баллы можно ограничить группой баллов, указав ссылку на неё в настройке уровней. В этом случае в расчёте будут учтены только начисления в рамках кампаний этой группы. При отсутствии ссылки на группу баллов учитываются начисления по любым кампаниям.
При выборе периода Месяц, в качестве основания расчета можно выбрать количество дней с покупками. В этом случае учитывается именно день + чек. Например, если для перехода на следующий уровень покупатель должен сделать 4 визита за месяц, то будет учитываться именно факт посещения магазина, но не количество чеков, сделанных в этот день. Если в один день покупатель делает 4 чека, то этот день дает лишь вклад в значении 1 в общие накопления за месяц.
Расчёт уровня может производиться на основании одного из двух критериев. Например, для того, чтобы перейти с базового на первый уровень программы лояльности, покупателю необходимо выполнить следующие условия:
1. Базовый уровень – без условий
2. Первый уровень – сумма покупок от 5 000 руб. до 9 999.99 руб. за месяц или от 50 до 99 разновидностей товаров за месяц.
При достижении определенного уровня предусмотрено начисление бонусов при покупках в том количестве от суммы чека, которое характерно для достигнутого уровня:
1. Базовый – 0,5%
2. Первый – 1%
Если до конца текущего месяца покупатель совершил покупки на сумму 4 999 руб. и приобрел 51 шт. уникальных товаров, следовательно, в следующем месяце ему будет присвоен 1 уровень, и он будет получать 1% бонусов от суммы чека (за исключением табачных изделий) до конца месяца. В конце следующего месяца покупателю также будет присвоен определенный уровень согласно его покупкам.
Повышение и понижение уровней
В текущей версии не предусмотрено списание баллов при понижении уровней участников календарных периодов.
Логирование
При любых изменениях уровней создаются записи истории уровней, которые можно просмотреть на карточке контакта на табе «История уровней».
Календарные уровни с периодом месяц
Пересчёт уровней для участников происходит один раз в календарный месяц, строго в начале первых суток месяца.
После регистрации в онлайн режиме участнику (только если это контакт) присваивается начальный уровень, внешний идентификатор которого задаётся значением партнёрской настройки Loyalty.SystemJob.Custom.LevelContact.PrimaryLevel. В качестве значения необходимо указать внешний идентификатор первичного уровня.
Для изменения уровня предусмотрены все виды накоплений (основание расчёта) для календарных периодов.
Для месячных календарных периодов предусмотрен онлайн режим расчёта количества дней с покупками. В этом случае счётчик посещений, который в данном случае представляет собой атрибут накоплений текущих периодов рассчитывается внутри транзакции покупки участника. Но возвраты покупок и отмены покупок не учитываются в онлайн режиме. Они учитываются при пересчёте агрегатов, который случается ежедневно. В этом случае возможны небольшие расхождения между значением агрегатов на конец суток и на начало суток, после полного пересчёта накоплений.
Аналогично, уровни и агрегаты пересчитываются только для участников, в записях которых признак редактирования уровня выставлен в значение «Нет».
Агрегаты расчёта уровней
В качестве агрегатов для пересчёта уровней также используются расширенные атрибуты, которые задаются настройкой уровней. Это особые атрибуты, которые задаются отдельными ссылками на определения атрибутов в настройке уровней. Заполнение этих ссылок возможно только при корректной установке основания расчёта и типа периода расчёта.

Рис. Определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
В определениях расширенных атрибутов, в которых хранятся накопления участника ПЛ, поле "Тип атрибута" всегда заполняется значением "Число", поскольку в них записываются величины накоплений.

Рис. Тип атрибута для определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
Ежедневно анализируются взаимоотношения с участником за период с начала месяца, которому принадлежит дата расчёта. Если в какие-то дни есть покупки – то агрегату текущих накоплений месяца присваивается значение суммарного количества дней текущего месяца, в которые есть хотя бы по одной покупке. (Если в день более одной покупки, то этот день всё равно учитывается как единица).
При расчёте учитываются возвраты, но только в пределах текущего месяца. Если в текущем месяца зарегистрирован возврат покупки за прошлый месяц – такое событие не учитывается при расчёте агрегатов.
Частичные возвраты учитываются для изменения агрегатов, если их количество по конкретной покупке привело к полному возврату покупки.
Таким образом, ежедневно формируется счётчик посещений, который является расширенным атрибутом участника (контакта или карты).
В первый день месяца происходит учёт покупок последнего дня прошлого месяца для формирования окончательного значения счётчика посещений. И сразу перенос этого значения в агрегат накоплений прошлого периода. А агрегат накоплений текущего периода обнуляется, и этот агрегат начинает ежедневно обновляться в течение текущего месяца.
Таким образом, у участника постоянно присутствуют два расширенных атрибута: накопления текущего месяца и накопления прошлого месяца. Запись значений старше, чем за прошлый месяц, не предусматривается.
При пересчёте уровней для месячного календарного периода не предусматривается формирования маркетинговых списков и списков карт, в которые включаются контакты или карты, для которых случилось изменение уровня.
Важно! Все агрегаты получают значения в результате отработки офлайновой процедуры и не изменяются сразу после совершения покупок в течение суток до момента запуска процедуры пересчёта.
Повышение и понижение уровней
В текущей версии не предусмотрено списание баллов при понижении уровней участников календарных периодов.
Логирование
При любых изменениях уровней создаются записи истории уровней, которые можно просмотреть на карточке контакта на табе «История уровней».

Рис. История уровней контакта в карточке контакта
Уровни скользящих периодов
По данному алгоритму рассчитываются уровни карт и контактов в случае, если параметр «Вид периода» настройки уровней установлен в значение «Скользящий».
По данному алгоритму рассчитываются уровни только для основания Сумма покупок и Сумма покупок со скидкой. В этом случае, уровни пересчитываются ежедневно. Период постоянный. Поскольку ежедневно какая-то часть истории продаж постоянно отбрасывается (так как начало периода постоянно смещается), то в этом случае нет понятия срока окончания действия уровня. Таким образом, прогнозирование окончания действия для уровней скользящего периода невозможно.
Период расчёта
Для скользящих периодов значения в настройке вида периода и его значения в самом уровне – игнорируются. Период можно задать единым для всей системы партнёрских уровней. Период задаётся указанием партнёрских настроек:
Loyalty.SystemJob.LevelContact.SlidingPeriod.Type – значение задаёт тип периода для функциональности уровней скользящего пересчёта. Допустимые значения (целые числа): 1 – День, 2 – месяц, 3 – Год. Значение по умолчанию – 2
Loyalty.SystemJob.LevelContact.SlidingPeriod.Amount – значение задаёт величину длительности периода для функциональности уровней скользящего пересчёта.
Агрегаты расчёта уровней
В качестве агрегатов для пересчёта уровней также используются расширенные атрибуты, которые задаются настройкой уровней.

Рис. Определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
В определениях расширенных атрибутов, в которых хранятся накопления участника ПЛ, поле "Тип атрибута" всегда заполняется значением "Число", поскольку в них записываются величины накоплений.

Рис. Тип атрибута для определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
Основные агрегаты (расширенные атрибуты участника):
- Накопления действия уровня – сумма накоплений участника, с которой сравниваются пороги уровней, и если накопления превзошли порог, то участнику присваивается соответствующий уровень. (Накопления действия уровня не учитываются накопления порога текущего уровня).
- Сумма накоплений для перехода – в этом агрегате ежедневно обновляется значение, которое участнику нужно накопить до конца действия текущего уровня, чтобы перейти на следующий.
- Сумма накоплений для сохранения – в этом агрегате ежедневно обновляется значение, которое нужно накопить участнику до конца действия текущего уровня, чтобы этот текущий уровень продлить на следующий период.
- Дата начала – в этом агрегате устанавливается для конкретного участника дата, с которой начал действовать его текущий уровень.
- Общие накопления - в этом агрегате сохраняется величина накоплений по основанию расчёта за всё время участия в программе лояльности.
Поскольку агрегаты сохраняются в расширенных атрибутах участников, то их значения можно использовать в метапеременных, и таким образом коммуницировать с клиентом. Коммуникации следует настраивать очень аккуратно, поскольку для этого вила периодов некоторая часть покупок ежедневно непредсказуемо отбрасывается, участника можно ввести в заблуждение.
Расширенные атрибуты – технически, в интерфейсе системы доступны для просмотра через представления в карточке соответствующей сущности.
Важно! Все агрегаты получают значения в результате отработки офлайновой процедуры и не изменяются сразу после совершения покупок в течение суток до момента запуска процедуры пересчёта.
Виды накоплений (основания расчёта) для изменения уровней
Уровни скользящих периодов могут быть реализованы только для следующих оснований расчёта:
- Сумма покупок
- Сумма покупок со скидкой
Из истории продаж учитываются только покупки. Чеки возвратов не учитываются при расчёте уровней.
Аналогично, уровни пересчитываются только для участников, в записях которых признак редактирования уровня выставлен в значение «Нет».
Повышение и понижение уровней
Поскольку процедура присвоения уровней для скользящих периодов не является процедурой учёта историчности накоплений, а при всяком запуске происходит полный пересчёт накоплений, то для этого случая не предусмотрено списания баллов при каких бы то ни было изменениях уровней участника.
Логирование
При любых изменениях уровней создаются записи истории уровней, которые можно просмотреть на карточке контакта на табе «История уровней».
Уровни календарных периодов с дополнительным основанием
По данному алгоритму рассчитываются уровни контактов в случае, если параметр «Вид периода» настройки уровней установлен в значение «Календарный». При этом календарный период установлен как Год, а основание расчёта есть «Сумма покупок + Статусные баллы» или «Сумма покупок со скидкой + Статусные баллы». При этом сумма или сумма покупок со скидкой являются основаниями накопления для основания расчёта уровней, а начисленные статусные баллы – дополнительные накопления.
Расчёт уровней
Полный пересчёт уровней календарных периодов происходит одновременно для всех участников один раз в календарный период относительно даты, которая указана в настройке Loyalty.SystemJob.Level.TransitionDate (в качестве значения настройки используются день и месяц, например, 0901 означает 1 сентября). Величина данной даты обозначается как начало или окончание расчётного периода. Пересчёт производится в 1 час ночи в первые сутки после указанной даты.
Частичный пересчёт уровней производится ежедневно. Начинается расчёт в 1 час ночи следующих календарных суток. В зависимости от значения основания расчёта вычисляются суточные накопления покупок и суточные начисления статусных баллов. Полученные величины добавляются к уже сохранённым агрегатам (записанным в технических расширенных атрибутах контакта). Таким образом получаются текущие накопления в виде покупок и начисления статусных баллов.
Текущие начисления в виде покупок сравниваются с порогами уровней для покупок, а текущие начисления статусных баллов сравниваются с порогами уровней для начисления статусных баллов.
Если по какому-то виду накоплений (или по двум сразу) получается так, что превзойдён порог какого-то уровня, отличающегося от текущего – этот уровень присваивается контакту в виде виртуального уровня. Виртуальных уровней контакта два – один присваивается контакту в зависимости от накоплений по покупкам, второй – в зависимости от начислений статусных баллов. Если реальный текущий уровень становится меньше какого-то из виртуальных, то контакту присваивается максимальный из двух виртуальных уровней.
Запись логов уровней создаётся только в случае изменения реального уровня контакта. В случае изменения виртуального уровня (без изменения реального) – записи логов не создаётся.
Таким образом до наступления даты полного пересчёта реальный уровень контакта может только повышаться, но не может понизится.
В момент полного пересчёта, виртуальные уровни заполняются пустыми значениями. А реальный уровень присваивается исходя из накоплений предыдущего периода. В следующий момент полного пересчёта реальный уровень может и понизиться, если максимальный из виртуальных уровней меньше чем текущий реальный на момент пересчёта.

Рис. Карточка настройки уровней с параметрами Вид периода = Календарный, Основание расчёта = Сумма покупок + статусные баллы
Важно! Последовательность иерархии уровней определяется порогами покупок, а не порогами количества накопленных статусных баллов.
Агрегаты расчёта уровней
В качестве агрегатов для пересчёта уровней используются технические расширенные атрибуты контакта, которые задаются настройкой уровней. Данные расширенные атрибуты отображаются на форме контакта в подтабе «Технические РА».

Рис. Технические расширенные атрибуты в карточке контакта
Основные агрегаты (расширенные атрибуты участника), определяют накопления первого виртуального уровня:
- Накопления действия уровня – сумма накоплений участника на текущем первом виртуальном уровне. Вместе с порогом текущего уровня, соответствуют текущим накоплениям на конкретную дату. То есть в данном атрибуте записывается сумма покупок или сумма покупок со скидкой за период действия уровня за вычетом порога текущего уровня.
- Сумма накоплений для перехода – в этом агрегате ежедневно обновляется значение, которое участнику нужно накопить для того, чтобы перейти на следующий первый виртуальный уровень.
- Сумма накоплений для сохранения – в этом агрегате ежедневно обновляется значение, которое нужно накопить участнику, чтобы этот текущий первый виртуальный уровень продлить на следующий период.
Дополнительные агрегаты (расширенные атрибуты участника), определяют накопления второго виртуального уровня:
- Накопления действия Доп.– накопления участника на текущем втором виртуальном уровне. Вместе с порогом текущего уровня, соответствуют текущему количеству накоплений на конкретную дату. То есть в данном атрибуте записываются накопления за период действия уровня за вычетом дополнительного порога текущего уровня. В Технических РА отображается с описанием ea_level_total_by_level_add.
- Сумма накоплений для перехода Доп. – в этом агрегате ежедневно обновляется значение, которое участнику нужно накопить в виде начислений за покупки для того, чтобы перейти на следующий второй виртуальный уровень. В Технических РА представлении отображается с описанием ea_level_summ_for_change_add.
- Сумма накоплений для сохранения Доп. – в этом агрегате ежедневно обновляется значение, которое нужно накопить участнику, чтобы этот текущий второй виртуальный уровень продлить на следующий период. В Технических РА отображается с описанием ea_level_summ_for_keep_add.
Для каждого виртуального уровня предусмотрены также расширенные атрибуты для хранения даты начала действия и даты окончания действия. Для первого виртуального уровня дата начала записывается в Технический РА с описанием ea_level_startdate, дата окончания записывается в атрибут с описанием ea_level_enddate. Для второго виртуального уровня в атрибуты: ea_level_startdate_add и ea_level_enddate_add соответственно.
При частичном пересчёте атрибут для даты начала действия устанавливается как текущая дата пересчёта, в случае если виртуальный уровень изменился, а атрибут для даты окончания действия в этом случае устанавливается как дата начала + 1 год – 1 день. Расширенные атрибуты для дат действия также пересчитываются при полном пересчёте уровней.
В текущей функциональности расширенные атрибуты дат действия рассчитываются для технических целей и функционально смысла не имеют. Но их можно использовать как справочную информацию.

Рис. Определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
В определениях расширенных атрибутов, в которых хранятся накопления участника ПЛ, поле "Тип атрибута" всегда заполняется значением "Число", поскольку в них записываются величины накоплений.

Рис. Тип атрибута для определения расширенных атрибутов, в которых хранятся накопления участника ПЛ
Поскольку агрегаты сохраняются в расширенных атрибутах участников, то их значения можно использовать в метапеременных, и таким образом коммуницировать с клиентом, информируя его, например, о том, что приближается дата окончания действия уровня и необходимо в оставшееся время совершить покупок на определённую сумму, чтобы этот уровень сохранить или повысить.
Важно! Все агрегаты получают значения в результате отработки офлайновой процедуры и не изменяются сразу после совершения покупок в течение суток до момента запуска процедуры пересчёта.
Виды накоплений для изменения уровней
В текущей версии для основного накопления может использоваться только сумма покупок или сумма покупок со скидкой. При этом можно учесть возвраты, суммовые показатели которых добавляются к агрегатам с обратным знаком (как они записаны в базу данных). Но для учёта возвратов в накоплениях необходимо указать необходимость этого в записи настройки уровней, по которой рассчитывается данная система.
Для дополнительных накоплений может использоваться только количество начисленных статусных баллов, причём начисленных только за покупки и только в рамках одной кампании, которая задаётся отдельным параметром в записи настройки уровней.
Повышение и понижение уровней
В текущей версии не предусмотрено списание баллов при понижении уровней участников календарных периодов.
Логирование
При любых изменениях уровней создаются записи истории уровней, которые можно просмотреть на карточке контакта на табе «История уровней».
Настройки уровней участника для многопартнёрской системы
Если участники прикреплены к разным партнёрам, то возможно для каждого партнёра использовать свою систему уровней, то есть свою настройку уровней. Для этого необходимо иметь несколько записей настроек уровней. Соответственно, в записи партнёра необходимо указать, по какой настройке считать уровни участников, относящихся к этому партнёру.

Рис. Представление уровней в карточке Партнёра
Расчёт производится в этом случае на основании связи партнёра с участником, но не на основании связи покупки участника с партнёром.
Для включения функциональности партнёрских настроек уровней необходимо установить дополнительно системные настройки Loyalty.SystemJob.LevelContact.PartnerConsider и Loyalty.SystemJob.LevelCard.PartnerConsider в одно из значений: 1, y или Y.
Важно! При использовании нескольких систем уровней, в записи контакта и карты необходимо обязательно указывать ссылку на партнёра, которому принадлежит данный участник.
Если имеются несколько настроек уровней, но при этом мультипартнёрная функциональность отключена, то для расчёта агрегатов и системы уровней будет использоваться только одна настройка уровней, которая среди активных является последней по дате создания.
В случае изменения настроек уровней внутри периода не предусматривается обратного пересчёта уровней и агрегатов для новых настроек и систем уровней.
Ручное назначение уровня контакту на определенный период
Через интерфейс Manzana Loyalty Online можно задать для конкретного контакта уровень на определенный период действия. В течение этого периода уровень остается неизменным, при этом накопления для пересчета уровня продолжают пересчитываться, и на момент окончания периода действия назначенного вручную уровня, контакту устанавливается уровень, соответствующий его текущим накоплениям.
Такой функционал может быть полезен, например, для вовлечения клиентов в покупки посредством повышения количества привилегий на устанавливаемом уровне. Например, компания запустила акцию, покупателям, вступившим в ПЛ до конца месяца, назначается фиксированный 2-ой уровень участия с повышенным кэшбеком от покупок – 5%, сроком на 2 месяца, независимо от того, сколько покупок или визитов совершил покупатель за этот период.
Для ручного назначения уровня в карточке контакта необходимо активировать параметр «Редактируемый уровень» и заполнить поле «Дата окончания действия уровня»
| Поле | Описание | Обязательное поле | Редактирование |
| Дата окончания действия уровня | Отображается, если Редактируемый уровень=Да. Дата окончания действия назначаемого уровня. | Нет | Значение доступно для редактирования, активируется вручную. |

Рис. Настройка редактируемого фиксированного уровня в карточке Контакта
При таких настройках у контакта сохранится уровень "Знакомый" до 30.09.2024 г.
Если на проекте для партнера включается настройка Loyalty.SystemJob.CalculationSavingsEditableLevel.TurnOn, то происходит пересчет накоплений для редактируемого уровня, и на следующий день – 01.10. контакту присвоится уровень, согласно текущим накоплениям по основной настройке уровня, у которой Вид Периода = «Календарный» и одновременно Основание начисления = «Количество дней с покупками».

Рис. Основная настройка уровня
После пересчета уровня в интерфейсе значение в поле «Редактируемый уровень» станет «Нет», в поле «Дата окончания действия уровня» - пусто.
Замена карт
При замене карт все накопленные расширенные атрибуты старой карты переносятся на новую карту. Также на новой карте присваивается уровень старой карты.
Поскольку на истории продаж контакта замена карт не отражается, то при замене карт атрибуты и уровни контактов не изменяются.