| Поле | Значення |
|---|
| Статус | 🟢 prod |
| Поверхні | web |
| Доступність | потрібен акаунт |
| Власник | TODO: |
| Останнє підтвердження | 2026-06-14 · код:main + live-гейти (/users/me → 401, /specialities → 200 публічно). Авторизований UI — code-derived |
Дозволяє абітурієнту (та APPLICANT_MEMBER) вибрати список цільових спеціальностей (interestedSpecialities) і одну позначити основною (primary). Для цих спеціальностей система рахує конкурсний бал і шанси вступу. Це не окрема сторінка, а частина профілю — редагується у двох місцях.
Два місця редагування одного поля interestedSpecialities:
- Налаштування → «Інтереси» (
/profile/settings, InterestsSection): мультиселект із нечітким пошуком (Fuse), згрупований по галузях знань (branch), формат «‹код› ‹назва›»; також вибір регіонів.
- Майстер «Мій бал», крок 5 (
/profile/my-score/step-5, MyScoreStep5): «Цільові спеціальності», валідація «треба обрати хоча б одну».
Перегляд: на дашборді ProfileCard показує лічильник; на результаті my-score — SpecialityCard з конкурсним балом по кожній спеціальності + вибір основної.
| Джерело | Ендпоінт / entity | Призначення |
|---|
| api-v2 | GET /users/me | профіль із interestedSpecialities: SpecialityResponse[] |
| api-v2 | PATCH /users/profile | оновлення (interestedSpecialities: number[]) |
| api-v2 | PUT /users/profile/primary-speciality | { specialityId }; має бути серед обраних, інакше 400; null = скинути |
| api-v2 | GET /specialities, /specialities/branches, /specialities/:id/coefficients | публічний read-only каталог опцій (RedisCache) |
| api-v2 | БД: M2M user_interested_specialities + users.primary_speciality_id | зведено в базового користувача (міграція 1774434517786) |
- my-score —
GET /users/profile/concurs-score рахує бал по кожній обраній спеціальності.
- offer-search — каталог спеціальностей як джерело опцій.
- profile — поле живе в профілі (Settings + my-score).
| Репо | Шлях | Примітка |
|---|
abitly-frontend-v2 | src/components/pages/profile/pages/Settings/components/Sections/InterestsSection | редактор інтересів |
abitly-frontend-v2 | src/components/pages/profile/pages/MyScore/** (Step5) | вибір у майстрі бала |
abitly-api-v2 | src/api/users/users.service.ts (reconcilePrimarySpeciality) | реконсиляція primary |
- Доступно лише авторизованим; повний UI не верифіковано без браузера.
- Primary реконсилюється: якщо стара основна випала зі списку обраних —
primarySpecialityId авто-скидається в null.
- Релевантно для APPLICANT / APPLICANT_MEMBER; STUDENT/TEACHER/OTHER мають інші поля.
- ⚠️ Зв’язок зі specialty-broadcasts бота розірвано: tg-bot v3 ADR-0008 (2026-06-02) видалив
filter_specialities/filter_universities (таблиці з іменами >63 символів давали UndefinedTableError і краш /start); бот фільтрує лише за регіонами. Обрані спеціальності кабінету наразі НЕ використовуються ботом для сегментації розсилок. Майбутній зв’язок — у дизайні profile-bot-link.
- ≠ збережені оффери:
interestedSpecialities (цілі) — це не Вступлісти (збережені конкурсні пропозиції).
| Дата | Подія | Джерело |
|---|
| 2026-06-02 | tg-bot ADR-0008 відв’язав specialty-фільтри | abitly-tg-bot-v3 |
| 2026-06-14 | створено картку; факти з коду main | PR Wave 2 |