Персональний аналіз конкурентів вступної кампанії на основі abit-poisk.org.ua. Не просто місце в рейтинговому списку, а реальний шанс пройти — з урахуванням того, що частина конкурентів вище тебе за балом можуть піти на свій вищий пріоритет і звільнити місце.
Три інтерфейси над одним рушієм: CLI, GUI (CustomTkinter) і Telegram-бот. Жодна логіка ніде не дублюється — все живе в abit_parser/.
| v1 — вердикт по бюджету | Широка вилка: оптимістична/песимістична межа місця проти БМmax, вердикт проходиш/на межі/пролітаєш |
| v2 — крос-аналіз | Для кожного конкурента вище тебе — пошук його інших заяв з вищим пріоритетом, градація точно/ймовірно/лишається/невизначено, звужена оцінка |
| v3 | GUI, компіляція в exe, LLM-сумаризація (Gemini/Anthropic/офлайн-шаблон) |
| v4 — шанс на контракт | Той самий принцип для контрактного пулу (К-заявки + Б-невдахи бюджету), якщо на бюджет не проходиш |
| Telegram-бот | Той самий аналіз у чаті, приватний, домашній хостинг. Плюс «🔔 Стежити» — періодична автоперевірка з повідомленням, якщо щось змінилось |
Головне правило у всій подачі результату: краще занизити шанс, ніж завищити. Вердикт завжди веде з песимістичного сценарію, три окремі числа замість одного оманливого відсотка, «невизначено» показується чесно окремо, а не ховається в жодну зі сторін. Деталі формул і термінів — GLOSSARY.md.
pip install -r requirements.txtБазові залежності (requests, beautifulsoup4, certifi) ставляться завжди. Усе інше — опційно, залежно від того, який інтерфейс потрібен (розкоментуй відповідні рядки в requirements.txt):
- GUI —
customtkinter - Сумаризація —
google-genai(Gemini, дефолт у GUI) і/абоanthropic(--explainу CLI) - Компіляція в exe —
pyinstaller - Telegram-бот —
python-telegram-bot[job-queue],python-dotenv
python main.py https://abit-poisk.org.ua/rate2026/direction/1613482 --score 180.5 --priority 3 --funding БКорисні прапорці: --contract (шанс на контракт), --no-cross-check (лише швидкий v1, без мережевих запитів по кожному конкуренту), --explain (LLM-пояснення), --json/--md (зберегти результат). Повний список — python main.py --help.
python gui.pyФорма вводу → аналіз у фоновому потоці з прогресом → результат + скрол-таблиця групи ризику. Ключ Gemini API вводиться в самому застосунку (опційно зберігається локально).
cp .env.example .env # і встав туди токен від @BotFather
python bot.pyПокроковий діалог у чаті (URL → бал → пріоритет → бюджет/контракт), кнопки «Хто саме вище мене» / «Шанс на контракт» / «🔔 Стежити» / «📚 Порахувати по всіх пріоритетах». Напрям можна не тільки вставити лінком, а й обрати каскадно (область → ВНЗ → спеціальність, з пошуком серед сотень варіантів у великих ВНЗ). Налаштування, автостарт вдома (NSSM/Task Scheduler) і все інше — BOT.md.
Усі слова бота (привітання, підказки, жарти, підписи кнопок) — в окремому texts.toml, автоматично підвантажується при старті. Правиш формулювання — правиш лише цей файл, код чіпати не треба.
abit_parser/ рушій — уся логіка, спільна для CLI/GUI/бота
scraper.py, search.py, throttle.py, cache.py парсинг сайту, кеш із TTL, глобальний тротлінг
catalog.py, catalog_cache.py довідник область/ВНЗ/спеціальність для інтерактивного вибору в боті
parse.py, models.py HTML → типізовані поля
verdict.py, cross_analysis.py v1/v2 — вердикт по бюджету
contract_analysis.py v4 — шанс на контракт
estimate.py, format_text.py спільні формули меж/шансу і їх подача
summarize.py LLM-сумаризація (Gemini/Anthropic/офлайн)
engine.py єдина точка входу — run_analysis / run_contract_chance
cli.py CLI-обгортка над рушієм
main.py CLI, точка входу
gui.py GUI, точка входу
bot.py, bot_storage.py Telegram-бот, точка входу + персистентні підписки на стеження
texts.toml, bot_texts.py усі тексти бота окремо від коду (див. нижче)
GLOSSARY.md усі терміни й скорочення (БМmax, П, статуси v2/v4 тощо)
BOT.md налаштування й автостарт бота
PACKAGING.md збірка в exe (PyInstaller)
- Механіка «адресного розміщення за пріоритетами» описана за загальним розумінням системи, стабільним роками — деталі-2026 (коефіцієнти, квоти, точний сенс БМmin) не звірені з офіційними правилами.
- Вильоти по пріоритету рахуються одноходово (без рекурсії) — свідоме спрощення заради кількості мережевих запитів.
- Квоти позначаються, але не аналізуються на вихід/невихід.
P_LIKELY(0.5) — калібрована вручну, не звірена з реальними результатами вступу константа. Свідомо занижена, щоб «очікуваний» шанс радше не вводив в оману в бік оптимізму.- Дані з abit-poisk.org.ua публічні; тула поважає сайт — браузерний User-Agent, глобальний тротлінг 1-3с, кеш з TTL, жодних масових паралельних запитів.