AAYMA
RU
Войти

Career Quest

Навигатор карьерного развития с отдельными экранами сотрудника и HR: расчёт readiness к целевой роли и грейду, топ-1–3 активности с объяснением…

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

О проекте

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

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

Суть

Навигатор карьерного развития с отдельными экранами сотрудника и HR: расчёт readiness к целевой роли и грейду, топ-1–3 активности с объяснением, завершение активности с пересчётом навыков, HR-аналитика и импорт данных.

Как устроено

Детерминированный Python-движок сначала восстанавливает текущие навыки по last_review и последующим завершениям (gain, max_level). Затем он сравнивает их с required и critical skills цели, проверяет допуск (аудитория, prerequisites, расписание) и симулирует навыки до и после каждой активности. Скоринг — взвешенная сумма 7 нормализованных факторов: критические навыки 35%, дефициты 25%, соответствие цели 15%, история 10% и другие. Readiness = Σ(w·min(cur,req))/Σ(w·req), где w=2 для критических навыков. Объяснения на нескольких языках генерирует OpenAI, при его отсутствии — шаблоны. Хранение в Supabase PostgreSQL или атомарном JSON-файле.

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

  • multi-factor weighted scoring
  • skill reconstruction
  • eligibility checks
  • impact simulation
  • readiness metric
  • idempotent completion
  • deterministic fallback explanations

Особенности

Для жюри расписан пошаговый сценарий с ожидаемыми числами (например, у E0001 readiness меняется 58.97% → 66.67%). Повторное завершение с тем же ключом не начисляет прирост второй раз. Работа велась поэтапно с аудитами (step1–4 audit/results), а веса всех факторов собраны в одном config.

Стек

Python · FastAPI · Pydantic · PostgreSQL (Supabase) · React · TypeScript · Vite · pnpm · pytest

Модели

OpenAI


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

README

README.md

Career Quest

Backend для команды HackAlem AI: профили сотрудников, каталог мероприятий, история участия, завершение активности, импорт данных жюри и агрегированная HR-аналитика. FastAPI, Pydantic и PostgreSQL в Supabase. Исходный датасет загружается из JSON/CSV. Для локального демо доступно файловое хранение. Персональный навигатор карьерного развития сотрудников

HackAlem AI · кейс Halyk Bank · трек Management

Подключение Supabase

В Supabase откройте Connect → Session pooler и добавьте PostgreSQL URL в локальный .env как DATABASE_URL. Используйте адрес из своего проекта, пароль базы и [скрыто]; специальные символы пароля нужно URL-кодировать. Пример переменной есть в .env.example.

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m backend.db init
./run.sh

init применяет SQL-миграции и загружает данные только в пустую базу. Если есть .runtime/state.json, его прогресс и сохранённые ответы также переносятся; исходный файл остаётся на месте. Повторный init сохраняет действующие данные. Для проверки подключения и количества записей:

.venv/bin/python -m backend.db status

При заданном DATABASE_URL API использует Supabase. Ошибка подключения возвращает ошибку, без переключения на локальные данные. Схема, таблицы, транзакции и настройка доступа описаны в SUPABASE.md.

Запуск одной командой

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

Рабочая версия — в main. Проект запускается локально без отдельного сервера БД и без OpenAI-ключа. Ниже — запуск, сценарий проверки и описание алгоритма.

Какую задачу решаем

Каталог курсов сам по себе не объясняет сотруднику, что проходить дальше и зачем. Career Quest учитывает требования карьерной цели, критичность навыков, прошлое участие, эффект обучения, затраты времени и доступность мероприятий.

Например, самый низкий навык может быть Public Speaking, но активность по System Design может оказаться полезнее: она закрывает важные требования цели сразу по нескольким навыкам. Проверить причины выбора можно прямо в карточке рекомендации.

Для сотрудникаДля HR
Профиль и текущие эффективные навыкиКаталог сотрудников и просмотр профилей
Текущая позиция → целевая роль и грейдОбщие дефициты навыков текущих ролей
Покрытие требований цели — career readinessУчастие и статусы активностей
Top 1–3 активности, ожидаемый эффект и объяснениеПолнота рассчитанных рекомендаций
Завершение активности и обновление прогрессаПроверка и импорт данных жюри

Быстрый запуск демо — два терминала

Нужны Python 3.11+, Node.js 22.12+ с npm и Git. Команды предназначены для macOS, Linux или WSL. При первой установке зависимостей нужен интернет; отдельная установка pnpm не требуется.

Если репозиторий ещё не скачан:

git clone --branch main https://github.com/BAITC-Hacks/hack-7b100a71-garden.git
cd hack-7b100a71-garden

Терминал 1 — из корня репозитория:

CAREER_QUEST_AUTH_DISABLED=true OPENAI_API_KEY= ./run.sh

Скрипт создаст .venv, установит Python-зависимости и запустит backend. Оставьте терминал открытым. Проверка: health возвращает status: ok; Swagger описывает API.

Терминал 2 — из того же корня репозитория:

cd frontend
npx --yes [email protected] install --frozen-lockfile
VITE_API_MODE=real VITE_API_BASE_URL=http://127.0.0.1:8000 npx --yes [email protected] dev --port 5173 --strictPort

Откройте http://127.0.0.1:5173. Frontend работает с настоящим FastAPI, а не с mock-данными.

Поле входаСотрудникHR
WorkspaceEmployeeHR
Employee IDE0001Не требуется
Access tokendemo-localdemo-local

Нажмите Open workspace. Для переключения используйте Change identity. После перезагрузки вкладки вход потребуется повторить.

В этом quickstart серверная авторизация явно отключена только для локального показа синтетического датасета. demo-local — непустая строка для формы, не секрет и не токен защищённого режима. Настоящее разграничение доступа описано ниже. Пустой OPENAI_API_KEY включает детерминированные объяснения без внешнего LLM. Оба сервера останавливаются через Ctrl+C.

Что проверить жюри за 3–5 минут

Начальные значения относятся к исходному датасету, без сохранённых demo-completion.

ШагДействиеОжидаемый результат
1Открыть E0001Backend Engineer → Middle; readiness 58.97%, EV_005 — первая рекомендация
2Раскрыть Why this?, затем Score, factors and evidenceОбъяснение на казахском, факторы оценки, исходные доказательства и симуляция навыков
3Нажать Complete activity у EV_005API Design 2 → 3, System Design 1 → 2, readiness 66.67%; EV_005 исчезает, EV_036 остаётся
4Через HR открыть E0004 и завершить EV_026Переход в Product Manager / Middle, допуск target_role; readiness 42.11% → 52.63%
5Открыть E0006 и E0018Корректные состояния «нет следующего грейда» и «нет подходящих активностей»
6Открыть HR overviewОбщие дефициты, участие, полнота рекомендаций и форма загрузки данных

Completion возвращает подтверждение backend, сохраняет изменение и обновляет профиль, историю и рекомендации. Повтор запроса с тем же ключом действия не начисляет прирост повторно.

Для повторного чистого показа остановите backend и используйте отдельный файл:

CAREER_QUEST_AUTH_DISABLED=true OPENAI_API_KEY= CAREER_QUEST_STATE_PATH=".runtime/demo-$(date +%Y%m%d-%H%M%S).json" ./run.sh

Предыдущий .runtime/state.json останется целым. Для продолжения того же показа после restart укажите тот же созданный путь, а не новый файл с другой датой.

Как выбираются рекомендации

Решение принимает детерминированный Python-движок. При одинаковых входных данных, конфигурации и расчётной дате результат воспроизводим.

  1. Карьерная цель. Используется явный career_goal, включая переход в другую роль. Без цели выбирается следующий грейд текущей роли. Для Lead без цели не придумывается более высокий грейд.
  2. Текущие навыки. К оценке на last_review_date применяются последующие завершения с учётом gain, max_level и хронологии, без двойного начисления. Неоднозначная историческая реконструкция помечается как оценочная.
  3. Дефициты. Эффективные навыки сравниваются с required_skills целевой роли и грейда; отдельно выделяются critical_skills.
  4. Допуск. Проверяются аудитория, достигнутый грейд, prerequisites, расписание, история завершений и полезный прирост. Обязательные мероприятия не рекомендуются. Для явного перехода разрешена аудитория целевой роли, но грейд допуска остаётся текущим. Это основание возвращается в evidence.
  5. Симуляция и оценка. Для всех допустимых активностей рассчитываются навыки и дефициты до/после, readiness и семь факторов скоринга.
  6. Top 1–3 и объяснение. Возвращаются готовый порядок, оценки, ожидаемый эффект и проверяемые причины выбора. Если подходящих мероприятий нет, объясняется это состояние, а не создаётся фиктивная рекомендация.
ФакторВесЧто учитывает
Влияние на критические навыки35%Сокращение критических дефицитов цели
Сокращение дефицитов25%Общий полезный прирост относительно требований цели
Соответствие карьерной цели15%Доля прироста, полезного для цели, среди всех фактических улучшений
Совместимость с историей10%Исходы участия в похожих активностях с учётом давности
Обратная связь и результаты5%Сглаженные рейтинги и оценки обучения
Эффективность по времени5%Полезный прирост на час активности
Доступность5%Ожидание ближайшей сессии или формат self-paced

Итоговая оценка — сумма взвешенных нормализованных факторов. Влияние на критические навыки, сокращение дефицитов и эффективность нормализуются по всему допустимому пулу до выбора Top 3. В API остаются и нормализованные значения, и исходные доказательства. Негативная история снижает совместимость, но не создаёт вечного запрета. Самостоятельное участие и назначения manager/HR имеют разные веса.

Все коэффициенты централизованы в backend/recommendation/config.py.

Что означает readiness

Это покрытие требований целевой роли и грейда:

readiness = Σ(w × min(текущий уровень, требуемый уровень))
            / Σ(w × требуемый уровень)

С `DATABASE_URL` сотрудники, навыки, мероприятия и история сохраняются в связанных таблицах схемы `career_quest`. Завершение, рост версии данных и ответ для повторного запроса фиксируются одной транзакцией. База становится источником данных: после её заполнения исходные файлы не требуются для перезапуска. Новые данные загружаются через API импорта.

Без `DATABASE_URL` используется `.runtime/state.json` и **один worker**. Файловая запись атомарная, состояние связано с исходным датасетом по контрольной сумме. Для чистого локального демо остановите сервер и переместите этот файл в резервную копию. Для хранения только в памяти также задайте пустое значение `CAREER_QUEST_STATE_PATH`. В PostgreSQL одновременные изменения разных процессов сериализуются блокировкой в базе. Остальные настройки перечислены в `.env.example`.
w = 2 для критического навыка цели, иначе 1

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

Роль AI и защита от выдуманных фактов

Детерминированные объяснения доступны на казахском, русском и английском по preferred_language сотрудника. Они используют цель, симуляцию, историю и evidence уже выбранных рекомендаций.

OpenAI — необязательный слой выбора формулировок: модель выбирает разрешённые варианты direct/coaching для установленных фактов. Итоговый текст собирается локально из проверенных шаблонов. Произвольный текст и новые факты не принимаются. Модель не может выбрать, отфильтровать, пересортировать или переоценить активности.

При отсутствии ключа, таймауте, ошибке API или неподдерживаемом ответе автоматически сохраняются детерминированные объяснения. Для включения OpenAI задайте собственный OPENAI_API_KEY в окружении backend или его локальном .env и уберите OPENAI_API_KEY= из команды запуска. Ключ не включается в frontend или Git. Подробный контракт объяснений.

Данные жюри и новые профили

В репозитории находится официальный датасет: 200 сотрудников, 60 навыков, 8 ролей × 4 грейда, 40 мероприятий и 2743 записи истории. Расчётная дата — 2026-10-01, заданная метаданными. Runtime completion хранит реальное время операции отдельно от логического дня демо.

Движок работает по входным профилям и каталогу; ID E0001/E0004 используются в сценариях проверки, а не как условия выбора рекомендаций.

Для проверки новых данных войдите как HR и откройте HR overview → Validate & upload dataset. Сохраняйте структуру официального JSON/CSV, включая JSON meta.

РежимЧто загрузитьРезультат
appendНовые employees и/или activity historyДобавление в текущий набор; существующие ID не перезаписываются
replaceВсе четыре файла: employees, skills, events, activity historyПолная замена рабочего набора и сброс прежних runtime receipts

Нажмите Validate files, проверьте ошибки и итоговые counts, затем подтвердите upload. Импорт применяется атомарно: невалидные файлы не меняют состояние. После успешной загрузки обновляется версия данных, новые сотрудники доступны HR в selector, рекомендации рассчитываются по обновлённому набору. В защищённом режиме employee-токен нового сотрудника настраивается на backend отдельно.

Схема и правила официального датасета · HTTP-контракт для импорта и остальных экранов.

Архитектура и хранение

flowchart LR
    UI[React / TypeScript] --> API[FastAPI]
    API --> Repository[Repository: JSON/CSV + runtime state]
    API --> Engine[Python: допуск, симуляция, скоринг]
    Engine --> Explanation[Объяснения из evidence]
    Explanation -. Необязательный выбор формулировок .-> OpenAI[OpenAI]
ЧастьРеализация
ИнтерфейсReact, TypeScript, Vite, TanStack Query
HTTP API и валидацияFastAPI, Pydantic
РекомендацииНезависимые Python-функции в backend/recommendation/
ОбъясненияИзолированный слой backend/ai/
Исходные данныеНеизменённые JSON/CSV в data/career_quest_dataset/
Сохранённое состояние.runtime/state.json по умолчанию

Используется персистентное файловое хранилище: отдельные PostgreSQL/SQLite, Redis, Docker и миграции для запуска не нужны. Completion, импортированный набор, порядок операций, версии и idempotency receipts сохраняются атомарной заменой файла и восстанавливаются после перезапуска. Исходный датасет не переписывается.

Backend работает одним worker. На hosting файл состояния должен находиться на записываемом постоянном диске/volume. Пустой CAREER_QUEST_STATE_PATH включает режим только в памяти. Остальная конфигурация — в .env.example.

HR-дефициты считаются относительно текущей роли и грейда, readiness — относительно цели. HR coverage может быть частичным: UI показывает, для скольких сотрудников этой версии уже вычислены рекомендации. Неоценённые профили не выдаются за нулевой результат. Публичного рейтинга сотрудников нет.

Проверка разграничения доступа

Для защищённого режима задайте собственные токены в корневом .env:

CAREER_QUEST_AUTH_DISABLED=false
HR_API_TOKEN=your-own-hr-token
EMPLOYEE_TOKENS_JSON={"your-own-e0001-token":"E0001","your-own-e0004-token":"E0004"}

Замените your-own-… своими значениями. Запустите CAREER_QUEST_AUTH_DISABLED=false ./run.sh. HR входит с HR_API_TOKEN, employee — со своим ID и соответствующим токеном. Сервер независимо проверяет права: сотрудник получает только собственные данные, HR — каталог, аналитику и импорт. Выбор Workspace не расширяет права. На frontend токены находятся только в памяти вкладки.

Что проверено

ПроверкаРезультат
Recommendation + AI tests280 passed
Backend tests102 passed
Backend/engine integration tests43 passed
Полный совместный Python-прогон425 passed
Frontend unit/component/adapter tests120 passed
Frontend build / TypeScript / lintPassed
SHA-256 официального датасетаБез изменений

Отдельно выполнена настоящая браузерная проверка Vite + FastAPI: E0001/E0004 с completion и обновлением прогресса, E0006/E0018, HR, append нового профиля и четырёхфайловый replace. Проверены persistence/restart и отсутствие двойного начисления. Браузерные проверки отделены от unit/API-тестов в отчёте интеграции.

Повторить автоматические проверки из корня репозитория:

.venv/bin/python -m pip install -r requirements-dev.txt
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -m pytest -q -p no:cacheprovider
cd frontend
npx --yes [email protected] test
npx --yes [email protected] build
npx --yes [email protected] lint

Тесты проверяют официальный датасет, повреждённые JSON/CSV и ссылки, новые профили, транзакционный импорт, границы доступа, рост навыков, порядок завершений, повторные и конкурентные запросы, восстановление состояния и ошибки подключаемого движка. Основные сценарии используют небольшие синтетические наборы с произвольными ID.

Для интеграционных тестов PostgreSQL задайте CAREER_QUEST_TEST_DATABASE_URL отдельной тестовой базы. Тесты создают и удаляют только собственные схемы cq_test_<uuid>; без этой переменной они пропускаются. Команда build включает TypeScript-проверку. Дополнительно: результаты browser/HTTP · подробный алгоритм · инструкция frontend.

Границы MVP и устранение проблем

  • Интерфейс преимущественно английский; объяснения поддерживают kk/ru/en.
  • Вход использует заранее настроенные токены, без корпоративного SSO.
  • Траектория показывает текущую позицию и цель; многошаговый план всей карьеры не строится.
  • Live OpenAI-вызов не входит в подтверждённую проверку; fallback и обработка ошибок покрыты тестами.
  • Quickstart предназначен для локального запуска, публичный hosting не настроен.
ПроблемаЧто проверить
Порт 8000/5173 занятОстановить предыдущий сервер; --strictPort предотвращает незаметный переход на другой порт
Backend unavailableТерминал backend, /health, адрес API и CORS
401/403Режим авторизации и токен; demo-local работает только при отключённой серверной авторизации
Уже улучшенные навыки у E0001Сохранён предыдущий completion; использовать отдельный state-файл для чистого показа
Датасет не найденПроверить четыре файла в data/career_quest_dataset/ или CAREER_QUEST_DATA_DIR

Команда

УчастникОтветственность
ZhanibekRecommendation engine, scoring, readiness, объяснения/OpenAI, финальная интеграция
BekarysFastAPI, валидация/загрузка данных, API, persistence, HR и импорт
AdiletReact frontend, employee/career/recommendation UI, HR и upload UI
Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
36
Авторы
4
Файлы
178
Ветки
5

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

Tedra-ez 27ad1let-1 4Bekarys 3Бекарыс Узбекбаев 2

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

  • 2026-09-23 17:53Merge pull request #2 from BAITC-Hacks/feat-bekaBekarys
  • 2026-09-23 17:53Merge branch 'main' into feat-bekaBekarys
  • 2026-09-23 17:50Add Supabase database integration and migrationsБекарыс Узбекбаев
  • 2026-09-23 17:43docs: explain Career Quest and jury evaluation flowTedra-ez
  • 2026-09-23 17:38feat: complete Adilet frontendad1let-1
  • 2026-09-23 17:34docs: point hackathon submission to mainTedra-ez
  • 2026-09-23 17:26docs: add hackathon quick start and persistence guideTedra-ez
  • 2026-09-23 17:17docs: add phase 2 integration resultsTedra-ez
Все коммиты (36)
  • 2026-09-23 17:17feat: add career recommendations and completion UITedra-ez
  • 2026-09-23 17:17feat: add HR analytics and dataset management UITedra-ez
  • 2026-09-23 17:17test: add frontend integration coverageTedra-ez
  • 2026-09-23 17:17feat: connect frontend to backend APITedra-ez
  • 2026-09-23 16:55feat(frontend): add HR dashboardad1let-1
  • 2026-09-23 16:50Merge latest frontend from origin/feat/adilet into codex/team-integrationTedra-ez
  • 2026-09-23 16:24docs: add frontend API contract and integration resultsTedra-ez
  • 2026-09-23 16:23test: add backend recommendation integration coverageTedra-ez
  • 2026-09-23 16:23feat: integrate recommendation engine with backendTedra-ez
  • 2026-09-23 16:23fix: unify runtime skill reconstructionTedra-ez
  • 2026-09-23 15:57Merge branch 'zhanibek' into codex/team-integrationTedra-ez
  • 2026-09-23 15:41feat(frontend): add employee dashboard career and skillsad1let-1
  • 2026-09-23 15:24docs: add step 4 explanation auditTedra-ez
  • 2026-09-23 15:24test: add explanation and OpenAI fallback testsTedra-ez
  • 2026-09-23 15:24feat: add multilingual recommendation explanationsTedra-ez
  • 2026-09-23 15:24docs: add step 3 ranking auditTedra-ez
  • 2026-09-23 15:24test: add recommendation scoring and ranking testsTedra-ez
  • 2026-09-23 15:24feat: add multi-factor recommendation rankingTedra-ez
  • 2026-09-23 14:55feat(frontend): add Career Quest frontend foundationad1let-1
  • 2026-09-23 14:43Merge pull request #1 from BAITC-Hacks/feat-bekaBekarys
  • 2026-09-23 14:42feat: implement Career Quest backend, dataset import and HR analyticsБекарыс Узбекбаев
  • 2026-09-23 14:30docs: add step 2 recommendation auditTedra-ez
  • 2026-09-23 14:30test: add eligibility and simulation testsTedra-ez
  • 2026-09-23 14:30feat: add event eligibility and impact simulationTedra-ez
  • 2026-09-23 14:02docs: add recommendation engine contract and step 1 resultsTedra-ez
  • 2026-09-23 14:02chore: configure gitignoreTedra-ez
  • 2026-09-23 14:00test: add recommendation step 1 testsTedra-ez
  • 2026-09-23 14:00feat: implement career state and skill reconstructionTedra-ez
Структура репозитория (178 файлов)
.env.example
.gitignore
README.md
backend/__init__.py
backend/__main__.py
backend/ai/__init__.py
backend/ai/config.py
backend/ai/contracts.py
backend/ai/explanations.py
backend/ai/openai_client.py
backend/ai/templates.py
backend/api/__init__.py
backend/api/activities.py
backend/api/datasets.py
backend/api/dependencies.py
backend/api/employees.py
backend/api/events.py
backend/api/hr.py
backend/config.py
backend/data/__init__.py
backend/data/loader.py
backend/data/postgres.py
backend/data/postgres_codec.py
backend/data/postgres_repository.py
backend/data/repository.py
backend/data/validation.py
backend/db.py
backend/errors.py
backend/integrations/__init__.py
backend/integrations/engine_inputs.py
backend/integrations/recommendation_provider.py
backend/integrations/recommendations.py
backend/main.py
backend/models/__init__.py
backend/models/api.py
backend/models/domain.py
backend/recommendation/__init__.py
backend/recommendation/career.py
backend/recommendation/config.py
backend/recommendation/contracts.py
backend/recommendation/eligibility.py
backend/recommendation/engine.py
backend/recommendation/history.py
backend/recommendation/scoring.py
backend/recommendation/simulation.py
backend/recommendation/skills.py
backend/security.py
backend/services/__init__.py
backend/services/activity_service.py
backend/services/dataset_service.py
backend/services/hr_service.py
backend/services/recommendation_service.py
backend/services/skill_projection.py
data/career_quest_dataset/README.kz.md
data/career_quest_dataset/README.md
data/career_quest_dataset/README.ru.md
data/career_quest_dataset/activity_history.csv
data/career_quest_dataset/employees.json
data/career_quest_dataset/events.json
data/career_quest_dataset/skills.json
docs/API.md
docs/DATASET_NOTES.md
docs/FRONTEND_API_CONTRACT.md
docs/INTEGRATION.md
docs/SUPABASE.md
docs/e0001-recommendations.response.json
docs/explanations-contract.md
docs/integration-phase1-audit.md
docs/integration-phase1-results.json
docs/integration-phase2-audit.md
docs/integration-phase2-results.json
docs/recommendation-contract.md
docs/step1-results.json
docs/step2-audit.md
docs/step2-results.json
docs/step3-audit.md
docs/step3-results.json
docs/step4-audit.md
docs/step4-results.json
frontend/.env.example
frontend/.gitignore
frontend/README.md
frontend/eslint.config.js
frontend/index.html
frontend/package.json
frontend/pnpm-lock.yaml
frontend/pnpm-workspace.yaml
frontend/src/App.tsx
frontend/src/auth.test.tsx
frontend/src/components/ActivityHistory.tsx
frontend/src/components/AppShell.tsx
frontend/src/components/CareerReadiness.tsx
frontend/src/components/CareerTrajectory.tsx
frontend/src/components/CompletionResult.tsx
frontend/src/components/DatasetUpload.test.tsx
frontend/src/components/DatasetUpload.tsx
frontend/src/components/EmployeeProfile.tsx
frontend/src/components/EmployeeSelector.tsx
frontend/src/components/HRAnalyticsPanel.tsx
frontend/src/components/Icon.tsx
frontend/src/components/RecommendationCard.tsx
frontend/src/components/RecommendationList.tsx
frontend/src/components/SkillGapList.tsx
frontend/src/components/UI.tsx
frontend/src/components/dashboard.test.tsx
frontend/src/components/employeeIntegration.test.tsx
frontend/src/components/hr.test.tsx
frontend/src/hooks/useEmployeeDashboard.ts
frontend/src/hooks/useEmployees.ts
frontend/src/hooks/useSession.ts
frontend/src/i18n/en.ts
frontend/src/main.tsx
frontend/src/mocks/fixtures.ts
frontend/src/mocks/mockApi.test.ts
frontend/src/mocks/mockApi.ts
frontend/src/mocks/scenarios.ts
frontend/src/pages/EmployeeDirectory.tsx
frontend/src/pages/EmployeeWorkspace.test.tsx
frontend/src/pages/EmployeeWorkspace.tsx
frontend/src/pages/HRWorkspace.tsx
frontend/src/pages/NotFound.tsx
frontend/src/pages/SignIn.tsx
frontend/src/services/api.ts
frontend/src/services/completionAction.test.ts
frontend/src/services/completionAction.ts
frontend/src/services/httpApi.test.ts
frontend/src/services/httpApi.ts
frontend/src/services/queryClient.ts
frontend/src/services/session.test.ts
frontend/src/services/session.ts
frontend/src/styles.css
frontend/src/styles/auth.css
frontend/src/styles/dashboard.css
frontend/src/styles/hr.css
frontend/src/types/api.ts
frontend/src/types/domain.ts
frontend/src/types/transport.ts
frontend/src/utils/formatReadiness.ts
frontend/src/vite-env.d.ts
frontend/tsconfig.app.json
frontend/tsconfig.json
frontend/tsconfig.node.json
frontend/vite.config.ts
pytest.ini
requirements-dev.txt
requirements.txt
run.sh
supabase/migrations/20260923000100_initial.sql
tests/conftest.py
tests/integration/audit_phase1.py
tests/integration/test_backend_engine.py
tests/integration/test_runtime_contract.py
tests/recommendation/audit_step2.py
tests/recommendation/audit_step3.py
tests/recommendation/audit_step4.py
tests/recommendation/test_career.py
tests/recommendation/test_config.py
tests/recommendation/test_dataset.py
tests/recommendation/test_eligibility.py
tests/recommendation/test_engine.py
tests/recommendation/test_explanation_templates.py
tests/recommendation/test_explanations.py
tests/recommendation/test_history.py
tests/recommendation/test_openai_client.py
tests/recommendation/test_scoring.py
tests/recommendation/test_simulation.py
tests/recommendation/test_skills.py
tests/recommendation/test_step2_dataset.py
tests/recommendation/test_step3_dataset.py
tests/recommendation/test_step4_dataset.py
tests/test_activities.py
tests/test_api.py
tests/test_config.py
tests/test_dataset.py
tests/test_imports.py
tests/test_postgres.py
tests/test_recommendations.py
tests/test_repository.py
Ветки (5)

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

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

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