Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Модератор: Дед Пахом

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

Привет всем !

Класс для разрешительной проверки КМ (кодов маркировки) через API ТС ПИоТ ЕСМ от АО «ЕСП».
Поддержка работы с API ЦРПТ: ПО Локальный модуль и Национальный каталог.
Полный боевой комплект с описанием интерфейса API и примерами.

Реализованный в классе функционал соответствует ПФС версии 1.16 от 20.05.2026 г. (26 сценариев),
для получения сертификата совместимости и допуска к работе в промышленной среде ТС ПИоТ ЦРПТ. 😎

Благодарность за помощь на старте проекта: FinsoftRZ и Alex412.
Любые замечания, исправления и дополнения - приветствуются !

Список изменений в версии от 19.06.2026 г.
----------------------------------------------------------------------------------------------------
- Новая товарная группа 59. "Пиротехнические изделия";
- Изменения в протоколе взаимодействия с оркестратором ЕСМ 1.1;
- Управление сервисами и ПО ЛМ по идентификатору инстанса ЕСМ;
- Устранены проблемы по запросам и внесены изменения в примеры.
----------------------------------------------------------------------------------------------------
Рекомендуем использовать актуальные версии классов LibCURL, cJSON и PrintF.

esp.png
esp.png (13.96 КБ) 103385 просмотров
Вложения
Honest.rar
(60.55 КБ) 4 скачивания
Последний раз редактировалось Игорь Столяров 19 Июнь 2026, 11:49, всего редактировалось 129 раз.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6034
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 25 раз
Поблагодарили: 90 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение finsoftrz »

История с внедрением ТС ПИоТ получила важное продолжение

29 мая 2026 года на площадке Уполномоченного по защите прав предпринимателей в Санкт-Петербурге состоялся круглый стол, посвященный вопросам внедрения ТС ПИоТ в систему маркировки «Честный знак».
✅ В обсуждении приняли участие представители Минпромторга, ЦРПТ, Госдумы, АКС СПб, разработчики решения, отраслевые объединения и предприниматели со всей страны.
❗️ В ходе дискуссии бизнес открыто обозначил ключевые проблемы, в т.ч. вопросы распределения ответственности за возможные сбои в работе системы.

✍🏼 По итогам мероприятия предложения предпринимательского сообщества были доведены до профильных организаций и органов власти.
🚀 И уже 3 июня 2026 года АО «ЕСП» обновило условия оферты. 👉🏽 Если ранее практически все риски, связанные с использованием программного обеспечения, возлагались на предпринимателей,
👉🏽 то теперь ответственность за недостатки программы закреплена за разработчиком.
Пользователь отвечает только в случаях нарушения условий договора, технических требований и инструкций.
❗️Это важное решение, восстанавливающее баланс ответственности между разработчиком и пользователями системы.

Работа по данному направлению продолжается:
✍️
В адрес Минпромторга России, Совета Федерации РФ, Госсовета направлены обращения о рассмотрении вопроса продления периода внедрения ТС ПИоТ до 1 июля 2027 года.

Решение вопроса на контроле Уполномоченного ❗️
C6/C12, ШВС, tps/btrieve.
PavelSkos
Прохожий
Сообщения: 4
Зарегистрирован: 15 Июнь 2026, 13:08

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение PavelSkos »

Игорь Столяров писал(а): 15 Июнь 2026, 14:18
PavelSkos писал(а): 15 Июнь 2026, 14:08
PavelSkos писал(а): 15 Июнь 2026, 14:08 (ответ 203 при сканировании тестовой марки 5.21)
В этом и есть фишка решима 203 - касса переходит в режим работы без проверки (не совсем так, но это другая история),
до тех. пор пока не придёт администратор и не перезапустит ТС ПИоТ. Перегрузите компьютер. :D
Так и хочется вставить фразу товарища Швондера "Это какой-то позор!" :D
Решил проблему с помощью кнопки "перезапустить службы ЕСМ"
Но вместо одной решенной проблемы появилось 2 новых =)
1. ЛМ ЧЗ возвращает статус isBlock = false там, где, судя по методичке, должен запрещать продажу. Для очистки совести использовал cURL на марке из пункта 5.19 MDEwNDYwMjIyMDAwNjU0OTIxNW9wUmNtUh05M2RHVno=
{"codesResponse":[{"code":0,"codes":[{"cis":"0104602220006549215opRcmR","found":false,"valid":false,"gtin":"04602220006549","verified":false,"realizable":false,"utilised":false,"isBlocked":false,"sold":false}]
2. Марка из теста 5.11 не проходит проверку (хотя если верить методичке - то должна) из-за того, что максимальная розничная цена (145р) меньше ЕМЦ (153р) , прямо как в сценарии 5.25, где ПМСР должен заблокировать продажу =)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

Добрый день !

С Вашего разрешения я проверю указанные рекламации. Здесь и сейчас.
Хост -> стенд ЦРПТ: https://tspiot.sandbox.crptech.ru

Сценарий 5.19. Ответ класса в интерфейсе FrontEnd и полный ответ сервиса в JSON:

1.jpg

Сценарий 5.11. Ответ класса в интерфейсе FrontEnd и полный ответ сервиса в JSON:

2.jpg

Всё работает идеально правильно и настолько всё банально - что я даже не знаю как здесь можно ошибиться. 🤦‍♀️
В Вашем "кирпичике" нет полного ответа. Мне нужно видеть значение флага "isCheckedOffline" в ответе.

Скорее всего опять неудачный копипаст вместо считывания КМ сканером и далее можно не продолжать.
см. Методические рекомендации ЦРПТ. 🤷‍♀️
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 309
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 41 раз
Поблагодарили: 1 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение SergioRaguzini »

Привет Всем!
Получил сценарий предстоящей сертификации, где в п.5.18, подпункте 9
question_01.png
этого документа указано "ПМСР формирует фискальный документ «Уведомление о реализации»."
Поскольку в своем ПМСР-приложении используем только два типа документа -продажа ("приход") и возврат (соотв. "возврат прихода") за информацией полез в описание драйвера (АТОЛ), но, как оказалось, такого типа как "уведомление" там нет
question_02.png
Что здесь ЧЗ подразумевает под "уведомлением", каким типом документа формировать чек? Судя по приведенной ЧЗ тегам (см.рис.1) - все стандартно... Может это все-таки продажа, т.е. LIBFPTR_RT_SELL с какими-то доп.свойствами?
Спасибо
p.s. прошу не кидать тапками, поиском пользовался, но там одна "вода"
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

SergioRaguzini писал(а): 18 Июнь 2026, 9:43 Что здесь ЧЗ подразумевает под "уведомлением"
Ну, как говорил Папа Карло, в одной деревне всех звали Буратино ... :)

Сведения о разрешительной проверке кодов маркировки передаются в составе
ОТРАСЛЕВОГО РЕКВИЗИТА ПРЕДМЕТА РАСЧЁТА, входящего в параметры позиции
(строки содержания) ФИСКАЛЬНОГО ДОКУМЕНТА (т.е. кассового чека).

1.jpg

Тип самого кассового чека (LIBFPTR_PARAM_RECEIPT_TYPE) вообще здесь ни при чём.
Я и сам считаю, что справку читают только лохи, но в примере к классу показал заполнение тега 1260. :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 309
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 41 раз
Поблагодарили: 1 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение SergioRaguzini »

Игорь Столяров писал(а): 18 Июнь 2026, 11:01 ... в примере к классу показал заполнение тега 1260...
В случае, если в позиции чека присутсвует одобренный код маркировки, то конечно, всегда обязателен составной реквизит фискального документа 1260, меня смутила их(ЧЗ) мудреная формулировка "Уведомление о реализации", ну написали бы "регистрируем продажу" или как-то понятнее.
Спасибо!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

SergioRaguzini писал(а): 18 Июнь 2026, 11:38 "Уведомление о реализации"
Юридически - это более правильная формулировка.
УОТ именно уведомляет "Честный ЗНАК" о факте реализации маркированного товара.
Точно также как физлицо уведомляет в декларации ФНС о факте полученния дохода и т.д.

А по поводу регистрации фискального документа - то сейчас есть 8 типов фискальных чеков.
И (если вдруг нужно) обратите пожалуйста внимание, что у АТОЛ и семейства ex-ШТРИХ-М
разный формат дат в отраслевых реквизитах ...
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 309
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 41 раз
Поблагодарили: 1 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение SergioRaguzini »

В сценарии теста присутствует табачная продукция, хоть общепиту и запрещено продавать сигареты, хотел бы уточнить - равны ли значения отраслевого реквизита для табака, значениям, например, для упакованной воды или иные?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

SergioRaguzini писал(а): 18 Июнь 2026, 11:53 равны ли значения отраслевого реквизита для табака
Да. Формат и заполнение тега 1260 общее.
ПФС - это учебная задача, а табачка - самая зарегулированная товарная группа, поэтому на ней всё и рассматривают. 🤷‍♀️
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
PavelSkos
Прохожий
Сообщения: 4
Зарегистрирован: 15 Июнь 2026, 13:08

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение PavelSkos »

Проблема оказалась в том, что я долбал реальный ЕСМ (127.0.0.1:51401б адрес ГИСМТ в настройках ЕСМ https://cdn01.am.crptech.ru:19100), а не тестовый контур, причем по сути все марки, кроме оффлайна отрабатывают. Если вырубаю связь, то ПИоТ стучит в ЛМ, и в ответе присутствует флаг проверки offline.

RAW: {"codesResponse":
[{"code":0,
"codes":[{"cis":"0104602220006549215opRcmR93dGVz",
"found":false,
"valid":false,
"gtin":"04602220006549",
"verified":false,
"realizable":false,
"utilised":false,
"isBlocked":false,
"sold":false}],
"reqId":"9599d8c4-5ba8-8dec-dd70-83e28a006155",
"reqTimestamp":1781774244462,
"isCheckedOffline":true,
"version":"019ed577-dd5a-76ec-99b8-753f9dbcb4f1",
"inst":"019eacb6-cb19-73e6-b5ce-9143e448dae4"}]}

После замены адреса на адрес эмулятора все марки стали проходить, что интересно, мне в письме предлагалось тестировать эмулятор по двум ссылкам, отдельно онлайн и оффлайн:
в онлайн: https://esm-emu.ao-esp.ru/api/v2/codes/check
в офлайн: https://esm-emu.ao-esp.ru/api/v2/codes/ checkoffline
Фактически я получаю по "оффлайн" маркам ответы с флагом isCheckedOffline: True при использовании api/v2/codes/check. При этом v2/codes/checkoffline вообще не хочет работать :o

Сертификация ведь тоже проходит на эмуляторе https://esm-emu.ao-esp.ru ?

Письмо, которое мне прислали из ЕСМ, содержит такой абзац:
Ниже описание дальнейшего регламента по интеграции.
По факту получения ожидаемых ответов при чтении КМ, необходимо скачать из Личного кабинета клиента на сайте https://ao-esp.ru/ дистрибутив, с которым интегрируется ПО вендора ПМСР и завершить интеграцию с ТС ПИоТ (модуль ЕСМ).

Собственно я так и сделал, и в последствии возникли проблемы с марками при проверке оффлайн.
Вот, например ЛМ ЧЗ боевой мне возвращает ответ на марку из теста 19
RAW: {"codesResponse":
[{"code":0,
"codes":[{"cis":"0104602220006549215opRcmR93dGVz",
"found":false,
"valid":false,
"gtin":"04602220006549",
"verified":false,
"realizable":false,
"utilised":false,
"isBlocked":false,
"sold":false}],
"reqId":"9599d8c4-5ba8-8dec-dd70-83e28a006155",
"reqTimestamp":1781774244462,
"isCheckedOffline":true,
"version":"019ed577-dd5a-76ec-99b8-753f9dbcb4f1",
"inst":"019eacb6-cb19-73e6-b5ce-9143e448dae4"}]}
Тестовый esm-emu возвращает как и написано в мурзилке.

По поводу марки 11, на сайте https://esm-emu.ao-esp.ru/mark/11?mode=online
у нее признаки "mrp" : 14500, "smp" : 15300, точно такие-же как у марки 24 "mrp" : 19900,
"smp" : 20000.
Максимальная розничная цена < единой минимальной цены, или я что-то не так понял?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

PavelSkos писал(а): 18 Июнь 2026, 15:17 Сертификация ведь тоже проходит на эмуляторе https://esm-emu.ao-esp.ru ?
Нет. В АО "ЕСП" функциональный тест совместимости выполняется на реальном ТС ПИоТ ЕСМ.
Вам пришлют ссылку на установку и подключения RuDesktop и в режиме терминала Вы пройдёте тест.
Соответственно и настройки ПМСР должны быть для работы с реальным локальным ТС ПИоТ и драйвером ККТ.
PavelSkos писал(а): 18 Июнь 2026, 15:17 и в последствии возникли проблемы с марками при проверке оффлайн
Никаких проблем у Вас не возникло - см. Методические рекомендации ЦРПТ.
Если Вы получили ответ с флагом isCheckedOffline = True, то имеет значение только флаг "isBlocked"
и опционально "Sold". Т.е. Вы получили ответ об успешной проверке КМ ТС ПИоТ в режиме Off-Line (т.е. в ПО ЛМ)
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 309
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 41 раз
Поблагодарили: 1 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение SergioRaguzini »

Привет Всем!
Хотел бы уточнить по поводу отсутствия в ОФД тега 2000 и требования его наличия при выполнении сценария 5.18
question_03.png
Посмотрел в ОФД пользователей (и в случае для Штриха и для АТОЛ-а) такого тега нет. Еще раз глянул в документацию, например, в АТОЛ для передачи кода маркировки используется

Код: Выделить всё

SELF.SetParamBiteArray(LIBFPTR_PARAM_MARKING_CODE , CLIP(QGoods.DataMatrix))  

где, в QGoods.DataMatrix - передаю полное (без перевода в Base64) значение кода маркировки, т.е., то, что равно требуемому в теге 2000

Вопрос - это опечатка(ошибка) собственно в тексте сценария и, тогда, просто не обращать на это внимания, или же, все таки, необходимо явно передавать этот тег чтобы он появился в ОФД, но тогда как?

Спасибо

finsoftrz писал(а): 27 Январь 2026, 19:26 И еще написано про тег 2000, который содержит полную марку, в офд (такском) не вижу его, хотя М+ на месте... У кого-нибудь он выводится? Остальные теги из таблички в тесте на месте.
Игорь Столяров писал(а): 27 Январь 2026, 20:10
finsoftrz писал(а): 27 Январь 2026, 19:26 Вроде как его сама ккм автоматически формирует
Ну да. ПМСР пробивает чек на реализацию с выбытием КМ.
finsoftrz писал(а): 27 Январь 2026, 19:26 И еще написано про тег 2000, который содержит полную марку
Это исходный КМ который подаётся на вход ККТ для распарса. В ФД ОФД это уже тег 1163 -> 1305 с КИЗ
Если код маркировки сформирован (например, в составе реквизита «КТ GS1.М» (тег 1305) или «КТ КМК» (тег 1306)),
тег 2000 принимает значение прочитанного кода маркировки.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

Добрый день !

Далеко не все (точнее совсем не все) теги фискальных документов предназначены для заполнения ПМСР.
Какие-то заполняются драйвером и прошивкой ККТ (в т.ч. и тег 2000), а какие-то формируются ОФД.

Конкретно тег 2000 - это вообще рабочие данные, на основании которых формируется тег с КМ (1163):
Значение тега 2000 передаётся в составе запроса о коде маркировки и хранится в фискальном накопителе до получения ответа от системы маркировки, формирования нового запроса, пробития/аннулирования чека.
Если Вас это действительно интересует - смотрите первоисточник (внутри поиск по номеру тега):
https://docs.yandex.ru/docs/view?tm=178 ... 26nosw%3D1

Но насколько я вижу, Вы пытаетесь перфекционизмом и буквоедством заменить понимание происходящих процессов. А зря ! :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 309
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 41 раз
Поблагодарили: 1 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение SergioRaguzini »

Игорь, спасибо за отклик!
Учитывая, иногда встречющийся, к сожалению, формализм проверяющей стороны, лишь пытаюсь понять как действовать на вопрос об отсутствии того, что декларируется в документе (получается, что требуют то, на что разрабочик ПМСР повлиять не может)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8681
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Класс для API ТС ПИоТ ЕСМ от АО «ЕСП»

Сообщение Игорь Столяров »

SergioRaguzini писал(а): 19 Июнь 2026, 12:14 лишь пытаюсь понять как действовать на вопрос
Нужно сразу показать, что ты доминируешь !
Коллега публиковал здесь видео прохождения ПФС в ЦРПТ - почти идеальное учебное пособие.
Бодренько, всё по существу и с полным пониманием предмета - никаких вопросов не возникает ! :D

scale_2400.png
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Ответить