Аудит и история¶
Раздел описывает единый журнал событий, гибридное хранение (JSON Patch + абсолютные значения) и два представления.
Единый журнал событий¶
Все действия хранятся в одной системе событий. Просмотр — через фильтры:
Событие (Event):
├── Тип: create / read / update / delete / transfer / status_change / login / logout / merge / share
├── Timestamp
├── Кто (user_id, user_name)
├── Сущность (entity_type, entity_id)
├── Проект (project_id)
├── Изменения (JSON Patch, RFC 6902 — только дельта, не полные old/new)
└── Метаданные (IP, user_agent — для login/logout)
Гибридное хранение изменений¶
Изменения хранятся в двух форматах одновременно — для UI и для аналитики:
Формат 1: JSON Patch (RFC 6902) — для UI¶
Компактная дельта изменений. Используется для визуального diff в интерфейсе.
Пример: менеджер изменил стадию сделки и сумму
Patch:
[
{ "op": "replace", "path": "/stage", "from": "КП", "value": "Переговоры" },
{ "op": "replace", "path": "/amount", "from": 500000, "value": 750000 }
]
В UI аудита: визуальный diff (как в Git)
stage: КП → Переговоры
amount: 500 000 → 750 000
Формат 2: Абсолютные значения ключевых полей — для аналитики¶
Для бизнес-критичных полей дополнительно сохраняется абсолютное значение. Позволяет SQL-запросы: «все сделки, где сумма была > 1 млн в январе».
Ключевые поля (фиксируются per-entity):
Сделка: stage, amount, owner_id, source
Продажа: status, order_type_id, owner_id
Контакт: email, phone
Компания: inn, name
Аналитика строится по абсолютным значениям (быстрые SQL-запросы). Детальный diff в UI — по JSON Patch.
Что логируется¶
- CRUD-операции на всех сущностях
- Передача данных между проектами
- Изменения статусов (сделки, продажаы)
- Шаринг записей
- Входы и выходы из системы
- Merge контактов/компаний
- Изменения ролей и прав
- Доступ к данным (чтение)
Два представления¶
Per-entity (история сущности)¶
В карточке каждой сделки/контакта/продажи — вкладка «История»: - Все события связанные с этой записью - Кто, когда, что изменил - Привязка новых сделок к контакту
Per-user (журнал пользователя)¶
- Руководитель видит действия своих подчинённых (по иерархии отделов)
- Сотрудник видит только свои действия
- Platform Owner / Admin видит всё в организации
- Project Admin видит все действия в проекте
Маршруты аудита¶
| URL | Экран | Доступ |
|---|---|---|
/p/:pid/audit |
Project Audit Log | Project Admin |
/account/organization/audit |
Organization Audit Log | Platform Owner, Admin |