feat(portal): audit incident review changes

This commit is contained in:
igor04091968
2026-06-04 14:11:34 +03:00
parent 20fb47b457
commit cd95792196
4 changed files with 286 additions and 11 deletions
+23
View File
@@ -69,6 +69,7 @@ Business Risk не является автоматическим обвинен
- `last_seen_utc` - последнее наблюдение;
- `recommendation` - рекомендуемое действие.
- `incident_review` - статус проверки кандидата.
- `incident_review_audit` - история изменений статуса проверки кандидата.
`incident_review`:
@@ -78,6 +79,15 @@ Business Risk не является автоматическим обвинен
- `comment` - комментарий проверки;
- `updated_at` - время последнего изменения статуса.
`incident_review_audit`:
- `candidate_id` - идентификатор кандидата;
- `old_status` - предыдущий статус;
- `new_status` - новый статус;
- `reviewer` - проверяющий, если указан;
- `comment` - комментарий к изменению;
- `changed_at_utc` - время изменения в UTC.
Для изменения review-статуса используется:
```http
@@ -99,9 +109,13 @@ POST /api/incident-review
```text
<state_dir>/data/incident_reviews.json
<state_dir>/data/incident_review_audit.jsonl
```
Если файла нет, все кандидаты отображаются как `NEW`.
Если audit-файла нет, портал продолжает работать, а история изменений
отображается как отсутствующая. Audit JSONL является append-only журналом:
история изменений не удаляется и не перезаписывается при смене статуса.
## Логика риска
@@ -155,6 +169,14 @@ POST /api/incident-review
- `Ложный` -> `FALSE_POSITIVE`;
- `Отложить` -> `POSTPONED`.
Для каждого кандидата портал показывает текущий статус, проверяющего, время
последнего изменения, последний комментарий и раскрываемую историю изменений.
Это формирует доказательную цепочку:
```text
кандидат -> проверка -> решение -> кто/когда/почему
```
## Markdown
Оперативный отчет содержит раздел:
@@ -164,6 +186,7 @@ POST /api/incident-review
## Динамика бизнес-рисков
## Кандидаты в инциденты
## Проверка кандидатов в инциденты
## Аудит проверки инцидентов
```
Раздел можно использовать в PDF/Markdown-отчете для руководителя.