Перейти к содержанию

Аудит и история

Раздел описывает единый журнал событий, гибридное хранение (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