# Автомектеп пен курстарға

> Оқу ақысын Kaspi арқылы жинау: кабинеттен қолмен счёт, бөліп төлеуге жазылым, топтап счёт шығару және төлем сілтемесі. Топ бойынша есеп қалай жүреді.

## Қысқаша

Автомектеп пен офлайн курстарда оқу ақысы әдетте бірнеше кезеңге бөлінеді, ал оқушылар саны ондап саналады. Төрт жол бар: кабинеттен қолмен счёт (код керек емес), топ бойынша топтап счёт, әр оқушыға жазылым арқылы кезеңдік счёт, және тұрақты төлем сілтемесі. Жазылым туралы бірден нақтылайық: ол **счётты автоматты шығарады**, ақша оқушының шотынан өздігінен шешілмейді — әр төлемді оқушы өзі растайды.

## Сценарий

Топ 1 қыркүйекте басталады, 20 оқушы, оқу ақысы 180 000 ₸, үш айға бөлінеді.

- Әкімші әр оқушыға айына бір счёт шығаруы керек — қолмен 60 счёт.
- Кім төледі, кім төлемеді — бақылау керек.
- Біреу оқудан шығып кетсе, ақшаны ішінара қайтару керек.
- Ай соңында директорға топ бойынша есеп керек.

Мұның бәрін Kaspi-дің өз кассирі арқылы, бөлек терминалсыз жүргізуге болады.

## Төрт жол: қайсысын қашан

| Жол | Код керек пе | Қашан ыңғайлы |
|---|---|---|
| Кабинеттен қолмен счёт | Жоқ | Аз оқушы, әркімге әр уақытта |
| Төлем сілтемесі | Жоқ | Жарнамада, Instagram-да, тіркеу формасында |
| Топтап счёт (`bulk`) | Иә | Айдың басында бүкіл топқа бірден |
| Жазылым | Ішінара | Әр оқушыға кестемен, ай сайын өзі шығады |

## Кабинеттен қолмен счёт — кодсыз нұсқасы

Ең қарапайымы. [Кабинетке](https://qut.kz/app) кіресіз, **Счёттар** бөліміне барасыз, счёт жасайсыз: сомасы, сипаттамасы («Автомектеп, 1-төлем, қыркүйек»), оқушының телефоны.

Екі түрі бар:

- **QR счёт** — экранда QR көрсетіледі, оқушы кабинетте отырып сканерлейді. Сілтемесін де жіберуге болады.
- **Телефонға счёт** — оқушының Kaspi қосымшасына push келеді. Оқушы алыста болса ыңғайлы, бірақ телефон нөмірі дұрыс болуы керек.

Айырмашылығы: [QR счёт пен телефонға счёт](/kb/qr-vs-phone).

Сипаттамаға топ пен кезеңді жазып қойған дұрыс — кейін экспорттан іздеуге көмектеседі.

## Жазылым арқылы кезеңдік төлем

Жазылым — оқу ақысын ай сайын бөліп төлейтін оқушыға арналған. Кестеге қоясыз (мысалы `month`, әр 1-күні), әрі қарай счёт өзі шығады.

**Маңызды, шатастырмаңыз:** жазылым тек счёт шығарады. Ақша оқушының Kaspi шотынан өздігінен шешілмейді — оған счёт келеді, ол ашып, өзі растайды. Сондықтан «төлем автоматты» деп уәде бермеңіз, оқушыға «ай сайын счёт келеді, сіз растайсыз» деп түсіндірген дұрыс.

Баптаулары:

- **Аралығы:** `day`, `week`, `month`, `every` арқылы кратность (мысалы әр 2 апта сайын).
- **Қайталау сатысы** `retryDelaysMin` — оқушы бірден төлемесе, счёт қайта жіберіледі. Әдепкі `[15, 60, 360]` минут, ең көбі 5 мән.
- Саты біткенде сол кезек тасталады, **кесте тоқтамайды** — келесі айда счёт қайтадан шығады. Күйі `failedRuns`, `lastError`, `lastRunStatus` өрістерінен көрінеді.
- **Өткізіп алу саясаты** `misfirePolicy`: `run_once` (әдепкі) немесе `skip`.
- `POST /subscriptions/{id}/resume` `{ catchUp: true }` — кідіртілген жазылымды жалғастырып, өткізіп алған кезекті бірден жіберу.

Толығы: [Жазылым API](/kb/subscriptions-api).

## Топтап счёт шығару

Топ үлкен болса, айдың басында бір сұрауда бүкіл топқа счёт шығарасыз: `POST /api/v1/invoices/bulk`, бір сұрауда 1-ден 100-ге дейін.

Әр элемент бөлек тексеріледі: біреуінің телефоны қате жазылса, қалғаны жасалады да, сол біреуі қате қайтарады. Жауаптағы жолдарды өз тізіміңізбен салыстырып, қатесі барларын түзеп қайта жіберіңіз.

Дубльден сақтану үшін `Idempotency-Key` тақырыбын беріңіз — мәні «топ + кезең» түрінде тұрақты болсын. Әкімші батырманы екі рет бассa да, счёт екі есе шықпайды.

## Төлем сілтемесі

`qut.kz/p/<slug>` түріндегі тұрақты сілтеме. Оны Instagram профиліне, сайттағы «Тіркелу» батырмасына, жарнамаға қоюға болады. Сома тұрақты да, ашық та болады — ашық сомада оқушы төлейтін бөлігін өзі енгізеді (мысалы алғашқы жарна).

Сілтеме арқылы келген төлемдер де кабинетте, экспортта көрінеді. Толығы: [Төлем сілтемелері](/kb/payment-links).

## Топ бойынша есеп

Есепті кейін жинау үшін счёт жасаған сәтте белгі қою керек:

- `externalOrderId` — оқушының ішкі нөмірі немесе «топ-нөмір/оқушы-нөмір» түріндегі жол.
- `description` — оқушы көретін мәтін, оған топ атауы мен кезеңді жазыңыз.
- `metadata` — топ, нұсқаушы, филиал, кезең. Бұл өріс webhook-та қайта келеді және есепке ыңғайлы.

Кабинеттегі **Счёттар** бөлімінен кезең бойынша сүзіп, CSV экспорттайсыз. Бірнеше филиал болса, әрқайсысына жеке API кілт жасаңыз — сонда есеп көзі бойынша бөлінеді.

## Ерекше ескертулер

- **Оқушыны шығарып жіберсеңіз** ақшаны `POST /invoices/{id}/refund` арқылы толық немесе ішінара қайтарасыз. Ішінара қайтару кезінде `amount` беріңіз.
- **Сома бүтін теңге болсын** телефонға счёт жағдайында. Үшке бөлгенде тиын қалса, соңғы төлемге қосыңыз.
- **QR-дың сканерлеу терезесі шектеулі.** Оқушыға QR суретін емес, `payUrl` сілтемесін жіберген дұрыс — сілтеме ашылған сәтте жаңа QR көрсетіледі. Нақты уақытты `expiresAt` өрісінен алыңыз.
- **Кассир нөмірі оқушыға көрінеді** счёт туралы хабарламада. Бұл Kaspi-дің қалыпты жұмысы, бөлек нөмір алғаныңыз дұрыс.
- **Айлық лимитті есептеңіз.** 20 оқушы × 3 төлем = 60 счёт, оған қайта жіберулерді қосыңыз. Тариф таңдау: [Қай тарифті таңдау керек](/kb/tariff-choose).

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

**Ақша оқушының картасынан өзі шешіле ме?** Жоқ. Жазылым тек счёт шығарады, әр төлемді оқушы Kaspi қосымшасында өзі растайды.

**Программист жалдамай жұмыс істей ала ма?** Иә. Кабинеттен қолмен счёт, төлем сілтемелері және Telegram бот код жазбай-ақ жұмыс істейді. Топтап шығару мен жазылымды API арқылы қосу үшін техникалық адам керек.

**Оқушы төлемей қойса не болады?** Счёт `expired` болады, оқушыға қызмет берілмейді. Жазылымда қайталау сатысы бойынша счёт қайта жіберіледі, содан кейін кезек тасталады, бірақ келесі кезең бәрібір шығады.

**Топ бойынша кім төледі, кім төлемеді — қайдан көремін?** Кабинеттегі Счёттар бөлімінен кезең мен күй бойынша сүзесіз, содан кейін CSV экспорттайсыз.

**Бірнеше филиалды бөлек жүргізуге бола ма?** Иә. Әр филиалға бөлек API кілт жасаңыз, есепте төлемдер көзі бойынша ажыратылады.
