Маркировка и МРЦ◾️Продажа разливного пива по хелпер-коду

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

Маркировка и МРЦ◾️Продажа разливного пива по хелпер-коду

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'

Логика

  1. Касса собирает КМ из секций хелпер-кода:

    1. КИ (GTIN+SN)

    2. Инвертировав часть криптохвоста, в частности получить 93b4OTb, при необходимости добавляет спец-символ перед криптохвостом, согласно формату КМ.

    3. Объем кега, если есть.

  2. Ищет и добавляет товар по КМ.

  3. Проверяет возможность добавление товара исходя из:

    1. Срока годности.

    2. Наличие достаточного количества на остатках в SetMark для этой КМ.

  4. Если проверки пройдены - товар добавляется в чек, согласно процессу работы с маркированным товаром.

  5. Если проверки не пройдены - касса показывает соответствующую ошибку.

Формат штрихкода-транформера

{ "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" } } } } } } ] }

Работа штрихкода-транформера

  1. Касса собирает из секций mark_without_crypto ,invert_crypto и volume_keg КМ для поиска товара, с учетом:

    1. Перед секциями invert_crypto и volume_keg добавляется символ разделитель, для корректной валидации во внешних системах (ЧЗ, ОИСМ), чтобы марка соответствовала отсканированной сканером

    2. Касса инвертирует криптохвост, начиная с третьего символа, т.е. 93TO4b должна стать 93b4OT

  2. Касса осуществляет поиск товара по полученной КМ, если такого товара нет, ожидается стандартная ошибка “Товар не найден“

  3. Если товар нашелся, касса проверяет его срок годности согласно сроку полученному из ШК:

    1. Если срок годности истек, касса запрещает добавление товара в чек

    2. Если срок годности не истек, касса сохраняет полученную дату истечения в позицию, для последующего возможного расчета скидок по сроку годности.

  4. Далее касса осуществляет проверку КМ и добавление товара в чек, согласно стандартному процессу работу с маркированным товаром:

    1. Валидирует продажу КМ в SetMark, наличие достаточного объема по КМ на остатках. (при наличии)

    2. Валидирует продажу КМ в ЧЗ/Запретительная касса и ОИСМ

Ценность

Продажа разливного пива без нарушения законодательства РФ.

Функциональность позволяет директору магазина продавать пиво по хелпер-коду, в одно сканирование, чтобы исключить возможное нарушения законодательства, когда бутылку разливного пива маркируют КМ с кега

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

Предварительные условия

  1. В Set10 задействована маска ШК-трансформера для хелпер-кода

  2. В Set10 есть товар разливного пива со всеми необходимыми признаками маркировки и ШК 4600068039088.

  3. Есть SetMark, в который загружены КИ разливного пива.

    1. 0104600068039088215e8*'nl - остаток 5л

  4. Для удобства тестирования, считаем что выключена подрезка криптохвоста

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

  1. Кассир авторизуется на кассе

  2. Кассир сканирует хелпер-код

    1. 0104600068039088215e8*'nl93TO4b1723101294001

  3. Ожидание:

    1. Касса запретила продажу, так как срок годности истек 12/10/2023.

  4. Кассир сканирует хелпер код:

    1. 0104600068039088215e8*'nl93TO4b1724101294001

  5. Ожидание:

    1. Проверка срока годности. Касса разрешила добавить разливное пиво в чек по этой КМ.

    2. Проверка в SetMark. SetMark разрешил продажу пива с этой КМ и объемом

    3. Проверка в ЧЗ и ОИСМ. Сервис проверил КМ 0104600068039088215e8*'nl93b4OT

  6. Кассир добавляет еще 4 бутылки с таким же хелпер кодом

  7. Ожидание:

    1. Касса разрешила добавить разливное пиво в чек по этой КМ.

    2. Итого в чеке 5л пива

  8. Кассир сканирует хелпер код:

    1. 0104600068039088215e8*'nl93TO4b1724101294001

  9. Ожидание:

    1. SetMark заблокировал продажу так как на остатках было только 5л.

  10. Кассир регистрирует чек

  11. Ожидание:

    1. В ОФД зарегистрирована продажа 5л пива с КМ: 0104600068039088215e8*'nl

    2. В Set10 выгружена продажа разливного пива с КМ 0104600068039088215e8*'nl93b4OT, особенно проверяем что корректно собрали КМ.

Ограничения

  1. В рамках данной задачи не предполагается логики обработки порядкового номера хелпер-кода

  2. Объем пива в бутылке определяется:

    1. Согласно полю количество в ШК-трансформере, если оно есть

    2. При его отсутствии (как в данном примере), Из ШК/GTIN загруженного в товаре, по умолчанию =1л.

  3. Так как секция объема кега является опциональной в КМ разливного пиво, предполагается что будет 2 формата ШК трансформера:

    1. С объемом кега

    2. без объема кега

  4. Объем кеги нужен чтобы собрать КМ в том виде, в котором его выпустил производитель. Логика работы кассы в зависимости от его наличия и значения не меняется.

Настройки

Настроек не требуется