✦RLT.Hack — 5 место✦Хакатон Московского транспорта — 3 место, 200 000 ₽✦КосмоХакатон 2026 · финал — финалисты✦КосмоХакатон 2026 — 3 место, 100 000 ₽✦Хакатон MAX — итоги ещё не объявили✦Sber × AIRI — не в призах✦AIOS — не в призах✦Ozon Hackathon — не в призах✦наберите «восторг» на клавиатуре
← все проекты
NDV-004

Первые 90 дней иностранного студента

Бот в MAX ведёт иностранного первокурсника через обязательные процедуры первых 90 дней.

итоги ещё не объявили
Хакатон
Хакатон MAX
Организатор
MAX
Даты
15–25 сен 2026
Коммитов
152
Стекбот MAXмини-приложениеPostgreSQLDocker
недо-

На хакатоне MAX нам не хватило юриста

Боевой режим ждёт юридической вычитки норм; до неё все правила помечены черновиком, и тест следит, чтобы так и оставалось.

Кто был в этот раз4 человека, есть новенькие

Состав: Ivan Banan, IR6, m1x, Chichetin. Впервые с нами: Chichetin.

Кейс

Трек «Забота о людях» от Минобрнауки и MAX: сделать чат-бота или мини-приложение в MAX для человека, которому нужны госуслуги. Конкретную проблему команда выбирала сама.

Мы взяли иностранного первокурсника. Он приехал учиться больше чем на 90 дней и обязан пройти медосвидетельствование и дактилоскопию. Сроки разные, считаются от даты въезда и поменялись 1 сентября 2026 года — ровно к заезду. Хуже всего, что источники спорят друг с другом. У КФУ две страницы одного университета дают разные сроки, а ИТМО и МГПУ склеивают две нормы в одну. Кто поверит, что на медосвидетельствование есть 90 дней, пропустит 30-дневный срок.

Что сдали

Бот в MAX спрашивает гражданство и дату въезда и строит личный план. Режим демонстрационный: сообщения помечены «ДЕМО», данные только учебные. Пилотный сценарий — совершеннолетний первокурсник в общежитии КФУ. Основной путь вручную пройден в мобильной и веб-версии MAX.

  • Карточка процедуры: чек-лист документов, источник нормы с датой сверки, кнопка на текст закона.
  • Напоминания и файл для календаря телефона. Календарь напомнит, даже если бот замьючен.
  • «Не получилось»: готовый вопрос вузу с процедурой, сроком и датой въезда. Копируется одним нажатием, отправляет студент сам.
  • QR-плакат вуза: сканируешь код — бот открывается в сценарии своего вуза.
  • Мини-приложение с планом целиком. В браузере пройдено от старта до финала.

Как устроено

  • Один процесс на Node.js и TypeScript, официальный SDK MAX, база PostgreSQL, запуск одной командой Docker Compose.
  • Диалог — чистая функция: на входе сессия и действие, на выходе новая сессия и ответ. Чат и мини-приложение зовут одну функцию, второго набора правил нет.
  • Webhook — адрес, куда MAX присылает события. Повтор того же события ничего не меняет, а «принято» MAX получает только после записи в базу.
  • Сообщения отправляет фоновая очередь: при сбое повторяет до восьми раз и переживает перезапуск.
  • Всё, что меняется при переносе, лежит в файлах данных, а не в коде: нормы со ссылками на закон, профили вузов, тексты интерфейса.

Цифры

  • 30 и 90 дней — сроки медосвидетельствования и дактилоскопии от одной даты въезда.
  • 4 языка: русский, английский, узбекский и китайский. Последние два — машинный перевод.
  • За 7, 3 и 1 день до срока приходят напоминания, в 09:00 по Москве. Плюс одно после срока, если процедура не отмечена.
  • 207 автотестов в 21 файле.
  • 25 секунд — сборка Docker-образа с чистой копии при лимите в 5 минут.

Что было трудно

Кейс про юридические сроки, а юриста у нас не нашлось. Каждую норму сверили с текстом закона и собрали вопросы для вычитки. Но закон местами читается двояко: входит ли день въезда в срок, прямо не сказано. Выбрали раннюю дату — прийти на день раньше ничего не стоит, на день позже рискованно. Все правила остаются черновиком, и боевой режим с ними не запустится. Отдельный тест следит, чтобы статус не сменили молча.

Платформа тоже удивила. Сертификат API MAX выпущен корневым центром Минцифры, которого Node не знает: бот получал сообщения, но ответить не мог. Сертификат положили в образ. На репетиции переезда с SQLite на PostgreSQL всплыло, что правка расчёта молча сдвинула бы даты у старых профилей. Теперь тест падает, если расчёт меняют без новой версии правил. А мини-приложение внутри MAX на момент последней проверки ещё не открывалось: его адрес регистрируется через форму организаторов.

код пока приватныйОткроем, когда перестанем стесняться
следующий · NDV-003ИБ-агент на маленькой локальной модели →