Хабрахабр

Как мы запустили регистрацию касс за наших клиентов

Согласно поправкам к 54-ФЗ, с июля этого года практически все торговые предприятия обязаны использовать онлайн-кассы, передающие данные через интернет в налоговую службу. Чтобы обзавестись таким аппаратом, придется купить кассу и фискальный накопитель, подписать договор и оплатить услуги оператора фискальных данных, зарегистрироваться в двух личных кабинетах ФНС и ОФД, вбить реквизиты в кассу, получить бумажный отчет о регистрации. Ну а еще понадобится электронная цифровая подпись, иначе придется приехать в ФНС и лично отстоять в очереди.

Об этом сейчас и расскажем.
Мы решили избавить наших клиентов от всего этого ужаса, сделав сервис, регистрирующий все автоматически чуть ли не в один клик.

Зачем нам это

Вы уже поняли, регистрация кассы — утомительный многоступенчатый квест, но это не единственная проблема. На каждом этапе подстерегает зоопарк интерфейсов, формы которых предстоит заполнить вручную регистрационными данными для каждой кассы, а также полный набор соответствующих багов (отдельный привет требованиям налоговой по использованию браузеров IE, Яндекс.Браузер или Спутник). Сотни возможностей ошибиться, испортить процедуру и начать сначала. А если устанавливаешь 5-10 касс, шанс ошибки при вводе одних и тех же реквизитов вырастает в разы. Не говоря о непродуктивных тратах времени и выяснении, почему же личный кабинет налоговой отказывается принимать токен, который прекрасно «проглатывал» буквально вчера.

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

Этапы регистрации

В регистрации кассы задействовано сразу несколько сторон. Это налоговая служба (ФНС), ОФД — оператор фискальных данных, через которого кассы взаимодействуют с налоговой, удостоверяющий центр, выпускающий электронные подписи и, как правило, немного растерянный, потерявшийся в бюрократических перипетиях предприниматель. Мы хотели вмешаться в их взаимоотношения, да так, чтобы взять все сложности на себя.

Условно процедура разбивается на два этапа:

Регистрация кассы — данные конкретного аппарата отправляются в ФНС, а в ответ приходит регистрационный номер.

Фискализация — активация кассы при помощи регистрационного номера машины, присвоенного ФНС.

Прежде всего, мы отправились к нашим партнерам, чтобы проработать с ними первый этап.

API для ФНС

Мы не первыми задумались об автоматизации регистрации. Многие говорили, что делают нечто в этой области, что разработка ведется, но готового внешнего интерфейса не было ни у кого. Одним из операторов фискальных данных был предоставлен API — почти готовый для взаимодействия с налоговой.

Мы поверили в то, что вскоре интерфейс заработает на полную мощность, и начали реализацию и тестирование на «заглушках». На тот момент с помощью протокола было отправлено всего около 80 тестовых заявок.

«Заглушки», что мы получили от ОФД, включали в себя только success mock, воспроизводили успешный сценарий. Выйдя на прод, мы поняли, что наши тесты и реальная заявка различаются, словно день и ночь. В действительности достичь того самого «success» оказалось непросто.

Протокол ФНС оказался плохо документирован и, зачастую, отвечал не специфицированными отказами, по которым не ясно, чем они вызваны. В хитах значились: заявки на стороне партнеров, необрабатываемые по нескольку дней, отсутствие обратной связи от ФНС и ОФД, ошибки подписи и наша любимая «неизвестная ошибка». Так что первое время мы тестировали протокол, и, совместно с ОФД, принимали решения, как реагировать на те или иные ответы ФНС в конкретных случаях. Четкой спецификации не существует до сих пор.

API для кассы

Пока часть команды изучала поведение систем ФНС на практике, работа не стояла на месте. Параллельно мы устроили переговоры с производителями касс, предложили им реализовать обмен данными от нас до их платформы, от платформы до кассы и в обратном порядке для наладки автоматической фискализации касс.

Кассы Эвотор с сенсорными экранами и Дримкас — для тех из клиентов, что привыкли к старым добрым кнопкам и считают дополнительный функционал избыточным. Мы отобрали пару универсальных моноблочных решений. Модели разные: и со сканером, и без.

Если у ОФД был наготове собственный API, то для кассовых подрядчиков его пришлось разрабатывать с нуля. Иначе сделать так, чтобы все регистрационные данные приходили на кассу автоматически, без ручного ввода, невозможно.

Коллеги добились успеха, настроив взаимодействие через свою платформу, и вскоре были готовы: API для открытия личного кабинета клиента и проприетарный протокол для управления кассой.

А вскоре API позволит так же легко снимать с учета и перерегистрировать кассы. Наши поставщики были первыми, кто настроил автоматическую подачу регистрационной информации на кассы.

Теперь, когда мы ведем переговоры с другими кассовыми вендорами, то одним из ключевых требований становится именно поддержка этого интерфейса.

Анатомия авторегистрации

После того, когда мы научились работать с ФНС и реализовали с вендорами API для передачи регистрационных данных на кассу, пришло время связать это все в единую систему, наладить процедуру регистрации.

Поскольку они отвечают на запросы с задержкой, процесс растянут во времени и имеет большое количество интеграций с внешними системами. Это задача выбора верной архитектуры, которая позволила бы контролировать асинхронную регистрацию кассы и в ОФД, и у ФНС, и у вендора. Из-за этого нам пришлось написать на Java два приложения.

Например, мы отправляем данные клиента в ОФД и ожидаем получить в ответ регистрационный номер. Непосредственно с ОФД и системами производителей касс общается Job service.

Переспрашивает и переспрашивает, пока в ответ не придет результат. Job service опрашивает статус заявки через определенные интервалы. Регистрационный номер сохраняется, Job переводит заявку в следующую стадию и начинается фискализация.

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

А на случай массовых проблем настроили системы мониторинга, которые фиксируют аномалии, свидетельствующие о крупных сбоях у ФНС или ОФД. Мы сразу определяем причину ошибки. Клиент же узнает о проблемах в единственном случае: если в ответ на запрос мы получаем конкретный реджект — мотивированный отказ в регистрации.

Второе приложение, CashReg — система процессинга, где ведется статусная модель, представленная в реляционном виде.

Статусная модель позволяет избежать внутренних ошибок и исключить отклонения от стандартного алгоритма обработки заявки. Она разрабатывалась исходя из API, предоставленных вендорами и ОФД, и включала в себя все возможные переходы для каждого класса, участвующего в процессе регистрации.

Так, если заявка слишком долго находится в одном статусе, например, не получает регистрационный номер несколько часов, или ОФД в ответе укажет неверный stage или status заявки, СashReg рапортует об ошибке.

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

Все три компонента регистрационной системы не подразумевают высоких нагрузок, потому они развернуты в виртуальных средах.

Как идет обработка заявки

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

С точки зрения внутренней кухни волшебство авторегистрации выглядит немного сложнее. Оставив заявку в личном кабинете, клиент дает нам юридическое согласие на выпуск электронной подписи и прохождение всей процедуры от его имени.

Из банковских баз извлекается информация о компании, регистрационные данные по конкретному магазину и подписанту (например, генеральному директору). Они актуализируются в SPARK, проходят скоринг и поступают в мастер-систему по кассам.

Затем в CASHREG формируется заявка. Она отображается в виде новой задачи в админке сотрудника из группы поддержки торговых решений. Он видит, какие касса и фискальный накопитель нужны клиенту. Сотрудник находит на складе нужный аппарат, выбирает фискальный накопитель, штрих-кодит их серийные номера и подтверждает заявку. Так к ней привязываются конкретные устройства, что будут доставлены клиенту. В этот момент в ОФД поступает запрос: «сформируйте заявление о регистрации такой-то кассы, для такой-то фирмы».

Там кассе присваивают регистрационный номер. Файл, присланный ОФД в ответ, удостоверяется электронной подписью и, с помощью API ОФД, отправляется в налоговые органы.

Параллельно в админке появляется задача — фискализировать ту самую кассу. Теперь полный пакет документов по кассе попадает к производителю кассового аппарата (да, они тут тоже задействованы). Система вендора «видит», что аппарат вышел на связь, и загружает в его память все необходимые регистрационные данные автоматически. Это значит, что сотрудник просто включает кассу. Ошибки при ручном вводе исключены, одинаковые реквизиты попадают и в ФНС, и на кассу.

Фискальные данные из отчета: дата печати, подпись, фискальный признак, служат подтверждением того, что касса готова к работе. Касса печатает отчет о регистрации — то, ради чего все затевалось. Эти реквизиты снова отправляются в ОФД.

Сразу же после того, как ОФД сформирует отчет о регистрации, мы подписываем его за клиента, и готовая касса уезжает с курьером.

Она будет доступна в электронном виде в личном кабинете клиента через два-три дня. ОФД еще предстоит подготовить регистрационную карту, но ее можно не дожидаться.

Заключение

Чтобы реализовать этот проект, от привычных задач отвлеклось порядка двадцати сотрудников со всего банка и еще множество специалистов со стороны наших партнеров, ОФД и кассовых вендоров, но их старания не прошли даром.

В целом на всю процедуру уходит 5 – 6 часов. Среднее время получения регистрационного номера, за исключением самых негативных кейсов, составляет три часа. На данный момент уже обработано порядка 1000 заявок. 90% регистраций завершается успехом.

Решая такие задачки чувствуешь, что делаешь что-то по настоящему полезное. В общем, как вы поняли, мы у себя в компании любим подобные кейсы, которые могут серьезно упростить жизнь огромному количеству людей.

S. P. Причем вместе с протоколами обмена данных. Если интересно, можете почитать, как мы сами запилили свой банкомат.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть