Сервис онлайн-касс АТОЛ Онлайн: API и интеграция с CMS
Раскрываем общие детали работы с сетевым сервисом онлайн-касс, нюансы интеграции с CMS и подводные камни, об которые вы споткнетесь в случае, если не станете использовать готовые решения и будете заниматься интеграцией самостоятельно.
Согласно 54-ФЗ, все торгово-сервисные площадки, принимающие оплату через интернет, должны перейти на онлайн-кассы, отправляющие в режиме реального времени электронные чеки в ФНС. С 1 июля 2017 года это требование касается не только интернет-магазинов, но и самых разнообразных онлайн-сервисов, собирающих оплату с физических лиц с помощью банковских карт, а с 1 июля 2018 изменения затронут и тех, кто пользуется услугами альтернативных платежных средств (онлайн кошельков) — Webmoney, Яндекс.Деньги и др.
Хотя переход на новые кассы уже должен был состояться, данные ФНС говорят о том, что львиная доля торгово-сервисных площадок в интернете все еще не легализовала онлайн-расчеты с потребителями. По официальной статистике, на учете стоит около 14 тыс. кассовых аппаратов с признаком «расчеты в сети Интернет», в то время как сегмент рынка, по разным данным, насчитывает не менее 50 тыс. предприятий (здесь речь идет только о тех компаниях, которые принимают платежи через интернет от физических лиц).
Таким образом, более половины компаний пока не озаботились фискализацией расчетов. Одни онлайн-площадки остаются в тени, рассчитывая, что в переходный период они не заинтересуют ФНС, другие же, чтобы не нарушать закон, просто отключили прием онлайн-платежей.
Мы много пишем о том, как все сделать законно. Сегодня поговорим о деталях взаимодействия наших касс в рамках сервиса АТОЛ Онлайн с внутренними системами интернет-магазинов.
Вкратце о сервисе
Покупка онлайн кассы — мероприятие не дешевое. Доступная альтернатива покупке — аренда («онлайн-касса как сервис»). Именно эту услугу и предоставляет АТОЛ Онлайн.
Идея сервиса похожа на SaaS, но в данном случае из-за ограничений 54-ФЗ речь идет не об аренде виртуальных мощностей, а о временном использовании вполне реальной (физической) кассы, размещенной в нашем ЦОДе.
По договору одна или несколько касс резервируются за клиентом и ставятся им на учет через личный кабинет налогоплательщика на сайте ФНС.
Хотя сегодня существуют альтернативные сервисы аренды, АТОЛ Онлайн в 2017 году стал первым в данном сегменте рынка. На текущий момент примерно каждая третья касса, зарегистрированная в ФНС для расчетов в сети Интернет, арендована у АТОЛ.
Количество касс, необходимое каждому конкретному магазину, зависит от объемов передаваемой в ФНС информации — то есть фактически от количества заказов, обрабатываемых в единицу времени. Управление очередью документов на кассы осуществляется на стороне сервиса — они равномерно распределяются по имеющимся аппаратным ресурсам. Рекомендации и калькулятор для подсчета приблизительного количества единиц техники есть на нашем сайте.
Сервис позволяет оценивать параметры очереди из документов на кассах (скорость обработки каждого документа), из чего можно делать выводы о том, верно ли было рассчитано количество касс. Рост очереди необработанных документов — явный признак того, что объемы арендуемых ресурсов должны быть увеличены.
Как и «классические» сервисы аренды программного обеспечения или инфраструктуры, сервис допускает гибкое масштабирование ресурсов, доступных конечному пользователю. Однако из-за требований по регистрации каждой кассы в ФНС на конкретную компанию, процедура масштабирования имеет некоторые особенности.
В случае отказа от излишних ресурсов процедура выполняется быстро. Однако архив ФН, использующегося в «лишней» кассе, придется закрыть, а саму кассу снять с учета в ФНС (неиспользуемая касса с большой вероятностью будет передана другому клиенту, а ФН, хоть и действует 13 месяцев, жестко закрепляется за компанией и физической кассой — таким образом с другой кассой для расширения парка арендованной техники за счет произвольной кассы использовать его нельзя).
При увеличении количества касс процедура немного растягивается во времени. Поскольку субъекту налогообложения требуется ставить на учет в ФНС каждую кассу самостоятельно (через личный кабинет на nalog.ru), скорость, с которой будут предоставлены дополнительные ресурсы, зависит в том числе и от самого магазина. В принципе, это возможно сделать в течение суток.
Масштабирование открывает возможность гибко варьировать количество касс, прогнозируя пиковые нагрузки. Хотя это только один из вариантов работы. Большая часть магазинов предпочитает другой подход — рассчитывать количество постоянно арендованных касс, учитывая в том числе и пиковые нагрузки. Вне пиков оборудование используется не на полную силу, но зато такая схема обеспечивает большую отказоустойчивость.
Зачем и кому необходимо API
Помимо самого использования онлайн касс, 54-ФЗ регламентирует новые параметры кассового чека — дополнительные реквизиты и обязательное отражение в документе всех товарных позиций с соответствующими ставками налога. Вне зависимости от того, приобретена касса в собственность компании или взята в аренду, информация о товарных позициях и их итоговой стоимости (со всеми скидками и надбавками, а заодно со ставкой налога) должна поступать в нее из внешней системы — из CMS магазина или сервисной площадки. Тонкости этого процесса зависят от деталей задачи, но в общем случае обеспечение интеграции CMS и онлайн-кассы, как в присутствии платежного агрегатора, так и без него — это технически нетривиальная задача.
С самого начала АТОЛ Онлайн предложил открытый универсальный API для взаимодействия со сторонними системами. С рядом популярных CMS и платежных агрегаторов у сервиса уже есть готовая интеграция «из коробки» (причем список партнеров постоянно пополняется). То есть для магазина, который только что решил привести свою деятельность в соответствие с действующим законодательством, это упрощает процедуру: если используется популярная CMS, с большой долей вероятности разбираться в деталях API не придется, можно будет использовать готовый модуль. А покупая с нуля готовое решение (CMS) или выбирая платежного агрегатора, можно подобрать инструмент с уже реализованной интеграцией с онлайн-кассой.
Интегрированные платежные агрегаторы и банки: Сбербанк, Яндекс Касса, RoboKassa, RBKmoney, РайффайзенБанк, Тинькофф, Газпромбанк и другие.
API как таковой будет интересен тем, кто использует самописные инструменты. В свое время целый ряд компаний (в основном — крупные) вместо приобретения сторонней CMS-системы выбрали путь написания собственной. Им-то и приходится работать с API напрямую. С нашей точки зрения этот сегмент пользователей самый сложный, поскольку самописные CMS немного по-разному обрабатывают процессы, могут выдавать не ту информацию и т.п. И с каждым клиентом здесь отдельный проект.
Детали API
Попробуем, не погружаясь в детали, рассказать, что собой представляет API АТОЛ Онлайн.
Общение с онлайн-кассой в рамках API состоит из трех частей:
- авторизация (получение токена);
- отправка чека на фискализацию;
- получение результата фискализации.
В ходе взаимодействия от интернет-площадки требуются только те параметры, которые действительно необходимы для фискализации чеков — никаких сложных дополнительных систем, вроде расчета скидок и акций, тут не предусмотрено. В строгом соответствии с 54-ФЗ API позволяет передавать из интернет-магазина в онлайн-кассу список товаров в корзине со всей сопутствующей информацией:
- названия товарных позиций — в пределах 128 символов по закону (на данный момент в API прописана длина названия в 64 символа, однако сервис обработает и 128 символов);
- цену за единицу;
- количество единиц (для каждой товарной позиции);
- полную стоимость;
- ставку налога для каждой товарной позиции (при желании можно передать сумму НДС, однако это не обязательно).
Протоколы обмена информацией онлайн кассы с ОФД и ФНС предусматривают ограничение на общий размер электронного чека в 30 КБ. Количество товаров, которые можно разместить в таком чеке, зависит от целого набора параметров (вроде длины названия товара и служебной информации, добавляющей порядка 15% объема), поэтому в общем случае сделать прогноз о количестве товаров, «помещающихся» в один чек, невозможно.
До недавнего времени в API АТОЛ Онлайн было собственное ограничение в 100 товарных позиций в чеке, позволявшее с запасом уложиться в предписанные 30 КБ. Но поскольку эксплуатация сервиса показала, что для некоторых клиентов ограничение в 100 товаров играет существенную роль, оно было снято. Теперь магазинам необходимо самостоятельно контролировать переполнение чека — то есть требуется принимать и обрабатывать соответствующую ошибку от АТОЛ онлайн. В особенности это касается магазинов, где покупатель может набрать в корзину большое количество мелких штучных товаров (крепеж, электронные компоненты и т.п.), или площадок, где популярны коллективные закупки (учебники и канцелярия на целый школьный класс).
Технически чеки более 30 Кбайт в онлайн торговле обрабатываются также, как и в офлайн торговле, где кассир просто разбивает корзину на два чека. Однако эта логика должна находиться на стороне внешней системы — т.е. магазина, поскольку АТОЛ Онлайн может лишь выдать ошибку о том, что фискализация не выполнена (по закону нельзя два чека оплатить через одну транзакцию).
В дополнение к перечисленной выше информации через API магазин должен предоставить телефон или email пользователя, куда будет отправлен электронный чек.
По закону именно интернет-магазин должен обеспечить возможность доставки электронного чека покупателю, то есть его обязанность — выяснить адрес для доставки (хотя, конечно, ритейлер понесет ответственность, если пользователь указал заведомо некорректные данные). Непосредственно доставку он может делегировать ОФД или осуществить самостоятельно. В последнем случае обратно через API после фискализации передаются признаки фискального документа, по которым электронный чек можно найти в ФНС или у ОФД.
API доставляет уведомления о том, что документ передан на фискализацию — то есть он отстоял в очереди и отправился на кассу — или, наоборот, возвращен с ошибкой, например, по таймауту (в том случае, если очередь слишком большая и он в течение пяти минут так и не дошел до кассы). Время, которое документы в среднем проводят в очереди, является хорошим маркером того, достаточно ли касс арендовал магазин.
Надо отметить, что сервис АТОЛ Онлайн предоставляет более широкий функционал через личный кабинет. Там доступна различная статистика, а также сами фискализированные чеки. Позже подобный функционал появится и в API. Кроме того, предполагается сделать механизм сверки.
Что нужно интернет-магазину, помимо API
Работа с онлайн-кассами на практике упирается не столько в поиск оборудования и настройку взаимодействия по API, сколько в изменение некоторых бизнес-процессов внутри магазина.
В первую очередь необходимо подготовиться к передаче корзины на сторону для фискализации. До сих пор многие магазины работают с платежными системами, просто передавая сумму к оплате. Легально продолжать работать по такой схеме уже нельзя. Нужно указывать весь перечень товаров в корзине. И если покупатели в магазине интим-услуг будут рады замене названий реальных сервисов на абстрактные «услуга 1», «услуга 2» и так далее, то потребители в магазине бытовой техники вряд ли обрадуются, когда вместо реальных товаров в чеке появится ерунда.
Каждый товар в чеке должен иметь окончательную цену уже после применения всех скидок и надбавок. Раньше касса могла сама посчитать скидку, теперь же этого делать нельзя. Вдобавок, во многих CMS такая логика просто не заложена, поэтому здесь требуются серьезные доработки.
Помимо названий и цен, как было упомянуто выше, надо передавать ставку налога. С этим были сложности даже у крупных офлайн-магазинов. Это был настоящий вызов для их внутренней системы автоматизации, поскольку раньше такая информация нигде не требовалась и не учитывалась, и, соответственно, не контролировалась. Порой логист, который принимает товар, просто по привычке оставлял ставки налога по-умолчанию, потому что привык так работать. Но для корректной работы связки CMS с онлайн-кассой необходимо, чтобы везде была заложена «правильная» математика (соответствующая моделям 54-ФЗ). Без этого чеки просто не будут фискализироваться.
Хороший пример несоблюдения мат-моделей — округление. Спецификация подразумевает передачу копеек в виде двух знаков после запятой. Но многие из собственных систем передают четыре и даже пять знаков. АТОЛ Онлайн лишние знаки отбрасывает, в то время как в собственной системе магазина при подсчете итоговой суммы может производиться округление по математическим правилам. Так проявляется расхождение в несколько копеек, которое не пройдет по кассе. И такие ошибки очень тяжело отлавливать.
Еще одно обязательное изменение — упомянутое требование номера мобильного телефона или адреса электронной почты у пользователя. Без этих данных фискализации не будет. До сих пор в нашу систему поступает довольно много чеков без идентификационных данных (их доля достигает единиц процентов). После отправки подобного «анонимного» чека интернет-магазин получает сообщение об ошибке, но ничего поделать не может, поскольку транзакция уже прошла. В этом случае все «чисто» можно сделать только через отмену платежной операции (или же чек можно дослать позднее — с правильными реквизитами).
В итоге затраты на саму интеграцию CMS и онлайн-кассы могут оказаться намного меньше, нежели на перестройку всей информационной системы под требования федерального закона. И к этому надо быть готовым.