Документ — это отчёт или панель: сетка блоков с графиками, таблицами, метриками и текстом. Документы образуют дерево папок, хранятся как обычные JSON-файлы и обновляются на экране в реальном времени.
Структура документа
Каждый документ описывается JSON-файлом document.json: заголовок, массив блоков, переменные, права доступа и метаданные.
{
"title": "Название документа",
"blocks": [],
"variables": {},
"permissions": { "access": "admin-only" },
"settings": {
"rangeSelector": false,
"timeframeSelector": false
},
"metadata": {
"created": "ISO8601",
"modified": "ISO8601",
"version": 1,
"tags": ["тег1"],
"icon": "filename.svg"
}
}
Картинки и файлы в тексте отчёта
Текст в отчёте хранится отдельным файлом рядом с документом. В него можно вставлять картинки и прикладывать файлы: положите картинку, выгрузку или документ в ту же папку, что и отчёт, и сошлитесь на файл в тексте обычной ссылкой. Картинка покажется прямо в отчёте, остальные файлы читатель скачает по клику. Так в отчёт попадают схема процесса, снимок экрана с панелью или готовая выгрузка для коллеги — и всё нужное лежит в одном месте.
- картинки (png, jpg, gif, webp, avif, svg) показываются на месте, а всё остальное — PDF, таблицы, архивы — скачивается;
- ссылку на файл приложение подписывает и выдаёт читателю временно: адрес действует 12 часов и обновляется при каждом открытии отчёта — постоянной открытой ссылки на файл не остаётся;
- через этот адрес доступен только текст документов: достать по нему чужие файлы или папки нельзя;
- внешние ссылки, ссылки-якоря внутри отчёта, ссылки на другие документы и всё, что написано внутри блока с кодом, остаются как написаны;
- если файл удалить или переименовать, ссылка перестанет работать — переносите папку отчёта целиком, вместе с файлами.
Справка по блоку
Блок — это название, тип содержимого, ширина в колонках сетки (от 1 до 24) и высота. К блоку можно добавить короткое пояснение: в режиме просмотра рядом с кнопкой обращения к агенту появится значок «Справка», по клику всплывёт подсказка о том, как читать этот график и на что смотреть. В шаблонах такие пояснения есть у каждого блока, а у плиток с метриками — обязательно: отчёт объясняет себя сам, и пересказывать его коллегам словами не нужно.
Вложенность и навигация
- документы образуют дерево папок — вложенность не ограничена;
- навигация по дереву — через хлебные крошки;
- пути документов могут содержать переменные — один шаблон порождает семейство отчётов (подробнее — Переменные и шаблоны);
- перемещение и удаление документов выполняются прямо в интерфейсе.
Новые документы и действия в боковой панели
Боковая панель подсказывает, что появилось или изменилось: название такого документа выделено, пока его не откроют. Изменённым документ считается только по содержимому — если файл просто скопировали на место, тронули дату или поменяли права, выделения не будет, а переписанное содержимое выделится, даже когда дата файла не изменилась. Изменения, сделанные при выключенном приложении, тоже находятся при следующем запуске.
- у каждой строки — и у документа, и у папки, и у корневой строки «Документы» — при наведении появляется кнопка с тремя точками; то же меню открывается правым щелчком по строке;
- «Отметить прочитанным» снимает выделение: у документа — с него, у папки — с неё и со всех документов внутри, у корневой строки — сразу со всего дерева;
- «Обновить значок» открывает поиск по библиотеке значков и ставит выбранный значок этому документу; значок хранится в метаданных, и у корневого документа — домашней страницы раздела — тоже может быть свой;
- выделение общее для всех открытых экранов: отметили прочитанным в одной вкладке — пропало во всех.
Фильтры и параметры отчёта
Читателю отчёта можно дать рычаги — не правку файла, а обычные элементы управления в шапке:
- Фильтры — один или несколько, например регион и канал. Список значений задаётся вручную или берётся из ваших же данных, а выбрать можно одно значение или сразу несколько;
- Поля «что если» — число с ползунком, переключатель, дата или диапазон дат. Сдвинули бюджет, скидку или срок — связанные блоки пересчитались на месте, без перезагрузки страницы;
- значения запоминаются по отчёту, а кнопка сброса возвращает исходные настройки;
- пересчитываются только те блоки, чьи запросы используют это значение, — остальные остаются как были и не нагружают базу лишний раз.
Погружение, связанные блоки и вкладки
Отчёт отвечает на уточняющий вопрос, не уводя читателя на другую страницу:
- Погружение по клику — клик по столбцу, точке, сектору, ячейке или региону на карте задаёт значение фильтра: отчёт пересчитывается по этому значению, а в шапке появляется плашка с выбранным значением и крестиком. Крестик снимает выбор — и всё возвращается. Так «продажи упали» разворачивается в «упали в этом канале на этих товарах»;
- Связанные блоки — графики и таблицы одного отчёта можно связать: наведение на неделю, точку или строку подсвечивает то же значение в соседних блоках. Запросы при этом не выполняются — это только подсветка, отчёт не перерисовывается заново;
- Вкладки по аудиториям — один отчёт может показывать разным читателям разное: например, вкладку «Итог для руководителя» с главными числами и вкладку «Расчёты аналитика» с деталями. Общие блоки видны на всех вкладках, а данные загружаются один раз — переключение мгновенное;
- Состояние оповещений — блок можно привязать к правилу оповещений, и на отчёте будет видно, спокойно правило или срабатывает (подробнее — в разделе Оповещения).
Отчёты из шаблонов
Готовый отчёт из библиотеки шаблонов лежит прямо в папке шаблона — без вложенных папок с отчётами. Рядом с ним идут демонстрационные данные, скрипты подготовки и два текстовых блока в конце отчёта: «Быстрый старт» — как читать отчёт и что нажимать, и «Пояснение» — подробное описание. Читают их по порядку: «Быстрый старт» первым, «Пояснение» — в самом конце.
Агент адаптирует шаблон под ваши данные и устанавливает готовый отчёт в раздел «Документы» — дальше он живёт как обычный документ.
Хранение: JSON-файлы
Документы хранятся в /project/apps/analytics/documents/ как JSON-файлы. Это значит: версионирование в Git, ручное редактирование в любом редакторе, перенос между экземплярами простым копированием папки.
Мгновенный reload
- file watcher на inotify отслеживает изменения файлов документов;
- список документов обновляется на ходу — новые и изменённые отчёты появляются сразу;
- правки ИИ или ручные правки JSON видны на экране без перезагрузки;
- обновления блоков транслируются клиентам через SignalR/WebSocket.
Права доступа
admin-only— документ виден только администратору;authenticated— всем вошедшим пользователям;public— публичные отчёты можно показывать без входа: удобно для внешних панелей.
Метаданные, поиск, импорт и экспорт
- метаданные: версия, теги, иконка, даты создания и изменения;
- поиск по документам и по библиотеке шаблонов — по мере ввода, из боковой панели;
- экспорт отчёта: готовый PDF для отправки или ZIP-архив всей папки документа — для переноса на другой экземпляр;
- импорт из архива: при переносе чужого отчёта имена его источников данных можно сразу заменить на свои;
- «Лучшие документы» и «Недавние документы» на главном экране.