Уведомления
Назначение
Раздел описывает, как система сообщает пользователю о событиях: успехах операций, ошибках, срочных запросах от коллег, изменениях статусов. Уведомления — это «нервная система» продукта: они связывают веб-интерфейс мастера и приложение OCULUS оператора в реальном времени, превращают разрозненные действия в общий рабочий процесс смены.
Кто работает с модулем
- Мастер и администратор в веб-интерфейсе — получают всплывающие сообщения (тосты) о результате каждого действия (создал, обновил, удалил, ошибся), видят журнал аудита для истории.
- Оператор в приложении OCULUS — получает push-уведомления о критичных событиях (запрос помощи, изменения статуса задания, завершение простоя) и локальные алерты при нахождении в приложении.
- Помощники задания — получают уведомления при приглашении, подтверждении, отказе и освобождении от задания.
Типы уведомлений
| Тип | Где появляется | Когда |
|---|---|---|
| Тост (всплывающее) | Веб-интерфейс, нижний правый угол | После каждого действия пользователя — успех, ошибка, предупреждение |
| Диалог подтверждения | Веб-интерфейс, центр экрана | Перед деструктивными действиями (удаление, отмена) |
| Информационный баннер | Веб-интерфейс, шапка страницы | Состояние сети, обновления приложения |
| Push-уведомление | На устройство пользователя (даже когда приложение свёрнуто) | Запрос помощи, освобождение помощника, завершение простоя |
| Локальное уведомление в OCULUS | Внутри открытого приложения | Завершение простоя, статус задания |
| Реалтайм-обновление экрана | Любой интерфейс | Когда другой пользователь меняет данные, которые видны текущему |
| Запись в журнале аудита | Раздел «Безопасность → Журнал аудита» | После критичных операций для истории |
Тосты в веб-интерфейсе
- Цвет соответствует типу: зелёный — успех, красный — ошибка, оранжевый — предупреждение, синий — информация.
- Иконка усиливает цветовое сообщение: галочка, восклицание, информация.
- Позиция — нижний правый угол экрана, чтобы не перекрывать основной контент.
- Стек — несколько тостов одновременно расставляются вертикально с зазором, более новые сверху.
- Закрытие — автоматическое через несколько секунд или вручную крестиком.
- Текст — короткое заглавие плюс опциональное пояснение помельче. Пример: «Задание создано» / «JOB-00231 добавлено в смену А».
- Без действий — тост не предлагает кнопок. Если нужно подтверждение или отмена — открывается отдельный диалог.
Тосты не сохраняются между сессиями. Если пользователь упустил тост, его содержание не теряется только в части критичных операций — для них есть параллельный след в журнале аудита.
Push-уведомления в приложении OCULUS
Push приходит на устройство оператора независимо от того, открыто приложение или нет. Это сигнал на критичное событие, которое требует внимания «прямо сейчас».
Когда приходит push:
- Запрос помощи. Главный исполнитель просит помощника подключиться к заданию.
- Подтверждение или отказ. Помощник получает ответ на свой запрос участия.
- Освобождение от задания. Завершилось задание, в котором участвовал помощник — он освободился для следующих задач.
- Завершение простоя. Локальное уведомление оператору, что простой закрыт и можно продолжать работу.
Что в самом push:
Текст уведомления намеренно общий — «Новое уведомление. Откройте OCULUS для просмотра деталей». Это политика безопасности: персональные данные и конкретику задач не раскрывают на экране блокировки устройства, особенно если телефон на проходной увидит посторонний. Полная информация о событии подгружается, когда оператор открывает приложение.
Доставка:
- При активном приложении — мгновенная синхронизация через постоянное соединение, экран обновляется без push.
- При свёрнутом или закрытом приложении — push через системный канал устройства, со звуком и вибрацией по системным настройкам.
- При отключённой связи — событие догонит при восстановлении сети.
События, генерирующие уведомления
- Создание, обновление, удаление любой сущности в веб-интерфейсе. Тост-успех или тост-ошибка для текущего пользователя.
- Запуск, пауза, завершение задания. Реалтайм-обновление экрана у мастера; для помощников — push при подтверждении и освобождении.
- Запуск и завершение простоя. Реалтайм-обновление в карточке задания; локальное уведомление оператору при автоматическом завершении.
- Запуск автоматического обращения от простоя (см. модуль 20). Заявка появляется у назначенного исполнителя без отдельного звонка.
- Изменение состава смены, перенос задания, корректировка выработки. Реалтайм-обновление у пользователей, которые сейчас смотрят затронутые экраны.
- Закрытие смены, расчёт зарплаты, классификация брака. Тосты-успехи в веб-интерфейсе у того, кто запустил.
Управление уведомлениями
- Отключение категорий push в текущей версии не реализовано — пользователь получает все push, для которых существует подписка.
- Глобальное отключение push возможно через стандартные настройки устройства (запретить уведомления приложению OCULUS на уровне операционной системы).
- Подписка инициализируется автоматически при первом входе в приложение; пользователь даёт системное разрешение, и устройство регистрируется как получатель push.
- «Мёртвая» подписка (пользователь сменил устройство, удалил приложение) автоматически очищается на стороне сервера при первой же неудачной доставке — push не накапливаются впустую.
История и журнал аудита
- В веб-интерфейсе раздел «Безопасность → Журнал аудита» содержит хронологический список критичных событий: создание/изменение пользователей, перевод периодов зарплаты в «закрыт», подписки и отписки на push-уведомления, изменение шаблонов расчёта.
- Журнал — для администратора и мастера: фильтры по дате, пользователю, типу действия, сущности.
- Для каждой записи видны старое и новое значения — разбор спорных ситуаций становится прозрачным.
- Записи журнала экспортируются в табличный файл.
Отдельной «ленты непрочитанных уведомлений» в продукте нет. Каждое уведомление по сути одноразовое: либо сразу обработано (push), либо имеет след в истории сущности (изменения видны в карточке), либо в журнале аудита (для критичных операций).
Микро-фичи и детали интерфейса
- Тосты ставятся в нижнем правом углу — самой малозаметной зоне экрана. Это подсказка, не блокирующее окно.
- Цвет иконки тоста дублирует цвет рамки — двойная сигнализация типа уведомления для пользователей с особенностями восприятия цвета.
- Тост можно закрыть до автоисчезновения, нажав крестик. Несколько тостов закрываются по одному, самый новый сверху.
- Push-уведомления намеренно используют обобщённую формулировку («Новое уведомление, откройте OCULUS») — критичная информация не остаётся на экране блокировки, где её могут увидеть посторонние.
- Push не дублирует Socket-обновления, если приложение открыто, — на одно событие приходит только один сигнал.
- Реалтайм-обновления экрана работают автоматически: если мастер в одной вкладке закрыл задание, а коллега в другой смотрит то же задание — у коллеги статус обновится без перезагрузки.
- Системные настройки устройства имеют приоритет: если пользователь отключил уведомления для приложения OCULUS на уровне системы, push не будут приходить, и приложение не пытается «обходить» это ограничение.
- Подписка на push автоматически очищается, если устройство потеряно или приложение удалено — сервер не накапливает «мёртвых» получателей.
- Журнал аудита разделяет критичные финансовые операции (закрытие зарплатного периода, изменение ставок) и обычные действия — финансовые помечены отдельным маркером для удобства проверки.
- Звук и вибрация push определяются системными настройками устройства — приложение OCULUS не «звенит громче», если общий звук отключён.
- Подавление дубликатов на уровне push: одинаковые события не сыплются стопкой — приходит один сигнал на одно действие.
- Аудит фиксирует подписку и отписку на push отдельным событием — администратор видит, кто и когда подключал свои устройства.
Связи с другими модулями
- Задания (06). Запрос помощи, подтверждение, отказ, освобождение помощника — все эти события генерируют push в OCULUS. Завершение задания закрывает связку «исполнитель + помощники».
- Простои (08). Завершение простоя приводит к локальному уведомлению оператору. Старт простоя автоматически создаёт обращение (см. ниже) с собственным потоком уведомлений.
- Обращения (20). Каждое автоматическое обращение, рождённое из простоя, оповещает назначенного исполнителя — ремонтник видит заявку без звонка.
- Зарплата (11). Перевод периода в «закрыт» и переоткрытие фиксируются в журнале аудита как финансовые операции.
- Пользователи (03). Подписка устройства на push привязана к пользователю — при удалении пользователя подписка остаётся в архиве для аудита.
- Аутентификация (01). Сброс пароля администратором аннулирует все активные сессии пользователя — при следующем действии он увидит просьбу войти заново.
Состояния и пограничные случаи
- Нет связи на устройстве оператора. Push-уведомления догонят при восстановлении сети. Реалтайм-обновления возобновятся автоматически, без действия пользователя.
- Push не доставлен. Сервер пытается отправить, при ошибке записывает в журнал, но не блокирует основное действие. Если устройство больше не отвечает — подписка очищается.
- Пользователь отключил уведомления на уровне устройства. Приложение фиксирует это и не пытается обойти ограничение. Тосты внутри открытого приложения продолжают работать, потому что они не зависят от системных разрешений.
- Несколько устройств у одного пользователя. Каждое устройство имеет свою подписку — push приходят на все одновременно. Пользователь сам решает, какое из них держать активным.
- Удалённое приложение. Подписка остаётся в системе до первой неудачной доставки, после чего автоматически очищается.
- Тост перекрылся другим тостом. Стек ставит более новый сверху; пользователь видит оба и закрывает по очереди.
- Спам (теоретический случай). Подавление дубликатов работает на уровне событий: одна и та же операция не порождает двух одинаковых push.
- Удалённый пользователь. Получит ли он push? Нет — его сессии аннулированы, и устройства не получают новых сигналов.
Операторский интерфейс OCULUS
- Push в OCULUS — основной канал связи мастера с оператором между сменами и при критичных событиях.
- При активном приложении приоритет получают реалтайм-обновления через постоянное соединение: экран меняется сам, без видимых уведомлений.
- При свёрнутом приложении или закрытом устройстве push приходит на системный уровень с обобщённым текстом — детали оператор увидит после открытия.
- Локальные уведомления внутри приложения сообщают о собственных событиях оператора (его простой завершён, его задание изменилось) — это короткие подсказки, не блокирующие действия.
- Звук, вибрация и поведение на экране блокировки задаются системными настройками устройства — оператор сам контролирует громкость и тишину.
- Нет «отдельного экрана уведомлений» внутри OCULUS — приложение спроектировано вокруг текущей задачи. История событий оператора видна в его профиле и в карточках связанных заданий и обращений.