Модель кредитного процесса¶
Как заявка проходит конвейер в прототипе: роли, этапы, статусы и почему каждый этап устроен именно так. Кредитная логика и её обоснование — в SPEC; здесь описано то, что реализовано. Сроки этапов — в SLA.md, моки и упрощения — в SIMPLIFICATIONS.md.
Роли¶
| Роль | Кто это | Что делает | Где |
|---|---|---|---|
| Клиент | Предприниматель (ИП или ООО), уже клиент банка: регистрации нет | Выбирает компанию по ИНН, даёт согласия, описывает потребность, при необходимости загружает выписку, выбирает предложение, подписывает документы кодом | Веб-кабинет /, mini app /mini/ |
| Система | Worker в том же процессе, что и API (в Docker — отдельный контейнер) | Обогащение, качество данных, стоп-факторы, скоринг, лимит и ставка, предложения, маршрут; отлагательные условия и выдача; ночное предодобрение | apps/api/worker.py |
| Андеррайтер | Сотрудник банка | Рассматривает заявки in_review: одобряет, меняет, отказывает, запрашивает данные, перезапускает расчёт. Код причины и комментарий обязательны |
Рабочее место /staff |
| Риск-менеджер | Сотрудник банка | Вторая подпись по заявкам комитета; страница валидации модели и статистика переопределений | /staff |
| Кредитный комитет | Упрощённо: подписи андеррайтера и риск-менеджера, двух разных сотрудников (SPEC §15) | Решение по заявкам маршрута committee |
/staff |
Бэк-офиса как отдельной роли нет: отлагательные условия проверяет и выдачу запускает система (SPEC §12 называет бэк-офис необязательным). Должность сотрудника выбирается при входе с общим паролем STAFF_PASSWORD (упрощение, SIMPLIFICATIONS.md).
Этапы¶
| № | Этап | Кто | Что происходит | Статус заявки | Код и описание |
|---|---|---|---|---|---|
| 0 | Предодобрение | Система, раз в сутки | Для клиентов с данными FULL без стоп-факторов и флагов считается овердрафт на авто-маршруте; на главной — «Вам доступно до X» |
заявки ещё нет | preapproval.py, PREAPPROVAL.md |
| 1 | Компания и согласия | Клиент | ИНН → карточка из мок-ЕГРЮЛ/ЕГРИП → согласия на запрос в БКИ (218-ФЗ) по компании и собственнику и на обработку ПДн (152-ФЗ) | черновик в браузере | company-onboarding.tsx, apps/web/README.md |
| 2 | Потребность | Клиент | 3–6 вопросов: цель, сумма, срок, когда нужны деньги; для оборудования — цена, взнос, поставщик. Рекомендуется продукт | черновик в браузере → submitted |
need-intake.tsx |
| 3 | Обогащение | Система | Восемь источников параллельно, тайм-аут и повторы по каждому; факты «заявлено / подтверждено»; уровень качества данных FULL / PARTIAL / THIN |
enriching |
apps/sources/, apps/sources/README.md, features/README.md |
| 3а | Запрос данных | Клиент | Только при THIN (и по запросу сотрудника): выписка из другого банка или «продолжить без неё» |
needs_data → enriching |
statements.py, STATEMENTS.md |
| 4 | Стоп-факторы и флаги | Система | Стоп-фактор — автоматический отказ без скоринга; флаг — повод для ручного рассмотрения | scoring |
stop_factors.py, STOP_FACTORS.md |
| 5 | Скоринг | Система | Скоринговая карта → баллы, PD, грейд A–E, вклад каждого признака; модель-претендент в теневом режиме | scoring |
scoring.py, SCORING.md, apps/ml/README.md |
| 6 | Лимит, ставка, предложения | Система | Лимит — минимум из ограничений (денежный поток, долговая нагрузка, залог, оборот, продукт); ставка по составляющим; до трёх предложений и контрфактические подсказки | scoring |
limits.py, pricing.py, offers.py, LIMITS.md, OFFERS.md |
| 7 | Маршрутизация | Система | Матрица полномочий: автоматически / андеррайтер / комитет, с причинами | offered, declined, in_review |
routing.py, ROUTING.md |
| 8 | Ручное рассмотрение | Андеррайтер, для комитета — и риск-менеджер | Одобрить предложения системы, изменить сумму и срок (не выше лимита), отказать, запросить данные, перезапустить расчёт | in_review → offered, declined, needs_data, submitted |
staff_actions.py, STAFF_ACTIONS.md |
| 9 | Выбор предложения | Клиент | Одно из предложений; срок действия 10 дней | offered → accepted |
workflow.py, WORKFLOW.md |
| 10 | Документы и подписание | Система + клиент | Кредитный договор, поручительство, залог, заявление на гарантию МСП — по условиям предложения; подписание одним кодом подтверждения (ПЭП) | documents → signed |
disbursement.py, DISBURSEMENT.md |
| 11 | Отлагательные условия | Система (мок) | Поручительство подписано, залог внесён в реестр уведомлений, счёт поставщика проверен, гарантия МСП выдана | conditions |
disbursement.py |
| 12 | Выдача | Система (мок) | Зачисление на счёт клиента или оплата поставщику (инвестиционный кредит) | disbursed |
disbursement.py |
Решение принимает чистая функция decide (workflow.py): одинаковые входы дают одинаковое решение, а каждое решение хранит причины, версии модели и политик (DATA_MODEL.md).
На странице заявки клиент может открыть ИИ-помощника и спросить о её статусе, причинах и предложениях. В контекст попадает только открытая заявка и только клиентское представление решения; без открытой заявки помощник отвечает в общем справочном режиме. Помощник не меняет данные и не влияет на расчёт. Модель необязательна: без неё или при ошибке провайдера остаётся серверный ответ по тому же контексту. Настройка и ограничения описаны в разделе Языковая модель.
Статусы¶
Таблица переходов — TRANSITIONS в apps/api/workflow.py. Статус меняет только transition: переход вне таблицы — ошибка, каждый переход пишет событие в журнал.
stateDiagram-v2
[*] --> submitted: клиент подал заявку
submitted --> enriching: worker взял заявку
enriching --> scoring: источники ответили
enriching --> declined: компания не найдена
enriching --> in_review: обязательный источник недоступен
scoring --> needs_data: данные THIN
needs_data --> enriching: выписка загружена или клиент продолжил без неё
scoring --> offered: авто, есть предложения
scoring --> declined: стоп-фактор или нет предложений
scoring --> in_review: андеррайтер или комитет
in_review --> offered: одобрено
in_review --> declined: отказ
in_review --> needs_data: запрос данных
in_review --> submitted: перезапуск расчёта
enriching --> submitted: сбой, повтор
scoring --> submitted: сбой, повтор
offered --> accepted: клиент выбрал предложение
offered --> expired: прошло 10 дней
accepted --> documents: документы сформированы
documents --> signed: подписано кодом
signed --> conditions
conditions --> disbursed: условия выполнены, деньги выданы
declined --> [*]
expired --> [*]
disbursed --> [*]
withdrawn --> [*]
До подписания из любого статуса клиент может отозвать заявку (→ withdrawn); на схеме эти переходы не нарисованы, чтобы она читалась. Финальные статусы: declined, expired, disbursed, withdrawn.
| Статус | Смысл | Кто переводит дальше |
|---|---|---|
draft |
Черновик. Сервер его не создаёт: черновик живёт во вкладке браузера, заявка появляется сразу в submitted |
— |
submitted |
Подана, ждёт worker | Система |
enriching |
Сбор данных из источников | Система |
needs_data |
Нужна выписка из другого банка | Клиент |
scoring |
Расчёт риска и условий | Система |
in_review |
У сотрудника | Андеррайтер, риск-менеджер |
offered |
Есть предложения | Клиент; система — по сроку |
declined |
Отказ | — |
accepted |
Предложение выбрано | Система |
documents |
Документы сформированы | Клиент |
signed |
Подписано | Система |
conditions |
Проверка отлагательных условий | Система |
disbursed |
Деньги выданы | — |
withdrawn |
Клиент отозвал | — |
expired |
Предложение истекло | — |
Отличия от схемы SPEC §13: переходы enriching → declined и enriching → in_review — ранний выход, когда компании нет или нет обязательного источника; enriching | scoring → submitted — повтор после сбоя расчёта (после третьей попытки заявка уходит в in_review без решения); in_review → submitted — перезапуск расчёта сотрудником.
Почему этап есть, упрощён или отсутствует¶
| Этап или решение | Статус в прототипе | Почему |
|---|---|---|
| Анкета из 43 вопросов | Убрана | Клиент уже в банке: данные берутся из источников и счёта, а не со слов клиента (SPEC §1.1). Осталось 3–6 вопросов о потребности |
| Согласия 218-ФЗ и 152-ФЗ | Есть, упрощены | Без согласия запрос в БКИ незаконен. В демо согласие — галочка со временем, без подписи и реестра согласий |
| Обогащение с политикой отказа по источнику | Есть | Обязательный источник недоступен — заявку смотрит андеррайтер, необязательный — флаг. Конвейер не падает из-за одного источника (SPEC §5) |
| Уровень качества данных | Есть | Наличие счёта не гарантирует надёжные данные: от уровня зависят лимит, маршрут и предодобрение (SPEC §5.1) |
| Запрос документов | Только выписка при нехватке данных | Документы просят, когда данных мало, а не когда риск высок: высокий риск при полных данных ведёт к отказу или обеспечению (SPEC §1.7). Распознавания нет — выписка уже в JSON |
| Набор предложений вместо контрпредложения | Есть | Лимит не зависит от запрошенной суммы; клиент видит компромиссы (больше срок или меньше сумма) и что ограничило лимит (SPEC §10) |
| Ручное рассмотрение | Есть | Матрица полномочий: автоматически решаются только понятные случаи. Стоимость ручной обработки входит в ставку (SPEC §1.8) |
| Кредитный комитет | Упрощён до двух подписей | Заседание, протокол и квалифицированная ЭП вне скоупа хакатона |
| Подписание | Упрощено | Код показывается на экране вместо SMS; один код подписывает и поручительство |
| Отлагательные условия, выдача | Моки | Реестр залогов, Корпорация МСП и проводки — внешние системы, интеграции с ними запрещены условиями кейса |
| Предодобрение | Есть, только FULL |
Быстрый путь для клиентов с надёжными данными по счёту; сама заявка всё равно решается заново |
| ИИ-ассистент | Опциональная надстройка | Решение принимает детерминированный движок; без модели сценарий работает так же |
| Сопровождение после выдачи | Нет | Вне скоупа кейса |