1. W1.1 — чат как главная, кнопка «Стоп» и кооперативная отмена стрима
— smeta_user_frontend: ChatWorkspaceView/ChatView — главная теперь чат, AppTopbar/useNav (логотип → home), кнопка ⏹ Стоп через AbortController, контекст-панель
— smeta-user-backend: ChatController + AgentClient — проброс отмены стрима к агенту (надёжная остановка через прокси, IOException-цепочка)
— Частичный ответ остаётся как «⏹ остановлено», не считается ошибкой
2. W1.2 — выбор модели ИИ пользователем + админская витрина моделей
— smeta-user-backend: preferred_model + settings/models endpoint
— smeta_user_frontend: селектор модели ИИ в шапке чата
— smeta_admin_backend: AdminModelsUsageController — GET/PUT /api/admin/models (model_id в теле PUT — обход Spring-фильтра кодированных слэшей для deepseek), прокси к agent под X-Service-Token
— smeta_admin_frontend: ModelsView — таблица 12 моделей, чекбоксы доступности польз./эксперт, радио дефолта на роль, тумблер enabled, per-field PUT
3. W1.3 — сводный расход агента в админке, биллинг убран у юзера
— smeta_admin_backend: GET /api/admin/usage/summary?from&to&user_id&model
— smeta_admin_frontend: AgentExpensesView — период + фильтры model/user_id, сводка (всего/вызовы/токены) + таблица по моделям с сортировкой по стоимости; роуты и пункты сайдбара «Модели ИИ»/«Расходы»; agentUsageSummaryApi
— smeta_user_frontend: QuotaBadge и quota-blocker сняты, /me/usage не дёргается — всё бесплатно
— Verified: каталог 12 моделей, PUT слэш-id персистится, usage $176/952 записи
4. W2.1/W2.2 — срезы сметы и браузер ФСНБ с деплинками чата
— smeta-user-backend: срезы сметы «на работы» и «на материалы» (v2.5.0)
— smeta_user_frontend: вкладки срезов + браузер ФСНБ + деплинки чата (v2.5.0)
5. W2.3 — просмотр чатов пользователей в админке
— smeta_admin_backend: AdminChatsController — GET /api/admin/chats?user_id&from&to&q (список сессий), GET /api/admin/chats/{sessionId} (полный тред role/content/tool_calls/usage/ts); читает chat_session/chat_message напрямую из fsnbdb, без прокси к user-backend; admin JWT, read-only
— Фиксы: восстановление контекста чата из tool_calls, owner-фильтр при восстановлении (v2.3.58/v2.3.60)
— smeta_admin_frontend: UserChatsView + пометка «~ из диалога» для восстановленного контекста (v2.3.74/v2.3.75)
— Verified: 7 сессий, 80/80 сообщений с текстом, 39 с tool_calls, 40 с usage
6. Корневой фикс prQnt — «всего» вместо домножения на объём работы
— smeta-user-backend: SmetaService.calcFotRabota — prQnt → vol=1 (ресурс/ЗТ/ВМ/PERCENT_OF); SmetaTotalService SQL — CASE WHEN pr_qnt в EM+MAT, ЗТ-koef, ВМ-подзапросе; VmResursResponse.prQnt + проставление в CatalogService.lookupVmResursy
— smeta_user_frontend: RazdelGrid — qtyTotal()/itogoTek() для prQnt-строк не домножают на объём; D4-UI — строки prQnt[] под работой ВОР (оранжевый бейдж «П проект»), нумерация после расценок и материалов, removePrqnt
— Регрессия исключена: e2e scenario_02 1 277 771,72 ₽ копейка-в-копейку, ввод 20→15.54 (=20×0.777)
— D1 — неучтённый ресурс нумеруется внутри раздела (renumberSmetaInternal сразу в addNeuchtennyy)
7. Chat-analytics — covered_by-эпизоды и тип подбора (расценка/материал)
— smeta_admin_backend: AdminChatAnalyticsController.episodes форвардит kind (rascenka|material) на agent
— smeta_admin_frontend: ChatAnalyticsView — фильтр и колонка «Тип подбора», блок by_kind в сводке, тег типа в карточке, кандидаты через codeOf(); covered_by-исход в фильтре/метке/сводке, колонка «Выбор» ↗ covered_by_code, карточка «Учтено в составе расценки X»
— Также: covered_by-эпизоды — название из covered_reason при пустом vor_text (v2.3.76)
8. Корневой фикс — привязка сессии к создаваемым сущностям
— smeta-user-backend: v2.5.2 — chat session → созданные сущности (объекты/ВОР/сметы) подхватывают session id
Сводная статистика по коду:
Проект | Добавлено строк | Удалено строк | Коммитов
smeta_admin_backend | 287 | 55 | 5
smeta_admin_frontend | 511 | 16 | 6
smeta-user-backend | 474 | 34 | 6
smeta_user_frontend | 923 | 73 | 6
Итого | 2195 | 178 | 23
Оценка трудозатрат:
Задача | ~Часы
W1.1 чат-главная, «Стоп» и отмена стрима | 6
W1.2 селектор моделей у юзера + админ-витрина | 5
W1.3 сводный расход агента + снятие биллинга | 4
W2.1/W2.2 срезы сметы и браузер ФСНБ с деплинками | 6
W2.3 просмотр чатов юзеров в админке (бэк+фронт+фиксы) | 5
Корневой фикс prQnt = «всего» (бэк+фронт+D1+D4-UI) | 5
Chat-analytics covered_by + тип подбора | 3
Фикс привязки сессии к сущностям (v2.5.2) | 1.5
Итого | ~35.5 час