Публичное пространство
SetKit ◾️ Запрет учёта скидок мягкого чека в лимитах по акциям
https://crystals.atlassian.net/browse/SR-8936
https://crystals.atlassian.net/browse/CR-15407
SETRETAIL 10.5.0.0
SETKIT 4.13.0
Описание
В SetLoyalty для рекламных акций можно задать ограничения — например, не более N срабатываний за период для одного покупателя или не более X рублей суммарной скидки. Учёт срабатываний ведётся в сервисе лимитов SetLoyalty: каждый раз, когда акция применяется к покупке, сервис фиксирует факт срабатывания и уменьшает доступный остаток.
Если внешняя система, например, интернет-магазин, при создании заказа обращается к сервису лимитов и фиксирует срабатывание акции, а затем заказ продаётся на кассе по мягкому чеку — касса повторно фиксирует ту же скидку в сервисе лимитов. Происходит двойной учёт. Это происходит даже при наличии атрибута isFixedDiscounts: true, который запрещает кассе пересчёт скидок, но не влияет на обращение к сервису лимитов.
Начиная с версии 10.5.0.0 в API SetKit добавлен атрибут loyaltyRestrictionsApplyingDisabled, который позволяет указать, что по конкретной скидке в мягком чеке касса не должна обращаться к сервису лимитов SetLoyalty.
Ценность
Исключает двойной учёт скидок в сервисе лимитов при работе с заказами SetKit.
Сохраняет корректную работу лимитов по остальным акциям в чеке.
Логика работы
Атрибут loyaltyRestrictionsApplyingDisabled передаётся в объекте позиционной скидки (SoftCheque.positions[].positionDiscounts[]):
true— касса не фиксирует применение этой скидки в сервисе лимитов SetLoyalty.falseили атрибут отсутствует — касса обрабатывает скидку стандартным образом, включая фиксацию в сервисе лимитов.
Атрибут учитывается как при продаже, так и при возврате товаров по мягкому чеку.
Пример работы
Исходные условия
Настроена интеграция кассы с SetKit и SetLoyalty.
В Set Centrum заведена и запущена кассовая механика Скидка 20% на товары для дома с ограничением: не более 3 срабатываний на покупателя в месяц.
Интернет-магазин при создании заказа самовывоза обратился к сервису лимитов SetLoyalty и зафиксировал срабатывание акции. Остаток по лимиту покупателя: 2 из 3.
В мягком чеке переданы атрибуты:
loyaltyRestrictionsApplyingDisabled: true— касса не фиксирует эту скидку в сервисе лимитов.isFixedDiscounts: true— запрет пересчёта скидок кассой (не влияет на обращение к сервису лимитов).
{
"status": "READY_TO_PAYMENT",
"dateCreated": "2023-02-05 14:00",
"isEditable": true,
"positionsAddingAllowed": true,
"totalPrice": 8160.96,
"discountsValue": 0.0,
"positions": [
{
"positionOrder": 1,
"departNumber": 1,
"barcode": "5000001",
"quantity": 4,
"unitPrice": 2550.30,
"vat": 20,
"vatValue": 1360.16,
"discountValue": 2040.24,
"totalPrice": 8160.96,
"isFixedPrice": false,
"isFixedDiscounts": true,
"positionDiscounts": [
{
"cardNumber": "2200123456789",
"quantity": 4,
"advertisementId": "ONLINE_20_HOME",
"advertisementCode": "ONLINE-20-HOME",
"advertisementName": "Скидка 20% на товары для дома",
"value": 2040.24,
"loyaltyRestrictionsApplyingDisabled": true
}
]
}
],
"client": {
"guid": "100021",
"cardNumber": "90001234",
"email": "test@test.ru",
"firstName": "Иван",
"lastName": "Иванов"
}
}Сценарии продажи
Атрибут loyaltyRestrictionsApplyingDisabled = true
Покупатель приходит в магазин забрать заказ.
Кассир сканирует штрихкод заказа → касса загружает мягкий чек из SetKit.
Скидка из мягкого чека применяется в чеке продажи.
Касса не обращается к сервису лимитов SetLoyalty для фиксации этой скидки.
Кассир принимает оплату и закрывает чек.
Результат: лимит покупателя не изменился — остаток по-прежнему 2 из 3. Двойного учёта не произошло.
Атрибут отсутствует или false
Интернет-магазин создаёт мягкий чек в SetKit со скидкой без атрибута
loyaltyRestrictionsApplyingDisabled.Покупатель приходит в магазин забрать заказ.
Кассир сканирует штрихкод заказа → касса загружает мягкий чек из SetKit.
Скидка из мягкого чека применяется в чеке продажи.
Касса обращается к сервису лимитов SetLoyalty и фиксирует срабатывание акции.
Кассир принимает оплату и закрывает чек.
Результат: лимит покупателя уменьшился — остаток: 1 из 3.
Несколько скидок с разным значением атрибута
Интернет-магазин создаёт мягкий чек с двумя скидками:
Скидка 1:
loyaltyRestrictionsApplyingDisabled: true.Скидка 2: атрибут отсутствует.
Кассир сканирует штрихкод заказа → касса загружает мягкий чек из SetKit.
Обе скидки применяются в чеке продажи:
По скидке 1 касса не обращается к сервису лимитов.
По скидке 2 касса обращается к сервису лимитов и фиксирует срабатывание.
Кассир принимает оплату и закрывает чек.
Результат: в сервисе лимитов изменился лимит только по акции, соответствующей скидке 2.
Сценарий возврата
Атрибут loyaltyRestrictionsApplyingDisabled = true
Покупатель возвращает товар, проданный по мягкому чеку со скидкой
loyaltyRestrictionsApplyingDisabled: true.Кассир оформляет чек возврата.
Касса не обращается к сервису лимитов SetLoyalty для учёта скидки.
Результат: лимит по акции не изменяется после возврата.
Ограничения
Атрибут
loyaltyRestrictionsApplyingDisabledприменяется только к позиционным скидкам в мягком чеке. На скидки, рассчитанные кассой самостоятельно (не из мягкого чека), атрибут не влияет.В версиях SetKit ниже 4.13.0 атрибут
loyaltyRestrictionsApplyingDisabledигнорируется.