Разработка мобильного приложения для электронного журнала (школа)
Родитель узнал о двойке ребёнка за контрольную в пятницу вечером — через мессенджер другого родителя. Электронный журнал отправил уведомление в почту, которую никто не читает. Мобильное приложение с push — единственный канал, который работает в реальном времени.
Три роли и три разных приложения в одном
Электронный журнал обслуживает принципиально разные пользователи: учитель (вводит оценки, ведёт журнал посещаемости), родитель (следит за успеваемостью, получает уведомления), ученик (видит расписание, домашние задания). Одно приложение с разными интерфейсами по роли — правильная архитектура.
RBAC (Role-Based Access Control) на уровне API: запрос с токеном учителя не может получить данные другого класса, токен родителя — только данные своих детей. Реализуется через Spatie Permissions (Laravel) или middleware на Node.js.
Push-уведомления по ролям
Родитель получает:
- «Новая оценка: Математика, 5 (отлично)» — немедленно при выставлении учителем
- «Пропуск: Иванов Д. отсутствовал на 3 уроках сегодня»
- «Новое домашнее задание по физике на завтра»
- «Родительское собрание 25 апреля в 18:00» — напоминание за день
Ученик получает:
- «Домашнее задание по биологии добавлено»
- «Расписание на завтра изменено: физкультура отменена»
- «Контрольная работа по алгебре послезавтра»
Учитель получает:
- «Родитель запрашивает встречу»
- «Замена: вы ведёте 5Б в четверг вместо болеющего Петрова»
Каждый тип уведомления — отдельный FCM notification channel на Android (пользователь настраивает каждый независимо) и отдельная UNNotificationCategory на iOS.
Выставление оценок: real-time и оффлайн
Учитель на уроке выставляет оценки — связь может быть слабой. Optimistic UI: оценка сразу отображается в интерфейсе, синхронизируется в фоне. При ошибке сети — локальная очередь (Hive/Isar), синхронизация при восстановлении.
Push родителю отправляется только после успешной синхронизации с сервером — не при локальном сохранении. Это важно: не должно быть ситуации «уведомление пришло, оценка не сохранилась».
Балльная система настраивается: стандартная 5-балльная, 12-балльная (Украина), 100-балльная, буквенная (A/B/C). Тип системы — настройка школы, не хардкод.
Расписание и его изменения
Расписание — источник наибольшего количества уведомлений. Замены учителей, перенос уроков, актированные дни — всё это must-have для уведомлений.
Расписание хранится как базовое (на учебный год) + патчи (отдельные изменения). При применении патча сервер рассчитывает diff и рассылает уведомления только затронутым классам/ученикам.
На клиенте расписание отображается через TableCalendar с кастомным рендером ячеек (каждый урок — отдельный виджет с предметом, учителем, кабинетом).
Домашние задания с вложениями
Учитель прикрепляет файлы (PDF, фото с доской, ссылку на видео). Просмотр в приложении через встроенный viewer или url_launcher для внешних ссылок.
Ученик может отмечать домашнее задание как выполненное — это помогает родителям контролировать без назойливых вопросов «ты сделал уроки?». Статус задания виден в родительском интерфейсе.
Данные детей и 152-ФЗ
Приложение работает с персональными данными несовершеннолетних — это усиленные требования по 152-ФЗ. Данные хранятся на серверах в РФ, персональные данные зашифрованы, доступ только авторизованным пользователям. Согласие на обработку собирается при регистрации родителя.
Интеграция с государственными системами
В России школы работают с ЭПОС.Школа, «Сетевой город» или региональными системами. Интеграция через REST/SOAP API этих систем или импорт/экспорт данных — зависит от требований конкретного заказчика.
Сроки
| Масштаб | Срок |
|---|---|
| MVP: оценки, расписание, push | 10–12 недель |
| + Домашние задания, посещаемость, чат | 16–20 недель |
| + Интеграция с ЭПОС.Школа / «Сетевой город» | +6–8 недель |







