DataMatrix или как правильно маркировать обувь
С 1 июля 2019 года в России введена обязательная маркировка группы товаров. С 1 марта 2020 года под этот закон должна была попасть обувь. Не все успели подготовиться, и в результате запуск перенесли на 1 июля. Lamoda среди тех, кто успел.
Поэтому мы хотим поделиться опытом с теми, кому еще только предстоит маркировать одежду, шины, парфюм и т.д. В статье описан ряд отраслевых стандартов, некоторая нормативная документации и личный опыт. Статья предназначена в первую очередь для интеграторов и разработчиков, которым только предстоит разбираться в этом проекте.
Обратите внимание, что нормативная база часто меняется, и у автора нет возможности постоянно обновлять материал. Поэтому к моменту прочтения часть информации может уже устареть.
Личный опыт получен автором как в рамках работы по проекту Datamatrix в Lamoda, так и при разработке собственного бесплатного приложения для маркировки BarCodesFx.
С 1 июля 2019 года в России действует закон об обязательной маркировке. Закон распространяется не на все группы товаров, и сроки вступления в силу обязательной маркировки для товарных групп различаются. Сейчас под обязательную маркировку попадают табак, шубы, обувь, лекарства. В ближайшее время будет вводиться для шин, одежды, духов и велосипедов. Каждая группа товаров регулируется отдельным постановлением правительства (ППР). Поэтому некоторые утверждения, правильные для обуви, могут быть неправильными для других групп товаров. Но можно надеяться, что техническая составляющая не будет сильно варьироваться для разных товарных групп.
Основная идея маркировки — каждой единице товара присваивается индивидуальный номер. По этому номеру можно отследить историю конкретной единицы товара с момента производства или импорта в страну, до момента выбытия на кассе. Звучит красиво, но на практике крайне сложно реализуемо.Подробнее концепт описан на официальном сайте честного знака.
Общепринятые термины и понятия
УОТ — участник оборота товаров.
ЦРПТ — центр развития перспективных технологий. Частная компания, единственный гос. подрядчик по проекту маркировки. Работает по схеме государственного частного партнерства (ГЧП). Информации о других участниках тендера по проекту, как и собственно о самом тендере, к сожалению, нет.
ТГ — товарная группа. Обувь, одежда, шины и т.д.
GTIN — по сути, артикул с учетом цвето-размера. Выдается в GS1 или нацкаталоге для каждого импортера или производителя на его товар. Предварительно производитель или импортер должен описать этот товар.
ППР — постановление правительства РФ. Для обуви — 860.
КМ — код маркировки. Уникальный набор символов, присвоенный конкретной единице товара. Для обуви состоит из GTIN, серийного номера, кода проверки и криптохвоста.
GS1 — международная организация, выдающая GTIN-ы. Так же составители ряда стандартов по маркировке.
Нацкаталог — аналог GS1, разработанный ЦРПТ.
Криптохвост — аналог цифровой подписи, подтверждающий легальность КМ. Обязательно должен быть в датаматриксе на марке. Хранение в текстовом виде запрещено. После распечатывания марки должен быть удален согласно договору с ЦРПТ. Не известно ни одного случая реального использования.
СУЗ — станция управления заказами. Система, в которой заказываются КМ-ы для товара.
ЭДО — электронный документооборот.
УКЭП — усиленная квалифицированная электронная подпись.
Термины и понятия в рамка данной статьи
ЧЗ — честный знак.
ЛК — личный кабинет.
Марка — напечатанный код маркировки.
Процесс выглядит следующим образом: вначале участник (УОТ) выпускает электронную подпись (УКЭП), регистрируется в честном знаке (ЧЗ), описывает товар в нацкаталоге или GS1, получает GTIN-ы на товар. На сайте честного знака эти шаги подробно расписаны, поэтому на них останавливаться не будем.
Заказ и получение кодов
После получения GTIN-ов участник (УОТ) делает заказ кодов (КМ) в системе СУЗ.
Важно, но не очевидно.
- В одном заказе можно запросить коды максимум для 10 GTIN-ов. В принципе, непонятное ограничение. Импортеру с 14 000 GTIN-ами приходится создавать 1400 заказов.
- В одном заказе можно запросить максимум 150 000 кодов.
- Есть ограничение на 100 заказов в работе. То есть одновременно в обработке может быть не более 100 заказов. Если будет более 100, то API начнет возвращать ошибку вместо списка заказов. Единственный способ устранить эту ошибку — закрыть часть заказов через веб интерфейс. В API не предусмотрено параметра для частичного отображения заказов.
- Есть лимит по количеству обращений — не более 10 запросов в секунду. По моим данным в документах это ограничение не фигурирует, но оно есть.
Из личного опыта работы с заказами кодов маркировки КМ через API системы СУЗ.
- Запрос (сам json) необходимо подписывать ГОСТ-овской подписью. Это работа с криптопро. Надо внимательно следить, чтобы используемый фреймворк или библиотека ни на байт не изменили изначальный json. Иначе подпись сразу перестает быть валидной.
- Подпись заказа. Заказ может быть подписан любой подписью, любого клиента. Если подпись валидна, то система СУЗ ее примет. При интеграции удалось подписывать запрос чужой подписью, выпущенной на тестовом УЦ. Боевой контур СУЗ-а заказ обработал и выпустил коды. На мой взгляд, это дыра в безопасности. На баг-репорт разработчики отреагировали «посмотрим». Надеюсь, исправили.
Поэтому будьте крайне внимательны, если на одном рабочем месте работает более одного юр. лица. Сегодня СУЗ примет эти запросы, а завтра запросы перепроверят и отзовут половину кодов из-за чужой подписи. И в принципе, формально будут правы.
- Автоподписание заказов — это функционал более недоступный в СУЗ. Для его работы требовалось загружать закрытую часть ключа в личном кабинете честного знака. Это является компрометацией ключа. И согласно действующему законодательству, в случае компрометации усиленной квалифицированной электронной подписи владелец должен проинформировать свой удостоверяющий центр (УЦ) и отозвать УКЭП. Если этот функционал будут возвращать, то внимательно следите, чтобы закрытая часть ключа не покидала компьютер.
- В феврале центр развития перспективных технологий (ЦРПТ) молча ввел ограничение на количество запросов к API СУЗ. Не более одного запроса в секунду. Потом так же неожиданно и молча это ограничение снял. Поэтому рекомендую заложить в систему возможность ограничивать количество запросов к API ЦРПТ на случай рецидива. Сейчас есть информация о лимите в 10 запросов в секунду.
- Также в феврале без предупреждения значительно изменилось поведение API СУЗ. В API есть запрос на получение статуса заказов. В статусе указывались буферы и их состояние. Один GTIN = один буфер. Там же указывалось, сколько кодов доступно для получения из буфера. В один прекрасный день у всех буферов количество стало -1. Пришлось через отдельный метод опрашивать состояние каждого буфера по отдельности. Вместо одного запроса пришлось делать одиннадцать.
Структура кодов
Итак, коды заказаны и сгенерированы. Их можно забрать через api в текстовом виде, в pdf как этикетки для печати и как csv файл с текстом.
Про API уже было написано выше. Что касается двух других способов. Изначально СУЗ позволял забрать коды только один раз. И если забирался pdf файл, то получить коды в текстовом виде можно было только пересканировав все датаматриксы из pdf. К счастью, добавили возможность несколько раз забирать коды, и эта проблема решилась. В течение двух дней коды еще доступны для повторного скачивания.
Если забираете в csv формате, то никогда, ни при каких обстоятельствах, не открывайте его в экселе. И никому не разрешайте. В экселе есть функция автосохранения. В момент сохранения эксель может самым непредсказуемым образом видоизменить ваши коды. Рекомендую использовать notepad++ для просмотра кодов.
Если открыть файл из СУЗ в notepad++, можно увидеть строки такого вида. Третий код — невалидный (у него отсутствуют разделители GS).
Партнеры передавали нам коды для маркировки своего товара. Невооруженным взглядом видно, какие файлы формировались с помощью экселя — до 5% кодов были невалидны.
Настоятельно рекомендую почитать про стандарты GS1. В описании стандарта есть ответы на многие вопросы по формированию DataMatrix.
Код идентификации состоит из GTIN и серийного номера. Согласно стандарту GS1 им соответствуют идентификаторы применения (ИП) 01 и 21. Обратите внимание, идентификаторы применения не являются частью GTIN и серийного номера. Они указывают, что после идентификатора применения (ИП) идет GTIN или серийный номер. Это особенно важно при программировании кассового ПО. Для заполнения тега 1162 нужны именно GTIN и серийный номер, без идентификаторов применения.
Для УПД (универсального передаточного документа) и прочих документов, наоборот, чаще всего нужна запись целиком с идентификаторами применения.
В стандарте GS1 прописано, что GTIN имеет фиксированную длину в 14 знаков и может состоять только из цифр. Серийный номер имеет переменную длину и описан на 155 странице стандарта. Там же есть ссылка на таблицу с символами, которые могут встречаться в серийном номере.
Так как серийный номер имеет переменную длину, то разделитель GS указывает на его окончание. В таблице ASCII у него код 29. Без этого разделителя ни одна программа не поймет, в какой момент закончился серийный номер, и начались другие группы данных.
Более подробно про код маркировки (КМ) можно прочитать в официальной документации.
Для обуви серийный номер зафиксирован в 13 знаков, однако, его размер могут в любой момент изменить. Для других товарных групп (ТГ) длина серийного номера может отличаться.
Генерация DataMatrix
Следующий шаг — это преобразование данных в DataMatrix код. В постановлении правительства РФ 860 указан ГОСТ, согласно которому необходимо формировать DataMatrix. Так же в ППР 860 указано обязательное использование идентификаторов применения. Обратите внимание, что в стандарте DataMatrix нет понятия «идентификаторы применения». Они есть только в стандарте GS-1 DataMatrix. Выходит, что ППР 860 неявным образом обязывает использовать именно GS-1 DataMatrix. К счастью, стандарты похожи. Основное различие: в GS-1 DataMatrix первый символ должен быть FNC1. Символ GS не должен стоять на первом месте в DataMatrix, только FNC1.
FNC1 нельзя просто взять и добавить в строку как GS. Его должна добавлять программа, генерирующая DataMatrix. На ресурсах Альянс Форты выложено несколько мобильных приложений, с помощью которых можно проверить правильность сгенерированных DataMatrix кодов.
Важно. Приложение честный знак принимает невалидные DataMatrix. Даже QR-коды. Тот факт, что марка распозналась и информация о товаре отобразилась, не является показателем, что DataMatrix сформирован правильно. Даже при замене криптохвоста приложение ЧЗ распознало марку и отобразило данные по товару.
Позже ЧЗ выпустили пояснение, как правильно генерировать коды. Из-за большого числа кодов с ошибками они признали коды без FNC1 валидными, но, все-таки, рекомендуют генерировать GS-1 DataMatrix.
К сожалению, достаточно большой процент датаматриксов от партнеров приходил с ошибками. Благодаря пояснениям от ЧЗ был полностью решен вопрос «Можно ли торговать таким товаром после 1 июля или нет?». Спойлер — можно.
Печать
Обратите внимание на способ печати марок. При печати на термопринтере марка быстро выцветает, и этот товар уже нельзя продавать. Нечитаемая марка — это нарушение ППР 860. Что ведет к изъятию товара, штрафам, уголовной ответственности.
Используйте термотрансферную печать. В этом случае марка не так сильно подвержена выцветанию. От материала этикетки также зависит, насколько марка подвержена механическим повреждениям. Если код не считывается из-за механического повреждения, это равносильно отсутствию марки со всеми вытекающими последствиями.
Выбирайте принтер из планируемых объемов печати. Настольные принтеры не рассчитаны на печать 100 000 этикеток в день.
Остановка и старт печати повышают износ принтера. Некоторые программы отправляют задание на печать по одной этикетке. Такими программами лучше не пользоваться.
Работа с документами
После того как марки распечатаны и наклеены, все дальнейшие операции с ними происходят через документы или личный кабинет честного знака.
При работе с большим количеством кодов можно создавать xml файлы, в которых будут требуемые коды, и загружать эти файлы через API или веб интерфейс личного кабинета.
XSD схему можно скачать в разделе «помощь» в ЛК ЧЗ.
Обратите внимание на следующие моменты.
- Xsd схемы в ЛК ЧЗ содержат ошибки в валидации ИНН и ограничения на длину строки. Только исправив ошибки, можно пользоваться схемами. К счастью, ошибки очевидные, поэтому это сделать не сложно.
- Схема чаще всего состоит из двух частей — общая для всех типов документов и отдельная для конкретного типа. Общая схема добавлена через импорт в конкретную. Обе схемы размещены в разделе помощь в ЛК ЧЗ.
- Правила экранирования для КМ отличатся от общепринятых для XML, об этом написано в официальной документации от ЧЗ, обратите на это внимание. Вот здесь на 4 странице все правила.
- Не следует пытаться ввести 150 000 кодов в оборот одним файлом. Со слов очевидцев файлы более 30 000 обычно проходят…
- Xml файл могут завернуть с ошибкой «ошибка валидации xml», а через пять минут тот же файл принять без проблем.
- Если в файле оказывается уже введенный в оборот код, то файл ввода в оборот, скорее всего, не примут.
- Документы отгрузки и приемки используются как временное решение. В дальнейшем их планируют упразднить и перейти на УПД согласно ППР 860.
- Миф про 60 дней. Ходит мнение, что не введенные в оборот коды «сгорают» через 60 дней. Это миф, источник неизвестен. Коды «сгорают», только если вы не забрали их из СУЗ в течение 60 дней. Срок жизни забранных кодов не ограничен.
Заключение
При разработке моего бесплатного приложения для маркировки BarCodesFX, изначально была сделана интеграция с API СУЗ. Когда честный знак второй раз неожиданно изменил логику работы API, от интеграции пришлось отказаться. Надеюсь, в дальнейшем ЧЗ удастся стабилизировать разработку и API, т.к. для некоммерческого продукта мне очень затратно каждый день перепроверять, не было ли изменений в API, и оперативно дорабатывать.
При внедрении маркировки внимательно ознакомьтесь с нормативной документацией по вашей товарной группе ТГ, правильно печатайте GS1-DataMatrix и будьте готовы к любым непредвиденным изменениям со стороны честного знака ЧЗ.
Альянс Форта создал информационное пространство (вики, чаты в телеграмме, семинары, вебинары), где вы можете найти полезную и актуальную информацию по маркировке во всех отраслях.