# AWatch-rus Portal: рабочий кабинет

Дата: 2026-06-04

## Цель изменения

Портал переведен из технической "админки логов" в рабочий кабинет для трех ролей:

- руководитель: управленческая сводка, показатели активности, отклонения, отчеты;
- ИБ: риск-срез, проверки данных, состояние контрольных сигналов;
- расследователь: карточки инцидентов, материалы проверки, хеши и выгрузка материалов.

## Что изменено

- Верхняя панель переименована в `AWatch-rus Активность / Риски / Расследования`.
- Интерфейс переведен в промышленную компоновку:
  - темный левый sidebar;
  - светлая аналитическая рабочая область;
  - верхняя панель периода, подразделения и экспорта;
  - compact B2B/SOC карточки и таблицы.
- Добавлены элементы отчета: период, подразделение, формирование отчета, экспорт Markdown/PDF/JSON, статус сбора данных.
- Навигация приведена к продуктовой модели:
  - `Обзор`;
  - `Сотрудники`;
  - `Подразделения`;
  - `Риски`;
  - `Расследования`;
  - `Сетевой периметр`;
  - `Отчеты`.
  - `Настройки`.
- Главный экран `Пульс организации` содержит Executive Dashboard для утреннего просмотра руководителем:
  - сотрудников в работе сегодня;
  - средний индекс активности;
  - WARN подразделений;
  - FAIL подразделений;
  - критических рисков;
  - недельный тренд активности.
- Главный аналитический блок содержит:
  - `ТОП-5 лучших подразделений`;
  - `ТОП-5 проблемных подразделений`;
  - блок `Требует внимания` с форматом: заголовок проблемы, почему это важно, что проверить, рекомендуемое действие;
  - широкую таблицу `Подразделения сегодня` с колонками: подразделение, индекс активности, отклонение, статус, ответственный;
  - блок `Аномалии` с объяснением: что произошло, почему это риск, что проверить;
  - блок `Топ рисков` с read-only переходом к расследованиям.
  - `Heat Map подразделений` с колонками: подразделение, активность, отклонение, риск, ответственный, действие;
  - read-only карточку руководителя подразделения.
- Раздел `Настройки` работает только на чтение и показывает: период расчета, рабочий день, пороги WARN/FAIL, источник правил, дату последнего пересчета.
- Добавлены отдельные промышленные представления:
  - экран подразделений: рейтинг групп, ответственные, просадки и отклонения;
  - экран сотрудников: карточка сотрудника, активность, сессии, плановое время, последнее событие;
  - экран сетевого периметра: режим наблюдения без управления сетевыми правилами.
- Селектор периода подключен к интерфейсу:
  - `Сегодня` показывает текущий дневной срез;
  - `Неделя` и `Месяц` пересчитывают управленческие карточки по накопленной истории тренда;
  - если истории недостаточно, портал явно показывает `накоплено N/M дней`;
  - детальные дневные экраны маркируются плашкой `дневная детализация`.
- Первый экран показывает executive summary:
  - какие подразделения работают нормально;
  - где падает активность;
  - где есть риск;
  - что проверить;
  - кому поручить разбор;
  - куда открыть расследование без автоматического воздействия.
- Блок работы сотрудников показывает загрузку, простои, перегруз, приложения, объяснение индекса и проверку правил.
- Блок рисков использует темную тему и выводит риск/ИБ-срез без автоматического воздействия на сеть.
- Блок расследований показывает инциденты, материалы, скриншоты, хеши и ссылки на выгрузку.
- Отчеты дополнены типами: ежедневный, недельный, месячный, по подразделению, по сотруднику, по инциденту, акт пилота.

## Важные ограничения

- Фильтр периода влияет на управленческие представления портала. Фильтры подразделения и ответственного пока являются UI-контролами; backend-фильтрация должна добавляться отдельным изменением.
- `Индекс активности` остается расчетной метрикой: активное время / плановое время. Взвешенный показатель объясняется отдельно через правила ролей и приложений.
- Разделы рисков и расследований показывают риск-срез и материалы проверки. Это не заявляется как сертифицированная СЗИ.
- Раздел сетевого периметра работает как витрина наблюдения. Он не меняет правила сети и не выполняет блокировки.
- pfSense и сетевой периметр этим изменением не затрагивались.

## Проверки

Локальные проверки:

```bash
export CARGO_TARGET_DIR=/tmp/detmir-adk-rust-target
node --check adk-rust/crates/detmir-portal/src/static/app.js
git diff --check
cargo test --manifest-path adk-rust/Cargo.toml -p detmir-portal
cargo clippy --manifest-path adk-rust/Cargo.toml --all-targets --all-features -- -D warnings
cargo build --release --manifest-path adk-rust/Cargo.toml -p detmir-portal
```

Боевые проверки после деплоя:

- `detmir-portal.service`: active;
- `nginx`: active;
- `detmir-portal-evidence.service`: active;
- `/portal/`: HTTP 200;
- `/portal/api/summary`: HTTP 200;
- `/portal/api/operator`: HTTP 200;
- `/portal/api/manager`: HTTP 200;
- `/portal/api/owner`: HTTP 200;
- `/portal/api/incidents`: HTTP 200;
- `/portal/api/reports`: HTTP 200;
- `/portal/api/readiness/bundle`: HTTP 200;
- `/portal/api/workforce/policy/explain`: HTTP 200;
- `/portal/api/dlp/evidence`: HTTP 200.

Playwright smoke:

- заголовок страницы: `AWatch-rus Portal`;
- вкладки `Обзор`, `Сотрудники`, `Подразделения`, `Риски`, `Расследования`, `Сетевой периметр`, `Отчеты`, `Настройки` открываются;
- JS-ошибок нет;
- API-ответов с кодом 400+ нет;
- раздел рисков включает темную тему.
- смена периода `Сегодня` -> `Неделя` меняет содержимое страницы и показывает плашку периода.
- `scripts/detmir-portal-tabs-smoke.mjs` проверяет все `data-tab`, наличие обработчиков в `app.js`, Executive Dashboard, строки read-only настроек и read-only переход из топ-рисков в расследования.
