Передача данных на сервер ОФД Казахстана обеспечивается сервисом jnfd (Программный фискализатор (kz)).
Установка сервиса
Для обеспечения передачи данных на сервер ОФД (Казахстан) необходимо установить пакет jnfd.
aptitude install jnfd
Запуск и управление сервисом jnfd осуществляется при помощи утилиты service. Для выполнения действия в консоли кассы выполняется соответствующая команда:
service jnfd [команда]
[команда] может принимать значение:
start– запуск сервиса,stop– остановка сервиса,restart– перезапуск сервиса,status– получение статуса сервиса.
После установки пакета будут созданы:
- конфигурационный файл
/linuxcash/cash/jnfd/config.properties, в котором настраиваются параметры подключения к серверу ОФД (Казахстан); - директория
/linuxcash/cash/jnfd/keystore/, в которой расположены сертификаты безопасности.
Настройка сервиса
Настройка параметров подключения к серверу ОФД (Казахстан) осуществляется в конфигурационном файле /linuxcash/cash/jnfd/config.properties.
| Наименование | Возможные значения | Описание | Примечания |
|---|---|---|---|
| Application.Mode.Service.Address | Адрес, на котором стартует сервис и куда подключается драйвер ФР | По умолчанию http://localhost:1234/NFDService | |
| OnlineRegistration.FSCNode.Url | Ссылка на сервис фискализации системы (URL сервера) | По умолчанию https://88.204.142.178:8014/FSCNode-II/ExtendedFiscalizationService.asmx | |
| OnlineRegistration.FSCNode.SecuritySettings.HostNameVerify.Enabled |
| Включить проверку сертификата | По умолчанию false |
| OnlineRegistration.TradeOperation.Timeout.Milliseconds | Таймаут обработки операций: продажа, возврат продажи (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.MoneyPlacement.Timeout.Milliseconds | Таймаут обработки операций: внесение, выплата (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.XReport.Timeout.Milliseconds | Таймаут получения суточного отчета без гашения (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.ZReport.Timeout.Milliseconds | Таймаут получения суточного отчета c гашением (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.SettingsSynchronizationTimeout.Seconds | Таймаут синхронизации (в секундах) | По умолчанию 300 | |
| CryptoCore.KeystorePath | Путь к хранилищу ключевых контейнеров | По умолчанию ./keystore | |
| CryptoCore.CAStorePath | Путь к хранилищу корневых сертификатов | По умолчанию ./keystore/ca_certs | |
| CryptoCore.DefaultKeyUID | Идентификатор ключевого контейнера (наименование ключа, указывается без расширения p12) | По умолчанию GOSTKNCA_649bb92b90c85f483b68c5842bdcbd349648964c | |
| CryptoCore.DefaultPIN | Пароль к ключевому контейнеру (PIN) | По умолчанию 123456 |
После изменения значений параметров необходимо перезапустить сервис jnfd.
Поддержка протокола ОФД 2.0.2 (устарело)
В протокол ОФД версии 2.0.2 добавлены обязательные поля:
measureUnitCode– код единицы измерения для позиции (мера количества предмета и расчета). Строка. Значения формируются в соответствии с Классификатором единиц измерения и счета Евразийского экономического союза:
Мера количества предмета расчета может быть задана:в БД
DictionariesтаблицеUnitsв полеfrunit,в конфигурационном файле
/linuxcash/cash/conf/ncash.ini.d/fr.iniв секции[HW.FR.UnitsMapping].
customerEmailилиcustomerPhone– email или телефон клиента,– банковский идентификационный номер клиента.
Передача данных на сервер ОФД
Передача фискальных данных в чеке возврата по чеку продажи
Для автоматической передачи фискальных данных по чеку продажи при закрытии чека рекомендуется активировать плагин fdcontroller.
Для возврата по чеку продажи необходимо настроить форму возврата для ввода фискальных данных в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/backbysale.ini:
[BackBySale.InputFiscalInfo.Field.1]
fieldId = fiscalSign
description = {"id": "inputFiscalInfoSourceFdNumber", "defaultMessage": "Номер ФД\nчека-основания"}
type = 10
regexp = "[0-9]{1,12}"
[BackBySale.InputFiscalInfo.Field.2]
fieldId = fnNumber
description = {"id": "inputFiscalInfoSourceFmNumber", "defaultMessage": "Номер ФМ\nчека-основания"};
type = 10
regexp = "[a-zA-Z0-9]{16}"
[BackBySale.InputFiscalInfo.Field.3]
fieldId = fnDate
description = {"id": "inputFiscalInfoDate", "defaultMessage": "Дата и время"}
type = 16
dateFormat = "dd.MM.yyyy hh:mm:ss"
regexp = "yyyyMMddhhmmss"
row = 2
[BackBySale.InputFiscalInfo.Field.4]
fieldId = sum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Общая сумма"}
type = 6
regexp = "[0-9]*(\.[0-9]{1,2})?"
[BackBySale.InputFiscalInfo.Field.5]
fieldId = serialnum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Номер ККТ"}
type = 10
regexp = "[a-zA-Z0-9]{16}"
Каждая секция отвечает за конкретное поле в форме возврата для ввода фискальных данных.
Количество допустимых символов задается маской в параметре regexp. Если вводимые данные не будут проходить по маске, то поля будут подсвечены красным цветом и данные невозможно будет применить.
При выполнении операции возврата осуществляется проверка на наличие в БД Documents таблице Fiscaldocument сохраненных фискальных данных чека продажи:
- если фискальные данные заполнены, то чек возврата успешно закрывается. Ручной ввод фискальных данных чека продажи не требуется,
- если фискальные данные не заполнены, то при формировании чека возврата на экран будет выведен диалог ввода фискальных данных чека продажи:
При нажатии на кнопку "Отмена" чек возврата не будет сформирован.
При вводе данных вручную проверяется правильность заполнения полей. Если введены некорректные данные, то поля будут подсвечены красным цветом. Введите корректные фискальные данные и нажмите клавишу "Ввод", чек возврата будет сформирован.
Передача фискальных данных в режиме возврата
Для возврата необходимо настроить форму возврата для ввода фискальных данных в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/back.ini:
[Back.InputFiscalInfo]
; Регулярное выражение для ввода данных со сканера в диалоге
; По умолчанию ""
fieldDistributionRegexp = ".*&fn_number=(?<fnNumber>[a-zA-Z0-9]{16}).*&fd_number=(?<fdNumber>[0-9]{1,10}).*"
[Back.InputFiscalInfo]
; Регулярное выражение для ввода данных со сканера в диалоге
; По умолчанию ""
fieldDistributionRegexp = ".*&fn_number=(?<fnNumber>[a-zA-Z0-9]{16}).*&fd_number=(?<fdNumber>[0-9]{1,12}).*"
[Back.InputFiscalInfo.Field.1]
fieldId = fiscalSign
description = {"id": "inputFiscalInfoSourceFdNumber", "defaultMessage": "Номер ФД\nчека-основания"}
type = 10
regexp = "[0-9]{1,12}"
[Back.InputFiscalInfo.Field.2]
fieldId = fnNumber
description = {"id": "inputFiscalInfoSourceFmNumber", "defaultMessage": "Номер ФМ\nчека-основания"};
type = 10
regexp = "[a-zA-Z0-9]{16}"
[Back.InputFiscalInfo.Field.3]
fieldId = fnDate
description = {"id": "inputFiscalInfoDate", "defaultMessage": "Дата и время"}
type = 16
dateFormat = "dd.MM.yyyy hh:mm:ss"
regexp = "yyyyMMddhhmmss"
row = 2
[Back.InputFiscalInfo.Field.4]
fieldId = sum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Общая сумма"}
type = 6
regexp = "[0-9]*(\.[0-9]{1,2})?"
[Back.InputFiscalInfo.Field.5]
fieldId = serialnum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Номер ККТ"}
type = 10
regexp = "[a-zA-Z0-9]{16}"
Каждая секция отвечает за конкретное поле в форме возврата для ввода фискальных данных.
Количество допустимых символов задается маской в параметре regexp. Если вводимые данные не будут проходить по маске, то поля будут подсвечены красным цветом и данные невозможно будет применить.
При выполнении возврата будет выведен диалог ввода фискальных данных чека продажи:
При нажатии на кнопку "Отмена" чек возврата не будет сформирован.
При вводе данных вручную проверяется правильность заполнения полей. Если введены некорректные данные, то поля будут подсвечены красным цветом. Введите корректные фискальные данные и нажмите клавишу "Ввод", чек возврата будет сформирован.
Подключение принтера чеков и настройка драйвера
Подключение принтера чеков и программного фискализатора (kz) осуществляется в Сервисном меню через Менеджер оборудования.
Для подключения необходимо последовательно выполнить следующие действия:
- Указать принтер чеков или ФР для осуществления печати чеков:
- Добавить драйвер "Программный фискализатор (kz)":
- Настроить параметры драйвера:
- Номер ФР – порядковый номер ККМ.
- ФР – указывается ранее подключенный принтер чеков или ФР.
- Адрес – адрес клиентского модуля. Указывается значение вида
http://<ip>:<port>/NFDService. - Таймаут – таймаут ожидания ответа от сервера.
- Пароль оператора – пароль оператора. Значение по умолчанию – 30.
- Идентификатор кассы – идентификатор кассы (токен).
- Масштабирование QR-кода – размер QR-кода зависит от используемого принтера печати чеков. Значение по умолчанию – 5.
Программирование параметров для программного фискализатора (kz)
Для печати чеков использование шаблонов Artix не требуется.
Параметры для программирования задаются в специальных секциях. Секция параметров представляет собой список строк. Одна строка предназначена для установки одного параметра. Имена параметров в данных секциях задаются по правилу:
param<N>, где N - номер параметра (1..n)
Не допускаются «разрывы» нумерации списка параметров, т.е. нельзя использовать имена параметров: param1, param2, param4. В этом случае будут применены только параметры 1 и 2. Параметры с 4-го и все последующие игнорируются. Допускается нумерация параметров param1, param2, param3 и т.д.
Значения параметров формируются по правилам:
<N>:<p1>
Нумерация параметра <N> | Возможное значение параметра <p1> |
|---|---|
1 – ширина документа | любое целое число |
| 2 – язык локализации документа |
|
| 3 – положение заголовка в чеке |
|
| 4 – печать рекламного текста |
|
| 5 – печать клише |
|
| 6 – печать короткого адреса |
|
| 7 – печать сокращенных X и Z отчетов |
|
| 8 – печать единичного количества |
|
| 9 – количество смен за которые необходимо хранить документы | любое целое число |
| 10 – режим применения налогов |
|
| 11 – изымать всю денежную наличность из кассы при закрытии смены |
|
<S>.<R>.<N>:<p1>&<p2>
Параметры <p(n)> задаются через символ '&'.
Порядковый номер <S> | Обязательный параметр <R> | Нумерация параметра <N> | Значения параметров <p(n)> |
|---|---|---|---|
любое значение от 1 до 30 | любое значение от 1 до 9 | 12 – операторы |
|
| любое значение от 1 до 16 | 13 – секции |
| |
любое значение от 1 до 4 | 14 – налоги |
| |
| любое значение от 1 до 10 | 15 – клише |
| |
| любое значение от 1 до 10 | 16 – рекламный текст |
|
Параметры для программирования задаются в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/fr.ini в секции [HW.FR.commons.params].
[HW.FR.commons.params] ; ; Параметры для программирования всех подключенных ФР ; param1 = "1:42"; param2 = "2.1.12:Оператор торгового зала Иванов.И.И.&12345"; param3 = "3.1.16:NORMAL&Рекламный текст";
Настройка
Использование ставки НДС
Для использования ставки НДС необходимо:
- Добавить налоги с необходимыми ставками в БД
DictionariesтаблицуVat. Запрограммировать коды налогов в программном фискализаторе.
Пример настройки[HW.FR.1.params] ; STS - система налогообложения УСН ; VAT - налог на добавленную стоимость ; 16 - ставка НДС 16% ; 0 - ставка НДС 0% param1 = "1.1.14:STS&VAT&16" (код налога в ФР - 1) param2 = "2.2.14:STS&VAT&0" (код налога в ФР - 2)
Настроить соотнесение налогов в ФР и кодов налогов в кассе в конфигурационном файле
/linuxcash/cash/conf/fr.ini.Пример настройки[HW.FR.1.TaxMapping] ; Соотнесение кодов налогов в ФР и кодов налогов в кассе ; <Код налога ФР> = <Код налога в кассе> 1=401 2=501 ; 1 - Код налога ФР для НДС 16% ; 2 - Код налога ФР для НДС 0%
- В свойствах товара указать один из налогов в БД
DictionariesтаблицуTmc. - Выгрузить справочники налогов и товаров на кассы.
При закрытии чека продажи:
- будет использована указанная в свойствах товара ставка НДС,
- на сервис программного ФН для каждого товара будет передано значение поля
ntin.
Настройка соотнесения отделов
Соотнесение отделов, к которым привязаны товары в кассовой программе и в ККМ, осуществляется посредством настройки секции [HW.FR.DepartMapping] в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/fr.ini.
Настройка соотнесения типов оплат
Соотнесение типов оплат осуществляется посредством настройки секции [HW.FR.PayAccordance] в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/fr.ini.
Типы оплат, используемые на данном ФР:
- 1 – оплата наличными,
- 2 – оплата по безналу.
Настройка опций драйвера ФР
Для драйвера "Программный фискализатор (kz)" реализована возможность настройки опций ФР. Для этого в конфигурационный файл /linuxcash/cash/conf/ncash.ini.d/fr.ini в секцию драйвера [HW.fiscalregister.ProgramFr.<номер устройства>] необходимо вручную добавить параметр driverOptions с указанием нужных настроек опций.
Правило задания опций:
<индекс опции>:<значение опции>
| Индекс опции | Возможные значения | Описание | Поведение |
|---|---|---|---|
| 26 |
| Проверка суммы в денежном ящике при возврате по безналу | При настройке 26:0 проверка выполнена не будет. |
[Hw.fiscalregister.ProgramFr.2] driverOptions = 26:0
[Hw.fiscalregister.ProgramFr] driverOptions = 26:0
Подробнее о работе с оборудованием через ini-файлы можно прочитать в разделе "Создание устройств".
Шаблоны документов
Для формирования x и z-отчетов используются шаблоны programfr_xreport.xml и programfr_zreport.xml соответственно, для формирования x-отчетов по отделам – programfr_xreportdept.xml, для формирования документов внесения и выема денег – programfr_moneyin.xml и programfr_moneyout.xml соответственно, для формирования чеков продажи используются шаблоны programfr_sale.xml и для формирования чеков возврата programfr_back.xml.
Во все отчеты, кроме programfr_xreportdept.xml, передается переменная entries, которая является ответом от ОФД и содержит фискальные данные. Для печати фискальных данных необходимо использовать эту переменную с нужным индексом списка.
<var name="entries[-5].data" align="left" maxwidth="all"/><br/>
Нумерация строк начинается с 1, для всех тегов <data>. Положительные номера считаются с начала списка, отрицательные – с конца.
Печать информации о товарах в отчетах на казахском языке
Печать информации о товарах на казахском языке возможна только если переводы добавлены в справочник.
Подробнее о добавлении и корректном отображении переводов:
Печать наименований товаров на казахском языке одновременно с русским настраивается в шаблонах programfr_sale.xml, programfr_back.xml:
<select query="select translation, idtype from dictionaries.tr where id=$bcode$ and lang='kk' and idtype IN (0, 1) order by idtype desc limit 1">
<text maxwidth="all" align="right">/ $translation$</text><br/>
</select>
Если необходимо печатать наименования товаров на языке текущего интерфейса, то нужно внести изменения в шаблоны programfr_sale.xml, programfr_back.xml:
<select query="select IF(COUNT(translation)=0, '$name$', translation) translation, idtype from dictionaries.tr where id=$bcode$ and lang='$language$' and idtype IN (0, 1) order by idtype desc limit 1">
<text maxwidth="all" align="right">/ $translation$</text><br/>
</select>
Для корректной печати информации о налогах, единицах измерения и т.д. одновременно на двух языках необходимо выгружать эту информацию в БД сразу на двух языках.
Подробнее о редактировании шаблонов можно прочитать в разделе "Движок отчетов".



