# Счёт pending күйінде тұрып қалды

> Pending — қате емес, қалыпты күй: счёт шығарылған, клиент әлі төлемеген. Қанша тұрады, қашан expired болады, біз оны қалай тексереміз және шынымен қашан алаңдау керек.

## Қысқаша

`pending` — **күту күйі, қате емес**. Ол «счёт шығарылды, клиент әлі растаған жоқ» дегенді білдіреді. Бұл күйде счёт өзінің мерзімі біткенше тұра береді, сосын өзі `expired` болады. Ештеңе істеудің қажеті жоқ: біз счётты фонда тұрақты тексеріп отырамыз, клиент төлеген сәтте күйі `paid`-ке ауысады да, сізге webhook кетеді. Алаңдау керек жалғыз жағдай — **бүкіл** счёттарыңыз pending-те тұрып қалса.

## Счёттың күйлері

```
new → pending → paid
              → cancelled
              → expired
```

Төленген счёт кейін `refunded` немесе `partially_refunded` болуы мүмкін.

| Күй | Мағынасы | Ашық па |
|---|---|---|
| `new` | Счёт жасалды, әлі клиентке көрсетілмеген | Иә |
| `pending` | Клиентке ұсынылды, растауын күтіп тұр | Иә |
| `paid` | Клиент төледі, ақша Kaspi шотыңызда | Жоқ |
| `cancelled` | Сіз болдырмадыңыз | Жоқ |
| `expired` | Мерзімі бітті, клиент төлемеді | Жоқ |

`new` мен `pending` — ашық счёттар, яғни әлі төленуі мүмкін. `paid`, `refunded`, `partially_refunded` — төленген деп есептеледі.

## Қанша уақыт тұрады

Бұл счёттың түріне байланысты, әрі мерзімді Kaspi белгілейді — біз оны өзіміз ұзарта алмаймыз.

| Түрі | Не болады | Мерзімі |
|---|---|---|
| `qr` | QR + төлем сілтемесі | Сканерлеу терезесі қысқа, шамамен үш минут |
| `phone` | Клиенттің Kaspi-іне push | Ұзағырақ: клиент хабарламаны кейін ашып төлей алады |

**Нақты уақытты кодта тұрақты сан қылып жазбаңыз.** Счёт жасағандағы жауапта `expiresAt` өрісі келеді — қашан өтетінін содан алыңыз. Kaspi терезені өзгертсе, сіздің кодыңыз өзі бейімделеді.

QR-дың терезесі өтіп кетсе, клиент сканерлегенде «кейінірек көріңіз» деген хабар көреді. Бұл бөлек мақалада: [QR «кейінірек көріңіз» деп тұр](/kb/qr-expired).

## Біз оны қалай тексереміз

Клиент төлегенін Kaspi бізге өзі хабарламайды — біз счёттардың күйін өзіміз сұрап отырамыз. Тексеруші процесс **әр үш секунд сайын** жүреді, ал әр счёт жасына қарай әртүрлі жиілікпен тексеріледі:

| Счёттың жасы | Тексеру жиілігі |
|---|---|
| 3 минутқа дейін | Әр айналымда |
| 30 минутқа дейін | 20 секунд сайын |
| Одан ескі | 90 секунд сайын |

Кезек ең жаңа счёттан басталады — яғни дәл қазір кассада тұрған клиенттің төлемі бірінші кезекте тексеріледі. Іс жүзінде клиент төлегеннен кейін webhook әдетте **бес секунд ішінде** келеді.

Ескертпе: **Kaspi төлемнің дәл уақытын бермейді.** Сондықтан «клиент растағаннан бізге жеткенге дейін қанша кетті» дегенді Kaspi деректері бойынша өлшеу мүмкін емес.

## Қашан алаңдау керек

Pending-тің өзі мәселе емес. Мыналар мәселе:

- **Барлық счёт pending-те қалып, бірде-біреуі paid болмаса.** Тест режимі қосулы болуы мүмкін: [Клиентке төлем келмей жатыр](/kb/payment-not-arriving).
- **Клиент «төледім» дейді, ал счёт әлі pending.** Бір минут күтіңіз. Өзгермесе, Kaspi қосымшасындағы операцияны нақтылаңыз: төлем мүлдем басқа счётқа кеткен болуы мүмкін.
- **Счёт paid болды, бірақ сізге webhook жетпеді.** Бұл бөлек мәселе: [Webhook келмей жатыр](/kb/webhook-not-arriving).
- **Pending счёттар жүздеп жиналып қалса.** Кодыңыз төленбейтін счёттарды артық шығарып жатқан болуы мүмкін.

## Не істемеу керек

- **Pending счётты «төленген» деп есептемеңіз.** Тауарды немесе қызметті тек `paid` күйінен кейін беріңіз.
- **Бір клиентке қайта-қайта жаңа счёт жасамаңыз.** Ескісі pending тұрғанда жаңасын жасасаңыз, клиент екеуін де төлеп жіберуі мүмкін.
- **Күйді тым жиі сұрамаңыз.** Біз оны өзіміз тексеріп отырмыз; тым жиі сұрау жиілік шектеуіне тіреледі.
- **Pending счётты қайтаруға тырыспаңыз.** Ол әлі төленбеген, қайтарар ақша жоқ.

## Кеш келген төлем

`expired` немесе `cancelled` болып қалған счётқа ақша кешігіп келуі мүмкін. Ондайда сізге `invoice.paid` оқиғасы **`late: true`** белгісімен кейін де жетеді.

Бұл шын төлем — ақша Kaspi шотыңызда. Екі жолдың бірін таңдайсыз: қызметті беру немесе ақшаны қайтару. Ең дұрысы — өңдеушіңіз `late` белгісін бастапқыда-ақ ескеріп, ондай счёттарды бөлек тізімге шығарсын.

## Жиі қойылатын сұрақтар

**Pending счётты болдырмауға бола ма?** Иә, `POST /api/v1/invoices/{id}/cancel` арқылы. Клиент әлі төлемеген болса, счёт жабылады.

**Expired болған счётты қайта тірілтуге бола ма?** Жоқ. Жаңа счёт жасайсыз.

**Pending счёттар тарифтің лимитіне кіре ме?** Айлық лимит жасалған счёттардың санымен есептеледі, төленгенімен емес.

**Клиент QR-ды скандады, бірақ төлемеді — күйі өзгере ме?** Жоқ, күйі тек нақты растаудан кейін `paid` болады. Сканерлеудің өзі төлем емес.

**Sandbox-та pending-тен қалай шығаруға болады?** `POST /api/v1/invoices/{id}/simulate` арқылы керекті күйді өзіңіз қоясыз. Бұл эндпоинт тек sandbox-та істейді.
