Перейти до вмісту

Калькулятор конкурсного бала

ПолеЗначення
Статус🟢 prod
Поверхніweb (+ deep-link у bot)
Доступністьбезкоштовно, без акаунта; «Зберегти бал» — потрібен акаунт
ВласникTODO:
Останнє підтвердження2026-06-13 · browse (abitly.org/uk/nmt-calculator, api.abitly.org/specialities/calculator, /regions, /offers/admission-chances) + код:main (abitly-frontend-v2, abitly-api-v2)

Абітурієнт вводить бали НМТ і миттєво бачить свій конкурсний бал (КБ) для обраної спеціальності — з урахуванням предметних коефіцієнтів, творчого конкурсу, підготовчих курсів (ОУ), регіонального (РК) та галузевого (ГК) коефіцієнтів. Головний органічний вхід у воронку: результат конвертується в реєстрацію або перехід у Telegram-бот.

Точка входу: https://abitly.org/uk/nmt-calculator (внутрішній роут /nmt-calculator, без локалізованого аліаса; ISR revalidate 1 день, robots index, FAQ-schema).

  1. Вибір спеціальності (SpecialityDropdown — групи за галузями, бейджі коефіцієнтів предметів).
  2. Обов’язкові предмети: українська, математика, історія України (валідація Zod 100–200; ScoreModeToggle — ввід «тестових балів» із конвертацією у шкалу 100–200).
  3. Один вибірковий предмет (рівно один — обов’язковий).
  4. Опційно: творчий конкурс (рендериться лише якщо у спеціальності КТ > 0), бал за підготовчі курси ЗВО (ОУ), регіональний коефіцієнт (RegionDropdown).
  5. «Розрахувати» → скрол до результатів: головна картка бала, таблиця «який був би бал з іншим вибірковим предметом», порівняльні графіки (BetterThanCards).
  6. Конверсійні поверхні після результату (registration funnel, у prod): банер Telegram-бота з deep-link t.me/<bot>?start=chances_<specialityId>_<score×100>, тізер «шанси на вступ» (топ-3 оффери за балом, частина карток заблокована до реєстрації), sticky-бар реєстрації, «Зберегти бал».
  7. «Зберегти бал»: авторизований → usersApi.updateGrades/updateProfile (бал у профілі); гість → бали в localStorage кроків wizard’а my-score + redirect на /auth/login, після входу воронка відновлюється (useResumeFunnelOnAuth).

Гілка deep-link у бота вже намальована — див. /start chances_…; кліки трекаються через track-events → lake-house. Тут не дублюємо.

Код (calculateHelpers.ts) реалізує офіційну формулу НМТ-2026/2025: чисельник К1·П1+К2·П2+К3·П3+К4·П4+КТ·ТК, знаменник К1+К2+К3+(К4макс+К4)/2+КТ, далі +ОУ, ×РК, ×ГК (1.02 для спеціальностей з особливою підтримкою, isSupported), cap 200. Узгоджена з довідником хабу — Мінімальні бали та формула (Порядок прийому-2026, Розділ IV, п. 4). Формули НМТ-2023/2024 калькулятор не реалізує.

ДжерелоЕндпоінт / entityПризначення
api-v2GET /specialities/calculatorгалузі + спеціальності з предметними коефіцієнтами (staleTime: Infinity — змінюються раз на рік; live віддає year 2026)
api-v2GET /regionsрегіони з РК (coefficient)
api-v2GET /offers/admission-chances (param concursScore)тізер «шанси на вступ» — топ-N офферів за балом
api-v2usersApi.updateGrades / updateProfileзбереження бала в профіль (тільки авторизовані)

Спеціальності та регіони prefetch’аться на сервері (RSC + HydrationBoundary), форма й розрахунок — повністю клієнтські (React Hook Form + CalculatorContext): сам КБ рахується в браузері, без запиту до API.

Зв’язки з іншими фічами

Section titled “Зв’язки з іншими фічами”
  • «Мої пріоритети» — тизер шансів калькулятора несе кнопку «+ у пріоритети» (єдина точка входу MVP доку); КБ із калькулятора живить статус-чіп «куди проходжу».
  • Каталог спеціальностей / офферів — з результату веде картка «знайти оффери»; тізер шансів тягне ті самі оффери.
  • Deep-links до Telegram-бота — контракт chances_<specialityId>_<score×100> (owner — бот; NEXT_PUBLIC_TELEGRAM_BOT_USERNAME).
  • Автентифікація — гейт для збереження бала; воронка реєстрації стартує саме звідси.
  • Wizard «Куди я вступлю?» (🚧) і профільний my-score wizard — продовження цього флоу, карток ще немає (див. індекс).
РепоШляхПримітка
abitly-frontend-v2src/app/[locale]/(main)/nmt-calculator/page.tsxроут (RSC, prefetch)
abitly-frontend-v2src/components/pages/calculator/**форма, результати, registration-funnel, utils/calcGrade.ts + utils/calculateHelpers.ts (формула)
abitly-frontend-v2src/lib/utils/telegramBot.tsbuildChancesDeepLink — єдине джерело bot-URL
abitly-frontend-v2docs/domains/calculator/домен-доки (overview, api, state, seo, i18n) — першоджерело деталей
abitly-api-v2src/api/specialities/, src/api/regions/контролери даних калькулятора

Покриття тестами: e2e __tests__/e2e/nmt-calculator/ (15 spec-файлів) + unit/integration по воронці.

  • Лише формула НМТ-2026/2025; для НМТ-2023/2024 (інші формули — див. довідник) розрахунку немає.
  • NEXT_PUBLIC_TELEGRAM_BOT_USERNAME не заданий → усі bot-лінки тихо ховаються (повертається null).
  • Deep-link із застарілим speciality-id → бот мовчки відповідає «не знайдено» (id мають бути поточного року бекенда).
  • Тізер шансів вимагає score > 0 і вибраної спеціальності; retry: false — при падінні API секція просто не показується.
  • Спецкатегорії вступника (квоти, пільги) калькулятор не враховує — тільки «загальна» формула КБ.
ДатаПодіяДжерело
2026-05-15актуалізовано домен-доки калькулятораabitly-frontend-v2 docs/domains/calculator/
2026-05-25registration funnel (тізер шансів + sticky CTA) — спроєктовано і змерженоdocs/superpowers/plans/2026-05-25-nmt-calculator-registration-funnel.md
2026-06-13створено картку; формулу звірено з довідником vstup-rulesPR Wave 1