# Mahsulotni hisobdan chiqarish

> Hisobdan chiqarishni yarating, uni pozitsiyalar bilan to'ldiring va qoldiq haqiqatan ham kamayadigan qilib o'tkazing.

Vazifa: do’kon omboridan mahsulotni hisobdan chiqarish — brak, yo’qotish, kamomad — va qoldiq kamayganini ko’rish.

BILLZ tizimida hisobdan chiqarish ikki bosqichdan iborat: avval hujjat yig’iladi, so’ngra u o’tkaziladi. **Qoldiqni faqat o’tkazish amali o’zgartiradi.**

## Qadamlar

```plaintext
GET  /v2/write-off-reason        hisobdan chiqarish sababi (ma'lumotnoma)
POST /v2/write-off               ──> ID hujjat (qoralama)
POST /v2/write-off/:id/add       har bir pozitsiya alohida so'rov orqali
PUT  /v2/write-off/finish/:id    o'tkazish ──> qoldiq kamayadi
```

Barcha o’zgartirish metodlari — asinxron. `Billz-Response-Channel: HTTP` sarlavhasi talab etiladi, aks holda natija o’rniga faqat hodisa identifikatori qaytadi.

### 1. Hisobdan chiqarish sababi

```bash
curl -X GET 'https://api-admin.billz.ai/v2/write-off-reason' \
  -H 'Authorization: Bearer TOKEN'
```

```json
{ "count": 5, "write_off_reasons": [ { "id": "d6ccea76-...", "name": "Nuqson" } ] }
```

Sabablar faqat BILLZ interfeysida kiritiladi.

### 2. Hujjat yaratish

```bash
curl -X POST 'https://api-admin.billz.ai/v2/write-off' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Billz-Response-Channel: HTTP' \
  -d '{
    "name": "Hisobdan chiqarish 2026-08-22",
    "reason_id": "d6ccea76-7412-48b0-bad3-e0bc0f41673f",
    "shop_id": "70919136-9481-4c7e-8581-685d750d67a9",
    "comment": ""
  }'
```

Hisobdan chiqarish do’koni `shop_id` maydoni orqali belgilanadi.

> **Metod faqat `Billz-Response-Channel: HTTP` bilan chaqiriladi**
>
> Agar token uchun `shop_id` ga kirish imkoni bo’lmasa, hujjat yaratilmaydi va «do’konga kirish imkoni yo’q» degan rad javobi faqat javob kanalida ko’rinadi. Sarlavhasiz `200` va UUID keladi.

### 3. Pozitsiyalarni qo’shish

Har bir so’rovda bittadan pozitsiya. `:id` — oldingi qadamdagi hujjat ID raqami.

```bash
curl -X POST 'https://api-admin.billz.ai/v2/write-off/HISOBDAN_CHIQARISH_ID/add' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Billz-Response-Channel: HTTP' \
  -d '{
    "shop_id": "70919136-9481-4c7e-8581-685d750d67a9",
    "product_id": "aba9d9ad-5d37-4836-81a4-9a60648d087e",
    "writeoff_measurement_value": 1
  }'
```

| Maydon                       | Bu nima                                              |
| ---------------------------- | ---------------------------------------------------- |
| `shop_id`                    | hisobdan chiqarish do’koni, hujjatdagi bilan bir xil |
| `product_id`                 | `GET /v2/products` dan mahsulot UUID raqami          |
| `writeoff_measurement_value` | hisobdan chiqariladigan miqdor                       |

> **Integratsiya kaliti yordamida pozitsiyani olib tashlash imkonsiz**
>
> Agar qoralamaga ortiqcha pozitsiya tushib qolsa, hujjat rad etiladi (`PUT /v2/write-off/cancel/:id`) va qaytadan yig’iladi.

### 4. O’tkazish

```bash
curl -X PUT 'https://api-admin.billz.ai/v2/write-off/finish/HISOBDAN_CHIQARISH_ID' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Billz-Response-Channel: HTTP'
```

O’tkazish va qoldiqni hisobdan chiqarish (FIFO) **bitta tranzaksiyada** amalga oshiriladi.

> **Qoldiq darhol o’zgaradi, katalog va hisobotlarda kechikish bilan ko’rinadi**
>
> `finish` ga muvaffaqiyatli javob qoldiq o’zgarganini va yangi operatsiyalar uchun amal qilishini anglatadi. Katalog va hisobotlarda o’zgarish biroz kechikish bilan paydo bo’ladi.

O’tkazilmagan hujjatni rad etish — `PUT /v2/write-off/cancel/:id`.

## Ruxsatlar

Veb-interfeys foydalanuvchisi uchun hisobdan chiqarish **to’rtta mustaqil ruxsatga** ajratilgan:

| Ruxsat                                   | Nimani ochadi                                                   |
| ---------------------------------------- | --------------------------------------------------------------- |
| Hisobdan chiqarishlar ro’yxatini ko’rish | hisobdan chiqarishlar ro’yxati, pozitsiyalar, yuklab olishlar   |
| Hisobdan chiqarishlar tannarxini ko’rish | tannarx ko’rsatilgan hujjat kartochkasi                         |
| Hisobdan chiqarishni yaratish            | yaratish, `/add`, `/remove`, tahrirlash va rad etish (`cancel`) |
| Hisobdan chiqarishlarni yakunlash        | `PUT /v2/write-off/finish/:id`                                  |

Hisobdan chiqarishlar bo’yicha hisobot — alohida ruxsat («„Hisobdan chiqarishlar“ hisoboti»).

## Natijani qanday tekshirish mumkin

| Nima                                   | Metod                                                                     |
| -------------------------------------- | ------------------------------------------------------------------------- |
| Hisobdan chiqarishlar bo’yicha hisobot | `GET /v1/write-off-report-table`                                          |
| Hozirgi mahsulot qoldig’i              | `GET /v2/products` → `shop_measurement_values[].active_measurement_value` |

## O’xshash jarayonlar

Transfer va yetkazib beruvchiga buyurtma berish xuddi shu «yig’ish → to’ldirish → o’tkazish» sxemasi bo’yicha tuzilgan — [ombor jarayonlari](/uz/concepts/processes/)ga qarang.