При фіскалізації чеків зазначаються різні суми, наприклад сума чеку, або сума оплати, при розрахунках готівкою також додатково має зазначатись округлення та решта.
Далі описано загальні правила по передачі сум в чеку та як розраховувати решту і округлення.
НБУ 17.09.2025 опублікував постанову №115 в рамках якої, що стосується роботи ПРРО, зазначається що з 01.10.2025 припиняється карбування монет номіналом 10 копійок і починається їх поступове вилучення з готівкового обігу.
У зв'язку з цим змінюються правила округлення в чеках.
Нові правила:
Згідно тексту постанови №115 нові правила округлення застосовуються якщо в касі немає монет номіналом 10 копійок, в той час як за наявності таких, діють попередні правила. Тобто якщо з 01.10.2025 у касі наявні монети номіналом 10 копійок та використовується схема округлення до 10 копійок - це не буде порушенням.
В даному випадку вибір схеми округлення лягає на торгівця, проте Вчасно.Каса рекомендує допрацювати і використовувати округлення при розрахунках готівкою саме по новим правилам, так як тільки будуть остаточно виведені з обігу монети номіналом 10 копійок, дана схема стане обов'язковою.
Юридичним особам незалежно від організаційно-правової форми та
форми власності і фізичним особам, які здійснюють підприємницьку діяльність,
з 01 жовтня 2025 року, якщо немає монет номіналом 10 копійок, проводити
заокруглення загальних у чеку сум розрахунків готівкою за товари (роботи,
послуги) та загальних сум розрахунків в акті про видачу коштів чи іншому
документі, що оформляється під час повернення коштів у разі повернення
товару, за такими правилами...
Звертаємо увагу що використовувати округлення по новим правилам можна лише після 01.10.2025. Зазначення округлення згідно нових правил до вказаної дати вважається порушенням.
Автоматичне округлення в Device Manager переключиться на нову схему після 01.10.2025 автоматично якщо використовується версія 6.4.2 або вище, до цього буде працювати поточний варіант.
Для того щоб використовувати нову схему округлення вам потрібно:
"autoround"
).Детальніше по різниці 2-х способів далі в розділі Розрахунок округлення та решти при оплатах готівкою
.
Починаючи з версії Device Manager (далі ДМ) 6.3 стало доступно 2 схеми передачі сум в чеку з урахуванням округлення при оплатах готівкою. Можна обирати ту схему яка більш підходить для вашої системи.
"autoround"
.Округлення вручну передбачає що касова програма самостійно приймає рішення коли та на яке значення потрібно виконати округлення та яке значення решти записати в чек, у зв'язку з чим окремо передавались значення:
fiscal.receipt.sum
)fiscal.receipt.round
)"change"
в об'єкті всередині масиву fiscal.receipt.pays
)Наприклад
Сума чеку: 79.83
Оплата готівкою, отримано від покупця 100 грн.
Що потрібно вказувати в запиті на фіскалізацію чеку:
"fiscal.receipt.sum": 79.83
);"fiscal.receipt.round": -0.03
);"change": 20.2
).Повний запит:
{
"type": 1,
"device": "postgres1",
"fiscal": {
"task": 1,
"receipt": {
"sum": 79.83,
"round": -0.03,
"rows": [
{
"cnt": 1,
"name": "Товар",
"price": 79.83,
"taxgrp": "3"
}
],
"pays": [
{
"sum": 79.8,
"type": 0,
"change": 20.2
}
]
}
}
}
Візуалізація:
"fiscal.receipt.sum": 79.83
)"fiscal.receipt.round": 0.17
)"change": 20
)Повний запит:
{
"type": 1,
"device": "postgres1",
"fiscal": {
"task": 1,
"receipt": {
"sum": 79.83,
"round": 0.17,
"rows": [
{
"cnt": 1,
"name": "Товар",
"price": 79.83,
"taxgrp": "3"
}
],
"pays": [
{
"sum": 80,
"type": 0,
"change": 20
}
]
}
}
}
Візуалізація:
Приклад використання округлення зі змішаною формою оплати коли одна частина чеку оплачується готівкою, а інша - іншою формою безготівкового розрахунку.
Сума чеку: 79.83
Оплачений картою (50 грн) та готівкою (отримано від клієнта 50 грн)
{
"device": "postgres1",
"type": 1,
"fiscal": {
"cashier": "",
"task": 1,
"receipt": {
"sum": 79.83,
"round": -0.03,
"pays": [
{
"type": 2,
"sum": 50
},
{
"type": 0,
"sum": 29.8,
"change": 20.2
}
],
"rows": [
{
"code1": "4044572307200",
"name": "Товар 1",
"cnt": 1,
"price": 79.83,
"cost": 79.83,
"taxgrp": 7
}
]
}
}
}
{
"device": "postgres1",
"type": 1,
"fiscal": {
"cashier": "",
"task": 1,
"receipt": {
"sum": 79.83,
"round": 0.17,
"pays": [
{
"type": 2,
"sum": 50
},
{
"type": 0,
"sum": 30,
"change": 20
}
],
"rows": [
{
"code1": "4044572307200",
"name": "Товар 1",
"cnt": 1,
"price": 79.83,
"cost": 79.83,
"taxgrp": 7
}
]
}
}
}
Обмеження:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "postgres1",
"tag": "88A6E7C2-F4B7-482C-93B1-7340EA88E147",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250923102757877",
"res": 1112,
"res_action": 3,
"errortxt": "Сума заокруглення повинна бути в межах від -0.99 до 0.99",
"aq_errortxt": "",
"warnings": []
}
Звертаємо увагу що автоматичне округлення з версії ДМ 6.4.2 за замовчуванням округлюватиме суму за новими правилами, якшо вам потрібно переключити спосіб округлення на попередній (до 10-ти копійок) зверніться із запитом до служби турботи Вчасно.Каса, додатково в запиті вкажіть ІПН або код ЄДРПОУ компанії по якій потрібно переключити схему округлення.
Для виконання автоматичного округлення в чеку потрібно передати "autoround": true
в об'єкті fiscal.receipt
. Якщо даний ключ не передавати, за замовчуванням вважається як false
.
Якщо "autoround": true
в такому разі ДМ самостійно враховує необхідність виконання округлення і виконає його згідно правил. При "autoround": true
ключ "round"
не передається, або може бути переданий як 0.
При відмінних значеннях від 0 буде помилка
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "postgres1",
"tag": "7DC54CC3-D275-4ACF-AB93-40675E82E143",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250606151131081",
"res": 1157,
"res_action": 3,
"errortxt": "Сума округлення (\"round\") в об'єкті fiscal.receipt не може бути відмінним від нуля, якшо увімкнено автоокруглення (\"autoround\":true) ",
"aq_errortxt": "",
"warnings": []
}
Ключ "autoround": true
можна передавати в будь яких запитах, не обов'язково лише при розрахунку готівкою, де розрахунок буде не готівкою, значення ключа ігнорується.
Додатково якщо "autoround": true
в оплатах (fiscal.receipt.pays
) готівкою дозволяються лише:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "postgres1",
"tag": "331314B7-DE9D-4538-9910-24B8158BB38D",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250610122635857",
"res": 1164,
"res_action": 3,
"errortxt": "При автоматичному округленні (\"autoround\":true) дозволено передавати суму готівки лише кратну 50 копійкам.",
"aq_errortxt": "",
"warnings": []
}
Решта буде розрахована автоматично залежно від суми яка була передана в оплатах.
Розберемо на прикладі:
{
"ver": 6,
"device": "postgres1",
"type": 1,
"fiscal": {
"cashier": "",
"task": 1,
"receipt": {
"sum": 79.83,
"autoround": true,
"pays": [
{
"type": 0,
"sum": 100
}
],
"rows": [
{
"code1": "4044572307200",
"name": "Товар 1",
"cnt": 1,
"price": 79.83,
"cost": 79.83,
"taxgrp": 7
}
]
}
}
}
Як видно з прикладу в оплатах передана сума 100 і увімкнено автоокруглення. В такому випадку буде автоматично обраховано як округлення так і решту.
Решта та округлення стосуються тільки оплати готівкою і не використовуються для інших форм оплат.
При розрахунку формами оплати відмінними від готівки - в оплатах передається точна сума (рівна сумі всього чеку) яка була отримана від покупця.
В разі якщо передати всі дані як в запиті у прикладі, тільки змінити форму оплати на іншу окрім готівки - буде повернуто помилку:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "postgres1",
"tag": "0AD658CF-AA7F-4A08-8453-51BF2C09E996",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250923104658806",
"res": 1102,
"res_action": 3,
"errortxt": "Сума чеку не співпадає з сумою по оплатам. Сума чеку \"fiscal.receipt.sum\": 79.83, сума всіх оплат в масиві \"pays\": 100.00.",
"aq_errortxt": "",
"warnings": []
}
Додатково автоматичний обрахунок решти та округлення працює при розрахунку змішаною формою оплати коли одна частина чеку оплачується готівкою, а інша - іншою формою безготівкового розрахунку.
Наприклад
Сума чеку: 79.83
Оплачений картою (50 грн) та готівкою (отримано від клієнта 50 грн)
{
"ver": 6,
"device": "postgres1",
"type": 1,
"fiscal": {
"cashier": "",
"task": 1,
"receipt": {
"sum": 79.83,
"autoround": true,
"pays": [
{
"type": 2,
"sum": 50
},
{
"type": 0,
"sum": 50
}
],
"rows": [
{
"code1": "4044572307200",
"name": "Товар 1",
"cnt": 1,
"price": 79.83,
"cost": 79.83,
"taxgrp": 7
}
]
}
}
}
В такому разі 50грн по карті зарахується в повному розмірі, а 50 грн отриманої готівки в чеку розіб'ється на суму оплати (30), округлення (0.17) та решту (20).
Працюватиме після версії 6.3 обидві схеми зазначення решти та округлення в чеках, якщо реалізована одна - змінювати схему на іншу немає потреби.
В ДМ є внутрішній контроль щоб сума чеку співпадала з сумою оплат, та сума чеку співпадала з сумою товарів. Першочергово відбуваєтсья перевірка відповідності суми чеку до суми по товарам, і тільки після того суми чеку з урахуванням знижки на весь чек з сумою по оплатам.
Як відбувається перевірка:
Сума(sum
) всіх позицій(в масиві fiscal.receipt.rows
) з урахуванням знижки на кожну з позицій має співпадати з сумою по чеку(fiscal.receipt.sum
).
У випадку неспівпадіння буде помилка:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "postgres1",
"tag": "28D0B0C7-6D2A-46F5-969C-E980FDDA7B73",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250923105157815",
"res": 1101,
"res_action": 3,
"errortxt": "Сума чеку не співпадає з сумою по позиціям. Сума чеку \"fiscal.receipt.sum\": 79.83, сума по всіх товарах в масиві \"rows\": 79.81.",
"aq_errortxt": "",
"warnings": []
}
Сума по чеку(fiscal.receipt.sum
) з урахуванням знижок на весь чек(як одної так і кількох) має співпадати з загальною сумою по оплатам в чеку(fiscal.receipt.pays
) якщо використовується будь яка безготівкова форма безготівкова оплати. При оплатах готівкою можна зазначати суму в оплатах більше за суму чеку в такому разі різниця попаде в решту.
У випадку неспівпадіння буде помилка:
{
"ver": 6,
"resp_ver": 4,
"source": "",
"device": "postgres1",
"tag": "0AD658CF-AA7F-4A08-8453-51BF2C09E996",
"task_status": 3,
"type": 1,
"task": 1,
"dt": "20250923104658806",
"res": 1102,
"res_action": 3,
"errortxt": "Сума чеку не співпадає з сумою по оплатам. Сума чеку \"fiscal.receipt.sum\": 79.80, сума всіх оплат в масиві \"pays\": 100.00.",
"aq_errortxt": "",
"warnings": []
}
Наприклад:
{
"ver": 6,
"type": 1,
"device": "postgres1",
"fiscal": {
"task": 1,
"receipt": {
"sum": 60,
"discounts": [
{
"disc": 10,
"disc_type": 1,
"disc_name": "Акція"
},
{
"disc": 6.86,
"disc_type": 0,
"disc_name": "Бонуси"
}
],
"rows": [
{
"cnt": 1,
"cost": 100,
"disc": 40,
"disc_type": 0,
"name": "Товар 10",
"price": 100,
"taxgrp": 1
}
],
"pays": [
{
"sum": 47.14,
"type": 2
}
]
}
}
}
Сума по товарам ("cost": 100
або "price" * "cnt"
, якщо "cost"
не передано) 100 - сума знижки ("disc": 40
) = 60грн.
Тобто сума чеку(fiscal.receipt.sum
) має бути 60грн.
Відмінне значення від 60 призведе до помилки: Сума чеку не співпадає з сумою по позиціям
Сума чеку 60грн - сума першої знижки на чек(10%) = 54грн
Сума чеку після першої знижки 54грн - сума другої знижки (6.86грн) = 47.14грн.
Тобто сума по оплатам в fiscal.receipt.pays
може бути:
Сума чеку не співпадає з сумою по оплатам
.