Полное руководство по решению — по одному разделу на каждую роль. Ссылка на нужный раздел уже лежит в задаче Битрикс24, которая вам пришла — переходить никуда специально не нужно.
Раньше преподаватель переносил данные по ученику из AlfaCRM в бланк руками и сам делал PDF. Теперь данные подтягиваются сами, преподаватель пишет только комментарий и утверждает отчёт — дальше PDF, задача менеджеру, ссылка родителю и статусы формируются автоматически. Один отчёт собирается на предмет, но родителю и менеджеру он приходит объединённым — один на ребёнка со всеми предметами сразу, потому что в среднем у ребёнка 2–3 предмета одновременно.
У решения нет общего входа и нет привязки к порталу Битрикс24: у каждого — преподавателя, менеджера, руководителя — своя персональная ссылка, которая приходит прямо в тексте задачи Битрикс24. Открыли задачу → нажали на ссылку → сразу в своём разделе, ничего вводить не нужно. Ссылка длинная и не угадывается — это и есть ключ доступа, поэтому пересылать её посторонним не стоит: тот, у кого есть ссылка, видит ровно то, что видел бы владелец задачи.
Статусы одинаковы в кабинете преподавателя, менеджера и в сводке руководителя. Последний ставится сам, когда менеджер отмечает отправку — задача на этого ребёнка закрывается вместе с ним.
ПРЕПОДАВАТЕЛЬ
В Битрикс24 16-го числа приходит задача «Отчёты по ученикам за <месяц>» со сроком до 21-го, 15:00. В её описании — персональная ссылка на ваш список учеников. Откройте её — попадёте сразу в свой кабинет, ничего вводить не нужно. Сохраните задачу — по ней вернётесь в кабинет в любой момент.
Наверху — полоса прогресса: сколько отчётов утверждено из скольких. Ниже карточки учеников: имя, предмет и группа, посещаемость и статус. Кнопка справа открывает карточку — надпись на ней меняется по статусу («Заполнить», «Продолжить», «Открыть»).
Всё, что можно было взять из AlfaCRM, уже подставлено. Поля сгруппированы:
| Блок | Что внутри | Откуда |
|---|---|---|
| Ученик и курс | предмет, группа, экзамен | AlfaCRM; группа — название реальной группы ученика |
| Баллы | входное тестирование, промежуточное, желаемый балл | входное и промежуточное подтягиваются из вкладки «Результаты тестов» карточки ученика; чего там нет — вводите руками |
| Посещаемость и вовлечённость | «3 из 3», домашние работы, активность | AlfaCRM, считается по занятиям месяца |
| Темы | пройденные темы (по одной в строке), следующая тема | AlfaCRM; «следующая» — вручную |
| Комментарий | ваш текст по ученику | заполняете вы |
| Подпись и рекомендации | от кого отчёт, блок рекомендаций | по умолчанию — вы и стандартный текст |
Любое поле можно поправить. Исправленное помечается словом «изменено» — наведите курсор, увидите, что было в AlfaCRM. Кнопка ↺ рядом возвращает исходное значение. Ваши правки не потеряются при следующей ежемесячной сборке.
Прочерк «—» означает, что данных нет в CRM: тема занятия не записана, оценка не выставлена, поля с баллами не заведены. Можно вписать значение руками, можно оставить прочерк — отчёт сформируется в любом случае.
Подпись. Обычно отчёт выходит за подписью преподавателя, с его фотографией. Если ученика вели не вы или преподаватель уже не работает — переключите подпись на «Академический директор», заголовок блока, ФИО, должность и фото поменяются сами.
В карточке появляется зелёная плашка «Отчёт утверждён» и кнопка «⬇ Скачать PDF». Когда у ребёнка утверждены отчёты по всем предметам — менеджеру автоматически появляется задача на отправку именно этого ребёнка. Пока хоть один ваш предмет не утверждён — ребёнок числится у менеджера как «ждём именно вас». Утвердите отчёты по всем своим ученикам — ваша задача в Битрикс24 закроется автоматически, отдельно закрывать её не нужно.
Отчёты собираются только по групповым курсам (ОГЭ, ЕГЭ, средние классы) — ученики частной школы в систему не попадают, даже если их ведёте те же вы. В списке будут только ваши курсовые ученики.
Ошибся в утверждённом отчёте — что делать?
Напишите администратору решения: отчёт можно вернуть в работу, но только на нашей стороне. Если отчёт уже ушёл родителю — сначала предупредите менеджера.
Пропала ссылка на кабинет.
Она в задаче Битрикс24 «Отчёты по ученикам за <месяц>» — найдите задачу в своих задачах Битрикс24. Не нашли — попросите ссылку у администратора решения.
В списке не все мои ученики.
Отчёты формируются только по групповым курсам. Ученики частной школы и тьюторства в систему не попадают. Не хватает ученика с группового курса — сообщите: значит, в AlfaCRM за месяц по нему нет проведённых занятий.
Можно заполнять с телефона?
Да, кабинет открывается в мобильном браузере. Длинный комментарий удобнее писать с компьютера.
МЕНЕДЖЕР
21-го числа приходит одна общая задача «Отправка родителям — <месяц>» со ссылкой на ваш кабинет — там все ученики, закреплённые за вами в AlfaCRM на этот месяц. Дальше по каждому ребёнку, как только преподаватели утвердят отчёты по всем его предметам, там же появляется отдельная задача «Отправить отчёт родителям: <имя> — <месяц>» с готовым сводным отчётом и контактами родителя. Дедлайн — 25-е число, 20:00.
Откройте ссылку из общей задачи — увидите всех своих учеников за месяц (фильтр только по периоду):
Родитель говорит, что ссылка не открывается.
Проверьте, что скопирована целиком (она длинная). Ссылка на отчёт для родителя бессрочная и работает без пароля на любом устройстве. Если не открывается у вас — сообщите администратору.
В отчёте ошибка, родителю такое отправлять нельзя.
Не отмечайте отправку. Напишите преподавателю нужного предмета и администратору — отчёт вернут в работу и перевыпустят.
Почему по одному ребёнку не хватает предмета в общем отчёте.
Значит, у этого предмета преподаватель ещё не утвердил отчёт — в кабинете рядом с этим ребёнком написано, кого именно ждать.
Пропала общая задача с кабинетом.
Найдите в своих задачах Битрикс24 «Отправка родителям — <месяц>». Не нашли — попросите ссылку у администратора решения.
РУКОВОДИТЕЛЬ
Ссылка на сводку приходит в задаче-сводке (по факту завершения месяца) или выдаётся администратором решения напрямую — она секретная и постоянная, можно сохранить и открывать в любой момент, не дожидаясь новой задачи. Что на странице:
Когда месяц закрыт — все отчёты периода отправлены родителям — ставится задача-сводка с итогами и приходит уведомление в Битрикс24.
| Что видно | Что это значит | Действие |
|---|---|---|
| У преподавателя всё «Не заполнен» через несколько дней после 16-го числа | не открывал кабинет | напомнить, ссылка — в его задаче, дедлайн 21-го 15:00 |
| Много «● Сохранён» | заполнил, но не утвердил — родителям ничего не ушло | попросить утвердить |
| «✓ Утверждён» долго не переходит в «✉ Отправлен» | не утверждены все предметы ребёнка, либо менеджер не отправил | посмотреть в кабинете менеджера, кого именно ждут; дедлайн менеджера 25-го 20:00 |
| В отчётах много прочерков | преподаватели не заполняют темы и оценки в AlfaCRM | вопрос к учебной части, не к системе |
АДМИНИСТРАТОР РЕШЕНИЯ Тюнинг бизнеса
По ссылкам «Все преподаватели» и «Все менеджеры» (выдаются администратором решения отдельно, той же секретностью, что и сводка) можно открыть кабинет любого преподавателя или менеджера в режиме просмотра — ровно как видит его сам владелец. Полезно, чтобы проверить, что у конкретного человека всё корректно отображается, не прося его самого зайти и показать экран. Преподаватель без учётки в Битрикс24 помечен как «нет учётки в портале» — такому задачи ставить некуда, пока клиент не заведёт ему аккаунт (тогда его учеников на время берёт на себя академический директор — так сделано для одного из преподавателей Эдукариума).
РОДИТЕЛЬ памятка для сотрудников
По ссылке открывается сводная страница отчёта по ребёнку — без пароля, на любом устройстве. Внутри — все предметы ребёнка за месяц одним отчётом в фирменном бланке Эдукариума: показатели, посещаемость, домашние работы, вовлечённость, пройденные темы, комментарии преподавателей с фотографиями и объединённый блок рекомендаций (повторы между предметами убраны). Сверху — кнопка «⬇ Скачать PDF». Ссылка постоянная, отчёт по ней доступен и позже.
Добрый день! Отчёт по обучению вашего ребёнка за <месяц> готов: <ссылка> Внутри — посещаемость, пройденные темы, комментарии преподавателей и рекомендации по всем предметам. Ссылка открывается без пароля, PDF можно скачать кнопкой вверху страницы. Будут вопросы — ответим. Образовательный центр «Эдукариум»
ТЕХ. АДМИНИСТРАТОР Тюнинг бизнеса
| Часть | Назначение |
|---|---|
| Сервис на Python (FastAPI + uvicorn), свой сервер | кабинеты, сборка отчётов, PDF, задачи в Битрикс24 |
| AlfaCRM v2api | источник данных, только чтение — в CRM ничего не пишем |
| Битрикс24 (через VibeCode REST) | задачи преподавателю, менеджеру и руководителю, PDF на Диск. Только создание/чтение задач по API-ключу — без входа сотрудников через портал: ключ используется как обычный REST-доступ, сервер приложения живёт отдельно |
| Хранилище | файл data/reports.json — отчёты, токены, статусы;
PDF в data/pdf/ |
| Шаблон отчёта | templates/report_edukarium.html — вёрстка бланка
отдельно от кода |
Сервис живёт на собственном сервере (VPS), не на платформе Битрикс24 — это сознательный
выбор: встроенные в портал приложения зависят от отдельной платформы-посредника и её тарифов,
а свой сервер даёт полный контроль (SSH, обычный systemd, без искусственных ограничений
по времени установки). Публичный адрес — домен клиента
(report.educarium.ru), сертификат TLS — Let's Encrypt, автопродление через certbot.
Приложение — systemd-сервис otchety под отдельным непривилегированным
пользователем, порт 8058, наружу — через nginx (reverse proxy + TLS).
Отдельного логина/пароля и входа через портал Битрикс24 в решении нет. У каждого кабинета —
преподавателя, менеджера, ребёнка (для родителя), сводки руководителя — свой непредсказуемый
токен в адресе. Ссылка приходит человеку в личной задаче Битрикс24 (создаётся через REST
по API-ключу VibeCode) или выдаётся администратором решения напрямую. Токен не индексируется
поисковиками (X-Robots-Tag: noindex), не утекает в Referer
(Referrer-Policy: no-referrer) и не подбирается перебором (128 бит энтропии).
| Адрес | Кому |
|---|---|
/ | краткая справка со ссылкой на инструкции — общего входа нет |
/t/<токен> | кабинет преподавателя: его ученики и статусы |
/t/<токен>/r/<id> | карточка отчёта: правка, предпросмотр, утверждение |
/m/<токен> | кабинет менеджера: ученики, готовность, контакты, кого ждать, отметка об отправке |
/dash/<ADMIN_TOKEN> | сводка руководителя, с фильтрами месяц/преподаватель/менеджер |
/admin/<ADMIN_TOKEN>/teachers,
/admin/<ADMIN_TOKEN>/managers |
список всех преподавателей / менеджеров с переходом в любой кабинет |
/p/<публичный токен> | страница отчёта по предмету для родителей + PDF |
/s/<токен> | сводный отчёт по ребёнку для родителей (все предметы) + PDF |
/reglament, /instrukcii | описание решения и эти инструкции |
/health | проверка живости: {"ok": true, "mode": "live"} |
/diag/<ADMIN_TOKEN> и подмаршруты |
служебная диагностика (только для нас): состояние данных, playwright, разовые починки данных |
16-го в 07:00 UTC (09:00 Калининград) cron → python -m app.scheduler → AlfaCRM: уроки месяца, ученики, посещаемость, темы, оценки → черновики отчётов в data/reports.json (ручные правки сохраняются) → задача каждому преподавателю со ссылкой на кабинет, дедлайн 21-е 15:00 21-го в 13:00 UTC (15:00 Калининград) cron → python -m app.scheduler --manager → каждому менеджеру с закреплёнными учениками — общая задача-кабинет, дедлайн 25-е 20:00 → дальше по каждому ребёнку задачи ставятся сами, по мере готовности всех предметов по завершении → задача-сводка руководителю
Пересобрать конкретный период вручную (build-only, без рассылки задач):
ssh root@<сервер>
sudo -u otchety DATA_DIR=/var/lib/otchety MAPPING_FILE=/opt/app/mapping.json \
/opt/app/.venv/bin/python -c "from app import scheduler; scheduler.build_reports('2026-09')"
Полный цикл с рассылкой (обычно — только по cron, руками — с осторожностью, это реальные задачи реальным людям):
sudo -u otchety DATA_DIR=/var/lib/otchety /opt/app/.venv/bin/python -m app.scheduler 2026-09 sudo -u otchety DATA_DIR=/var/lib/otchety /opt/app/.venv/bin/python -m app.scheduler --manager 2026-09
Перезапуск и состояние сервиса:
sudo systemctl restart otchety systemctl status otchety --no-pager journalctl -u otchety -n 50 --no-pager tail -f /var/lib/otchety/scheduler.log
Выкладка новой версии кода — rsync папок app/, templates/,
assets/, scripts/ в /opt/app/ (владелец — пользователь
otchety) и systemctl restart otchety. Секретов в код не кладём —
всё в /opt/app/.env на сервере.
.env)| Переменная | Что делает |
|---|---|
MODE | live — боевые данные, mock — демо без внешних систем |
BASE_URL | публичный адрес сервиса — https://report.educarium.ru |
ALFACRM_* | хост, e-mail, ключ v2api, филиал (у Эдукариума филиал 2) |
LESSON_TYPES | типы занятий, попадающие в отчёты (только групповые курсы) |
SKIP_GROUPS | группы, по которым отчёты не нужны — по вхождению
подстроки в название (например ЛК — летние лагеря) |
FIELD_ENTRY, FIELD_MIDTERM, FIELD_TARGET |
коды полей с баллами в AlfaCRM, если клиент их заведёт. Приоритет источников: кастомное поле карточки → вкладка «Результаты тестов» → ручной ввод преподавателя |
AGG_RULE, AGG_THRESHOLD |
как оценки за месяц сворачиваются в «Да/Нет» (сейчас: порог 60 % занятий) |
B24_TRANSPORT | vibecode — создание задач через
VibeCode REST по API-ключу клиента, без хостинга приложения на их платформе;
webhook / off — альтернативы |
USE_REAL_MANAGER | 1 — задача на отправку идёт
реальному менеджеру ученика из AlfaCRM (customer.assigned_id) |
TZ_OFFSET, TEACHER_START_DAY/HOUR,
TEACHER_DEADLINE_DAY/HOUR, MANAGER_START_DAY/HOUR,
MANAGER_DEADLINE_DAY/HOUR |
четыре точки месячного цикла. У Эдукариума: 16 09:00 → 21 15:00 → 21 15:00 → 25 20:00, часовой пояс +02:00 |
B24_TEACHER_TASK_CREATOR, B24_MANAGER_TASK_CREATOR,
B24_DASH_TASK_CREATOR |
кто числится постановщиком задач преподавателю / менеджеру / руководителю |
B24_DIRECTOR_ID, B24_AUDITORS |
ответственный и наблюдатели по итоговой задаче-сводке |
ADMIN_TOKEN | секретная часть сводки руководителя и служебных
/admin/…, /diag/… маршрутов |
REPORT_TEMPLATE | файл вёрстки отчёта |
Вёрстка лежит в отдельном HTML, код её не знает. Чтобы поставить новую форму — заменить файл,
сохранив подстановки {{ключ}}: student_name, group, subject, exam, entry,
target, period_label, attendance, hw, active, next_theme, themes_html, comment_html,
teacher_name, formed_at. Python править не нужно. Фотографии преподавателей и логотип
переносятся из присланного бланка скриптом:
.venv/bin/python scripts/import_blank_assets.py <новый-бланк.html>
Фото кладутся в assets/photos/<id преподавателя в AlfaCRM>.jpg и вшиваются
в PDF. Нет фото — в отчёте рисуются инициалы в круге.
Строится автоматически по e-mail и ФИО, несовпадения дописываются вручную в
mapping.json (by_teacher_id/by_email/by_name
для преподавателей, managers_by_user_id для менеджеров). Если преподаватель или
менеджер не получил задачу, а отчёты у него есть — проверить это соответствие в первую очередь.
Сопоставление обязательно должно учитывать e-mail — без него часть людей находится только
по ФИО и может ошибиться.
| Симптом | Где смотреть |
|---|---|
| Кабинет отдаёт «Кабинет не найден» | токен устарел после пересборки периода — взять актуальную ссылку из свежей задачи |
| Не сформировался PDF при утверждении | journalctl -u otchety, строка [pdf]; на новом сервере
проверить playwright и Chromium: /opt/app/.venv/bin/playwright install
--with-deps chromium |
| Задача менеджеру/преподавателю не создалась | лог планировщика, строка [b24]: истёк ключ VibeCode или нет прав
на задачи; также проверить соответствие в mapping.json |
| Статус не переходит в «Отправлен» | не все предметы ребёнка утверждены (см. «ждём» в кабинете менеджера), либо отправка в кабинете не отмечена |
| Ученик не попал в отчёты | нет проведённых занятий за месяц, либо тип занятия не входит в LESSON_TYPES |