Что спрятано внутри онлайн-касс: разработка фискального регистратора



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

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


    Старинный кассовый аппарат

    1. Система: железо + софт у кассира


    Весь программно-аппаратный комплекс, который установлен на рабочем месте кассира, может называться POS-системой или POS-терминалом, от английского Point of sale — место продажи.

    Рассмотрим, как работает POS-система. Так как принципиальное отличие системы от терминала — это расположение фискальной памяти (ФП) или фискального накопителя (ФН): у POS-системы она встроена в печатающее устройство, а у POS-терминала находится в компьютерном блоке.


    Типовой кассовый аппарат. POS-система российской компании «ШТРИХ-М»

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

    Самая интересная часть POS-системы — фискальный регистратор — это сердце системы и один из классов контрольно-кассовых машин (ККМ).

    В роли фискального регистратора выступает чековый принтер с встроенной фискальной памятью. Он получает информацию по каналу связи, обрабатывает её и выводит на печать. Данные о кассовых операциях могут храниться в фискальной памяти сколь угодно долго, пока не понадобится их обнулить.

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

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


    Роль ОФД. Схема из статьи о 54-ФЗ и переходе на онлайн-кассы

    ФНС — это Федеральная налоговая служба Российской Федерации. В Казахстане эту функцию выполняет Комитет государственных доходов Министерства финансов. А в Беларуси – Министерство по налогам и сборам.

    В РФ работает несколько ОФД, а в Казахстане – всего один, АО «Казахтелеком».

    2. Законодательство: мировой онлайн-контроль касс


    Онлайн-контроль за работой розничной торговли уже работает во многих странах: Южная Корея (2005 г.), Швеция (2008 г.), Канада (2010 г.), Польша (2011 г.), Хорватия (2013 г.). В 2015 году такой подход начал внедряться в Казахстане. А в Беларуси крайний срок подключения касс к системе дистанционного контроля выручки перенесли на 1 июля 2018 года (такой же срок намечен в России).

    Применение онлайн-касс в Казахстане регулируется главой 90 Налогового кодекса. С 2015 года передачу чеков в налоговую по интернету начали продавцы топлива и алкоголя. На втором этапе – с 2016 года – к системе подключили тех, кто занимается оптовой торговлей различными материалами и оборудованием; розничной продажей мебели, ПО и электроники; владельцев гостиниц, ресторанов, парикмахерских и кинотеатров. Предусмотрен третий этап проекта.

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

    3. Устройство и бизнес-логика фискального регистратора


    Наше базовое устройство для разработки – термальный принтер для печати чеков. Сборочная система – Buildroot. Программирование — на Qt.

    В рамках проекта требовалось разработать:

    1) техническое задание;
    2) протокол обмена с POS-компьютером, условно назовем его протокол POS-C;
    3) приложение-демон, управляющее устройством:

    • модуль обмена данными с сервером ОФД по протоколу ККТ (контрольно-кассовая техника);
    • модуль обмена данными с POS-компьютером по протоколу POS-C;
    • модуль управления печатью;
    • модуль управления интерфейсами связи;
    • модуль взаимодействия с базой данных;
    • веб-сервер.

    1) Модуль обмена данными с сервером ОФД


    Обмен устройства с сервером осуществляется по TCP/IP-протоколу. При этом взаимодействии устройство является клиентом, а ОФД – сервером. В качестве основы для кодирования и декодирования информации, передаваемой по протоколу ККТ, используется Protocol Buffers.

    Protocol Buffers (Protobuf) – протокол сериализации (передачи) структурированных данных, предложенный Google в качестве эффективной бинарной альтернативы текстовому формату XML. Разработчики сообщают, что их Protocol Buffers проще, компактнее и быстрее, чем XML, поскольку передает бинарные данные, которые оптимизированы под минимальный размер сообщения.

    Формат сообщений в Protobuf описывается на специальном декларативном языке, который в чём-то напоминает декларацию структур в языке C++. Эти декларации сохраняются в файл с расширением .proto и компилируются в исходные коды на выбранном языке с помощью компилятора protoc.

    Протокол ККТ позволяет:

    • получать служебную информацию, информацию о кассе, номенклатурные данные;
    • отправлять данные фискального чека и отменять его;
    • получать отчеты о проделанных операциях;
    • контролировать денежные средства в кассе (изъять или внести наличные) и состояние смены (открыть или закрыть смену);
    • авторизовать оператора-кассира.

    2) Модуль обмена данными с POS-компьютером


    Общение с POS-компьютером реализовано по протоколам TCP/IP или HTTP, в зависимости от настроек в веб-интерфейсе, через порт USB Type-B с использованием технологии USB over Ethernet. При этом взаимодействии устройство является сервером, а POS-компьютер – клиентом. В случае использования TCP-соединения данные представлены в формате XML. А в случае HTTP-соединения используется POST-запрос, телом которого являются те же данные, что и при TCP-соединении.

    Протокол POS-C позволяет:

    • настроить и протестировать связь с сервером ОФД;
    • получить информацию о состоянии устройства;
    • управлять периферией устройства (печать текста, звуковой сигнал, открытие или закрытие денежного ящика);
    • распечатать фискальный чек;
    • распечатывать отчеты о проделанных операциях;
    • контролировать денежные средства в кассе (изъять или внести наличные) и состояние смены (открыть или закрыть смену).

    3) Модуль управления печатью


    Взаимодействие с печатающим механизмом, звукоизлучателем и портом управления денежным ящиком проводится через библиотеку Python-ESCPOS, которая реализует протокол ESC/POS.

    ESC/P (Epson Standard Code for Printers) — язык команд, разработанный Epson, для управления принтерами. ESC/POS — один из вариантов ESC/P, разработанный для использования в POS-оборудовании.

    Виды печатаемых документов:

    • тестовая печать;
    • тестовый фискальный чек;
    • фискальный чек;
    • отмененный фискальный чек;
    • отчеты (Х-отчет, Z-отчет, полная контрольная лента, сокращенная контрольная лента, отчет по кассира, отчет по секциям);
    • внесение или изъятие наличных;
    • открытие смены;
    • информирование о состоянии устройства;
    • результат тестирования устройства;
    • чек регистрации устройства.


    Тестирование принтера. Примеры чеков

    4) Модуль управления интерфейсами связи


    На борту устройства имеется DHCP-сервер для USB-интерфейса для связи с POS-компьютером. А для соединения с сервером ОФД могут использоваться интерфейсы LAN, WiFi и GPRS, переключение между которыми реализует демон управления сетевыми соединениями ConnMan. Он позволяет настроить соединения по каждому интерфейсу, чтобы в случае обрыва связи по активному интерфейсу быстро переключиться на другое соединение с меньшим приоритетом. Такое решение стабилизирует соединение с сервером ОФД в точках продажи с плохим подключением к интернету.

    5) Модуль взаимодействия с базой данных


    Хранение данных реализовано с использованием компактной встраиваемой СУБД SQLite и организовано в виде следующих таблиц:

    • данные по произведенным операциям;
    • авторизационные данные;
    • настройки секций;
    • настройки налогов;
    • настройки клише и подвала чека;
    • информационные сообщения от сервера ОФД.

    6) Веб-сервер


    Для реализации веб-сервера была выбрана библиотека Wt, C++ WebToolkit в силу следующих преимуществ:

    1. это кроссплатформенная свободная библиотека с поддержкой C++;
    2. малый размер web-сервера на C++ и низкое потребление ресурсов;
    3. удобство интеграции с существующими настольными приложениями и библиотеками C++;
    4. нет нужды в использовании HTML, CSS, JavaScript и др. технологиях, т.к. можно программировать с использованием виджетов, наподобие Qt;
    5. безопасность и кросс-браузерность web-приложений.

    Весьма полезным для быстрого старта оказался WtDesigner.

    Предназначение веб-интерфейса:

    1. настройка параметров;
    2. просмотр состояния устройства;
    3. обновление ПО.


    Веб-интерфейс

    4. Заключение


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

    И теперь кажется, что инженерная команда Promwad уже никогда не сможет просто так прийти в магазин и что-то купить, не думая обо всех этих внутренностях онлайн-касс, протоколах для передачи данных, требованиях законодательства и выводе всей этой кухни на печать:
    — Возьмите чек, пожалуйста!
    — Спасибо, не надо! :-)

    P.S. И напоследок минутка юмора: британские уфологи из команды ArtAlienTV обнаружили на снимках марсохода Curiosity предмет, напоминающий старый кассовый аппарат.

    • +18
    • 8,9k
    • 5
    Поделиться публикацией
    Комментарии 5
      0
      На самом деле это хорошо отлаженный механизм не только с технической точки зрения, но и с точки зрения законодательства

      Извините за оффтоп, но с последней фразой категорически не согласен
        +1
        Добрый день… Вот Вы написали
        Общение с POS-компьютером реализовано по протоколам TCP/IP или HTTP, в зависимости от настроек в веб-интерфейсе, через порт USB Type-B с использованием технологии USB over Ethernet.
        — Вообще это довольно круто(TCP/ip и особенно как почти rest HTTP), ибо это низкоуровневые байтики гоняем по rs-232.
        Скажите а какие модели ФР пользуют Ваш «rest-движок»?(Там наверху был штрих, но у него обычный протокол rs-232)
        Но тут же не понравилось «через порт USB Type-B с использованием технологии USB over Ethernet.»… Это если ВЫ думаете что POS системы делаются только на винде.У меня POS системы на линуксе(и на винде тоже могут работать (кроссплатформенные), но флагман линукс)… ТО что я видел USB over Ethernet. не поднимается на линуксах… либо работает не удовлетворительно.
          0
          Я думаю что используетеся RNDIS. Прекрасно поддерживаемый в Linux и Win
          0
          Эта статья — прямо соль на рану… с этими онлайн кассами…
          Пытаюсь подерживать интернет магазин — продажи пока редкие и их мало… Но с онлайн кассами доп расходы вырастают в год на 7тысяч — фискальный накопитель и 3 тысячи договор с ОФД. Хорошо наверное, когда государство законами подгоняет тебе клиентов?
            +1
            Добавьте к этому еще 1-2 т.р. за ЭЦП, с помощью которого все это нужно регистрировать в налоговой. Плюс с некоторыми типами ФР (например, производства Штрих) добавьте тысяч 5-6 сервисным организациям за обслуживание ФР, обновление прошивки и замену ФН. Ибо версия протокола фискальных документов изменилась, необходимо обновить прошивку ФР. А, например, Штрих не выкладывает прошивки в свободный доступ, а дает доступ только партнерам. И вы, даже имя необходимые компетенции, все равно вынуждены переплачивать. А если учесть, что за год понавыпускали 10-15 видов ФН, каждый со своими нюансами, версиями, сроками действия, то предпринимателю придется либо тратить уйму времени, разбираясь во всем этом огороде решений, либо еще платить сервисной организации. Плюс большой риск ошибок, что что-то будет сделано не так или куплено не то и придется покупать еще один ФН.

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

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