Skip to content

Sale

Sotuv cheki bosadi.

POSThttps://localhost:26496/service·command: Sale

Har bir komanda kabi, bu ham o'sha bitta manzilga ketadi. Komanda nomi URL'da emas, so'rov tanasida.

So'rov

json
{
  "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

json
{ "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

MaydonTuriTavsif
saleTypestring"Sale"
amountintegerChegirmadan oldingi umumiy summa, tiyinda
discountAmountintegerButun chekka chegirma, tiyinda. Bo'lmasa 0.
totalAmountintegeramount − discountAmount
productsarrayChek pozitsiyalari, quyida
paymentsarrayTo'lovlar, quyida
shouldPrintReceiptbooleantrue — qog'ozga bosish

products

MaydonTuriTavsif
idstringIstalgan noyob pozitsiya id'si
namestringChekda bosiladigan nom
barcodenullnull yuboring
unitsstring"шт"
priceintegerBitta donaning narxi, tiyinda
vatnumber12% uchun 0.12. 12 emas.
amountnumberMiqdor
isDecimalUnitsbooleanOg'irlik bo'yicha sotiladigan tovarlar uchun true
labelsarrayMarkirovka kodlari, har bir dona uchun bitta. Markirovkasiz mahsulot uchun [].
psidstringIKPU, aynan 17 xona, matn sifatida
packageCodeintegerQadoq kodi, son
unitCodenullnull yuboring
discountAmountintegerBitta donaga chegirma, tiyinda. Bo'lmasa 0.
commissionTINnullnull yuboring
commissionPINFLnullnull yuboring

payments

MaydonTuriTavsif
paymentTypestring"Cash", "Card" yoki "Cashless"
amountintegerSumma, tiyinda

Bir nechta to'lov — aralash to'lov:

json
"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    ≥ totalAmount

Misol: 12500 × 2 + 22500 × 1 = 47500amount: 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 0220302208 (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:

json
{ "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.

ARCA Proxy API