У интернет-магазина нет прилавка, нет кассира и нет принтера, но есть покупатели-физические лица. Этого достаточно: онлайн-продажа физическому лицу это розничная продажа, и фискализируется она как любая другая.
Как мы понимаем статью 3 часть 4 Закона, место нахождения продавца, который торгует в розницу через интернет, считается розничным объектом, поэтому через интернет-магазин фискализируются и продажи фирмам и предпринимателям, с их ПИБ на чеке.
Отличаются на деле три вещи: когда выдаётся чек, как он доходит до покупателя и кто нажимает кнопку. Ни одна из них не является вопросом о том, существует ли чек.
Когда фискализируется заказ
Правило то же, что и на прилавке: чек выдаётся в момент продажи, а деньги, полученные раньше, это аванс, который фискализируется в момент получения (статья 6 часть 1 Закона). Продажу на расстоянии нормы отдельно не регулируют, поэтому это наше понимание, которое стоит проверить с бухгалтером. Три сценария стоит держать раздельно, потому что магазины их постоянно смешивают.
| Способ оплаты | Когда деньги получены | Что выдаётся |
|---|---|---|
| Платёжная карта на сайте | в момент успешной авторизации | если товар уже доставлен, чек продажи; если его ещё предстоит отправить, по нашему пониманию это аванс, как в третьей строке |
| Оплата при получении | когда курьер взял деньги с покупателя | чек продажи выдаёт продавец, а не курьер; точный момент (отправка или доставка) уточните у бухгалтера |
| Перевод на счёт (предоплата) | когда поступление появилось на выписке | если товар ещё не доставлен, это аванс; авансовый чек не позднее следующего рабочего дня после поступления |
Третья строка та, над которой стоит подумать. Предоплата за товар, который ещё предстоит отправить, это, как мы понимаем закон, аванс: авансовый чек выдаётся не позднее следующего рабочего дня после поступления (статья 11 Правилника), а окончательный чек в момент продажи. Налоговая администрация в ответах на частые вопросы указала также, что если физическое лицо оплатило всю сумму по предварительному счёту, в момент продажи можно выдать окончательный чек; если вы работаете так, подтвердите это у бухгалтера.
Оплата при получении не исключение. Чек выдаёт продавец, а не курьер: договор с курьерской службой, по которому они выдают свой документ, ваш фискальный чек не заменяет. В какой именно момент (при отправке или при доставке), нормы отдельно не говорят, поэтому согласуйте это с бухгалтером.
Как чек доходит до покупателя
Если вы продаёте исключительно через интернет, фискальный чек выдаётся в электронной форме (статья 13 часть 3 Правилника о видах фискальных чеков). Если у вас есть и магазин с помещением, чек, как мы понимаем Правилник, выдаётся в печатной форме (например, в посылке), а электронно его можно доставить только с согласия покупателя, вместе с печатным, а не вместо него (статья 13 части 1 и 2).
Правило здесь в том, что чек, выданный в электронной форме, вместо QR-кода несёт адрес для проверки в виде гиперссылки. Это и практично: QR-код в письме сканировать некому, телефон уже в руке, а ссылка открывается нажатием.
Как мы понимаем, это значит, что адрес проверки в письме должен быть настоящей ссылкой, которая открывается нажатием, а не текстом, в котором адрес стоит обычной строкой. Мелочь, которую легко пропустить и легко проверить: откройте письмо на телефоне и попробуйте нажать.
Как магазин подключается к ЕСИР
Интернет-магазин не является ЕСИР. Он система, которая знает, что и кому продано, а выдачу чека передаёт ЕСИР через интерфейс. На практике способа два.
Готовый плагин
Для WooCommerce и похожих платформ есть плагин, который сам разговаривает с кассой. Типичная настройка требует четырёх вещей:
- адрес ЕСИР,
- ключ API,
- статус заказа, который запускает выдачу чека,
- сопоставление способов оплаты магазина с семью фискальными способами оплаты.
Третий пункт стоит обдумать до того, как нажать «сохранить». Если фискализацию запускает статус «в обработке», а заказ с оплатой при получении получает этот статус в момент оформления, вы выдали чек раньше, чем увидели деньги. Для оплаты при получении, как мы понимаем, подходит статус более позднего шага, при отправке или при доставке; какой из этих двух моментов верный, уточните у бухгалтера. Для карты подходит статус, который выставляется при успешном списании, с авансовым чеком, если товар ещё не доставлен.
REST API
Если магазин не на готовой платформе, то же самое делается напрямую через API. Запрос несёт позиции, количества, цены, налоговые метки и способ оплаты, а ответ несёт номер ПФР, счётчик, журнал и ссылку для проверки.
POST /api/v1/invoices
Authorization: Bearer VAS_API_KLJUC
Content-Type: application/json
{"invoiceType":"NORMAL","transactionType":"SALE",
"items":[{"name":"Мајица","labels":["Ђ"],"quantity":1,"unitPrice":2490.00}],
"payments":[{"paymentType":"CARD","amount":2490.00}]}
Налоговые метки по товарам
Это самая частая причина неправильных чеков из интернет-магазинов. Магазин, как правило, знает цену, но не знает налоговую метку, потому что она ему была не нужна.
Решение в том, чтобы метка стала таким же атрибутом товара, как цена. В WooCommerce это делается через мета-поле, в собственной системе через колонку в таблице товаров. Если метки нет, касса либо отклоняет чек, либо подставляет что-то по умолчанию, а подстановка по умолчанию здесь всегда неверна хотя бы для части ассортимента.
Что происходит, когда что-то идёт не так
Эту часть обычно не продумывают и решают на ходу. Три ситуации стоит закрыть заранее:
- Процессор недоступен. API обязан вернуть внятную ошибку, и чек тогда не выдан. Магазин не имеет права предполагать успех. Заказ остаётся помеченным как нефискализированный, а попытка повторяется.
- Ответ потерялся после успеха. Запрос прошёл, сеть оборвалась на обратном пути, магазин решил, что не получилось, и отправил снова. Без защиты это означает два фискальных чека на один заказ. Защита называется идемпотентностью: запрос несёт ключ, и на тот же ключ касса возвращает тот же чек, а не выдаёт новый.
- Покупатель отменяет заказ. Выданный чек не удаляется, а исправляется возвратом, который несёт референтный номер оригинала и ИД покупателя.
Вопрос, который стоит задать поставщику. «Что произойдёт, если ваш API вернёт 502 посреди оплаты, и что будет, если мой сервер отправит один и тот же запрос дважды.» Ответом на второй вопрос является идемпотентный ключ. Если его нет, дублированные фискальные чеки это вопрос времени.
Как это работает в Otkucaj
У Otkucaj есть REST API v1 с ключами Bearer и готовый плагин WooCommerce. Плагин записывает в каждый заказ номер ПФР и ссылку для проверки, а налоговая метка по товару задаётся через мета-поле otkucaj_label.
API принимает идемпотентный ключ, поэтому потерянный ответ не может породить второй чек. Ошибки предсказуемы и всегда одной формы, а 502 означает, что процессор не ответил и чек не выдан.
Подробности в документации API.
Otkucaj это ЕСИР, одобренный Налоговой администрацией Сербии, регистрационный номер 1667, классификация 3. Новый аккаунт начинает работу в тестовой среде, где чеки не являются фискальными; для рабочей среды нужен собственный элемент безопасности и ПАК.
Источники
- Закон о фискализации («Службени гласник РС» № 153/2020, 96/2021, 138/2022 и 80/2026), статьи 3, 5, 6 и 8.
- Налоговая администрация Республики Сербия, Техническое руководство по административной и технической проверке функциональности ЕСИР или Л-ПФР, раздел об электронной доставке чека и гиперссылке вместо QR-кода.
- Правилник о видах фискальных чеков, типах транзакций, способах оплаты, ссылке на номер другого документа и подробностях прочих элементов фискального чека, статьи 2, 10, 11 и 13.