feat(portal): add incident review workflow

This commit is contained in:
igor04091968
2026-06-04 13:46:25 +03:00
parent 4c66e67661
commit 20fb47b457
4 changed files with 407 additions and 17 deletions
+44
View File
@@ -68,6 +68,40 @@ Business Risk не является автоматическим обвинен
- `first_seen_utc` - первое наблюдение;
- `last_seen_utc` - последнее наблюдение;
- `recommendation` - рекомендуемое действие.
- `incident_review` - статус проверки кандидата.
`incident_review`:
- `candidate_id` - идентификатор кандидата;
- `status` - `NEW`, `IN_REVIEW`, `CONFIRMED`, `FALSE_POSITIVE` или `POSTPONED`;
- `reviewer` - проверяющий, если указан;
- `comment` - комментарий проверки;
- `updated_at` - время последнего изменения статуса.
Для изменения review-статуса используется:
```http
POST /api/incident-review
```
Пример тела:
```json
{
"candidate_id": "risk-candidate-example",
"status": "IN_REVIEW",
"reviewer": "operator",
"comment": "Назначена ручная проверка"
}
```
Хранение пока файловое:
```text
<state_dir>/data/incident_reviews.json
```
Если файла нет, все кандидаты отображаются как `NEW`.
## Логика риска
@@ -114,6 +148,13 @@ Business Risk не является автоматическим обвинен
проверки. Это не автоматическое создание инцидента и не подтвержденное
нарушение.
В карточке можно сменить review-статус кандидата:
- `В проверку` -> `IN_REVIEW`;
- `Подтвердить` -> `CONFIRMED`;
- `Ложный` -> `FALSE_POSITIVE`;
- `Отложить` -> `POSTPONED`.
## Markdown
Оперативный отчет содержит раздел:
@@ -122,6 +163,7 @@ Business Risk не является автоматическим обвинен
## Риски подразделений
## Динамика бизнес-рисков
## Кандидаты в инциденты
## Проверка кандидатов в инциденты
```
Раздел можно использовать в PDF/Markdown-отчете для руководителя.
@@ -159,3 +201,5 @@ Executive summary показывает до 3 наиболее рискован
доказательной базы, а не из-за фактической работы сотрудников.
- `risk_incident_candidates` - только очередь `review required`; реальные
инциденты создаются отдельно ответственным сотрудником.
- Смена `incident_review.status` не создает запись в обычной очереди
`incidents` и не подтверждает нарушение автоматически.