Передача данных на сервер ОФД Казахстана обеспечивается сервисом 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
  • true
  • false
Включить проверку сертификатаПо умолчанию 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 добавлены обязательные поля:

Передача данных на сервер ОФД

Передача фискальных данных в чеке возврата по чеку продажи

Для автоматической передачи фискальных данных по чеку продажи при закрытии чека рекомендуется активировать плагин 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) осуществляется в Сервисном меню через Менеджер оборудования.

Для подключения необходимо последовательно выполнить следующие действия:

  1. Указать принтер чеков или ФР для осуществления печати чеков:

  2. Добавить драйвер "Программный фискализатор (kz)":
  3. Настроить параметры драйвера:
    • Номер ФР – порядковый номер ККМ.
    • ФР – указывается ранее подключенный принтер чеков или ФР.
    • Адрес – адрес клиентского модуля. Указывается значение вида http://<ip>:<port>/NFDService.
    • Таймаут – таймаут ожидания ответа от сервера.
    • Пароль оператора – пароль оператора. Значение по умолчанию – 30.
    • Идентификатор кассы – идентификатор кассы (токен).
    • Масштабирование QR-кода – размер QR-кода зависит от используемого принтера печати чеков. Значение по умолчанию – 5.

Программирование параметров для программного фискализатора (kz)

Для печати чеков использование шаблонов Artix не требуется.

Параметры для программирования задаются в специальных секциях. Секция параметров представляет собой список строк. Одна строка предназначена для установки одного параметра. Имена параметров в данных секциях задаются по правилу:

param<N>, где N - номер параметра (1..n)

Не допускаются «разрывы» нумерации списка параметров, т.е. нельзя использовать имена параметров: param1, param2, param4. В этом случае будут применены только параметры 1 и 2. Параметры с 4-го и все последующие игнорируются. Допускается нумерация параметров param1, param2, param3 и т.д.

Значения параметров формируются по правилам:

Для программирования параметра от 1 до 11 необходимо указать номер параметра и его значение
<N>:<p1>

Нумерация параметра <N>

Возможное значение параметра <p1>

1 – ширина документа

любое целое число
2 – язык локализации документа
  • KAZAKH
  • RUSSIAN
3 – положение заголовка в чеке
  • TOP
  • BOTTOM
4 – печать рекламного текста
  • true
  • false
5 – печать клише
  • true
  • false
6 – печать короткого адреса
  • true
  • false
7 – печать сокращенных X и Z отчетов
  • true
  • false
8 – печать единичного количества
  • true
  • false
9 – количество смен за которые необходимо хранить документылюбое целое число
10 – режим применения налогов
  • POSITION
  • DOCUMENT
11 – изымать всю денежную наличность из кассы при закрытии смены
  • true
  • false
Для программирования каталогов от 12 до 16 необходимо указать номер каталога в списке настроек, обязательный параметр, порядковый номер значения каталога и значение параметра(ов)
<S>.<R>.<N>:<p1>&<p2>

Параметры <p(n)> задаются через символ '&'.

Порядковый номер <S>

Обязательный параметр <R>

Нумерация параметра <N>

Значения параметров <p(n)>

любое значение от 1 до 30

любое значение от 1 до 912 – операторы
  • <p1> – наименование оператора,
  • <p2> – пароль
любое значение от 1 до 1613 – секции
  • <p1> – код секции

любое значение от 1 до 4
(определяет код налога в ФР)

14 – налоги
  • <p1> – тип налогообложения,
  • <p2> – тип налога,
  • <p3> – процентная ставка налога
любое значение от 1 до 1015 – клише
  • <p1> – тип шрифта,
  • <p2> – значение строки
любое значение от 1 до 1016 – рекламный текст
  • <p1> – тип шрифта,
  • <p2> – значение строки

Параметры для программирования задаются в конфигурационном файле /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&Рекламный текст";

Настройка

Использование ставки НДС

Для использования ставки НДС необходимо:

  1. Добавить налоги с необходимыми ставками в БД Dictionaries таблицу Vat
  2. Запрограммировать коды налогов в программном фискализаторе.

    Пример настройки
    [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)
  3. Настроить соотнесение налогов в ФР и кодов налогов в кассе в конфигурационном файле /linuxcash/cash/conf/fr.ini.

    Пример настройки
    [HW.FR.1.TaxMapping]
    ; Соотнесение кодов налогов в ФР и кодов налогов в кассе
    ; <Код налога ФР> = <Код налога в кассе>
    1=401
    2=501
     
    ; 1 - Код налога ФР для НДС 16% 
    ; 2 - Код налога ФР для НДС 0%
  4. В свойствах товара указать один из налогов в БД Dictionaries таблицу Tmc.
  5. Выгрузить справочники налогов и товаров на кассы.

При закрытии чека продажи:

  • будет использована указанная в свойствах товара ставка НДС,
  • на сервис программного ФН для каждого товара будет передано значение поля 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
  • 0 – выключена
  • 1 – включена
Проверка суммы в денежном ящике при возврате по безналу

При настройке 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, которая является ответом от ОФД и содержит фискальные данные. Для печати фискальных данных необходимо использовать эту переменную с нужным индексом списка.

Пример получения URL чека из ответа от сервера
<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>

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

Подробнее о редактировании шаблонов можно прочитать в разделе "Движок отчетов".

  • No labels