Appearance
Журнал аудита
Полная история изменений критичных данных — кто, что, когда и почему изменил. Хранится 7+ лет для соответствия ISO 9001 и ГОСТ.
Как открыть
Боковое меню → Аналитика → Аудит
Зачем нужен аудит
Журнал аудита (AuditTrail) дополняет стандартную историю изменений бизнес-контекстом: почему изменение произведено, кем одобрено, какой заявкой инициировано. Это необходимо для:
- Compliance — сертификация ISO 9001, внутренний аудит
- Расследования — кто изменил маршрут партии и почему
- Контроль — отслеживание несанкционированных изменений
APPEND-ONLY
Записи аудита никогда не изменяются и не удаляются. Это гарантия неизменяемости — даже администратор не может «подчистить» историю.
Что на экране
Таблица записей аудита
| Столбец | Описание | Пример |
|---|---|---|
| Дата/время | Когда произошло изменение | 20.03.2026 14:32:15 |
| Пользователь | Кто внёс изменение (ФИО) | Иванов А.П. |
| Таблица | Какая сущность изменена | batches |
| Запись | UUID изменённой записи | 3f2a...8c1b |
| Операция | Тип изменения | INSERT / UPDATE / DELETE |
| Изменённые поля | Список полей | status, priority |
| Причина | Бизнес-обоснование | «Перенос на альтернативное РМ по рекомендации» |
| Одобрил | Кто одобрил (если требовалось) | Петров С.В. |
Фильтры
| Фильтр | Варианты |
|---|---|
| Период | Сегодня / Неделя / Месяц / Произвольный |
| Пользователь | Все / конкретный пользователь |
| Таблица | Все / batches / production_orders / equipment / ... |
| Операция | Все / INSERT / UPDATE / DELETE |
| Поиск | По UUID записи, имени пользователя, причине |
Типы операций
| Операция | Код | Описание |
|---|---|---|
| Создание | INSERT | Новая запись добавлена в систему |
| Изменение | UPDATE | Одно или несколько полей изменены |
| Удаление | DELETE | Запись удалена (мягкое удаление через SoftDelete) |
Детали записи аудита
При клике на строку открывается детальная карточка:
Что изменилось
| Поле | Описание |
|---|---|
| Старые значения | JSON с предыдущими значениями полей |
| Новые значения | JSON с новыми значениями полей |
| Изменённые поля | Список имён полей, которые реально изменились |
Пример для UPDATE:
| Поле | Было | Стало |
|---|---|---|
| status | in_progress | completed |
| actual_end_time | NULL | 2026-03-20 14:30:00 |
| completed_quantity | 0 | 48 |
Контекст изменения
| Поле | Описание |
|---|---|
| Бизнес-причина | Текстовое обоснование (обязательно для критичных операций) |
| Одобривший | Пользователь, если изменение требовало одобрения |
| Заявка | UUID заявки на изменение (если применимо) |
| IP-адрес | С какого адреса выполнено |
| User-Agent | Браузер/приложение |
| Transaction ID | PostgreSQL txid для группировки связанных изменений |
Критичные операции
Для изменения маршрутных карт, нормативов и настроек оборудования бизнес-причина обязательна. Система не позволит сохранить изменение без заполнения поля «Причина».
Какие таблицы аудируются
| Модуль | Таблицы | Что важно |
|---|---|---|
| Производство (M4) | batches, workplaces, buffers | Смена статуса партии, перемещения |
| Планирование (M3) | production_orders, schedules | Изменение дедлайнов, приоритетов |
| Технология (M2) | route_cards, operations, bom | Изменение маршрутов и спецификаций |
| Качество (M6) | defect_records, inspections | Регистрация дефектов, результаты проверок |
| Оборудование (M4) | equipment, maintenance_records | Смена состояния, записи ТО |
| Нормативы (M7) | norms, norm_history | Корректировка нормативов |
| Персонал (M5) | employees, employee_skills | Изменение допусков и навыков |
Группировка по транзакции
Одно действие пользователя может изменить несколько таблиц. Все записи аудита в рамках одной транзакции имеют общий txid (PostgreSQL transaction ID).
Пример: мастер перенаправляет партию на другое РМ:
| txid | Таблица | Операция | Что изменилось |
|---|---|---|---|
| 48291 | batches | UPDATE | workplace_id: WP-03 → WP-07 |
| 48291 | buffers | UPDATE | current_count: 15 → 14 (исходный) |
| 48291 | buffers | UPDATE | current_count: 8 → 9 (целевой) |
| 48291 | master_decisions | INSERT | decision_type: alternative_workplace |
Поиск по пользователю
Для расследования инцидентов используйте фильтр «Пользователь» + «Период»:
- Выберите пользователя из выпадающего списка
- Укажите период (например, «Последние 24 часа»)
- Система покажет все действия этого пользователя в хронологическом порядке
- Отфильтруйте по таблице, если нужны только определённые изменения
Денормализация ФИО
Имя пользователя хранится прямо в записи аудита (поле changed_by_name). Даже если пользователь будет переименован или удалён — в аудите останется его ФИО на момент действия.
Срок хранения
| Период | Хранилище | Доступ |
|---|---|---|
| 0-90 дней | Горячее (PostgreSQL) | Мгновенный, полнотекстовый поиск |
| 90 дней — 2 года | Тёплое (сжатые таблицы) | Поиск с задержкой |
| > 2 лет | Холодное (архив) | По запросу, 24 часа на восстановление |
Связанные разделы
- Журнал событий — все события системы (более широкий охват)
- Оповещения — алерты при подозрительных изменениях
- Решения системы — журнал решений мастера с контекстом