Сервис онлайн-касс АТОЛ Онлайн: 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 и онлайн-кассы могут оказаться намного меньше, нежели на перестройку всей информационной системы под требования федерального закона. И к этому надо быть готовым.
    АТОЛ 25,37
    Компания
    Поделиться публикацией
    Комментарии 30
      0
      А куда вы потом деваете «израсходованные» ФН? Храните у себя? А сколько потом будет стоить хранение, доступ к «архивированым» ФН?
      Как их клиенту получить физически, возможно это? Как предоставить на проверку инспектору, в случае чего?

      Не, я понимаю, что в нынешней реализации ФН — это только буфер для отправки и криптосредство, не то, что ЭКЛЗ, но это же не повод их под каток бросать после 13 месяцев?!

      И еще: реально ли такую арендованную кассу применять не только для интернета, но и на физической точке продаж? Не нашел в законе ничего такого…
        0
        Про оффлайн могу ответить за автора: нет. Онлайн-кассы не имеют печатающего устройства, а при продаже оффлайн обязательно выдавать бумажный чек. Чисто теоретически наверное можно было бы формировать текст чека из переданных параметров, и печатать его на копеечном чековом принтере, но это, наверное, незаконно.
        Но для онлайн и оффлайн продаж совсем не обязательно иметь две кассы, достаточно одной, с чекопринтером, и печатать на ней как оффлайн, так и генерировать онлайн-чеки.

        А про судьбу ФНов интересно, да.
          0
          А что насчет мобильного эквайринга? Наподобие Lifepay — там чек не выдают.
            0
            тут всё еще печальнее :)
            на самом деле, к любой операции с картой надо печатать не только слип, но и кассовый чек (и, соответственно, проводить операцию через кассу)

            ну, это если следовать букве ))
              0
              Здравствуйте. В мобильном эквайринге бумажной версии чека нет. Вы можете отправить электронный чек клиенту на номер телефона и почту. Для того чтобы распечатать чек требуется контрольно кассовая техника — она кстати у нас тоже есть :)
                0
                Да, это я понял, просто здесь речь шла про то, что
                при продаже оффлайн обязательно выдавать бумажный чек
              0
              > могу ответить за автора
              > это, наверное

              ну, вот видите, уважаемый, не получилось ответить за автора. :)
              на уровне «дай погадаю» я и сам знаю ответ.

              да, при физической продаже надо печатать чек, да, есть средство формировать чек по данным от облачной кассы (некоторые операторы даже картинку чека шлют через отдельное апи) и печатать его местно на чем угодно.
              законно/легально ли то, что я вопрошал в самом верху — никто не знает :)
                0

                Я разбирался в вопросе. Правда с обратной стороны — использовать кассу магазина еще и для печати онлайновых чеков.
                Следует понимать, что закон выкатили, но есть огромное количество моментов, которые не были законом учтены и сейчас все пытаются как-то приспособиться, а минфины с налоговыми дают, зачастую, противоположные ответы.
                Так вот, использовать одну кассу для онлайна и для магазина не запрещается. Аргументация была такая, что спецпорядок применения (оплата на сайте) мы должны указать, а вот прием наличных подразумевается по умолчанию и не требует каких-то дополнительных телодвижений.


                Но, тут возникает проблема технического характера: на чеке необходимо указывать место совершения покупки. Т.е. при оформлении чека ваше ПО должно менять настройку кассы, т.к. необходимый параметр не входит в параметры функции формирования чека. У штриха так точно, с атоллами вроде как такая же ситуевина. Вопрос, насколько я понимаю, актуален и в случае, когда у вас несколько интернет-магазинов.


                В моем случае я, в принципе, смогу своим ПО менять место продажи. А вот в случае облачной кассы, вам могут и не дать такой возможности.
                По поводу печати бумажного чека, регламентирован состав реквизитов, которые там должны присутствовать. Требований по печатающему устройству я не припомню. НО! Почему-то штрих позволяет напечатать только одну оригинальную копию чека. Если нужен дубликат (а у меня он печатается) у них отдельная функция, которая печатает чек с надписью "КОПИЯ" и только последний пробитый чек.


                Самое разумное, обратиться в вашу налоговую с запросом. Т.к. именно они будут вас проверять и проверять будут так, как сами понимают закон. Не обязательно, что понимают они его правильно и вообще захотят вникать в ваш вопрос. Не факт, что тетенька, овечающая на ваш запрос, трактует закон так же как и проверяющая тетенька… Но это такая специфика ведения бизнеса в России. А может и не только в России...

                  0
                  так-то да… только официальный запрос в налоговую с последующим получением официального ответа и последующим прикрытием своих тылов данной бумажкой с печатью… (и то, не факт) )))
                    0
                    Пропустил ответы)
                    Запрос в налоговую по этим вопросам часто не дает результатов. Проблема в том, что там и не очень понимают до сих пор как нужно. Поэтому отвечают (разумеется в течение месяца) шаблонными отписками, оставляющими больше вопросов чем ответов, я пробовал дважды. Думаю, обращаться надо не в налоговую, а в минфин. Но это не точно.

                    По поводу оффлайн-касс — закон тут, по моему вполне конкретно, требует установки кассы в точке расчетов. Чекопринтер не является кассой, поэтому эта позиция очень шатка. Скажем так, отличить чек, со всеми реквизитами, сформированный облачной кассой, и напечатанный на принтере, от того же, но сформированный на месте, трудно. Но даже минимальной проверки не выдержит — место установки кассы то у налоговой есть.
                    Требования в законе есть: consultant.ru: касса — это устройство, имеющее внутри своего корпуса ФН, и обеспечивающее возможность печати чека.

                    Что же касается оффлайн касс для онлайн-расчетов, онлайн-чек от оффлайн отличается уменьшенным количество обязательных реквизитов, но требует адреса сайта продавца, который инициировал расчет.
              0

              после того как ФН закрыт он отправляется клиенту курьером или по почте. Клиент его должен хранить в течении 5 лет.

                0

                ФН отдаётся клиенту, то есть владельцу


                Реально любую кассу применять как для интернет-магазина, так и для физической точки

                  0
                  Реально любую кассу применять как для интернет-магазина, так и для физической точки
                  Анна, а можно ваше авторитетное заявление подкрепить какими-то фактами, сылками на какие-то законы или еще что-то?
                  Или я слишком многого прошу? ))
                    0
                    Если не запрещено, то разрешено
                    Такой принцип для всего работает )

                  0
                  ФН передается клиенту по Акту в случае расторжения или истечения срока действия договора, а так же в случае неисправности ФН, истечения срока службы или израсходования ресурса ФН в течении 5-ти рабочих дней.
                  0
                  Настраивали интеграцию с данным сервисом. Приятного мало. В описании к API далеко не всё. Тех поддержка ничего толком не может сказать. На тестовых данных работает, на продуктив запускаешь и не работает. Хотя бы в статье всё красиво описано.
                    +1
                    Интересный скриншот. У меня так

                    image
                      0
                      Обновление было вчера
                        0
                        Кроме дизайна ничего не изменилось
                      0
                      Главная претензия к вашему API:
                      есть у меня платежи в БД, у каждого платежа уникальный id
                      Делаем регистрацию покупки с externalId=мой id платежа — получаем uuid.
                      Пока всё хорошо, но если что-то пойдёт не так на вашей стороне и чек не пройдёт, то больше я мой уникальный id использовать не могу! Приходится городить огород. Очень неудобно.
                        0

                        Вы просто понимает API не много не корректно. externalId — это уникальный номер в базе данных АТОЛ Онлайн.

                          0
                          А что же тогда есть UUID который вы мне выдаёте, и который тоже уникальный?
                            0

                            связка expternalid + код группы + uuid уникальные сущности в рамках сервиса у каждого входящего json. Если у Вас транзакция не зарегистрировалась успешно, то Вы должны исправить проблему и отправить в сервис повторно чек с externalid уникальным в рамках сервиса.

                              0
                              Это я уже понял и так и делаю, но это неудобно. Очень неудобно. У меня есть один платёж, он уникальный, у него есть такой же уникальный id. Но я вынужден выдумать ему ещё какой-то уникальный id, чтобы зарегистрировать. И не только в случае ошибок на моей стороне, но и на и вашей тоже.
                                0

                                Если у транзакций не будет уникального поля, то было бы очень много дублей чеков.

                                  0
                                  Повторю
                                  >У меня есть один платёж, он уникальный, у него есть такой же уникальный id.
                                  Откуда взяться дублям тут, я не понимаю.
                                    0

                                    Как сервису разделять дубль и новый чек? Для этого и придуман уникальный ключ externalid, благодаря которому один и тот же json не задубрилуется в системе дважды и тем самым не увеличит клиентам налоговую базу.

                        0
                        Можно ли арендованную кассу применять не только для интернета, но и на физической точке продаж?
                        ///
                        Закон: любая касса должна применяться по месту расчета, в момент расчета и лицом, осуществляющим расчет.
                        Арендованная касса может применяться только для интернет-магазина.
                          0
                          Закон: любая касса должна применяться по месту расчета, в момент расчета и лицом, осуществляющим расчет.
                          Но арендованная касса не находится по месту расчета, не управляется лицом и пр…
                          Таки, любая касса должна? :)
                            0

                            В случае арендованной кассы Вы клиенту при получении наличных денег не выдадите бумажный чек.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое