Документ — это отчёт или дашборд: сетка блоков с графиками, таблицами, метриками и текстом. Документы образуют дерево папок, хранятся как обычные 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"
}
}
Вложенность и навигация
- документы образуют дерево папок — вложенность не ограничена;
- навигация по дереву — через хлебные крошки;
- пути документов могут содержать переменные — один шаблон порождает семейство отчётов (подробнее — Переменные и шаблоны);
- перемещение и удаление документов выполняются прямо в интерфейсе.
Хранение: JSON-файлы
Документы хранятся в /data/documents/ как JSON-файлы. Это значит: версионирование в Git, ручное редактирование в любом редакторе, перенос между инстансами простым копированием папки.
Мгновенный reload
- file watcher на inotify отслеживает изменения файлов документов;
- кэш списка документов инвалидируется — новые и изменённые отчёты появляются сразу;
- правки ИИ или ручные правки JSON видны на экране без перезагрузки;
- обновления блоков транслируются клиентам через SignalR/WebSocket.
Права доступа
admin-only— документ виден только администратору;authenticated— всем вошедшим пользователям;public— публичные отчёты можно показывать без входа: удобно для внешних дашбордов.
Метаданные, поиск, импорт и экспорт
- метаданные: версия, теги, иконка, даты создания и изменения;
- поиск по всем документам — с главного экрана;
- импорт и экспорт документов для переноса между инстансами;
- «Лучшие документы» и «Недавние документы» на главном экране.