Решта
навіть якщо сума решти = 0 у формі чеків на продаж.fiscal.receipt.pays
параметра "show_additional_info": true
який форсовано вмикав відображення для чеків на продаж та повернення.BPOS1
як звичайні принтера чеків. При роботі через термінали ingenico будь якої моделі можна друкувати чеки та будь яку іншу інформацію як на принтері.SUPERUSER
прав.SUPERUSER
прав щоб коректно працювала очистка чеків. Для користувачів що мають SUPERUSER
права - все залишилось без змін.BPOS1
.ГРН
у json відповіді для всіх протоколів роботи з терміналами так як деякі термінали повертали або некоректне значення, або код валюти.task
) 5, 22, 23 повертається значення isprint
аналогічно іншим заваданням, наприклад фіскалізація чеку, для перевірки чи було документ доставлено для друку.taxgrps
замість параметру taxgrp
.qr1
у JSON відповіді після фіскалізації чеку.Некоректно передано дані у вхідному JSON запиту. Перевірте коректність переданих значень та повторіть запит.
code_a
та code_aa
.code
.Прибрано автозаповнення коду товару ("code"
) назвою товару ("name"
) якщо код не було передано в запиті на фіскалізацію чеку, що призводило до дублювання відображення назви на сторінці перегляду чеку в податковій, де виводиться в один радок назва та код товару.
Додано обов'язкове поле "Контакти" при відправці запиту про допомогу.
Виправлено проблему з некоректним залишком по ПРРО в разі перенесення ПРРО в інший Device Manager при увімкненому налаштуванні перенесення залишку готівки зі зміни в зміну
Додано можливість підключати термінали ingenico по протоколу BPOS1 від банку ПУМБ.
Виправлено помилки в назвах протоколів при підключенні терміналів для деяких банків.
Прибрано можливість "Перевірити зв'язок з банком" на сторінці налаштувань терміналу у зв'язку з особливостями роботи цієї операції на різних терміналах. Натомість додано можливість прововести операцію оплати, повернення чи скасування по терміналу.
Виправлено проблему з дублюванням однакових попереджень в масиві об'єктів "warnings" у відповіді після фіскалізації чеку.
Виправлено помилку Сума базових сум податків не співпадає з сумою оплат
яка виникала після синхронізації чеків по зміні з кабінетом Вчасно.Каса у разі відсутності певних даних в чеках.
Виправлено помилку при першому запуску Device Manager на чистій MS SQL базі.
Виправлено помилку що при певних умовах не отримувались офлайн номери асинхронно під час роботи ПРРО.
З даної версії було змінено сервер для завантаження оновлень з
dm-releases.c.prom.st
наkasa.vchasno.ua
.
Всі версії Device Manager вище за 5.195 включно тепер будуть завантажувати файли зkasa.vchasno.ua
Якщо у вас використовується власна друкована форма чеків або ж в Device Manager завантажена користувалька друкована форма, ознайомтесь з інформацією за посиланням.
Додано можливість використовувати хмарні підписи Вчасно.КЕП для підписання чеків.
Як завантажити та почати користуватись деталі за посиланням.
В разі виниклення проблем з роботою ПРРО, терміналу чи принтеру що працюють через Device Manager тепер можна передати запит про допомогу напряму із застосунку до служби турботи Вчасно.Каса, вони зможуть перевірити всю необхідну інформацію та одразу допомогти із вирішенням вашого питання.
Додатково запросити допомогу можна буде через через панель адміністрування, з можливістю відслідковувати статуси ваших звернень.
Додано можливість проводити операції з очікуванням підтвердження/корегування з боку облікової системи для терміналів Приватбанку по JSON протоколу. Як налаштувати та проводити оплати в такому режимі.
Додано можливість відключити обмеження на фіскалізацію одних і тих самих товарів в чеках з різними податковими групами в рамках однієї зміни на ПРРО.
В разі фіскалізації одних і тих же товарів в чеках з різними податковими групами в одній зміні при увімкненому контролі (контроль по аналогії як на класичних РРО) ви отримаєте наступну помилку:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "DEV",
"tag": "067F144C-58DB-455D-86DC-288CC3896E4F",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250115144324856",
"res": 1111,
"res_action": 3,
"errortxt": "Код товару 99426881 було продано раніше по податковій групі 1(А)",
"aq_errortxt": "",
"warnings": []
}
Для відключення в об'єкт fiscal.receipt
необхідно передати параметр "disable_taxes_control": true
В такому разі дана перевірка виконуватись не буде і чек фіскалізується без помилок.
fiscal
передати параметр "close_all_shifts": 1
{
"ver": 6,
"device": "DEV",
"tag": "",
"type": 1,
"fiscal": {
"task": 11,
"close_all_shifts": 1
}
}
Якщо зміна по касі по якій було відправлено запит на закриття зміни буде закрита успішно, за кілька секунд Device Manager закриє, по черзі, всі зміни, які відкриті, по іншим касам.
Важливо врахувати що поточний функціонал не включає повернення відповіді із даними по всім Z-звітам по всім касам, будуть повернені дані лише по касі, по якій виконано запит закриття, інші ж зміни будуть закриті асинхронно.
Також в разі помилки при закритті зміни по іншим касам, якщо ПРРО не зможе, з певних причин, перейти в офлайн - повторної спроби закриття не буде.
Можливість передавати необхідні дані в чек для коректного формування XML звіту по програмі єКнига
.
Зміна валідації кодів УКТ ЗЕД в чеках.
В поле code2
для кожного товару схема доступних значень для передачі наступна:
10-значний номер (наприклад, 1234567890)
8-значний номер (наприклад, 12345678)
6-значний номер (наприклад, 123456)
Номер, що починається з 00, за яким йде рівно три цифри (наприклад, 00123)
4-значний номер (наприклад, 1234)
Значення 0
Для сумісності з інтеграціями з попередніми версіями код 10 цифр та опціональний символ #
з початку чи в кінці коду будуть також прийматись. Символ #
буде обрізано в процесі обробки чеку для передачі в ДПС лише цифрового коду.
В разі некореткної передачі буде повернуто помилку з вказанням в якому товарі його було зазначено некоректно:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "DEV",
"tag": "10E3838D-91E5-45D3-90C5-F7A3E251B444",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250115152955777",
"res": 1089,
"res_action": 3,
"errortxt": "Позиція Горілка, містить некоректно зазначений код УКТ ЗЕД (\"code2\"). Допустимі значення: 4, 6, 8, 10 цифр або 5, якщо перші дві з них це 00.",
"aq_errortxt": "",
"warnings": []
}
Можливість обійти розбіжність в ціні за одиницю в чеку при передачі до товару суми позиції ("cost"
) одночасно з ціною за одиницю ("price"
). Суть проблеми в тому що при зворотньому перерахунку cost
/cnt
для коректної передачі суми товару за одиницю в ДПС, із за математичного округлення, особливо у вагових товарах, перерахована ціна за одиницю могла відрізнятись від ціни (price
), що була в запиті, на одну копійку. Для обходу розбіжності необіхдно до товару передавати лише ціну за одиницю (price
) та кількість (cnt
) і не передавати загальну суму позиції (cost
).
Виправлено помилки з можливим зависанням принтера при друку в разі проблем із доступом до бази даних.
Виправлено помилки коли не включена у вартість комісія не враховувалась при розрахунку виручки та суми готівки в касі у разі виконання повернень.
Виправлення можливого невдалого завантаження файлу для оновлення, у деяких випадках, що призводило до неможливості надалі оновлювати застосунок через кнопку у вебінтерфейсі.
Допрацьовано схему роботи з податками ПДФО 18% та ВЗ 5% для клієнтів що є податковми агентами. Попередні налаштування тепер виконуються спеціалістами Вчасно.Каса по запиту клієнта, більше передавати в чеки параметр "tax_not_incl_alg": 1
у об'єкт fiscal.receipt
не потрібно.
Виправлено помилку з дуже коротким очікуванням відповіді від терміналу при закритті зміни на терміналі по протоколу BPOS1
.
Виправлено проблему з розрахунком ПДВ для чеків з одним і більше товарів що обкладаються ПДВ та Акцизом одночасно при роботі зі схемою накладання кількох податкових груп на один товар (наприклад окремо ПДВ 20% та окремо Акциз 5%) замість стандартної.
/
до списку дозволених символів при створенні ПРРО, принтерів чи терміналів.trm_name
- Назва терміналу створеного в Device Manager.prn_name
- Назва принтеру створеного в Device Manager.taxgrps
замість taxgrp
.-Дата і час формування чеку в форматі DD.MM.YYYY hh.mm.ss (`"datetime"`);
-Фіскальний номер чеку (`"fisnum"`);
-Значення tag (`"tag"`);
-Тип чеку(номер завдання) (`"type"`);
-Сума чеку (`"sum"`);
-Сума податків(загалом) (`"tax_sum"`).
Для отримання списку чеків потрібно передати в запиті в об'єкті fiscal
параметр “get_receipts“: true
Параметри для запиту:
dev_name
- назва ПРРО, якщо не передано - формується звіт по всім касам.
dev_id
- внутрішній id каси в ДМ, якщо не передано - формується звіт по всім касам.
pg_no
- Пагінація, номер сторінки.
pg_cnt
- Пагінація, кількість чеків на одній сторінці.
dt_from
- Дата початку періоду чеків для фільтрації даних в форматі YYYYMMDDHHMMSS, дату можна передавати частково, наприклад YYYYMMDD
dt_to
- Дата закінчення періоду чеків для фільтрації даних в форматі YYYYMMDDHHMMSS, дату можна передавати частково, наприклад YYYYMMDD
dt_order
- Сортування чеків в масиві docs
по даті, desc - від більшого до меншого чеку по даті, asc - від меншого до більшого.
Опис відповіді:
об'єкт paging
"page_number"
- номер сторінки. Рівне тому значенню що передано в параметрах до запиту, якщо не передано - завжди 1.
"page_size"
- кількість записів на сторінці. Рівне тому значенню що передано в параметрах до запиту, якщо не передано - завжди дорівнює кількості чеків що були знайдені.
"total_records"
- Загальна кількість записів по поточним параметрам.
"total_pages"
- Загальна кількість сторінок.
об'єкт docs
"rro_fiscal_number"
- ФН каси з якої був виданий цей чек.
"fiscal_number"
- фіскальний номер чеку.
"doc_type
" - тип чеку цифрою, фактично номер завдання (task).
"doc_type_txt"
- тип текстом, наприклад "Чек" або "Повернення" або "Переказ коштів"
"sum"
- сума чеку.
"dt"
- дата та час формування чеку в форматі YYYYMMDDHHMMSSMMM.
"subtask"
- те значення subtask що передано в JSON запиту.
"fcId"
- те значення fcId що передано в JSON запиту.
Приклад відповіді
{
"res": 0,
"errortxt": "",
"paging": {
"page_number": 1,
"page_size": 10,
"total_records": 13,
"total_pages": 2
},
"docs": [
{
"rro_fiscal_number": "99996655555555",
"fiscal_number": "TEST_d8neVgxNk6ppow",
"doc_type": 2,
"doc_type_txt": "Повернення",
"sum": 4241,
"dt": "20241029115400235",
"subtask": 1,
"fcId": "2e323r23r"
},
{
"rro_fiscal_number": "99996655555555",
"fiscal_number": "TEST_amkSmyoLiJ5Hdw",
"doc_type": 2,
"doc_type_txt": "Повернення",
"sum": 4241,
"dt": "20241029115333650",
"subtask": 1,
"fcId": ""
},
{
"rro_fiscal_number": "99996655555555",
"fiscal_number": "TEST_b4BZK3NKnePNtg",
"doc_type": 2,
"doc_type_txt": "Повернення",
"sum": 4241,
"dt": "20241029115304910",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_8_mjQ96Rn_VmrA",
"doc_type": 16,
"doc_type_txt": "Видача коштів при переказі",
"sum": 50,
"dt": "20241029114508675",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_QsOh47BjphpFMw",
"doc_type": 15,
"doc_type_txt": "Переказ коштів",
"sum": 240,
"dt": "20241029114501687",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_OFN_GM2DvO-norXXGg",
"doc_type": 1,
"doc_type_txt": "Чек",
"sum": 1000,
"dt": "20241015180857139",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_OFN_UuBMd-MR9jvP5g",
"doc_type": 1,
"doc_type_txt": "Чек",
"sum": 1000,
"dt": "20241015180150531",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_OFN_wTAMJR1MV2X2NQ",
"doc_type": 1,
"doc_type_txt": "Чек",
"sum": 1659.07,
"dt": "20241015103240346",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_OFN_5af_k-sGnwD0rw",
"doc_type": 1,
"doc_type_txt": "Чек",
"sum": 1659.07,
"dt": "20241015102946116",
"subtask": 0,
"fcId": ""
},
{
"rro_fiscal_number": "3",
"fiscal_number": "TEST_8oviAPTPXrK_Pw",
"doc_type": 1,
"doc_type_txt": "Чек",
"sum": 730,
"dt": "20241004173326313",
"subtask": 0,
"fcId": ""
}
]
}
Для отримання такої ж інформації через API при виконанні GET /dm/vchasno-kasa/api/v1/shiftdocs
потрібно в параметри запиту передати show_pay_types=true
До кожного чеку буде повернуто масив об'єктів pays
із даними:
"sum"
- сума по виду оплати, 2 знаки після коми
"pay_code"
- код виду оплати, згідно кодів оплат.
"typen"
- текстове найменування виду оплати.
Спрощено перехід на іншу базу даних зі стандартної sqlite та можливість в один клік перенести всі ваші дані.
Тепер щоб змінити базу даних та/або перенести дані достатньо перейти в налаштування застосунку та вказати дані для підключення. Деталі за посиланням
Заборонено створювати назви для ПРРО принтерів або терміналів із деякими спец символами символами, які можуть викликати певні помилки в роботі.
При спробі створити або відредагувати пристрій із не дозволеними символами, буде повернуто помилку (наприклад): У назві присутні заборонені символи: "№, %"
.
В разі якщо у назві буде вказано знак табуляції, нерозривний пробіл або символ пробілу з початку або з кінця назви вони будуть автоматично обрізані без повернення помилки перед збереженням назви.
Дозволені символи:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
ІіЇїҐґЄє
!.,";:?()_«»-0123456789
Наразі даний функціонал не працює для android
Враховуйте що на доданий час потрібно буде збільшити час очікування відповіді в обліковій системі.
В пакетному режимі (запит на /dm/execute-pkg
) дозволено виконувати відкриття зміни та інші завдання по ПРРО.
Загалом повний перелік дозволених завдань (task
): 0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23
Додано автовиправлення некоректного JSON відповіді від терміналів Приватбанку. В разі якщо було отримано некоректний JSON - буде виконано його автоматичне корегування, якщо JSON кореговано успішно - термінал зможе далі працювати, в разі неможливості скорегувати JSON операцію оплати буде скасовано. В такому разі рекомендуємо звернутись до Приватбанку для доналаштування терміналу.
Змінено схему обробки відповіді від терміналів Приватбанку на випадки якщо термінал повертав що операція пройшла успішно - проте насправді була помилка. Тепер такі операції не будуть визначатись застосунком як помилково успішні.
Можливість налаштувати автоскасування успішної оплати чи повернення по терміналу в разі якщо облікова система не дочекалась відповіді від Device Manager або "відпала" з певних причин.
З нової версії застосунок може чітко визначати на момент повернення відповіді на API запит оплати ("task": 1
) чи повернення ("task": 2
) по терміналу чи доступний ініціатор запиту (облікова система).
В разі якщо потрібно щоб застосунок скасовував успішну оплату чи повернення якщо облікова система недоступна - потрібно передавати в запиті в об'єкті "pay"
параметр "cancel_on_disconnect": true
{
"ver": 6,
"source": "DM_API",
"device": "Term",
"type": 3,
"pay": {
"cancel_on_disconnect": true,
"task": 1,
"merch": "1",
"sum": 11
}
}
В такому разі якщо застосунок не зможе повернути відповідь - він скасує оплату автоматично.
Для примусового переналаштування часового поясу який буде використовувати застосунок потрібно в конфігураційний файл EDMSrv.ini
додати параметри в секцію [Server]
UseTimeZone
- використовувати форсовану таймзону. 1 - так, 0 або не заповнено - ні.
TimeZone
- значення таймзони в форматі: 2, -2 і тд. Потрібно поставити саме значення 2.
Приклад:
Після збереження налаштувань те перезапуску застосунку для чеків буде використовуватись нова таймзона.
Допрацьовано автооновлення для можливості його роботи на різних дистрибутивах linux.
Додано можливість по аналогії з деякими "Класичними РРО" накладати кілька податків на один товар (наприклад окремо ПДВ 20% та окремо Акциз 5%). Відповідно при такій схемі роботи обіг по групі, в даному прикладі, ПДВ 20% при використанні ПДВ 20% для одного товару та ПДВ 20% + Акциз 5% буде спільний.
Для роботи даного способу передачі податків в чеку потрібне попреднє налаштування податкових груп, для цього зверніться на техпідтримку.
Для цього в чеку потрібно до кожного товару замість "taxgrp"
в масиві об'єктів fiscal.receipt.rows
передавати масив "taxgrps"
куди вказати одну або дві податкові групи якими обкладається товар.
Чек товар ПДВ 20% + Акциз 5%:
{
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "",
"need_pf_img": 1,
"type": 1,
"fiscal": {
"task": 1,
"receipt": {
"sum": 100,
"rows": [
{
"code": "10",
"name": "Товар з акцизом",
"cnt": 1,
"disc": 0,
"price": 100,
"cost": 100,
"taxgrps": [
1, 4
]
}
],
"pays": [
{
"type": 0,
"sum": 100
}
]
}
}
}
Приклад чеку:
Чек товар ПДВ 20%
{
"ver": 6,
"source": "API",
"device": "postgres1",
"tag": "",
"need_pf_img": 2,
"type": 1,
"fiscal": {
"task": 1,
"receipt": {
"sum": 100,
"rows": [
{
"code": "11",
"name": "Товар",
"cnt": 1,
"disc": 0,
"price": 100,
"cost": 100,
"taxgrps": [
1
]
}
],
"pays": [
{
"type": 0,
"sum": 100
}
]
}
}
}
Приклад чеку:
Приклад звіту:
Додано попередження при створенні ПРРО при роботі застосунку на базі даних SQLite якщо кількість більше 7 що максимально можливо використовувати до 10 ПРРО.
Реалізовано можливість використовувати накладений податок замість вкладеного при роботі з товарами. Під накладеним податком мається на увазі можливість передавати суму товару без податку - відповідно податок буде розраховуватись і накладатись поверх суми. Сума до сплати в такому разі буде більше за суму чеку на суму податку.
Для роботи даного способу розрахунку податків в чеку потрібне попреднє налаштування податкових груп, для цього зверніться на техпідтримку.
Для роботи даного способу розрахунку податків в чеку потрібне попреднє налаштування податкових груп, для цього зверніться на техпідтримку.
Виправлено помилку коли найменування АЦСК у списку дублюються в разі повторного завантаження ключа на сторінці ПРРО.
Змінено основний колір інтерфейсу
Виправлено проблему коли завантажувався пошкоджений файл логу на linux за поточний день.
Виправлено проблему з блокуванням/розблокуванням ПРРО через "Інженерні функції" вручну яке могло призвести до зависання застосунку у певних випадках.
Виправлено можливі проблеми в роботі каси в разі якщо у фоні запитуються офлайн номери і в цей момент відбувається фіскалізація чеку.
Збільшено кількість максимально можливої довжини для назви товару в чеку з 200 до 1000 символів.
Виправлено помилку з некоректним автоматичним розрахунком ціни за одиницю в чеку ("price"
) якщо передано лише повну вартість позиції ("cost"
).
Виправлено помилку коли заборона переходити в офлайн після аварійної заміни ключа не працювала при певних умовах.
Виправлено помилку в роботі ПРРО після автоматичної синхронізації чеків у певних випадках.
Виправлено помилку коли загальна знижка на весь чек переходить в націнку у візуалізації чеку для останнього товару в списку якщо сума знижки більше за суму останнього товару.
Відкориговано схему нарахування загальних знижок на весь чек по товарам враховуючи індивідуальні знижки на товари в чеку.
Відкориговано розподілення знижки по товарам виключаючи товари з додатковим збором (при передачі в запиті в об'єкт fiscal.receipt
параметру "disc_calc_alg": 1
)
Виправлено помилку при отриманні відповіді від терміналу newland по протоколу SSI JSON.
Виправлено помилку з екрануванням апострофа в деяких варіаціях назв товарів в чеку.
Виправлено проблему з роботою деяких налаштувань в застосунку після запуску застосунку якщо на момент запуску були проблеми з підключенням до серверу бази даних.
Виправлено текст помилки про те що автооновлення не підтримується на android.
Access violation...
у випадку фіскалізації чеку з великою кількістю товарів (20-30+) на x32 версії застосунку."purchase_receipt_fisn"
та "purchase_rro_fisn"
для чеків повернення.ПДФО 18% + ВЗ 1.5%
."discounts"
.bank_id
) буде поміщатись внутрішній номер мерчанту який присвоюється банком. Додано нове поле Назва банку (bank_name
), для відображення в чеку найменування банку до якого належить платіжний засіб. Дані про банк не будуть передаватись в ДПС.fiscal.receipt
параметр "disc_calc_alg": 1
."disc_calc_alg": 1
в такому разі у випадку наявності в чеку товарів (по прикладу вище) з податковими групами ПДВ 20% + акциз 5%
або Без ПДВ + акциз 5%
на них загальна знижка на весь чек застосовуватись на буде. Деталі по роботі зі знижками за посиланням.Access violation...
при одночасній роботі з кількома терміналами Приватбанку.fiscal
параметр "is_short": true
. В такому разі буде сформовано короткий звіт.Приклад запиту:
{
"fiscal": {
"dt_to": "20240805235959",
"dt_from": "20240801000000",
"is_short": true,
"task": 13
},
"type": 1,
"source": "API",
"device": "postgres1",
"ver": 6
}
price
* cnt
) якщо не передано їх фінальну вартість(cost
) для чеків переказу коштів та видачі коштів при переказі.lines
для чеків на продаж("task": 1
), повернення("task": 2
) та для службового звіту("task": 5
).Для текстових даних можна додатково передавати наступні дані
"fh": 1, -- висота тексту 1 або 2, значення 2 несумісне якщо fw 1, буде друкуватись як при fw 2. Вcі інші варіації - сумісні
"fw": 1, -- ширина тексту 1 або 2.
"align": 1, - вирівнювання. 1 зліва, 2 по центру, 3 з правого боку.
"by_word": 1, - перенесення по словам, а не по буквам якщо слово не вміщається в рядок. 1- переносити по словам, 0 або не передано - переносити по буквам.
Встановлено максимальний ліміт офлайн номерів в 5000 на один ПРРО. Стандартна кількість залишилась без змін (2000 номерів). При спробі встановити більше як 5000 номерів на один ПРРО в налаштуваннях - більше 5000 отримуватись не буде відповідно до нещодавно встановлених обмежень в API ДПС.
Додано можливість при увімкненій авторизації у вебінтерфейсі встановити API ключ(X-Api-Key) для авторизації запитів з облікових систем по сталому ключу замість потреби авторизуватись по логіну та паролю та зберігати авторизаційну куку.
Формат API ключа - довільний. У разі встановлення в header до запитів що містять в ендпоінті /api/v1/
, /api/v2/
, /api/v3/
які підпадають під авторизацію потрібно передавати значення x-api-key.
Приклад
curl --location 'http://localhost:3939/dm/vchasno-kasa/api/v1/dashboard' \
--header 'x-api-key: befddabf-0adc-4767-b7fe-5078fbcbc557'
Якщо значення ключа передано коректно - потреби в авторизації не буде, буде повернуто результат виконання запиту і відповідно всі дані.
Якщо ключ передано некоректно - буде переадресація на сторінку логіну якщо не було виконано вхід та не було передано авторизаційну куку.
Для доступу до вебінтерфейсу як і раніше використовується лише логін та пароль.
Internal error: Access violation at address...
яка періодично виникала при оплаті на терміналах приватбанку.Виправлено помилку в роботі ПРРО після завершення зворотної синхронізації якщо в налаштуваннях ПРРО увімкнено "Автоматичне відкриття зміни з проведенням першого чеку".
Виправлено помилку в роботі ПРРО після завершення зворотної синхронізації якщо по ПРРО до цього тривалий час не формувалось фіскальних чеків.
При налаштуванні принтеру "Відступ зліва (в міліметрах)" 0 тепер не відправляється на принтер команда для обнулення відступів.
Виправлено помилку з виходом ПРРО з офлайну після завершення зворотної синхронізації якщо ПРРО знаходилось в режимі офлайн.
Виправлено помилку з неможливістю авторизуватись у вебінтерфейс при увімкненій авторизації на більшості браузерів.
info.pays.commission_m
."res": 5000
). Якщо пройшла - дані по операції.{
"res": 5000,
"res_action": 1,
"errortxt": "Помилка терміналу: транзакція не була проведена. Повторіть спробу ще раз."
}
"task":17
). В об'єкт "pay"
необхідно:"cancelid"
). Якщо не передавати буде повернуто стасус та інформацію останньої успішної операції по терміналу.curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "Terminal",
"tag": "",
"type": 3,
"pay": {
"task": 17,
"cancelid": "469109"
}
}'
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "Terminal",
"tag": "",
"type": 3,
"pay": {
"task": 17
}
}'
Логи тепер додатково зберігаються 30 днів(за замовчуванням) в архівованому вигляді для економії місця на диску.
Якщо виставлено збереження логів 7 днів та збереження архівом - логи будуть зберігатись 37 днів загалом.
За потреби налаштування можна змінити:
Повертаємо коректний текст помилки в разі неможливості провести зворотну синхронізацію якщо по ПРРО відсутні зміни або по ПРРО збережено некоректний токен
Додали перевірку стану сертифікату ключа ЕЦП на валідність. Якщо при зчитуванні ключа чи при підписанні чеку буде отримано помилку про недійсниість сертифікату - буде додатково виконано окрему перевірку стану сертифікату. Якщо сертифікат ключа було відкликано в АЦСК - робота каси, та можливість переходу в офлайн буде заборонена до завантаження актуального робочого ключа ЕЦП.
Помилка буде наступна при спробі фіскалізувати чек або відкрити/закрити зміну:
{
"res": 1094,
"res_action": 1,
"errortxt": "Приватний ключ ЕЦП не завантажено: Сертифікат ключа ЕЦП було відкликано. Фіскалізація чеків та перехід в офлайн режим заборонено. Для продовження роботи завантажте дійсний ключ та виконайте закриття зміни якщо зміна відкрита."
}
Заборонено послідовну реєстрацію і видалення кількох чеків для уникнення помилок в роботі ПРРО із за некоректної відповіді з боку API ДПС. Видаляти чек можна лише один раз після видалення - наступний чек видалити буде можливо тільки якщо останній чек - було фіскалізовано в ДПС.
Додано метод для відправки сповіщень про чеки (відправка чеку клієнту). Метод аналогічний такому ж для відправки чеків через кабінет Вчасно.Каса напряму і насамперед розроблений для зручності в інтеграції щоб не потрібно було відправляти чеки окремо через кабінет Вчасно.Каса.
В параметр запиту dev_name
потрібно передати назву ПРРО по якому здійснюється відправка.
Дані для відправки можна передати параметрами до запиту або в body запиту в json форматі
"recipient"
- Електронна пошта або номер телефону для надсилання чеку."channel"
- Канал для надсилання чекуemail
- віпправити на електронну поштуsms
- відправити через SMSviber
- відправити через Vibercascade
- спробувати відправити через Viber, якщо вайбер не встановлений на телефоні, то відправити через SMS."check"
- Фіскальний номер чеку.Приклад передачі даний через body запиту в json форматі:
curl --location 'http://localhost:3939/vchasno-kasa/notifications/checks?dev_name=postgres1' \
--header 'Content-Type: application/json' \
--data-raw '{
"recipient": "[email protected]",
"channel": "email",
"check": "TEST_ngrGDS9vOC10cw"
}'
Приклад передачі даний через параметри запиту:
curl --location 'http://localhost:3939/vchasno-kasa/notifications/checks?dev_name=postgres1&recipient=test%40vchasno.ua&channel=email&check=TEST_ngrGDS9vOC10cw' \
--header 'Content-Type: application/json' \
--data '{}'
Виправлено помилку що призводила до зависання ПРРО якщо при запитів на ПРРО розірвалось з'єднання з сервером БД.
У візуалізації звітів(X, Z та періодичні звіти) прибрано відображення розділів по внесенням/винесенням, чекам видачі готівки держателям ЕПЗ, та чекам переказу коштів та видачі коштів при переказі якщо в зміні даних операцій не було проведено.
У візуалізації тестових чеків більш явно відображаємо додатково напис "Тестовий чек" зверху та знизу чеку для більшого розуміння по якому ПРРО було фіскалізовано чек.
Додали можливість встановлювати відступ зліва на принтерах по ESC/POS протоколу. В налаштуваннях принтеру в міліметрах можна вказати decimal значення віступу якщо чек друкується зі зміщенням а не по центру паперу.
Виправлено помилку з відображенням часу роботи в офлайні за поточний та попередній місяць замість тільки часу роботи в поточному.
Виправлено помилку з відображенням неповної інформації по ключу ЕЦП на linux.
Виправлено помилку з некоректним сортуванням звітів при виконанні періодичного звіту по датам якщо вказувати в запиті повну дату з мілісекундами.
Додано автоматичну синхронізацію даних по чекам з кабінетом Вчасно.Каса у випадку якщо є розбіжність по чекам в Device Manager та в кабінеті Вчасно.Каса і відповідно в ДПС.
Після запуску Device Manager або при відкритті зміни якщо ПРРО працює в режимі онлайн буде виконано автоматичну перевірку на відповідність, якщо буде знайдено відсутні чеки - буде виконано їх дозапис. Це допоможе відновити роботу ПРРО без додаткового налаштування якщо було аварійно закрито зміну або чеки формувались не з deivce manager.
Змінено схему роботи функціоналу зворотної синхронізації. Якщо запущено синхронізацію без видалення чеків - буде синхронізовано дані по останній зміні ПРРО для продовження роботи. Рекомендовано використовувати у випадку якщо потрібно лише синхронізувати дані останньої зміни зі збережнням історії чеків
При синхронізації з видаленням чеків перед синхронізацією буде видалено всі чеки що є в базі даних по касі і завантажено останню зміну по ПРРО. Рекомендовано використовувати якщо ПРРО працювало на іншому пристрої або якийсь час не працювало в цьому Device Manager.
Виправлено помилку з відображенням кількості чеків сформованих в офлайні однією загальною нумерацією для всіх ПРРО.
Виправлено помилку з подальшою неможливістю автоматичного виходу каси з офлайн режиму, роботою автоматичного закриття зміни та фонового отримання офлайн номерів якщо було розірвано підключення з БД(MS SQL та postgresql).
Виправлено помилки що призвели до довготривалого знаходження ПРРО в офлайн режимі із за проблем з ключами АЦСК Україна.
Додано завдання 5("task": 5
) Універсальний сервіс(ServiceGeneric
) для терміналів Приватбанку на протоколі JSON. Метод можна використовувати для провдення сервісних операцій, наприклад Оплата частинами або Миттєва розстрочка. Метод обов'язково потрібно використовувати при проведенні даних сервісних операцій якщо в терміналі кількість мерчантів(фактичних торгівців) > 1.
"task"
- номер завдання - завджи 5.
"sum"
- сума операції.
"param"
- для оплати частинами, або миттєвої розстрочки - кількість платежів.
"merch"
- номер мерчанта по якому необхідно провести операцію.
"srvNum"
- номер сервісу
Номери сервісів ("srvNum"
) станом на 29.05.2024. Потрітно передавати значення в полі Service ID
. Які саме сервіси у вас налаштовані на терміналі можна уточнити у Приватбанку.
Приклад запиту миттєвої розстрочки:
curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"device": "PAX2",
"type": 3,
"pay": {
"task": 5,
"sum": 300,
"param": 3,
"merch": 4,
"srvNum": "046"
}
}'
КНЕДП ТОВ \"Центр сертифікації ключів \"Україна\"
та зміна схеми роботи з сертифікатами для більшої стабільності роботи ключів надалі.Банки еквайри платіжні застосунки яких можуть бути налаштовані на перерахованих терміналах станом на 01.05.2024:
Додатково, протягом місяця виробником терміналів буде встановлена оновлена версія платіжних додатків банків Райффайзен банк Аваль
, ПУМБ
, Monobank
, Таскомбанк
, АБанк
, Укрексімбанк
з підтримкою інтеграційного протоколу SSI JSON. Частина з них з них вже підтримує і відповідно доступна для підключення та роботи в Device Manager.
Всі термінали що використовують протокол SSI JSON
можуть працювати в режимі 2в1, тобто термінал замінює і принтер фіскальних чеків (не тільки олачених карткою, але і готівкою також) і сам банківський термінал про проведення безготівкових розрахунків. Додатково налаштовувати принтер не потрібно, після підключення терміналу можна одразу друкувати чеки та приймати оплати.
"res": 7000
)."task":17
). В об'єкт "pay"
необхідно передати додатково номер мерчанту та номер операції на терміналі("cancelid"
).curl --location 'http://localhost:3939/dm/execute' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "API",
"device": "Terminal",
"tag": "",
"type": 3,
"pay": {
"task": 17,
"cancelid": "27",
"merch": 1
}
}'
Додано можливість підключити термінал іншого банку якщо немає в списку доступних якщо відомий протокол роботи терміналу. Додатково потрібно буде вказати назву банку.
Виправлено деякі розбіжності в даних в json відповіді при фіскалізації чеків через /dm/execute
та фіскалізації аналогічного чеку через /dm/execute-prn
, /dm/execute-pkg
Можливість запису версії бази даних в конфігураційний файл. Потрібно для коректної роботи додатку з postgresql базоб даних, без можливості надати користувачу який підключається до БД superadmin
права.
в файл EDMSrv.ini в блок [Database]
додати наступні рядки:
DBVerInINI=1
DBVer=
Після чого перезавантажити службу EDMSrv
(windows), edm
(Linux).
"task": 18
).SimPays ККМ
(Sense банк, Банк ТАС)"task":23
) по ПРРО."task": 15
) та чек видачі коштів при переказі("task": 16
)."Операції переказу коштів та видачі коштів при переказі"
з підсумком по даним операціям по видам оплат.Режим встановлення кодової сторінки
- в разі друку в режимі тексту замість картинки, Альтернативний режим вирішує проблему на первних моделях принтерів з наявними зайвими символами "Iя" в першому рядку чеку при встановленні кодування тексту на принтері.Спосіб друку зображень
- в разі друку картинкою. Альтернативний
режим дозволяє налаштувати коректний друк на принтерах де картинка друкувалась некоректно(замість чеку друкувася набір символів). Перевірено на принтерах BTP
та HPRT
. Режим Для розфіскалізованих РРО
дозволяє друкувати чеки картинкою на розфіскалізованих РРО. Перевірено на моделі EP-700
(FP-700
)Банку ТАС
та Sense банку
по мережі по протоколу SimPays ККМ
за допомогогою TCP серверу. При створенні пристрою потрібно вказати порт серверу будь який доступний в системі і піля того повідомити банку налаштувати підключення до каси на ip адресу вашого пристрою(ноутбук чи комп'ютер) та вказаний в налаштуваннях порт. Після встановлення налаштувань банком можна працювати з терміналом.base_tax_sum_p
, base_tax_sum_m
, base_ex_sum_p
, base_ex_sum_m
в JSON відповіді при виконанні X, Z та періодичних звітів в масиві info.taxes
.fiscal.receipt
в json запиті передати "allow_zero_sum": true
. В іншому випадку при спробі фіскалізувати чек з нульовою сумою буде повернуто помилку: "res": 1133,
"res_action": 3,
"errortxt": "Фіскалізація чеків з наявними товарами та нульовою сумою заборонена. Для фіскалізації такого чеку необхідно передати \"allow_zero_sum\": true в об`єкт fiscal.receipt",
Передавати "allow_zero_sum": true
обов'язково тільки у випадках якщо загальна сума чеку після всіх знижок буде 0, якщо сума до сплати буде не 0 - передавати "allow_zero_sum": true
не потрібно.
Фіскалізація "нульових" чеків без товарів та оплат працює без змін.
{
"ver": 6,
"device": "postgres1",
"tag": "",
"type": 1,
"fiscal": {
"task": 1,
"receipt": {
"sum": 4000,
"allow_zero_sum": true,
"discounts": [
{
"disc": 100,
"disc_type": 1,
"disc_name": "Знижка 100% на весь чек. приклад"
}
],
"round": 0,
"rows": [
{
"code": "185",
"name": "Товар 1",
"cnt": 1,
"price": 1000,
"cost": 1000,
"discounts": [],
"taxgrp": 1
},
{
"code": "187",
"name": "товар 2",
"cnt": 1,
"price": 3000,
"cost": 3000,
"discounts": [],
"taxgrp": 1
}
],
"pays": [
{
"type": 0,
"sum": 0
}
]
}
}
}
{
"res": 2022,
"errortxt": "ПРРО наразі використовується іншому на пристрої. Перед створенням каси видаліть її з попереднього пристрою після чого поверніться до створення. Якщо до попереднього пристрою більше немає доступу - зверніться до служби підтримки Вчасно.Каса для розблокування."
}
Для зняття блокування необхідно видалити ПРРО з попереднього додатку Device Manager або, якщо доступу до попереднього додатку немає - звернутись на техпідтримку сервісу Вчасно.Каса.
9) Можливість зміни розділювача для числових значеннь в друкованих формах. Стандартно розділювач ,
.
10) Можливість відключити перевірку готівки в касі("safe"
) при видачі решти("change"
) в чеках продажу/повернення та переказу коштів. Для цього в об'єкт fiscal.receipt
в json запиті необхідно передати "not_check_safe": true
. В такому разі перевірка доступного залишку при видачі решти не буде відбуватись.
11) Можливість виконати X, Z звіти по терміналу по протоколу BPOS1 для всіх мерчантів, при передачі в json запиті "merch": 0
.
12) Заборонено запускати Примусовий запуск реєстрації чеку переходу в онлайн
("task": 9
) в разі якщо уже виконується фіскалізація офлайн чеків.
13) Допрацювання фільтру по даті для періодичного звіту по датам ("task": 13
):
"dt_from": "20240408091021",
"dt_to": "20240408211021",
У разі вказання лише дати YYYYMMDD без часу, наприклад "dt_from": "20240401"
та "dt_to": "20240405"
буде вибрано всі звіти, дата закриття яких буде в проміжку між 01.04.2024 00:00:00 та 05.04.2024 23:59:59.
"dt_from"
та "dt_to"
.“Виручка“
з порахованою сумою доходу по видам оплат за результатом суми всіх чеків продажу - чеки повернення - видача готівки держателям ЕПЗ + операції переказу коштів - операції видачі коштів при переказі;"task": 12
, "task": 13
) денний обіг з урахуванням округлення по продажам та додано обіг по чекам повернення."task": 12
, "task": 13
) на "Періодичний звіт (повний)" та додано відображення номерів та дати першого та останнього звітів у вибірці.dd.MM.yyyy hh:mm:ss
."cost_after_disc"
) в масиві info.printinfo.goods
.info.printinfo
.income
в об'єкті info
з порахованою сумою "Виручки" за зміну по видам оплат для всіх звітів.info.summary
значення виручки загальної (income_p
) після обрахунку суми виручки по видам оплат для всіх звітів.info.reports
для періодичних звітів суму по чекам продажу з урахуванням округлення ("roundsum"
) та суму по чекам повернення ("returnsum"
)."n_from"
) та до("n_to"
) що потрапили у вибірку в об'єкті info
, та дати першого("open_shift_dt"
) та останнього("close_shift_dt"
) звітів."type": 0
) та передачі суми решти ("change"
) > 0 для чеків на продаж. Якщо передана сума решти > ніж поточна сума готівки в сейфі (в касі) буде повернуто помилку при фіскалізації чеку:"errortxt": "У касі недостатньо коштів для проведення даної операції"
{
"ver": 6,
"source": "",
"device": "postgres1",
"tag": "",
"task_status": 3,
"type": 1,
"task": 18,
"dt": "20240208165440361",
"res": 1016,
"res_action": 1,
"errortxt": "Internal error: Бібліотека ЕЦП ще не ініціалізована. Зачекайте та спробуйте ще раз.",
"aq_errortxt": "",
"warnings": []
}
"discounts"
.curl --location 'http://localhost:3939/dm/execute-pkg' \
--header 'Content-Type: application/json' \
--data '{
"ver": 6,
"source": "DM_API",
"need_pf_img": 2,
"device": "postgres1",
"type": 1,
"fiscal": {
"task": 23,
"fiscal_number": "TEST_IMkWddWkHpi9tg"
}
}'
Можна використовувати при відправці запиту на ендпоінти для отримання інформація або додатково друку на принтері: /dm/execute
, /dm/execute-prn
, /dm/execute-pkg
Якщо чек, в даному випадку з фіскальним номером TEST_IMkWddWkHpi9tg не було знайдено буде отримано у відповідь помилку:
"errortxt": "Чек з фіскальним номером TEST_IMkWddWkHpi9tg не знайдено"
Додано в підтримку нові банки та додаткові протоколи для існуючих банків при роботі з терміналами:
-А-Банк
- додано можливість підключати термінали за допомогою протоколу JSON
;
-Банк Південний
- додано можливість підключати термінали за допомогою протоколу BPOS Light
;
-Укрсиббанк
- додано можливість підключати термінали за допомогою протоколу BPOS Light
;
-Банк Восток
- додано можливість підключати термінали за допомогою протоколу BPOS Light
;
-Банк Sense
- додано можливість підключати термінали даного банку що використовують протоколиBPOS1
, POSAPI
та SimPays ККМ
;
-Банк ТАС
- додано можливість підключати термінали даного банку за допомогою протоколу SimPays ККМ
.
Додано можливість друкувати додаткову текстову інформацію та різного типу коди в формі чеків на продаж ("task": 1
) та на повернення ("task": 2
).
Підтримувані типи кодів:
-QR-код
-code128
-ean13
Для передачі даної інформації використовується масив об'єктів "lines"
(кожен код чи текст передається окремим об'єктом з параметрами в масиві) в об'єкті "fiscal"
в json запиту на фіскалізацію чеку (аналогічно функціоналу в завданні 5 ("task": 5
), але з додатковими параметрами розміщення в чеку та налаштуваннями).
Можливості налаштування:
-"qr_type"
- тип. 0 - текстова інформація, 1 - штрихкод (ean13), 2 - штрихкод (code128), 100 - QR-код.
-"t"
- текстова інформація. При "qr_type": 0
- просто текст для відображення в формі чеку, інні значення - інформація що буде поміщена у відповідний код.
-"position"
- позиція для відображення інформації. 1 - перед чеком, 2 - після "хедера" чеку, 3 - перед сумою чеку, 4 - перед "футером" чеку, 5 - після "футера чеку". Додаткові позиції будуть додаватись по запитам на техпідтримку.
-"qr_p"
- розмір коду у % до ширини стрічки (не використовується якщо "qr_type": 0
). 100 - вся ширина чеку, 75 - 75% ширини чеку для штрихкодів і так далі, для QR-кодів змінюється ширина та висота.
-"qr_height"
- висота штрихкоду (не використовується якщо "qr_type": 0
або "qr_type": 100
). 1 - висота 0.5см., 2 - висота 1.3см., 3 - висота 2см.
-"qr_print_txt"
- друк текстового представлення інформації в коді під самим кодом знизу (не використовується якщо -"qr_type": 0
) false - не друкується, true - друкується.
-"align"
- вирівнювання відносно чеку якщо "qr_p"
менше 100 (в поточній версії не використовується якщо "qr_type": 0
текст за замовчуванням - зліва). 1 - зліва, 2 - по центру, 3 - з правого боку.
Позиції:
Важливо! дана інформація буде відображатись лише в візуалізації чеків та на друкованих чеках з додатку(в тому числі друковані форми різного формату) та не передається в ДПС навідміну від коментарів в чеку.
"task": 0
) повертається id зміни "shift_id"
у форматі uuid. Id зміни можна використати для перегляду інформації по чекам в зміні через ендпоінт /dm/vchasno-kasa/api/v1/shiftdocs?shift_id=
/dm/execute-prn
, /dm/execute-pkg
якщо за 5 секунд не вийде з'єднатись з принтером буде повернуто відповід на завдання по ПРРО, також в об'єкті "info"
значення "isprint"
буде рівне 0, тобто чек не було надруковано."disconuts"
сумувалась зі знижкою на весь чек переданою без масиву."task": 4
) для терміналів Ощадбанку:”rec_name”
: - ім'я отримувача латиницею.”rec_surname”
: - прізвище отримувача латиницею.”rec_pan”
: - PAN(номер картки) отримувача."taxes"
в тегах "base_tax_sum_p"
, "base_tax_sum_m"
, "base_ex_sum_p"
, та "base_ex_sum_m"
для податкових груп.Додано підтримку Arch linux.
Зменшено максимальний таймаут на очікування відповіді від кабінету Вчасно.Каса при фіскалізації чеків до 10 секунд (5 секунд встановлення з'єдання, 10 секунд очікування відповіді після з'єднання).
Додано функціонал перевірки ключа ЕЦП при додаванні ключа до ПРРО через вебінтерфейс.
Якщо ключ було зчитано успішно - одразу буде запущена автоматична перевірка реєстрації даного ключа в ДПС для підписання чеків. У разі якщо по результату відповіді від ДПС ключ не зареєстровано - буде запропоновано заповнити заявку на реєстрацію даного ключа для роботи ПРРО.
Для тестових ПРРО перевірка ключа не виконується.
У разі якщо ключ не зареєстровано, після його успішного зчитування в додатку буде відображено наступне повідомлення:
Додано можливість підключати термінали А-Банку та Банку Південний по протоколу BPOS1. Інші протоколи які підтримуються даними банками будуть доступні в наступній версії.
Додано можливість по API передавати масові знижки на чек чи на позицію. Кілька знижок передається за допомогою масиву об'єктів "discounts"
. Можна передавати знижки як ранінше, або передавати лише масивом, або комбінувати з передачею масивом, аналогчно як з акцизними марками "code_a"
та "code_aa"
.
Всі відсоткові знижки на позицію чи на весь чек нараховуються послідовно. Тобто якщо є 2 знижки, наприклад, 20% і 10% - сума по чеку чи по позиції після застосування першої знижки 20% буде використана як база для застосування знижки 10%.
{
"ver": 6,
"source": "API",
"device": "postgres1",
"need_pf_img": 2,
"type": "1",
"userinfo": {
"email": ""
},
"fiscal": {
"task": 1,
"cashier": "Касир 1",
"receipt": {
"sum": 17000.00,
"disc": 3000,
"disc_type": 0,
"disc_name": "Бонусна система",
"disc_apply_type": 3,
"discounts": [
{
"disc": 3000,
"disc_type": 0,
"disc_name": "Використання сертифікату №111 на 3000грн.",
"disc_apply_type": 1
},
{
"disc": 3000,
"disc_type": 0,
"disc_name": "Використання сертифікату №222 на 3000грн.",
"disc_apply_type": 1
}
],
"rows": [
{
"code": "100",
"code1": "79545322",
"code2": "45632",
"code_a": "S5556667w",
"name": "Продкут \"1\"",
"cnt": 1,
"price": 22000,
"cost": 22000,
"disc": 0,
"disc_type": 0,
"disc_name": "",
"disc_apply_type": 3,
"discounts": [
{
"disc": 3000,
"disc_type": 0,
"disc_name": "Бонуси",
"disc_apply_type": 3
},
{
"disc": 2000,
"disc_type": 0,
"disc_name": "Акція",
"disc_apply_type": 3
}
],
"taxgrp": 3,
"comment": "Коментар до продукту 1"
}
],
"pays": [
{
"type": 2,
"sum": 8000,
"paysys": "VISA",
"rrn": "1235567377",
"cardmask": "1223******1111",
"term_id": "SK014677",
"bank_id": "БАНК",
"auth_code": "AA12345678",
"comment": "коментар до оплати картою"
}
]
}
}
}
Потрібно обов'язково увімкнути для роботи на терміналі
Verifone VX520
від Приватбанку.
Виправлено помилку з відображенням коректного номеру мерчанту в разі якщо номер, встановлений банком, більше 10 знаків.
Можливість змінювати максимальну та мінімальну кількість офлайн номерів для роботи ПРРО в режимі офлайн.
Мінімальна кількість - кількість при досягненні якої буде виконано запит номерів в ДПС.
максимальна кількість - та кількість яка запитується в ДПС (наразі максимально можливо встановити 20000 номерів на один ПРРО).
Поточні налаштування будуть отримані з Кабінету Вчасно.Каса і відображатимуться в блоці "Інформація про ПРРО"
Додано перепідключення до postgresql бази у разі обриву з'єднання з боку БД при активній сесії.
Змінено текст помилки для терміналів що працюють по протоколу BPOS1 у разі якщо не вдалось обробити код помилки:
Повідомлення від банку: Операція неуспішна. Код відмови %s
%s - буде замінено на код відповідці процесингового центру банку отриманого від терміналу.
Додано параметр IgnoreConnError
в секцію [Database]
в конфігураційний файл для примусового запуску додатку в разі помилки підключення до бази даних. Можна використовувати у випадках коли база дани і додаток знаходяться на різних пристроях і при старті додатку не встигає запуститись база даних.
У разі встановлення IgnoreConnError=1
додаток після запуску 1 раз в 30 секунд буде виконувати спробу підключитись до бази даних та виконати всі необхідні запити для отримання даних із БД.
Якщо підключення до бази даних не було виконано у відповідь на всі API методи буде повернуто помилку, наприклад:
{
"ver": 6,
"source": "",
"device": "",
"tag": "",
"task_status": 3,
"type": -1,
"task": -1,
"dt": "20231211141310542",
"res": 1130,
"res_action": 3,
"errortxt": "Виникла помилка при підключенні до БД: Cannot connect to server on host 'localhost':\r\nПодключение не установлено, т.к. конечный компьютер отверг запрос на подключение.\r\nSocket Error Code: 10061($274D)",
"aq_errortxt": "",
"warnings": []
}
У разі якщо підключення буде виконано можна працювати з ПРРО та пристроями як зазвичай.
Параметр
IgnoreConnError
не сумісний ізServiceName
. Дозволено використовувати лише один.
У json відповідь по API на викоання X/Z та періодичних звітів було додано окремі параметри в масив об'єктів "taxes"
в значенні яких будуть бази оподаткування для податкових груп із додатковим збором.
"base_tax_sum_p"
- база оподаткування по основному податку (наприклад ПДВ 20%) по чекам продажу.
"base_tax_sum_m"
- база оподаткування по основному податку (наприклад ПДВ 20%) по чекам повернення.
"base_ex_sum_p"
- база оподаткування по додатковому збору (наприклад Акциз 5%) по чекам продажу. Якщо податкова група не має додаткового збору - завжди 0.
"base_ex_sum_m"
- база оподаткування по додатковому збору (наприклад Акциз 5%. Якщо податкова група не має додаткового збору - завжди 0.
В фіскальних чеках QR-код тепер містить посилання на візуалізацію чеку в кабінеті ДПС (https://cabinet.tax.gov.ua/cashregs/check) з додатковими обов'язковими параметрами:
ФН чеку(id),
дата (date),
час (time),
фіскальний номер ПРРО (fn),
сума чеку (sm),
контрольне число (mac)
Приклад:
https://cabinet.tax.gov.ua/cashregs/check?id=TEST_OFN_WeBKHz774mvTOQ&date=20231207&time=10:51:36&fn=3&sm=8000&mac=c1d019bc8d1dce852e371e0149b8655627f247fcc7160deb6ab953c3522f4919
У тестових чеках QR-код містить посилання на кабінет Вчасно.Каса (https://kasa.vchasno.ua/) з додатковими реквізитами.
Приклад:
https://kasa.vchasno.ua/c/TEST_VbS7yd6TPtgdqw?MAC:c086300d35d95c67b0b47fba07bc91098a8c87b44f3c1c2aeecc1df4c40d7624;DT:20-12-2023T14:55:14;FR:TEST_VbS7yd6TPtgdEw;SUM:17000;FN:400000000
Встановлено налаштування підключення для більш стабільної роботи бази даних sqlite при раптових збоях в живленні комп'ютеру при фіскалізації чеку.
Додано очікування в 10 секунд перед запуском автоматичної очистки чеків при закритті зміни.
Звертаємо увагу що якщо у вас використовуєтсья стандартна база даних sqlite після запуску очистки, тобто після закриття зміни по конкретному ПРРО, можуть бути затримки у відповідях на наступні завдання поки не завершиться процес очистки.
Зміна процесу отримання сертифікатів ключів ЕЦП та процесу оновлення кореневого сертифікату для стабільної роботи ключів ЕЦП у разі оновлення сертифікатів з боку АЦСК.
Виправлено проблему при спробі відкрити зміну якщо по касі сталась помилка при отриманні офлайн номерів до відкриття зміни.
Виправлення оновлення налаштувань по касі та податкових груп і типів оплат з кабінету Вчасно.Каса при відкритті зміни по ПРРО якщо по ПРРО виконувались службові завдання до відкриття зміни.
Оновлено бібліотеку підписання iit до актуальної версії.
Виправлено відправку суми до оплати на термінал на 1 копійку менше ніж в запиті для терміналів Ощадбанку, Укрсиббанку, Банку Восток, Райффайзенбанку, Банку ПУМБ.
Виправлення роботи Зворотної синхронізації.
Виправлено помилку при спробі запросити документи за конкретну зміну (/dm/vchasno-kasa/api/v1/shiftdocs
) з параметром відображення сервірсних чеків (service=1).
Метод /dm/vchasno-kasa/api/v1/settings замінює лише ті налаштування що передані в запиті без скидання до стандартних налаштуваннь параметрів що не передані в запиті.
Додано інфоромацію про поточні ліміти часу роботи в офлайні для ПРРО.
Виправлено помилку з відсутністю кодування windows-1251 в XML чеку.
Виправлено проблему з отриманням відповіді від терміналів Приватбанку.
Для терміналів Приватбанку, за замовчуванням, відключено можливісь асинхронного запиту статусу поточної операції з терміналу. Для включення даної можливості потрібно перейти в налаштування терміналу та увімкнути перемикач
Виправлено помилку при обрахунку сум по документам за зміну на postgresql версіях 10+.
Виправлено помилку з екрануванням апострофа ('
) в назві ПРРО та пристроїв.
Виправлено розрахунок "sum"
для чеків продажу/повернення для методу /dm/vchasno-kasa/api/v1/shiftdocs
Додано розрахунок суми по продажам/поверненням та податкам для методу /dm/vchasno-kasa/api/v1/shifts
при відкритій зміні по ПРРО.
Виправлено помилку з відображенням в друкованій формі Z-звіту що звіт видано в режимі офлайн якщо перехід в офлайн відбувся на фіскалізаціх звіту в ДПС.
Розширено таймаут до 5 секунд на встановлення з'єдання з терміналами Приватбанку.
Авторизація, якщо увімкнена в налаштуваннях, тепер працює на всі методи що мають в ендпоінті:
/dm/api/v1/
/dm/api/v2/
/dm/api/v3/
Додано можливість вказувати назви для знижок на товар та весь чек для відображення назви в чеку за допомогою тегу "disc_name"
.
Додано можливість передавати тип застосування знижки для застосування знижки як фактично знижки на товар, або для застосування її як зменшення на суму передплати у випадку використання змішаної форми оплати (передплата/післясплата за товар) за допомогою тегу "disc_apply_type"
.
Приклад:
Знижка на товар
"disc": 50,
"disc_type": 1,
"disc_name": "Передплата",
"disc_apply_type": 1,
Знижка на весь чек
"disc": 50.00,
"disc_type": 1,
"disc_name": "Акція",
"disc_apply_type": 3,
Друкована форма:
Z-Звіт (розділ "Знижки")
/dm/lasttransaction
. Інформації по останній транзакції буде повернута в JSON форматі. Структура аналогічна як і мала б бути у відповіді на оригінальний запит./dm/transaction-status
. Якщо по терміналу є активна операція у відповідь на запит буде надано статус код від терміналу та текстовий опис статусу поточної операції для виводу на екран касиру чи клієнту будь то оплата чи інша операція.Зміни у версіях які більше не підтримуються: