Оновлений опис API наразі не повний, але ми працюємо над тим щоб ви якнайшвидше отримали можливість користуватись даною документацією.
Список готовності документації:
У разі виникнення додаткових питань пропонуємо Вам написати до нас на пошту [email protected] або в telegram бот якщо у вас виникли запитання чи пропозиції
Ми з радістю вам допоможемо
Ознайомитись з інформацією як працює додаток та для чого потрібен можна за посиланням
Для початку роботи потрібно буде виконати певні дії з налаштування.
Нижче описано що саме потрібно зробити для початку роботи в тестовому режимі та у фіскальному.
Тестовий режим в додатку представлений окремим тестовим ПРРО, яке автоматично створюється після реєстрації в кабінеті Вчасно.Каса, та не відправляє даних до ДПС.
Готово
Готово
Місце внесення змін | Опис змін | Версія додатку |
---|---|---|
Службові завдання | Метод /dm/api/v1/sys_info повертає в значенні тегу "database" яка субд використовується додатком | 5.183.0 |
API роботи з POS пристроями | Вилучено перевірку "sign" | 5.182.0 |
Фіскальні завдання ПРРО | Додано тег "qr1" у відповідь на запити фіскалізації | 5.182.0 |
Device Manager(далі ДМ) може повноцінно управлятись за допомогою REST API, відповідно через методи можна виконати абсолютно будь які налаштування чи будь яку команду зв'язану з фіскалізацією чи роботою з пристроями.
Фіскальні завдання
"task": 0
);"task": 1
);"task": 2
);"task": 3
);"task": 4
);"task": 14
);"task": 11
);Нефіскальні завдання
"task": 10
);"task": 5
);"task": 12
);"task": 13
);"task": 18
);"task": 20
);"task": 21
);"task": 22
);Завдання роботи з терміналами та транзакціями:
"task": 1
);"task": 2
);"task": 3
);"task": 10
);"task": 11
);"task": 14
);"task": 15
);"task": 16
).Службові завдання
/dm/bankping
);/dm/getmerchantlist
);/dm/getmasklist
);/dm/bankecho
).Дане API буде працювати для сумісності з старими версіями інтеграцїй. Надалі для роботи буде використовуватись оновлений варіант API v3.
Налаштування/отримання інформації по ПРРО або додатку
/dm/vchasno-kasa/api/v1/dashboard
);/dm/vchasno-kasa/api/v1/prro
);/dm/vchasno-kasa/api/v1/prro
);/dm/vchasno-kasa/api/v1/prro
);/dm/vchasno-kasa/api/v1/prro
);/dm/vchasno-kasa/api/v1/prro/groups
);/dm/vchasno-kasa/api/v1/prro/pack-mode
);/dm/vchasno-kasa/api/v1/prro/pack-mode
);/dm/vchasno-kasa/api/v1/prro/sign
);/dm/vchasno-kasa/api/v1/prro/sign
);/dm/vchasno-kasa/api/v1/Xreport
);/dm/vchasno-kasa/api/v1/settings
);/dm/vchasno-kasa/api/v1/settings
);/login
);/logout
);/dm/vchasno-kasa/api/v1/settings/printforms
)Робота з реєстром чеків
tag
.Інженерні функції ПРРО
/dm/vchasno-kasa/api/v1/setshiftsafe
);/dm/vchasno-kasa/api/v1/hash-chain
);/dm/vchasno-kasa/api/v1/prro/token_vchasno
);/dm/vchasno-kasa/api/v1/prro/groups
);Додаток має вебінтерфейси для налаштувань(створення ПРРО, пристроїв, перегляд чеків, тощо):
Підключення та налаштування додатку та ПРРО: http://{{dm_ip}}:3939/dm/vchasno-kasa/
Підключення та налаштування POS пристроїв: http://{{dm_ip}}:3939/dm/
{{dm_ip}}
- IP адрес пристрою де встановлено додаток, тобто хост. Якщо запити відправляються на локальний додаток хост буде localhost
Робота з ПРРО та POS пристроями може здійснюватись як окремо(окремий API запит на кожен пристрій) так і пакетно(один API запит для взаємодії з кількома пристроями одразу.)
ДМ при роботі з ПРРО може виконувати фіскальні та нефіскальні завдання.
Основна різниця:
В процесі роботи можна використовувати нефіскальні завдання для перевірки стасусу ПРРО, сум продажу і податків, залишку готівки тощо.
Всі команди для роботи з ПРРО, принтерами чи терміналами:
POST http://{{dm_ip}}:3939/dm/execute
{{dm_ip}}
- IP адрес пристрою де встановлено додаток, тобто хост. Якщо запити відправляються на додаток який встановлено на тому ж пристрої що і система яка відправляє запит значення буде localhost
або 127.0.0.1
Header: Content-Type: application/json
Body: JSON
Response: HTTP 200
Для детальнішої інформації рекомендуємо ознайомитись з рекомендаціями по інтеграції.
Список дозволених символів у чеках.
Всі символи в назвах товарів що не перелічені нижче, при обробці запиту будуть замінені на "?
" для коректної відправки чеку в ДПС.
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
ІіЇїҐґЄє
!.,"№;:?*()<>|/@#$%^-_+=~''&{}[]®©«»°±‘’“”–•—™„‰‹› 0123456789
Так як ДМ приймає дані в форматі JSON екранувати потрібно символи "
та \
.
Приклад:
Маємо назву товару: Продукт “№1“ 1\250 грамів
При передачі даної назви як назви товару тег "name"
що відповідає за назву товару буде мати наступний вигляд:
"name": "Продукт \“№1\“ 1\\250 грамів"
При потребі розділити назву чи коментар на кілька рядків потрібно використовувати \n
+ екранування.
Приклад: Хочемо бачити наступний коментар внизу чеку:
Дякуємо
за покупку.
Гарного дня!
При передачі даного коментаря тег "comment_down"
що відповідає за коментар внизу чеку буде мати наступний вигляд:
"comment_down": "Дякуємо \\nза покупку. \\nГарного дня!"
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення в форматі uuid v5. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. Якщо значення tag передано в запиті, перед фіскалізацією відбувається пошук вже виконаного завдання. Якщо завдання з таким tag не було знайдено буде виконана фіскалізація. | + |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для відкриття зміни по ПРРО завжди 0 | + |
curl --location -g --request POST 'http://{{dm_ip}}:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data-raw '{
"ver": 6,
"source": "API",
"device": "{{device}}",
"tag": "",
"type": 1,
"fiscal": {
"task": 0
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання: 1 - чек було фіскалізовано; 2 - чек було знайдено в БД і повернуто відповідь (якщо передано в запиті значення tag); 3 - помилка при фіскалізації або пошуку чеку в БД. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для відкриття зміни завжди 0 |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 2 - Помилка + колізія. Виправлення колізії відбувається автоматично при відправці будь-якого наступного завдання, але для збереження транзакційності рекомендується виконати повтор останнього завдання з тим же tag. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
aq_errortxt | string | Текст з описом помилки при проведенні офлайнових чеків. Повертаєтсья лише у випадку знаходження ПРРО в режимі офлайн та помилки при проведенні офлайнових чеків. |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
isoffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
dt | string | Дата і час на чеку що був відправлений в ДПС. Формат: DD-MM-YYYY HH:MM:SS. |
fisid | string | Фіскальний номер ПРРО. |
docno | string | Номер документа в зміні. Для відкриття зміни завжди порожнє значення. |
doccode | string | Фіскальний номер чеку |
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. 0 - запит на оплату на термінал не було надіслано, 1 - було проведено оплату по терміналу. Для завдань по ендпоінту /dm/execute завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер зміни. Він єдиний для відкриття зміни, всіх документів, що входять у зміну та закриття зміни. |
shift_prev_link | number | Номер останнього Z-звіту. |
vacant_off_nums | number | Кількість доступних офлайн номерів. Якщо ПРРО знаходиться в режимі онлайн значення буде -1 |
dataid | number | Номер пакету. Загальна нумерація для всіх пакетів що відправлені в ДПС |
devinfo | string | Наразі завжди порожнє |
billing | object | Об'єкт з інформацією по оплаті тарифу за ПРРО |
printheader | object | Об'єкт з інформацією для друку |
Структура об'єкта info.billing
Тег | Тип json даних | Зміст |
---|---|---|
paid_date_to | string | Дата закінчення оплати по ПРРО в форматі YYYYMMDDHHMMSS. Час закінчення тарифу завжди 03:00. |
enough_to_renew_subscription | number | Параметр що визначає чи є кошти на рахунку для автоматичного продовження тарифу. 1 - В наявності, підписка на ПРРО продовжиться автоматично після закінчення терміну дії поточної. 2 - Відсутні, ПРРО при закінченні тарифу не зможе продовжувати видавати чеки. 0 - Не вдалось визначити. Не вистачає коштів для активації усіх ПРРО в день деактивації по компанії. ПРРО може не активуватись автоматично якщо кошти будуть списані з балансу іншим ПРРО |
Структура об'єкта info.printheader
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. ососби |
shopname | number | Назва торгової точки |
shopad | string | Повна адреса торгової точки |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН |
dt | string | Дата та час відкриття зміни в форматі YYYY-MM-DD HH:MM:SS |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
fisid | string | Фіскальний номер ПРРО |
manuf | string | Завжди "Вчасно.Каса" |
cashier | string | Інформація про касира. Те ж що передано в запиті |
task | number | Тип завдання. Те ж значення що в запиті. |
Структура масива об'єктів warnings
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
{
"info": {
"isoffline": false,
"dt": "21-06-2023 11:48:33",
"fisid": "7777",
"docno": "",
"doccode": "TEST_x81U2urvb-_a3g",
"isprint": 0,
"ispay": 0,
"cashier": "",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 0,
"safe_start_shift": 0,
"task": 0,
"dtype": 0,
"shift_link": 74,
"shift_prev_link": 73,
"vacant_off_nums": -1,
"dataid": 1983703,
"devinfo": "",
"billing": {
"paid_date_to": "20230101030000000",
"enough_to_renew_subscription": 0
},
"printheader": {
"name": "ФОП Тестовий платник",
"shopname": "Аптека",
"shopad": "УКРАЇНА, М.КИЇВ СОЛОМ'ЯНСЬКИЙ Р-Н, вул.Донецька,8/10",
"vat_code": "",
"fis_code": "5555555555",
"dt": "21-06-2023 11:48:33",
"isOffline": false,
"fisid": "7777",
"manuf": "Вчасно-каса",
"cashier": "",
"task": 0
}
},
"ver": 6,
"source": "API",
"device": "S_TEST",
"tag": "2758A5D4-4161-4E45-AED6-6DDBF85F1E38",
"task_status": 1,
"type": 1,
"task": 0,
"dt": "20230621114833",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Даний чек є службовим та не має друкованої форми.
JSON Body запиту для чеку на продаж/повернення буде аналогічним, за виключенням тегу fiscal.task
:
Для чеку на продаж: "task": 1
;
Для чеку повернення: "task": 2
.
Є можливість фіскалізувати "Нульовий чек" продажу/повернення. Для цього масив товарів (rows
) і оплат (pays
) потрібно передати порожнім або не передавати в запиті. Сума по чеку(fiscal.receipt.sum
) також має бути рівна нулю. Після відправки такого запиту буде фіскалізовано "нульовий чек", чек без товарів та типів оплат.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. |
+ |
userinfo | object | Об'єкт із даними про клієнта для відправки чеку | - |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта userinfo
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
string | Пошта клієнта на яку потрібно надіслати чек. | - | |
phone | string | Номер телефону у форматі "+380*********" на який потрібно надіслати чек. Відправка за замовчуванням на viber, якщо у клієнта не встановлено viber на телефоні, чек буде доставлено по смс. | - |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для чеку на продаж = 1, для чеку на повернення = 2. | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
receipt | object | Вміст чека. Сума чеку, товари, коментарі, типи та суми оплати | + |
Структура об'єкта fiscal.receipt
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
sum | number | Остаточна сума чека (2 знаки після коми) з урахуванням знижок/націнок на товари(знижка/націнка на весь чек не включається в цю суму). | + |
disc | number | Знижка на весь чек. Якщо передано зі знаком "-" вважаєтсья як націнка на товар(2 знаки після коми). | - |
disc_type | number | Тип знижки на весь чек(якщо не вказано за замовчуванням = 0). 0 - сумова; 1 - відсоткова. |
- |
round | number | Сума округлення (2 знаки після коми), яка входить до остаточної суми чека. На цю суму повинна відрізнятись остаточна сума чека від сум з усіх видів оплат для чеку. | - |
comment_up | string | Коментар, що друкується перед списком товарів. | - |
comment_down | string | Коментар, який друкується у нижній частині чека. | - |
rows | array | Рядки чека. Фактично список товарів/послуг. | + |
pays | array | Оплати чека (за видами оплат). | + |
Структура об'єктів масиву fiscal.receipt.rows
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
code | string | Код товару в POS системі. Має бути унікальним для кожного товару в межах однієї зміни. Максимум 100 символів. | - |
code1 | string | Додатковий код товару (штрихкод). | - |
code2 | string | Додатковий код товару (Код УКТЗЕД) Числовий код та опціональний символ #, допустима довжина – до 11 символів включаючи #. | - |
code3 | string | Додатковий код товару (Код ДКПП). | - |
code_a | string | Код акцизної марки товару | - |
code_aa | array | Масив кодів акцизних марок товару, якщо їх кілька на одну позицію(позиція в чеку одна а кількість більше 1). | - |
name | string | Назва товару що буде відображена в чеку. Максимально 200 символів! | + |
cnt | number | Кількість товару (не більше 3-х знаків після коми). | + |
price | number | Ціна (2 знаки після коми). Може бути порожнім, в такому разі розраховується автоматично шляхом ділення підсумку рядка на кількість та математичним округленням. Є обов'язковим якщо не передано cost. | + |
disc | number | Знижка на товар/и. Якщо передано зі знаком "-" вважаєтсья як націнка на товар(2 знаки після коми). | - |
disc_type | number | Тип знижки на товар/и(якщо не вказано за замовчуванням = 0). 0 - сумова; 1 - відсоткова. |
- |
cost | number | Підсумок по товару/ам до знижки (2 знаки після коми). Фактично це ціна помножена на кількість і вже заокруглена до 2-х знаків після коми. Може бути порожнім або 0, тоді розраховується автоматично шляхом множення кількості на ціну та математичним округленням. Є обов'язковим якщо не передано price. | + |
taxgrp | number | Числовий код податкової групи. За замовчуванням: 1 ПДВ 20% 2 Без ПДВ 3 ПДВ 20% + акциз 5% 4 ПДВ 7% 5 ПДВ 0% 6 Без ПДВ + акциз 5% 7 Не є об'єктом ПДВ 8 ПДВ 20% + ПФ 7.5% 9 ПДВ 14% |
+ |
comment | string | Коментар на товар/и. | - |
Структура об'єктів масиву receipt.pays
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
type | number | Числовий код типу оплати. За замовчуванням: 0 Готівка 1 Безготівка 2 Картка 3 Передплата 4 Післяоплата 5 Кредит 6 Сертифікат 8 Чек |
+ |
sum | number | Сума оплати (2 знаки після коми). | + |
comment | string | Коментар до типу оплати. | - |
change | number | Решта (для оплати готівкою). Для коректного внесення оплати готівкою з рештою: У полі "sum" потрібно вносити суму оплати по чеку У полі "change" – решту Загальна сума, отримана від покупця, розраховується ДМ-ом автоматично як "sum"+"change" |
- |
paysys | string | Назва платіжної системи (дані отримані від терміналу після оплати банківською карткою). | - |
rrn | string | Унікальний ідентифікатор транзакції (дані отримані від терміналу після оплати банківською карткою). | - |
cardmask | string | Номер платіжного засобу картки. Передаються отримані від терміналу після оплати банківською карткою. | - |
term_id | string | Код банківського термінала (дані отримані від терміналу після оплати банківською карткою). | - |
bank_id | string | Ідентифікатор або назва еквайра/банку (дані торимані від терміналу після оплати банківською карткою). | - |
auth_code | string | Код авторизації (дані отримані від терміналу після оплати банківською карткою). | - |
Чек на продаж
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "Test1",
"tag": "",
"need_pf_img": "1",
"need_pf_pdf": "1",
"need_pf_txt": "1",
"need_pf_doccmd": "1",
"type": "1",
"userinfo": {
"email": "",
"phone": ""
},
"fiscal": {
"task": 1,
"cashier": "API",
"receipt": {
"sum": 4240.16,
"disc": 0.00,
"disc_type": 0,
"round": 0.04,
"comment_up": "Приклад коментаря зверху чеку",
"comment_down": "Приклад коментаря \nзнизу чеку",
"rows": [
{
"code": "100",
"code1": "79545322",
"code2": "45632",
"name": "Продукт \"1\"",
"cnt": 2,
"price": 20.08,
"disc": 0.00,
"disc_type": 0,
"cost": 0,
"taxgrp": 1,
"comment": "Коментар до продукту 1"
},
{
"code": "200",
"code1": "73463253",
"code2": "45667",
"code_a": "1234001",
"code_aa": [
"1234002",
"1234003"
],
"name": "Продукт \"2\"",
"cnt": 3,
"price": 1410.05,
"disc": 30.15,
"disc_type": 0,
"cost": 0,
"taxgrp": 2,
"comment": "Коментар до продукту 2"
}
],
"pays": [
{
"type": 0,
"sum": 4000.00,
"change": 300.00,
"comment": "коментар до оплати готівкою"
},
{
"type": 2,
"sum": 240.20,
"paysys": "VISA",
"rrn": "123",
"cardmask": "1223******1111",
"term_id": "123456888",
"bank_id": "BANK123",
"auth_code": "AA12345678",
"comment": "коментар до оплати картою"
}
]
}
}
}'
Чек на повернення
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "Test1",
"tag": "",
"need_pf_img": "1",
"need_pf_pdf": "1",
"need_pf_txt": "1",
"need_pf_doccmd": "1",
"type": "1",
"userinfo": {
"email": "",
"phone": ""
},
"fiscal": {
"task": 2,
"cashier": "API",
"receipt": {
"sum": 4240.16,
"disc": 0.00,
"disc_type": 0,
"round": 0.04,
"comment_up": "Приклад коментаря зверху чеку",
"comment_down": "Приклад коментаря \nзнизу чеку",
"rows": [
{
"code": "100",
"code1": "79545322",
"code2": "45632",
"name": "Продукт \"1\"",
"cnt": 2,
"price": 20.08,
"disc": 0.00,
"disc_type": 0,
"cost": 0,
"taxgrp": 1,
"comment": "Коментар до продукту 1"
},
{
"code": "200",
"code1": "73463253",
"code2": "45667",
"code_a": "1234001",
"code_aa": [
"1234002",
"1234003"
],
"name": "Продукт \"2\"",
"cnt": 3,
"price": 1410.05,
"disc": 30.15,
"disc_type": 0,
"cost": 0,
"taxgrp": 2,
"comment": "Коментар до продукту 2"
}
],
"pays": [
{
"type": 0,
"sum": 4000.00,
"change": 300.00,
"comment": "коментар до оплати готівкою"
},
{
"type": 2,
"sum": 240.20,
"paysys": "VISA",
"rrn": "123",
"cardmask": "1223******1111",
"term_id": "123456888",
"bank_id": "BANK123",
"auth_code": "AA12345678",
"comment": "коментар до оплати картою"
}
]
}
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання: 1 - чек було фіскалізовано; 2 - чек було знайдено в БД і повернуто відповідь (якщо передано в запиті значення tag); 3 - помилка при фіскалізації або пошуку чеку в БД. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для відкриття зміни завжди 0 |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 2 - Помилка + колізія. Виправлення колізії відбувається автоматично при відправці будь-якого наступного завдання, але для збереження транзакційності рекомендується виконати повтор останнього завдання з тим же tag. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
aq_errortxt | string | Текст з описом помилки при проведенні офлайнових чеків. Повертаєтсья лише у випадку знаходження ПРРО в режимі офлайн та помилки при проведенні офлайнових чеків. |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
pf_text | string | Друкована форма чеку у вигляді тексту в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
pf_image | string | Друкована форма чеку у вигляді картинки в форматі base64 з метаданими data:image/png;base64 |
pf_pdf | string | Друкована форма чеку у вигляді PDF в форматі base64 з метаданими data:application/pdf;base64 |
pf_doccmd | string | Друкована форма чеку в форматі JSON, дані для прямого друку на принтер підключений в ДМ. Формат даних - base64 без метаданих. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
qr | string | Додаткова інформація з посиланням на чек. |
qr1 | string | Інформація що міститься в qr-коді на чеку. |
cancelid | string | Фіскальний номер чеку |
printinfo | object | Об'єкт із даними для друку. Дані використовуються при формуванні друкованої форми чеку додатком. |
dt | string | Дата і час на чеку що був відправлений в ДПС. Формат: DD-MM-YYYY HH:MM:SS. |
fisid | string | Фіскальний номер ПРРО. |
docno | string | Номер документа в зміні. Для відкриття зміни завжди порожнє значення. |
doccode | string | Фіскальний номер чеку |
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. 0 - запит на оплату на термінал не було надіслано, 1 - було проведено оплату по терміналу. Для завдань по ендпоінту /dm/execute завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер зміни(або номер наступного Z-звіту). Він єдиний для відкриття зміни, всіх документів, що входять у зміну та закриття зміни. |
shift_prev_link | number | Номер останнього Z-звіту. |
vacant_off_nums | number | Кількість доступних офлайн номерів. Якщо ПРРО знаходиться в режимі онлайн значення буде -1 |
dataid | number | Номер пакету. Загальна нумерація для всіх пакетів(фіскальних та службових чеків) що відправлені в ДПС |
devinfo | string | Наразі завжди порожнє |
printheader | object | Об'єкт з інформацією для друку. Для продажу/повернення завжди null |
billing | object | Об'єкт з інформацією по оплаті тарифу за ПРРО |
Структура об'єкта info.printinfo
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. особи. |
shopname | number | Назва торгової точки. |
shopad | string | Повна адреса торгової точки. |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН. |
goods | array | Масив об'єктів товарів в чеку. |
sum_0 | number | Сума чеку без врахування знижок. |
sum_receipt | number | Сума чеку з урахуванням знижок, але без врахування заокруглення. |
sum_disc | number | Загальна сума всіх знижок по чеку (на позиції і на весь чек). |
disc_total | number | Значення знижки на весь чеку що передано в запиті. |
disc_type_total | number | Тип знижки на весь чек який було передано в запиті (якщо не вказано за замовчуванням = 0). 0 - сумова; 1 - відсоткова. |
disc_sum_total | number | Сума знижки на весь чек. Якщо передано сумову знижку - таке ж значення як в disc_total, якщо відсоткову - обчисленне згідно переданого % сумове значення знижки. |
sum_topay | number | Сума "до сплати". Сума з урахуванням всіх знижок і заокруглення. |
round | number | Сума заокруглення. Входить до суми чеку. |
pays | array | Масив оплат по чеку (за видами оплат). |
taxes | array | Масив податкових груп по чеку (згідно кодів податкових груп). |
fisn | string | Фіскальний номер чеку. |
dt | string | Дата та час відкриття зміни в форматі YYYY-MM-DD HH:MM:SS. |
qr | string | Додаткова інформація з посиланням на чек. |
qr1 | string | Інформація що міститься в qr-коді на чеку. |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
mac | string | Контрольне число. |
fisid | string | Фіскальний номер ПРРО. |
manuf | string | Завжди "Вчасно-Каса". |
cashier | string | Інформація про касира. Те ж що передано в запиті. |
task | number | Тип завдання. Те ж значення що в запиті. |
fisdoctype | string | Тип чеку. "Фіскальний чек/Видатковий чек" або "Тестовий чек/Видатковий тетовий чек". |
comment_down | string | Коментар, який друкується у нижній частині чека. |
comment_up | string | Коментар, що друкується перед списком товарів. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
docno | string | Локальний номер документа в зміні. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
crc32 | number | Службова інформація. Не використовується. |
disc_total | number | Значення знижки на весь чек що було передано в запиті. Залежно від типу знижки може означати як суму та і значення у відсотках. Може бути зі знаком "-" тоді вважається як націнка на чек. |
disc_type_total | number | Тип знижки: 0 - сумова; 1 - відсоткова. Якщо не передано в запиті - буде повернуто 0. |
disc_sum_total | number | Загальна сума знижки(в грн) на весь чек. Якщо в запиті передано знижку у % в значенні даного тегу буде сумове значення яке ДМ порахує автоматично. Може бути зі знаком "-" тоді вважається як націнка на чек. |
Структура масива об'єктів info.printinfo.goods
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва товару що буде відображена в чеку. Аналогічне значення що передано в запиті для даного товару. |
code | string | Код товару в POS системі. Аналогічне значення що передано в запиті для даного товару. |
code1 | string | Додатковий код товару (штрихкод). Аналогічне значення що передано в запиті для даного товару. |
code2 | string | Додатковий код товару (Код УКТЗЕД). Аналогічне значення що передано в запиті для даного товару. |
code3 | string | Додатковий код товару (Код ДКПП). Аналогічне значення що передано в запиті для даного товару. |
code_a | string | Код акцизної марки товару. Аналогічне значення що передано в запиті для даного товару. |
code_aa | array | Масив кодів акцизних марок товару, якщо їх кілька на одну позицію(позиція в чеку одна, а кількість більше 1). Аналогічне значення що передано в запиті для даного товару. |
cnt | number | Кількість товару (не більше 3-х знаків після коми). Аналогічне значення що передано в запиті для даного товару. |
price | number | Ціна (2 знаки після коми). Аналогічне значення що передано в запиті для даного товару. |
cost | number | Підсумок по товару/ам до знижки (2 знаки після коми). Аналогічне значення що передано в запиті для даного товару. |
disc | number | Загальна сума знижки на товар/и. Якщо передано в запиті зі знаком "-" є націнкою на товар. Не зважаючи на те який тип знижки передано в запиту і значенні даного тегу завжди буде порахована сума знижки. |
taxgrp | number | Числовий код податкової групи. Аналогічне значення що передано в запиті для даного товару. |
taxlit | string | Буквенний код податкової групи. Згідно кодів податкових груп. |
comment | string | Коментар на товар/и. Аналогічне значення що передано в запиті для даного товару. |
Структура масива об'єктів info.printinfo.pays
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Числовий код типу оплати. Аналогічне значення що передано в запиті для даного типу оплати. |
typen | string | Назва типу оплати(текстом). Згідно типів оплат. |
sum | number | Сума оплати (2 знаки після коми). Аналогічне значення що передано в запиті для даного типу оплати. |
currency | string | Валюта операції. Наразі завжди "грн". |
info | string | Додаткова інформація до оплати. У випадку оплати готівкою з рештою або при оплаті картою з даними ЕПЗ та по оплаті. |
comment | string | Коментар до типу оплати. Аналогічне значення що передано в запиті для даного типу оплати. |
comment_up | string | Коментар що друкується перед сумою. Для чеку на продаж/повернення завжди повертається порожнє значення. |
comment_down | string | Коментар що друкується після суми. Для чеку на продаж/повернення завжди повертається порожнє значення. |
change | number | Решта (у випадку оплати готівкою). Аналогічне значення що передано в запиті для даного типу оплати. |
paysys | string | Назва платіжної системи. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
rrn | string | Унікальний ідентифікатор транзакції. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
cardmask | string | Номер платіжного засобу картки. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
term_id | string | Код банківського термінала. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
bank_id | string | Ідентифікатор або назва еквайра/банку. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
auth_code | string | Код авторизації. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
Структура масива об'єктів info.printinfo.taxes
Тег | Тип json даних | Зміст |
---|---|---|
gr_code | number | Код податкової групи. Згідно кодів податкових груп для товарів в чеку |
base_sum | number | База оподаткування. Включає в себе податок та додатковий збір(акциз, військовий збір і тд.) |
tax_name | string | Коротка назва податку. |
tax_fname | string | Повна назва податку. |
tax_lit | string | Буква податку. Якщо податок має додатковий збір буде дві букви. |
tax_percent | number | Ставка податку(у %). |
tax_sum | number | Сума податку(2 знаки після коми). |
ex_name | string | Назва додаткового збору(акциз, військовий збір і тд.) до основного податку. |
ex_percent | number | Ставка додаткового збору до податку(у %). |
ex_sum | number | Сума додаткового збору до податку(2 знаки після коми). |
Структура об'єкта info.billing
Тег | Тип json даних | Зміст |
---|---|---|
paid_date_to | string | Дата закінчення оплати по ПРРО в форматі YYYYMMDDHHMMSS. Час закінчення тарифу завжди 03:00. |
enough_to_renew_subscription | number | Параметр що визначає чи є кошти на рахунку для автоматичного продовження тарифу. 1 - В наявності, підписка на ПРРО продовжиться автоматично після закінчення терміну дії поточної. 2 - Відсутні, ПРРО при закінченні тарифу не зможе продовжувати видавати чеки. 0 - Не вдалось визначити. Не вистачає коштів для активації усіх ПРРО в день деактивації по компанії. ПРРО може не активуватись автоматично якщо кошти будуть списані з балансу іншим ПРРО |
Структура масива об'єктів warnings
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
Відповідь по чеку на продаж.
{
"info": {
"qr": "https://kasa.vchasno.ua/c/TEST_r3dtUosbap3lwA?MAC:aa2cf5b7cb01bbb38236925602dd936dc24eb50d4aba62b3fd210a56202a7cf1;DT:16-07-2023T21:12:47;FR:TEST_r3dtUosbap3lwA;SUM:4240,16;FN:3",
"qr1": "aa2cf5b7cb01bbb38236925602dd936dc24eb50d4aba62b3fd210a56202a7cf1|16.07.2023 21:12:47|TEST_r3dtUosbap3lwA|4240,16|3",
"cancelid": "TEST_r3dtUosbap3lwA",
"printinfo": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"goods": [
{
"name": "Продукт \"1\"",
"code": "100",
"code1": "79545322",
"code2": "45632",
"code3": "",
"code_a": "",
"code_aa": [],
"cnt": 2,
"price": 20.08,
"cost": 40.16,
"disc": 0,
"taxgrp": 1,
"taxlit": "А",
"comment": "Коментар до продукту 1"
},
{
"name": "Продукт \"2\"",
"code": "200",
"code1": "73463253",
"code2": "45667",
"code3": "",
"code_a": "1234001",
"code_aa": [
"1234002",
"1234003"
],
"cnt": 3,
"price": 1410.05,
"cost": 4230.15,
"disc": 30.15,
"taxgrp": 2,
"taxlit": "Б",
"comment": "Коментар до продукту 2"
}
],
"sum_0": 4270.31,
"sum_receipt": 4240.16,
"sum_disc": 30.15,
"sum_topay": 4240.2,
"round": 0.04,
"pays": [
{
"type": 0,
"typen": "Готівка",
"sum": 4000,
"currency": "грн",
"info": "Отримано 4300.00 решта 300.00",
"comment": "коментар до оплати готівкою",
"comment_up": "",
"comment_down": "",
"change": 300
},
{
"type": 2,
"typen": "Картка",
"sum": 240.2,
"currency": "грн",
"info": "Платіжна система VISA \\n картка 1223******1111 \\n RRN 123",
"comment": "коментар до оплати картою",
"comment_up": "",
"comment_down": "",
"paysys": "VISA",
"rrn": "123",
"cardmask": "1223******1111",
"term_id": "123456888",
"bank_id": "BANK123",
"auth_code": "AA12345678"
}
],
"taxes": [
{
"gr_code": 1,
"base_sum": 40.16,
"tax_name": "ПДВ_А",
"tax_fname": "ПДВ 20%",
"tax_lit": "А",
"tax_percent": 20,
"tax_sum": 6.69,
"ex_name": "",
"ex_percent": 0,
"ex_sum": 0
},
{
"gr_code": 2,
"base_sum": 4200,
"tax_name": "",
"tax_fname": "Без ПДВ",
"tax_lit": "Б",
"tax_percent": 0,
"tax_sum": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum": 0
}
],
"fisn": "TEST_r3dtUosbap3lwA",
"dt": "16-07-2023 21:12:47",
"qr": "https://kasa.vchasno.ua/c/TEST_r3dtUosbap3lwA?MAC:aa2cf5b7cb01bbb38236925602dd936dc24eb50d4aba62b3fd210a56202a7cf1;DT:16-07-2023T21:12:47;FR:TEST_r3dtUosbap3lwA;SUM:4240,16;FN:3",
"qr1": "aa2cf5b7cb01bbb38236925602dd936dc24eb50d4aba62b3fd210a56202a7cf1|16.07.2023 21:12:47|TEST_r3dtUosbap3lwA|4240,16|3",
"isOffline": false,
"mac": "aa2cf5b7cb01bbb38236925602dd936dc24eb50d4aba62b3fd210a56202a7cf1",
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "API",
"task": 1,
"fisdoctype": "Тестовий чек",
"comment_down": "Приклад коментаря \\nзнизу чеку",
"comment_up": "Приклад коментаря зверху чеку",
"safe": 0,
"safe_start_shift": 0,
"docno": "2",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"crc32": 1921,
"disc_total": 0,
"disc_type_total": 0,
"disc_sum_total": 0
},
"dt": "20230716211247",
"fisid": "3",
"docno": "2",
"doccode": "TEST_r3dtUosbap3lwA",
"isprint": 0,
"ispay": 0,
"cashier": "API",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 0,
"safe_start_shift": 0,
"task": 1,
"dtype": 0,
"shift_link": 501,
"shift_prev_link": 500,
"vacant_off_nums": -1,
"dataid": 4099,
"devinfo": "",
"printheader": null,
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
}
},
"ver": 6,
"source": "DM_API",
"device": "postgres1",
"tag": "617564CA-1D47-4C45-BFAA-387160AD1385",
"task_status": 1,
"type": 1,
"task": 1,
"dt": "20230716211247",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
JSON Body запиту для чеку на внесення/винесення коштів буде аналогічним, за виключенням тегу fiscal.task
:
Для внесення: "task": 3
;
Для винесення: "task": 4
.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. | + |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для виконання службового внесення = 3, для винесення = 4 | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
cash | object | Об'єкт із інформацією про суми та типи оплати | + |
Структура об'єкта fiscal.cash
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
type | number | Код типу оплати. За замовчуванням: 0 Готівка 1 Безготівка 2 Картка 3 Передплата 4 Післяоплата 5 Кредит 6 Сертифікат 8 Чек |
+ |
sum | number | Сума оплати (2 знаки після коми). | + |
comment_up | string | Коментар, що друкується перед сумою(sum) | - |
comment_down | string | Коментар, що друкується після суми(sum) | - |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"need_pf_txt": "2",
"need_pf_img": "2",
"need_pf_pdf": "2",
"need_pf_doccmd": "2",
"ver": 6,
"source": "DM_API",
"device": "Test1",
"tag": "",
"type": 1,
"fiscal": {
"task": 3,
"cashier": "Постман",
"cash": {
"type": 0,
"comment_up": "Верхній коментар \\nТестове внесення готівка",
"sum": 232.52,
"comment_down": "Нижній коментар"
}
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання: 1 - чек було фіскалізовано; 2 - чек було знайдено в БД і повернуто відповідь (якщо передано в запиті значення tag); 3 - помилка при фіскалізації або пошуку чеку в БД. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для відкриття зміни завжди 0 |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 2 - Помилка + колізія. Виправлення колізії відбувається автоматично при відправці будь-якого наступного завдання, але для збереження транзакційності рекомендується виконати повтор останнього завдання з тим же tag. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
aq_errortxt | string | Текст з описом помилки при проведенні офлайнових чеків. Повертаєтсья лише у випадку знаходження ПРРО в режимі офлайн та помилки при проведенні офлайнових чеків. |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
pf_text | string | Друкована форма чеку у вигляді тексту в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
pf_image | string | Друкована форма чеку у вигляді картинки в форматі base64 з метаданими data:image/png;base64 |
pf_pdf | string | Друкована форма чеку у вигляді PDF в форматі base64 з метаданими data:application/pdf;base64 |
pf_doccmd | string | Друкована форма чеку в форматі JSON, дані для прямого друку на принтер підключений в ДМ. Формат даних - base64 без метаданих. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
qr | string | Додаткова інформація з посиланням на чек. |
qr1 | string | Інформація що міститься в qr-коді на чеку. |
cancelid | string | Фіскальний номер чеку |
printinfo | object | Об'єкт із даними для друку. Дані використовуються при формуванні друкованої форми чеку додатком. |
dt | string | Дата і час на чеку що був відправлений в ДПС. Формат: DD-MM-YYYY HH:MM:SS. |
fisid | string | Фіскальний номер ПРРО. |
docno | string | Номер документа в зміні. |
doccode | string | Фіскальний номер чеку |
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. 0 - запит на оплату на термінал не було надіслано, 1 - було проведено оплату по терміналу. Для завдань по ендпоінту /dm/execute завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер зміни(або номер наступного Z-звіту). Він єдиний для відкриття зміни, всіх документів, що входять у зміну та закриття зміни. |
shift_prev_link | number | Номер останнього Z-звіту. |
vacant_off_nums | number | Кількість доступних офлайн номерів. Якщо ПРРО знаходиться в режимі онлайн значення буде -1 |
dataid | number | Номер пакету. Загальна нумерація для всіх пакетів(фіскальних та службових чеків) що відправлені в ДПС |
devinfo | string | Наразі завжди порожнє |
printheader | object | Об'єкт з інформацією для друку. Для продажу/повернення завжди null |
billing | object | Об'єкт з інформацією по оплаті тарифу за ПРРО |
Структура об'єкта info.printinfo
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. особи. |
shopname | number | Назва торгової точки. |
shopad | string | Повна адреса торгової точки. |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН. |
goods | array | Масив об'єктів товарів в чеку. Для внесення/винесення масив завжди порожній. |
sum_0 | number | Сума чеку без врахування знижок. Для внесення/винесення завжди = 0. |
sum_receipt | number | Сума внесення/винесення. |
sum_disc | number | Загальна сума всіх знижок. Для внесення/винесення завжди = 0. |
sum_topay | number | Сума "до сплати". Сума внесення/винесення. |
round | number | Сума заокруглення. Для внесення/винесення завжди = 0. |
pays | array | Масив оплат по чеку внесення/винесення (за видами оплат). |
taxes | array | Масив податкових груп по чеку (згідно кодів податкових груп). |
fisn | string | Фіскальний номер чеку. |
dt | string | Дата та час відкриття зміни в форматі YYYY-MM-DD HH:MM:SS. |
qr | string | Додаткова інформація з посиланням на чек. |
qr1 | string | Інформація що міститься в qr-коді на чеку. |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
mac | string | Контрольне число. |
fisid | string | Фіскальний номер ПРРО. |
manuf | string | Завжди "Вчасно-Каса". |
cashier | string | Інформація про касира. Те ж що передано в запиті. |
task | number | Тип завдання. Те ж значення що в запиті. |
fisdoctype | string | Тип чеку. "Службовий чек" або "Службовий тестовий чек". |
comment_down | string | Коментар, який друкується у нижній частині чека. |
comment_up | string | Коментар, що друкується перед типами оплат для внесення/винесення. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
docno | string | Локальний номер документа в зміні. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
crc32 | number | Службова інформація. Не використовується. |
Структура масива об'єктів info.printinfo.pays
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Числовий код типу оплати. Аналогічне значення що передано в запиті для даного типу оплати. |
typen | string | Назва типу оплати(текстом). Згідно типів оплат. |
sum | number | Сума оплати (2 знаки після коми). Аналогічне значення що передано в запиті для даного типу оплати. |
currency | string | Валюта операції. Наразі завжди порожнє значення. |
info | string | Додаткова інформація до оплати. Для внесення/винесення завжди порожнє значення. |
comment | string | Коментар. Для внесення/винесення завжди порожнє значення. |
comment_up | string | Коментар що друкується перед сумою. Аналогічне значення що передано в запиті. |
comment_down | string | Коментар що друкується після суми. Аналогічне значення що передано в запиті. |
Структура об'єкта info.billing
Тег | Тип json даних | Зміст |
---|---|---|
paid_date_to | string | Дата закінчення оплати по ПРРО в форматі YYYYMMDDHHMMSS. Час закінчення тарифу завжди 03:00. |
enough_to_renew_subscription | number | Параметр що визначає чи є кошти на рахунку для автоматичного продовження тарифу. 1 - В наявності, підписка на ПРРО продовжиться автоматично після закінчення терміну дії поточної. 2 - Відсутні, ПРРО при закінченні тарифу не зможе продовжувати видавати чеки. 0 - Не вдалось визначити. Не вистачає коштів для активації усіх ПРРО в день деактивації по компанії. ПРРО може не активуватись автоматично якщо кошти будуть списані з балансу іншим ПРРО |
Структура масива об'єктів warnings
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
{
"info": {
"qr": "https://kasa.vchasno.ua/c/TEST_zLrXJc--TNY7Tg?MAC:119f737975c0f12f3e5548ca47a53d6b4351a46ee0e57c70a2a88e461ae96518;DT:16-07-2023T22:49:08;FR:TEST_zLrXJc--TNY7Tg;SUM:232,52;FN:3",
"qr1": "119f737975c0f12f3e5548ca47a53d6b4351a46ee0e57c70a2a88e461ae96518|16.07.2023 22:49:08|TEST_zLrXJc--TNY7Tg|232,52|3",
"cancelid": "TEST_zLrXJc--TNY7Tg",
"printinfo": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"goods": [],
"sum_0": 0,
"sum_receipt": 232.52,
"sum_disc": 0,
"sum_topay": 232.52,
"round": 0,
"pays": [
{
"type": 0,
"typen": "Готівка",
"sum": 232.52,
"currency": "",
"info": "",
"comment": "",
"comment_up": "Верхній коментар \\nТестове внесення готівка",
"comment_down": "Нижній коментар"
}
],
"taxes": [],
"fisn": "TEST_zLrXJc--TNY7Tg",
"dt": "16-07-2023 22:49:08",
"qr": "https://kasa.vchasno.ua/c/TEST_zLrXJc--TNY7Tg?MAC:119f737975c0f12f3e5548ca47a53d6b4351a46ee0e57c70a2a88e461ae96518;DT:16-07-2023T22:49:08;FR:TEST_zLrXJc--TNY7Tg;SUM:232,52;FN:3",
"qr1": "119f737975c0f12f3e5548ca47a53d6b4351a46ee0e57c70a2a88e461ae96518|16.07.2023 22:49:08|TEST_zLrXJc--TNY7Tg|232,52|3",
"isOffline": false,
"mac": "119f737975c0f12f3e5548ca47a53d6b4351a46ee0e57c70a2a88e461ae96518",
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "Постман",
"task": 3,
"fisdoctype": "Службовий тестовий чек",
"comment_down": "Нижній коментар",
"comment_up": "Верхній коментар \\nТестове внесення готівка",
"safe": 6372.08,
"safe_start_shift": 74,
"docno": "4",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"crc32": 4185
},
"dt": "20230716224908",
"fisid": "3",
"docno": "4",
"doccode": "TEST_zLrXJc--TNY7Tg",
"isprint": 0,
"ispay": 0,
"cashier": "Постман",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 6372.08,
"safe_start_shift": 74,
"task": 3,
"dtype": 0,
"shift_link": 501,
"shift_prev_link": 500,
"vacant_off_nums": -1,
"dataid": 4103,
"devinfo": "",
"printheader": null,
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
}
},
"ver": 6,
"source": "DM_API",
"device": "postgres1",
"tag": "103F68B6-ADC6-4372-BDFC-0CDC80419695",
"task_status": 1,
"type": 1,
"task": 3,
"dt": "20230716224908",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": [],
"pf_text": "data:text/plain;charset=windows-1251;base64,ICAgICAg1M7PIMzTx8jX08og39DO0cvAwiAgICAgICANCiAgICAgICAgICDCzsvOxMjMyNDOwsjXICAgICAgICAgDQogICAgICAgICCyxCAzNjgwODAzNzU2ICAgICAgICAgIA0KICAgICDS5fHy7uLgIPLu8OPu4uAg8u736uAgICAgICANCtPq8OC/7eAsIOwuyui/4iwg4vPrLiDV8OX54PLo6iwgDQogICAgICAgICAgICAgICA5OSAgICAgICAgICAgICAgIA0KysDRyNA6IM/u8fLs4O0gICAgICAgICAgICAgICAgICANCsLl8PXts+kg6u7s5e3y4PAgICAgICAgICAgICAgICAgDQrS5fHy7uLlIOLt5fHl7e3/IOPu8rPi6uAgICAgICAgIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgICAgICAgINHL08bBzsLFICAgICAgICAgICAgDQogICAgICAgICAgICDCzcXRxc3N3yAgICAgICAgICAgIA0Kw+7ys+Lq4CAgICAgICAgICAgICAgICAgICAyMzIsNTINCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgIM3o5u2z6SDq7uzl7fLg8CAgICAgICAgIA0KMTE5ZjczNzk3NWMwZjEyZjNlNTU0OGNhNDdhNTNkNmI0MzUxYTQ2ZWUwZTU3YzcwYTJhODhlNDYxYWU5NjUxOA0KMjMyLDUyDQpURVNUX3pMclhKYy0tVE5ZN1RnDQoxNi4wNy4yMDIzIDIyOjQ5OjA4DQogICAgICAxNi0wNy0yMDIzIDIyOjQ5OjA4ICAgICAgIA0KICAgICAgze7s5fAg8evz5uEuIPfl6vMgNCAgICAgICANCtTNIPHr8+bhLiD35erzIFRFU1RfekxyWEpjLS1UTlk3DQogICAgICAgICAgICAgICBUZyAgICAgICAgICAgICAgIA0KICAgICAgICAgICDUzSDP0NDOIDMgICAgICAgICAgICANCiAgICAgICAgINDl5ujsOiDOzcvAyc0gICAgICAgICAgDQogICAgINHr8+bh7uLo6SDy5fHy7uLo6SD35eogICAgIA0KICAgICAgICAgIML34PHt7i3q4PHgICAgICAgICAgICANCg==",
"pf_image": "data:image/png;base64,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",
"pf_pdf": "data:application/pdf;base64,JVBERi0xLjcKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyAyIDAgUgovQ29udGVudHMgNCAwIFI+PgplbmRvYmoKNCAwIG9iago8PC9MZW5ndGggMTM2MT4+CnN0cmVhbQoxLjAwMDAwMCAwIDAgMS4wMDAwMDAgMCA1NzggY20KMiBKCjAuNTY3IHcKQlQgL0YxIDEyLjAwIFRmIEVUCkJUIDEwIC0xNyBUZCAoICAgICAg1M7PIMzTx8jX08og39DO0cvAwiAgICAgICApIFRqIEVUCkJUIDEwIC0yOSBUZCAoICAgICAgICAgIMLOy87EyMzI0M7CyNcgICAgICAgICApIFRqIEVUCkJUIDEwIC00MSBUZCAoICAgICAgICAgssQgMzY4MDgwMzc1NiAgICAgICAgICApIFRqIEVUCkJUIDEwIC01MyBUZCAoICAgICDS5fHy7uLgIPLu8OPu4uAg8u736uAgICAgICApIFRqIEVUCkJUIDEwIC02NSBUZCAo0+rw4L/t4Cwg7C7K6L/iLCDi8+suINXw5fng8ujqLCApIFRqIEVUCkJUIDEwIC03NyBUZCAoICAgICAgICAgICAgICAgOTkgICAgICAgICAgICAgICApIFRqIEVUCkJUIDEwIC04OSBUZCAoysDRyNA6IM/u8fLs4O0gICAgICAgICAgICAgICAgICApIFRqIEVUCkJUIDEwIC0xMDEgVGQgKMLl8PXts+kg6u7s5e3y4PAgICAgICAgICAgICAgICAgKSBUaiBFVApCVCAxMCAtMTEzIFRkICjS5fHy7uLlIOLt5fHl7e3/IOPu8rPi6uAgICAgICAgICkgVGogRVQKQlQgMTAgLTEyNSBUZCAoLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0pIFRqIEVUCkJUIC9GMSAyNC4wMCBUZiBFVApCVCAxMCAtMTQ5IFRkICggICAg0cvTxsHOwsUgICAgKSBUaiBFVApCVCAxMCAtMTczIFRkICggICAgws3F0cXNzd8gICAgKSBUaiBFVApCVCAvRjEgMTIuMDAgVGYgRVQKQlQgMTAgLTE4NSBUZCAow+7ys+Lq4CAgICAgICAgICAgICAgICAgICAyMzIsNTIpIFRqIEVUCkJUIDEwIC0xOTcgVGQgKC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKSBUaiBFVApCVCAxMCAtMjA5IFRkICggICAgICAgIM3o5u2z6SDq7uzl7fLg8CAgICAgICAgICkgVGogRVQKcSAyNDUgMCAwIDI0NSA1LjUgLTQ2NiBjbSAvSTEgRG8gUQpCVCAxMCAtNDc4IFRkICggICAgICAxNi0wNy0yMDIzIDIyOjQ5OjA4ICAgICAgICkgVGogRVQKQlQgMTAgLTQ5MCBUZCAoICAgICAgze7s5fAg8evz5uEuIPfl6vMgNCAgICAgICApIFRqIEVUCkJUIDEwIC01MDIgVGQgKNTNIPHr8+bhLiD35erzIFRFU1RfekxyWEpjLS1UTlk3KSBUaiBFVApCVCAxMCAtNTE0IFRkICggICAgICAgICAgICAgICBUZyAgICAgICAgICAgICAgICkgVGogRVQKQlQgMTAgLTUyNiBUZCAoICAgICAgICAgICDUzSDP0NDOIDMgICAgICAgICAgICApIFRqIEVUCkJUIDEwIC01MzggVGQgKCAgICAgICAgINDl5ujsOiDOzcvAyc0gICAgICAgICAgKSBUaiBFVApCVCAxMCAtNTUwIFRkICggICAgINHr8+bh7uLo6SDy5fHy7uLo6SD35eogICAgICkgVGogRVQKQlQgMTAgLTU2MiBUZCAoICAgICAgICAgIML34PHt7i3q4PHgICAgICAgICAgICApIFRqIEVUCmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8PAovVHlwZSAvRW5jb2RpbmcKL0Jhc2VFbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCi9EaWZmZXJlbmNlcyBbCjEyOCAvRGplY3lyaWxsaWMgL0dqZWN5cmlsbGljCjEzMSAvYWZpaTEwMTAwCjEzNiAvRXVybwoxMzggL0xqZWN5cmlsbGljCjE0MCAvTmplY3lyaWxsaWMgL0tqZWN5cmlsbGljIC9Uc2hlY3lyaWxsaWMgL0R6aGVjeXJpbGxpYyAvYWZpaTEwMDk5CjE1NCAvYWZpaTEwMTA2IAoxNTYgL2FmaWkxMDEwNyAvYWZpaTEwMTA5IC9hZmlpMTAxMDggL2FmaWkxMDE5MwoxNjEgL1VzaG9ydGN5cmlsbGljIC9hZmlpMTAxMTAgL0plY3lyaWxsaWMKMTY1IC9HaGV1cHR1cm5jeXJpbGxpYyAKMTY4IC9Jb2N5cmlsbGljCjE3MCAvRWN5cmlsbGljCjE3NSAvWWljeXJpbGxpYwoxNzggL0ljeXJpbGxpYyAvYWZpaTEwMTAzIC9hZmlpMTAwOTgKMTg0IC9hZmlpMTAwNzEgL2FmaWk2MTM1MiAvYWZpaTEwMTAxCjE4OCAvYWZpaTEwMTA1IC9EemVjeXJpbGxpYyAvYWZpaTEwMTAyIC9hZmlpMTAxMDQgL0FjeXJpbGxpYwogL0JlY3lyaWxsaWMgL1ZlY3lyaWxsaWMgL0dlY3lyaWxsaWMgL0RlY3lyaWxsaWMgL0llY3lyaWxsaWMKIC9aaGVjeXJpbGxpYyAvWmVjeXJpbGxpYyAvSWljeXJpbGxpYyAvSWlzaG9ydGN5cmlsbGljCiAvS2FjeXJpbGxpYyAvRWxjeXJpbGxpYyAvRW1jeXJpbGxpYyAvRW5jeXJpbGxpYyAvT2N5cmlsbGljIAogL1BlY3lyaWxsaWMgL0VyY3lyaWxsaWMgL0VzY3lyaWxsaWMgL1RlY3lyaWxsaWMKIC9VY3lyaWxsaWMgL0VmY3lyaWxsaWMgL0toYWN5cmlsbGljIC9Uc2VjeXJpbGxpYyAvQ2hlY3lyaWxsaWMgL1NoYWN5cmlsbGljIC9TaGNoYWN5cmlsbGljCiAvSGFyZHNpZ25jeXJpbGxpYyAvWWVyaWN5cmlsbGljIC9Tb2Z0c2lnbmN5cmlsbGljIC9FcmV2ZXJzZWRjeXJpbGxpYyAvSVVjeXJpbGxpYyAvSUFjeXJpbGxpYwogL2FjeXJpbGxpYyAvYWZpaTEwMDY2IC9hZmlpMTAwNjcgL2FmaWkxMDA2OCAvYWZpaTEwMDY5IC9hZmlpMTAwNzAgL2FmaWkxMDA3MiAvYWZpaTEwMDczCiAvYWZpaTEwMDc0IC9hZmlpMTAwNzUgL2FmaWkxMDA3NiAvYWZpaTEwMDc3IC9hZmlpMTAwNzggL2FmaWkxMDA3OSAvYWZpaTEwMDgwIC9hZmlpMTAwODEKIC9hZmlpMTAwODIgL2FmaWkxMDA4MyAvYWZpaTEwMDg0IC9hZmlpMTAwODUgL2FmaWkxMDA4NiAvYWZpaTEwMDg3IC9hZmlpMTAwODggL2FmaWkxMDA4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hVyigDn/APhBPB//AEKmh/8Aguh/+Jo/4QTwf/0Kmh/+C6H/AOJroKKAM/TNC0fRPN/snSrGw87HmfZLdIt+M4ztAzjJ6+pqxfWFnqdnJZ39pBd2smN8M8YkRsEEZU8HBAP4VYooA5//AIQTwf8A9Cpof/guh/8Aia1NS0nTdZt1t9U0+0voFcOsd1CsqhsEZAYEZwSM+5q5RQBXsbCz0yzjs7C0gtLWPOyGCMRouSScKOBkkn8ar6noWj635X9raVY3/k58v7XbpLszjONwOM4HT0FaFFAHP/8ACCeD/wDoVND/APBdD/8AE1qabpOm6Nbtb6Xp9pYwM5do7WFYlLYAyQoAzgAZ9hVyigArHvvCfhvU7yS8v/D+lXd1JjfNPZRyO2AAMsRk4AA/CtiigDn/APhBPB//AEKmh/8Aguh/+JrcgghtbeK3t4o4YIkCRxxqFVFAwAAOAAOMVJRQAVT1LSdN1m3W31TT7S+gVw6x3UKyqGwRkBgRnBIz7mrlFAHP/wDCCeD/APoVND/8F0P/AMTWhpmhaPonm/2TpVjYedjzPslukW/GcZ2gZxk9fU1oUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9kKZW5kc3RyZWFtCmVuZG9iagoxIDAgb2JqCjw8L1R5cGUgL1BhZ2VzCi9LaWRzIFszIDAgUiBdCi9Db3VudCAxCi9NZWRpYUJveCBbMCAwIDI1MCA1NzhdCj4+CmVuZG9iagoyIDAgb2JqCjw8L1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9Gb250IDw8Ci9GMSA2IDAgUgo+PgovWE9iamVjdCA8PAovSTEgNyAwIFIKPj4KPj4KZW5kb2JqCjggMCBvYmoKPDwvUHJvZHVjZXIgKEZyZWUgSlBERiBQYXNjYWwgMS4wIFN0YWJsZSkKL01vZERhdGUgKEQ6MjAyMzA3MTYyMjQ5MDgpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyMzA3MTYyMjQ5MDgpPj4KZW5kb2JqCjkgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZwovT3BlbkFjdGlvbiBbMyAwIFIgL0ZpdEggbnVsbF0KL1BhZ2VzIDEgMCBSPj4KZW5kb2JqCnhyZWYKMCAxMAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMjQ4MzAgMDAwMDAgbiAKMDAwMDAyNDkxMSAwMDAwMCBuIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAwODcgMDAwMDAgbiAKMDAwMDAwMTQ5NyAwMDAwMCBuIAowMDAwMDAyNzkyIDAwMDAwIG4gCjAwMDAwMDI4ODEgMDAwMDAgbiAKMDAwMDAyNTAyNCAwMDAwMCBuIAowMDAwMDI1MTQ0IDAwMDAwIG4gCnRyYWlsZXIKPDwvU2l6ZSAxMAovUm9vdCA5IDAgUgovSW5mbyA4IDAgUj4+CnN0YXJ0eHJlZgoyNTIyMgolJUVPRgo=",
"pf_doccmd": "eyJjb21tYW5kcyI6W3sibGluZSI6eyJ0eHQiOiJcdTA0MjRcdTA0MUVcdTA0MUYgXHUwNDFDXHUwNDIzXHUwNDE3XHUwNDE4XHUwNDI3XHUwNDIzXHUwNDFBIFx1MDQyRlx1MDQyMFx1MDQxRVx1MDQyMVx1MDQxQlx1MDQxMFx1MDQxMiBcdTA0MTJcdTA0MUVcdTA0MUJcdTA0MUVcdTA0MTRcdTA0MThcdTA0MUNcdTA0MThcdTA0MjBcdTA0MUVcdTA0MTJcdTA0MThcdTA0MjciLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MX0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MDZcdTA0MTQgMzY4MDgwMzc1NiIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoyLCJieV93b3JkIjoxfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ilx1MDQyMlx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQzMlx1MDQzMCBcdTA0NDJcdTA0M0VcdTA0NDBcdTA0MzNcdTA0M0VcdTA0MzJcdTA0MzAgXHUwNDQyXHUwNDNFXHUwNDQ3XHUwNDNBXHUwNDMwIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjF9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiXHUwNDIzXHUwNDNBXHUwNDQwXHUwNDMwXHUwNDU3XHUwNDNEXHUwNDMwLCBcdTA0M0MuXHUwNDFBXHUwNDM4XHUwNDU3XHUwNDMyLCBcdTA0MzJcdTA0NDNcdTA0M0IuIFx1MDQyNVx1MDQ0MFx1MDQzNVx1MDQ0OVx1MDQzMFx1MDQ0Mlx1MDQzOFx1MDQzQSwgOTkiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MX0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MUFcdTA0MTBcdTA0MjFcdTA0MThcdTA0MjA6IFx1MDQxRlx1MDQzRVx1MDQ0MVx1MDQ0Mlx1MDQzQ1x1MDQzMFx1MDQzRCIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjowfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjpudWxsLCJjb2x1bW5zIjp7ImNvbHMiOlt7IndkIjowLCJ3dCI6MSwidHh0IjoiXHUwNDEyXHUwNDM1XHUwNDQwXHUwNDQ1XHUwNDNEXHUwNDU2XHUwNDM5IFx1MDQzQVx1MDQzRVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQzMFx1MDQ0MCBcXG5cdTA0MjJcdTA0MzVcdTA0NDFcdTA0NDJcdTA0M0VcdTA0MzJcdTA0MzUgXHUwNDMyXHUwNDNEXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDNEXHUwNDNEXHUwNDRGIFx1MDQzM1x1MDQzRVx1MDQ0Mlx1MDQ1Nlx1MDQzMlx1MDQzQVx1MDQzMCIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjowfV19LCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiLSIsImYiOiItIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoyLCJieV93b3JkIjowfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ilx1MDQyMVx1MDQxQlx1MDQyM1x1MDQxNlx1MDQxMVx1MDQxRVx1MDQxMlx1MDQxNVxcblx1MDQxMlx1MDQxRFx1MDQxNVx1MDQyMVx1MDQxNVx1MDQxRFx1MDQxRFx1MDQyRiIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjIsImZ3IjoyLCJiIjowLCJhIjoyLCJieV93b3JkIjowfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjpudWxsLCJjb2x1bW5zIjp7ImNvbHMiOlt7IndkIjowLCJ3dCI6MSwidHh0IjoiXHUwNDEzXHUwNDNFXHUwNDQyXHUwNDU2XHUwNDMyXHUwNDNBXHUwNDMwIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjEsImJ5X3dvcmQiOjB9LHsid2QiOjEwLCJ3dCI6MCwidHh0IjoiMjMyLDUyIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjMsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiItIiwiZiI6Ii0iLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOm51bGwsImNvbHVtbnMiOnsiY29scyI6W3sid2QiOjAsInd0IjoxLCJ0eHQiOiJcdTA0MURcdTA0MzhcdTA0MzZcdTA0M0RcdTA0NTZcdTA0MzkgXHUwNDNBXHUwNDNFXHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDMwXHUwNDQwIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6bnVsbCwicXIiOnsidHh0IjoiMTE5ZjczNzk3NWMwZjEyZjNlNTU0OGNhNDdhNTNkNmI0MzUxYTQ2ZWUwZTU3YzcwYTJhODhlNDYxYWU5NjUxOFxyXG4yMzIsNTJcclxuVEVTVF96THJYSmMtLVROWTdUZ1xyXG4xNi4wNy4yMDIzIDIyOjQ5OjA4IiwicCI6NzUsImEiOjIsInR5cGUiOjEwMH0sImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6IjE2LTA3LTIwMjMgMjI6NDk6MDgiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MURcdTA0M0VcdTA0M0NcdTA0MzVcdTA0NDAgXHUwNDQxXHUwNDNCXHUwNDQzXHUwNDM2XHUwNDMxLiBcdTA0NDdcdTA0MzVcdTA0M0FcdTA0NDMgNCIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoyLCJieV93b3JkIjowfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ilx1MDQyNFx1MDQxRCBcdTA0NDFcdTA0M0JcdTA0NDNcdTA0MzZcdTA0MzEuIFx1MDQ0N1x1MDQzNVx1MDQzQVx1MDQ0MyBURVNUX3pMclhKYy0tVE5ZN1RnIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiXHUwNDI0XHUwNDFEIFx1MDQxRlx1MDQyMFx1MDQyMFx1MDQxRSAzIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiXHUwNDIwXHUwNDM1XHUwNDM2XHUwNDM4XHUwNDNDOiBcdTA0MUVcdTA0MURcdTA0MUJcdTA0MTBcdTA0MTlcdTA0MUQiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MjFcdTA0M0JcdTA0NDNcdTA0MzZcdTA0MzFcdTA0M0VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDQyXHUwNDM1XHUwNDQxXHUwNDQyXHUwNDNFXHUwNDMyXHUwNDM4XHUwNDM5IFx1MDQ0N1x1MDQzNVx1MDQzQSIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoyLCJieV93b3JkIjoxfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ilx1MDQxMlx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzRFx1MDQzRS1cdTA0M0FcdTA0MzBcdTA0NDFcdTA0MzAiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9XSwiY29waWVzIjoxLCJvcGVuZHJhd2VyIjowfQ=="
}
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. | + |
userinfo | object | Об'єкт із даними про клієнта для відправки чеку. | - |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта userinfo
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
string | Пошта клієнта на яку потрібно надіслати чек. | - | |
phone | string | Номер телефону у форматі "+380*********" на який потрібно надіслати чек. Відправка за замовчуванням на viber, якщо у клієнта не встановлено viber на телефоні, чек буде доставлено по смс. | - |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для фіскалізації чеку видачі готівкових коштів держателям ЕПЗ по ПРРО завжди 14 | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
cash | object | Об'єкт із інформацією про суми та типи оплати | + |
Структура об'єкта fiscal.cash
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
type | number | Код типу оплати. Наразі можна передавати лише тип оплати "Картка" | + |
sum | number | Сума оплати (2 знаки після коми). | + |
comment_up | string | Коментар, що друкується зверху чеку. | - |
comment_down | string | Коментар, що друкується знизу чеку. | - |
commission | number | Сумма комісії банку, якщо така наявна (2 знаки після коми). | - |
bank_id | string | Ідентифікатор або назва еквайра/банку (дані торимані від терміналу після оплати банківською карткою). | - |
term_id | string | Код банківського термінала (дані отримані від терміналу після оплати банківською карткою). | - |
paysys | string | Назва платіжної системи (дані отримані від терміналу після оплати банківською карткою). | - |
rrn | string | Унікальний ідентифікатор транзакції (дані отримані від терміналу після оплати банківською карткою). | - |
cardmask | string | Номер картки замаскований в форматі "XXXXXXXXXXXX0000" де 0000 останні 4 чифри номеру карти отримані від терміналу після оплати банківською карткою. | - |
auth_code | string | Код авторизації (дані отримані від терміналу після оплати банківською карткою). | - |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "123",
"device": "test1",
"token": "",
"tag": "",
"need_pf_img": "2",
"need_pf_pdf": "2",
"need_pf_txt": "2",
"need_pf_doccmd": "2",
"type": 1,
"userinfo": {
"email": "",
"phone": ""
},
"fiscal": {
"task": 14,
"cashier": "123",
"cash": {
"type": 2,
"sum": 5,
"comment_up": "Коментар зверху чеку",
"comment_down": "Коментар знизу чеку",
"commission": 1,
"bank_id": "bankid",
"term_id": "termid",
"paysys": "paysys1234",
"rrn": "rrn1234",
"cardmask": "cardmask1234",
"auth_code": "authcode"
}
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання: 1 - чек було фіскалізовано; 2 - чек було знайдено в БД і повернуто відповідь (якщо передано в запиті значення tag); 3 - помилка при фіскалізації або пошуку чеку в БД. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для відкриття зміни завжди 0 |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 2 - Помилка + колізія. Виправлення колізії відбувається автоматично при відправці будь-якого наступного завдання, але для збереження транзакційності рекомендується виконати повтор останнього завдання з тим же tag. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
aq_errortxt | string | Текст з описом помилки при проведенні офлайнових чеків. Повертаєтсья лише у випадку знаходження ПРРО в режимі офлайн та помилки при проведенні офлайнових чеків. |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
pf_text | string | Друкована форма чеку у вигляді тексту в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
pf_image | string | Друкована форма чеку у вигляді картинки в форматі base64 з метаданими data:image/png;base64 |
pf_pdf | string | Друкована форма чеку у вигляді PDF в форматі base64 з метаданими data:application/pdf;base64 |
pf_doccmd | string | Друкована форма чеку в форматі JSON, дані для прямого друку на принтер підключений в ДМ. Формат даних - base64 без метаданих. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
qr | string | Додаткова інформація з посиланням на чек. |
qr1 | string | Інформація що міститься в qr-коді на чеку. |
cancelid | string | Фіскальний номер чеку |
printinfo | object | Об'єкт із даними для друку. Дані використовуються при формуванні друкованої форми чеку додатком. |
dt | string | Дата і час на чеку що був відправлений в ДПС. Формат: DD-MM-YYYY HH:MM:SS. |
fisid | string | Фіскальний номер ПРРО. |
docno | string | Номер документа в зміні. Для відкриття зміни завжди порожнє значення. |
doccode | string | Фіскальний номер чеку |
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. 0 - запит на оплату на термінал не було надіслано, 1 - було проведено оплату по терміналу. Для завдань по ендпоінту /dm/execute завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер зміни(або номер наступного Z-звіту). Він єдиний для відкриття зміни, всіх документів, що входять у зміну та закриття зміни. |
shift_prev_link | number | Номер останнього Z-звіту. |
vacant_off_nums | number | Кількість доступних офлайн номерів. Якщо ПРРО знаходиться в режимі онлайн значення буде -1 |
dataid | number | Номер пакету. Загальна нумерація для всіх пакетів(фіскальних та службових чеків) що відправлені в ДПС |
devinfo | string | Наразі завжди порожнє |
printheader | object | Об'єкт з інформацією для друку. Для продажу/повернення завжди null |
billing | object | Об'єкт з інформацією по оплаті тарифу за ПРРО |
Структура об'єкта info.printinfo
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. особи. |
shopname | number | Назва торгової точки. |
shopad | string | Повна адреса торгової точки. |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН. |
goods | array | Масив об'єктів товарів в чеку. Для чеку видачі коштів держателям ЕПЗ масив завжди порожній. |
sum_0 | number | Сума чеку без врахування комісії. |
sum_receipt | number | Сума чеку без врахування комісії. |
sum_disc | number | Загальна сума всіх знижок. Для чеку видачі коштів держателям ЕПЗ завжди = 0. |
sum_topay | number | Сума "до сплати". Сума з урахуванням комісії. |
round | number | Сума заокруглення. Для чеку видачі коштів держателям ЕПЗ завжди = 0. |
pays | array | Масив оплат по чеку (за видами оплат). |
taxes | array | Масив податкових груп по чеку. Для чеку видачі коштів держателям ЕПЗ масив завжди порожній. |
fisn | string | Фіскальний номер чеку. |
dt | string | Дата та час відкриття зміни в форматі YYYY-MM-DD HH:MM:SS. |
qr | string | Додаткова інформація з посиланням на чек. |
qr1 | string | Інформація що міститься в qr-коді на чеку. |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
mac | string | Контрольне число. |
fisid | string | Фіскальний номер ПРРО. |
manuf | string | Завжди "Вчасно-Каса". |
cashier | string | Інформація про касира. Те ж що передано в запиті. |
task | number | Тип завдання. Те ж значення що в запиті. |
fisdoctype | string | Тип чеку. "Фіскальний чек/Видатковий чек" або "Тестовий чек/Видатковий тетовий чек". |
comment_down | string | Коментар, який друкується у нижній частині чека. |
comment_up | string | Коментар, що друкується зверху чека. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
docno | string | Локальний номер документа в зміні. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
crc32 | number | Службова інформація. Не використовується. |
commission | number | Сума комісії. Аналогічне значення що передано в запиті. |
Структура масива об'єктів info.printinfo.pays
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Числовий код типу оплати. Аналогічне значення що передано в запиті для даного типу оплати. |
typen | string | Назва типу оплати(текстом). Згідно типів оплат. |
sum | number | Сума оплати (2 знаки після коми). Аналогічне значення що передано в запиті для даного типу оплати. |
currency | string | Валюта операції. Наразі завжди повертаєтсья порожнє значення. |
info | string | Додаткова інформація до оплати. У випадку оплати готівкою з рештою або при оплаті картою з даними ЕПЗ та по оплаті. |
comment | string | Коментар до типу оплати. Наразі завжди повертаєтсья порожнє значення. |
comment_up | string | Коментар що друкується перед сумою. Аналогічне значення що передано в запиті. |
comment_down | string | Коментар що друкується після суми. Аналогічне значення що передано в запиті. |
paysys | string | Назва платіжної системи. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
rrn | string | Унікальний ідентифікатор транзакції. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
cardmask | string | Номер платіжного засобу картки. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
term_id | string | Код банківського термінала. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
bank_id | string | Ідентифікатор або назва еквайра/банку. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
auth_code | string | Код авторизації. Аналогічне значення що передано в запиті для даного типу оплати, або при роботі в пакетному режимі - дані отримані від терміналу після оплати банківською карткою. |
Структура об'єкта info.billing
Тег | Тип json даних | Зміст |
---|---|---|
paid_date_to | string | Дата закінчення оплати по ПРРО в форматі YYYYMMDDHHMMSS. Час закінчення тарифу завжди 03:00. |
enough_to_renew_subscription | number | Параметр що визначає чи є кошти на рахунку для автоматичного продовження тарифу. 1 - В наявності, підписка на ПРРО продовжиться автоматично після закінчення терміну дії поточної. 2 - Відсутні, ПРРО при закінченні тарифу не зможе продовжувати видавати чеки. 0 - Не вдалось визначити. Не вистачає коштів для активації усіх ПРРО в день деактивації по компанії. ПРРО може не активуватись автоматично якщо кошти будуть списані з балансу іншим ПРРО |
Структура масива об'єктів warnings
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
{
"info": {
"qr": "https://kasa.vchasno.ua/c/TEST_Oz8MVZDIQF9qDg?MAC:422e39110f2be343f6dc974ee50e7ce921a611bae03650e5d5645154ac96f959;DT:16-07-2023T23:19:04;FR:TEST_Oz8MVZDIQF9qDg;SUM:5;FN:3",
"qr1": "422e39110f2be343f6dc974ee50e7ce921a611bae03650e5d5645154ac96f959|16.07.2023 23:19:04|TEST_Oz8MVZDIQF9qDg|5|3",
"cancelid": "TEST_Oz8MVZDIQF9qDg",
"printinfo": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"goods": [],
"sum_0": 5,
"sum_receipt": 5,
"sum_disc": 0,
"sum_topay": 6,
"round": 0,
"pays": [
{
"type": 2,
"typen": "Картка",
"sum": 6,
"currency": "",
"info": "",
"comment": "",
"comment_up": "Коментар зверху чеку",
"comment_down": "Коментар знизу чеку",
"paysys": "paysys1234",
"rrn": "rrn1234",
"cardmask": "cardmask1234",
"term_id": "termid",
"bank_id": "bankid",
"auth_code": "authcode"
}
],
"taxes": [],
"fisn": "TEST_Oz8MVZDIQF9qDg",
"dt": "16-07-2023 23:19:04",
"qr": "https://kasa.vchasno.ua/c/TEST_Oz8MVZDIQF9qDg?MAC:422e39110f2be343f6dc974ee50e7ce921a611bae03650e5d5645154ac96f959;DT:16-07-2023T23:19:04;FR:TEST_Oz8MVZDIQF9qDg;SUM:5;FN:3",
"qr1": "422e39110f2be343f6dc974ee50e7ce921a611bae03650e5d5645154ac96f959|16.07.2023 23:19:04|TEST_Oz8MVZDIQF9qDg|5|3",
"isOffline": false,
"mac": "422e39110f2be343f6dc974ee50e7ce921a611bae03650e5d5645154ac96f959",
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "123",
"task": 14,
"fisdoctype": "Тестовий чек видачі коштів",
"comment_down": "Коментар знизу чеку",
"comment_up": "Коментар зверху чеку",
"safe": 6362.08,
"safe_start_shift": 74,
"docno": "2",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"crc32": 3196,
"commission": 1
},
"dt": "20230716231904",
"fisid": "3",
"docno": "2",
"doccode": "TEST_Oz8MVZDIQF9qDg",
"isprint": 0,
"ispay": 0,
"cashier": "123",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 6362.08,
"safe_start_shift": 74,
"task": 14,
"dtype": 0,
"shift_link": 501,
"shift_prev_link": 500,
"vacant_off_nums": -1,
"dataid": 4105,
"devinfo": "",
"printheader": null,
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
}
},
"ver": 6,
"source": "123",
"device": "postgres1",
"tag": "148C7C34-2D87-4FA7-B114-F23D4FBFDBE7",
"task_status": 1,
"type": 1,
"task": 14,
"dt": "20230716231904",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": [],
"pf_text": "data:text/plain;charset=windows-1251;base64,ICAgICAg1M7PIMzTx8jX08og39DO0cvAwiAgICAgICANCiAgICAgICAgICDCzsvOxMjMyNDOwsjXICAgICAgICAgDQogICAgICAgICCyxCAzNjgwODAzNzU2ICAgICAgICAgIA0KICAgICDS5fHy7uLgIPLu8OPu4uAg8u736uAgICAgICANCtPq8OC/7eAsIOwuyui/4iwg4vPrLiDV8OX54PLo6iwgDQogICAgICAgICAgICAgICA5OSAgICAgICAgICAgICAgIA0KysDRyNA6IDEyMyAgICAgICAgICAgICAgICAgICAgICANCsru7OXt8uDwIOfi5fD18yD35erzICAgICAgICAgICAgDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KweDt6iAgICAgICAgICAgICAgICAgICAgICBiYW5raWQNCtLl8Oyz7eDrICAgICAgICAgICAgICAgICAgdGVybWlkDQrOz8XQwNay3yDHIMLIxMDXsiAgICAgICA1LDAwIMPQzQ0Kw87SssLKzsLI1SDKztjSssIgIA0KxMXQxsDSxcveIMXPxyAgICAgIA0Kyu7ss/Gz/yAgICAgICAgICAgICAgICAgMSwwMCDD0M0NCsXPxyAgICAgICAgICAgICAgICAgY2FyZG1hc2sxMjM0DQrP6+Dys+bt4CDx6PHy5ezgICAgICAgcGF5c3lzMTIzNA0Kyu7kIODi8u7w6Ofg9rO/ICAgICAgICAgYXV0aGNvZGUNClJSTiAgICAgICAgICAgICAgICAgICAgICBycm4xMjM0DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgyu7s5e3y4PAg5+3o5/Mg9+Xq8yAgICAgICANCiAg1M0g9+Xq8yBURVNUX096OE1WWkRJUUY5cURnICAgDQogICAgICAxNi0wNy0yMDIzIDIzOjE5OjA0ICAgICAgIA0KNDIyZTM5MTEwZjJiZTM0M2Y2ZGM5NzRlZTUwZTdjZTkyMWE2MTFiYWUwMzY1MGU1ZDU2NDUxNTRhYzk2Zjk1OQ0KNiwwMA0KVEVTVF9PejhNVlpESVFGOXFEZw0KMTYuMDcuMjAyMyAyMzoxOTowNA0KICAgICAgICAgICDUzSDP0NDOIDMgICAgICAgICAgICANCiAgICAgICAgINDl5ujsOiDOzcvAyc0gICAgICAgICAgDQogICDS5fHy7uLo6SD35eog4ujk4PezIOru+PKz4iAgIA0KICAgICAgICAgIML34PHt7i3q4PHgICAgICAgICAgICANCg==",
"pf_image": "data:image/png;base64,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",
"pf_pdf": "data:application/pdf;base64,JVBERi0xLjcKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyAyIDAgUgovQ29udGVudHMgNCAwIFI+PgplbmRvYmoKNCAwIG9iago8PC9MZW5ndGggMTU0OT4+CnN0cmVhbQoxLjAwMDAwMCAwIDAgMS4wMDAwMDAgMCA2MDIgY20KMiBKCjAuNTY3IHcKQlQgL0YxIDEyLjAwIFRmIEVUCkJUIDEwIC0xNyBUZCAoICAgICAg1M7PIMzTx8jX08og39DO0cvAwiAgICAgICApIFRqIEVUCkJUIDEwIC0yOSBUZCAoICAgICAgICAgIMLOy87EyMzI0M7CyNcgICAgICAgICApIFRqIEVUCkJUIDEwIC00MSBUZCAoICAgICAgICAgssQgMzY4MDgwMzc1NiAgICAgICAgICApIFRqIEVUCkJUIDEwIC01MyBUZCAoICAgICDS5fHy7uLgIPLu8OPu4uAg8u736uAgICAgICApIFRqIEVUCkJUIDEwIC02NSBUZCAo0+rw4L/t4Cwg7C7K6L/iLCDi8+suINXw5fng8ujqLCApIFRqIEVUCkJUIDEwIC03NyBUZCAoICAgICAgICAgICAgICAgOTkgICAgICAgICAgICAgICApIFRqIEVUCkJUIDEwIC04OSBUZCAoysDRyNA6IDEyMyAgICAgICAgICAgICAgICAgICAgICApIFRqIEVUCkJUIDEwIC0xMDEgVGQgKMru7OXt8uDwIOfi5fD18yD35erzICAgICAgICAgICAgKSBUaiBFVApCVCAxMCAtMTEzIFRkICgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSkgVGogRVQKQlQgMTAgLTEyNSBUZCAoweDt6iAgICAgICAgICAgICAgICAgICAgICBiYW5raWQpIFRqIEVUCkJUIDEwIC0xMzcgVGQgKNLl8Oyz7eDrICAgICAgICAgICAgICAgICAgdGVybWlkKSBUaiBFVApCVCAxMCAtMTQ5IFRkICjOz8XQwNay3yDHIMLIxMDXsiAgICAgICA1LDAwIMPQzSkgVGogRVQKQlQgMTAgLTE2MSBUZCAow87SssLKzsLI1SDKztjSssIgICkgVGogRVQKQlQgMTAgLTE3MyBUZCAoxMXQxsDSxcveIMXPxyAgICAgICkgVGogRVQKQlQgMTAgLTE4NSBUZCAoyu7ss/Gz/yAgICAgICAgICAgICAgICAgMSwwMCDD0M0pIFRqIEVUCkJUIDEwIC0xOTcgVGQgKMXPxyAgICAgICAgICAgICAgICAgY2FyZG1hc2sxMjM0KSBUaiBFVApCVCAxMCAtMjA5IFRkICjP6+Dys+bt4CDx6PHy5ezgICAgICAgcGF5c3lzMTIzNCkgVGogRVQKQlQgMTAgLTIyMSBUZCAoyu7kIODi8u7w6Ofg9rO/ICAgICAgICAgYXV0aGNvZGUpIFRqIEVUCkJUIDEwIC0yMzMgVGQgKFJSTiAgICAgICAgICAgICAgICAgICAgICBycm4xMjM0KSBUaiBFVApCVCAxMCAtMjQ1IFRkICgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSkgVGogRVQKQlQgMTAgLTI1NyBUZCAoICAgICAgyu7s5e3y4PAg5+3o5/Mg9+Xq8yAgICAgICApIFRqIEVUCkJUIDEwIC0yNjkgVGQgKCAg1M0g9+Xq8yBURVNUX096OE1WWkRJUUY5cURnICAgKSBUaiBFVApCVCAxMCAtMjgxIFRkICggICAgICAxNi0wNy0yMDIzIDIzOjE5OjA0ICAgICAgICkgVGogRVQKcSAyNDUgMCAwIDI0NSA1LjUgLTUzOCBjbSAvSTEgRG8gUQpCVCAxMCAtNTUwIFRkICggICAgICAgICAgINTNIM/Q0M4gMyAgICAgICAgICAgICkgVGogRVQKQlQgMTAgLTU2MiBUZCAoICAgICAgICAg0OXm6Ow6IM7Ny8DJzSAgICAgICAgICApIFRqIEVUCkJUIDEwIC01NzQgVGQgKCAgINLl8fLu4ujpIPfl6iDi6OTg97Mg6u748rPiICAgKSBUaiBFVApCVCAxMCAtNTg2IFRkICggICAgICAgICAgwvfg8e3uLerg8eAgICAgICAgICAgICkgVGogRVQKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8Ci9UeXBlIC9FbmNvZGluZwovQmFzZUVuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsKMTI4IC9EamVjeXJpbGxpYyAvR2plY3lyaWxsaWMKMTMxIC9hZmlpMTAxMDAKMTM2IC9FdXJvCjEzOCAvTGplY3lyaWxsaWMKMTQwIC9OamVjeXJpbGxpYyAvS2plY3lyaWxsaWMgL1RzaGVjeXJpbGxpYyAvRHpoZWN5cmlsbGljIC9hZmlpMTAwOTkKMTU0IC9hZmlpMTAxMDYgCjE1NiAvYWZpaTEwMTA3IC9hZmlpMTAxMDkgL2FmaWkxMDEwOCAvYWZpaTEwMTkzCjE2MSAvVXNob3J0Y3lyaWxsaWMgL2FmaWkxMDExMCAvSmVjeXJpbGxpYwoxNjUgL0doZXVwdHVybmN5cmlsbGljIAoxNjggL0lvY3lyaWxsaWMKMTcwIC9FY3lyaWxsaWMKMTc1IC9ZaWN5cmlsbGljCjE3OCAvSWN5cmlsbGljIC9hZmlpMTAxMDMgL2FmaWkxMDA5OAoxODQgL2FmaWkxMDA3MSAvYWZpaTYxMzUyIC9hZmlpMTAxMDEKMTg4IC9hZmlpMTAxMDUgL0R6ZWN5cmlsbGljIC9hZmlpMTAxMDIgL2FmaWkxMDEwNCAvQWN5cmlsbGljCiAvQmVjeXJpbGxpYyAvVmVjeXJpbGxpYyAvR2VjeXJpbGxpYyAvRGVjeXJpbGxpYyAvSWVjeXJpbGxpYwogL1poZWN5cmlsbGljIC9aZWN5cmlsbGljIC9JaWN5cmlsbGljIC9JaXNob3J0Y3lyaWxsaWMKIC9LYWN5cmlsbGljIC9FbGN5cmlsbGljIC9FbWN5cmlsbGljIC9FbmN5cmlsbGljIC9PY3lyaWxsaWMgCiAvUGVjeXJpbGxpYyAvRXJjeXJpbGxpYyAvRXNjeXJpbGxpYyAvVGVjeXJpbGxpYwogL1VjeXJpbGxpYyAvRWZjeXJpbGxpYyAvS2hhY3lyaWxsaWMgL1RzZWN5cmlsbGljIC9DaGVjeXJpbGxpYyAvU2hhY3lyaWxsaWMgL1NoY2hhY3lyaWxsaWMKIC9IYXJkc2lnbmN5cmlsbGljIC9ZZXJpY3lyaWxsaWMgL1NvZnRzaWduY3lyaWxsaWMgL0VyZXZlcnNlZGN5cmlsbGljIC9JVWN5cmlsbGljIC9JQWN5cmlsbGljCiAvYWN5cmlsbGljIC9hZmlpMTAwNjYgL2FmaWkxMDA2NyAvYWZpaTEwMDY4IC9hZmlpMTAwNjkgL2FmaWkxMDA3MCAvYWZpaTEwMDcy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",
"pf_doccmd": "eyJjb21tYW5kcyI6W3sibGluZSI6eyJ0eHQiOiJcdTA0MjRcdTA0MUVcdTA0MUYgXHUwNDFDXHUwNDIzXHUwNDE3XHUwNDE4XHUwNDI3XHUwNDIzXHUwNDFBIFx1MDQyRlx1MDQyMFx1MDQxRVx1MDQyMVx1MDQxQlx1MDQxMFx1MDQxMiBcdTA0MTJcdTA0MUVcdTA0MUJcdTA0MUVcdTA0MTRcdTA0MThcdTA0MUNcdTA0MThcdTA0MjBcdTA0MUVcdTA0MTJcdTA0MThcdTA0MjciLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MX0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MDZcdTA0MTQgMzY4MDgwMzc1NiIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoyLCJieV93b3JkIjoxfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ilx1MDQyMlx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQzMlx1MDQzMCBcdTA0NDJcdTA0M0VcdTA0NDBcdTA0MzNcdTA0M0VcdTA0MzJcdTA0MzAgXHUwNDQyXHUwNDNFXHUwNDQ3XHUwNDNBXHUwNDMwIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjF9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiXHUwNDIzXHUwNDNBXHUwNDQwXHUwNDMwXHUwNDU3XHUwNDNEXHUwNDMwLCBcdTA0M0MuXHUwNDFBXHUwNDM4XHUwNDU3XHUwNDMyLCBcdTA0MzJcdTA0NDNcdTA0M0IuIFx1MDQyNVx1MDQ0MFx1MDQzNVx1MDQ0OVx1MDQzMFx1MDQ0Mlx1MDQzOFx1MDQzQSwgOTkiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MX0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MUFcdTA0MTBcdTA0MjFcdTA0MThcdTA0MjA6IDEyMyIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjowfSwiY29sdW1ucyI6bnVsbCwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjpudWxsLCJjb2x1bW5zIjp7ImNvbHMiOlt7IndkIjowLCJ3dCI6MSwidHh0IjoiXHUwNDFBXHUwNDNFXHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDMwXHUwNDQwIFx1MDQzN1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQ0NVx1MDQ0MyBcdTA0NDdcdTA0MzVcdTA0M0FcdTA0NDMiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MSwiYnlfd29yZCI6MH1dfSwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ii0iLCJmIjoiLSIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6Niwid3QiOjAsInR4dCI6Ilx1MDQxMVx1MDQzMFx1MDQzRFx1MDQzQSIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjowfSx7IndkIjowLCJ3dCI6MSwidHh0IjoiYmFua2lkIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjMsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6MTAsInd0IjowLCJ0eHQiOiJcdTA0MjJcdTA0MzVcdTA0NDBcdTA0M0NcdTA0NTZcdTA0M0RcdTA0MzBcdTA0M0IiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MSwiYnlfd29yZCI6MH0seyJ3ZCI6MCwid3QiOjEsInR4dCI6InRlcm1pZCIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjozLCJieV93b3JkIjowfV19LCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOm51bGwsImNvbHVtbnMiOnsiY29scyI6W3sid2QiOjE5LCJ3dCI6MCwidHh0IjoiXHUwNDFFXHUwNDFGXHUwNDE1XHUwNDIwXHUwNDEwXHUwNDI2XHUwNDA2XHUwNDJGIFx1MDQxNyBcdTA0MTJcdTA0MThcdTA0MTRcdTA0MTBcdTA0MjdcdTA0MDZcXG5cdTA0MTNcdTA0MUVcdTA0MjJcdTA0MDZcdTA0MTJcdTA0MUFcdTA0MUVcdTA0MTJcdTA0MThcdTA0MjUgXHUwNDFBXHUwNDFFXHUwNDI4XHUwNDIyXHUwNDA2XHUwNDEyXFxuXHUwNDE0XHUwNDE1XHUwNDIwXHUwNDE2XHUwNDEwXHUwNDIyXHUwNDE1XHUwNDFCXHUwNDJFIFx1MDQxNVx1MDQxRlx1MDQxNyIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjoxfSx7IndkIjowLCJ3dCI6MSwidHh0IjoiNSwwMCIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjozLCJieV93b3JkIjowfSx7IndkIjo0LCJ3dCI6MCwidHh0IjoiXHUwNDEzXHUwNDIwXHUwNDFEIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjMsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6OSwid3QiOjAsInR4dCI6Ilx1MDQxQVx1MDQzRVx1MDQzQ1x1MDQ1Nlx1MDQ0MVx1MDQ1Nlx1MDQ0RiIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjowfSx7IndkIjowLCJ3dCI6MSwidHh0IjoiMSwwMCIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjozLCJieV93b3JkIjowfSx7IndkIjo0LCJ3dCI6MCwidHh0IjoiXHUwNDEzXHUwNDIwXHUwNDFEIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjMsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6NSwid3QiOjAsInR4dCI6Ilx1MDQxNVx1MDQxRlx1MDQxNyIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjoxLCJieV93b3JkIjowfSx7IndkIjowLCJ3dCI6MSwidHh0IjoiY2FyZG1hc2sxMjM0IiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjMsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6MTgsInd0IjowLCJ0eHQiOiJcdTA0MUZcdTA0M0JcdTA0MzBcdTA0NDJcdTA0NTZcdTA0MzZcdTA0M0RcdTA0MzAgXHUwNDQxXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUwNDNDXHUwNDMwIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjEsImJ5X3dvcmQiOjB9LHsid2QiOjAsInd0IjoxLCJ0eHQiOiJwYXlzeXMxMjM0IiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjMsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6MTksInd0IjowLCJ0eHQiOiJcdTA0MUFcdTA0M0VcdTA0MzQgXHUwNDMwXHUwNDMyXHUwNDQyXHUwNDNFXHUwNDQwXHUwNDM4XHUwNDM3XHUwNDMwXHUwNDQ2XHUwNDU2XHUwNDU3IiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjEsImJ5X3dvcmQiOjB9LHsid2QiOjAsInd0IjoxLCJ0eHQiOiJhdXRoY29kZSIsImYiOiIgIiwic2VwIjoiIiwiZmgiOjEsImZ3IjoxLCJiIjowLCJhIjozLCJieV93b3JkIjowfV19LCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOm51bGwsImNvbHVtbnMiOnsiY29scyI6W3sid2QiOjUsInd0IjowLCJ0eHQiOiJSUk4iLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MSwiYnlfd29yZCI6MH0seyJ3ZCI6MCwid3QiOjEsInR4dCI6InJybjEyMzQiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MywiYnlfd29yZCI6MH1dfSwicXIiOm51bGwsImltZyI6bnVsbH0seyJsaW5lIjp7InR4dCI6Ii0iLCJmIjoiLSIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6bnVsbCwiY29sdW1ucyI6eyJjb2xzIjpbeyJ3ZCI6MCwid3QiOjEsInR4dCI6Ilx1MDQxQVx1MDQzRVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQzMFx1MDQ0MCBcdTA0MzdcdTA0M0RcdTA0MzhcdTA0MzdcdTA0NDMgXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9XX0sInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MjRcdTA0MUQgXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzIFRFU1RfT3o4TVZaRElRRjlxRGciLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiIxNi0wNy0yMDIzIDIzOjE5OjA0IiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOm51bGwsImNvbHVtbnMiOm51bGwsInFyIjp7InR4dCI6IjQyMmUzOTExMGYyYmUzNDNmNmRjOTc0ZWU1MGU3Y2U5MjFhNjExYmFlMDM2NTBlNWQ1NjQ1MTU0YWM5NmY5NTlcclxuNiwwMFxyXG5URVNUX096OE1WWkRJUUY5cURnXHJcbjE2LjA3LjIwMjMgMjM6MTk6MDQiLCJwIjo3NSwiYSI6MiwidHlwZSI6MTAwfSwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiXHUwNDI0XHUwNDFEIFx1MDQxRlx1MDQyMFx1MDQyMFx1MDQxRSAzIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfSx7ImxpbmUiOnsidHh0IjoiXHUwNDIwXHUwNDM1XHUwNDM2XHUwNDM4XHUwNDNDOiBcdTA0MUVcdTA0MURcdTA0MUJcdTA0MTBcdTA0MTlcdTA0MUQiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MH0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MjJcdTA0MzVcdTA0NDFcdTA0NDJcdTA0M0VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDQ3XHUwNDM1XHUwNDNBIFx1MDQzMlx1MDQzOFx1MDQzNFx1MDQzMFx1MDQ0N1x1MDQ1NiBcdTA0M0FcdTA0M0VcdTA0NDhcdTA0NDJcdTA0NTZcdTA0MzIiLCJmIjoiICIsInNlcCI6IiIsImZoIjoxLCJmdyI6MSwiYiI6MCwiYSI6MiwiYnlfd29yZCI6MX0sImNvbHVtbnMiOm51bGwsInFyIjpudWxsLCJpbWciOm51bGx9LHsibGluZSI6eyJ0eHQiOiJcdTA0MTJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0M0RcdTA0M0UtXHUwNDNBXHUwNDMwXHUwNDQxXHUwNDMwIiwiZiI6IiAiLCJzZXAiOiIiLCJmaCI6MSwiZnciOjEsImIiOjAsImEiOjIsImJ5X3dvcmQiOjB9LCJjb2x1bW5zIjpudWxsLCJxciI6bnVsbCwiaW1nIjpudWxsfV0sImNvcGllcyI6MSwib3BlbmRyYXdlciI6MH0="
}
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. |
+ |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для закриття зміни по ПРРО завжди 11 | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "test1",
"tag": "",
"type": 1,
"fiscal": {
"task": 11,
"cashier": "API"
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання: 1 - чек було фіскалізовано; 2 - чек було знайдено в БД і повернуто відповідь (якщо передано в запиті значення tag); 3 - помилка при фіскалізації або пошуку чеку в БД. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для відкриття зміни завжди 0 |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 2 - Помилка + колізія. Виправлення колізії відбувається автоматично при відправці будь-якого наступного завдання, але для збереження транзакційності рекомендується виконати повтор останнього завдання з тим же tag. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
aq_errortxt | string | Текст з описом помилки при проведенні офлайнових чеків. Повертаєтсья лише у випадку знаходження ПРРО в режимі офлайн та помилки при проведенні офлайнових чеків. |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
isoffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
taxes | array | Масив з інформацією по підсумкам з податків у розрізі податкових груп. |
pays | array | Масив з інформацією по підсумкам з оплат у розрізі видів оплат. |
money | array | Масив з інформацією по підсумкам з операцій внесення/винесення коштів. |
cash | array | Масив з інформацією по підсумкам з операцій видачі коштів держателям ЕПЗ. |
receipt | object | Підсумки по кількості чеків за зміну. |
summary | object | Загальні підсумки по обороту, податків та знижкам з продажу та повернення за зміну. |
lastcheck | object | Об'єкт із даними про останній фіскальний чек в зміні(продаж, повернення, видача коштів держателям ЕПЗ). |
reports | array | Масив інформації про кожен звіт, який увійшов до збірного звіту. Для закриття зміни масив завжди порожній. |
dt | string | Дата і час на чеку що був відправлений в ДПС. Формат: DD-MM-YYYY HH:MM:SS. |
fisid | string | Фіскальний номер ПРРО. |
docno | string | Номер поточного Z-звіту. |
doccode | string | Фіскальний номер чеку |
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. Для закриття зміни завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер Z-звіту. |
shift_prev_link | number | Номер попереднього Z-звіту(перед поточним). |
vacant_off_nums | number | Кількість доступних офлайн номерів. Якщо ПРРО знаходиться в режимі онлайн значення буде -1 |
dataid | number | Номер пакету. Загальна нумерація для всіх пакетів що відправлені в ДПС |
devinfo | string | Наразі завжди порожнє |
billing | object | Об'єкт з інформацією по оплаті тарифу за ПРРО |
printheader | object | Об'єкт з інформацією для друку. |
Структура масива об'єктів info.taxes
(Масив з інформацією по підсумкам з податків у розрізі податкових груп).
Тег | Тип json даних | Зміст |
---|---|---|
gr_code | number | Код податкової групи. Згідно кодів податкових груп для товарів в чеку. |
base_sum_p | number | База оподаткування по чекам на продаж. Включає в себе податок та додатковий збір(акциз, військовий збір і тд.) |
base_sum_m | number | База оподаткування по чекам повернення. Включає в себе податок та додатковий збір(акциз, військовий збір і тд.) |
tax_name | string | Коротка назва податку. |
tax_fname | string | Повна назва податку. |
tax_lit | string | Буква податку. Якщо податок має додатковий збір буде дві букви. |
tax_percent | number | Ставка податку(у %). |
tax_sum_p | number | Сума податку по чекам на продаж(2 знаки після коми). |
tax_sum_m | number | Сума податку по чекам повернення(2 знаки після коми). |
ex_name | string | Назва додаткового збору(акциз, військовий збір і тд.) до основного податку. |
ex_percent | number | Ставка додаткового збору до податку(у %). |
ex_sum_p | number | Сума додаткового збору до податку по чекам на продаж(2 знаки після коми). |
ex_sum_m | number | Сума додаткового збору до податку по чекам повернення(2 знаки після коми). |
Структура масива об'єктів info.pays
(Масив з інформацією по підсумкам з оплат у розрізі видів оплат).
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Код типу оплати. Згідно кодів типів оплат для чеку. |
name | string | Назва виду оплати. |
sum_p | number | Сума за видом оплати по чекам продажу. |
sum_m | number | Сума за видом оплати по чекам повернення. |
round_pd | number | Сума округлення яке було прийняте в меншу сторону. |
round_pu | number | Сума округлення яке було прийняте в більшу сторону. |
round_md | number | Сума округлення яке було видано в меншу сторону. |
round_mu | number | Сума округлення яке було видано в більшу сторону. |
Структура масива об'єктів info.money
(Масив з інформацією по підсумкам з операцій внесення/винесення коштів).
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Код типу оплати. Згідно кодів типів оплат для чеку. |
name | string | Назва виду оплати. |
sum_p | number | Сума за видом оплати по внесенням. |
sum_m | number | Сума за видом оплати по винесенням. |
round_pd | number | Сума округлення яке було прийняте в меншу сторону. Для внесення/видачі завжди дорівнює 0. |
round_pu | number | Сума округлення яке було прийняте в більшу сторону. Для внесення/видачі завжди дорівнює 0. |
round_md | number | Сума округлення яке було видано в меншу сторону. Для внесення/видачі завжди дорівнює 0. |
round_mu | number | Сума округлення яке було видано в більшу сторону. Для внесення/видачі завжди дорівнює 0. |
Структура масива об'єктів info.cash
(Масив з інформацією по підсумкам з операцій видачі коштів держателям ЕПЗ).
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Код типу оплати. Згідно кодів типів оплат для чеку. |
name | string | Назва виду оплати. Наразі для чеків видачі готівки тільки "Картка". |
sum_p | number | Для чеків видачі готівки держателям ЕПЗ завжди 0. |
sum_m | number | Загальна сума виданих коштів за видом оплати. |
round_pd | number | Для чеків видачі готівки держателям ЕПЗ завжди дорівнює 0. |
round_pu | number | Для чеків видачі готівки держателям ЕПЗ завжди дорівнює 0. |
round_md | number | Для чеків видачі готівки держателям ЕПЗ завжди дорівнює 0. |
round_mu | number | Сума комісії по чекам видачі готівки держателям ЕПЗ. |
Структура об'єкта info.receipt
(Підсумки по кількості чеків за зміну).
Тег | Тип json даних | Зміст |
---|---|---|
last_docno_p | number | Останній локальний номер чеку на продаж за зміну. |
last_docno_m | number | Останній локальний номер чеку повернення за зміну. |
count_14 | number | Кількість чеків видачі готівки держателям ЕПЗ за зміну. |
count_p | number | Кількість чеків на продаж за зміну. |
count_m | number | Кількість чеків повернення за зміну. |
Структура об'єкта info.summary
(Загальні підсумки по обороту, податків та знижкам з продажу та повернення за зміну).
Тег | Тип json даних | Зміст |
---|---|---|
base_p | number | Загальних оборот по всім податковим групам по чекам на продаж без урахування заокруглення. |
base_m | number | Загальних оборот по всім податковим групам по чекам повернення без урахування заокруглення. |
taxex_p | number | Загальних оборот по всім додатковим зборам по податкових групах по чекам на продаж. |
taxex_m | number | Загальних оборот по всім додатковим зборам по податкових групах по чекам повернення. |
disc_p | number | Загальна знижка по чекам продажу. |
disc_m | number | Загальна знижка по чекам повернення. |
calc_p | number | Загальних оборот по всім податковим групам по чекам на продаж з урахуванням заокруглення. |
calc_m | number | Загальних оборот по всім податковим групам по чекам повернення з урахуванням заокруглення. |
Структура об'єкта info.lastcheck
(Об'єкт із даними про останній фіскальний чек в зміні(продаж, повернення, видача коштів держателям ЕПЗ)).
Тег | Тип json даних | Зміст |
---|---|---|
packnum | number | Номер пакету чеку. Загальна нумерація для всіх пакетів(в даному випадку фіскальних чеків) що відправлені в ДПС. |
docnum | number | Номер чеку з зміні. |
fisnum | string | Фіскальний номер чеку. |
packtype | number | Тип чеку. 0 - чек на продаж. 1 - чек повернення. 14 - чек видачі готівки держателям ЕПЗ |
Структура об'єкта info.billing
(Об'єкт з інформацією по оплаті тарифу за ПРРО).
Тег | Тип json даних | Зміст |
---|---|---|
paid_date_to | string | Дата закінчення оплати по ПРРО в форматі YYYYMMDDHHMMSS. Час закінчення тарифу завжди 03:00. |
enough_to_renew_subscription | number | Параметр що визначає чи є кошти на рахунку для автоматичного продовження тарифу. 1 - В наявності, підписка на ПРРО продовжиться автоматично після закінчення терміну дії поточної. 2 - Відсутні, ПРРО при закінченні тарифу не зможе продовжувати видавати чеки. 0 - Не вдалось визначити. Не вистачає коштів для активації усіх ПРРО в день деактивації по компанії. ПРРО може не активуватись автоматично якщо кошти будуть списані з балансу іншим ПРРО |
Структура об'єкта info.printheader
(Об'єкт з інформацією для друку.)
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. ососби |
shopname | number | Назва торгової точки |
shopad | string | Повна адреса торгової точки |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН |
dt | string | Дата та час відкриття зміни в форматі YYYY-MM-DD HH:MM:SS |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
fisid | string | Фіскальний номер ПРРО |
manuf | string | Завжди "Вчасно.Каса" |
cashier | string | Інформація про касира. Те ж що передано в запиті |
task | number | Тип завдання. Те ж значення що в запиті. |
Структура масива об'єктів warnings
(Масив об'єктів з кодами та текстом про статус роботи ПРРО.)
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
{
"info": {
"isoffline": false,
"taxes": [
{
"gr_code": 6,
"base_sum_p": 241.16,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "Без ПДВ + акциз 5%",
"tax_lit": "Ж",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "Акцизний податок 5% Ж",
"ex_percent": 5,
"ex_sum_p": 11.48,
"ex_sum_m": 1.9
},
{
"gr_code": 4,
"base_sum_p": 140.6,
"base_sum_m": 40,
"tax_name": "ПДВ_В",
"tax_fname": "ПДВ 7%",
"tax_lit": "В",
"tax_percent": 7,
"tax_sum_p": 9.2,
"tax_sum_m": 2.62,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 5,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "ПДВ 0%",
"tax_lit": "Е",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 8,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "ПДВ_И",
"tax_fname": "ПДВ 20% + ПФ 7.5%",
"tax_lit": "ИК",
"tax_percent": 20,
"tax_sum_p": 6.27,
"tax_sum_m": 6.27,
"ex_name": "Пенс.Фонд 7,5% К",
"ex_percent": 7.5,
"ex_sum_p": 2.35,
"ex_sum_m": 2.35
},
{
"gr_code": 1,
"base_sum_p": 80.24,
"base_sum_m": 40,
"tax_name": "ПДВ_А",
"tax_fname": "ПДВ 20%",
"tax_lit": "А",
"tax_percent": 20,
"tax_sum_p": 13.37,
"tax_sum_m": 6.67,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 2,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "Без ПДВ",
"tax_lit": "Б",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 9,
"base_sum_p": 4200,
"base_sum_m": 4200,
"tax_name": "ПДВ_Л",
"tax_fname": "ПДВ 14%",
"tax_lit": "Л",
"tax_percent": 14,
"tax_sum_p": 515.79,
"tax_sum_m": 515.79,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 3,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "ПДВ_Г",
"tax_fname": "ПДВ 20% + акциз 5%",
"tax_lit": "ГД",
"tax_percent": 20,
"tax_sum_p": 6.35,
"tax_sum_m": 6.35,
"ex_name": "Акцизний податок 5% Д",
"ex_percent": 5,
"ex_sum_p": 1.9,
"ex_sum_m": 1.9
},
{
"gr_code": 10,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "ПДФО 18%",
"tax_fname": "ПДФО 18% Військовий збір 1.5%",
"tax_lit": "М",
"tax_percent": 29.5082,
"tax_sum_p": 8.94,
"tax_sum_m": 8.94,
"ex_name": "ВЗ 1,5%",
"ex_percent": 2.459016,
"ex_sum_p": 0.75,
"ex_sum_m": 0.75
},
{
"gr_code": 7,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "Не є об`єктом ПДВ",
"tax_lit": "З",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
}
],
"pays": [
{
"type": 6,
"name": "Сертифікат",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 4,
"name": "Післясплата",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 5,
"name": "Кредит",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 8,
"name": "Чек",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 2,
"name": "Картка",
"sum_p": 456.5,
"sum_m": 456.5,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 1,
"name": "Безготівка",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 0,
"name": "Готівка",
"sum_p": 1710,
"sum_m": 1368,
"round_pd": 0,
"round_pu": 0.5,
"round_md": 0,
"round_mu": 0.5
},
{
"type": 3,
"name": "Передплата",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
}
],
"money": [
{
"type": 0,
"name": "Готівка",
"sum_p": 232.52,
"sum_m": 132.52,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
}
],
"cash": [
{
"type": 2,
"name": "Картка",
"sum_p": 0,
"sum_m": 100,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 1.01
}
],
"receipt": {
"last_docno_p": 9,
"last_docno_m": 1,
"count_14": 1,
"count_p": 9,
"count_m": 1
},
"summary": {
"base_p": 4902,
"base_m": 4560,
"taxex_p": 576.4,
"taxex_m": 553.54,
"disc_p": 74.2,
"disc_m": 64.2,
"calc_p": 4902.5,
"calc_m": 4560.5
},
"lastcheck": {
"packnum": 4247,
"docnum": 1,
"fisnum": "TEST_NBrQIwTb1S-0GQ",
"packtype": 0
},
"reports": [],
"dt": "23-07-2023 21:49:53",
"fisid": "3",
"docno": "538",
"doccode": "TEST_kBieBOiGn1lbpQ",
"isprint": 0,
"ispay": 0,
"cashier": "API",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 342,
"safe_start_shift": 0,
"task": 10,
"dtype": 0,
"shift_link": 536,
"shift_prev_link": 535,
"vacant_off_nums": -1,
"dataid": 0,
"devinfo": "",
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
},
"printheader": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"dt": "23-07-2023 21:49:53",
"isOffline": false,
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "API",
"task": 11
}
},
"ver": 6,
"source": "DM_API",
"device": "postgres1",
"tag": "169F4857-5FC6-46C2-853D-E71928817326",
"task_status": 1,
"type": 1,
"task": 11,
"dt": "20230723214953",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Копія Z-звіту за виключенням того що виконання не закриває зміну та не відправляє даних до ДПС.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. |
+ |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для закриття зміни по ПРРО завжди 11 | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "test1",
"tag": "",
"type": 1,
"fiscal": {
"task": 10,
"cashier": "API"
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання: 1 - завдання виконано успішно; 3 - помилка при виконанні завдання. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для відкриття зміни завжди 0 |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 2 - Помилка + колізія. Виправлення колізії відбувається автоматично при відправці будь-якого наступного завдання, але для збереження транзакційності рекомендується виконати повтор останнього завдання з тим же tag. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
aq_errortxt | string | Текст з описом помилки при проведенні офлайнових чеків. Повертаєтсья лише у випадку знаходження ПРРО в режимі офлайн та помилки при проведенні офлайнових чеків. |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
isoffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
taxes | array | Масив з інформацією по підсумкам з податків у розрізі податкових груп. |
pays | array | Масив з інформацією по підсумкам з оплат у розрізі видів оплат. |
money | array | Масив з інформацією по підсумкам з операцій внесення/винесення коштів. |
cash | array | Масив з інформацією по підсумкам з операцій видачі коштів держателям ЕПЗ. |
receipt | object | Підсумки по кількості чеків за зміну. |
summary | object | Загальні підсумки по обороту, податків та знижкам з продажу та повернення за зміну. |
lastcheck | object | Об'єкт із даними про останній фіскальний чек в зміні(продаж, повернення, видача коштів держателям ЕПЗ). |
reports | array | Масив інформації про кожен звіт, який увійшов до збірного звіту. Для закриття зміни масив завжди порожній. |
dt | string | Дата і час на чеку що був відправлений в ДПС. Формат: DD-MM-YYYY HH:MM:SS. |
fisid | string | Фіскальний номер ПРРО. |
docno | string | Номер поточного Z-звіту. Для X-звіту завжди порожнє значення. |
doccode | string | Фіскальний номер чеку. Для X-звіту завжди порожнє значення. |
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. Для закриття зміни завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
userdata1 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata2 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
userdata3 | string | Користувацька інформація що була передана в запиті. Використовується для відображення інформації в чеку у разі використання користувацьких друкованих форм. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер Z-звіту. Цей номер буде присвоєно Z-звіту у разі його виконання. |
shift_prev_link | number | Номер попереднього Z-звіту(перед поточним). |
vacant_off_nums | number | Кількість доступних офлайн номерів. Якщо ПРРО знаходиться в режимі онлайн значення буде -1 |
dataid | number | Номер пакету. Загальна нумерація для всіх пакетів що відправлені в ДПС |
devinfo | string | Наразі завжди порожнє. |
billing | object | Об'єкт з інформацією по оплаті тарифу за ПРРО |
printheader | object | Об'єкт з інформацією для друку. |
Структура масива об'єктів info.taxes
(Масив з інформацією по підсумкам з податків у розрізі податкових груп).
Тег | Тип json даних | Зміст |
---|---|---|
gr_code | number | Код податкової групи. Згідно кодів податкових груп для товарів в чеку. |
base_sum_p | number | База оподаткування по чекам на продаж. Включає в себе податок та додатковий збір(акциз, військовий збір і тд.) |
base_sum_m | number | База оподаткування по чекам повернення. Включає в себе податок та додатковий збір(акциз, військовий збір і тд.) |
tax_name | string | Коротка назва податку. |
tax_fname | string | Повна назва податку. |
tax_lit | string | Буква податку. Якщо податок має додатковий збір буде дві букви. |
tax_percent | number | Ставка податку(у %). |
tax_sum_p | number | Сума податку по чекам на продаж(2 знаки після коми). |
tax_sum_m | number | Сума податку по чекам повернення(2 знаки після коми). |
ex_name | string | Назва додаткового збору(акциз, військовий збір і тд.) до основного податку. |
ex_percent | number | Ставка додаткового збору до податку(у %). |
ex_sum_p | number | Сума додаткового збору до податку по чекам на продаж(2 знаки після коми). |
ex_sum_m | number | Сума додаткового збору до податку по чекам повернення(2 знаки після коми). |
Структура масива об'єктів info.pays
(Масив з інформацією по підсумкам з оплат у розрізі видів оплат).
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Код типу оплати. Згідно кодів типів оплат для чеку. |
name | string | Назва виду оплати. |
sum_p | number | Сума за видом оплати по чекам продажу. |
sum_m | number | Сума за видом оплати по чекам повернення. |
round_pd | number | Сума округлення яке було прийняте в меншу сторону. |
round_pu | number | Сума округлення яке було прийняте в більшу сторону. |
round_md | number | Сума округлення яке було видано в меншу сторону. |
round_mu | number | Сума округлення яке було видано в більшу сторону. |
Структура масива об'єктів info.money
(Масив з інформацією по підсумкам з операцій внесення/винесення коштів).
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Код типу оплати. Згідно кодів типів оплат для чеку. |
name | string | Назва виду оплати. |
sum_p | number | Сума за видом оплати по внесенням. |
sum_m | number | Сума за видом оплати по винесенням. |
round_pd | number | Сума округлення яке було прийняте в меншу сторону. Для внесення/видачі завжди дорівнює 0. |
round_pu | number | Сума округлення яке було прийняте в більшу сторону. Для внесення/видачі завжди дорівнює 0. |
round_md | number | Сума округлення яке було видано в меншу сторону. Для внесення/видачі завжди дорівнює 0. |
round_mu | number | Сума округлення яке було видано в більшу сторону. Для внесення/видачі завжди дорівнює 0. |
Структура масива об'єктів info.cash
(Масив з інформацією по підсумкам з операцій видачі коштів держателям ЕПЗ).
Тег | Тип json даних | Зміст |
---|---|---|
type | number | Код типу оплати. Згідно кодів типів оплат для чеку. |
name | string | Назва виду оплати. Наразі для чеків видачі готівки тільки "Картка". |
sum_p | number | Для чеків видачі готівки держателям ЕПЗ завжди 0. |
sum_m | number | Загальна сума виданих коштів за видом оплати. |
round_pd | number | Для чеків видачі готівки держателям ЕПЗ завжди дорівнює 0. |
round_pu | number | Для чеків видачі готівки держателям ЕПЗ завжди дорівнює 0. |
round_md | number | Для чеків видачі готівки держателям ЕПЗ завжди дорівнює 0. |
round_mu | number | Сума комісії по чекам видачі готівки держателям ЕПЗ. |
Структура об'єкта info.receipt
(Підсумки по кількості чеків за зміну).
Тег | Тип json даних | Зміст |
---|---|---|
last_docno_p | number | Останній локальний номер чеку на продаж за зміну. |
last_docno_m | number | Останній локальний номер чеку повернення за зміну. |
count_14 | number | Кількість чеків видачі готівки держателям ЕПЗ за зміну. |
count_p | number | Кількість чеків на продаж за зміну. |
count_m | number | Кількість чеків повернення за зміну. |
Структура об'єкта info.summary
(Загальні підсумки по обороту, податків та знижкам з продажу та повернення за зміну).
Тег | Тип json даних | Зміст |
---|---|---|
base_p | number | Загальних оборот по всім податковим групам по чекам на продаж без урахування заокруглення. |
base_m | number | Загальних оборот по всім податковим групам по чекам повернення без урахування заокруглення. |
taxex_p | number | Загальних оборот по всім додатковим зборам по податкових групах по чекам на продаж. |
taxex_m | number | Загальних оборот по всім додатковим зборам по податкових групах по чекам повернення. |
disc_p | number | Загальна знижка по чекам продажу. |
disc_m | number | Загальна знижка по чекам повернення. |
calc_p | number | Загальних оборот по всім податковим групам по чекам на продаж з урахуванням заокруглення. |
calc_m | number | Загальних оборот по всім податковим групам по чекам повернення з урахуванням заокруглення. |
Структура об'єкта info.lastcheck
(Об'єкт із даними про останній фіскальний чек в зміні(продаж, повернення, видача коштів держателям ЕПЗ)).
Тег | Тип json даних | Зміст |
---|---|---|
packnum | number | Номер пакету чеку. Загальна нумерація для всіх пакетів(в даному випадку фіскальних чеків) що відправлені в ДПС. |
docnum | number | Номер чеку з зміні. |
fisnum | string | Фіскальний номер чеку. |
packtype | number | Тип чеку. 0 - чек на продаж. 1 - чек повернення. 14 - чек видачі готівки держателям ЕПЗ |
Структура об'єкта info.billing
(Об'єкт з інформацією по оплаті тарифу за ПРРО).
Тег | Тип json даних | Зміст |
---|---|---|
paid_date_to | string | Дата закінчення оплати по ПРРО в форматі YYYYMMDDHHMMSS. Час закінчення тарифу завжди 03:00. |
enough_to_renew_subscription | number | Параметр що визначає чи є кошти на рахунку для автоматичного продовження тарифу. 1 - В наявності, підписка на ПРРО продовжиться автоматично після закінчення терміну дії поточної. 2 - Відсутні, ПРРО при закінченні тарифу не зможе продовжувати видавати чеки. 0 - Не вдалось визначити. Не вистачає коштів для активації усіх ПРРО в день деактивації по компанії. ПРРО може не активуватись автоматично якщо кошти будуть списані з балансу іншим ПРРО |
Структура об'єкта info.printheader
(Об'єкт з інформацією для друку.)
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. ососби |
shopname | number | Назва торгової точки |
shopad | string | Повна адреса торгової точки |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН |
dt | string | Дата та час відкриття зміни в форматі YYYY-MM-DD HH:MM:SS |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
fisid | string | Фіскальний номер ПРРО |
manuf | string | Завжди "Вчасно.Каса" |
cashier | string | Інформація про касира. Те ж що передано в запиті |
task | number | Тип завдання. Те ж значення що в запиті. |
Структура масива об'єктів warnings
(Масив об'єктів з кодами та текстом про статус роботи ПРРО.)
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
{
"info": {
"isoffline": false,
"taxes": [
{
"gr_code": 6,
"base_sum_p": 241.16,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "Без ПДВ + акциз 5%",
"tax_lit": "Ж",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "Акцизний податок 5% Ж",
"ex_percent": 5,
"ex_sum_p": 11.48,
"ex_sum_m": 1.9
},
{
"gr_code": 4,
"base_sum_p": 140.6,
"base_sum_m": 40,
"tax_name": "ПДВ_В",
"tax_fname": "ПДВ 7%",
"tax_lit": "В",
"tax_percent": 7,
"tax_sum_p": 9.2,
"tax_sum_m": 2.62,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 5,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "ПДВ 0%",
"tax_lit": "Е",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 8,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "ПДВ_И",
"tax_fname": "ПДВ 20% + ПФ 7.5%",
"tax_lit": "ИК",
"tax_percent": 20,
"tax_sum_p": 6.27,
"tax_sum_m": 6.27,
"ex_name": "Пенс.Фонд 7,5% К",
"ex_percent": 7.5,
"ex_sum_p": 2.35,
"ex_sum_m": 2.35
},
{
"gr_code": 1,
"base_sum_p": 80.24,
"base_sum_m": 40,
"tax_name": "ПДВ_А",
"tax_fname": "ПДВ 20%",
"tax_lit": "А",
"tax_percent": 20,
"tax_sum_p": 13.37,
"tax_sum_m": 6.67,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 2,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "Без ПДВ",
"tax_lit": "Б",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 9,
"base_sum_p": 4200,
"base_sum_m": 4200,
"tax_name": "ПДВ_Л",
"tax_fname": "ПДВ 14%",
"tax_lit": "Л",
"tax_percent": 14,
"tax_sum_p": 515.79,
"tax_sum_m": 515.79,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 3,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "ПДВ_Г",
"tax_fname": "ПДВ 20% + акциз 5%",
"tax_lit": "ГД",
"tax_percent": 20,
"tax_sum_p": 6.35,
"tax_sum_m": 6.35,
"ex_name": "Акцизний податок 5% Д",
"ex_percent": 5,
"ex_sum_p": 1.9,
"ex_sum_m": 1.9
},
{
"gr_code": 10,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "ПДФО 18%",
"tax_fname": "ПДФО 18% Військовий збір 1.5%",
"tax_lit": "М",
"tax_percent": 29.5082,
"tax_sum_p": 8.94,
"tax_sum_m": 8.94,
"ex_name": "ВЗ 1,5%",
"ex_percent": 2.459016,
"ex_sum_p": 0.75,
"ex_sum_m": 0.75
},
{
"gr_code": 7,
"base_sum_p": 40,
"base_sum_m": 40,
"tax_name": "",
"tax_fname": "Не є об`єктом ПДВ",
"tax_lit": "З",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
}
],
"pays": [
{
"type": 6,
"name": "Сертифікат",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 4,
"name": "Післясплата",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 5,
"name": "Кредит",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 8,
"name": "Чек",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 2,
"name": "Картка",
"sum_p": 456.5,
"sum_m": 456.5,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 1,
"name": "Безготівка",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 0,
"name": "Готівка",
"sum_p": 1710,
"sum_m": 1368,
"round_pd": 0,
"round_pu": 0.5,
"round_md": 0,
"round_mu": 0.5
},
{
"type": 3,
"name": "Передплата",
"sum_p": 456,
"sum_m": 456,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
}
],
"money": [
{
"type": 0,
"name": "Готівка",
"sum_p": 232.52,
"sum_m": 132.52,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
}
],
"cash": [
{
"type": 2,
"name": "Картка",
"sum_p": 0,
"sum_m": 100,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 1.01
}
],
"receipt": {
"last_docno_p": 9,
"last_docno_m": 1,
"count_14": 1,
"count_p": 9,
"count_m": 1
},
"summary": {
"base_p": 4902,
"base_m": 4560,
"taxex_p": 576.4,
"taxex_m": 553.54,
"disc_p": 74.2,
"disc_m": 64.2,
"calc_p": 4902.5,
"calc_m": 4560.5
},
"lastcheck": {
"packnum": 4247,
"docnum": 1,
"fisnum": "TEST_NBrQIwTb1S-0GQ",
"packtype": 0
},
"reports": [],
"dt": "23-07-2023 21:49:53",
"fisid": "3",
"docno": "",
"doccode": "",
"isprint": 0,
"ispay": 0,
"cashier": "API",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 342,
"safe_start_shift": 0,
"task": 10,
"dtype": 0,
"shift_link": 536,
"shift_prev_link": 535,
"vacant_off_nums": -1,
"dataid": 0,
"devinfo": "",
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
},
"printheader": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"dt": "23-07-2023 21:49:53",
"isOffline": false,
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "API",
"task": 10
}
},
"ver": 6,
"source": "DM_API",
"device": "postgres1",
"tag": "169F4857-5FC6-46C2-853D-E71928817326",
"task_status": 1,
"type": 1,
"task": 10,
"dt": "20230723214953",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Службовий звіт по ПРРО. Можна використовувати для перевірки коректності друку реквізитів зверху та знизу чеку та друку користувацької інформації. Інформація для друку передана в запиті може друкуватись на принтер або може бути отримана у вигляді потрібної друкованої форми(txt, img, pdf, doccmd).
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. |
+ |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для службового звіту завжди 5 | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
lines | array | Масив рядків нефіскальної інформації для відображення в даному типу чеку. | - |
Структура об'єктів масиву fiscal.lines
(Масив рядків нефіскальної інформації для відображення в даному типу чеку.)
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
qr_type | number | Передається у випадку необхідності друку code128, штрихкоду(ean13) або qr-коду. Інформація передана в тег "t" для даного об'єкту масиву буде закодована у відповідний тип. 1 - штрихкод(ean13); 2 - code128; 100 - qr-код. |
- |
t | string | Користувацька текстова інформація. Кожен об'єкт "t" в масиві "lines" рівний новому рядку. | - |
curl --location -g --request POST 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data-raw '{
"ver": 6,
"source": "API",
"device": "test1",
"tag": "",
"type": 1,
"need_pf_img": 2,
"fiscal": {
"task": 5,
"cashier": "API",
"lines": [
{
"t": "Тестовий рядок 1"
},
{
"t": "Тестовий рядок 2"
},
{
"t": "Тестовий рядок 3"
},
{
"qr_type": 1,
"t": "123456789012"
},
{
"qr_type": 2,
"t": "1234567890"
},
{
"qr_type": 100,
"t": "Test123"
}
]
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
info | object | Об'єкт із даними по конкретному завданню |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
tag | string | Мітка завдання для ідентифікації відповіді. Дорівнює тому ж значенню що прийшло в запиті. Якщо не було передано - автозгенероване значення в форматі uuid |
task_status | number | Значення статусу виконання завдання. Так як результат даного завдання не зберігається в БД значення буде завжди 0. |
type | number | Тип завдання. Дорівнює тому ж значенню що прийшло в запиті. |
task | number | Номер завдання. Дорівнює тому ж значенню що прийшло в запиті. Для даного звіту завжди 5. |
dt | string | Дата та час завершення виконання завдання в форматі: YYYYMMDDHHMMSS |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. 1 – Помилка при проведенні завдання, завдання не пройшло. Можна повторити. 3 - Помилка, потрібне коригування даних. Може бути помилка у відправлених в запиті даних або помилка в самому додатку яку потрібно вирішувати через техпідтримку. |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
warnings | array | Масив об'єктів виду {code: 0, wtxt:””} з кодами та текстом попереджень про статус роботи ПРРО. Рекомендовано відобразити касиру/оператору. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
isprint | number | Параметр друку. 0 - чек не було надруковано, 1 - чек надруковано. Для завдань по ендпоінту /dm/execute завжди 0. |
ispay | number | Параметр оплати по терміналу. 0 - запит на оплату на термінал не було надіслано, 1 - було проведено оплату по терміналу. Для завдань по ендпоінту /dm/execute завжди 0. |
cashier | string | Інформація про касира. Дорівнює тому ж значенню що в запиті якщо було передано. |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
task | number | Тип завдання. Те ж значення що в запиті. |
dtype | number | Тип ПРРО: 0 - тестовий 1 - фіскальний |
shift_link | number | Поточний номер зміни. Для службового звіту завжди 0. |
shift_prev_link | number | Номер останнього Z-звіту. Для службового звіту завжди 0. |
vacant_off_nums | number | Кількість доступних офлайн номерів. Для службового звіту завжди 0. |
dataid | number | Номер пакету. Для службового звіту завжди 0. |
printinfo | object | Об'єкт з інформацією для друку |
Структура об'єкта info.printinfo
Тег | Тип json даних | Зміст |
---|---|---|
name | string | Назва юр. ососби |
shopname | number | Назва торгової точки |
shopad | string | Повна адреса торгової точки |
vat_code | string | Номер платника податку, якщо юр. особа є платником. |
fis_code | string | Код ЄДРПОУ/ІНН |
goods | array | Для службового звіту масив завжди порожній. |
sum_0 | number | Для службового звіту завжди 0. |
sum_receipt | number | Для службового звіту завжди 0. |
sum_disc | number | Для службового звіту завжди 0. |
round | number | Для службового звіту завжди 0. |
pays | array | Для службового звіту масив завжди порожній. |
taxes | array | Для службового звіту масив завжди порожній. |
dt | string | Дата та час виконання завдання в форматі YYYY-MM-DD HH:MM:SS |
isOffline | boolean | Параметр офлайну. true - ПРРО знаходиться в офлайні. false - ПРРО працює в режимі онлайн. |
fisid | string | Фіскальний номер ПРРО. |
manuf | string | Завжди "Вчасно.Каса". |
cashier | string | Інформація про касира. Те ж що передано в запиті |
task | number | Тип завдання. Те ж значення що в запиті. |
fisdoctype | number | Тип документа. Для службового звіту завжди "Службовий звіт". |
safe | number | Поточний залишок готівки в касі. |
safe_start_shift | number | Залишок готівки в касі на початок зміни. Якщо передача залишку зі зміни в зміну вимкнена - завжди 0. |
crc32 | number | Для службового звіту завжди 0. |
Структура масива об'єктів warnings
Тег | Тип json даних | Зміст |
---|---|---|
code | number | Код попередження. |
wtxt | string | Текст попередження. Можливі варіанти разом з кодами: Code:3000; wtxt:'Здійснено автоматичний перехід в режим оффлайн', Code:3001; wtxt:'ПРРО знаходиться в режимі оффлайн більше 25 годин поспіль', Code:3002; wtxt:'Поточна зміна відкрита більше 20 годин тому', Code:3003; wtxt:'Поточна зміна відкрита більше 24 годин тому', Code:3004; wtxt:'Закінчується строк дії приватного ключа', Code:3005; wtxt:'Для роботи пакетного режиму не налаштовано термінал', Code:3006; wtxt:'Для роботи пакетного режиму не налаштовано принтер', |
{
"info": {
"printinfo": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"fis_code": "3680803756",
"goods": [],
"sum_0": 0,
"sum_receipt": 0,
"sum_disc": 0,
"sum_topay": 0,
"sum_topay_i": 0,
"round": 0,
"pays": [],
"taxes": [],
"dt": "23-07-2023 23:25:49",
"isOffline": false,
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "API",
"task": 5,
"fisdoctype": "Службовий звіт",
"safe": 0,
"safe_start_shift": 0,
"crc32": 0
},
"isprint": 1,
"ispay": 0,
"cashier": "API",
"safe": 0,
"safe_start_shift": 0,
"task": 0,
"dtype": 0,
"shift_link": 0,
"shift_prev_link": 0,
"vacant_off_nums": 0,
"dataid": 0,
"printheader": null,
"billing": null
},
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "1EAD0E5B-4789-4D53-BA7F-175795644AC1",
"task_status": 0,
"type": 1,
"task": 5,
"dt": "20230723232549",
"res": 0,
"res_action": 0,
"warnings": []
}
Зведений звіт по номерам Z-звітів. Відображає загальну суму продажів/повернень, внесень/винесень та видачі готівки, базу та суму оподаткування, суми по видам оплат, а також перелік всіх звітів з вказаного проміжку номерів.
Зведений звіт по датам Z-звітів. Аналогічний попередньому(task 12) але сортує дані по датам.
Приклад: У випадку якщо в запиті передати проміжок з 01.01.2023 по 01.02.2023 будуть вибрані всі Z-звіти з датою від 01.01.2023 по 31.01.2023 включно.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6 | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва ПРРО, створеного в ДМ. | + |
tag | string | Мітка завдання для ідентифікації відповіді (до якого завдання відноситься відповідь). Може бути довільним або порожнім. Якщо значення не передано або передано порожнє, ДМ у відповідь після виконання завдання поверне автозгенероване значення. Виконує роль ключа синхронізації у випадку розриву зв'язку чи необхідності отримати повторно інформацію по конкретному завданню. Використовується лише для фіскальних завдань по ПРРО. | - |
need_pf_img | number | Параметр необхідності повернути друковану форму в форматі PNG. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_image" в форматі base64 з метаданими data:image/png;base64 |
- |
need_pf_pdf | number | Параметр необхідності повернути друковану форму в форматі PDF. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_pdf" в форматі base64 з метаданими data:application/pdf;base64 |
- |
need_pf_txt | number | Параметр необхідності повернути друковану форму в текстовому форматі. 0 або відсутність параметру - буде використано загальне налаштування що встановлено методом /dm/vchasno-kasa/api/v1/settings 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_text" в форматі base64 з метаданими data:text/plain;charset=windows-1251;base64 |
- |
need_pf_doccmd | number | Параметр необхідності повернути друковану форму в форматі JSON, дані для прямого друку на принтер підключений в ДМ. 0 або відсутність параметру - не формувати 1 - не формувати. 2 - формувати. Друкована форма, у випадку формування, буде повернута у відповідь через tag "pf_doccmd" в форматі base64 без метаданих. |
- |
type | number | Тип завдання: 0 = пошук по tag-у вже виконаного завдання та повторне повернення результату. Якщо завдання з вказаним в запиті tag не буде знайдено фіскалізація не відбудеться. 1 = фіскальне завдання. |
+ |
fiscal | object | Об'єкт із даними для фіскальних завдань | + |
Структура об'єкта fiscal
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для зведеного звіту по номерам звітів - 12, по датам - 13 | + |
cashier | string | Інформація про касира. Може бути порожнім. | - |
n_from | number | Тільки для зведеного звіту по номерам (task 12). Початкове значення інтервалу номерів Z-звітів. | + |
n_to | number | Тільки для зведеного звіту по номерам (task 12). Кінцеве значення інтервалу номерів Z-звітів. | + |
dt_from | string | Тільки для зведеного звіту по датам (task 13). Початкова дата та час у форматі рядка: YYYYMMDDHHMMSS. | + |
dt_to | string | Тільки для зведеного звіту по датам (task 13). Кінцева дата та час у форматі рядка: YYYYMMDDHHMMSS. | + |
Зведений звіт по номерам z-звітів.
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "",
"type": 1,
"fiscal": {
"task": 12,
"n_from": 480,
"n_to": 490,
"cashier": "Постман"
}
}'
Зведений звіт по датам.
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "",
"type": 1,
"fiscal": {
"task": 13,
"dt_from": "20210708",
"dt_to": "20210710",
"cashier": "Постман"
}
}'
Зведений звіт по номерам z-звітів.
{
"info": {
"isoffline": false,
"taxes": [
{
"gr_code": 5,
"base_sum_p": 45,
"base_sum_m": 4,
"tax_name": "ПДВ Д не опод.",
"tax_fname": "ПДВ не опод.",
"tax_lit": "Д",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 12,
"base_sum_p": 1,
"base_sum_m": 0,
"tax_name": "",
"tax_fname": "Без ПДВ + акциз 5%",
"tax_lit": "Ж",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "Акцизний податок 5% Ж",
"ex_percent": 5,
"ex_sum_p": 0.05,
"ex_sum_m": 0
},
{
"gr_code": 8,
"base_sum_p": 15,
"base_sum_m": 0,
"tax_name": "ПДВ_И",
"tax_fname": "ПДВ 20% + ПФ 7.5%",
"tax_lit": "ИК",
"tax_percent": 20,
"tax_sum_p": 2.34,
"tax_sum_m": 0,
"ex_name": "Пенс.Фонд 7,5% К",
"ex_percent": 7.5,
"ex_sum_p": 0.89,
"ex_sum_m": 0
}
],
"pays": [
{
"type": 0,
"name": "Готівка",
"sum_p": 61,
"sum_m": 4,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
}
],
"money": [],
"cash": [],
"receipt": {
"last_docno_p": 1,
"last_docno_m": 0,
"count_14": 0,
"count_p": 22,
"count_m": 2
},
"summary": {
"base_p": 61,
"base_m": 4,
"taxex_p": 3.28,
"taxex_m": 0,
"disc_p": 23,
"disc_m": 0,
"calc_p": 61,
"calc_m": 4
},
"lastcheck": {
"packnum": 0,
"docnum": 0,
"fisnum": "",
"packtype": 0
},
"reports": [
{
"dt": "30-06-2023 11:22:32",
"docno": "480",
"doccode": "TEST_6cSZPZR-NjpM6Q",
"docsum": 2
},
{
"dt": "30-06-2023 11:51:51",
"docno": "481",
"doccode": "TEST_BwwMEy5Cx3RuNA",
"docsum": 2
},
{
"dt": "30-06-2023 11:52:18",
"docno": "482",
"doccode": "TEST_Y165fDNuV2Pr8Q",
"docsum": 0
},
{
"dt": "30-06-2023 12:11:39",
"docno": "483",
"doccode": "TEST_p-njvy26AjKWkA",
"docsum": 2
},
{
"dt": "04-07-2023 17:26:03",
"docno": "484",
"doccode": "TEST_onEj2sVG7gtbIQ",
"docsum": 2
},
{
"dt": "05-07-2023 13:11:27",
"docno": "485",
"doccode": "TEST_-g3_ohcgs2DNEA",
"docsum": 5
},
{
"dt": "05-07-2023 13:12:05",
"docno": "486",
"doccode": "TEST_QlYozFQZ6-_9nQ",
"docsum": 3
},
{
"dt": "06-07-2023 14:13:11",
"docno": "487",
"doccode": "TEST_FN86244YEQE-yw",
"docsum": 24
},
{
"dt": "06-07-2023 14:23:41",
"docno": "488",
"doccode": "TEST_2CwvsUMYdpVgog",
"docsum": 6
},
{
"dt": "06-07-2023 14:25:29",
"docno": "489",
"doccode": "TEST_Dl042YaOhIzYBw",
"docsum": 9
},
{
"dt": "06-07-2023 14:26:26",
"docno": "490",
"doccode": "TEST_Hu8imqmOqwfRnA",
"docsum": 6
}
],
"dt": "24-07-2023 00:21:14",
"fisid": "3",
"docno": "",
"doccode": "",
"isprint": 0,
"ispay": 0,
"cashier": "Постман",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 53,
"safe_start_shift": 0,
"task": 12,
"dtype": 0,
"shift_link": 480,
"shift_prev_link": 479,
"vacant_off_nums": -1,
"dataid": 4007,
"devinfo": "",
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
},
"n_from": 480,
"n_to": 490,
"printheader": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"dt": "24-07-2023 00:21:14",
"isOffline": false,
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "Постман",
"task": 12
}
},
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "1E8F61DC-5472-4004-9BAF-E59B25058A66",
"task_status": 1,
"type": 1,
"task": 12,
"dt": "20230724002114",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Зведений звіт по датам.
{
"info": {
"isoffline": false,
"taxes": [
{
"gr_code": 5,
"base_sum_p": 1028,
"base_sum_m": 187,
"tax_name": "",
"tax_fname": "ПДВ 0%",
"tax_lit": "Е",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 12,
"base_sum_p": 1,
"base_sum_m": 0,
"tax_name": "",
"tax_fname": "Без ПДВ + акциз 5%",
"tax_lit": "Ж",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "Акцизний податок 5% Ж",
"ex_percent": 5,
"ex_sum_p": 0.05,
"ex_sum_m": 0
},
{
"gr_code": 8,
"base_sum_p": 221,
"base_sum_m": 80,
"tax_name": "ПДВ_И",
"tax_fname": "ПДВ 20% + ПФ 7.5%",
"tax_lit": "ИК",
"tax_percent": 20,
"tax_sum_p": 34.64,
"tax_sum_m": 12.54,
"ex_name": "Пенс.Фонд 7,5% К",
"ex_percent": 7.5,
"ex_sum_p": 13.01,
"ex_sum_m": 4.7
},
{
"gr_code": 6,
"base_sum_p": 903.46,
"base_sum_m": 80,
"tax_name": "",
"tax_fname": "Без ПДВ + акциз 5%",
"tax_lit": "Ж",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "Акцизний податок 5% Ж",
"ex_percent": 5,
"ex_sum_p": 43.02,
"ex_sum_m": 3.8
},
{
"gr_code": 4,
"base_sum_p": 551.1,
"base_sum_m": 80,
"tax_name": "ПДВ_В",
"tax_fname": "ПДВ 7%",
"tax_lit": "В",
"tax_percent": 7,
"tax_sum_p": 36.09,
"tax_sum_m": 5.24,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 1,
"base_sum_p": 380.6,
"base_sum_m": 80,
"tax_name": "ПДВ_А",
"tax_fname": "ПДВ 20%",
"tax_lit": "А",
"tax_percent": 20,
"tax_sum_p": 63.44,
"tax_sum_m": 13.34,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 2,
"base_sum_p": 4400,
"base_sum_m": 80,
"tax_name": "",
"tax_fname": "Без ПДВ",
"tax_lit": "Б",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 9,
"base_sum_p": 21000,
"base_sum_m": 8400,
"tax_name": "ПДВ_Л",
"tax_fname": "ПДВ 14%",
"tax_lit": "Л",
"tax_percent": 14,
"tax_sum_p": 2578.95,
"tax_sum_m": 1031.58,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
},
{
"gr_code": 3,
"base_sum_p": 200,
"base_sum_m": 80,
"tax_name": "ПДВ_Г",
"tax_fname": "ПДВ 20% + акциз 5%",
"tax_lit": "ГД",
"tax_percent": 20,
"tax_sum_p": 31.75,
"tax_sum_m": 12.7,
"ex_name": "Акцизний податок 5% Д",
"ex_percent": 5,
"ex_sum_p": 9.51,
"ex_sum_m": 3.8
},
{
"gr_code": 10,
"base_sum_p": 200,
"base_sum_m": 80,
"tax_name": "ПДФО 18%",
"tax_fname": "ПДФО 18% Військовий збір 1.5%",
"tax_lit": "М",
"tax_percent": 29.5082,
"tax_sum_p": 44.71,
"tax_sum_m": 17.88,
"ex_name": "ВЗ 1,5%",
"ex_percent": 2.459016,
"ex_sum_p": 3.74,
"ex_sum_m": 1.5
},
{
"gr_code": 7,
"base_sum_p": 200,
"base_sum_m": 80,
"tax_name": "",
"tax_fname": "Не є об`єктом ПДВ",
"tax_lit": "З",
"tax_percent": 0,
"tax_sum_p": 0,
"tax_sum_m": 0,
"ex_name": "",
"ex_percent": 0,
"ex_sum_p": 0,
"ex_sum_m": 0
}
],
"pays": [
{
"type": 0,
"name": "Готівка",
"sum_p": 12879,
"sum_m": 2738,
"round_pd": 0,
"round_pu": 2.54,
"round_md": 0,
"round_mu": 1
},
{
"type": 2,
"name": "Картка",
"sum_p": 2528.7,
"sum_m": 1018,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 6,
"name": "Сертифікат",
"sum_p": 2280,
"sum_m": 912,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 4,
"name": "Післясплата",
"sum_p": 2280,
"sum_m": 912,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 5,
"name": "Кредит",
"sum_p": 2280,
"sum_m": 912,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 8,
"name": "Чек",
"sum_p": 2280,
"sum_m": 912,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 1,
"name": "Безготівка",
"sum_p": 2280,
"sum_m": 912,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 3,
"name": "Передплата",
"sum_p": 2280,
"sum_m": 912,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
}
],
"money": [
{
"type": 0,
"name": "Готівка",
"sum_p": 1395.12,
"sum_m": 265.04,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 0
},
{
"type": 2,
"name": "Картка",
"sum_p": 0,
"sum_m": 10,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 2
},
{
"type": 2,
"name": "Картка",
"sum_p": 0,
"sum_m": 100,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 1.01
},
{
"type": 2,
"name": "Картка",
"sum_p": 0,
"sum_m": 100,
"round_pd": 0,
"round_pu": 0,
"round_md": 0,
"round_mu": 1.01
}
],
"cash": [],
"receipt": {
"last_docno_p": 1,
"last_docno_m": 1,
"count_14": 0,
"count_p": 83,
"count_m": 15
},
"summary": {
"base_p": 29085.16,
"base_m": 9227,
"taxex_p": 2858.91,
"taxex_m": 1107.08,
"disc_p": 1253.2,
"disc_m": 97.2,
"calc_p": 29087.7,
"calc_m": 9228
},
"lastcheck": {
"packnum": 0,
"docnum": 0,
"fisnum": "",
"packtype": 0
},
"reports": [
{
"dt": "04-07-2023 17:26:03",
"docno": "484",
"doccode": "TEST_onEj2sVG7gtbIQ",
"docsum": 2
},
{
"dt": "05-07-2023 13:11:27",
"docno": "485",
"doccode": "TEST_-g3_ohcgs2DNEA",
"docsum": 5
},
{
"dt": "05-07-2023 13:12:05",
"docno": "486",
"doccode": "TEST_QlYozFQZ6-_9nQ",
"docsum": 3
},
{
"dt": "06-07-2023 14:13:11",
"docno": "487",
"doccode": "TEST_FN86244YEQE-yw",
"docsum": 24
},
{
"dt": "06-07-2023 14:23:41",
"docno": "488",
"doccode": "TEST_2CwvsUMYdpVgog",
"docsum": 6
},
{
"dt": "06-07-2023 14:25:29",
"docno": "489",
"doccode": "TEST_Dl042YaOhIzYBw",
"docsum": 9
},
{
"dt": "06-07-2023 14:26:26",
"docno": "490",
"doccode": "TEST_Hu8imqmOqwfRnA",
"docsum": 6
},
{
"dt": "06-07-2023 14:26:48",
"docno": "491",
"doccode": "TEST_pzzE97wAsLRdvg",
"docsum": 0
},
{
"dt": "06-07-2023 14:28:05",
"docno": "492",
"doccode": "TEST_SLRrtaRZCEhXZA",
"docsum": 6
},
{
"dt": "07-07-2023 11:39:54",
"docno": "493",
"doccode": "TEST_9A5kM52Jcm2WTg",
"docsum": 6
},
{
"dt": "07-07-2023 11:42:46",
"docno": "494",
"doccode": "TEST_7t1Ad3JqF777EQ",
"docsum": 3
},
{
"dt": "07-07-2023 11:43:55",
"docno": "495",
"doccode": "TEST_p71h-DkOZD33LA",
"docsum": 0
},
{
"dt": "07-07-2023 11:44:22",
"docno": "496",
"doccode": "TEST__5EccplFSObWgQ",
"docsum": 3
},
{
"dt": "11-07-2023 13:11:11",
"docno": "497",
"doccode": "TEST_1IUDTPF7W12Xww",
"docsum": 3
},
{
"dt": "13-07-2023 12:42:37",
"docno": "498",
"doccode": "TEST_FhYiLR_F-Sg8Uw",
"docsum": 0
},
{
"dt": "14-07-2023 16:02:08",
"docno": "499",
"doccode": "TEST_yojWFYByX-Td0Q",
"docsum": 3
},
{
"dt": "16-07-2023 21:00:58",
"docno": "500",
"doccode": "TEST_gwjgnoGlClLo1Q",
"docsum": 0
},
{
"dt": "16-07-2023 23:24:14",
"docno": "501",
"doccode": "TEST_l4kAnwwEVf2wgA",
"docsum": 8800.16
},
{
"dt": "17-07-2023 12:40:26",
"docno": "502",
"doccode": "TEST_KYRTzUDvG05Fmg",
"docsum": 4560
},
{
"dt": "17-07-2023 14:44:55",
"docno": "503",
"doccode": "TEST_U9J5o0TA1Leu3g",
"docsum": 0
},
{
"dt": "17-07-2023 14:47:46",
"docno": "504",
"doccode": "TEST_y6YHzsvuVJs7eQ",
"docsum": 0
},
{
"dt": "17-07-2023 15:00:08",
"docno": "505",
"doccode": "TEST_M-w6rdgQ6fSSbw",
"docsum": 9120
},
{
"dt": "18-07-2023 10:13:56",
"docno": "506",
"doccode": "TEST_UpeUKzleqLHtag",
"docsum": 0
},
{
"dt": "18-07-2023 12:23:59",
"docno": "507",
"doccode": "TEST_eWP7P-T5odZBHQ",
"docsum": 3
},
{
"dt": "18-07-2023 15:00:19",
"docno": "508",
"doccode": "TEST_thqnqHEjY5d9Dw",
"docsum": 0
},
{
"dt": "20-07-2023 15:13:26",
"docno": "509",
"doccode": "TEST_INEitBzY8cq7Tw",
"docsum": 72
},
{
"dt": "21-07-2023 15:00:03",
"docno": "510",
"doccode": "TEST_YONTyTQQQso7_g",
"docsum": 546
},
{
"dt": "22-07-2023 15:00:30",
"docno": "511",
"doccode": "TEST_WVOY_ZXutoFoRw",
"docsum": 0
},
{
"dt": "23-07-2023 16:48:59",
"docno": "512",
"doccode": "TEST_zVt6DdMN_gfb3Q",
"docsum": 30
},
{
"dt": "23-07-2023 16:50:58",
"docno": "513",
"doccode": "TEST_9mi_uhrpH_1wDw",
"docsum": 30
},
{
"dt": "23-07-2023 16:57:39",
"docno": "514",
"doccode": "TEST_7s3APzwNFBJ9yQ",
"docsum": 30
},
{
"dt": "23-07-2023 17:01:15",
"docno": "515",
"doccode": "TEST_Jy4tRQEnj1L78A",
"docsum": 30
},
{
"dt": "23-07-2023 17:01:44",
"docno": "516",
"doccode": "TEST_V2tChD2lmLOFmw",
"docsum": 30
},
{
"dt": "23-07-2023 17:05:20",
"docno": "517",
"doccode": "TEST_12NbU2JiYAHc7Q",
"docsum": 30
},
{
"dt": "23-07-2023 17:07:56",
"docno": "518",
"doccode": "TEST_IvKjMldhYk796Q",
"docsum": 30
},
{
"dt": "23-07-2023 17:11:22",
"docno": "519",
"doccode": "TEST_rw_mH6yyDCLlUQ",
"docsum": 47
},
{
"dt": "23-07-2023 17:14:58",
"docno": "520",
"doccode": "TEST_E5XWFsdCZMgZBQ",
"docsum": 17
},
{
"dt": "23-07-2023 17:15:12",
"docno": "521",
"doccode": "TEST_d81DGGlpRHaADg",
"docsum": 17
},
{
"dt": "23-07-2023 17:19:24",
"docno": "522",
"doccode": "TEST_Ha7ON_jsFwF3qw",
"docsum": 17
},
{
"dt": "23-07-2023 17:21:59",
"docno": "523",
"doccode": "TEST_rMo5T7ER7u6vXw",
"docsum": 17
},
{
"dt": "23-07-2023 17:24:07",
"docno": "524",
"doccode": "TEST_rN4BaWZXv0_7mA",
"docsum": 17
},
{
"dt": "23-07-2023 17:25:57",
"docno": "525",
"doccode": "TEST_8QB3Yr5G4LEhtQ",
"docsum": 34
},
{
"dt": "23-07-2023 17:27:43",
"docno": "526",
"doccode": "TEST_l06b9oxo484zZw",
"docsum": 34
},
{
"dt": "23-07-2023 17:32:25",
"docno": "527",
"doccode": "TEST_8XYklwVOe7BlOA",
"docsum": 17
},
{
"dt": "23-07-2023 17:35:20",
"docno": "528",
"doccode": "TEST_YxUt7l4VN_mIHQ",
"docsum": 17
},
{
"dt": "23-07-2023 17:37:00",
"docno": "529",
"doccode": "TEST_NtKkg2NYnKf-dA",
"docsum": 34
},
{
"dt": "23-07-2023 17:38:07",
"docno": "530",
"doccode": "TEST_BRkB8q6gOF-QbQ",
"docsum": 17
},
{
"dt": "23-07-2023 17:45:35",
"docno": "531",
"doccode": "TEST_6HdDo6f76Sj9zg",
"docsum": 57
},
{
"dt": "23-07-2023 17:51:13",
"docno": "532",
"doccode": "TEST_-bteQ7HJWNm2bw",
"docsum": 80
},
{
"dt": "23-07-2023 17:56:17",
"docno": "533",
"doccode": "TEST_maXzUPI5CVLqNA",
"docsum": 40
},
{
"dt": "23-07-2023 18:00:05",
"docno": "534",
"doccode": "TEST_kcNDYxnYRHO9gw",
"docsum": 100
},
{
"dt": "23-07-2023 18:02:20",
"docno": "535",
"doccode": "TEST_FnmpjTnB4eRj3A",
"docsum": 30
},
{
"dt": "23-07-2023 22:47:44",
"docno": "536",
"doccode": "TEST_SPR1Jh2ZbZi3YQ",
"docsum": 4902
},
{
"dt": "23-07-2023 22:55:55",
"docno": "537",
"doccode": "TEST_PH7ymTM6pkF-dA",
"docsum": 150
},
{
"dt": "23-07-2023 23:11:47",
"docno": "538",
"doccode": "TEST_kBieBOiGn1lbpQ",
"docsum": 51
}
],
"dt": "24-07-2023 00:22:29",
"fisid": "3",
"docno": "",
"doccode": "",
"isprint": 0,
"ispay": 0,
"cashier": "Постман",
"userdata1": "",
"userdata2": "",
"userdata3": "",
"safe": 51,
"safe_start_shift": 0,
"task": 13,
"dtype": 0,
"shift_link": 484,
"shift_prev_link": 483,
"vacant_off_nums": -1,
"dataid": 4024,
"devinfo": "",
"billing": {
"paid_date_to": "",
"enough_to_renew_subscription": 0
},
"dt_from": "20230701000000000",
"dt_to": "20230725000000000",
"dt_from_fmt": "01-07-2023 00:00:00",
"dt_to_fmt": "25-07-2023 00:00:00",
"printheader": {
"name": "ФОП МУЗИЧУК ЯРОСЛАВ ВОЛОДИМИРОВИЧ",
"shopname": "Тестова торгова точка",
"shopad": "Україна, м.Київ, вул. Хрещатик, 99",
"vat_code": "",
"fis_code": "3680803756",
"dt": "24-07-2023 00:22:29",
"isOffline": false,
"fisid": "3",
"manuf": "Вчасно-каса",
"cashier": "Постман",
"task": 13
}
},
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "4EDB8B4D-A1D5-4EF2-B55F-5495ECF8CC9C",
"task_status": 1,
"type": 1,
"task": 13,
"dt": "20230724002229",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Створити ПРРО в додатку для подальшої роботи з чеками.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/vchasno-kasa/api/v1/prro
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
device | string | Назва ПРРО. Буде використовуватись надалі для ідентифікації API запитів для подальшого проведення чеків. | + |
vchasno_token | string | Токен для ПРРО сформований в кабінеті Вчасно.Каса. | + |
can_offline | boolean | Дозвіл на перехід в офлайн. Рекомендовано передати true. | + |
curl --location 'http://localhost:3939/dm/vchasno-kasa/api/v1/prro' \
--header 'Content-Type: application/json' \
--data '{
"device": "kasa1",
"vchasno_token": "3Mp_ltRj_fD2tfkYEepPsyKmL4thwqOp4OTTirbuObAEAwoul_Hsj3u95T8xJmMm",
"can_offline": true
}'
Тег | Тип json даних | Зміст |
---|---|---|
dev_id | string | Ідентифікатор створеного ПРРО в форматі GUID. |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
{
"dev_id": "600CC60C-3424-4297-BFDF-11132E159FDE",
"res": 0,
"errortxt": ""
}
Завантаження або заміна існуючого уже завантаженого раніше файлового ключа ЕЦП для підписання чеків.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/vchasno-kasa/api/v1/prro/sign
Параметри: dev_id
Параметр | Зміст | Обов'язковий |
---|---|---|
dev_id | Ідентифікатор створеного ПРРО в форматі GUID. | + |
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
sign | string | Файл ключа в форматі base64 | + |
acsk_name | string | Назва АЦСК. Доступні АЦСК | + |
pass | string | Пароль до ключа ЕЦП | + |
alarm | boolean | Підтвердження заміни ключа на відкритій зміні. При закритій зміні можна передати false або не передавати в запиті. Якщо зміна по ПРРО відкрита і передати false або не передавати значення - ключ замінено не буде. Якщо передати true ПРРО буде заблоковано для проведення чеків та переходу в офлайн після успішної заміни ключа. Для зняття блокування потрібно зняти Z-звіт, після чого можна відкрити нову зміну і продовжити роботу. | - |
curl --location 'http://localhost:3939/dm/vchasno-kasa/api/v1/prro/sign?dev_id=600CC60C-3424-4297-BFDF-11132E159FDE' \
--header 'Content-Type: application/json' \
--data '{
"sign": "MIIDrjAcBgwrBgEEAYGXRgEBAQIwDAQEEu2O0QQEO1O5BASCA4ztEfaVaBoFG7FMD3Mu8XNXznGTk2otmo+x9DrRRme6gWZ8oOMR7hqZoG68fFzxhEQ+WOb6D+98D1WtxyFFgbs4LMQVExhves6G5f2TNuTUFgm1q8BceMxvrsdmvDQJrmas4NzfGJsLrIB8yu2cPu/qE/BuFGxRwo1iPsKOaittONRpDWzfMxhOyCX1GUnPLW1tbc2e4AsOKfSJPdMJnVAJM+iEa8C1qvgYTfwTDsR38nlK5XTCo9+8YzVLUo5E0v65HosjUv9cxMcYOBCB9d9BgSBKZe3ILO54I4txHqgiF3bIRlc5NwkY5RI7gtbGR+Pzuiz2F+ttadDWesyj1j+oU2eZHPL0TP39l2nXDOENHpsNs8jFPsOLruqGTRhQuYH8TNSdKMNUunZc0q6/0Tgw76UTYx89YmufEmQwrKZRCfERnbFtNLtinoGgA2QlfUuQWEZLZ3ZORDakWwLVVo8QzDEE3G2pQ8FTZ5kc8vRM/fv3IVXOYK+1Gjc0dyz/3fFblEo8L+eoCr5W+EuJIUPMTKGvaHB06I/BLXxKj3l7NvSPhloEVwSnMjJubzkoNPA+oHoQ4xrdosMl+NiDykf8QWNnlkwjCXEYiw1ODhJ4chZra+0jmNqZB8wHJ6JOkfrmQlGCHY1WyG12j+sGdRa4oGZPaLWspAY7yh8HglyVGAS6dR3pQIQwL8TMlL8ZpHuHEmJsL8pGwSx69iBOQo53LHr2IE5CjncsevYgTkKOd/5GJ0F+Zp3l+5kQYdA8WROLaPAgDGg1ujtGpY/ucbDKU4zyfDVxN2CycPWXL+HFoB/bp6jWmsi1PwMfIQFMx6cNZlZsP+wjojQbrOU9rlSMqYiRboiBlVqMW/5PsRyRIH4zAveabW8DE3/r3PwovDYtWU5+sWUxakvR9Mb8VzWAzVoaXSk8D0sRTt/lx/4tMitc53ZGwDJvzwr+fYyzWmV+IMiK5YFErY+dn2rowE6Z1MZTzxKf6W2iX3KClvgoICHdWrn84JgL33wDADqHWtofOe+zXvwcuVhE4JzyBak6cYSd7P6zbDMhBfCioBoHvp+F/Mah6NBxaAoonYiOYq9Jbwc0mw1pkhwZVSth2474kvKN2jZPoyiZpfpiPpo+Rv4VQnym8Pae12xgxMad6K6+gv64Ec3G++Gu7lYDOi5gMnVeB13gSdRucVLse/gUn1Dor/dDj8pE/Eqkqw==",
"acsk_name": "КНЕДП ТОВ \"Вчасно Сервіс\"",
"pass": "1111",
"alarm": true
}'
Тег | Тип json даних | Зміст |
---|---|---|
dev_id | string | Ідентифікатор ПРРО по якому виконувалась заміна ЕЦП в форматі GUID. |
res | number | Код результату викоанння завдання: 0 = ОК, >0 = код помилки |
errortxt | string | Текст з описом помилки. Якщо res=0 буде порожнім |
{
"dev_id": "600CC60C-3424-4297-BFDF-11132E159FDE",
"res": 0,
"errortxt": ""
}
При роботі з ПРРО наявні наступні теги для визначення статусу операції та коректної обробки помилок:
res
res_action
errortxt
res
Результат виконання завдання: 0 - ОК, завдання виконано успішно, >0 - код помилки.
Всі відповіді з "res": 0
означають що завдання виконано успішно, оброблення помилки не потрібне.
res_action
Подальші рекомендовані дії для дотримання транзакційної цілісності(у випадку якщо в запиті було передано значення tag
):
0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Можнна відправляти наступне завдання.
1 – Помилка при виконанні завдання. Зазвичай повертається якщо ПРРО не дозволено перехід в офлайн і виникла помилка підписання чеку або виходу в мережу. Можна повторити останній запит.
2 - Помилка + колізія. Зазвичай повертається якщо ПРРО не дозволено перехід в офлайн і сталась помилка при фіскалізації чеку в ДПС(або таймаут запиту). Виправлення колізії буде здійснено автоматично при відправці наступного запиту. Рекомендовано повторити останнє завдання.
3 - Виникла помилка у коректності json даних в запиті або критична помилка при виконанні завдання. Рекомендовано перевірити json запиту на коректність даних або звернутись до техпідтримки.
errortxt
Текст помилки який повертається разом з res
.
Фіскалізація чеків може здійснюватись у кілька режимів:
/dm/execute
./dm/execute-prn
/dm/execute-pkg
Для роботи в даному режимі потрібно підключити принтер чеків в ДМ.
Цей режим призначений для фіскалізації чеку та його друку на принтер одразу після успішного проведення.
Налаштування режиму наразі включає лише створення принтеру в ДМ.
Робота в даному режимі здійснюється за допомогою запиту на endpoint /dm/execute-prn
з додатковим параметром dev_id={{dev_id}}
/dm/execute-prn
аналогічний звичайному /dm/execute
, але ще додатково буде відбуватись друк на принтер який має назву prn
в ДМ./dm/execute-prn?dev_id={{dev_id}}
використовується для друку на принтер з явним вказанням назви принтеру створеного в ДМ як параметру до запиту якщо назва принтеру в ДМ != prn
./dm/execute-prn?dev_id=Printer
Перевірити чи документ було надруковано(лише статус) можна обробивши значення тегу isprint
в об'єкті info
в json відповіді. 0 - не було надруковано(не підключено принтер або помилка при друку на принтер), 1 - надруковано(відправлено запит на принтер).
Для роботи в даному режимі потрібно підключити принтер чеків та банківський термінал або хоча б один із (або тільки принтер або тільки термінал) вищевказаних пристроїв в ДМ.
Фактично, даний режим працює як 4в1, відповідно дозволяє виконати 4 різні операції (якщо всі пристрої підключено) за умови отримання лише одного API запиту.
Що вміє даний режим:
Процес роботи в даному режимі виглядатиме наступним чином:
Налаштування пакетного режиму можна виконати лише коли зміна по ПРРО закрита!
При відкритій зміні налаштування не буде збережено!
Далі переходимо в інтерфейс Device Manager, потрібно створити ПРРО або використати створене завчасно, натискаємо на значок .
Буде відкрито сторінку редагування ПРРО, вибираємо "Налаштування пакетного режиму".
Опції:
Пакетний режим готовий до роботи.
Для надсилання пакетних завдань необхідно використовується ендпоінт /dm/execute-pkg
замість /dm/execute
для фіскалізації.
Пакетний режим може працювати з підключеним терміналом або принтером або з обома пристроями одразу, залежно від того як було виконано налаштування пакетного режиму для ПРРО.
Технічні особливості при роботі в пакетному режимі:
Для використання пакетного режиму обов'язково оновіть додаток до актуальної версії для коректної роботи всіх завдань!
При проведенні повернення по ПРРО і терміналу в пакетному режимі дана логіка обов'язкова до реалізації!!!
Для проведення чеку повернення по ПРРО в комбінації з поверенням/скасуванням по терміналу потрібно передати об'єкт "pay"
в json запиті. В даному об'єкті є 3 значення які потрібно передати
"task"
- тип завдання. 2 - повернення по терміналу, 3 - скасування операції по терміналу.
"refundid"
- для повенення. RRN чеку на продаж для здійснення повернення.
"cancelid"
- для скасування. Номер пакета документу в терміналі для здійснення скасування раніше проведеної операції.
{
"pay": {
"task": 2,
"refundid": "000019148585"
},
}
pays
на термінал за замовчуванням відправиться сума по типу оплати "Картка"("type": 2
). Коди оплат можна змінити за власним бажанням в налаштуваннях пакетного режиму.2
, 3
, 4
запит буде відправлятись на термінал, тоді при передачі в запиті на фіскалізацію чеку на продаж/повернення такої комбінації типів оплат:{
"pays": [
{
"type": 5,
"sum": 120
},
{
"type": 2,
"sum": 200
},
{
"type": 3,
"sum": 500
}
]
}
на термінал піде сума 200 + 500 тобто 700 грн і дані по еквайрингу будуть прописані для типу опалати 2 і 3 окремо. Сума по типу оплати з кодом 5 не буде відправлена на термінал так як не вибрана в налаштуваннях пакетного режиму для даного прикладу.
"pays"
) можна не передавати, в такому випадку вся сума чеку буде автоматично розрахована і відправлена на термінал (працює лише для чеків на продаж!).curl --location --request POST 'http://localhost:3939/dm/execute-pkg' \
--header 'Content-Type: application/json' \
--data-raw '{
"ver": 6,
"device": "{{device}}",
"type": 1,
"fiscal": {
"task": 1,
"receipt": {
"sum": 1,
"rows": [
{
"code": "123",
"name": "Товар",
"cnt": 1,
"price": 100,
"cost": 100,
"disc": 0,
"taxgrp": 2
}
],
"pays": [
{
"type": 2,
"sum": 100
}
]
}
}
}'
json body відповіді буде аналогічним як і при виконанні /dm/execute
чи /dm/execute-prn
"type": 2
) буде повернуто помилку аналогічну як при роботі з терміналом напряму, без пакетного режиму./dm/execute
./dm/execute
) і відповідно чек також фіскалізовано.isprint
в об'єкті info
в json відповіді. 0 - не було надруковано, 1 - надруковано./dm/execute
ДМ для роботи з усіма пристроями, в тому числі й з принтерами повинен отримати json дані які потрібно надрукувати в запиті. Далі додаток з json даних сформує макет документу для друку і надішле макет на принтер.
Підтримується друк 2-ма способами(заледно від того як підключено принтер в додаток):
Підтримується друк .bmp
логотипу, звичайного тексту, штрих-коду(ean13), code128 та qr-коду.
Доступні завдання для роботи з принтерами:
Термінали передбачають роботу в однопоточному режимі, відповідно до цього наполегливо рекомендово один фізичний термінал підключати лише в один додаток ДМ. При підключенні одного фізичного терміналу в кілька додатків ДМ на різних пристроях - можливі помилки в роботі при отриманні терміналом конкурентних запитів з різних джерел.
Кілька фізичних терміналів можна підключити в один ДМ в разі потреби організації серверу для управління всіма терміналами.
Для роботи з банківськими терміналами на даний момент реалізовано 2 типи операцій:
pkg
- завдання доступно в пакетному режимі. Якщо помітки немає - завдання доступно лише при інтеграції через API роботи з терміналами.
Завдання роботи з транзакціями:
1) Оплата ("task": 1
) + pkg
(чек на продаж по ПРРО);
2) Повернення по оплаті("task": 2
) + pkg
(чек на повернення по ПРРО);
3) Скасування операції на терміналі ("task": 3
) + pkg
(чек на повернення по ПРРО);
4) P2P переказ ("task": 4
);
5) Універсальний сервіс (лише приватбанк). ("task": 5
);
6) X-Баланс. Друк підсумків без закриття батчу. ("task": 10
) + pkg
(X-звіт по ПРРО);
7) Загальний звіт. Закриття батчу та друк підсумків. ("task": 11
) + pkg
(Z-звіт по ПРРО);
8) Видача коштів. Оплата товару/послуги + видача готівки. ("task": 14
);
9) Оформлення оплати частинами (лише приватбанк). ("task": 15
);
10) Повернення по оплаті частинами (лише приватбанк). ("task": 16
).
11) Отримання проведеної раніше операції по терміналу або отримання останньої операції ("task": 17
).
Таблиця доступних завдань("task"
) відповідно до банків та протоколів:
Назва банку + протокол | 1 | 2 | 3 | 4 | 5 | 10 | 11 | 14 | 15 | 16 | 17 |
---|---|---|---|---|---|---|---|---|---|---|---|
Приватбанк(JSON) | + | + | + | - | + | + | + | + | + | + | + |
Ощадбанк(BPOS1) | + | + | + | + | - | + | + | + | - | - | + |
Райффайзенбанк(POSAPI) | + | + | + | - | - | + | + | + | - | - | - |
Укрсиббанк(BPOS1) | + | + | + | - | - | + | + | + | - | - | + |
Банк Восток(BPOS1) | + | + | + | + | - | + | + | + | - | - | + |
Банк ПУМБ(POSAPI) | + | + | + | - | - | + | + | + | - | - | - |
А-Банк(BPOS1) | + | + | + | - | - | + | + | + | - | - | + |
Банк Південний(BPOS1) | + | + | + | - | - | + | + | + | - | - | + |
А-Банк(JSON) | + | + | + | - | - | + | + | + | - | - | - |
Банк Південний(BPOS Light) | + | - | + | - | - | - | + | - | - | - | - |
Укрсиббанк(BPOS Light) | + | - | + | - | - | - | + | - | - | - | - |
Банк Восток(BPOS Light) | + | - | + | - | - | - | + | - | - | - | - |
Sense Банк(SimPays ККМ) | + | + | + | - | - | + | + | - | - | - | - |
Sense Банк(BPOS1) | + | + | + | - | - | + | + | + | - | - | - |
Sense Банк(POSAPI) | + | + | + | - | - | + | + | + | - | - | - |
Банк ТАС(SimPays ККМ) | + | + | + | - | - | + | + | - | - | - | - |
SSI JSON | + | + | + | - | - | + | + | + | - | - | + |
Службові методи(для різного роду перевірок):
1) Перевірка зв'язку з терміналом (/dm/bankping
);
2) Отримати список мерчантів (/dm/getmerchantlist
);
3) Отримати маски мерчантів (/dm/getmasklist
);
4) Перевірка зв'язку з банком (/dm/bankecho
);
5) Перевірка статусу поточної операції на терміналі (/dm/transaction-status
);
6) Запит статусу останньої проведеної операції на терміналі (/dm/lasttransaction
).
Таблиця методів відповідно до банків та протоколів:
Назва банку + протокол | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Приватбанк(JSON) | + | + | + | + | + | + |
Ощадбанк(BPOS1) | - | + | - | + | + | + |
Райффайзенбанк(POSAPI) | - | + | - | + | + | + |
Укрсиббанк(BPOS1) | - | + | - | + | + | + |
Банк Восток(BPOS1) | - | + | - | + | + | + |
Банк ПУМБ(POSAPI) | - | + | - | + | + | + |
А-Банк(BPOS1) | - | + | - | + | + | + |
Банк Південний(BPOS1) | - | + | - | + | + | + |
А-Банк(JSON) | - | + | - | - | - | + |
Банк Південний(BPOS Light) | - | + | - | - | - | + |
Укрсиббанк(BPOS Light) | - | + | - | - | - | + |
Банк Восток(BPOS Light) | - | + | - | - | - | + |
Sense Банк(SimPays ККМ) | - | + | - | - | - | + |
Sense Банк(BPOS1) | - | + | - | + | + | + |
Sense Банк(POSAPI) | - | + | - | + | + | + |
Банк ТАС(SimPays ККМ) | - | + | - | - | - | + |
SSI JSON | - | + | - | + | - | + |
ДМ записує результат кожної банківської транзакції у власну базу даних, будь то помилка чи успіх.
Для можливості повторно синхронізовувати результати між ДМ та фронт системою потрібно передавати значення двух тегів в будь якому запиті на термінал:
transaction_id
та transaction_search
Додатково можна отримати останню проведену операцію по терміналу по ендпоінту /dm/lasttransaction
.
Транзакції по терміналам зберігаються в ДМ за останні 90 днів.
Запит з сумою на оплату по терміналу.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для оплати по терміналу завжди 1. | + |
merch | number | Ідентифікатор організації – мерчанта. Використовується для визначення мерчанта по якому буде проведено оплату. У випадку якщо термінал містить кілька мерчантів і значення merch не передано, на терміналі буде запропоновано вручну обрати зі списку мерчанта на користь якого потрібно провести оплату. Для терміналів Приватбанку, Ощадбанку та Укрсиббанку зазвичай нумерація мерчантів починається з 1, для Райффайзену - код 7 цифр. | - |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта наданий Приватбанком. | - |
sum | number | Сума до сплати по терміналу. 2 знаки після коми. | + |
curl --location 'http://localhsot:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "desk3200",
"type": 3,
"pay": {
"task": 1,
"merch": 1,
"sum": 1
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека або операції. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
merch | string | Тільки для PrivatBankJSON. Номер мерчанту отриманий від Приватбанку. |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта отриманий від Приватбанку. |
Для Приват банку(PrivatBankJSON)
{
"transaction_id": "73eb8f5f-bca4-428c-b243-1e363f544b0e",
"transaction_search": 0,
"info": {
"dt": "24.03.2023 15:00:33",
"termid": "S1K803CD",
"bankid": "ПриватБанк",
"payid": "639891",
"cancelid": "026874",
"refundid": "069199841989",
"cardmask": "XXXXXXXXXXXX5840",
"paysys": "MASTER",
"sum": 1,
"curr": "UAH",
"restxt": "APPROVED",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": " МАГАЗИН \n вул. Борщагівська,буд.193 \n м.Київ \n 55555555 \nОПЛАТА\nСУМА: 1.00 ГРН\nПiдпис власника картки не потрiбен!\nDEBIT MASTERCARD XXXXXXXXXXXX5840 \nAID: A0000000041010\nТЕРМIНАЛ: S1K803CD 24/03/2023 15:00:33\nКОД АВТОРИЗАЦІЇ: 639891 ЧЕК N: 26874\nRRN: 069199841989 \nEXTERNAL RRN: 308313851792\n(c) Ingenico Group TE7E v.142.102 27/10/\nP1\n",
"hstFld63Sf89":"22INGENICOTE7E 142 10200CT2573872202D97",
"merch": "S1K803CD",
"submerch": "i12345678910"
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230324150038479",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Ощадбанку, Укрсиббанку(BPOS1)
{
"info": {
"dt": "230307150707",
"termid": "50958517",
"bankid": "",
"payid": "279823",
"cancelid": "13",
"refundid": "306630739555",
"cardmask": "111111XXXXXX2222",
"paysys": "MasterCard",
"sum": 0,
"curr": "ГРН",
"restxt": "",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0
},
"ver": 6,
"source": "",
"device": "desk3200",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230307150711337",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Запит на повернення по терміналу. Потрібно прикласти картку на яку потрібно зробити повернення. Повернення коштів відбувається згідно регламенту банку.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для повернення по терміналу завжди 2. | + |
merch | number | Ідентифікатор організації – мерчанта. Використовується для визначення мерчанта по якому буде проведено оплату. У випадку якщо термінал містить кілька мерчантів і значення merch не передано, на терміналі буде запропоновано вручну обрати зі списку мерчанта на користь якого потрібно провести оплату. Для терміналів Приватбанку, Ощадбанку та Укрсиббанку зазвичай нумерація мерчантів починається з 1, для Райффайзену - код 7 цифр. | - |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта наданий Приватбанком. | - |
sum | number | Сума до повернення по терміналу. 2 знаки після коми. | + |
refundid | string | Ідентифікатор платежу, по якому робиться повернення. Повертає банк у відповідь на успішну оплату по терміналу. Для термінал Райффайзенбанку передавати не обов'язково. | + |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "desk3200",
"type": 3,
"pay": {
"task": 2,
"merch": 1,
"sum": 1,
"refundid": "306630739555"
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека або операції. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
merch | string | Тільки для PrivatBankJSON. Номер мерчанту отриманий від Приватбанку. |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта отриманий від Приватбанку. |
Для Приват банку(PrivatBankJSON)
{
"transaction_id": "47dabcc4-9d40-4a62-86f1-ac040d049bea",
"transaction_search": 0,
"info": {
"dt": "24.03.2023 15:36:44",
"termid": "S1K803CD",
"bankid": "ПриватБанк",
"payid": "",
"cancelid": "026876",
"refundid": "069201397109",
"cardmask": "XXXXXXXXXXXX5840",
"paysys": "MASTER",
"sum": 1,
"curr": "UAH",
"restxt": "APPROVED",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": " МАГАЗИН \n вул.Борщагівська,буд.193 \n м.Київ \n 5555555 \n ЗАЯВКА НА ПОВЕРНЕННЯ \nСУМА: 1.00 ГРН\n *** ЗБЕРЕЖІТЬ ЧЕК *** \nDEBIT MASTERCARD XXXXXXXXXXXX5840 \nAID: A0000000041010\nТЕРМIНАЛ: S1K803CD 24/03/2023 15:36:44\nКОД АВТОРИЗАЦІЇ: ЧЕК N: 26876\nRRN: 069201397109\n(c) Ingenico Group TE7E v.142.102 27/10/\nP1\n",
"hstFld63Sf89":"22INGENICOTE7E 142 10200CT2573872202D97",
"merch": "S1K803CD",
"submerch": "i12345678910"
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230324153648301",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Ощадбанку, Укрсиббанку(BPOS1)
{
"info": {
"dt": "230307150748",
"termid": "50958517",
"bankid": "",
"payid": "279823",
"cancelid": "13",
"refundid": "306630739555",
"cardmask": "111111XXXXXX2222",
"paysys": "MasterCard",
"sum": 0,
"curr": "ГРН",
"restxt": "",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0
},
"ver": 6,
"source": "",
"device": "desk3200",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230307150754813",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Запит на скасування транзакції по терміналу. Сума так як при повернення в даному випадку не передаєтсья так як скасування відбуваєтсья на всю суму проведеної транзакції. Потрібно прикласти картку на яку потрібно зробити скасування(BPOS1). Для протоколів PrivatBankJSON та POSAPI прикладати картку не потрібно. Зазвичай використовується при помилковому проведенні оплати або при невдалій фіcкалізації. Після успішного скасування кошти повертаються за кілька хвилин.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для скасування транзакції по терміналу завжди 3. | + |
merch | number | Ідентифікатор організації – мерчанта. Використовується для визначення мерчанта по якому буде проведено оплату. У випадку якщо термінал містить кілька мерчантів і значення merch не передано, на терміналі буде запропоновано вручну обрати зі списку мерчанта на користь якого потрібно провести оплату. Для терміналів Приватбанку, Ощадбанку та Укрсиббанку зазвичай нумерація мерчантів починається з 1, для Райффайзену - код 7 цифр. | - |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта наданий Приватбанком. | - |
cancelid | string | Ідентифікатор платежу (транзакції), по якому проводиться скасування. Повертає банк у відповідь на успішну оплату по терміналу. | + |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "desk3200",
"type": 3,
"pay": {
"task": 3,
"merch": 1,
"cancelid": "13"
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека або операції. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
merch | string | Тільки для PrivatBankJSON. Номер мерчанту отриманий від Приватбанку. |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта отриманий від Приватбанку. |
Для Приват банку(PrivatBankJSON)
{
"transaction_id": "b52b84f7-1b16-415c-a48e-f63b0e7c2f2b",
"transaction_search": 0,
"info": {
"dt": "24.03.2023 15:00:33",
"termid": "S1K803CD",
"bankid": "",
"payid": "CANCEL",
"cancelid": "026874",
"refundid": "069199841989",
"cardmask": "XXXXXXXXXXXX5840",
"paysys": "MASTER",
"sum": 1,
"curr": "UAH",
"restxt": "CANCELED",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": " МАГАЗИН \n вул.Борщагівська,буд.193 \n м.Київ \n 55555555 \nАНУЛЬОВАНО\nСУМА: 1.00 ГРН\nDEBIT MASTERCARD XXXXXXXXXXXX5840 \nAID: A0000000041010\nТЕРМIНАЛ: S1K803CD 24/03/2023 15:00:33\nКОД АВТОРИЗАЦІЇ: CANCEL ЧЕК N: 26874\n(c) Ingenico Group TE7E v.142.102 27/10/\nP1\n",
"hstFld63Sf89": "37000242",
"merch": "S1K803CD",
"submerch": "i12345678910"
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230324150133669",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Ощадбанку, Укрсиббанку(BPOS1)
{
"info": {
"dt": "230307150748",
"termid": "50958517",
"bankid": "",
"payid": "279823",
"cancelid": "13",
"refundid": "306630739555",
"cardmask": "111111XXXXXX2222",
"paysys": "MasterCard",
"sum": 0,
"curr": "ГРН",
"restxt": "ОПЕРАЦIЯ УСПІШНА",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0
},
"ver": 6,
"source": "",
"device": "desk3200",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230307150754813",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Підрахунок підсумку за даними транзакцій, без закриття батчу. Схоже з x-звітом по ПРРО.
Термінал надрукує квитанцію із підсумками поточної партії(батчу) транзакцій.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для закриття батчу по терміналу завжди 10. | + |
merch | number | Ідентифікатор організації – мерчанта. Використовується для визначення мерчанта по якому буде проведено оплату. У випадку якщо термінал містить кілька мерчантів і значення merch не передано, на терміналі буде запропоновано вручну обрати зі списку мерчанта на користь якого потрібно провести оплату. Для терміналів Приватбанку, Ощадбанку та Укрсиббанку зазвичай нумерація мерчантів починається з 1, для Райффайзену - код 7 цифр. | - |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"device": "ICT220",
"tag": "",
"type": 3,
"pay": {
"task": 10,
"merch": 1
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека або операції. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
merch | string | Тільки для PrivatBankJSON. Номер мерчанту отриманий від Приватбанку. |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта отриманий від Приватбанку. |
Для Ощадбанку(BPOS)
{
"transaction_id": "6e5f8b7c-2310-4d14-b7fb-7296ca3487a9",
"transaction_search": 0,
"info": {
"dt": "230601154000",
"termid": "50958517",
"bankid": "",
"payid": "EMPTY ",
"cancelid": "0",
"refundid": "",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "ГРН",
"restxt": "ОПЕРАЦIЯ УСПІШНА",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 10,
"deb_num": 1,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 2,
"canc_num": 1,
"tx_num": 0,
"receipt": "",
"hstFld63Sf89": "",
"merch": "",
"submerch": ""
},
"ver": 6,
"source": "",
"device": "desk3200A",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230601154001407",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Приват банку(PrivatBankJSON)
{
"transaction_id": "4fd35211-0701-4962-8135-f72a74c9b9e8",
"transaction_search": 0,
"info": {
"dt": " ",
"termid": "",
"bankid": "",
"payid": "",
"cancelid": "",
"refundid": "",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "UAH",
"restxt": "",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": "<bmp logo>\n МАГАЗИН \n вул.Борщагівстка,буд.193 \n м.Київ \n 55555555 \n15:03:00 24/03/2023\n *****[ X - БАЛАНС ]***** \nТЕРМ.# S1K803CD B:000242\nfor slip: 6863 - 6874\n MASTER \nбонуси/знижки 0.00 ГРН\nбез бонусів/знижок 0.00 ГРН\nз бонусами/знижками 0.00 ГРН\nанулювання 1.00 ГРН\nЗагальні підсумки:\nбонуси/знижки 0.00 ГРН\nбез бонусів/знижок 0.00 ГРН\nз бонусами/знижками 0.00 ГРН\nанулювання 1.00 ГРН\n(c) Ingenico Group TE7E v.142.102 27/10/\nP1\n",
"hstFld63Sf89": ""
"merch": "S1K803CD",
"submerch": ""
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230324150329740",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Підрахунок підсумку за даними транзакцій та їх відправка на хост авторизації(банк). Схоже з z-звітом по ПРРО. Після виконання закриття батчу всі дані транзакцій з терміналу буде видалено. Виконується в кінці розрахункового дня.
Термінал надрукує квитанцію(залежно від налаштувань терміналу) із підсумками поточної партії(батчу) транзакцій.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для закриття батчу по терміналу завжди 11. | + |
merch | number | Ідентифікатор організації – мерчанта. Використовується для визначення мерчанта по якому буде проведено оплату. У випадку якщо термінал містить кілька мерчантів і значення merch не передано, на терміналі буде запропоновано вручну обрати зі списку мерчанта на користь якого потрібно провести оплату. Для терміналів Приватбанку, Ощадбанку та Укрсиббанку зазвичай нумерація мерчантів починається з 1, для Райффайзену - код 7 цифр. | - |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"device": "ICT220",
"tag": "",
"type": 3,
"pay": {
"task": 11,
"merch": 1
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека або операції. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
merch | string | Тільки для PrivatBankJSON. Номер мерчанту отриманий від Приватбанку. |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта отриманий від Приватбанку. |
Для Приват банку(PrivatBankJSON)
{
"transaction_id": "b63bdaa3-7585-4677-a890-fd35f08b63c5",
"transaction_search": 0,
"info": {
"dt": " ",
"termid": "",
"bankid": "",
"payid": "",
"cancelid": "",
"refundid": "",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "UAH",
"restxt": "",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": "<bmp logo>\n МАГАЗИН \n вул.Борщагівська,буд.193 \n м.Київ \n 55555555 \n15:51:00 24/03/2023\n *****[ ЗАГАЛЬНИЙ ЗВІТ ]***** \nТЕРМ.# S1K803CD B:000242\nfor slip: 6863 - 6876\n MASTER \nбонуси/знижки 0.00 ГРН\nбез бонусів/знижок 1.00 ГРН\nз бонусами/знижками 1.00 ГРН\nанулювання 1.00 ГРН\nповернення 1.00 ГРН\nЗагальні підсумки:\nбонуси/знижки 0.00 ГРН\nбез бонусів/знижок 1.00 ГРН\nз бонусами/знижками 1.00 ГРН\nанулювання 1.00 ГРН\nповернення 1.00 ГРН\n ПІДСУМКИ ВИЛУЧЕНІ \n ======================== \n(c) Ingenico Group TE7E v.142.102 27/10/\nP1\n",
"hstFld63Sf89": ""
"merch": "S1K803CD",
"submerch": ""
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230324155147202",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Ощадбанку, Укрсиббанку(BPOS1)
{
"transaction_id": "d12b58e3-61fb-4ac6-b11c-e9525d7017e5",
"transaction_search": 0,
"info": {
"dt": "230310161305",
"termid": "50958517",
"bankid": "",
"payid": "EMPTY ",
"cancelid": "32",
"refundid": "306933633237",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "",
"restxt": "ОПЕРАЦIЯ УСПІШНА",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0
},
"ver": 6,
"source": "",
"device": "desk3200",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230310161310618",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Операція що складається з оплати товару/послуги + видачі готівки покупцю.
Для терміналів Ощадбанку може проводитись без оплати за товар, в такому разі в запит передається лише сума коштів до видачі.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для операції оплати з видачею готівки завжди 14. | + |
merch | number | Ідентифікатор організації – мерчанта. Використовується для визначення мерчанта по якому буде проведено оплату. У випадку якщо термінал містить кілька мерчантів і значення merch не передано, на терміналі буде запропоновано вручну обрати зі списку мерчанта на користь якого потрібно провести оплату. Для терміналів Приватбанку, Ощадбанку та Укрсиббанку зазвичай нумерація мерчантів починається з 1, для Райффайзену - код 7 цифр. | - |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта. | - |
sum | number | Сума до оплати за товар/послуги. 2 знаки після коми. | + |
sumcash | number | Сума готівки до видачі покупцю. 2 знаки після коми. | + |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "ICT220",
"type": 3,
"pay": {
"task": 14,
"merch": 1,
"sum": 1,
"sumcash": 1
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
merch | string | Тільки для PrivatBankJSON. Номер мерчанту отриманий від Приватбанку. |
submerch | string | Тільки для PrivatBankJSON. Номер субмерчанта отриманий від Приватбанку. |
Для Ощадбанку(BPOS)
{
"transaction_id": "9613fa52-a02f-4f07-aebd-6f542cd5087a",
"transaction_search": 0,
"info": {
"dt": "230601153413",
"termid": "50958517",
"bankid": "",
"payid": "641135",
"cancelid": "11",
"refundid": "315253546442",
"cardmask": "516797XXXXXX5840",
"paysys": "MasterCard",
"sum": 0,
"curr": "ГРН",
"restxt": "",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": "",
"hstFld63Sf89": "",
"merch": "",
"submerch": ""
},
"ver": 6,
"source": "",
"device": "desk3200A",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230601153417583",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Приватбанку(PrivatBankJSON)
{
"transaction_id": "47dabcc4-9d40-4a62-86f1-ac040d049bea",
"transaction_search": 0,
"info": {
"dt": "24.03.2023 15:36:44",
"termid": "S1K803CD",
"bankid": "ПриватБанк",
"payid": "",
"cancelid": "026876",
"refundid": "069201397109",
"cardmask": "XXXXXXXXXXXX5840",
"paysys": "MASTER",
"sum": 1,
"curr": "UAH",
"restxt": "APPROVED",
"sliptxt": "",
"isprint": 1,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": " МАГАЗИН \n вул.Борщагівська,буд.193 \n м.Київ \n 5555555 \n ЗАЯВКА НА ПОВЕРНЕННЯ \nСУМА: 1.00 ГРН\n *** ЗБЕРЕЖІТЬ ЧЕК *** \nDEBIT MASTERCARD XXXXXXXXXXXX5840 \nAID: A0000000041010\nТЕРМIНАЛ: S1K803CD 24/03/2023 15:36:44\nКОД АВТОРИЗАЦІЇ: ЧЕК N: 26876\nRRN: 069201397109\n(c) Ingenico Group TE7E v.142.102 27/10/\nP1\n",
"hstFld63Sf89":"22INGENICOTE7E 142 10200CT2573872202D97"
"merch": "S1K803CD",
"submerch": "i12345678910"
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230324153648301",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Тільки для PrivatBankJSON. Заява на оплату частинами в банк. Проведення даної транзакції можливо лише при оплаті карткою Приватбанку. У відповідь після успішного оформлення заявки в значенні тегу hstFld63Sf89
буде повернуто номер договору. Цей номер використовується у випадку оформлення повернення як значення тегу agreementNum
.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для повернення по терміналу завжди 2. | + |
sum | number | Сума до повернення по терміналу. 2 знаки після коми. | + |
amountOfParts | number | Кількість частин. | + |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "ICT220",
"type": 3,
"pay": {
"task": 15,
"sum": 1,
"amountOfParts": 3
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
Для Приват банку(PrivatBankJSON)
Запит на повернення по оплаті частинами. В запиті потрібно передати номер договору отриманий при оформлені оплаті частинами в тег agreementNum
.
Метод: POST
Хост: ip:port
Ендпоінт: /dm/execute
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
ver | number | Версія схеми. Завжди має дорівнювати 6. | + |
source | string | Назва відправника завдання. При інтеграції рекомендовано використовувати назву POS системи або компанії для кращої ідентифікації записів. Може бути порожнім. | - |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ. | + |
transaction_id | string | UUID (v5). Ідентифікатор транзакції що використовується як мітка для завдання для пошуку при повторному запиті. Якщо передати значення відмінне від UUID формату, воно буде замінено на UUID що згенерував ДМ та повернуто у відповідь. | - |
transaction_search | number | Параметр дій з пошуком транзакції. 0 - Пошук транзакції не відбувається, запит одразу йде на термінал. 1 - Пошук транзакції перед відправкою даних на термінал. Якщо знайдено, буде повернуто json у відповідь на запит. Якщо транзакцію не було знайдено в БД буде повернуто відповідь що такої транзакції неіснує і дії пов'язані з цією транзакцією(оплата, повернення, скасування) не будуть відправлені на термінал. 2 - Пошук транзакції перед відправкою даних на термінал. Аналогічно 1, за виключенням того, якщо транзакцію не було знайдено в БД запит буде відправлено на термінал. За замовчуванням = 0 |
- |
type | number | Тип завдання. Для роботи з терміналами завжди 3. | + |
pay | object | Об'єкт із даними для фіскальних завдань. | + |
Структура об'єкта pay
Тег | Тип json даних | Зміст | Обов'язковий |
---|---|---|---|
task | number | Тип завдання. Для повернення по терміналу завжди 2. | + |
sum | number | Сума до повернення по терміналу. 2 знаки після коми. | + |
agreementNum | string | Номер договору, по якому робиться повернення. Повертає банк у відповідь на успішне оформлення оплати частинами. | + |
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "desk3200",
"type": 3,
"pay": {
"task": 16,
"sum": 1,
"agreementNum": "9999999999"
}
}'
Тег | Тип json даних | Зміст |
---|---|---|
transaction_id | string | Аналогічне значенню що передано в запиті, за виключенням випадків коли передане в запиті значення не відповідає формату UUID (v5). В такому разі буде повернуто значення згенероване ДМ. |
transaction_search | number | Аналогічне значенню що передано в запиті. |
info | object | Об'єкт із даними отриманими як відповідь від терміналу. |
ver | number | Версія схеми. Завжди дорівнює 6. |
source | string | Назва відправника завдання. Дорівнює тому ж значенню що прийшло в запиті. |
device | string | Назва пристрою, в даному випадку назва терміналу, створеного в ДМ до якого був запит. |
tag | string | Для завдань роботи з терміналами завжди буде порожнім. |
type | number | Для завдань роботи з терміналами завжди буде 0. |
task | number | Для завдань роботи з терміналами завжди буде 0. |
dt | string | Дата та час виконання завдання у форматі рядка: YYYYMMDDHHMMSSTTT |
res | number | Код результату викоанння завдання: 0 = ОК, >0 код помилки |
res_action | number | Подальші рекомендовані дії для дотримання транзакційної цілісності: 0 - Завдання пройшло. Означає успішне виконання завдання ДМ-ом. Якщо термінал повернув власну помилку, так як зі сторони ДМ функціонал відпрацював коректно, значення буде дорівнювати 0; 1 – Помилка на стороні ДМ(зазвичай помилка з'єдання з терміналом), завдання не пройшло. Можна повторити. |
errortxt | string | Текстова інформація про помилку в ДМ або отримана від терміналу. |
aq_errortxt | string | Для завдань роботи з терміналами завжди буде порожнім. |
warnings | array | Для завдань роботи з терміналами завжди буде порожнім. |
Структура об'єкта info
Тег | Тип json даних | Зміст |
---|---|---|
dt | string | Дата та час виконання запиту терміналом у форматі рядка: YYMMDDHHMMSS. |
termid | string | Ідентифікатор платіжного терміналу. |
bankid | string | Ідентифікатор банку. Наразі завжди буде порожнім. |
payid | string | Номер/ідентифікатор платіжного чека. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
refundid | string | Номер/ідентифікатор для повернення. |
cardmask | string | Замаскований номер картки. |
cancelid | string | Номер/ідентифікатор для скасування операції. |
paysys | string | Назва платіжної системи. |
sum | number | Сума. 2 знаки після коми. |
curr | string | Валюта операції. |
restxt | string | Результат операції, якщо термінал її повертає. |
sliptxt | string | Повний текст сліп-чека, якщо термінал його повертає. |
isprint | number | Значення друку сліп-чеку. 0-пристрій не друкує сліп; 1-сліп був надрукований. |
devinfo | string | Інформація, отримана під час реєстрації документа від пристрою/сервісу. в залежності від терміналу може бути об'єктом або текстом. |
deb_amount | number | Загальна сума дебетових транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
deb_num | number | Кількість дебетових транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
cred_amount | number | Загальна сума кредитних транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
cred_num | number | Кількість кредитних транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
canc_amount | number | Загальна сума відмінених транзакцій, якщо термінал її повертає. Якщо не повертає буде рівна 0. |
canc_num | number | Кількість відмінених транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
tx_num | number | Загальна кількість транзакцій, якщо термінал їх повертає. Якщо не повертає буде рівна 0. |
receipt | string | Тільки для PrivatBankJSON. Інформація по операції що буде надрукована терміналом. |
hstFld63Sf89 | string | Тільки для PrivatBankJSON. Дані з хоста(банку). |
Для Приват банку(PrivatBankJSON)
Тільки для PrivatBankJSON. Успішне завершення цієї операції означає, що POS-термінал отримує дані згідно до протоколу, наразі неактивний і готовий виконати будь-який метод.
Виконується "пінг" приблизно 1.5 - 2 секунди.
Метод: GET
Хост: ip:port
Ендпоінт: /dm/bankping
Параметри: dev_name
Параметр | Зміст | Обов'язковий |
---|---|---|
dev_name | Назва терміналу, створеного в ДМ. | + |
curl --location 'http://localhost:3939/dm/bankping?dev_name=ICT220'
Повертає аналогічний json як і при успішному виконанні транзакції.
Якщо пінг проведено успішно - "res" = 0
{
"transaction_id": "",
"transaction_search": 0,
"info": {
"dt": "",
"termid": "",
"bankid": "",
"payid": "",
"cancelid": "",
"refundid": "",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "",
"restxt": "",
"sliptxt": "",
"isprint": 0,
"devinfo": "Connection succeeded",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": "",
"hstFld63Sf89": ""
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230327150226311",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Запит повертає список мерчантів в значенні тегу merchListValue
.
Метод: GET
Хост: ip:port
Ендпоінт: /dm/getmerchantlist
Параметри: dev_name
Параметр | Зміст | Обов'язковий |
---|---|---|
dev_name | Назва терміналу, створеного в ДМ. | + |
curl --location 'http://localhost:3939/dm/getmerchantlist?dev_name=ICT220'
Повертає аналогічний json як і при успішному виконанні транзакції, але з 2-ма відмінностями.
info
merchListValue
Тег | Тип json даних | Зміст |
---|---|---|
merchListValue | string | Список мерчантів та їх кодів в даному терміналі. У випадку з Приватбанком під кодами мерчантів можуть бути "зашиті" додаткові операції по терміналу окрім мерчантів. |
Для Приват банку(PrivatBankJSON)
{
"merchListValue": "MerchantList\" : {\"1\" : \"МАГАЗИН\",\"10\" : \"Фiнансовий тел.\",\"2\" : \"ПОПОВН. КАРТКОЮ\",\"3\" : \"1-2-...-50 грн\",\"4\" : \"100-1000-разом\",\"5\" : \"Доставка розмiн\",\"6\" : \"Оплата частинам\",\"7\" : \"Пiдтвер. розмiн\",\"8\" : \"Регiстр. касира\",\"9\" : \"Виклик Банку\"}",
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Ощадбанку(BPOS1)
{
"merchListValue": " ID: OSCHADBANK",
"ver": 6,
"source": "",
"device": "",
"tag": "",
"type": 0,
"task": 0,
"dt": "",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Лише для терміналів приватбанку
Запит повертає список масок мерчантів в значенні тегу maskListValue
.
Метод: GET
Хост: ip:port
Ендпоінт: /dm/getgetmasklist
Параметри: dev_name
Параметр | Зміст | Обов'язковий |
---|---|---|
dev_name | Назва терміналу, створеного в ДМ. | + |
curl --location 'http://localhost:3939/dm/getmasklist?dev_name=ICT220'
Повертає аналогічний json як і при успішному виконанні транзакції, але з 2-ма відмінностями.
info
merchListValue
Тег | Тип json даних | Зміст |
---|---|---|
maskListValue | string | Список масок мерчантів та їх кодів в даному терміналі. У випадку з Приватбанком під кодами мерчантів можуть бути "зашиті" додаткові операції по терміналу окрім мерчантів. |
Для Приват банку(PrivatBankJSON)
{
"maskListValue": "MaskList\" : {\"1\" : \"S1K803CD\",\"10\" : \"G1K823CD\",\"2\" : \"P1K8C3CD\",\"3\" : \"I1K803CD\",\"4\" : \"I1K803CD\",\"5\" : \"IGK803CD\",\"6\" : \"X1K813CD\",\"7\" : \"IGK803CD\",\"8\" : \"IPK803CD\",\"9\" : \"CALLBANK\"}",
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Завдання для перервірки зв'язку терміналу, фактично мерчанту з банком.
Якщо в терміналі кілька мерчантів потрібно буде на терміналі зі списку вибрати з яким мерчантом виконувати перевірку.
Метод: GET
Хост: ip:port
Ендпоінт: /dm/bankecho
Параметри: dev_name
Параметр | Зміст | Обов'язковий |
---|---|---|
dev_name | Назва терміналу, створеного в ДМ. | + |
curl --location 'http://localhost:3939/dm/bankecho?dev_name=ICT220'
Повертає аналогічний json як і при успішному виконанні транзакції, але з порожніми даними в об'єкті info
.
Для Приват банку(PrivatBankJSON)
{
"transaction_id": "",
"transaction_search": 0,
"info": {
"dt": "",
"termid": "",
"bankid": "",
"payid": "",
"cancelid": "",
"refundid": "",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "",
"restxt": "",
"sliptxt": "",
"isprint": 0,
"devinfo": "Connection succeeded",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": "",
"hstFld63Sf89": ""
},
"ver": 6,
"source": "",
"device": "ICT220",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230327153939435",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
Для Ощадбанку(BPOS1)
{
"transaction_id": "",
"transaction_search": 0,
"info": {
"dt": "",
"termid": "",
"bankid": "",
"payid": "",
"cancelid": "",
"refundid": "",
"cardmask": "",
"paysys": "",
"sum": 0,
"curr": "",
"restxt": "",
"sliptxt": "",
"isprint": 0,
"devinfo": "",
"deb_amount": 0,
"deb_num": 0,
"cred_amount": 0,
"cred_num": 0,
"canc_amount": 0,
"canc_num": 0,
"tx_num": 0,
"receipt": "",
"hstFld63Sf89": ""
},
"ver": 6,
"source": "",
"device": "desk3200",
"tag": "",
"type": 0,
"task": 0,
"dt": "20230327153214609",
"res": 0,
"res_action": 0,
"errortxt": "",
"aq_errortxt": "",
"warnings": []
}
При обробці можливих помилок при роботі з терміналами можна орієнтуватись на значення 3 тегів в json відповіді:
res
errortxt
info.restxt
res
"res": 0
означають що транзакція пройшла успішно, оброблення помилки не потрібне.Помилки що починаються з 5
і мають формат 5ххх
- помилки які повертає термінал при обробці транзакції. Означають що транзакція не пройшла.
Помилки від 1 до 999(для протоколу BPOS) помилки що повертає хост(банк) з яким термінал обмінюється даними.
В такому випадку потрібно перевіряти значення res
, errortxt
і info.restxt
разом.
errortxt
Текст помилки який повертається разом з res. Якщо ДМ обробив помилку буде текст помилки що вказано в "Списку помилок", якщо ні буде текст отриманий від терміналу.
info.restxt
restxt
в об'єкті info
буде містити в собі інформацію про обробку операції яку надає термінал. Може містити в собі як статус успішного виконання операції так і текст помилки.
Кілька прикладів:
"restxt": "ОПЕРАЦIЯ УСПІШНА",
"restxt": "ОПЕРАЦIЯ СКАСОВАНА",
"restxt": "APPROVED",
"restxt": "CANCELED",
Тут вказано список можливих помилок при роботі ДМ, включаючи загальні помилки при роботі з пристроями.
Код(res) | Текст помилки(errortxt) | Додаткова інформація |
---|---|---|
430 | Device error: %s | Помилка при роботі з пристроєм. При отриманні рекомендовано звернутись до техпідтримки. |
1016 | Internal error: | Внутрішня помилка з додатковим описом. При отриманні рекомендовано звернутись до техпідтримки. |
1091 | Пристрій не знайдено | Пристрою з вказаною в запиті назвою(device) не існує в ДМ. Потрібно перевірити коректність назви. |
1105 | Пристрій зайнятий | Пристрій виконує попереднє завдання, додатком блокується виконання по одному пристрою завдань паралельно для уникнення помилок в роботі. Рекомендовано почекати закінчення виконання попереднього завдання перед відправкою нового. |
1082 | Неможливо зберегти дані до бази даних. | Повертаєтсья у випадку якщо додаток запущено без прав адміністратора або пошкоджено базу даних. Рекомендовано звернутись на техпідтримку для вирішення. |
Тут вказано список можливих помилок при роботі з ПРРО.
Код(res) | Текст помилки(errortxt) | Додаткова інформація |
---|---|---|
1006 | Зміна по даному ПРРО була закрита. Повторне закриття неможливе | |
1032 | ДПС: помилка перевірки підпису чеку, із за збою в роботі податкової чи АЦСК вашого ключа ЕЦП. | |
1033 | ДПС: Помилка перевірки ПРРО | Повертається у випадку отримання від ДПС помилки про використання різних ключів ЕЦП в одній зміні або при відкритті змін якщо зміна уже відкрита. При отриманні рекомендовано звернутись до техпідтримки. |
1034 | ДПС: Помилка запису чеку. | Повертається у випадку отримання від ДПС помилки про неможливість запису чеку. При отриманні рекомендовано звернутись до техпідтримки. |
1035 | ДПС: Загальна помилка | При отриманні рекомендовано звернутись до техпідтримки. |
1036 | ДПС: Помилка типу відправки | Повертається у випадку отримання від ДПС помилки при відкритті зміни що ПРРО заблоковано. При отриманні в процесі роботи ПРРО може означати спробу перейти в режим офлайн якщо ПРРО знаходиться в режимі офлайн і навпаки. При отриманні рекомендовано звернутись до техпідтримки. |
1037 | ДПС: Відсутній Z-звіт з попереднім порядковим номером | При отриманні рекомендовано звернутись до техпідтримки. |
1038 | ДПС: Некоректний формат XML | При отриманні рекомендовано звернутись до техпідтримки. |
1039 | ДПС: Некоректна дата. Дата в XML чеку не відповідає даті чеку. Check.date | При отриманні рекомендовано звернутись до техпідтримки. |
1040 | ДПС: Некоректні дані в XML або структурі чеку | При отриманні рекомендовано звернутись до техпідтримки. |
1041 | ДПС: Невірний формат Z-звіту | При отриманні рекомендовано звернутись до техпідтримки. |
1042 | ДПС: ПРРО заблоковано. Перевищено ліміт роботи в оффлайні в 168 годин на місяць | При отриманні рекомендовано звернутись до техпідтримки. |
1043 | ДПС: Некоректний хеш останнього чеку. Порушено послідовність передачі чеків до контролюючого органу | Повертається у випадку отримання від ДПС помилки про порушення послідовності переачі чеків. Може означати що по ПРРО видавались чеки через іншого провайдена ПРРО, касу було перенесено з іншого ДМ або сталась помилка на стороні ДПС. При отриманні рекомендовано звернутись до техпідтримки. |
1044 | ДПС: ПРРО не зареєстровано або стався збій на стороні податкової | При отриманні рекомендовано звернутись до техпідтримки. |
1045 | ДПС: Не зареєстровано ключ ЕЦП для підписання чеків або стався збій на стороні податкової. Потрібно його зареєструвати заповнивши заявку через кабінет Вчасно.Каса, або форму №5ПРРО через кабінет податкової, або дочекатись відновлення роботи кабінету ДПС | Повертається у випадку отримання від ДПС помилки що ключ ЕЦП не зареєстровано. Потрібно зареєструвати ключ ЕЦП або, якщо ключ зареєстровано, дочекатись відновлення роботи ДПС. |
1046 | ДПС: Помилка при закритті зміни. Зміна по ПРРО не відкрита в ДПС | Повертається у випадку закриття зміни та отримання від ДПС помилки що зміна наразі не відкрита. При отриманні рекомендовано звернутись до техпідтримки. |
1047 | ДПС: Некоректний номер фіскального чеку виданого в режимі offline або спроба відправити чек виданий в режимі online при роботі ПРРО в режимі offline. | При отриманні рекомендовано звернутись до техпідтримки. |
1048 | Невідома помилка Вчасно | Помилка отримана від кабінету Вчасно.Каса. У випадку отримання даної помилки рекомендовано звернутись до техпідтримки. |
1052 | ПРРО заборонено переходити в режим оффлайн. | Неможливо перейти в офлайн так як в налаштуваннях ПРРО не дозволено перехід в офлайн. |
1053 | Неможливо перейти в оффлайн знаходячись в оффлайні. | Повертається у випадку спроби перейти в офлайн якщо ПРРО наразі знаходиться в режимі офлайн. |
1054 | Неможливо перейти в онлайн знаходячись в онлайні | Повертається у випадку спроби перейти в онлайн якщо ПРРО наразі знаходиться в режимі онлайн. |
1056 | Відсутні оффлайн номери для роботи ПРРО в режимі оффлайн. Отримання номерів, від ДПС, буде здійснено автоматично, після успішного відкриття зміни в режимі онлайн. | Для ПРРО не отримано список офлайн номерів від ДПС. Рекомендовано перевідкрити зміну. |
1058 | Чек з кодом синхронізації не знайдено | Повертаєтсья у випадку пошуку завдання по tag якщо завдання з переданим в запиті tag не було знайдено в БД. |
1059 | В заданому діапазоні Z-звітів не знайдено | Повертається у випадку якщо в запиті для завдань 12 та 13 передано некоректний діапазон вибірки періодичних звітів. |
1060 | Виникла помилка при формуванні зведеного Z-звіту: звіт, з локальним номером, пошкоджений | Повертається для завдань 12 та 13 якщо у вибраному діапазоні є пошкоджений звіт. В такому разі формування зведеного звіту з заданими параметрами неможливе. |
1062 | ПРРО знаходиться в режимі оффлайн більш ніж 35 годин. Дозволено тільки закриття зміни(11) | ПРРО працює в офлайн режимі понад встановлену кількість годин. Рекомендовано звернутись до техпідтримки для уточнення причин. |
1063 | Для чеку внесення/видачі грошей сума не може бути від`ємною | |
1064 | Для прибуткового/видаткового чеку сума не може бути від`ємною | |
1065 | Для прибуткового/видаткового чеку решта в оплаті з індексом %d не може бути від`ємною | |
1069 | Виникла помилка при підписанні контенту електронним підписом: | Повертається у випадку помилки підписання чеку ключем ЕЦП. Після ":" буде додано текст помилки бібліотеки підписання. |
1073 | Попередній чек в статусі "Непроведений". Потрібне ручне втручання | Рекомендовано звернутись до техпідтримки для вирішення проблеми. |
1074 | Неможливо вирішити колізію. Потрібне ручне втручання | Рекомендовано звернутись до техпідтримки для вирішення проблеми. |
1075 | Колізія не виправлена. Неможливо отримати останній проведений чек. | Помилка при отриманні останнього чеку. Можлива проблема з доступом до кабінету Вчасно.Каса, до АЦСК або збій зі сторони ДПС. |
1077 | У касі недостатньо коштів для проведення даної операції | Повертається для завдань 2, 4, 14 при оплаті готівкою якщо по ПРРО не достатньо залишку готівки для проведення завдання. |
1081 | Виникла помилка при формуванні X-звіту. | Повертаєтсья для завдання 10 у випадку якщо немає даних для формування X-звіту або виникла інша помилка при його формуванні. |
1083 | Неможливо отримати налаштування по ПРРО. Спробуйте замінити токен Вчасно.Каса | В додатку внесено некоректний токен для ПРРО, потрібно згенерувати новий в кабінеті Вчасно.Каса та замінити в додатку. |
1086 | Виникла помилка при формуванні Z-звіту. | Рекомендовано звернутись до техпідтримки для вирішення проблеми. |
1092 | Зміна по даному ПРРО закрита. Для фіскалізації чеків необхідно відкрити зміну. | |
1095 | Для пристрою не налаштовані параметри роботи з ЕЦП | Потрібно завантажити ключ ЕЦП до ПРРО. |
1096 | Зміна по даному ПРРО уже була відкрита. Повторне відкриття неможливе | |
1097 | Список товарів пустий | Попертається для завдань 1, 2 якщо передано суму до оплати, але пустий список товарів. |
1101 | Сума чеку не співпадає з сумою по позиціям | Повертається у випадку якщо сума(sum) всіх позицій(в масиві fiscal.receipt.rows) з урахуванням знижок(disc) на кожну з позицій не співпадає з сумою по чеку(fiscal.receipt.sum). |
1102 | Сума чеку не співпадає з сумою по оплатам | Повертається у випадку якщо сума по чеку(fiscal.receipt.sum) з урахуванням знижки на весь чек(fiscal.receipt.disc) не співпадає з загальною сумою по оплатам в чеку(fiscal.receipt.pays). |
1107 | Ціна помножена на кількість, відрізняється більш ніж на 1 від суми позиції | Повертається у випадку якщо ціна товару помножена на кількість дорівнює нулю. |
1108 | Знижка відрізняється менше ніж на 1 від суми позиції | Повертається у випадку якщо знижка на товар рівна сумі товару. Мінімальна ціна за товар після знижки має бути не менше 0.01грн. |
1109 | Сума по типу оплати %s дорівнює 0 | Повертається у випадку якщо сума оплати по одному із типів оплат в чеку рівна 0. |
1110 | %s не відповідає жодній з глобальних | Повертається у випадку якщо тип оплати або податкова група яка наявна в чеку не включена в налаштуваннях ПРРО. %s буде замінено на цифрове позначення групи чи типу оплати. |
1111 | Код товару %s було продано раніше по податковій групі %s(%s) | Повертається у випадку якщо код товару в чеку в поточній зміні було раніше продано з іншою податковою групою. %s буде замінено на код товару та позначення податкової групи. Рекомендовано змінити код товару або податкову групу для даного товару або перевідкрити зміну. |
1112 | Сума заокруглення повинна бути в межах від -0.99 до 0.99 | |
1115 | Для ПРРО не налаштовані параметри роботи із заокругленням | В типах оплат для ПРРО не включено "Заокруглення". |
1117 | Неможливо перейти в режим оффлайн, строк дії приватного ключа закінчується | Повертається у випадку якщо ключ ЕЦП закінчується менше як за 3 дні і сталась помилка при які була спроба перейти в режим офлайн. Для уникнення проблем перехід в офлайн в таких випадках блокується. |
1119 | Чек "Видачі коштів" не може бути с типом оплати "Готівка" | Повертається для завдання 14 у випадку якщо тип оплати передано не "Картка". |
1120 | Комісія в чеку "Видачі коштів" не може бути меньше 0 | |
1121 | Дата на пристрої не співпадає з поточною датою на сервері. | Повертається у випадку розбіжності в +30хв в даті на пристрої та на сервері Вчасно.Каса. Потрібно відкоригувати дату на пристрої та перезапустити його. |
1122 | Закінчились оффлайнові номери для роботи ПРРО в режимі оффлайн. Було використано всі номери для чеків під час роботи в оффлайні. Отримання номерів буде здійснено автоматично після успішної реєстрації оффлайнових чеків та переходу до режиму онлайн. | Повертається у випадку роботи в режимі офлайн якщо було використано всі отримані від ДПС офлайн номери. |
1123 | Недостатньо коштів на балансі. Поповніть рахунок та повторіть спробу проведення чеку: https://kasa.vchasno.ua/app/company/settings/balance-info | Повертається у випадку якщо ПРРО заблоковано із за відсутності коштів на балансі. Потрібно поповнити рахунок на суму тарифу та повторити спробу провести чек. |
1124 | Для ПРРО "%s" був виконаний метод аварійної заміни ЕЦП, дозволено тільки закриття зміни(11) | Повертається у випадку якщо було замінено ключ на відкритій зміні по ПРРО. Заблоковано проведення чеків та перехід в офлайн. Потрібно виконати z-звіт. |
1125 | Ви використовуєте застарілу версію Device Manager. Дана версія додатку більше не підтримується! Для того щоб видавати чеки оновіть додаток до актуальної версії. Процес оновлення: https://wiki-kasa.vchasno.ua/uk/DeviceManager/Maintenance/Update | Повертається у випадку якщо встановлена версія додатку більше не підтримується. Необхідно оновити додаток до актуальної версії. |
2000 | Невірний формат вхідного JSON | Повертається у випадку якщо в запиті передано дані не в форматі json або в структурі json запиту наявна помилка. |
2001 | Невірний/недійсний токен Вчасно.Каса для даного ПРРО | Повертається у випадку створення ПРРО в додатку з недійсним токеном. Рекомендовано згенерувати токен та повторити спробу створити ПРРО. |
2002 | ПРРО з такою назвою вже зареєстровано | Повертається у випадку створення ПРРО з назвою яка уже наявна в додатку. Необхідно придумати унікальну назву. |
2003 | Помилка при зчитуванні особистого ключа ЕЦП: %s | Помилка при зчитуванні ключа ЕЦП. Замість %s буде повернуто детальну помилку від бібліотеки підписання. |
2005 | Помилка доступу до сервісу Вчасно | Повертається у випадку якщо з пристрою де встановлено додаток немає доступу до кабінету Вчасно.Каса(kasa.vchasno.ua) |
2007 | ПРРО з ІД %s не знайдено | Повертається у випадку роботи з розширеним API для налаштування і переглянду інформації ПРРО якщо по переданому в запиті ідентифікатору не було знайдено ПРРО. |
2009 | Неможливо змінити ЕЦП: пристрій з ІД %s використовується | Повертається у випадку роботи завантаження ЕЦП до ПРРО якщо відкрита зміна або виконується інше завдання. |
2011 | ПРРО з ІД %s не використовується | Повертається у випадку спроби виконати завдання по ПРРО яке вимагає ініціалізації ПРРО. Рекомендовано спробувати відкрити зміну і повторити дію. |
2013 | ПРРО з ІД %s знаходиться в режимі оффлайн | Повертається у випадку спроби виконати дію яка заборонена до виконання при знаходженні ПРРО в режимі офлайн. |
2014 | ПРРО не налаштовано, перевірте. | Повертається у випадку створення ПРРО по якому не встановлено податкові групи та види оплат. |
Тут вказано список можливих помилок при роботі ДМ з терміналами та опис специфічних протоколам помилок.
Код(res) | Текст помилки(errortxt) | Додаткова інформація по помилці |
---|---|---|
303 | Protocol id="%s", name="%s" do not recognised | Для службових завдань по терміналу. Помилка пошуку протоколу по назві пристрою. потрібно перевірити чи коректно передано назву пристрою(dev_name) в параметрах запиту. |
411 | Error receiving TimeOut: %d ms | Таймаут з'єднання з терміналом при виконанні завдання. Основна відмінність від Interface init error в тому що термінал отримав запит, але перевищено час очікування відповіді від терміналу. |
1016 | Internal error: Connection Closed Gracefully | Розрив з'єднання з терміналом(з боку терміналу). Завичай відбуваєтсья при відправці на термінал запиту з іншого ДМ коли термінал опрацьовує попереднє завдання. В такому випадку термінал може успішно виконати операцію, але ДМ відповіді не отримає. |
1126 | Неможливо відкрити СОМ порт. Порт відсутній в системі або зайнятий. | Помилка для терміналів Приватбанку. Повертається у випадку якщо COM порт відсутній в системі або порт зайняла/відкрила інша програма. |
5013 | Транзакцію з id="%s" не знайдено в БД | Повертається у випадку відправки запиту на термінал з transaction_search = 1 коли транзакцію не знайдено. %s буде замінено на значення id транзакції переданої в запиті. |
5028 | Неможливо встановити з'єднання з терміналом по інтерфейсу %s (%s) | Загальна помилка для терміналів Ощадбанку, Укрсиббанку, Райффайзенбанку та Банку Восток. Зазвичай означає помилку з'єднання з терміналом. Термінал або недоступний або некоректно вказано IP адресу чи COM порт. %s буде замінено на значення поточного інтерфейсу та параметрів підключення. |
5029 | Термінал %s (%s) не підтримує завдання з типом %s | Загальна помилка для всіх терміналів. Означає що вкзаний в запиті тип завдання (наприклад Оплата частинами) не підтримуєтсья для даного банку та терміналу. %s буде замінено на назву терміналу, протокол та номер завдання. |
5067 | Помилка при з'єднанні за вказаною адресою: %s | Помилка для терміналів Приватбанку. Повертається у випадку якщо термінал недоступний по IP адресу та порту. |
5068 | Таймаут при перевірці зв'язку з терміналом | Помилка для терміналів Приватбанку. Якщо підключення через Ethernet або COM було встановлено з'єднання по ip адресу та порту або успішно відкрито COM порт, але при перевірці зв'язку з терманлом(при встановленні хендшейку по протоколу) не було отримано відповіді від терміналу. |
Код(res) | Текст помилки(errortxt) | Додаткова інформація |
---|---|---|
5000 | Помилка терміналу: %s | Помилка отримана від терміналу, Помилка може бути як в самому терміналі так і отримана від хосту(банку). %s буде замінено на текст помилки що повертає термінал. |
5000 | Помилка терміналу: пристрій зайнятий | Помилка отримана від терміналу, якщо термінал опрацьовує попередній запит який отримав раніше. Необхідно дочекатись завершення виконання попереднього запиту і тоді відправляти новий. |
Код(res) | Текст помилки(errortxt) | Додаткова інформація |
---|---|---|
5000 | Помилка терміналу: %s | Невідома помилка отримана від терміналу. |
5001 | Помилка терміналу: Операція скасована користувачем | Транзакцію скасовано користувачем на терміналі. |
5002 | Помилка терміналу: EMV Decline | |
5003 | Помилка терміналу: Transaction log is full. Need close batch | Переповнено журнал транзакцій, потрібно закрити, тобто виконати загальний звіт по терміналу. |
5004 | Помилка терміналу: Немає зв'язку з банком | Немає з'єднання з банком. |
5005 | Помилка терміналу: Немає паперу в принтері | Відсутній папір в принтері. |
5006 | Помилка терміналу: Error Crypto keys | |
5007 | Помилка терміналу: Card reader is not connected | |
5008 | Помилка терміналу: Transaction is already complete | |
5009 | Помилка терміналу: ResponseCodeStr = %s (не вдалося обробити помилку) | Невідома помилка від терміналу або не вийшло обробити помилку отриману від банку. Замість %s буде код помилки помилки отриманий від терміналу/банку. |
5010 | Помилка терміналу: error opening COM port | |
5011 | Помилка терміналу: need to open COM port | |
5012 | Помилка терміналу: error connecting with terminal | |
5014 | Помилка зв'язку з терміналом | Термінал доступний але при відправці забиту бібліотека не змогла встановити з'єднання з терміналом. Рекомендовано повторити останній запит так як він не пройшов. |
5022 | Помилка терміналу: Йде обробка попередньої операції | Повертаєтсья у випадку якщо термінал зайнятий обробкою попереднього запиту у разі відправки запиту з різних джерел(напиклад з 2 різних ДМ на один термінал). Рекомендовано зачекати закінчення і повторити запит. |
5026 | Помилка терміналу: Потрібно виконати загальний звіт | Повертаєтсья у випадку якщо пройшло більше 24 годин (або інше значення встановлене банком) з моменту проведення першої транзакції по терміналу. Рекомендовано виконати загальний звіт на терміналі. |
5027 | Помилка терміналу: Операція не знайдена | Повертаєтсья у випадку якщо в запиті на скасування транзакції вказано некоректний номер транзакції (cancelid) для виконання скасування або було знято загальний звіт по терміналу і скасування більше не доступно. Рекомендовано перевірити коректність введення номеру. |
Код(res) | Текст помилки(errortxt) | Додаткова інформація |
---|---|---|
5015 | Повідомлення від банку: Відмова у проведенні операції | Відмова в проведенні операції від банку без опису причин. |
5016 | Повідомлення від банку: Недозволена сума трансакції | Недозволена сума для проведення оплати. |
5017 | Повідомлення від банку: Помилковий номер картки | Помилковий номер картки. Можна спробувати провести оплатку повторно, у разі поторення краще звернутись в банк. |
5018 | Повідомлення від банку: Недостатньо коштів на рахунку | Недостатньо коштів на рахунку клієнта для оплати. |
5019 | Повідомлення від банку: Невірний PIN | Некоректно введено PIN код для картки. |
5020 | Повідомлення від банку: Перевищено ліміт трансакці | Перевищено ліміт на оплати по карті |
5021 | Повідомлення від банку: Система не функціонує | Помилка на стороні банку, рекомендовано спробувати повторити запит на оплату. |
5025 | Повідомлення від банку: Некоректний RRN при виконанні повернення | Повертаєтсья у випадку якщо в запиті на повернення вказано некоректний rrn (refundid) оригінальної транзакції для виконання повернення. Рекомендовано перевірити коректнійсть введення rrn. |
Код(res) | Текст помилки(errortxt) | Додаткова інформація |
---|---|---|
5023 | Помилка терміналу: Операція скасована | Операція скасована користувачем кнопкою на терміналі врунку або самим терміналом у випадку помилки при обробці даних. |
5024 | Повідомлення від банку: %s Статус: %s Код відповіді банку: %s | Помилка отримана від банку при оплаті. Повертається в форматі: текст повідомлення, статус помилки, код відповіді банку. Приклад: Повідомлення від банку: ВIДМОВИТИ! Статус: 1 Код відповіді банку: 100 |