Разработка мобильного приложения для электронной очереди
Человек взял талон в МФЦ, вышел на улицу, и пропустил вызов — потому что не слышал объявления. Вернулся, но его место уже занято следующим номером. Мобильное приложение для электронной очереди решает именно это: пользователь не обязан сидеть и смотреть на табло.
Логика очереди и real-time синхронизация
Очередь — это не просто список. Это состояние, которое меняется каждые 2–5 минут. Клиент должен видеть актуальную позицию без ручного обновления.
Два подхода к синхронизации:
WebSocket (предпочтительно): соединение открыто пока приложение активно. При вызове следующего номера сервер рассылает событие всем подключённым клиентам этой очереди. На Flutter — web_socket_channel, состояние в Riverpod StreamProvider или BLoC.
SSE (Server-Sent Events): проще в реализации на бэкенде, однонаправленный канал сервер → клиент. Подходит если нет двусторонней коммуникации.
Когда приложение переходит в background — WebSocket закрывается. Здесь включаются push-уведомления:
- «Осталось 3 человека перед вами» — предупреждение, приходите в отделение
- «Ваш номер следующий!» — пора идти к стойке
- «Вас вызывают к окну №5» — немедленное уведомление
Логика триггеров на сервере: при каждом вызове следующего номера сервер считает позицию каждого ожидающего в очереди и отправляет персонализированные push тем, у кого осталось 3, 1 позиция.
Регистрация в очереди
Пользователь выбирает услугу → система показывает текущую загрузку (среднее время ожидания) → подтверждает запись → получает номер талона и позицию.
Среднее время ожидания — расчётная метрика: avg(service_duration_last_N) * position. Сервис рассчитывается из истории обращений, хранится в PostgreSQL, обновляется скользящим средним.
QR-код талона для идентификации на стойке без ввода номера — qr_flutter на Flutter, генерируется на устройстве из строки идентификатора.
Кабинет администратора (оператора)
Оператор на стойке видит список очереди и вызывает следующего через планшет или ПК-интерфейс. Вызов через API → сервер обновляет очередь → push клиенту.
Администратор настраивает: количество активных окон, типы услуг, рабочие часы, приоритетные категории (пенсионеры, инвалиды). Эти настройки влияют на алгоритм выдачи талонов.
Предзапись и интеграция с расписанием
Продвинутый сценарий: пользователь записывается на конкретное время, а не просто берёт талон. Тогда за 30 минут до записи приходит reminder push, за 10 минут — «выходите сейчас».
Реализация через серверный планировщик (Bull Queue): при создании записи задачи ставятся в очередь с delayed timing.
Стек и сроки
Backend: Node.js + PostgreSQL + Redis (для real-time состояния очереди в памяти) + Bull (планировщик push).
Mobile: Flutter (iOS + Android) или React Native.
| Масштаб | Сроки |
|---|---|
| MVP: талон, позиция, push | 4–6 недель |
| + Предзапись, кабинет оператора | 8–10 недель |
| + Аналитика, мультиофис, интеграция с МФЦ | 14–16 недель |







