SetKit ◾️ Запрет учёта скидок мягкого чека в лимитах по акциям

Публичное пространство

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 или атрибут отсутствует — касса обрабатывает скидку стандартным образом, включая фиксацию в сервисе лимитов.

Атрибут учитывается как при продаже, так и при возврате товаров по мягкому чеку.

Пример работы

Исходные условия

  1. Настроена интеграция кассы с SetKit и SetLoyalty.

  2. В Set Centrum заведена и запущена кассовая механика Скидка 20% на товары для дома с ограничением: не более 3 срабатываний на покупателя в месяц.

  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

  1. Покупатель приходит в магазин забрать заказ.

  2. Кассир сканирует штрихкод заказа → касса загружает мягкий чек из SetKit.

  3. Скидка из мягкого чека применяется в чеке продажи.

  4. Касса не обращается к сервису лимитов SetLoyalty для фиксации этой скидки.

  5. Кассир принимает оплату и закрывает чек.

Результат: лимит покупателя не изменился — остаток по-прежнему 2 из 3. Двойного учёта не произошло.

Атрибут отсутствует или false

  1. Интернет-магазин создаёт мягкий чек в SetKit со скидкой без атрибута loyaltyRestrictionsApplyingDisabled.

  2. Покупатель приходит в магазин забрать заказ.

  3. Кассир сканирует штрихкод заказа → касса загружает мягкий чек из SetKit.

  4. Скидка из мягкого чека применяется в чеке продажи.

  5. Касса обращается к сервису лимитов SetLoyalty и фиксирует срабатывание акции.

  6. Кассир принимает оплату и закрывает чек.

Результат: лимит покупателя уменьшился — остаток: 1 из 3.

Несколько скидок с разным значением атрибута

  1. Интернет-магазин создаёт мягкий чек с двумя скидками:

    • Скидка 1: loyaltyRestrictionsApplyingDisabled: true.

    • Скидка 2: атрибут отсутствует.

  2. Кассир сканирует штрихкод заказа → касса загружает мягкий чек из SetKit.

  3. Обе скидки применяются в чеке продажи:

    • По скидке 1 касса не обращается к сервису лимитов.

    • По скидке 2 касса обращается к сервису лимитов и фиксирует срабатывание.

  4. Кассир принимает оплату и закрывает чек.

Результат: в сервисе лимитов изменился лимит только по акции, соответствующей скидке 2.

Сценарий возврата

Атрибут loyaltyRestrictionsApplyingDisabled = true

  1. Покупатель возвращает товар, проданный по мягкому чеку со скидкой loyaltyRestrictionsApplyingDisabled: true.

  2. Кассир оформляет чек возврата.

  3. Касса не обращается к сервису лимитов SetLoyalty для учёта скидки.

Результат: лимит по акции не изменяется после возврата.

Ограничения

  • Атрибут loyaltyRestrictionsApplyingDisabled применяется только к позиционным скидкам в мягком чеке. На скидки, рассчитанные кассой самостоятельно (не из мягкого чека), атрибут не влияет.

  • В версиях SetKit ниже 4.13.0 атрибут loyaltyRestrictionsApplyingDisabled игнорируется.

Статьи по теме