Загрузка данных
Да, связку «ЮKassa принимает оплату → Модулькасса формирует чеки → сведения уходят в “Честный знак”» можно реализовать через API. Но одного productMark недостаточно: нужны два события расчёта, обработка маркировки и подтверждение результата от кассы.
Проверил правила для БАД: 54-ФЗ, требования к интернет-чекам и порядок дистанционной продажи по постановлению Правительства № 886 от 31.05.2023.
Конкретный пример: покупатель оплачивает на сайте две банки БАД по 2 000 ₽. Получение — самовывоз.
Когда Что делает наш бэкенд Результат
Покупатель оплатил 4 000 ₽ в ЮKassa Проверяет подтверждение платежа и отправляет запрос в Модулькассу Чек «Предоплата 100%» на 4 000 ₽
Заказ комплектуется Получает через API два полных Data Matrix и закрепляет их за заказом Известны конкретные банки, которые будут выданы
Заказ передают покупателю Отправляет второй чек с этими кодами маркировки Чек «Полный расчёт», оплата — зачётом ранее внесённой предоплаты
Касса обработала документ Получает результат фискализации, контролирует передачу маркировки Чек сформирован; сведения о выбытии передаются через ОФД в ГИС МТ
Второй раз деньги с покупателя не списываются. Второй чек закрывает предоплату передачей товара. Такой порядок из двух чеков описывает ФНС для общей схемы интернет-продажи с предварительной оплатой. Разъяснение ФНС.
Само получение денег не должно преждевременно выводить конкретные банки из оборота: покупатель ещё может отменить заказ, а склад — заменить выбранную единицу.
Что передавать в Модулькассу для окончательного чека
В API Модулькассы предусмотрены следующие поля:
Поле Что передаём
inventPositions[].productMark Полный код конкретной банки с криптохвостом и разделителями
paymentObject tm — маркированный товар
paymentMethod full_payment — полный расчёт
quantity 1 для каждой отдельной маркированной банки
measure pcs
price, name, vatTag Фактическое название, цена после скидок и применимая ставка НДС
moneyPositions[].paymentType PREPAID — зачёт предоплаты
industryRequisite Отраслевые реквизиты, когда они требуются по применяемой схеме проверки
Две банки одного товара — две позиции с разными марками, даже если цена одинаковая. Разделитель GS сохраняется как ASCII 29, в JSON — \u001d. Для productMark документация устанавливает максимум 255 символов. Доставка, если она оплачивается отдельно, оформляется отдельной услугой без марки. API Модулькассы, ФФД 1.2.
Дополнительно в интернет-чеке должны корректно формироваться:
- 1125 — признак расчёта в интернете;
- 1187 — адрес сайта;
- 1008 — телефон или e-mail покупателя.
Также нужны обычные обязательные реквизиты: продавец и ИНН, система налогообложения, позиции, суммы, НДС, способ расчёта и фискальные реквизиты кассы. Последние формирует сама ККТ. Требования ФНС к интернет-чекам.
Для отправки через СДЭК, Почту или 5Post есть отдельный нюанс
Здесь нельзя автоматически считать, что чек при вручении закроет все обязанности по маркировке.
Для дистанционной продажи БАД предусмотрены два пути:
1. Передача сведений через ККТ и ОФД.
2. Отдельный документ вывода из оборота с причиной «Дистанционная продажа».
Официальное разъяснение «Честного знака» отдельно рассматривает доставку сторонней компанией и подачу такого документа. Для него указан срок: не позднее трёх рабочих дней после отгрузки со склада и не позднее фактической доставки покупателю. Этот документ можно отправлять программно через API ГИС МТ; ручной ввод в личном кабинете не обязателен. Порядок для интернет-продажи БАД.
Поэтому для вашего сайта я бы предусмотрел две ветки:
- Самовывоз: окончательный чек с марками через Модулькассу и ОФД при выдаче.
- Сторонняя доставка: согласованная схема дистанционного вывода через API ГИС МТ либо подтверждённая банком схема через ККТ/ОФД; окончательный чек — по событию передачи товара.
Отдельные исключения из разрешительного режима для дистанционной торговли имеют условия. Просто отключать проверку марки для всех доставок нельзя. Разъяснение «Честного знака».
Что нужно настроить и разработать
- ККТ с ФФД 1.2, совместимые ФН и ПО, настроенный ТС ПИоТ.
- Договор с ОФД, включающий передачу сведений о маркировке в ГИС МТ.
- Интеграцию Модулькассы: очередь чеков, получение статуса и повторные попытки без дубликатов.
- API привязки полных кодов маркировки к конкретным единицам заказа.
- События «оплачен», «отгружен», «передан покупателю», возвраты и отмены.
- При необходимости — API ГИС МТ с подписанием документов.
- Раздельное хранение статусов оплаты, чека и вывода из оборота. Ответ «запрос принят» ещё не означает успешную фискализацию или выбытие марки.
От банка пока требуется подтвердить три конкретных вещи:
1. Подстановка productMark автоматически запускает ТС ПИоТ, формирует необходимые результаты проверки и отраслевые реквизиты или часть данных должен передавать сайт?
2. Как в их API задаются интернет-реквизиты 1125, 1187 и 1008?
3. Какую схему они поддерживают для полностью оплаченного заказа, отправляемого сторонним перевозчиком: когда формируется окончательный чек и как обеспечивается своевременный вывод марки?
Итого по реализации: полностью автоматический процесс возможен, если система заранее получает полные коды именно отгружаемых банок. Для самовывоза схема понятна; для перевозчиков ответ банка про одно поле productMark ещё не подтверждает весь необходимый цикл.