SetMark ◾️ Резервирование марок в чеке продажи

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

SetMark ◾️ Резервирование марок в чеке продажи

https://crystals.atlassian.net/browse/CR-13001

https://crystals.atlassian.net/browse/SRTB-9835

https://crystals.atlassian.net/browse/MARK-646

SETRETAIL 10.4.21.0

SETMARK 2.28.0

Описание

Функциональность предназначена для предотвращения повторных продаж одной и той же марки на разных кассах в рамках одного магазина. При переходе к расчету касса отправляет запрос в SetMark для постановки маркированных товаров в чеке на временный резерв. Если марка уже зарезервирована другой кассой, система блокирует операцию.

Ценность

Исключение случаев нарушения законодательства и штрафов, связанных с дублированными продажами маркированных товаров (ЧЗ и ЕГАИС). Это защищает ритейлера от фрода и ошибок персонала, когда одну марку пытаются пробить одновременно на нескольких кассах.

Логика работы

Процесс резервирования включает следующие этапы:

  1. Добавление товара — при сканировании марки касса выполняет стандартную валидацию в SetMark. Если марка уже зарезервирована за другой кассой, добавление блокируется.

  2. Переход к расчету — при переходе к выбору типа оплаты касса отправляет в SetMark список всех марок чека для постановки на резерв. SetMark проверяет, не заняты ли эти марки другими кассами или заказами.

  3. Отмена расчета — при выходе из режима оплаты в чек касса отправляет фоновый запрос на снятие резерва.

  4. Предфискализация — перед регистрацией чека выполняется финальная проверка. Если резерв истек, продажа запрещается.

  5. Завершение продажи — после успешной фискализации SetMark снимает резерв и переводит марку в статус «Продана».

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

Основной сценарий резервирования

  1. Кассир №1 на Кассе №1 сканирует марку КМ_1. Товар добавляется в чек.

172.29.19.11_08_06_2026-14_55_13.png
  1. Кассир №2 на Кассе №2 сканирует марку КМ_1. Товар добавляется в чек.

chrome_kk3wO9CO0t.png
  1. Кассир №1 переходит к расчету. Касса №1 отправляет запрос в SetMark, и марка КМ_1 ставится в резерв за Кассой №1.

dbeaver_yxCIUH8TF4.png
  1. Кассир №2 переходит к расчету. Касса №2 отправляет запрос на резервирование КМ_1.

  2. SetMark возвращает ошибку, так как марка уже зарезервирована за Кассой №1.

  3. На Кассе №2 отображается окно «Запрет продажи» со списком проблемных позиций и номером кассы, за которой они зарезервированы.

chrome_npPhi2pRqf.png
  1. Кассир №1 завершает оплату и фискализирует чек. Марка КМ_1 переходит в статус «Продана».

  2. Кассир №2 удаляет товар из чека или аннулирует чек.

Снятие резерва при выходе из расчета

  1. Кассир перешел в режим расчета, марка успешно зарезервирована в SetMark.

  2. Покупатель решает добавить еще один товар, и кассир выходит из режима расчета обратно в чек.

  3. Касса отправляет фоновый запрос в SetMark на снятие резерва со всех марок данного чека.

  4. Марки снова становятся доступны для резервирования на любой кассе.

Примеры отрицательных сценариев

Попытка продажи зарезервированной марки

  1. На Кассе №2 кассир перешел к расчету с товаром КМ_1. Марка КМ_1 встала в резерв за Кассой №2.

  2. В это же время на Кассе №1 кассир сканирует ту же марку КМ_1.

  3. SetMark возвращает ошибку: «Марка зарезервирована для продажи на кассе №2. Продажа запрещена».

  4. Касса №1 отображает блокирующее уведомление и не позволяет добавить товар в чек.

172.29.19.11_08_06_2026-16_49_24.png

 

Ошибка на этапе фискализации

  1. Марка была успешно зарезервирована за кассой при переходе к оплате.

  2. Время жизни резерва (настройка setmark.reserve.mark.max.age) истекло до момента завершения транзакции.

  3. При попытке фискализации SetMark обнаруживает, что активный резерв для данной кассы отсутствует.

  4. Касса выводит блокирующее сообщение: «Марка не зарезервирована за этой кассой. Продажа запрещена».

172.29.19.11_08_06_2026-17_00_16.png
  1. Кассир может аннулировать чек или вернуться в него для повторного резервирования.

Валидация групповых и вложенных марок

Система автоматически контролирует целостность упаковок при резервировании:

  • Групповая упаковка (блок) — если в чеке зарезервирован блок сигарет, система запретит добавление или резервирование отдельных пачек из этого блока на любой кассе.

  • Вложенная марка (пачка) — если зарезервирована хотя бы одна пачка, система заблокирует резервирование всей групповой упаковки (блока), к которой она принадлежит.

  • При попытке нарушить эти правила касса выводит сообщение: «Товар уже добавлен в чек в составе групповой упаковки» или «Товар из этой групповой упаковки уже добавлен в чек».

Ограничения

  • Резервирование работает только для чеков продажи. Для чеков возврата функционал не применяется.

  • При отсутствии связи с сервером SetMark функционал резервирования недоступен.

  • Если включена настройка «Разрешать операцию при недоступности сервера», проверка резерва игнорируется при обрыве связи.

  • Валидация вложенных марок (пачка/блок) обеспечивает проверку только в рамках одного чека и одной кассы.

Настройка

Настройка в Set Retail 10

На сервере в разделе Интеграция → Внешние процессинги в настройках плагина Сервер валидации SetMark Centrum установите флажок image2021-3-24_11-29-30.png Резервирование маркированных товаров при переходе к расчету → кликните СОХРАНИТЬ.

image-20260608-095106.png

Настройки в SetMark

Отредактируйте параметры в файле конфигурации config/application.properties.

Настройка

Значение по умолчанию

Описание

Настройка

Значение по умолчанию

Описание

setmark.reserve.invoice.validate

false

При значении true включает проверку наличия резерва на этапе предфискализации.

setmark.reserve.mark.max.age

15

Время жизни резерва в минутах. По истечении срока марка снимается с резерва автоматически.

setmark.reserve.cleanup.cron

0 0/15 * * * ?

Периодичность очистки БД от просроченных резервов (рекомендуется раз в 15 минут).

image-20260608-100451.png

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