Заявки на процессинг по дополнительной карте

Редактировал(а) Ксения Худякова 2026/08/28 14:07

Описание

Система предоставляет возможность двойного начисления по одному фискальному чеку: один раз по карте участника программы лояльности и один раз по карте менеджера (дополнительной карте). Данная функциональность называется MultipleProcessing. Это позволяет партнёрам внедрить прозрачную, привязанную к выручке систему мотивации сотрудников без ручного учёта продаж.

Принцип работы

  1. В мобильном приложении программы лояльности участник сканирует QR-код с кассового чека.
  2. Приложение передаёт в систему ML посредством запроса OData POST Receipt/BindContact реквизиты отсканированного чека (сумма, дата, ФН, ФД, ФПД) и, при наличии, номер дополнительной карты в параметре AdditionalCardNumber.
  3. Если у партнёра включена настройка Loyalty.Processing.MultipleProcessing.TurnOn и у контакта определена карта с типом менеджера (согласно настройке Loyalty.Processing.MultipleProcessing.ManagerCardType), система определяет порядок сканирования и действует по одному из двух путей:
  4. Путь А — менеджер сканировал первым: создаётся запись ожидания в очереди (state=0). Когда позднее поступает чек участника с совпадающими реквизитами (T/S/Fn/Fp/Fd), система обрабатывает его по карте менеджера напрямую через Receipt_UpdateStatus. Запись в очереди переводится в технический статус -1.
  5. Путь Б — участник сканировал первым: система обрабатывает чек участника стандартным образом. Когда позднее поступает скан менеджера с совпадающими реквизитами, система находит чек участника в loyalty.fns_cheque, добавляет событие в loyalty.reprocessing_events и создаёт запись в очереди со статусом «Успешно» (1). Задание SQL Agent «MultipleProcessing» обрабатывает событие и выполняет начисление по карте менеджера.
  6. Если в течение установленного периода ожидания (настройка Loyalty.Processing.MultipleProcessing.ManagerCheque.WaitingDay) чек участника так и не поступил, задание SQL Agent «Finish Multiprocessing Queue» переводит запись в статус «Просрочено».

Записи очереди мультипроцессинга доступны в интерфейсе MLO в разделе «Заявки на загрузку чеков» → представление «Заявки на процессинг по дополнительной карте». Представление доступно только для чтения: создание и редактирование записей вручную не предусмотрено.

1787906702620-846.png

  1. Поля представления
ПолеОписаниеОбязательноеРедактирование
Идентификатор записиУникальный идентификатор записи очереди (автоинкремент)ДаНедоступно
Системное наименованиеСистемное поле наименования записи (значение совпадает с идентификатором)НетНедоступно
Номер дополнительной картыНомер карты менеджера (дополнительной карты), по которой выполняется начислениеДаНедоступно
Дата созданияДата и время поступления запроса в очередь мультипроцессингаНетНедоступно
Номер фискального накопителяНомер фискального накопителя из реквизитов чека (ФН)НетНедоступно
Номер фискального документаНомер фискального документа из реквизитов чека (ФД)НетНедоступно
Фискальный признак документаФискальный признак документа из реквизитов чека (ФПД)НетНедоступно
Дата и время чекаДата и время совершения покупки по данным чекаНетНедоступно
Сумма чекаИтоговая сумма чекаНетНедоступно
Дата и время обработкиДата и время обработки записи очередиНетНедоступно
СтатусТекущий статус обработки записи (OptionSet: 1 — Успешно, 2 — Уже привязан, 3 — Просрочено, 4 — Ошибка)НетНедоступно
ОписаниеВычисляемое поле: T = <дата> S = <сумма> Fn = <ФН> Fp = <ФПД> Fd = <ФД>НетНедоступно
СообщениеТекстовое сообщение о результате обработки или причине ошибки. Максимальная длина — 300 символовНетНедоступно
Ссылка на чек ФНССсылка на связанный чек в таблице loyalty.fns_chequeНетНедоступно
Ссылка на чек лояльностиСсылка на связанный чек в таблице loyalty.chequeНетНедоступно
ПартнёрОрганизация (партнёр), к которой относится записьДаНедоступно
  1. Статусы обработки

Поле «Статус» отражает текущее состояние записи в очереди мультипроцессинга:

ЗначениеНаименованиеОписание
0Запись создана, ожидается поступление чека от участника программы лояльности. Значение state=0 существует в базе данных, однако не входит в состав OptionSet C#-метаданных (OptionSet начинается с 1). В MLO поле «Статус» у таких записей отображается как пустое.
1УспешноКарта менеджера зарегистрирована для повторного процессинга. Устанавливается при Пути Б: когда менеджер сканирует чек позднее участника, а чек участника уже есть в системе. Начисление будет выполнено заданием «MultipleProcessing».
2Уже привязанЧек с данными реквизитами уже был ранее обработан по данной карте менеджера.
3ПросроченоЧек участника не поступил в течение установленного периода ожидания. Запись помечается заданием «Finish Multiprocessing Queue».
4ОшибкаЗарезервированный статус. В текущей реализации не устанавливается ни одной хранимой процедурой.
-1Технический статус. Устанавливается при Пути А (менеджер первым): означает, что запись уже обработана напрямую через Receipt_UpdateStatus. В MLO не отображается (OptionSet начинается с 1).
  1. Сценарии обработки
    1. Сценарий 1. Карта менеджера загружает чек первой
  1. Контакт с картой менеджера сканирует чек в мобильном приложении.
  2. Система определяет, что контакт является менеджером, и создаёт запись в очереди со state=0 (в MLO поле «Статус» отображается пустым).
  3. Участник ПЛ сканирует тот же чек позднее.
  4. Система находит совпадающую запись в очереди по реквизитам (T/S/Fn/Fp/Fd) со state=0 и переводит её в технический статус -1. Номер карты менеджера из этой записи передаётся в Receipt_UpdateStatus.
  5. Receipt_UpdateStatus выполняет обработку чека напрямую по карте менеджера. Запись в очереди остаётся со статусом -1 — в MLO это значение не отображается (OptionSet начинается с 1).
    1. Сценарий 2. Карта участника загружает чек первой
  6. Участник ПЛ сканирует чек в мобильном приложении. Чек обрабатывается стандартным образом и привязывается к карте участника.
  7. Контакт с картой менеджера сканирует тот же чек позднее.
  8. Система находит уже привязанный чек с совпадающими реквизитами, добавляет событие в loyalty.reprocessing_events и создаёт запись в очереди со статусом «Успешно» (1).
  9. Задание «MultipleProcessing» обрабатывает событие из reprocessing_events и выполняет начисление по карте менеджера.
    1. Сценарий 3. Только карта менеджера (без карты участника)
  10. Контакт с картой менеджера сканирует чек. Система создаёт запись в очереди со state=0 (в MLO поле «Статус» отображается пустым).
  11. Чек от участника ПЛ не поступает в течение периода, заданного настройкой Loyalty.Processing.MultipleProcessing.ManagerCheque.WaitingDay.
  12. Задание «Finish Multiprocessing Queue» переводит запись в статус «Просрочено» (3) с сообщением «Не загружен. Превышено время ожидания чека участника ПЛ».
  1. Системные настройки

Для работы функциональности мультипроцессинга необходимо настроить следующие параметры:

НастройкаУровеньОписаниеЗначение по умолчанию
Loyalty.Processing.MultipleProcessing.TurnOnПартнёрская / СистемнаяВключение функциональности мультипроцессинга. Возможные значения: 1 / y / Y (включено). При отсутствии настройки или значении NULL функциональность отключена.NULL
Loyalty.Processing.MultipleProcessing.ManagerCheque.WaitingDayПартнёрская / СистемнаяКоличество дней ожидания чека от участника ПЛ до перевода записи в статус «Просрочено».3
Loyalty.Processing.MultipleProcessing.ManagerCardTypeПартнёрская / СистемнаяТип карты, идентифицирующий карту менеджера. Используется для определения, является ли контакт менеджером. Настройка обязательна — без неё функциональность не работает.
Loyalty.Processing.MultipleProcessing.AdditionalCardNumber.EAKeyПартнёрская / СистемнаяКлюч расширенного атрибута для хранения номера дополнительной (менеджерской) карты в чеке.Additional_Card_Number
Loyalty.Processing.MultipleProcessing.FilteringParameter.EAKeyПартнёрская / СистемнаяКлюч расширенного атрибута для хранения параметра фильтрации чека.MultipleProcessing_FilteringParameter
  1. Задания SQL Agent

Обработка очереди мультипроцессинга выполняется двумя заданиями SQL Agent:

ЗаданиеХранимая процедураРасписаниеОписание
MultipleProcessingloyalty.p_multipleprocessingЕжедневно в 23:05:00Обрабатывает события из loyalty.reprocessing_events, выполняя начисление по карте менеджера.
Finish Multiprocessing Queueloyalty.p_finish_multiprocessing_queueЕжедневно в 00:40:00Переводит в статус «Просрочено» записи, для которых превышен период ожидания.
  1. Коды системных сообщений
КодОписание
105018Чек уже привязан к карте менеджера.
105019Покупатель не отсканировал чек. Операция внесена в лист ожидания.
105020Карта успешно привязана к чеку.
105021Настройка Loyalty.Processing.MultipleProcessing.ManagerCardType отсутствует.
  1. Связанные объекты
ОбъектПуть
Таблица очередиloyalty.fns_cheque_multiprocessing_queue
Представление UIuiro.fns_cheque_multiprocessing_queue
Хранимая процедура (основная)out.p_multipleprocessing_fns
Хранимая процедура (повторная обработка)loyalty.p_multipleprocessing
Хранимая процедура (просрочка)loyalty.p_finish_multiprocessing_queue
Регистрация сущностиUIBackend/DAL.Repositories.Mock/MetadataRepositoryMockEntities.cs
Атрибуты сущностиUIBackend/DAL.Repositories.Mock/MetadataRepositoryMockAttributes.cs
Параметры APIPrivateOfficeNG/API.Contracts/Parameters/BindReceiptContactInputParameter.cs