Sale
Sotuv cheki bosadi.
Har bir komanda kabi, bu ham o'sha bitta manzilga ketadi. Komanda nomi URL'da emas, so'rov tanasida.
So'rov
{
"id": "1",
"method": "send",
"data": {
"command": "Sale",
"payload": {
"saleType": "Sale",
"amount": 12500,
"discountAmount": 0,
"totalAmount": 12500,
"shouldPrintReceipt": true,
"products": [
{
"id": "p_1001",
"name": "Espresso",
"barcode": null,
"units": "шт",
"price": 12500,
"vat": 0.12,
"amount": 1,
"isDecimalUnits": false,
"labels": [],
"psid": "10112001001000000",
"packageCode": 1512472,
"unitCode": null,
"discountAmount": 0,
"commissionTIN": null,
"commissionPINFL": null
}
],
"payments": [{ "paymentType": "Cash", "amount": 12500 }]
}
}
}Javob
{ "id": "1", "success": true, "data": { "saleId": 142 } }saleId ni saqlang. U shu chekni keyinchalik qaytarish uchun kerak, va uni keyin izlab topishning imkoni yo'q.
payload
| Maydon | Turi | Tavsif |
|---|---|---|
saleType | string | "Sale" |
amount | integer | Chegirmadan oldingi umumiy summa, tiyinda |
discountAmount | integer | Butun chekka chegirma, tiyinda. Bo'lmasa 0. |
totalAmount | integer | amount − discountAmount |
products | array | Chek pozitsiyalari, quyida |
payments | array | To'lovlar, quyida |
shouldPrintReceipt | boolean | true — qog'ozga bosish |
products
| Maydon | Turi | Tavsif |
|---|---|---|
id | string | Istalgan noyob pozitsiya id'si |
name | string | Chekda bosiladigan nom |
barcode | null | null yuboring |
units | string | "шт" |
price | integer | Bitta donaning narxi, tiyinda |
vat | number | 12% uchun 0.12. 12 emas. |
amount | number | Miqdor |
isDecimalUnits | boolean | Og'irlik bo'yicha sotiladigan tovarlar uchun true |
labels | array | Markirovka kodlari, har bir dona uchun bitta. Markirovkasiz mahsulot uchun []. |
psid | string | IKPU, aynan 17 xona, matn sifatida |
packageCode | integer | Qadoq kodi, son |
unitCode | null | null yuboring |
discountAmount | integer | Bitta donaga chegirma, tiyinda. Bo'lmasa 0. |
commissionTIN | null | null yuboring |
commissionPINFL | null | null yuboring |
payments
| Maydon | Turi | Tavsif |
|---|---|---|
paymentType | string | "Cash", "Card" yoki "Cashless" |
amount | integer | Summa, tiyinda |
Bir nechta to'lov — aralash to'lov:
"payments": [
{ "paymentType": "Card", "amount": 40000 },
{ "paymentType": "Cash", "amount": 5000 }
]Summalar to'g'ri kelishi shart
To'g'ri kelmasa, apparat chekni rad etadi:
amount = barcha mahsulotlarning (price × amount) yig'indisi
totalAmount = amount − discountAmount
payments ≥ totalAmountMisol: 12500 × 2 + 22500 × 1 = 47500 → amount: 47500, 2500 chegirma bilan → totalAmount: 45000, to'lovlar yig'indisi 45000 bo'lishi kerak.
Qoidalar
psid va packageCode har bir pozitsiyada majburiy. Ularsiz chek rad etiladi.
Tamaki va alkogolni naqd pulga sotib bo'lmaydi. Agar bironta to'lov Cash bo'lsa, birorta mahsulotning psid si 02401, 02402, 02403 (tamaki) yoki 02203–02208 (alkogol) bilan boshlanmasligi kerak. Hatto bir tiyin naqd pul ham chekni bloklaydi — Card yoki Cashless ishlating.
Markirovkalangan tovarlarga kod kerak. Markirovka talab qiladigan mahsulotlar uchun labels da har bir dona uchun bitta kod bo'lishi shart:
{ "name": "Sigaretalar", "amount": 2, "labels": ["<kod 1>", "<kod 2>"] }Timeout
Sale 6 daqiqagacha davom etishi mumkin, chunki apparat soliq xizmati bilan bog'lanayotgan bo'lishi mumkin. Klient timeout'ini kamida 400 soniya qilib qo'ying.
Agar timeout bo'lsa, qayta yubormang — chek allaqachon bosilgan bo'lishi mumkin. Avval PrintLastReceipt yuborib tekshiring.