Перейти к содержанию

Клиентский интерфейс v2

Подача заявки

Клиент вводит ИНН и сверяет найденную карточку компании, отмечает три согласия и подтверждает карточку кнопкой «Данные верны, продолжить», затем указывает цель, сумму, срок и желаемое время получения денег. Для инвестиционного кредита дополнительно нужны описание оборудования, его цена, собственный взнос и ИНН поставщика. Рекомендованный продукт соответствует карте целей из apps/api/offers.py.

Прогресс этих шагов хранится в sessionStorage текущей вкладки. Перезагрузка страницы восстанавливает адрес текущего шага, карточку компании, выбор согласий и введённые параметры потребности. Данные доступны только в этой вкладке и удаляются браузером после её закрытия; успешная отправка и начало новой заявки очищают черновик. Запрос создаётся через POST /api/v2/applications с ключом идемпотентности, карточкой компании и согласиями.

После отправки клиент попадает на экран анализа заявки. Он опрашивает GET /api/v2/applications/{id} и показывает текущий этап, состояние каждого источника и итог решения. Тексты ошибок источников клиенту не передаются. Когда конвейер завершён, экран показывает доступные клиенту причины, уровень данных, запрошенные документы или краткую сводку предложений и предлагает продолжить в кабинете. Экран общий для веб-кабинета и mini app.

После выбора предложения клиент может прочитать сформированные документы, запросить демонстрационный код и подписать весь комплект одним кодом. Код показывается на экране вместо SMS (# MOCK: — код не отправляется во внешнюю систему). После подписи экран следит за отлагательными условиями, а при выдаче показывает текст результата из API. На главной странице показывается предодобренный овердрафт выбранной в этой вкладке компании, если API вернул действующее предложение; переход заполняет цель, сумму и срок заявки. API пока не связывает профиль пользователя с компанией (см. docs/v2/NOTES.md, T25), поэтому UI использует выбранную карточку и требует сохранённые согласия, но серверную проверку владения это не заменяет.

Сборка клиента из корня репозитория: npm.cmd run build.

Демо-профиль и история

Без сессии клиент видит экран входа по e-mail (demo-login.tsx): подходит любой адрес, пароль и код подтверждения не запрашиваются, адрес передаётся в POST /api/auth/demo как имя профиля. Автоматического входа под общим профилем нет. Вход под одним и тем же e-mail открывает устойчивый демо-профиль, поэтому заявки сохраняются после выхода и повторного входа. В форме компании ИНН вводится вручную, списка компаний интерфейс не показывает. API разрешает демо-профилю только компании каталога T12; на другой ИНН кабинет отвечает, что компания не привязана к профилю. Для входа с реальным Telegram-аккаунтом это ограничение не применяется. Раздел «Мои заявки и финансирование» показывает заявки v2, включая выданное финансирование.

Рабочее место сотрудника

Кнопка «Для сотрудников» (в боковом меню и на экране входа) открывает вход по STAFF_PASSWORD. Рабочее место показывает своё меню — очередь заявок и выход — без клиентских разделов и помощника; при входе сотрудник выбирает роль андеррайтера или риск-менеджера. Очередь показывает заявки in_review из конвейера v2. В досье доступны статусы и ошибки источников, выписки клиента, качество данных, факты «заявлено / подтверждено», маршрут и причины, флаги, вклад признаков в скоринг с базовыми баллами, теневая модель, расшифровки лимита и ставки, аудит, подписание и выдача.

Внизу досье сотрудник может одобрить выбранные системные предложения, изменить сумму и срок, отказать, запросить документы или перезапустить расчёт. Для каждого действия обязательны причина и комментарий от 10 символов; после отправки досье и очередь обновляются. Если API вернул 409 или 422, интерфейс показывает текст ошибки. Решение комитета остаётся в in_review: второй сотрудник входит в отдельном профиле с противоположной должностью и подписывает или отклоняет предложение с причиной. Поскольку демо-персоны сейчас не создают комитетное предложение с доступными условиями, этот путь требует заявки, которая попала на маршрут комитета.

Риск-менеджеру в рабочем месте доступна страница валидации champion-модели. Она загружает scorecard_v1.validation.json через защищённый GET /api/v2/staff/model-validation и показывает Gini с доверительным интервалом и потолком истинной PD, CAP, калибровку по грейдам, PSI/CSI и ограничения отчёта. Андеррайтеру этот endpoint недоступен. Отчёт строится на синтетической выборке и не подтверждает качество модели на реальном портфеле.