Суммы, скидки и НДС
Тийины и тысячные
Заголовок раздела «Тийины и тысячные»Дробные числа в деньгах дают ошибки округления, поэтому локальный API принимает только целые числа.
| Что | В чём | Пример |
|---|---|---|
| Цена, скидка, оплата | тийины (1 сум = 100 тийин) | 12 500,50 сум → 1250050 |
| Количество | тысячные доли | 1 шт → 1000, 0,25 кг → 250, 1,5 л → 1500 |
| НДС | ставка в процентах | 12 или 0 — сумму НДС считает приложение |
Перевод из сумов: Math.round(сумма * 100); из штук или килограммов: Math.round(количество * 1000).
Стоимость позиции = round(unitPrice × quantity / 1000). Например, 0,25 кг по 120 000 сум/кг: 12000000 × 250 / 1000 = 3000000 тийин — 30 000 сум.
Сколько платить
Заголовок раздела «Сколько платить»Сумма оплат должна точно равняться сумме позиций минус скидки:
payments.cash + payments.card = Σ стоимость позиций − discountИначе приложение ответит 400 BRIDGE_PAYMENT_MISMATCH и укажет обе суммы в message. Позиции с нулевой стоимостью (комплимент от заведения) в ФМ не отправляются и на сумму не влияют.
Скидку можно дать двумя способами, и их можно сочетать:
items[].discount— скидка на конкретную позицию;discountу чека — общая скидка на чек, которая включает скидки позиций.
Приложение раскладывает общую скидку по позициям само, потому что ФМ принимает скидку только у позиции:
- Скидки позиций остаются как есть (но не больше стоимости позиции).
- Остаток
discount − Σ скидок позицийделится между позициями пропорционально сумме к оплате. - Тийины округления добавляются к первой позиции, у которой ещё есть запас.
Если discount меньше суммы скидок позиций, действуют скидки позиций.
НДС считается с суммы к оплате, то есть после скидки: round(к оплате × ставка / (100 + ставка)). Цена уже включает НДС — отдельно его прибавлять не нужно.
Примеры
Заголовок раздела «Примеры»Все числа — то, что приложение отправит в ФМ.
Без скидки
Заголовок раздела «Без скидки»Лепёшка: 2 шт по 5 000 сум, НДС 12%.
{ "quantity": 2000, "unitPrice": 500000, "vatPercent": 12 }| Стоимость | Скидка | К оплате | НДС |
|---|---|---|---|
| 1 000 000 | 0 | 1 000 000 | 1000000 × 12 / 112 = 107 143 |
Оплата: "payments": { "cash": 1000000 }.
Скидка на позицию
Заголовок раздела «Скидка на позицию»Чай за 8 000 сум со скидкой 500 сум. Скидка позиции входит и в скидку чека:
{ "items": [{ "quantity": 1000, "unitPrice": 800000, "discount": 50000, "vatPercent": 12 }], "discount": 50000, "payments": { "cash": 750000 }}| Стоимость | Скидка | К оплате | НДС |
|---|---|---|---|
| 800 000 | 50 000 | 750 000 | 80 357 |
Скидка на чек
Заголовок раздела «Скидка на чек»Плов за 10 000 сум и самса за 8 000 сум, скидка на весь чек 1 000 сум:
{ "items": [ { "name": "Плов", "quantity": 1000, "unitPrice": 1000000, "vatPercent": 12 }, { "name": "Самса", "quantity": 1000, "unitPrice": 800000, "vatPercent": 12 } ], "discount": 100000, "payments": { "card": 1700000 }}| Позиция | Стоимость | Скидка | К оплате | НДС |
|---|---|---|---|---|
| Плов | 1 000 000 | 55 555 + 1 тийин округления = 55 556 | 944 444 | 101 190 |
| Самса | 800 000 | 44 444 | 755 556 | 80 952 |
| Итого | 1 800 000 | 100 000 | 1 700 000 |
Скидка на позицию и на чек вместе
Заголовок раздела «Скидка на позицию и на чек вместе»Те же плов и самса. На плов скидка 500 сум, на весь чек — ещё 1 000 сум. В discount чека передаётся общая скидка — 1 500 сум:
{ "items": [ { "name": "Плов", "quantity": 1000, "unitPrice": 1000000, "discount": 50000, "vatPercent": 12 }, { "name": "Самса", "quantity": 1000, "unitPrice": 800000, "vatPercent": 12 } ], "discount": 150000, "payments": { "cash": 1650000 }}| Позиция | Стоимость | Скидка | К оплате | НДС |
|---|---|---|---|---|
| Плов | 1 000 000 | 50 000 + 54 286 = 104 286 | 895 714 | 95 969 |
| Самса | 800 000 | 45 714 | 754 286 | 80 816 |
| Итого | 1 800 000 | 150 000 | 1 650 000 |
Остаток скидки 1 000 сум разнесён пропорционально 950 000 и 800 000 тийин к оплате.
Весовой товар без НДС
Заголовок раздела «Весовой товар без НДС»0,25 кг по 120 000 сум/кг, НДС 0%:
{ "quantity": 250, "unitPrice": 12000000, "vatPercent": 0 }Стоимость 3 000 000 тийин, НДС 0.
Оплата картой и смешанная
Заголовок раздела «Оплата картой и смешанная»"payments": { "cash": 500000, "card": 1200000, "cardType": "personal" }cardType: personal — карта физлица (по умолчанию), corporate — корпоративная.