Приведу пример настройки программного РРО Checkbox в биллинговой системе ABillS.
Купленный модуль Checkbox.pm нужно скопировать в папку /usr/abills/Abills/modules/Extreceipt/API/ и установить модуль Extreceipt:
cp Extreceipt.pm /usr/abills/Abills/modules/Extreceipt/db/
mysql --default-character-set=utf8 -D abills < /usr/abills/Abills/modules/Extreceipt/Extreceipt.sql
ln -s /usr/abills/Abills/modules/Extreceipt/extreceipt_payments_reg.pm /usr/abills/libexec/billd.plugins/extreceipt_payments_reg.pm
Сначала в Checkbox необходимо зарегистрировать организацию, если их несколько, то необходимо регистрировать в разных аккаунтах с разными email.
Потом необходимо добавить торговые точки с помощью ЕЦП ключа, Вид точки мы указывали «Розрахунковий центр», после добавления форма 20-ОПП отправилась в налоговую для подтверждения, что длилось около 10 минут.
Добавить кассы с помощью ЕЦП ключа, кассы тоже подтверждались в налоговой около 10 минут (отправилась форма 1-ПРРО).
Добавить кассиров, сначала указываем ЕЦП ключ самого кассира (физического лица) и потом подтверждаем ЕЦП ключом директора, после этого в налоговую отправится форма 5-ПРРО. Директор тоже может работать как кассир (так ответили в поддержке Checkbox), то есть директора можно добавить как одного кассира. Если ключ директора был только что сгенерирован, то с его помощью можно будет добавить кассира примерно через 1-2 дня или можно сделать отчет в приват24 чтобы ускорить, иначе будет ошибка: «Невірний підпис — сертифікат відсутній в реєстрі зареєстрованих сертифікатів». Новый сгенерированный ключ директора должен появится в кабинете ДФС cabinet.tax.gov.ua.
Когда кассир станет активным после подтверждения ДФС, то необходимо также загрузить его ключ на сервер Checkbox (нажав справа напротив кассира …), иначе при открытии смены через API будет ошибка: «CheckBox Підпис неактивний, запустіть його, будь ласка».
Если используется несколько торговых точек, то для каждой точки необходимо добавить кассу и на каждую кассу хотя бы по одному кассиру. Один кассир не может одновременно работать на нескольких кассах (так ответили в поддержке Checkbox). Все торговые точки обязательно добавлять, так как в чеке отображается адрес торговой точки.
При желании можно написать в телеграмм поддержки Checkbox, чтобы добавили ФОП перед ФИО.
В биллинге мне пришлось добавить несколько видов оплат в меню Настройка>Другое>Вид оплаты. Если раньше например были виды оплат: Абонплата, Подключение, Подключение (терминал), то пришлось их переименовать добавив название точки и добавить еще несколько, например:
Абонплата (точка 1)
Абонплата (точка 2)
Абонплата (точка 3)
Абонплата терминал (точка 1)
Абонплата терминал (точка 2)
Абонплата терминал (точка 3)
Подключение терминал (точка 1)
Подключение терминал (точка 2)
Подключение терминал (точка 3)
Можно отредактировать шаблон чтобы поле Вид оплаты было по умолчанию пустым и обязательным к заполнению, например чтобы операторы принудительно выбирали вид оплаты и случайно не добавили платеж с видом оплаты который по умолчанию.
В меню Настройка>Чеки>API я указывал:
Название: Checkbox_TOV_ixnfo_com
API plugin: Checkbox
Логин: указал логин кассира
Пароль: указал пароль кассира
URL: https://api.checkbox.ua/api/v1/
Товар: Интернет услуги
И таким образом добавляем API для каждой торговой точки, например я добавил 3 точки + 1 тестовую для тестовых платежей.
В меню Настройка>Чеки>KKT я указывал:
API: выбрал Checkbox_TOV_ixnfo_com
KKT Лицензия: указал ключ лицензии кассы
Чек Header: тел.: 12345, 123 \n Кассир: Иванов И.
Чек Desc: Оплата Интернет, Клиент &UID& \n &FIO& \n &ADDRESS_DISTRICT&, &ADDRESS_STREET&, &ADDRESS_BUILD&, &ADDRESS_FLAT& \n
Вид оплаты: ‘0’,3,11
Администратор: выбрал администраторов которые принимают платежи
Например работает три кассы, есть три вида оплаты, получается 3*3=9 добавленных ККТ + 1 для тестовых платежей. Для тестовых платежей я указал вид оплаты Бонус, так как он не использовался.
ID некоторых моих видов оплат:
0 — Абонплата (точка 1)
3 — Абонплата терминал (точка 1)
11 — Подключение терминал (точка 1)
Соответственно 0 должно добавляться в чекбокс как Наличные, а 3 и 11 как Карта, для этого в конфгурации config.pl я указал:
$conf{CHECKBOX_CARD_PAYMENT}='3, 11';
Для служебной выдачи наличных, главный кассир логинился в Checkbox, нажимал меню «Продаж», авторизовывался кассиром и нажимал «Видати готівку», в конце смены в этом же меню нажимал завершить смену и печатал Z-отчет, в этом же меню можно печатать Х-отчет и открыть смену, но ее у меня открывал биллинг, для этого я указал в /etc/crontab:
0 22 * * * root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * * root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
То есть открывает все смены в 7 утра, и закрывает в 22:00, ну закрывал он тестовые в основном, так как рабочие смены кассиры сами закрывали.
Пример crontab заданий для автоматического открытия и закрытия смен с понедельника по субботу, кроме воскресенья:
0 22 * * 1 root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * 1 root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
0 22 * * 2 root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * 2 root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
0 22 * * 3 root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * 3 root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
0 22 * * 4 root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * 4 root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
0 22 * * 5 root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * 5 root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
0 22 * * 6 root /usr/abills/libexec/billd extreceipt_payments_reg CLOSE_SHIFT=1
0 7 * * 6 root /usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1
Также можно другой командой (но если касс или компаний несколько, то может быть проблема — закрытые смены откроются, а открытые закроются, по этому лучше командами как показывал выше):
0 1 * * * /usr/abills/libexec/billd extreceipt_payments_reg RENEW_SHIFT=1
Для отладки можно запустить вручную, добавив DEBUG в конце команды:
/usr/abills/libexec/billd extreceipt_payments_reg OPEN_SHIFT=1 DEBUG=2
Если биллинг был без интернета например и принимались платежи, то чтобы не отправлять их по одному в меню Обслуживание>Чеки>Чеки, можно не отправленные отправить все сразу в Checkbox командой:
/usr/abills/libexec/billd extreceipt_payments_reg
В базе данных не отправленные чеки можно посмотреть следующим SQL запросом, а также например добавить в Zabbix мониторинг, чтобы узнать когда появится не отправленный чек:
SELECT * FROM extreceipts where status=0
UserParameter=extreceipts_not_sent,mysql --defaults-extra-file=/etc/zabbix/.mysql.cnf -D abills -e "SELECT count(*) FROM extreceipts where status=0;" -s -N
Однажды был баг при добавлении ККТ и чтобы не ждать пока техническая поддержка его исправит, то я добавил ККТ через SQL запросы:
INSERT INTO extreceipts_kkt (kkt_id, api_id, shift_uuid, kkt_group, kkt_key, methods, groups, admins, aid, check_header, check_desc, check_footer) VALUES ('', 5, 0, '', 'ixnfo.com', 4, '', '', 14, 'тел.: 000', 'Послуги КТБ, Клієнт &UID& \\n &FIO& \\n &ADDRESS_DISTRICT&, &ADDRESS_STREET&, &ADDRESS_BUILD&, &ADDRESS_FLAT& \\n', '');
INSERT INTO extreceipts_kkt (kkt_id, api_id, shift_uuid, kkt_group, kkt_key, methods, groups, admins, aid, check_header, check_desc, check_footer) VALUES ('', 6, 0, '', 'ixnfo.com', 4, '', '', 14, 'тел.: 000', 'Послуги КТБ, Клієнт &UID& \\n &FIO& \\n &ADDRESS_DISTRICT&, &ADDRESS_STREET&, &ADDRESS_BUILD&, &ADDRESS_FLAT& \\n', '');
Однажды у Checkbox появлялись задержки, из-за которых при добавлении платежа не отображалось изображение чека, оно появлялось позже, через 1 минуту например, то есть чек прошел, фискализировался, по нему получили статус DONE, а изображение чека не отобразилось. Чтобы диагностировать эту проблему я попросил разработчиков ABillS добавить логи запросов и их длительность, которые можно найти тут /usr/abills/var/log/extreceipt.log.
Когда понадобилось изменить URL к API, а их у меня больше 10, то я выполнит такой запрос:
SELECT * FROM extreceipts_api LIMIT 200;
UPDATE extreceipts_api SET url="https://api.checkbox.ua/api/v1/" WHERE url="https://api.checkbox.in.ua/api/v1/";
Смотрите также другие мои статьи про ABillS