B21: терминология МЧС РБ — РЦУ РЧС / ОУМЧС / Г(Р)ОЧС

Правка Виктора: республиканский штаб → РЦУ РЧС; областное ЦОУ → ОУМЧС;
райЦОУ → Г(Р)ОЧС. cou_units → mchs_units (иерархия rcu → oblast →
gor_rayon); unit_id вместо cou_id; роли: admin=РЦУ РЧС,
coordinator=ОУМЧС, operator=Г(Р)ОЧС. Статус: план согласован (Виктор:
«в остальном согласен») — готов к E1.
This commit is contained in:
2026-09-09 21:00:19 +03:00
parent 3a986b0b7c
commit 15e7e27cb8
+22 -21
View File
@@ -968,8 +968,8 @@ sed -i 's/sar_mchs/vector_mchs/g; s#/root/sar-mchs#/root/vector#g' DEPLOY.md
- **Несколько поисков одновременно** — сегодня API работает с произвольным - **Несколько поисков одновременно** — сегодня API работает с произвольным
case_id, но UI предполагает «текущий поиск»: дашборд, карта, анализ case_id, но UI предполагает «текущий поиск»: дашборд, карта, анализ
привязаны к одному кейсу без понятия «операция». привязаны к одному кейсу без понятия «операция».
- **Много пользователей** — каждое ЦОУ (областное/районное) = аккаунты; - **Много пользователей** — каждое подразделение (ОУМЧС / Г(Р)ОЧС) = аккаунты;
республиканский штаб видит все поиски, ЦОУ — свои. РЦУ РЧС видит все поиски, подразделения — свои.
- **КОНТУР подключается к каждому поиску** — outbound-контракт B20 - **КОНТУР подключается к каждому поиску** — outbound-контракт B20
операционно: зоны по конкретной операции, не «в абстракт». операционно: зоны по конкретной операции, не «в абстракт».
@@ -986,8 +986,8 @@ search_operations:
title text -- «Поиск: Иванов П., Минский р-н» title text -- «Поиск: Иванов П., Минский р-н»
case_id fk → cases -- карточка (матмодель живёт в cases) case_id fk → cases -- карточка (матмодель живёт в cases)
status enum(planned, active, paused, completed, archived) status enum(planned, active, paused, completed, archived)
cou_id fk → cou_units -- ответственное ЦОУ unit_id fk → mchs_units -- ответственное подразделение (ОУМЧС/Г(Р)ОЧС)
contour_operation_id uuid null -- заполняется при первой отправке зон в КОНТУР contour_operation_id uuid null -- заполняется при первой отправке зон в КОНТУР
created_by fk → users created_by fk → users
created_at / updated_at / closed_at created_at / updated_at / closed_at
``` ```
@@ -997,14 +997,15 @@ search_operations:
— надстройка со статусом/владением/участниками. КОНТУР-маппинг: поле — надстройка со статусом/владением/участниками. КОНТУР-маппинг: поле
`contour_operation_id`, заполняется при первой отправке зон. `contour_operation_id`, заполняется при первой отправке зон.
**2.2 Пользователи и ЦОУ (RBAC по образцу РВС)** **2.2 Пользователи и подразделения (RBAC по образцу РВС)**
``` ```
cou_units: -- справочник ЦОУ mchs_units: -- справочник подразделений МЧС
id uuid PK, name, region (область), kind (oblast|raion|resp), parent_id null id uuid PK, name, region (область), kind (rcu|oblast|gor_rayon), parent_id null
-- РЦУ РЧС (kind=rcu) → ОУМЧС (oblast) → Г(Р)ОЧС (gor_rayon)
users (расширение существующей): users (расширение существующей):
+ cou_id fk → cou_units, null -- принадлежность ЦОУ (admin=null) + unit_id fk → mchs_units, null -- подразделение (у РЦУ РЧС-admin = null)
+ position text + position text
+ status enum(active, locked, disabled) + status enum(active, locked, disabled)
+ failed_login_count, locked_until, must_change_password + failed_login_count, locked_until, must_change_password
@@ -1018,25 +1019,25 @@ security_settings (password policy, lockout, timeouts)
``` ```
Роли (стартовые, is_system): Роли (стартовые, is_system):
- `admin` — республиканский штаб: все права, все операции - `admin` — РЦУ РЧС: все права, все операции
- `coordinator` — областное ЦОУ: все поиски своей области, управление - `coordinator` — ОУМЧС: все поиски своей области, управление
пользователями своих райЦОУ пользователями подчинённых Г(Р)ОЧС
- `operator` — районное ЦОУ: свои поиски (create/update) - `operator` — Г(Р)ОЧС: свои поиски (create/update)
- `observer` — только просмотр (старшие смены, аналитика) - `observer` — только просмотр (старшие смены, аналитика)
**2.2.1 Скоуп данных (отличие от РВС)** **2.2.1 Скоуп данных (отличие от РВС)**
К функциональным правам РВС добавляется **географический скоуп**: какие К функциональным правам РВС добавляется **географический скоуп**: какие
поиски видны. Фильтр по `cou_id ∈ {своё ЦОУ + подчинённые}` (дерево поиски видны. Фильтр по `unit_id ∈ {своё подразделение + подчинённые}` (дерево
cou_units); admin — без фильтра. Тот же скоуп в cases/analyze/water. mchs_units); admin (РЦУ РЧС) — без фильтра. Тот же скоуп в cases/analyze/water.
### 3. Мультипоиск в UI ### 3. Мультипоиск в UI
- **Дашборд «Активные поиски»** (главная после логина): карточки активных - **Дашборд «Активные поиски»** (главная после логина): карточки активных
операций (title, ЦОУ, elapsed, статус), фильтры по статусу/области, операций (title, подразделение, elapsed, статус), фильтры по статусу/области,
счётчики. Клик → рабочее пространство операции (`/op/{id}/…`). счётчики. Клик → рабочее пространство операции (`/op/{id}/…`).
- **Создание поиска** = CaseForm + шаг «операция» (title, ЦОУ — по умолчанию - **Создание поиска** = CaseForm + шаг «операция» (title, подразделение — по умолчанию
ЦОУ создателя). подразделение создателя).
- **Завершение**: статус completed + поля исхода (переезд из cases). - **Завершение**: статус completed + поля исхода (переезд из cases).
### 4. КОНТУР-интеграция (мультипоиск) ### 4. КОНТУР-интеграция (мультипоиск)
@@ -1052,7 +1053,7 @@ cou_units); admin — без фильтра. Тот же скоуп в cases/ana
| # | Этап | Состав | Зависимости | | # | Этап | Состав | Зависимости |
|---|------|--------|-------------| |---|------|--------|-------------|
| E1 | RBAC-ядро | cou_units, расширение users, роли/права, сессии, auth-журнал, seed; логин по пользователям, /me, смена пароля | паттерн РВС | | E1 | RBAC-ядро | mchs_units, расширение users, роли/права, сессии, auth-журнал, seed; логин по пользователям, /me, смена пароля | паттерн РВС |
| E2 | Скоуп и аудит | гео-скоуп в эндпоинтах, audit_events, security_settings, админ-панель пользователей (как РВС) | E1 | | E2 | Скоуп и аудит | гео-скоуп в эндпоинтах, audit_events, security_settings, админ-панель пользователей (как РВС) | E1 |
| E3 | Операции | search_operations + статусная машина, дашборд активных поисков, переключение | E1 | | E3 | Операции | search_operations + статусная машина, дашборд активных поисков, переключение | E1 |
| E4 | КОНТУР-мультипоиск | contour_operation_id, отправка зон, areas-checked на карте | E3 | | E4 | КОНТУР-мультипоиск | contour_operation_id, отправка зон, areas-checked на карте | E3 |
@@ -1060,15 +1061,15 @@ cou_units); admin — без фильтра. Тот же скоуп в cases/ana
### 6. Границы (НЕ делать сейчас) ### 6. Границы (НЕ делать сейчас)
- Саморегистрация ЦОУ — аккаунты создаёт админ/координатор. - Саморегистрация подразделений — аккаунты создаёт РЦУ РЧС/ОУМЧС.
- SSO/ActiveDirectory — после пилота. - SSO/ActiveDirectory — после пилота.
- B18/B19 — отдельные задачи. - B18/B19 — отдельные задачи.
- WebSockets для списка поисков — polling на старте. - WebSockets для списка поисков — polling на старте.
### 7. Критерии приёмки (сводно) ### 7. Критерии приёмки (сводно)
- Два одновременных активных поиска у двух ЦОУ: республиканский админ видит - Два одновременных активных поиска у двух подразделений: РЦУ РЧС видит
оба, райЦОУ — только свой; переключение без потери контекста. оба, Г(Р)ОЧС — только свой; переключение без потери контекста.
- Вход через server-side сессии; аудит фиксирует входы и админ-действия, - Вход через server-side сессии; аудит фиксирует входы и админ-действия,
ретенция 90 дней. ретенция 90 дней.
- Зоны операции уезжают в КОНТУР и видны в штаб-панели CT130:8080 под своим - Зоны операции уезжают в КОНТУР и видны в штаб-панели CT130:8080 под своим