В этой статье я постараюсь прояснить техническую часть и состав маркировки сигарет.
Простите меня Хабр читатели за укороченный обзор.
Что такое маркированные сигареты?
Маркированными являются те сигареты, на потребительской упаковке которой нанесены средства идентификации с соблюдением требований Закона №381-ФЗ и принятых в соответствии с ним нормативно правовых актов Правительства РФ.
Таким образом, для признания товаров маркированными необходимо выполнить следующие условия:
- На товары должны быть нанесены средства идентификации (код маркировки)
- В информационной системе мониторинга должны содержаться сведения о нанесении средств идентификации на сигареты (это делает производитель сигарет)
- В информационной системе мониторинга должны содержаться достоверные сведения о товарах
Напоминаем, что наличие в информационной системе мониторинга сведений об обороте сигарет не является условием для признания продукции маркированной.
Для тех покупателей, кто приобрел маркированные сигареты до 01.07.2020 года на бумажных носителей, не нужно волноваться и подавать куда то остатки. Сигареты, введенные в оборот производителем до 01.07.2020 зарегистрированы в системе мониторинга как «временно не прослеживаемые» и в соответствии с Правилами допускается их дальнейший оборот.
Надо помнить, что в течение периода эксперимента для производителей (2018-07.2019) состав маркировки менялся. Производители сигарет совместно с оператором ЦРПТ пытались найти приемлемые решения. Вся произведенная продукция с нанесенной маркировкой в этот переходный период также являлась маркированной.
Давайте разберем строение кода маркировки сигарет, действующего сегодня.
Он, кстати, является копией кода маркировки сигарет в некоторых европейских странах. Именно поэтому для транснациональных компаний маркировка стала конкурентным преимуществом над Российскими производителями.
Для кодирования серийного номера сигарет и МРЦ (максимальной розничной цены) используется 80 символов:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!”%&’*+-./_,:;=<>?
Алгоритм кодирования-декодирования МРЦ основан на переводе размера МРЦ в копейках в 80-ричную систему исчисления, используя следующий алфавит:Кодирование
Процедура кодирования
- МРЦ преобразуем в копейки, например
- Находим целую часть и остаток от деления МРЦ на основание системы счисления (в нашем случае – 80)
- Берём символ из алфавита по индексу, равному остатку и записываем его в начало результирующей строки
- Повторяем шаги 2 и 3 пока целая часть не окажется равной 0
- Дополняем результирующую строку до 4 символов слева символом по индексу 0 из алфавита (“A”)
- Находим целое и остаток от деления 14630 на 80: 182 и 70
- Находим символ по индексу 70 в алфавите и добавляем его в начало результирующей строки: “.”
- Целое от деления больше 0, поэтому находим новые целое и остаток от деления 182 на 80: 2 и 22
- Находим символ по индексу 22 в алфавите и добавляем его в начало результирующей строки: “W.”
- Целое от деления больше 0, поэтому находим новые целое и остаток от деления 2 на 80: 0 и 2
- Находим символ по индексу 2 в алфавите и добавляем его в начало результирующей строки: “CW.”
- Целое равно 0, поэтому дополняем результирующую строку слева нулевым символом: “ACW.”
Декодирование
Процедура декодирования
- Для каждого символа из закодированного представления МРЦ повторяем следующие шаги
- Возводим длину алфавита, равную 80, в степень, равную позиции текущего символа МРЦ, считая с конца строки и начиная с 0, и умножаем на индекс текущего символа в алфавите
- Прибавляем полученное значение к результирующему
Результирующее значение изначально равно 0.
1. Берём первый символ МРЦ: “A”2. Индекс символа “A”: 03. Возводим 80 в степень 3 (позиция текущего символа, считая от конца строки из 4 символов) и умножаем на 0, получаем 04. Прибавляем 0 к результирующему значению строке: 05. Берём второй символ МРЦ: “C”6. Индекс символа “C”: 27. Возводим 80 в степень 2 и умножаем на 2, получаем 128008. Прибавляем 12800 к результирующей строке: 128009. Берём третий символ МРЦ: “W”10. Индекс символа “W”: 2211. Возводим 80 в степень 1 и умножаем на 22, получаем 176012. Прибавляем 1760 к результирующему значению: 1456013. Берём четвёртый символ МРЦ: “.”14. Индекс символа “.”: 7015. Возводим 80 в степень 0 и умножаем на 70, получаем 7016. Прибавляем 70 к результирующему значению: 1463017. Итоговое значение МРЦ = 14360к или 146р30к
using System;
using System.Text;
namespace SharedUtil.Mrp
{
public static class MrpEncoder
{
public const string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"%&\'*+-./_,:;=<>?";
public static string Encode(uint value, byte paddingLength = 4)
{
var builder = new StringBuilder();
long result = value;
do
{
long rmdr;
result = Math.DivRem(result, Alphabet.Length, out rmdr);
builder.Insert(0, Alphabet[(int) rmdr]);
} while (result > 0);
return builder.ToString().PadLeft(paddingLength, Alphabet[0]);
}
public static uint Decode(string value)
{
uint result = 0;
for (int i = 0; i < value.Length; i++)
{
var characterIndex = Alphabet.IndexOf(value[i]);
if (characterIndex < 0)
{
throw new ArgumentException(string.Format("Invalid character: '{0}'", value[i]));
}
result += (uint) (Math.Pow(Alphabet.Length, value.Length - 1 - i) * characterIndex);
}
return result;
}
}
}
Рассмотрим маркировку на примере Сигарет с фильтром «T&W» ОРИДЖИНАЛ КОМПАКТ МРЦ 106"
Вот как выглядит маркировка на пачках и блоках:
Извините, я не нашел блок с МРЦ 106, для фото брал 115.
Маркировка пачки:
0461003014152700000HdAB0oOnE1
Строка длиной 29 символов, содержит:
- GTIN-14 (14 цифровых символов). Содержит лидирующие «0» и EAN-13 код для единицы измерения «пачка» прижаты к правому краю. Аналогичен обычному EAN-13, нанесенному на пачке.
- Серийный номер (7 символов) . Идентификационный код, сгенерированный оператором эмиссии из набора 80 символов. Задумывался он как уникальный для указанного EAN.
- МРЦ (4 символа). Максимальная розничная цена, указанная в копейках в 80-ричном исчислении.
- Криптохвост (4 символа). Код создается на производстве в «черном ящике» при запросе очередного пула кодов у оператора эмиссии маркировки. Его запрещено накапливать в базах данных и передавать третьим лицам. Именно это ограничение хоть и защищает от утечки кодов маркировки, но порождает проблемы, описанные ниже.
GTIN-14 (14 цифровых символов). Содержит лидирующие «0» и EAN-13 код для единицы измерения «пачка» прижаты к правому краю. Аналогичен обычному EAN-13, нанесенному на пачке.АО «ФИЛИП МОРРИС ИЖОРА» так не считает и делает различными GTIN в маркировке и в нанесенном с боку штрихкоде EAN13.
Маркировка блоков:
(01)04610030141534(21)00000!&<FNC1>(8005)106000<FNC1>(93)yikZ
Строка длиной не менее 41 символов и содержит код в формате GS1. Скобочки добавлены для наглядности. Содержит символы GS1 <FNC1>
- (01) GTIN-14 (14 цифровых символов). Содержит лидирующие «0» и EAN-13 код для единицы измерения «блок». Аналогичен обычному EAN-13 нанесенному на блоке.
- (21) Серийный номер (7 символов). Идентификационный код, сгенерированный производителем из набора 80 символов. Задумывался как уникальный для указанного GTIN-14.
- (8005) МРЦ (6 цифровых символов). Максимальная розничная цена, указанная цифрами в копейках для блока. В нашем примере 1060.00 рублей для блока (106 для пачки)
- (93) Криптохвост (4 символа). Код создается на производстве в «черном ящике» при запросе очередного пула кодов у оператора эмиссии маркировки. Его запрещено накапливать в базах данных и передавать третьим лицам.
Маркировка коробов:
(01)14610030141524 (21)0011986<FNC1>(8005)106000<FNC1>(37)50
Строка длиной не менее 25 символов. Содержит обязательные коды 01 и 21 в формате GS1. Каждый производитель сам определяет состав кода маркировки для транспортной упаковки. Не имеет криптохвоста. Может быть нанесен как GS-1 DataMatrix код.
Часто производители дублируют GS-1 (CODE-128) и GS-1 DataMatrix, вот пример:
Другие производителя иногда не указывают МРЦ, а некоторые добавляют элемент 240 для указания внутреннего кода номенклатуры производителя.
Разберем пример кода маркировки транспортной упаковки «короб»:
- (01) GTIN-14 (14 цифровых символов). Содержит IFT-14 код для единицы измерения «короб». Аналогичен обычному IFT-14, нанесенному на коробе в черной рамке.
- (21) Серийный номер (7-20 цифр). Идентификационный код, сгенерированный производителем и обеспечивающий неповторимость в рамках одного IFT-14 кода.
- (8005) МРЦ юнита (6 цифровых символов). Максимальная розничная цена, указанная в копейках для вложенного юнита – «блока».
- (37) Количество вложенных юнитов (2 и более цифровых символов). Количество вложенных в короб блоков сигарет.
ВНИМАНИЕ! ИЗМЕНЕНИЯ В МАРКИРОВКЕ КОРОБОВ ПОСЛЕ ВЫПУСКА СТАТЬИ:
Мы получили несколько официальных разъяснений от ЦРПТ по поводу маркировки коробов и я считаю необходимым отразить их в статье.
ВОПРОС: Какие символы могут применяться при указания серийного номера (21) кода маркировки для транспортного КОРОБА.
Допустимые значения:ВОПРОС: Какое количество символов в поле (21) возможно указывать в коде маркировки транспортной упаковки КОРОБ. Только 7 символов или любое до 20 символов?
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"%&'()*+,-./_:;=<>?.
Серийный номер должен быть не короче 7 символов.Вопрос: Могут ли быть одинаковыми серийные номера в поле (21) для разных МРЦ при маркировки КОРОБОВ и наличии в коде поля (8005)?
Рекомендуем начать серийный номер с префикса фабрики и линии, если применимо, и использовать простой счетчик (инкремент) коробов.
Да, в данном случае, серийные номера могут быть одинаковыми.Маркировка паллет:
<img src=«habrastorage.org/webt/oh/dt/9t/ohdt9tprqmxhzjls4tiitbtb4ru.png» alt=«Маркировка паллет»/>
(00)946100301410004634
Строка длиной 20 символов. Содержит префикс 00 и обязательный логистический код паллеты (контейнера) SSCC.
На всех упаковках, кроме пачек, наносится как машиночитаемый код, так и его человекочитаемый эквивалент. Это позволяет набрать код маркировки вручную, если по какой-то причине код не сканируется сканером.
Агрегации и дезагрегации.
В системе маркировки заложены такие возможности, как агрегация и дезагрегация упаковок.До недавнего времени агрегация производилась только на заводе изготовителе. С завода информация передается в систему не только о нанесенных кодах маркировки, но и об ее агрегации. JSON файл, передаваемый с завода в СУЗ, содержит структуру, в которой нельзя отправить данные о маркировке без данных о заводской агрегации. На заводе агрегация блоков/коробов/паллет производится при повторном сканировании маркировки с каждого вложенного элемента и кодов упаковки. Этим обеспечивается проверка читаемости кода и гарантия правильной агрегации, т.е. соответствие кодов, входящих в состав упаковки, коду самой упаковки.
Поэтому старайтесь сохранять заводскую упаковку до последнего момента. Вскрыв заводскую коробку, уже нельзя гарантировать, что все блоки относятся именно к этому коробу. Привет всем торговым сетям, которые проверяют вложенные блоки и вскрывают заводские короба для этого ;)
Недавно функция агрегации сигарет появилась в API для торговых организаций. Видим большую перспективу здесь для отгрузки паллетами с логистических складов.
Дезагрегация производится автоматически, как только вложенная в упаковку единица была использована в документах выбытия или смены собственника. Другими словами, если продать пачку сигарет, то блок, в котором она находилась, автоматически дезагрегируется на пачки, а короб, в котором находился этот блок, дезагрегируется на блоки и т.д. Использовать в дальнейшем дезагрегированные коды блока, короба, паллет будет невозможно. Это очень изящное решение. Сегодня дезагрегация короба/блока производится только в том случае, если выбытие вложенного агрегата произошло на стороне текущего собственника. Если сторонний контрагент попытается продать ваши сигареты из вашей коробки, это не приведет к ее автоматической дезагрегации, поскольку по данным ГИС МТ, контрагент не являлся собственником на момент сканирования маркировки при подачи сведений о выбытии.
Описание кодов идентификации потребительских упаковок, наборов, групповых упаковок, транспортных упаковок при указании в УПД, УКД
Табачная продукция | КИ | с указанием максимальной розничной цены |
без указания максимальной розничной ценыкод товара (14 цифр) ИСН (7 символов) |
||
КИГУ | с указанием максимальной розничной цены |
|
без указания максимальной розничной цены01 код товара (14 цифр) 21(7 символов |
||
КИТУ | короба: группа1+группа2+группа3 |
|
паллеты, контейнера: |
Формируемый для подачи сведений файл УПД должен иметь в названии признак маркировки — "«MARK»"
PDF: Официальные методические рекомендации по оформлению УПД/УПДи/УКД
Образцы ЭУПД:
XML. Образец ЭУПД от Мегаполис.
XML. Образец ЭУПД c разными видами упаковок.
XML. Образец уведомления об уточнении счет фактуры.