AAYMA
RU
Войти

Halyk Career Quest

Платформа карьерной навигации для сотрудников Halyk: карта развития, расчёт навыков и дефицитов, каталог событий с проверкой допуска, завершения…

Доведённый продукт
Команда «IFlow» 18💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: IFlow
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Доведённый продукт

Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития

Суть

Платформа карьерной навигации для сотрудников Halyk: карта развития, расчёт навыков и дефицитов, каталог событий с проверкой допуска, завершения активностей, кабинет HR с аналитикой, геймификация (монеты, Halyk Market), уведомления по SMTP.

Как устроено

Backend строит проекцию навыков (переигрывание завершений после оценки), считает дефициты до следующего грейда и карьерной цели, фильтрует события по аудитории, prerequisites, расписанию и истории. Формируется AIRefinementInput с полным контекстом, из которого OpenAI выбирает 1–3 активности со ссылками на факты. Сервер проверяет ID, ревизию и минимум три категории evidence, а текст объяснения строит сам из проверенных фактов. Frontend на Next.js в игровом стиле, завершения атомарно сохраняются и пересчитывают навыки и монеты.

Ключевые решения

  • skill gap analysis
  • eligibility filtering
  • валидация evidence от LLM
  • идемпотентные завершения
  • атомарный overlay состояния
  • геймификация (монеты, маркет)

Особенности

Прозрачная таблица статусов функций (IMPLEMENTED/IN PROGRESS/PLANNED/CONCEPT) и отдельные документы независимого аудита (TEST_AUDIT.md, QA_FIXES.md). LLM выбирает курс, но числовые объяснения строит сервер; при сбое фиктивная рекомендация не создаётся.

Стек

Python · FastAPI · Next.js · React · TypeScript · Docker · SMTP · pytest

Модели

OpenAI


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-166d8cc7-iflow.

README

README.md

Halyk Career Quest

HackAlem AI · Halyk Bank · Case 1 — Career Quest

AI-powered career navigation and employee development platform — платформа, которая связывает навыки сотрудника с карьерной целью и помогает выбрать следующий полезный шаг развития.

Сегодня работает: персональная карта, расчёт навыков и дефицитов, каталог событий, сохранение завершений, кабинет HR, импорт данных и демонстрационный Halyk Market.

OpenAI подключён. Модель выбирает 1–3 подходящих активности по полному контексту; сервер строит объяснения из проверенных фактов. Настройте AI_PROVIDER=openai и OPENAI_API_KEY в корневом .env. NVIDIA пока не используется.

Статус · Быстрый запуск · Демо-доступ · API · Проверки · Демо-сценарий

README обновлено после независимого аудита 23.09.2026. Исходные наблюдения сохранены в TEST_AUDIT.md; исправления описаны в QA_FIXES.md.

1. Problem

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

HR нужны три практических ответа: какие дефициты встречаются чаще всего, как сотрудники участвуют в активностях и кому сейчас нельзя предложить подходящее мероприятие. Career Quest связывает эти задачи в один цикл развития, выходящий за рамки каталога LMS.

2. Solution

Профиль → текущие навыки → требования цели → дефициты → карьерный маршрут
   → подходящие события → рекомендация → завершение → новый прогресс
   → вовлечение и награды → следующий шаг

Backend рассчитывает факты и допустимые события. Карта объясняет ближайшие шаги и обновляется после сохранённого завершения. AI-слой вызывает OpenAI для выбора 1–3 рекомендаций; числовые объяснения строятся сервером.

3. Product Vision

НаправлениеПольза и стадия
Career Intelligence✅ Профиль, требования, дефициты и достижимый прирост навыков
Career Map / Events✅ Маршрут и каталог с проверкой ограничений
AI Recommendations✅ Live OpenAI, проверка выбора и объяснения из фактов
HR Analytics✅ Дефициты, участие, сотрудники без подходящих событий
Gamification / Rewards✅ Карта и монеты; 🧭 личные XP, уровни и серии
Social Discovery🟡 Career Stories: подготовлены спецификация и план, рабочего модуля нет

Обозначения: ✅ IMPLEMENTED — есть реализация; 🟡 IN PROGRESS — подготовка ведётся, стадия указана явно; 🧭 PLANNED — запланировано, реализации нет; 💡 CONCEPT / FUTURE IDEA — идея для дальнейшей оценки.

4. Current Feature Status

FeatureStatus
Career Map✅ IMPLEMENTED — серверные данные, локальный маршрут и темп
Employee / HR roles✅ IMPLEMENTED — разграничение API с приватными токенами
Skill projection✅ IMPLEMENTED — переигрывание завершений после оценки
Next-grade gaps / career goal✅ IMPLEMENTED — отдельные расчёты; редактирования цели нет
Event eligibility✅ IMPLEMENTED — аудитория, prerequisites, расписание, история, прирост
Activity completion✅ IMPLEMENTED — собственные завершения, сохранение и повторы команд
HR dashboard✅ IMPLEMENTED — дефициты, участие, отсутствие кандидатов
Dataset import✅ IMPLEMENTED — HR-импорт профилей и истории
Coins✅ IMPLEMENTED — 80 за новое добровольное завершение через API
Halyk Market✅ IMPLEMENTED — demo-каталог и сохраняемые обмены
Notifications / course offers✅ IMPLEMENTED — SMTP, предложения, напоминания, паузы и журнал
AI context / validation✅ IMPLEMENTED — AIRefinementInput, JSON, проверяемые факты
Live OpenAI/NVIDIA provider✅ IMPLEMENTED — OpenAI; NVIDIA не подключён
HR AI-recommendation coverage✅ IMPLEMENTED — ready/failed/stale/not_generated, критичные пробелы каталога
Career Stories🟡 IN PROGRESS — спецификация и план; backend/frontend ещё не реализованы
Personal Progress / XP🧭 PLANNED — нет XP, уровней или streak-механики
Calendar🧭 PLANNED — даты сессий есть, календарного экрана/интеграции нет
Career Copilot🧭 PLANNED — диалогового помощника нет
Team Quests / Duels💡 CONCEPT / FUTURE IDEA
Career Simulator / AI Quest Master / AI video / Manager View💡 CONCEPT / FUTURE IDEA

5. Employee Experience

В кабинете доступны «Карта развития», «Мой обзор», «События» и Halyk Market. Навыки, история и требования показаны в карте и обзоре; отдельного экрана XP или Stories нет.

Сотрудник видит свои данные, открывает карточку события, проверяет ограничения и подтверждает уже выполненную активность. После ответа сервера обновляются навыки, маршрут, история и баланс. Это самоотчёт о завершении, без подтверждения LMS или руководителем.

AI Navigator — отдельная панель запроса рекомендаций: интерфейс умеет показать объяснения, доказательства, гипотезы, уточняющие вопросы и ошибку отсутствующего провайдера. Сохранение ответов на вопросы пока не реализовано.

6. Career Map

Карта показывает 1–3 сохранённые AI-рекомендации без заполнения случайными курсами. Сначала предлагается один самый подходящий шаг; дополнительные требуют высокой уверенности и отдельной пользы. Неактуальные и отклонённые предложения скрываются. Полный каталог доступен в «Событиях».

Темп 1, 3 или 5 часов в неделю меняет локальную оценку длительности; он пока не передаётся LLM. Переключатель цели меняет показ дефицитов, но не редактирует профиль и не меняет серверную цель. У Lead нет следующего грейда. Завершение обновляет навыки и маршрут; покрытие требований не гарантирует повышение.

7. Recommendation Engine

AIRefinementInput содержит полный профиль, рассчитанные текущие навыки, связанную историю с карточками мероприятий, каталог, требования ролей, карьерную цель, кандидатов, исключения и неизвестные предпочтения.

OpenAI выбирает 1–3 активности и ссылки на факты. Backend проверяет доступность, ID, ревизию, минимум три категории evidence и повторные неуспешные попытки. Ошибочные ссылки evidence у реального допустимого курса заменяются проверенными фактами кандидата; неизвестный курс отклоняется. Выбор курса при этом не заменяется локальным рейтингом.

Текст объяснения строится из current skills, реального gain и max_level, требований грейда и истории. Неподтверждённый свободный текст модели и гипотезы не показываются. При отсутствии карьерной цели явно обозначается ориентир по умолчанию. Сохраняются видимые оставшиеся критичные пробелы, даже если рекомендован другой полезный курс.

AI_PROVIDER=openai и OPENAI_API_KEY включают live-провайдер; none отключает его. Есть одна повторная попытка при таймауте в пределах общего сетевого бюджета AI_TIMEOUT_SECONDS (10 секунд по умолчанию). Внешняя задержка не гарантируется. Ошибки авторизации/квоты не повторяются; фиктивная рекомендация при сбое не создаётся. no_candidates не вызывает модель. Ключи остаются на backend.

См. provider setup, исходный аудит, исправления.

8. Events

Каталог содержит курсы, практические занятия, менторство, сертификации, встречи, onboarding и compliance. Карточки задают целевые роли/грейды, prerequisites, формат, длительность, обязательность, приросты и пределы навыков, даты сессий.

Каталог → проверка условий → просмотр → фактическое прохождение вне приложения
   → подтверждение завершения → атомарная запись → пересчёт навыков и наград

Самостоятельные события не требуют сессии; для планируемого живого события нужна текущая/будущая дата. При завершении нельзя указать будущую сессию. Существующие назначения in_progress/overdue завершаются по source_record_id и заменяют эффективный статус исходной записи, без двойного начисления.

Обязательные активности исключены из рекомендаций и не дают монет. Интерфейс предлагает их завершение через назначения; backend пока не требует назначение во всех mandatory-сценариях — это известное ограничение, а не строгая серверная гарантия.

Добровольные события обычно неповторяемы; исключение — клуб EV_036. Исходная история также содержит ежегодные повторения обязательного compliance: они сохраняются, а отдельные существующие назначения могут завершаться повторно. Запись на мероприятие, резервирование места и внешняя LMS-интеграция отсутствуют.

9. Career Stories

🟡 IN PROGRESS — стадия спецификации и плана, не рабочая функция. См. дизайн и план.

Идея — внутренний слой знакомства с возможностями развития:

Завершение → добровольное Share Achievement → история
   → коллега узнаёт о событии → приватно проверяет пользу для своего маршрута

Предусмотрены Employee Achievement и Halyk Official: HR рассказывает о существующем событии, курсе, сроке, напоминании или возможности. Career Quest System Story — будущая идея. Реакции MVP: 🔥 ❤️ 🚀 💪; комментарии, личные сообщения и подписчики не требуются.

Публикация достижения только по явному согласию. План не допускает автоматического раскрытия дефицитов, готовности к повышению, пропусков, отказов, частных карьерных целей или performance-данных. Ни лента, ни публикации, ни реакции сейчас не реализованы.

10. Personal Progress

🧭 PLANNED — Personal Progress Rating («Личный прогресс»). Сотрудник сравнивает развитие со своим предыдущим состоянием; это не публичный рейтинг эффективности сотрудников.

Пример будущих уровней: Explorer → Bronze → Silver → Gold → Sapphire → Diamond. Иллюстрация будущего интерфейса, не реальные данные приложения:

Diamond · 5700 / 10000 XP
Активная серия: 2 недели · Личный рекорд: 36 недель

Формула XP, пороги и серии пока не реализованы. Публичные места среди коллег и сравнительные performance-процентили не предусмотрены: такая механика противоречит ограничению кейса на публичные рейтинги эффективности.

11. XP vs Coins

XP — 🧭 PLANNEDCoins — ✅ IMPLEMENTED
НазначениеЛичные уровни, развитие и серииВалюта демонстрационных наград
Можно потратитьНетДа, в Halyk Market
НачислениеПравила предстоит определить80 за новое добровольное runtime-завершение
Связь с навыкамиНе заменяет расчёт навыковНе повышает навыки, грейд или доступ к обучению

12. Halyk Market

✅ IMPLEMENTED — внутренний demo-каталог, без коммерческих транзакций Halyk Market. Начальный баланс — 0. Исходная и импортированная история монет не приносит; новое завершение добровольного назначения через API приносит 80. Обязательные активности — 0.

НаградаМонеты
Книга для следующего шага80
Термокружка Halyk160
Шоппер Halyk240
Билет на конференцию400

Баланс равен заработанным монетам минус сохранённые обмены. Каждую награду сотрудник может получить один раз; сервер проверяет остаток и повтор команды. Квитанции сохраняются после перезапуска. HR видит каталог без персонального кошелька и не выполняет обмены. Реальных платежей, доставки и выдачи товаров нет. Источник правил: market.py.

13. Calendar

🧭 PLANNED. Будущий календарь объединит сессии, сроки, принятые задания, рекомендации, напоминания и завершённые события. Сейчас есть только даты сессий и локальное распределение нагрузки по неделям; календарного экрана, синхронизации и бронирования нет.

14. Employee Engagement Loop

AI находит событие [planned] → объясняет пользу [правила уже работают]
 → сотрудник смотрит [работает] / принимает [planned] → напоминание [planned]
 → завершение → прогресс навыков → монеты [работает] / XP [planned]
 → добровольная Story [in progress: дизайн] → коллеги узнают о событии [planned]
 → следующий шаг

Геймификация делает пользу небольших действий заметной и поддерживает регулярность. Награды дополняют развитие; они не оценивают производительность и не определяют повышение.

15. HR Cabinet

HR видит агрегаты дефицитов и участия, импортирует профили и историю, открывает сотрудников. employees_without_candidate — отсутствие доступных событий. employees_without_recommendation — отсутствие актуального готового ответа AI; recommendation_states различает ещё не созданные, ошибочные, устаревшие ответы и необходимость уточнения.

critical_catalog_gaps показывает сотрудника, роль/грейд, критичный навык, текущий/требуемый уровень и достижимый уровень после доступных сейчас событий. Альтернативный необязательный курс не скрывает незакрываемый критичный пробел. Аналитика и детали доступны только HR.

16. Notifications

Реализованы предложения курсов, SMTP-аккаунт HR с шифрованием пароля, время и частота уведомлений, паузы, действия enroll/later/decline и журнал доставки. Повторные запросы и действия защищены от дублирования. После неизвестного результата SMTP автоматическая повторная отправка не выполняется. Внешнего зачисления в LMS нет.

Настройки: MAIL_ENCRYPTION_KEY, PUBLIC_APP_URL, NOTIFICATION_WORKER_ENABLED, NOTIFICATION_POLL_SECONDS. AI_AUTO_PREPARE=false готовит рекомендации при открытии профиля; true также включает фоновую подготовку. См. уведомления.

17. Future AI Features

ИдеяСценарийСтатус
AI Career Copilot«Что нужно для Senior?», «Почему это событие?», «Есть только час в неделю», «Есть другой формат?»🧭 PLANNED
Career Simulator«Что изменится, если выбрать другую карьерную траекторию?»💡 CONCEPT
AI Adaptive RecommendationsАдаптация к ответам и поведению; история уже входит в контекст, адаптивного диалога нет💡 CONCEPT
AI Quest MasterЕдиный образ карьерного навигатора💡 CONCEPT
AI Future Me / VideoКороткая мотивационная визуализация будущего пути💡 CONCEPT

18. Team Quests / Duels

💡 CONCEPT / FUTURE IDEA. Solo Challenge, Skill Duel и Team Quest могут поддерживать личную регулярность, взаимопомощь и общую учебную цель. Предпочтение — сотрудничеству и добровольным заданиям, без публичного ранжирования эффективности или соревнования за карьерные решения. Рабочих механик пока нет.

19. Privacy

Backend ограничивает сотрудника собственными данными, HR получает разрешённый доступ к просмотру и импорту. Токен хранится в памяти страницы; выход или перезагрузка очищает сессию. Приватные API-ответы используют Cache-Control: no-store.

Публичного performance-leaderboard и автоматической публикации дефицитов нет. Для будущих Stories предусмотрен opt-in и отдельный безопасный состав публичных полей. Приватные bearer-токены выдаёт администратор; production IAM/SSO пока не реализован.

20. Dataset

Числа проверены по исходным файлам, без добавлений runtime-состояния:

ФайлСодержание
employees.json200 профилей с assessment-навыками и датой оценки
events.json40 событий
skills.json60 навыков и 32 профиля требований роль/грейд
activity_history.csv2 743 записи участия

Снимок — 2026-10-01, история — 2024-10-01—2026-09-30. Исходные файлы data/raw неизменяемы; их хеши хранятся в manifest. Синтетический starter kit предназначен для хакатона; условия использования — в README данных.

HR-импорт принимает employees.json в исходной оболочке meta/employees и/или CSV со всеми исходными столбцами. Multipart-поля — employees и history; лимит всего запроса — 10 MiB. ZIP и замена каталога не поддерживаются. Идентичные записи — no-op, конфликтующие ID/участия отклоняют весь импорт. Сначала проверяется полный будущий набор, затем выполняется запись.

Изменяемое состояние хранит импорт, завершения, квитанции команд и Market отдельно от raw. Native-путь — data/state/state.json, Compose — named volume career_quest_state. Обычный docker compose down сохраняет данные. Несовместимый fingerprint или повреждённое состояние вызывают ошибку запуска, а не тихий сброс.

Для намеренного сброса одноразового демо сначала остановите backend и сохраните копию состояния; удаляйте только выбранный demo-state или volume этого проекта. Это уничтожает runtime-прогресс, импорт и обмены, сохраняя raw.

21. Skill Projection

Навыки профиля — снимок оценки, а не актуальный баланс. progress_engine.py повторно применяет завершения строго после last_review_date и не позднее даты приложения, в порядке даты и стабильного ID. Отсутствующий навык имеет уровень 0.

last_review_date < completed_on <= as_of_date
new_level = max(current, min(current + gain, max_level))
gap = max(required - current, 0)

gain увеличивает уровень, max_level ограничивает эффект события; событие с низким пределом не уменьшает уже развитый навык. Шкала — 0–5. Незавершение, пропуск, отказ и прерывание не дают прироста.

CSV не содержит точного времени завершения: его date используется как приближение. Runtime-завершение имеет явную completed_on; переход существующего назначения учитывается один раз. LLM в этом расчёте не участвует.

22. Architecture

Browser → Next.js / React → same-origin proxy /backend → FastAPI
                                                         ├─ Session / Auth
                                                         ├─ Employee / Trajectory
                                                         ├─ Eligibility / Completion
                                                         ├─ Recommendations / Context
                                                         ├─ HR / Dataset import
                                                         └─ Market
                                                               ↓
                                                            Services
                                                               ↓
                                                          Repositories
                                                        ↙              ↘
                                               Raw JSON/CSV       Mutable state.json

Отдельная AI-граница:
Recommendation context → AIClient → JSON adapter → output validation
                            └─ по умолчанию DisabledRecommender
                               OpenAI подключён; NVIDIA не используется

Один backend-процесс, один lock изменений. Запись выполняется через временный файл, flush/fsync и атомарную замену; snapshot публикуется после сохранения. Работает файловая очередь уведомлений и фоновый worker; несколько процессов с общим state-файлом не поддерживаются. Stories и Personal Progress пока не входят в runtime-архитектуру.

Подробности: architecture, data model, frontend integration. Старые проверки в handoff и аудите относятся к указанным там ревизиям; текущий код имеет приоритет.

23. Tech Stack

СлойЗависимости из package/requirements-файлов
FrontendNext.js 16.3.6, React / React DOM 19.3.0, TypeScript 5, Tailwind CSS / PostCSS 4.3.3, Lucide React, Golos Text; собственные CSS/SVG
BackendPython 3.12 в Docker, FastAPI 0.141.1, Pydantic 2.13.5, Uvicorn 0.53.0, python-multipart 0.0.32
Testspytest 9.1.1, httpx 0.28.1
RuntimeNode.js 22 в Docker, Docker Compose, файловый JSON overlay

Используется официальный OpenAI SDK; отдельного LLM-фреймворка нет. Версии: frontend/package.json, requirements, dev requirements.

24. Repository Structure

backend/
  app/
    api/            session, employees, activities, recommendations, hr, dataset, market
    ai/             client.py, prompts.py, recommender.py
    core/           config, auth, errors
    schemas/        исходные, API- и state-модели
    services/       projection, gaps, eligibility, completion, HR, Market, AI context
    repositories/   чтение файлов, snapshot, валидация, сохранение
  tests/            pytest-набор
  Dockerfile
  requirements.txt
  requirements-dev.txt
frontend/
  src/app/          /, /employee/[id], /hr, стили
  src/components/   connected shell, journey, HR, иллюстрации
  src/lib/          api.ts, types.ts, career-data.ts
  public/           изображения и логотип
  next.config.ts    same-origin rewrite
  package.json
  Dockerfile
data/
  raw/              неизменяемый starter kit
  fixtures/         manifest исходных хешей
  state/            игнорируемое Git runtime-состояние
docs/               архитектура, данные, AI-контракт, аудит, handoff
  superpowers/      спецификации и планы, включая будущие Stories
.env.example
docker-compose.yml

25. Running with Docker

Требуется Docker Desktop с Linux containers. Из корня репозитория:

docker compose up --build
АдресНазначение
localhost:3000Frontend
localhost:8000Базовый адрес backend; отдельной главной страницы нет
localhost:8000/docsSwagger / OpenAPI
localhost:8000/healthПубличная проверка здоровья

Для AI-рекомендаций нужен OpenAI API key; перед запуском выдайте приватные токены по разделу 27. Raw монтируется read-only, состояние — в named volume. Frontend ждёт backend healthcheck. Порты привязаны к loopback. Браузер обращается к /backend/api/..., Next.js направляет запросы на http://backend:8000; браузеру не нужно разрешать Docker hostname.

26. Local Development

Python 3.12+, Node.js 22+. Создайте окружение в корне.

Windows PowerShell:

py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1

macOS/Linux:

python3.12 -m venv .venv
source .venv/bin/activate

Далее в активированном окружении:

python -m pip install -r backend/requirements-dev.txt
python -m uvicorn app.main:app --app-dir backend --reload --host 127.0.0.1 --port 8000

Во втором терминале из корня:

cd frontend
npm ci
npm run dev

Откройте 127.0.0.1:3000. Прокси по умолчанию использует http://127.0.0.1:8000. Backend читает окружение процесса и не загружает .env автоматически. Next.js читает frontend/.env.local, если нужны переопределения.

27. Demo Credentials

Публичные demo-hr, demo-active, demo-employee больше не принимаются при запуске из окружения. Выбор роли на странице не выдаёт доступ.

python backend/provision_access.py --hr --employee E0004

Команда сохраняет API-ключи и существующие приватные аккаунты, удаляет старые публичные credentials и создаёт случайные токены в игнорируемом .env, поле DEV_IDENTITIES_JSON. Скопируйте свой токен в форму входа; HR-токен сотрудникам не передавайте. После выдачи доступа перезапустите backend. Токены хранятся в браузере только в памяти страницы.

To add imported employee identities, set DEV_IDENTITIES_JSON with a private token or run python backend/provision_access.py --employee NEW_ID before starting Python. Для завершения курса нужен собственный аккаунт нового сотрудника; HR не может завершить курс за него.

Это приватные bearer credentials для MVP, без SSO, автоматического истечения и восстановления аккаунта.

28. Environment Variables

Источник: .env.example. Для изменения Compose defaults можно скопировать его в .env.

ГруппаПеременнаяПоведение
AppDEV_IDENTITIES_JSONСерверное соответствие токен → employee/HR
AppNEXT_PUBLIC_API_URLBrowser API prefix, default /backend, встраивается при сборке
AppBACKEND_INTERNAL_URLПрокси Next.js: native http://127.0.0.1:8000; Compose build задаёт http://backend:8000
AppFRONTEND_ORIGINРазрешённый CORS origin, default http://localhost:3000
DataDATA_RAW_DIRNative override каталога raw; Compose задаёт контейнерный путь
DataSTATE_PATHNative override state-файла; Compose задаёт контейнерный путь
DataAPPLICATION_DATEПусто → дата снимка 2026-10-01; override не раньше неё
AIAI_PROVIDERЗарезервирована, пример openai; сейчас не используется
AIOPENAI_API_KEY, NVIDIA_API_KEYПустые server-only placeholders; текущий backend их не использует, Compose не передаёт
AIAI_PROVIDER, OPENAI_API_KEY, OPENAI_MODEL, AI_TIMEOUT_SECONDS, AI_AUTO_PREPARELive provider и фоновая подготовка
NotificationsMAIL_ENCRYPTION_KEY, PUBLIC_APP_URL, NOTIFICATION_WORKER_ENABLED, NOTIFICATION_POLL_SECONDSSMTP и worker

Часы демо привязаны к снимку, а не системной дате. Для поздних сессий сдвигайте APPLICATION_DATE вперёд и перезапускайте backend; не возвращайте дату назад поверх сохранённых завершений. После изменения production URL-настроек пересоберите frontend. Реальные ключи нельзя помещать в NEXT_PUBLIC_*, frontend или коммитить в .env.

29. API

Все /api требуют Authorization: Bearer TOKEN; /health публичный. В таблице только существующие маршруты:

MethodPathНазначение
GET/healthСостояние приложения
GET/api/sessionРоль и employee ID текущего токена
GET/api/employeesСобственный профиль в списке / все сотрудники для HR
GET/api/employees/{id}Профиль, текущие навыки, эффективная история
GET/api/employees/{id}/trajectoryТребования, дефициты, цель и кандидаты
GET/api/employees/{id}/recommendations/contextПолный авторизованный AIRefinementInput
POST/api/employees/{id}/recommendationsLive AI-выбор с проверенным объяснением / no_candidates
POST/api/employees/{id}/activities/{event_id}/completeЗавершение своей активности; HR запрещено
GET/api/hr/dashboardHR-агрегаты и отсутствие кандидатов
POST/api/dataset/importHR-only multipart employees / history
GET/api/marketКаталог и собственный ledger; HR получает только каталог
POST/api/market/redeemСохраняемый обмен награды, employee-only

Тело завершения:

{"command_id":"00000000-0000-4000-8000-000000000001","source_record_id":null,"session_date":null}

Для существующего назначения передайте source_record_id, для известной сессии — session_date. Тело обмена:

{"command_id":"00000000-0000-4000-8000-000000000002","reward_id":"book"}

На каждое новое намеренное действие генерируйте новый UUID. После неопределённого результата повторяйте тот же UUID и тело: сервер вернёт исходную квитанцию даже после рестарта. Изменение тела при том же ID, повтор неповторяемого завершения, недостаток монет или повтор награды дают конфликт.

Ошибки имеют вид {"error":{"code":"...","message":"...","details":[]}}; details может содержать безопасные сведения о поле/строке. Используются 401/403/404/409/413/422/501/503. Stories API пока существует только в плане; Personal Progress, Calendar, внешнее LMS enrollment и редактирование цели не имеют рабочих endpoints. Notification/SMTP API реализован. Отдельного общего GET /api/events сейчас нет: каталог приходит в авторизованном контексте.

30. Testing

Из корня, с активированным Python-окружением и установленными dev-зависимостями:

python -m pytest backend/tests -q
cd frontend
npm run typecheck
npm run build
cd ..
docker compose config --quiet

Проверки при подготовке README, 23.09.2026, без установки зависимостей:

ПроверкаРезультат
Backend pytest158 passed, 1 Starlette/httpx deprecation warning, 16.22 с; с --basetemp=.pytest-readme-check-20260923 --tb=short
Frontend typecheckПройден
Frontend production buildПройден: webpack, TypeScript и генерация страниц
Compose configПройден; Docker сообщил предупреждение о недоступном пользовательском config.json
Browser / полный Docker startupВ этой задаче не запускались

Первый pytest-запуск: 83 passed, 75 setup errors из-за доступа к временному каталогу. Повтор использует отдельный доступный каталог через --basetemp; результат указан выше. Это не исправление product-кода.

Тесты покрывают raw-хеши/схемы, проекцию, eligibility, авторизацию, импорт, завершения, атомарность, повторы после рестарта, AI-контекст/валидацию и HR. Есть двухсекундный бюджет расчёта HR на реальном наборе. Отдельных Market-тестов и автоматизированного frontend/browser harness нет. Старые счётчики из аудита и handoff не являются результатом этого checkout.

31. Demo Day Flow

Сценарий на 60–90 секунд, с заранее запущенным приложением:

ВремяДействие
0–15 сВойти как сотрудник E0004; показать роль, следующий грейд и явную цель
15–30 сОткрыть дефицит/критический навык и ближайший шаг; объяснить правило подбора и недельный темп
30–40 сПоказать AI Navigator, выбранный моделью курс и проверенные факты его пользы
40–60 сОткрыть доступную самостоятельную активность или назначение и подтвердить уже выполненную работу; показать обновление навыков и +80 монет для добровольного события
60–70 сОткрыть Market: книга за 80 монет, если баланс достаточен и она ещё не обменена; показать demo-квитанцию
70–90 сСменить профиль на HR: частые дефициты, участие по событиям, сотрудники без кандидатов; кратко показать импорт

Перед показом проверьте доступность выбранной активности и награды в текущем сохранённом состоянии. Stories, XP и календарь можно назвать следующими этапами, но демонстрировать их как работающие экраны нельзя.

32. Roadmap

ПриоритетСледующий результат
P0 — до Demo DayLive-провайдер; реальные 1–3 рекомендации; проверка качества объяснений и фактов; сетевой timeout / бюджет ≤10 с; интеграционные проверки и актуальное покрытие рекомендациями для HR
P0 — надёжностьСохранять прохождение текущих тестов и HR performance budget; добавить Market-проверки; проверить браузерный сценарий и согласовать серверные ограничения mandatory completion
P1 — вовлечениеРеализация Career Stories по подготовленному плану; Personal Progress / XP; Calendar; AI Copilot; opt-in уведомления и course offers
P1 — управление развитиемСохранение цели, запись на события и ответы на уточняющие вопросы
P2 — продвинутые идеиCareer Simulator, Team Quests, Skill Duels, Manager View, AI Quest Master / Future Me / видео

Roadmap не означает наличие функций в текущей версии. Production-аутентификация необходима перед выходом за границы локального демо.

33. Authors

Команда IFlow:

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
42
Авторы
4
Файлы
175
Ветки
4

Авторы коммитов

Zhassyn Zhalynuly 21danial41-design 11nualdaber 8Zhassyn Zhalynuly 2

История коммитов

  • 2026-09-23 18:32Merge remote-tracking branch 'origin/main'danial41-design
  • 2026-09-23 18:31fix: ground AI recommendations and resolve QA audit findingsdanial41-design
  • 2026-09-23 18:10docs: publish Halyk Career Quest READMEZhassyn Zhalynuly
  • 2026-09-23 17:58merge: sync origin/main into codex/frontend-backendnualdaber
  • 2026-09-23 17:49logic of detectiondanial41-design
  • 2026-09-23 17:48merge: preserve new AI and notifications in Halyk game frontendnualdaber
  • 2026-09-23 17:43feat: add immersive Halyk career quest and refreshed frontendnualdaber
  • 2026-09-23 17:21llm on gamedanial41-design
Все коммиты (42)
  • 2026-09-23 17:06Merge remote-tracking branch 'origin/main'danial41-design
  • 2026-09-23 17:04scheduledanial41-design
  • 2026-09-23 16:45Remove role description for Danial AmangeldiZhassyn Zhalynuly
  • 2026-09-23 16:39fix: restore reliable employee and HR loginnualdaber
  • 2026-09-23 16:30feat: connect Halyk frontend to Career Quest backendnualdaber
  • 2026-09-23 16:05llm determining coursedanial41-design
  • 2026-09-23 15:47Update author role for Danial Amangeldidanial41-design
  • 2026-09-23 15:44docs: describe Halyk Career Quest solutionnualdaber
  • 2026-09-23 15:42Merge pull request #1 from BAITC-Hacks/codex/career-quest-foundationZhassyn Zhalynuly
  • 2026-09-23 15:37docs: record foundation verification and recommendation handoffZhassyn Zhalynuly
  • 2026-09-23 15:35fix: preserve actionable import errors across browser boundaryZhassyn Zhalynuly
  • 2026-09-23 15:33fix readmeZhassyn Zhalynuly
  • 2026-09-23 15:24docs: document and containerize Career Quest foundationZhassyn Zhalynuly
  • 2026-09-23 15:21feat: add minimal completion and HR import controlsZhassyn Zhalynuly
  • 2026-09-23 15:17feat: expose authorized HR development aggregatesZhassyn Zhalynuly
  • 2026-09-23 15:14feat: define validated recommendation boundary without AI callsZhassyn Zhalynuly
  • 2026-09-23 15:11feat: import jury profiles and history atomicallyZhassyn Zhalynuly
  • 2026-09-23 15:07feat: complete activities idempotently without raw mutationsZhassyn Zhalynuly
  • 2026-09-23 15:02feat: persist validated overlay with atomic replacementZhassyn Zhalynuly
  • 2026-09-23 15:00feat: add minimal employee trajectory frontendZhassyn Zhalynuly
  • 2026-09-23 14:55feat: expose authorized employee development APIZhassyn Zhalynuly
  • 2026-09-23 14:51feat: prepare eligible activities and recommendation evidenceZhassyn Zhalynuly
  • 2026-09-23 14:50feat: expose next-grade and career-goal trajectoriesZhassyn Zhalynuly
  • 2026-09-23 14:48feat: project deterministic employee skill progressZhassyn Zhalynuly
  • 2026-09-23 14:46feat: load validated Career Quest starter dataZhassyn Zhalynuly
  • 2026-09-23 14:27Document selected track and casenualdaber
  • 2026-09-23 14:25feat add statusdanial41-design
  • 2026-09-23 14:25add readme statusZhassyn Zhalynuly
  • 2026-09-23 14:24Merge branch 'main' of github.com:BAITC-Hacks/hack-166d8cc7-iflowZhassyn Zhalynuly
  • 2026-09-23 14:22docs: specify Career Quest architecture for reviewZhassyn Zhalynuly
  • 2026-09-23 13:41Add Nurislam Aldabergenuly to authorsnualdaber
  • 2026-09-23 13:36readme add namedanial41-design
  • 2026-09-23 13:15feat add template for frontenddanial41-design
  • 2026-09-23 13:08Readme add nameZhassyn Zhalynuly
Структура репозитория (175 файлов)
.env.example
.gitattributes
.gitignore
QA_FIXES.md
README.md
TEST_AUDIT.md
backend/.dockerignore
backend/Dockerfile
backend/app/__init__.py
backend/app/ai/__init__.py
backend/app/ai/client.py
backend/app/ai/explanation.py
backend/app/ai/openai_provider.py
backend/app/ai/prompts.py
backend/app/ai/recommender.py
backend/app/api/__init__.py
backend/app/api/activities.py
backend/app/api/dataset.py
backend/app/api/dependencies.py
backend/app/api/employees.py
backend/app/api/hr.py
backend/app/api/market.py
backend/app/api/notifications.py
backend/app/api/recommendations.py
backend/app/api/session.py
backend/app/core/__init__.py
backend/app/core/auth.py
backend/app/core/config.py
backend/app/core/errors.py
backend/app/main.py
backend/app/repositories/__init__.py
backend/app/repositories/dataset.py
backend/app/repositories/employees.py
backend/app/repositories/events.py
backend/app/repositories/history.py
backend/app/repositories/skills.py
backend/app/repositories/state.py
backend/app/repositories/validation.py
backend/app/schemas/__init__.py
backend/app/schemas/activity.py
backend/app/schemas/common.py
backend/app/schemas/dataset.py
backend/app/schemas/employee.py
backend/app/schemas/history.py
backend/app/schemas/market.py
backend/app/schemas/notifications.py
backend/app/schemas/recommendation.py
backend/app/schemas/responses.py
backend/app/schemas/skill.py
backend/app/schemas/state.py
backend/app/services/__init__.py
backend/app/services/completion.py
backend/app/services/dataset.py
backend/app/services/eligibility.py
backend/app/services/hr.py
backend/app/services/mail_transport.py
backend/app/services/market.py
backend/app/services/notification_worker.py
backend/app/services/notifications.py
backend/app/services/progress_engine.py
backend/app/services/recommendation_context.py
backend/app/services/recommendation_engine.py
backend/app/services/skill_gap.py
backend/app/services/trajectory.py
backend/evals/course_cases.py
backend/evals/post_audit.py
backend/evals/run_openai.py
backend/provision_access.py
backend/pytest.ini
backend/requirements-dev.txt
backend/requirements.txt
backend/tests/conftest.py
backend/tests/test_api.py
backend/tests/test_audit_regressions.py
backend/tests/test_completion.py
backend/tests/test_data_loading.py
backend/tests/test_eligibility.py
backend/tests/test_eval_cases.py
backend/tests/test_hr.py
backend/tests/test_import.py
backend/tests/test_notifications.py
backend/tests/test_openai_provider.py
backend/tests/test_progress.py
backend/tests/test_recommendation_boundary.py
backend/tests/test_recommendation_context.py
backend/tests/test_skill_gap.py
backend/tests/test_state.py
data/fixtures/README.md
data/fixtures/raw-sha256.json
data/raw/README.kz.md
data/raw/README.md
data/raw/README.ru.md
data/raw/activity_history.csv
data/raw/employees.json
data/raw/events.json
data/raw/skills.json
docker-compose.yml
docs/architecture.md
docs/backend-market.md
docs/data-model.md
docs/discovery.md
docs/frontend-integration.md
docs/handoff.md
docs/llm-context.md
docs/notifications.md
docs/openai-provider.md
docs/superpowers/plans/2026-09-23-career-quest-foundation.md
docs/superpowers/specs/2026-09-23-career-quest-design.md
frontend/.dockerignore
frontend/AGENTS.md
frontend/CLAUDE.md
frontend/Dockerfile
frontend/next-env.d.ts
frontend/next.config.ts
frontend/package-lock.json
frontend/package.json
frontend/postcss.config.mjs
frontend/public/halyk-logo.png
frontend/public/images/halyk/SOURCES.md
frontend/public/images/halyk/academy-lab.webp
frontend/public/images/halyk/academy-session.webp
frontend/public/images/halyk/academy-students.webp
frontend/public/images/halyk/academy-talk.webp
frontend/public/images/halyk/academy-team.webp
frontend/public/images/halyk/headquarters.webp
frontend/src/app/connected.css
frontend/src/app/employee/[id]/page.tsx
frontend/src/app/events-visual.css
frontend/src/app/globals.css
frontend/src/app/hr-connected.css
frontend/src/app/hr/page.tsx
frontend/src/app/icon.svg
frontend/src/app/layout.tsx
frontend/src/app/notifications.css
frontend/src/app/page.tsx
frontend/src/app/professional-journey.css
frontend/src/app/professional.css
frontend/src/app/quest-game.css
frontend/src/components/artwork.tsx
frontend/src/components/atlas-terrain.tsx
frontend/src/components/connected-career-app.tsx
frontend/src/components/connected-hr.tsx
frontend/src/components/connected-journey.tsx
frontend/src/components/employee/profile.tsx
frontend/src/components/employee/trajectory.tsx
frontend/src/components/event-cover.tsx
frontend/src/components/hr/dashboard.tsx
frontend/src/components/notification-center.tsx
frontend/src/components/quest-game.tsx
frontend/src/components/reward-visual.tsx
frontend/src/components/session-provider.tsx
frontend/src/components/ui/status-message.tsx
frontend/src/lib/api.ts
frontend/src/lib/career-data.ts
frontend/src/lib/halyk-media.ts
frontend/src/lib/notification-api.ts
frontend/src/lib/types.ts
frontend/src/lib/use-quest-camera.ts
frontend/tests/ai-map.test.cjs
frontend/tsconfig.json
tests/fixtures/jury_profiles/activity_history.csv
tests/fixtures/jury_profiles/employees.json
tests/fixtures/jury_profiles/manifest.json
tests/independent_qa/README.md
tests/independent_qa/build_recorded_report.py
tests/independent_qa/performance.py
tests/independent_qa/results/evidence.json
tests/independent_qa/results/manual_review.json
tests/independent_qa/results/performance_api.json
tests/independent_qa/results/registry-final.json
tests/independent_qa/results/registry.json
tests/independent_qa/results/supplement.json
tests/independent_qa/run_all.py
tests/independent_qa/run_audit.py
tests/independent_qa/supplement.py
Ветки (4)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.