# Автошколы и курсы

> Как собирать оплату за обучение через Kaspi: счёт вручную из кабинета, подписка для периодических платежей, массовое выставление на группу и ссылка на оплату. Как устроена отчётность по группам.

## Коротко

В автошколе и на офлайн-курсах оплата обычно делится на несколько частей, а учеников — десятки. Есть четыре способа: счёт вручную из кабинета (код не нужен), массовое выставление на всю группу, подписка с периодическими счетами на каждого ученика и постоянная ссылка на оплату. Про подписку сразу уточним: она **автоматически выставляет счёт**, деньги со счёта ученика сами не списываются — каждую оплату ученик подтверждает сам.

## Сценарий

Группа стартует 1 сентября, 20 учеников, обучение стоит 180 000 ₸ и делится на три месяца.

- Администратору нужно выставлять каждому ученику счёт раз в месяц — вручную это 60 счетов.
- Нужно видеть, кто заплатил, а кто нет.
- Если кто-то уходит с курса, часть денег приходится возвращать.
- В конце месяца директору нужен отчёт по группам.

Всё это можно вести через собственного кассира Kaspi, без отдельного терминала.

## Четыре способа: что когда

| Способ | Нужен ли код | Когда удобно |
|---|---|---|
| Счёт вручную из кабинета | Нет | Мало учеников, каждому в своё время |
| Ссылка на оплату | Нет | В рекламе, в Instagram, на форме записи |
| Массовое выставление (`bulk`) | Да | В начале месяца сразу на всю группу |
| Подписка | Частично | Каждому ученику по расписанию, счёт выходит сам |

## Счёт вручную из кабинета — вариант без кода

Самый простой. Заходите в [кабинет](https://qut.kz/app), открываете раздел **Счета** и создаёте счёт: сумма, описание («Автошкола, 1-й платёж, сентябрь»), телефон ученика.

Есть две разновидности:

- **QR-счёт** — на экране показывается QR, ученик сканирует его прямо в кабинете. Можно отправить и ссылку.
- **Счёт на телефон** — в приложение Kaspi ученика приходит push. Удобно, когда ученика нет на месте, но номер должен быть указан верно.

Разница: [QR-счёт или счёт по телефону](/kb/ru/qr-vs-phone).

В описание стоит писать группу и период — потом это помогает искать в выгрузке.

## Периодическая оплата через подписку

Подписка нужна ученику, который платит за обучение помесячно. Вы ставите расписание (например `month`, каждое 1-е число), дальше счета выставляются сами.

**Важно, не путайте:** подписка только выставляет счёт. Деньги со счёта Kaspi ученика сами не списываются — ему приходит счёт, он открывает его и подтверждает. Поэтому не обещайте «автоматическое списание», честнее объяснить ученику: «раз в месяц придёт счёт, вы его подтверждаете».

Настройки:

- **Интервал:** `day`, `week`, `month`, кратность через `every` (например раз в две недели).
- **Лестница повторов** `retryDelaysMin` — если ученик не оплатил сразу, счёт отправляется повторно. По умолчанию `[15, 60, 360]` минут, максимум 5 значений.
- Когда лестница закончилась, этот запуск отбрасывается, но **расписание не останавливается** — в следующем месяце счёт выйдет снова. Состояние видно в полях `failedRuns`, `lastError`, `lastRunStatus`.
- **Политика пропуска** `misfirePolicy`: `run_once` (по умолчанию) или `skip`.
- `POST /subscriptions/{id}/resume` с `{ catchUp: true }` — возобновить приостановленную подписку и сразу отправить пропущенный запуск.

Подробнее: [API подписок](/kb/ru/subscriptions-api).

## Массовое выставление на группу

Если группа большая, в начале месяца счета на всю группу выставляются одним запросом: `POST /api/v1/invoices/bulk`, от 1 до 100 счетов за раз.

Каждый элемент проверяется отдельно: если у одного ученика неверно записан телефон, остальные счета создадутся, а этот вернёт ошибку. Сопоставьте строки ответа со своим списком, поправьте проблемные и отправьте повторно.

Чтобы не наплодить дублей, передавайте заголовок `Idempotency-Key` с устойчивым значением вида «группа + период». Даже если администратор нажмёт кнопку дважды, счета не выставятся второй раз.

## Ссылка на оплату

Постоянная ссылка вида `qut.kz/p/<slug>`. Её можно поставить в профиль Instagram, на кнопку «Записаться» на сайте, в рекламу. Сумма бывает фиксированной и открытой — при открытой ученик сам вводит сумму (например первый взнос).

Платежи по ссылке так же видны в кабинете и в выгрузке. Подробнее: [Ссылки на оплату](/kb/ru/payment-links).

## Отчётность по группам

Чтобы потом собрать отчёт, пометки нужно расставить в момент создания счёта:

- `externalOrderId` — внутренний номер ученика или строка вида «номер группы / номер ученика».
- `description` — текст, который видит ученик; впишите туда название группы и период.
- `metadata` — группа, инструктор, филиал, период. Это поле возвращается в вебхуке и удобно для отчётов.

В разделе **Счета** кабинета фильтруете по периоду и выгружаете CSV. Если филиалов несколько, заведите каждому свой API-ключ — тогда отчётность разделится по источнику.

## Особые замечания

- **Если ученик уходит**, деньги возвращаются через `POST /invoices/{id}/refund` полностью или частично. При частичном возврате передайте `amount`.
- **Сумма должна быть в целых тенге** для счёта на телефон. Если при делении на три остаются тиыны, добавьте их к последнему платежу.
- **Окно сканирования QR ограничено.** Ученику лучше отправлять не картинку QR, а ссылку `payUrl` — при открытии страница покажет свежий QR. Точное время берите из поля `expiresAt`.
- **Номер кассира виден ученику** в уведомлении о счёте. Это нормальная работа Kaspi, поэтому номер лучше завести отдельный.
- **Посчитайте месячный лимит.** 20 учеников × 3 платежа = 60 счетов, плюс повторные отправки. Выбор тарифа: [Какой тариф выбрать](/kb/ru/tariff-choose).

## Вопросы и ответы

**Деньги сами спишутся с карты ученика?** Нет. Подписка только выставляет счёт, каждую оплату ученик подтверждает сам в приложении Kaspi.

**Можно работать без программиста?** Да. Счета вручную из кабинета, ссылки на оплату и Telegram-бот работают без кода. Для массового выставления и подписок через API нужен технический человек.

**Что будет, если ученик не заплатит?** Счёт перейдёт в `expired`, услуга не оказывается. В подписке счёт отправится повторно по лестнице повторов, затем запуск отбросится, но следующий период всё равно выставится.

**Где посмотреть, кто из группы заплатил?** В разделе «Счета» фильтруете по периоду и статусу, затем выгружаете CSV.

**Можно ли вести несколько филиалов раздельно?** Да. Заведите каждому филиалу отдельный API-ключ — в отчётности платежи разделятся по источнику.
