Публичное пространство
Маркировка и МРЦ◾️Продажа разливного пива по хелпер-коду
https://crystals.atlassian.net/browse/SRTB-7976
https://crystals.atlassian.net/browse/CR-10852
10.4.1.0
Описание
Касса может сама собирать КМ без Set Mark и работать в оффлайне.
Формат хелпер-кода
Пример кода: 0104600068039088215e8*'nl93TO4b33510003231723101294001
0104600068039088 - GTIN товара, с AI='01', 16 цифр
215e8*'nl - Серийный номер товара c AI='21', 9 символов
93TO4b - инвертированный криптохвост с AI='93’, 6 символов
3351000323 - опциональная секция, объем кеги AI='335Y’, 10 символов
17231012 - Дата окончания срока годности ГГММДД с AI='17'
94001 - Порядковый номер хелпер кода в разрезе кеги с AI='94'
Логика
Касса собирает КМ из секций хелпер-кода:
КИ (GTIN+SN)
Инвертировав часть криптохвоста, в частности получить 93b4OTb, при необходимости добавляет спец-символ перед криптохвостом, согласно формату КМ.
Объем кега, если есть.
Ищет и добавляет товар по КМ.
Проверяет возможность добавление товара исходя из:
Срока годности.
Наличие достаточного количества на остатках в SetMark для этой КМ.
Если проверки пройдены - товар добавляется в чек, согласно процессу работы с маркированным товаром.
Если проверки не пройдены - касса показывает соответствующую ошибку.
Формат штрихкода-транформера
{
"masks": [
{
"description": "Парсинг QR с книги",
"fields": [
{
"name": "mark_without_crypto",
"length": 25
},
{
"name": "prefix_93",
"value": "93"
},
{
"name": "invert_crypto",
"length": 4
},
{
"name": "prefix_17",
"value": "17"
},
{
"name": "expired_date_yymmdd",
"length": "6"
},
{
"name": "prefix_94",
"value": "94"
},
{
"name": "num",
"length": "3"
}
],
"inputRestrictions": {
"scannerOnly": false
},
"result": {
"productRef": {
"barcode": {
"source": "function",
"value": {
"name": "join",
"parameters": [
{
"source": "field",
"value": "mark_without_crypto"
},
{
"source": "field",
"value": "prefix_93"
},
{
"source": "function",
"value": {
"name": "reverseString",
"parameters": {
"inputString": {
"source": "field",
"value": "invert_crypto"
}
}
}
}
]
}
}
},
"position": {
"expirationDate": {
"source": "function",
"value": {
"name": "parseDate",
"parameters": {
"inputString": {
"source": "field",
"value": "expired_date_yymmdd"
},
"dateFormat": "ddMMyy"
}
}
}
}
}
}
]
}Работа штрихкода-транформера
Касса собирает из секций
mark_without_crypto,invert_cryptoиvolume_kegКМ для поиска товара, с учетом:Перед секциями
invert_cryptoиvolume_kegдобавляется символ разделитель, для корректной валидации во внешних системах (ЧЗ, ОИСМ), чтобы марка соответствовала отсканированной сканеромКасса инвертирует криптохвост, начиная с третьего символа, т.е. 93TO4b должна стать 93b4OT
Касса осуществляет поиск товара по полученной КМ, если такого товара нет, ожидается стандартная ошибка “Товар не найден“
Если товар нашелся, касса проверяет его срок годности согласно сроку полученному из ШК:
Если срок годности истек, касса запрещает добавление товара в чек
Если срок годности не истек, касса сохраняет полученную дату истечения в позицию, для последующего возможного расчета скидок по сроку годности.
Далее касса осуществляет проверку КМ и добавление товара в чек, согласно стандартному процессу работу с маркированным товаром:
Валидирует продажу КМ в SetMark, наличие достаточного объема по КМ на остатках. (при наличии)
Валидирует продажу КМ в ЧЗ/Запретительная касса и ОИСМ
Ценность
Продажа разливного пива без нарушения законодательства РФ.
Функциональность позволяет директору магазина продавать пиво по хелпер-коду, в одно сканирование, чтобы исключить возможное нарушения законодательства, когда бутылку разливного пива маркируют КМ с кега
Примеры работы
Предварительные условия
В Set10 задействована маска ШК-трансформера для хелпер-кода
В Set10 есть товар разливного пива со всеми необходимыми признаками маркировки и ШК 4600068039088.
Есть SetMark, в который загружены КИ разливного пива.
0104600068039088215e8*'nl - остаток 5л
Для удобства тестирования, считаем что выключена подрезка криптохвоста
Основной сценарий
Кассир авторизуется на кассе
Кассир сканирует хелпер-код
0104600068039088215e8*'nl93TO4b1723101294001
Ожидание:
Касса запретила продажу, так как срок годности истек 12/10/2023.
Кассир сканирует хелпер код:
0104600068039088215e8*'nl93TO4b1724101294001
Ожидание:
Проверка срока годности. Касса разрешила добавить разливное пиво в чек по этой КМ.
Проверка в SetMark. SetMark разрешил продажу пива с этой КМ и объемом
Проверка в ЧЗ и ОИСМ. Сервис проверил КМ 0104600068039088215e8*'nl93b4OT
Кассир добавляет еще 4 бутылки с таким же хелпер кодом
Ожидание:
Касса разрешила добавить разливное пиво в чек по этой КМ.
Итого в чеке 5л пива
Кассир сканирует хелпер код:
0104600068039088215e8*'nl93TO4b1724101294001
Ожидание:
SetMark заблокировал продажу так как на остатках было только 5л.
Кассир регистрирует чек
Ожидание:
В ОФД зарегистрирована продажа 5л пива с КМ: 0104600068039088215e8*'nl
В Set10 выгружена продажа разливного пива с КМ 0104600068039088215e8*'nl93b4OT, особенно проверяем что корректно собрали КМ.
Ограничения
В рамках данной задачи не предполагается логики обработки порядкового номера хелпер-кода
Объем пива в бутылке определяется:
Согласно полю количество в ШК-трансформере, если оно есть
При его отсутствии (как в данном примере), Из ШК/GTIN загруженного в товаре, по умолчанию =1л.
Так как секция объема кега является опциональной в КМ разливного пиво, предполагается что будет 2 формата ШК трансформера:
С объемом кега
без объема кега
Объем кеги нужен чтобы собрать КМ в том виде, в котором его выпустил производитель. Логика работы кассы в зависимости от его наличия и значения не меняется.
Настройки
Настроек не требуется