# Sotuvning hayotiy sikli

> Qoralama, kechiktirish, to'lov, qaytarish — chek tizim orqali qanday o'tadi.

BILLZ’da sotuv — bir necha holatlardan o’tuvchi obyekt.

```plaintext
qoralama yaratildi
   ├── pozitsiyalar qo'shildi
   ├── mijoz biriktirildi          (ixtiyoriy)
   ├── chegirmalar qo'llanildi         (ixtiyoriy)
   ├── sertifikat qo'shildi      (ixtiyoriy)
   │
   ├──> kechiktirilgan  ──> ishga qaytarildi
   │
   └──> to'langan  ──> sotuv (fiskal chek)
```

> **Kalit uchun ba’zi metodlarni alohida ochish kerak**
>
> Integratsiya kalitini chiqarish metodlarning asosiy to’plamini ochadi; kalit ruxsati kengaytirilmaguncha sezgir metodlar `403` deb javob beradi.
>
> Marshrutlarning asosiy ro’yxati — [integratsiya kaliti nimalarga qodir ekanligi](/uz/reference/permissions/).

## Qoralama

`POST /v2/order` tanasi bilan `{"shop_id": "…"}` chaqirish orqali yaratiladi. Bu **asinxron** metod: `Billz-Response-Channel: HTTP` bilan javob konvertda keladi, unda qoralama identifikatori `id` maydonida, uning qisqa raqami esa `data.order_number` da joylashgan bo’ladi.

Qoralama do’kondagi kassirga ko’rinadi va u to’langunga yoki o’chirilgunga qadar mavjud bo’ladi (`DELETE /v2/order/:id` — asinxron).

## Pozitsiyalar

Bittadan qo’shiladi: `POST /v2/order-product/:order_id` (asinxron), miqdori — `sold_measurement_value` maydonida.

Xuddi shu metod pozitsiyani olib tashlaydi: `sold_measurement_value: 0` chekdan qatorni unga tayinlangan qo’lda kiritilgan chegirma bilan birga o’chiradi.

> **Pozitsiyalar eskirgan `order.add_item` bilan qo’shilmaydi.**

## Kechiktirish

Alohida holat: chek to’xtatib turilgan, ammo yo’qolmagan. Kechiktirish — `POST /v2/order/create_postpone` (asinxron), tanada `order_id`, `time` va ixtiyoriy `comment`. Ishga qaytarish — `POST /v2/order/return-postpone`. `time` maydoni majburiy va qat’iy formatni talab qiladi: `2024-07-16 06:47:30`.

## To’lov

`POST /v2/order-payment/:order_id` chekni yopadi. Bu **sinxron** metod: unga `Billz-Response-Channel` sarlavhasi kerak emas. Tanada — to’lovlar massivi: chekni bir vaqtning o’zida bir nechta metodlar bilan, shuningdek, `with_cashback` orqali mijoz bonuslari bilan ham to’lash mumkin. To’lovdan so’ng qoralama sotuvga aylanadi va hisobotlarga tushadi.

Kassa smenalari mavjud bo’lganda, to’lov uchun sotuv do’konida **ochiq smena** bo’lishi talab etiladi. To’lov xatolarini tahlil qilish — [onlayn buyurtmada](/uz/guides/ecommerce-order/).

## Chegirmalar

Qo’lda beriladigan chegirma — `POST /v2/order-manual-discount/:order_id` (asinxron): butun savatga yoki, agar `product_id` uzatilgan bo’lsa, aniq bir mahsulotga.

Chek summasini qayta hisoblash — `POST /v1/recalculate-order-bill/:order_id`, **sinxron**: javobda sotuvning qayta hisoblangan tafsilotlari bo’ladi.

## Nima sinxron va nima yo’q

Har bir metodning o’z rejimi bor:

| Metod                                       | Qanday ishlaydi |
| ------------------------------------------- | --------------- |
| `POST /v1/recalculate-order-bill/:order_id` | sinxron         |
| `POST /v2/order-payment/:order_id`          | sinxron         |
| `GET /v2/order/:id`, `GET /v2/order-notes`  | sinxron         |
| `POST /v2/order` (sotuv yaratish)           | asinxron        |
| `POST /v2/order-product/:order_id`          | asinxron        |
| `POST /v2/order-manual-discount/:order_id`  | asinxron        |
| `PUT /v2/order-customer-new/:order_id`      | asinxron        |
| `DELETE /v2/order/:id`                      | asinxron        |
| `POST /v2/order/create_postpone`            | asinxron        |
| `POST /v2/order/return-postpone`            | asinxron        |

Asinxron metodlar uchun `Billz-Response-Channel: HTTP` uzatiladi, aks holda javobda faqat so’rov identifikatori keladi.