# Журнал аудита

Каждое изменение в системе фиксируется в **журнале аудита** — таблице,
в которой записано: кто, что, когда, что было до и после.

Доступ — в разделе **«Аудит»** в навигации (для пользователей с правом
INTERNAL и выше).

## Что попадает в журнал

- Создание, обновление, закрытие записей справочников (`CREATE` / `UPDATE` / `CLOSE`)
- Создание, обновление, удаление справочников
- Schema drafts: создание, отправка на ревью, approve, reject, publish
- Изменения настроек webhook-подписок

Технические события (запуск pod'ов, выполнение SQL миграций) — НЕ
попадают в этот аудит. Они в системных логах.

## Структура записи аудита

| Поле | Что значит |
|---|---|
| **Время** | Когда произошло событие (точное время сервера) |
| **Пользователь** | Кто сделал изменение (берётся из JWT-токена) |
| **Справочник** | Какой справочник затронут |
| **Бизнес-ключ** | Какая конкретно запись (для record-операций) |
| **Действие** | `CREATE`, `UPDATE`, `CLOSE`, `DRAFT_APPROVE` и т.п. |
| **Было / Стало** | Diff: что изменилось (для UPDATE) |
| **Trace ID** | Технический идентификатор для корреляции с логами |

## Фильтрация

В UI — toolbar с фильтрами:
- **Справочник** — конкретный или все
- **Действие** — `CREATE` / `UPDATE` / `CLOSE` и т.д.
- **Пользователь** — кто сделал
- **Бизнес-ключ** — конкретная запись
- **Период** — диапазон дат (используй DateRangePicker)

Применяется автоматически при изменении любого фильтра. URL обновляется —
можно поделиться ссылкой «аудит за вчера на ground_station».

## Что искать в аудите

### «Кто закрыл запись X?»

Фильтр: справочник = `<имя>`, бизнес-ключ = `<код>`, действие = `CLOSE`.
Видишь оператора, время, причину (если была указана).

### «Что менялось вчера в spacecraft?»

Фильтр: справочник = `spacecraft`, период = вчера. Сортировка по времени.

### «Я подозреваю некорректное изменение»

Найди запись, посмотри **diff** колонки «Было / Стало». Если изменение
действительно неверное — раскрой запись, кликни **«Восстановить эту
версию»** (создаст новую активную версию из исторической).

### «Кто часто меняет конкретный справочник?»

Фильтр: справочник + период (последний месяц). В UI отсортируй по
пользователю — видишь топ-операторов.

## Экспорт

Кнопка **«Экспортировать»** в правом верхнем — выгрузка в CSV отфильтрованных
записей. Полезно для:
- Отчётов руководству («что изменилось за квартал»)
- Compliance-проверок
- Анализа в Excel / BI

CSV содержит те же колонки, что в UI, плюс полные diff'ы в JSON-формате.

## Что НЕЛЬЗЯ найти в аудите

- **Чтения** (`READ`) — никто их не записывает (объём огромен, информативная
  ценность низкая)
- **Изменения настроек системы** на уровне kubernetes / Vault / SSL —
  это в системных логах ops-команды
- **Изменения вне Ordinis** — если внешняя система сделала свою копию
  справочника и поменяла её, в нашем аудите этого нет

## Срок хранения

По умолчанию — **бессрочно**. Журнал растёт, но не очищается автоматически.

Если требуется retention policy (например, удалять старше 5 лет по GDPR) —
свяжись с ответственным за систему, это настраивается на уровне БД.

## Trace ID — как использовать

Если в audit-записи есть trace ID — это можно сопоставить с логами
бэкенда. Полезно когда ошибка произошла на стороне сервера и нужно
понять глубинную причину. Скопируй trace ID, отдай в support / ops.
