All Projects → yandex → ofd

yandex / ofd

Licence: Apache-2.0 license
Реализация протокола взаимодействия ККТ-ОФД

Programming Languages

python
139335 projects - #7 most used programming language

ОФД

Библиотека для работы с бинарным протоколом, используемым кассовыми аппаратами для обмена данными с оператором фискальных данных (ОФД). Подробнее об ОФД и новом порядке применения кассовой технике можно прочитать здесь: https://kkt-online.nalog.ru

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

Распаковка сообщения от кассы

import ofd

message = b'\x5a\x01\x5d\xa8\xa5...'  # Контейнер сообщения от кассы в бинарном виде.
fiscal_sign = b'\x23\14\12..'  # Фискальный признак документа в бинарном формате - дописывается в конец поля rawData.
doc = ofd.unpack_container_message(message, fiscal_sign)

Упаковка json документа в бинарный формат

import ofd

doc = {'receipt': { .. }}  # Фискальный документ в JSON формате.
message = ofd.pack_json(doc, ofd.DOCS_BY_NAME)  # Получаем контейнер ФФД в бинарном формате.

Запуск тестов

python3.5 setup.py pytest

Эмулятор ОФД

В директории ./example написан эмулятор ОФД, демонстрирующий использование протокола. Это TCP-сервер, которое слушает заданный порт. Если отправить на вход данные бинарного протокола, то приложение расшифрует сообщение в json-формат и выведет его в stdout. В ответ эмулятор отправит документ "подтверждение оператора" в бинарном формате. Эмулятор работает без использования шифровальной машины, поэтому сможет прочитать только незашифрованные входящие сообщения. Пример отправки документа можно посмотреть в tests/example_test.py Запустить пример можно следующей командой, указав желаемый номер порта:

python3.5 example/mock_ofd.py --port 12345

Для запуска под windows

py -3.5 example/mock_ofd.py --port 12345
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].