597 lines
532 KiB
HTML
597 lines
532 KiB
HTML
<!doctype html>
|
||
<html lang="ru"><meta charset="utf-8">
|
||
<title>СДЕ Sarex — типовой контур (пример)</title>
|
||
<style>
|
||
body { font-family: system-ui, sans-serif; margin: 0 auto; padding: 24px; max-width: 1760px;
|
||
background:#fafafa; color:#111; }
|
||
h1 { font-size: 22px; } h2 { font-size: 16px; margin: 0 0 4px; }
|
||
h3 { font-size: 14px; margin: 22px 0 6px; }
|
||
.doc { color:#555; font-size:13px; margin:0 0 10px; max-width:900px; }
|
||
section { background:#fff; border:1px solid #ddd; border-radius:6px; padding:14px; margin-bottom:18px;
|
||
overflow-x:auto; scroll-margin-top:12px; }
|
||
svg { width:100%; height:auto; min-width:700px; }
|
||
.legend { font-size:13px; color:#444; max-width:900px; }
|
||
.legend code { background:#eee; padding:1px 5px; border-radius:3px; }
|
||
nav { display:flex; flex-wrap:wrap; gap:6px; margin:14px 0 22px; }
|
||
nav a { font-size:12px; color:#245; text-decoration:none; background:#fff; border:1px solid #ddd;
|
||
border-radius:4px; padding:3px 8px; }
|
||
nav a:hover { background:#eef4f8; }
|
||
dl.apps { margin:0; }
|
||
dl.apps dt { font-weight:600; font-size:13px; margin-top:14px; }
|
||
dl.apps dd { margin:2px 0 0; padding-left:0; color:#333; font-size:13px; max-width:900px; }
|
||
dl.apps dd p { margin:0 0 6px; }
|
||
dl.apps .none { color:#999; font-style:italic; }
|
||
code { background:#f0f0f0; padding:1px 4px; border-radius:3px; font-size:12px; }
|
||
</style>
|
||
<h1>СДЕ Sarex — типовой контур (пример)</h1>
|
||
<p class="legend">Автогенерация из <code>example-technology.archimate</code>. Зелёный — технологический слой,
|
||
голубой — прикладной. Пунктир с полым треугольником — realization, стрелка — serving,
|
||
ромб — composition, линия с шариком — assignment, полый ромб — aggregation. Подробнее — в представлении
|
||
«L1. Как читать схемы». Описание элемента всплывает подсказкой при наведении на блок.</p>
|
||
<p class="legend">Архитектура типового контура платформы в двух слоях. Технологический: кластер, платформенные компоненты внутри него, внешние системы за периметром и технологические сервисы, которые всё это даёт приложениям. Прикладной: компоненты платформы по смысловым группам, вызовы между ними и зависимость каждого от технологических сервисов. Имена кластера, узлов, доменов и реестра заменены на примеры — конкретная инсталляция задаётся отдельным профилем контура.</p><p class="legend">Связи не нарисованы от руки, а выведены из манифестов развёртывания: переменных окружения, аннотаций и маршрутов. Исключения оговорены отдельно — внешние интеграции и смысловая группировка приложений заданы профилем, описания компонентов получены чтением исходного кода. Как читать нотацию — представление «L1».</p>
|
||
<nav><a href="#view-40">L1. Как читать схемы</a><a href="#view-1">T1. Технологический слой</a><a href="#view-2">T2. Развёртывание по узлам</a><a href="#view-3">T3. Внешние интеграции</a><a href="#view-30">T4. Потребители: Маршрутизация HTTPS-трафика</a><a href="#view-31">T5. Потребители: Аутентификация OIDC</a><a href="#view-32">T6. Потребители: Управление секретами</a><a href="#view-33">T7. Потребители: Реляционное хранилище</a><a href="#view-34">T8. Потребители: Кэш</a><a href="#view-35">T9. Потребители: Событийная шина</a><a href="#view-36">T10. Потребители: Очередь сообщений AMQP</a><a href="#view-37">T11. Потребители: Оркестрация процессов BPMN</a><a href="#view-38">T12. Потребители: Объектное хранилище</a><a href="#view-39">T13. Потребители: Отправка почтовых уведомлений</a><a href="#view-4">A0. Карта прикладного слоя</a><a href="#view-5">A1. Ядро прикладного слоя</a><a href="#view-6">A2. Зависят от: django</a><a href="#view-7">A3. Зависят от: documentations</a><a href="#view-8">A4. Зависят от: eav</a><a href="#view-9">A5. Зависят от: resources</a><a href="#view-10">A6. Зависят от: processing</a><a href="#view-11">A7. Зависят от: iam</a><a href="#view-12">A8. Зависят от: flows</a><a href="#view-13">A9. Зависят от: workspaces</a><a href="#view-14">A10. Зависят от: system-log</a><a href="#view-15">A11. Зависят от: bim</a><a href="#view-16">A12. Зависят от: pm</a><a href="#view-17">P1. Паспорт: documentations</a><a href="#view-18">P2. Паспорт: flows</a><a href="#view-19">P3. Паспорт: issues</a><a href="#view-20">P4. Паспорт: comparisons</a><a href="#view-21">P5. Паспорт: django</a><a href="#view-22">P6. Паспорт: faas</a><a href="#view-23">P7. Паспорт: transmittal</a><a href="#view-24">P8. Паспорт: message-hub</a><a href="#view-25">P9. Паспорт: pm</a><a href="#view-26">P10. Паспорт: processing</a><a href="#view-27">P11. Паспорт: rfi</a><a href="#view-28">P12. Паспорт: cde</a><a href="#view-29">P13. Паспорт: notes</a><a href="#app-layer">Прикладной слой: описания</a></nav>
|
||
<section id="view-40"><h2>L1. Как читать схемы</h2><p class="doc">Легенда нотации. Показан настоящий фрагмент модели, подписанный по типам: каждый элемент и каждая линия здесь встречаются на остальных представлениях в том же начертании.</p><svg viewBox="0 0 1280 526" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="280" y1="150" x2="340" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-start="url(#diamond)"/><line x1="600" y1="150" x2="660" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="920" y1="150" x2="980" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="470" y1="320" x2="470" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-start="url(#odiamond)"/><line x1="838" y1="320" x2="1062" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#filled)" marker-start="url(#ball)"/><line x1="1110" y1="320" x2="1110" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-start="url(#odiamond)"/><g><title>Flux CD — набор контроллеров Kubernetes, реализующий подход GitOps: вся система описана декларативно и находится под контролем версий, а автоматика непрерывно приводит развёрнутое окружение в соответствие состоянию, заданному в Git.</title><rect x="20" y="120" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="150" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кластер k8s-prod</text></g><g><title>HashiCorp Vault — централизованная система управления секретами: учётными данными, ключами шифрования и сертификатами, с аудитом всех обращений.</title><rect x="340" y="120" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="470.0" y="150" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Vault + Agent Injector</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="660" y="120" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="790.0" y="150" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="980" y="120" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1110.0" y="150" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Узлы платформенных сервисов, на которых не работает прикладная логика: сеть и вход в контур, идентификация, секреты, брокеры, движок процессов, кэш.</title><rect x="340" y="320" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="470.0" y="343" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Группа узлов K8s (Поддерживающая</text><text x="470.0" y="358" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">инфраструктура)</text></g><g><title>Основной пул прикладных серверов: здесь работает подавляющее большинство сервисов платформы — и бэкенды доменных областей, и микрофронтенды. Нагрузка преимущественно интерактивная, запрос-ответ.</title><rect x="660" y="320" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="790.0" y="343" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Группа узлов generic (Сервера</text><text x="790.0" y="358" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">приложений)</text></g><g><title>Ядро CDE: хранение документов и их версий, связи между документами, вложения, комплекты передачи, чертежи и трёхмерные модели, подготовка САПР-моделей к просмотру, проверка штампов.</title><rect x="980" y="320" width="260" height="60" rx="4" fill="#F4F4F4" fill-opacity="1" stroke="#888" stroke-width="1.2"/><text x="1110.0" y="350" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Документы и общая среда данных</text></g><g><rect x="20" y="320" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="350" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Helm-чарты (OCI)</text></g><rect x="20" y="20" width="1220" height="66" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="29" y="37" font-size="11" fill="#4a4632">Стрелка serving читается не как «кто кого вызывает», а как «кто без кого не работает»: она идёт от обслуживающего к обслуживаемому. Направление выбрано так потому, что от схемы обычно нужен ответ</text><text x="29" y="51" font-size="11" fill="#4a4632">на вопрос «что откажет, если убрать этот элемент», — и он читается по стрелкам вперёд.</text><rect x="20" y="190" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="29" y="207" font-size="11" fill="#4a4632">Узел (Node) — вычислительная среда:</text><text x="29" y="221" font-size="11" fill="#4a4632">кластер, группа серверов или отдельный</text><text x="29" y="235" font-size="11" fill="#4a4632">хост. Ромб на линии — composition: узел</text><text x="29" y="249" font-size="11" fill="#4a4632">состоит из этого, и отдельно от узла</text><text x="29" y="263" font-size="11" fill="#4a4632">содержимое не существует.</text><rect x="340" y="190" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="349" y="207" font-size="11" fill="#4a4632">Системное ПО (System Software) —</text><text x="349" y="221" font-size="11" fill="#4a4632">платформенный компонент внутри узла.</text><text x="349" y="235" font-size="11" fill="#4a4632">Пунктир с полым треугольником —</text><text x="349" y="249" font-size="11" fill="#4a4632">realization: компонент реализует</text><text x="349" y="263" font-size="11" fill="#4a4632">технологический сервис.</text><rect x="660" y="190" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="669" y="207" font-size="11" fill="#4a4632">Технологический сервис (Technology</text><text x="669" y="221" font-size="11" fill="#4a4632">Service) — что платформа даёт</text><text x="669" y="235" font-size="11" fill="#4a4632">приложениям, без указания, чем именно это</text><text x="669" y="249" font-size="11" fill="#4a4632">сделано. Приложение зависит от сервиса, а</text><text x="669" y="263" font-size="11" fill="#4a4632">не от конкретного продукта под ним.</text><rect x="980" y="190" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="989" y="207" font-size="11" fill="#4a4632">Прикладной компонент (Application</text><text x="989" y="221" font-size="11" fill="#4a4632">Component) — сервис прикладного слоя.</text><text x="989" y="235" font-size="11" fill="#4a4632">Цветом различаются слои: голубой —</text><text x="989" y="249" font-size="11" fill="#4a4632">прикладной, зелёный — технологический.</text><rect x="340" y="390" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="349" y="407" font-size="11" fill="#4a4632">Линия с полым ромбом — aggregation:</text><text x="349" y="421" font-size="11" fill="#4a4632">группа объединяет элемент, но тот может</text><text x="349" y="435" font-size="11" fill="#4a4632">существовать и без неё. Так показано, на</text><text x="349" y="449" font-size="11" fill="#4a4632">каких узлах работает системное ПО.</text><rect x="660" y="390" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="669" y="407" font-size="11" fill="#4a4632">Линия с шариком и закрашенной стрелкой —</text><text x="669" y="421" font-size="11" fill="#4a4632">assignment: узел выделен под компонент, и</text><text x="669" y="435" font-size="11" fill="#4a4632">компонент на нём исполняется.</text><rect x="980" y="390" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="989" y="407" font-size="11" fill="#4a4632">Смысловая группа (Grouping) — домен</text><text x="989" y="421" font-size="11" fill="#4a4632">прикладного слоя. Тоже aggregation:</text><text x="989" y="435" font-size="11" fill="#4a4632">компонент принадлежит домену по смыслу, а</text><text x="989" y="449" font-size="11" fill="#4a4632">не по месту размещения.</text><rect x="20" y="390" width="260" height="96" rx="3" fill="#fffbe8" stroke="#d8cfa8" stroke-width="1"/><text x="29" y="407" font-size="11" fill="#4a4632">Артефакт (Artifact) — то, что физически</text><text x="29" y="421" font-size="11" fill="#4a4632">лежит в хранилище: файл, образ</text><text x="29" y="435" font-size="11" fill="#4a4632">контейнера, дистрибутив.</text></svg></section><section id="view-1"><h2>T1. Технологический слой</h2><p class="doc">Что развёрнуто в кластере и какие технологические сервисы это даёт. Приложения-потребители вынесены в отдельные представления T2 и далее.</p><svg viewBox="0 0 1860 1030" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="239" y1="90" x2="174" y2="185" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="138" y1="185" x2="105" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="325" y1="185" x2="150" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="549" y1="185" x2="329" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="773" y1="185" x2="500" y2="87" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="1000" y1="186" x2="665" y2="83" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="231" y1="285" x2="685" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="461" y1="285" x2="859" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="691" y1="285" x2="1032" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="921" y1="285" x2="1206" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="782" y1="385" x2="1357" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="1514" y1="140" x2="1555" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="1320" y1="272" x2="260" y2="315" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1320" y1="352" x2="1290" y2="351" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1320" y1="448" x2="1290" y2="443" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1502" y1="560" x2="1730" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="1439" y1="650" x2="916" y2="255" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1446" y1="740" x2="909" y2="255" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1452" y1="830" x2="903" y2="255" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1485" y1="830" x2="1485" y2="720" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1485" y1="830" x2="1485" y2="810" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1485" y1="920" x2="1485" y2="720" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="168" y1="570" x2="152" y2="255" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#filled)" marker-start="url(#ball)"/><g><title>Flux CD — набор контроллеров Kubernetes, реализующий подход GitOps: вся система описана декларативно и находится под контролем версий, а автоматика непрерывно приводит развёрнутое окружение в соответствие состоянию, заданному в Git.</title><rect x="20" y="140" width="1270" height="400" rx="4" fill="#C9E7B7" fill-opacity="0.35" stroke="#4a7f3a" stroke-width="1.2"/><text x="30" y="160" font-size="13" font-weight="600" fill="#1a3a1a">Кластер k8s-prod</text></g><g><title>Camunda 8 — платформа оркестрации и автоматизации бизнес-процессов с участием людей, систем и устройств. В её основе движок Zeebe, координирующий исполнение процессов в распределённой среде;</title><rect x="40" y="385" width="1230" height="130" rx="4" fill="#C9E7B7" fill-opacity="0.35" stroke="#4a7f3a" stroke-width="1.2"/><text x="50" y="405" font-size="13" font-weight="600" fill="#1a3a1a">Camunda Platform</text></g><g><title>Реестр, из которого кластер получает и Helm-чарты (в формате OCI), и образы контейнеров. Единая точка поставки: версия чарта и тег образа, указанные в манифестах, разрешаются именно здесь.</title><rect x="1320" y="410" width="330" height="130" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="475" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">registry.example.com</text></g><g><title>Объектное хранилище — масштабируемый репозиторий для неструктурированных данных: файлов, медиа, журналов и резервных копий, без ограничений традиционной файловой системы.</title><rect x="1320" y="140" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="175" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">s3.example.com — объектное хранилище</text></g><g><title>Класс хранения, из которого выделяются тома для компонентов с состоянием — прежде всего для PostgreSQL, а также для брокеров и движка процессов.</title><rect x="1320" y="230" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Сетевое хранилище (StorageClass)</text></g><g><title>Хранит манифесты, из которых Flux собирает состояние кластера. В закрытых контурах наполняется зеркалированием из основного репозитория разработки, что даёт контуру автономность: даже при отсутствии связи с внешним миром развёртывание работает из локальной коп…</title><rect x="1320" y="320" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="355" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Git-сервер контура</text></g><g><title>SMTP — протокол передачи почты. Релей заказчика принимает исходящие сообщения от приложений контура и доставляет их адресатам; приложение аутентифицируется логином и паролем сервисной учётной записи, транспорт защищается TLS — либо сразу (порт 465), либо через…</title><rect x="1320" y="560" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="595" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">smtp.example.com — почтовый релей</text></g><g><title>Keycloak — открытый сервер управления доступом: поддерживает OIDC, OAuth 2.0 и SAML, умеет подтягивать пользователей из LDAP и Active Directory и принимать доменный вход по Kerberos (механизм SPNEGO).</title><rect x="1320" y="650" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="685" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Keycloak — брокер идентификации</text></g><g><title>Active Directory Federation Services — служба федерации Microsoft поверх домена Active Directory. Выдаёт токены по SAML 2.0, WS-Federation и OIDC, а проверку самих учётных данных оставляет домену.</title><rect x="1320" y="740" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="775" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">AD FS — служба федерации</text></g><g><title>Active Directory — служба каталогов Microsoft: хранит учётные записи, группы и организационную структуру предприятия и отвечает на запросы по LDAP (порт 389) и LDAPS (порт 636). Для предприятия это источник истины о сотрудниках.</title><rect x="1320" y="830" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="865" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Active Directory — каталог предприятия</text></g><g><title>Kerberos — протокол сетевой аутентификации на билетах, встроенный в домен Active Directory. Центр выдачи билетов работает на контроллерах домена и слушает порт 88 по TCP и UDP.</title><rect x="1320" y="920" width="330" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1485.0" y="955" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Kerberos KDC — центр выдачи билетов</text></g><g><title>Узел, к которому привязан ingress-gateway через nodeSelector. Привязка сделана ради предсказуемого адреса для внешней балансировки и правил межсетевого экрана, но ценой того, что внешний доступ зависит от одного узла.</title><rect x="20" y="570" width="300" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="170.0" y="600" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">frontend-node-01</text></g><g><title>Istio — открытый service mesh, который прозрачно накладывается на существующие распределённые приложения и централизованно управляет взаимодействием сервисов, не требуя изменений в коде.</title><rect x="40" y="185" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="220" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Istio Ingress Gateway</text></g><g><title>Istio разделён на плоскость управления, которая хранит конфигурацию и раздаёт её прокси, и плоскость данных из прокси Envoy рядом с каждым подом.</title><rect x="280" y="185" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="390.0" y="220" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Istio Service Mesh</text></g><g><title>cert-manager — расширение Kubernetes, которое выпускает TLS-сертификаты для нагрузок в кластере и продлевает их до истечения срока. Ресурсы Issuer и ClusterIssuer описывают, у какого удостоверяющего центра и на каких условиях получать сертификат, а ресурс Cert…</title><rect x="520" y="185" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="630.0" y="220" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cert-manager</text></g><g><title>Zitadel — платформа управления идентификацией, реализующая отраслевые стандарты OIDC, OAuth 2.0 и SAML для входа и единой аутентификации.</title><rect x="760" y="185" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="870.0" y="220" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Zitadel</text></g><g><title>HashiCorp Vault — централизованная система управления секретами: учётными данными, ключами шифрования и сертификатами, с аудитом всех обращений.</title><rect x="1000" y="185" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1110.0" y="220" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Vault + Agent Injector</text></g><g><title>PostgreSQL — объектно-реляционная СУБД с открытым исходным кодом и почти сорокалетней историей развития. Соответствует требованиям ACID, использует многоверсионное управление конкурентным доступом (MVCC) и покрывает не менее 170 из 177 обязательных возможносте…</title><rect x="40" y="285" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="320" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">PostgreSQL</text></g><g><title>Redis — сервер структур данных, хранящий данные в оперативной памяти. Помимо строк поддерживает хеши, списки, множества, упорядоченные множества и потоки — журнал с добавлением в конец.</title><rect x="280" y="285" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="390.0" y="320" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Redis</text></g><g><title>Apache Kafka — платформа потоковой обработки событий: публикация, хранение и обработка непрерывных потоков данных в реальном времени. События пишутся в темы, темы делятся на разделы и распределяются по брокерам ради масштабирования;</title><rect x="520" y="285" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="630.0" y="320" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Kafka</text></g><g><title>RabbitMQ — брокер сообщений, реализующий протокол AMQP 0-9-1 для асинхронного обмена между приложениями. Опубликованное сообщение попадает в обменник, привязки маршрутизируют его в очереди по ключу маршрутизации, а из очередей его забирают потребители.</title><rect x="760" y="285" width="220" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="870.0" y="320" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">RabbitMQ</text></g><g><title>Ядро движка: хранит состояние запущенных процессов и раздаёт задачи воркерам. Работает как StatefulSet, состояние на диске.</title><rect x="50" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="131.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Zeebe</text></g><g><title>Точка подключения клиентов и job-workers к ядру. Именно её адрес прикладные сервисы получают в переменной ZEEBE_GATEWAY.</title><rect x="224" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="305.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Zeebe Gateway</text></g><g><title>Интерфейс и REST API для наблюдения за экземплярами процессов: где застрял маршрут, какие переменные, какие инциденты. Используется не только людьми — прикладные сервисы обращаются к его API программно.</title><rect x="398" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="479.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Operate</text></g><g><title>Интерфейс пользовательских задач BPMN — шагов процесса, требующих действия человека.</title><rect x="572" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="653.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Tasklist</text></g><g><title>Аналитика по исполнению процессов: длительности, узкие места, статистика прохождения маршрутов.</title><rect x="746" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="827.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Optimize</text></g><g><title>Управление доступом к компонентам Camunda и выдача OAuth-токенов для машинного доступа. В поставке идёт вместе с собственным Keycloak, отдельным от основного поставщика идентичности контура.</title><rect x="920" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1001.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Identity</text></g><g><title>Готовые коннекторы к внешним системам, вызываемые из процесса без написания своего воркера.</title><rect x="1094" y="435" width="162" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1175.0" y="465" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Connectors</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="95.0" y="53" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="95.0" y="68" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Автоматическое получение и продление сертификатов для доменов контура. Потребитель у сервиса один — ingress-gateway; приложения с ним не взаимодействуют, поэтому отдельного представления с потребителями у него нет.</title><rect x="185" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="260.0" y="53" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Выпуск</text><text x="260.0" y="68" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">TLS-сертификатов</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="350" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="425.0" y="60" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="515" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="590.0" y="60" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="680" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="755.0" y="60" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Разделяемое короткоживущее состояние и очередь фоновых задач для сервисов с Celery-воркерами. Востребован узким кругом приложений, поэтому разворачивается точечно, а не как общая инфраструктура контура.</title><rect x="845" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="920.0" y="60" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кэш</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="1010" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1085.0" y="60" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="1175" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1250.0" y="53" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений</text><text x="1250.0" y="68" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">AMQP</text></g><g><title>Исполнение маршрутов согласования, описанных схемой BPMN: движок ведёт состояние процесса и раздаёт шаги воркерам прикладных сервисов. Позволяет менять логику согласования без пересборки сервисов.</title><rect x="1340" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1415.0" y="53" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Оркестрация процессов</text><text x="1415.0" y="68" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">BPMN</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="1505" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1580.0" y="60" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="1670" y="30" width="150" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1745.0" y="53" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых</text><text x="1745.0" y="68" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">уведомлений</text></g><g><rect x="1335" y="460" width="145" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1407.5" y="490" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Helm-чарты (OCI)</text></g><g><rect x="1490" y="460" width="145" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1562.5" y="490" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Образы контейнеров</text></g></svg></section><section id="view-2"><h2>T2. Развёртывание по узлам</h2><p class="doc">Какие группы узлов какие компоненты несут. Вложенность заменяет стрелки: хост внутри группы — composition, приложение — assignment, системное ПО — aggregation. Имена хостов заданы в профиле контура.</p><svg viewBox="0 0 1598 1080" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><g><title>Основной пул прикладных серверов: здесь работает подавляющее большинство сервисов платформы — и бэкенды доменных областей, и микрофронтенды. Нагрузка преимущественно интерактивная, запрос-ответ.</title><rect x="450" y="20" width="1108" height="1020" rx="4" fill="#C9E7B7" fill-opacity="0.35" stroke="#4a7f3a" stroke-width="1.2"/><text x="460" y="40" font-size="13" font-weight="600" fill="#1a3a1a">Группа узлов generic (Сервера приложений)</text></g><g><title>Узлы платформенных сервисов, на которых не работает прикладная логика: сеть и вход в контур, идентификация, секреты, брокеры, движок процессов, кэш.</title><rect x="20" y="416" width="400" height="360" rx="4" fill="#C9E7B7" fill-opacity="0.35" stroke="#4a7f3a" stroke-width="1.2"/><text x="30" y="436" font-size="13" font-weight="600" fill="#1a3a1a">Группа узлов K8s (Поддерживающая инфраструктура)</text></g><g><title>Узлы под вычислительно тяжёлую обработку, вынесенную из общего пула приложений: конвертация и разбор файлов, построение производных представлений документов и моделей.</title><rect x="20" y="20" width="400" height="112" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="220.0" y="76" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Группа узлов processing (Сервера приложений)</text></g><g><title>Узлы файлового хранилища. Отделены от вычислительных, потому что растут по другому закону: объём здесь определяется накопленными документами и моделями за всё время эксплуатации, а не числом одновременных пользователей.</title><rect x="20" y="152" width="400" height="112" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="220.0" y="208" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Узлы СУБД. Вынесены отдельно по двум причинам: предсказуемая производительность дисков и возможность обслуживать базы, не затрагивая прикладные сервисы. Хранят метаданные и связи всех доменных областей;</title><rect x="20" y="284" width="400" height="112" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="220.0" y="340" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Группа узлов DB (Базы данных)</text></g><g><title>Узлы поставки: реестр чартов и образов, а также Git-сервер, из которого Flux читает манифесты. Обеспечивают автономность контура — развёртывание и перезапуск не требуют выхода во внешнюю сеть.</title><rect x="20" y="796" width="400" height="112" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="220.0" y="852" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Репозиторий компонентов</text></g><g><title>Узлы обработки исходных файлов BIM-моделей в проприетарных форматах NWD и RVT. Работают асинхронно: воркер разбирает очередь заданий, забирает исходный файл из объектного хранилища, конвертирует его в пригодный для просмотра и анализа вид и складывает результа…</title><rect x="20" y="928" width="400" height="112" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="220.0" y="984" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">CAD ферма</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="34" y="54" width="180" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="124.0" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Объектное хранилище — масштабируемый репозиторий для неструктурированных данных: файлов, медиа, журналов и резервных копий, без ограничений традиционной файловой системы.</title><rect x="34" y="186" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="204" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">s3.example.com —</text><text x="124.0" y="219" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">объектное хранилище</text></g><g><title>PostgreSQL — объектно-реляционная СУБД с открытым исходным кодом и почти сорокалетней историей развития. Соответствует требованиям ACID, использует многоверсионное управление конкурентным доступом (MVCC) и покрывает не менее 170 из 177 обязательных возможносте…</title><rect x="34" y="318" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="343" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">PostgreSQL</text></g><g><title>Istio — открытый service mesh, который прозрачно накладывается на существующие распределённые приложения и централизованно управляет взаимодействием сервисов, не требуя изменений в коде.</title><rect x="34" y="450" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="475" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Istio Ingress Gateway</text></g><g><title>Istio разделён на плоскость управления, которая хранит конфигурацию и раздаёт её прокси, и плоскость данных из прокси Envoy рядом с каждым подом.</title><rect x="229" y="450" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="319.0" y="475" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Istio Service Mesh</text></g><g><title>cert-manager — расширение Kubernetes, которое выпускает TLS-сертификаты для нагрузок в кластере и продлевает их до истечения срока. Ресурсы Issuer и ClusterIssuer описывают, у какого удостоверяющего центра и на каких условиях получать сертификат, а ресурс Cert…</title><rect x="34" y="512" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="537" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cert-manager</text></g><g><title>Zitadel — платформа управления идентификацией, реализующая отраслевые стандарты OIDC, OAuth 2.0 и SAML для входа и единой аутентификации.</title><rect x="229" y="512" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="319.0" y="537" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Zitadel</text></g><g><title>HashiCorp Vault — централизованная система управления секретами: учётными данными, ключами шифрования и сертификатами, с аудитом всех обращений.</title><rect x="34" y="574" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="599" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Vault + Agent Injector</text></g><g><title>Redis — сервер структур данных, хранящий данные в оперативной памяти. Помимо строк поддерживает хеши, списки, множества, упорядоченные множества и потоки — журнал с добавлением в конец.</title><rect x="229" y="574" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="319.0" y="599" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Redis</text></g><g><title>Apache Kafka — платформа потоковой обработки событий: публикация, хранение и обработка непрерывных потоков данных в реальном времени. События пишутся в темы, темы делятся на разделы и распределяются по брокерам ради масштабирования;</title><rect x="34" y="636" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="661" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Kafka</text></g><g><title>RabbitMQ — брокер сообщений, реализующий протокол AMQP 0-9-1 для асинхронного обмена между приложениями. Опубликованное сообщение попадает в обменник, привязки маршрутизируют его в очереди по ключу маршрутизации, а из очередей его забирают потребители.</title><rect x="229" y="636" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="319.0" y="661" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">RabbitMQ</text></g><g><title>Camunda 8 — платформа оркестрации и автоматизации бизнес-процессов с участием людей, систем и устройств. В её основе движок Zeebe, координирующий исполнение процессов в распределённой среде;</title><rect x="34" y="698" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="723" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Camunda Platform</text></g><g><title>Реестр, из которого кластер получает и Helm-чарты (в формате OCI), и образы контейнеров. Единая точка поставки: версия чарта и тег образа, указанные в манифестах, разрешаются именно здесь.</title><rect x="34" y="830" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="124.0" y="855" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">registry.example.com</text></g><g><title>Хранит манифесты, из которых Flux собирает состояние кластера. В закрытых контурах наполняется зеркалированием из основного репозитория разработки, что даёт контуру автономность: даже при отсутствии связи с внешним миром развёртывание работает из локальной коп…</title><rect x="229" y="830" width="180" height="50" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="319.0" y="855" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Git-сервер контура</text></g><g><title>Подготовка исходных САПР-моделей (IFC, NWD и другие форматы Autodesk) к просмотру и анализу: облегчённая геометрия glTF/.s3d плюс структурированный набор свойств, категорий и материалов элементов.</title><rect x="34" y="962" width="180" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="124.0" y="987" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Конвертер BIM-моделей</text></g><g><title>Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация д…</title><rect x="464" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="546.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">ams-sync</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="644" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="726.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Входная точка авторизации платформы: страницы /login, /logout, /auth/callback, /auth/error и обработка OIDC-редиректов Zitadel по Authorization Code flow. Полученные токены передаются в оболочку микрофронтендов; бизнес-данных компонент не хранит.</title><rect x="824" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="906.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">auth-flow</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="1004" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1086.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="1184" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1266.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="1364" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1446.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="464" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="546.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="644" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="726.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Административный контур платформы (srx-admin): управление пользователями, ролями, атрибутами, подразделениями, проектами и функциональными группами, а также реестром активов компании с правами доступа.</title><rect x="824" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="906.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">control-interface</text></g><g><title>Инструмент построения поперечных сечений по облакам точек и BIM-документам прямо во вьюере, с сохранением сечений, цветовой легендой документов и экспортом в DWG. Применяется при обмере и контроле построенного; серверная часть — drawings.</title><rect x="1004" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1086.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cross-section</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="1184" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1266.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Публичная страница выданной наружу ссылки на документ: получатель без учётной записи видит карточку документа и скачивает файл. Собственного бэкенда нет — данные отдаёт публичный эндпоинт documentations, срок действия ограничен JWT ссылки.</title><rect x="1364" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1446.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">document-link</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="464" y="178" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="546.5" y="203" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Серверная часть сечений: хранит поперечные сечения по поверхностям и облакам точек и задания на их экспорт, принимает результат асинхронной выгрузки по webhook. Применяется при исполнительной съёмке и контроле выполненных объёмов.</title><rect x="644" y="178" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="726.5" y="203" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">drawings</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="824" y="178" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="906.5" y="203" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</title><rect x="1004" y="178" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1086.5" y="203" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">faas</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="1184" y="178" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1266.5" y="203" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="1364" y="178" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1446.5" y="203" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="464" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="546.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="644" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="726.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="824" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="906.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат.</title><rect x="1004" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1086.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">measurements</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="1184" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1266.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="1364" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1446.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="464" y="302" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="546.5" y="327" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Выдача предписаний подрядчику по результатам строительного контроля: предписание собирается из замечаний, привязывается к договору, подрядчику и объекту, получает номер и проходит согласование по статусам.</title><rect x="644" y="302" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="726.5" y="327" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">prescriptions</text></g><g><title>Витрина проектов и карточка проекта — верхнеуровневый вход пользователя в платформу: атрибуты, местоположение, фотографии, группировки и настраиваемые вкладки с разделами-виджетами.</title><rect x="824" y="302" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="906.5" y="327" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">projects</text></g><g><title>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт.</title><rect x="1004" y="302" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1086.5" y="327" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">remarks</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="1184" y="302" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1266.5" y="327" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено).</title><rect x="1364" y="302" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1446.5" y="327" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">reviews</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="464" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="546.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Публичная страница проверки подлинности документа по QR-штампу: сканирование кода с бумажной или PDF-копии открывает карточку с документом, страницей и его актуальным состоянием, включая статус согласования. Авторизация не требуется;</title><rect x="644" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="726.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">stamp-verification</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="824" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="906.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="1004" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1086.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="1184" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1266.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="1364" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1446.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-3"><h2>T3. Внешние интеграции</h2><p class="doc">Системы за периметром контура, с которыми платформа обменивается данными, и направление зависимости. Слева — технологические сервисы, которые видят приложения; справа — то, чем эти сервисы обеспечены на стороне заказчика.
|
||
|
||
Схем подключения каталога предприятия четыре, и в конкретном контуре работает одна: каталог напрямую к провайдеру идентификации платформы; каталог через брокер Keycloak; то же с доменным входом по Kerberos, который умеет проверять только брокер; либо служба федерации AD FS поверх того же каталога. Здесь показаны все четыре сразу — при развёртывании лишние узлы из профиля убираются.</p><svg viewBox="0 0 1520 240" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="400" y1="55" x2="340" y2="55" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="400" y1="165" x2="340" y2="165" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="780" y1="55" x2="720" y2="55" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="819" y1="130" x2="681" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1160" y1="55" x2="720" y2="55" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1160" y1="55" x2="1100" y2="55" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1199" y1="90" x2="1061" y2="130" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="1199" y1="130" x2="1061" y2="90" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="20" y="20" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="180.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="20" y="130" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="180.0" y="165" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых уведомлений</text></g><g><title>Zitadel — платформа управления идентификацией, реализующая отраслевые стандарты OIDC, OAuth 2.0 и SAML для входа и единой аутентификации.</title><rect x="400" y="20" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="560.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Zitadel</text></g><g><title>SMTP — протокол передачи почты. Релей заказчика принимает исходящие сообщения от приложений контура и доставляет их адресатам; приложение аутентифицируется логином и паролем сервисной учётной записи, транспорт защищается TLS — либо сразу (порт 465), либо через…</title><rect x="400" y="130" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="560.0" y="165" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">smtp.example.com — почтовый релей</text></g><g><title>Keycloak — открытый сервер управления доступом: поддерживает OIDC, OAuth 2.0 и SAML, умеет подтягивать пользователей из LDAP и Active Directory и принимать доменный вход по Kerberos (механизм SPNEGO).</title><rect x="780" y="20" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="940.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Keycloak — брокер идентификации</text></g><g><title>Active Directory Federation Services — служба федерации Microsoft поверх домена Active Directory. Выдаёт токены по SAML 2.0, WS-Federation и OIDC, а проверку самих учётных данных оставляет домену.</title><rect x="780" y="130" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="940.0" y="165" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">AD FS — служба федерации</text></g><g><title>Active Directory — служба каталогов Microsoft: хранит учётные записи, группы и организационную структуру предприятия и отвечает на запросы по LDAP (порт 389) и LDAPS (порт 636). Для предприятия это источник истины о сотрудниках.</title><rect x="1160" y="20" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1320.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Active Directory — каталог предприятия</text></g><g><title>Kerberos — протокол сетевой аутентификации на билетах, встроенный в домен Active Directory. Центр выдачи билетов работает на контроллерах домена и слушает порт 88 по TCP и UDP.</title><rect x="1160" y="130" width="320" height="70" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1320.0" y="165" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Kerberos KDC — центр выдачи билетов</text></g></svg></section><section id="view-30"><h2>T4. Потребители: Маршрутизация HTTPS-трафика</h2><p class="doc">Сервисом пользуется 21 из 37 приложений контура.</p><svg viewBox="0 0 1180 485" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="185" y1="80" x2="453" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="205" y1="80" x2="625" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="225" y1="80" x2="797" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="244" y1="80" x2="970" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="146" y1="80" x2="108" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="162" y1="80" x2="284" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="177" y1="80" x2="460" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><line x1="600" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация HTTPS-трафика</text></g><g><title>Istio — открытый service mesh, который прозрачно накладывается на существующие распределённые приложения и централизованно управляет взаимодействием сервисов, не требуя изменений в коде.</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Istio Ingress Gateway</text></g><g><title>Istio разделён на плоскость управления, которая хранит конфигурацию и раздаёт её прокси, и плоскость данных из прокси Envoy рядом с каждым подом.</title><rect x="600" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="730.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Istio Service Mesh</text></g><g><title>Входная точка авторизации платформы: страницы /login, /logout, /auth/callback, /auth/error и обработка OIDC-редиректов Zitadel по Authorization Code flow. Полученные токены передаются в оболочку микрофронтендов; бизнес-данных компонент не хранит.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">auth-flow</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Административный контур платформы (srx-admin): управление пользователями, ролями, атрибутами, подразделениями, проектами и функциональными группами, а также реестром активов компании с правами доступа.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">control-interface</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Публичная страница выданной наружу ссылки на документ: получатель без учётной записи видит карточку документа и скачивает файл. Собственного бэкенда нет — данные отдаёт публичный эндпоинт documentations, срок действия ограничен JWT ссылки.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">document-link</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">remarks</text></g><g><title>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено).</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">reviews</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Публичная страница проверки подлинности документа по QR-штампу: сканирование кода с бумажной или PDF-копии открывает карточку с документом, страницей и его актуальным состоянием, включая статус согласования. Авторизация не требуется;</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">stamp-verification</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="210" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="400" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-31"><h2>T5. Потребители: Аутентификация OIDC</h2><p class="doc">Сервисом пользуются 25 из 37 приложений контура.</p><svg viewBox="0 0 1180 565" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="185" y1="80" x2="453" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="205" y1="80" x2="625" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="225" y1="80" x2="797" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="244" y1="80" x2="970" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="146" y1="80" x2="108" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="162" y1="80" x2="284" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="177" y1="80" x2="460" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="193" y1="80" x2="636" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="208" y1="80" x2="811" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="224" y1="80" x2="987" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="147" y1="80" x2="108" y2="470" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Zitadel — платформа управления идентификацией, реализующая отраслевые стандарты OIDC, OAuth 2.0 и SAML для входа и единой аутентификации.</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Zitadel</text></g><g><title>Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">ams-sync</text></g><g><title>Входная точка авторизации платформы: страницы /login, /logout, /auth/callback, /auth/error и обработка OIDC-редиректов Zitadel по Authorization Code flow. Полученные токены передаются в оболочку микрофронтендов; бизнес-данных компонент не хранит.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">auth-flow</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Административный контур платформы (srx-admin): управление пользователями, ролями, атрибутами, подразделениями, проектами и функциональными группами, а также реестром активов компании с правами доступа.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">control-interface</text></g><g><title>Инструмент построения поперечных сечений по облакам точек и BIM-документам прямо во вьюере, с сохранением сечений, цветовой легендой документов и экспортом в DWG. Применяется при обмере и контроле построенного; серверная часть — drawings.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cross-section</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Выдача предписаний подрядчику по результатам строительного контроля: предписание собирается из замечаний, привязывается к договору, подрядчику и объекту, получает номер и проходит согласование по статусам.</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">prescriptions</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Витрина проектов и карточка проекта — верхнеуровневый вход пользователя в платформу: атрибуты, местоположение, фотографии, группировки и настраиваемые вкладки с разделами-виджетами.</title><rect x="210" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">projects</text></g><g><title>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт.</title><rect x="400" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">remarks</text></g><g><title>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено).</title><rect x="590" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">reviews</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="780" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="970" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="20" y="470" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-32"><h2>T6. Потребители: Управление секретами</h2><p class="doc">Сервисом пользуются 26 из 37 приложений контура.</p><svg viewBox="0 0 1180 565" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="185" y1="80" x2="453" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="205" y1="80" x2="625" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="225" y1="80" x2="797" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="244" y1="80" x2="970" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="146" y1="80" x2="108" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="162" y1="80" x2="284" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="177" y1="80" x2="460" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="193" y1="80" x2="636" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="208" y1="80" x2="811" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="224" y1="80" x2="987" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="147" y1="80" x2="108" y2="470" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="160" y1="80" x2="286" y2="470" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>HashiCorp Vault — централизованная система управления секретами: учётными данными, ключами шифрования и сертификатами, с аудитом всех обращений.</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Vault + Agent Injector</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Серверная часть сечений: хранит поперечные сечения по поверхностям и облакам точек и задания на их экспорт, принимает результат асинхронной выгрузки по webhook. Применяется при исполнительной съёмке и контроле выполненных объёмов.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">drawings</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">measurements</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="210" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="400" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="590" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="780" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="970" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="20" y="470" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="210" y="470" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-33"><h2>T7. Потребители: Реляционное хранилище</h2><p class="doc">Сервисом пользуются 24 из 37 приложений контура.</p><svg viewBox="0 0 1180 485" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="185" y1="80" x2="453" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="205" y1="80" x2="625" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="225" y1="80" x2="797" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="244" y1="80" x2="970" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="146" y1="80" x2="108" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="162" y1="80" x2="284" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="177" y1="80" x2="460" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="193" y1="80" x2="636" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="208" y1="80" x2="811" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="224" y1="80" x2="987" y2="390" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>PostgreSQL — объектно-реляционная СУБД с открытым исходным кодом и почти сорокалетней историей развития. Соответствует требованиям ACID, использует многоверсионное управление конкурентным доступом (MVCC) и покрывает не менее 170 из 177 обязательных возможносте…</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">PostgreSQL</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Серверная часть сечений: хранит поперечные сечения по поверхностям и облакам точек и задания на их экспорт, принимает результат асинхронной выгрузки по webhook. Применяется при исполнительной съёмке и контроле выполненных объёмов.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">drawings</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="210" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="400" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="590" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="780" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="970" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-34"><h2>T8. Потребители: Кэш</h2><p class="doc">Сервисом пользуются 5 из 37 приложений контура.</p><svg viewBox="0 0 990 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Разделяемое короткоживущее состояние и очередь фоновых задач для сервисов с Celery-воркерами. Востребован узким кругом приложений, поэтому разворачивается точечно, а не как общая инфраструктура контура.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кэш</text></g><g><title>Redis — сервер структур данных, хранящий данные в оперативной памяти. Помимо строк поддерживает хеши, списки, множества, упорядоченные множества и потоки — журнал с добавлением в конец.</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Redis</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g></svg></section><section id="view-35"><h2>T9. Потребители: Событийная шина</h2><p class="doc">Сервисом пользуются 14 из 37 приложений контура.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Apache Kafka — платформа потоковой обработки событий: публикация, хранение и обработка непрерывных потоков данных в реальном времени. События пишутся в темы, темы делятся на разделы и распределяются по брокерам ради масштабирования;</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Kafka</text></g><g><title>Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">ams-sync</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g></svg></section><section id="view-36"><h2>T10. Потребители: Очередь сообщений AMQP</h2><p class="doc">Сервисом пользуются 12 из 37 приложений контура.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>RabbitMQ — брокер сообщений, реализующий протокол AMQP 0-9-1 для асинхронного обмена между приложениями. Опубликованное сообщение попадает в обменник, привязки маршрутизируют его в очереди по ключу маршрутизации, а из очередей его забирают потребители.</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">RabbitMQ</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Подготовка исходных САПР-моделей (IFC, NWD и другие форматы Autodesk) к просмотру и анализу: облегчённая геометрия glTF/.s3d плюс структурированный набор свойств, категорий и материалов элементов.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Конвертер BIM-моделей</text></g></svg></section><section id="view-37"><h2>T11. Потребители: Оркестрация процессов BPMN</h2><p class="doc">Сервисом пользуется 1 из 37 приложений контура.</p><svg viewBox="0 0 620 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Исполнение маршрутов согласования, описанных схемой BPMN: движок ведёт состояние процесса и раздаёт шаги воркерам прикладных сервисов. Позволяет менять логику согласования без пересборки сервисов.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Оркестрация процессов BPMN</text></g><g><title>Camunda 8 — платформа оркестрации и автоматизации бизнес-процессов с участием людей, систем и устройств. В её основе движок Zeebe, координирующий исполнение процессов в распределённой среде;</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Camunda Platform</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g></svg></section><section id="view-38"><h2>T12. Потребители: Объектное хранилище</h2><p class="doc">Сервисом пользуются 16 из 37 приложений контура.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="185" y1="80" x2="453" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="205" y1="80" x2="625" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="225" y1="80" x2="797" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Объектное хранилище — масштабируемый репозиторий для неструктурированных данных: файлов, медиа, журналов и резервных копий, без ограничений традиционной файловой системы.</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">s3.example.com — объектное хранилище</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">measurements</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Подготовка исходных САПР-моделей (IFC, NWD и другие форматы Autodesk) к просмотру и анализу: облегчённая геометрия glTF/.s3d плюс структурированный набор свойств, категорий и материалов элементов.</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Конвертер BIM-моделей</text></g></svg></section><section id="view-39"><h2>T13. Потребители: Отправка почтовых уведомлений</h2><p class="doc">Сервисом пользуются 6 из 37 приложений контура.</p><svg viewBox="0 0 1180 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых уведомлений</text></g><g><title>SMTP — протокол передачи почты. Релей заказчика принимает исходящие сообщения от приложений контура и доставляет их адресатам; приложение аутентифицируется логином и паролем сервисной учётной записи, транспорт защищается TLS — либо сразу (порт 465), либо через…</title><rect x="320" y="20" width="260" height="60" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="450.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">smtp.example.com — почтовый релей</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g></svg></section><section id="view-4"><h2>A0. Карта прикладного слоя</h2><p class="doc">Из чего состоит прикладной слой: 38 компонентов по смысловым группам. Связи здесь намеренно не показаны — на таком числе компонентов они делают схему нечитаемой; для них есть представления A1 и далее. Вложенность означает aggregation: группа объединяет компоненты, но не владеет ими.</p><svg viewBox="0 0 1348 846" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><g><title>Общие механизмы, на которые опираются все прикладные домены: единая точка входа в интерфейс, вход и права, справочник атрибутов, рабочие пространства и проекты как контейнеры данных, журнал действий, уведомления, оркестрация процессов.</title><rect x="20" y="20" width="1288" height="166" rx="4" fill="#F4F4F4" fill-opacity="0.35" stroke="#888" stroke-width="1.2"/><text x="30" y="40" font-size="13" font-weight="600" fill="#1a3a1a">Платформа</text></g><g><title>Ядро CDE: хранение документов и их версий, связи между документами, вложения, комплекты передачи, чертежи и трёхмерные модели, подготовка САПР-моделей к просмотру, проверка штампов.</title><rect x="20" y="330" width="1288" height="166" rx="4" fill="#F4F4F4" fill-opacity="0.35" stroke="#888" stroke-width="1.2"/><text x="30" y="350" font-size="13" font-weight="600" fill="#1a3a1a">Документы и общая среда данных</text></g><g><title>Работа с несоответствиями: инспекции и чек-листы, замечания, проблемы, запросы информации, ревью, предписания, сравнение редакций чертежей.</title><rect x="20" y="516" width="1288" height="166" rx="4" fill="#F4F4F4" fill-opacity="0.35" stroke="#888" stroke-width="1.2"/><text x="30" y="536" font-size="13" font-weight="600" fill="#1a3a1a">Контроль качества</text></g><g><title>Планирование и учёт: календарно-сетевые планы, договоры и обязательства по ним, справочник ресурсов, рабочие заметки.</title><rect x="20" y="206" width="1288" height="104" rx="4" fill="#F4F4F4" fill-opacity="0.35" stroke="#888" stroke-width="1.2"/><text x="30" y="226" font-size="13" font-weight="600" fill="#1a3a1a">Управление проектом</text></g><g><title>Данные, приходящие со стройплощадки: замеры, привязка к местности, сечения, а также обработка тяжёлых входных файлов.</title><rect x="20" y="702" width="1288" height="104" rx="4" fill="#F4F4F4" fill-opacity="0.35" stroke="#888" stroke-width="1.2"/><text x="30" y="722" font-size="13" font-weight="600" fill="#1a3a1a">Полевые данные</text></g><g><title>Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация д…</title><rect x="34" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">ams-sync</text></g><g><title>Входная точка авторизации платформы: страницы /login, /logout, /auth/callback, /auth/error и обработка OIDC-редиректов Zitadel по Authorization Code flow. Полученные токены передаются в оболочку микрофронтендов; бизнес-данных компонент не хранит.</title><rect x="214" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">auth-flow</text></g><g><title>Административный контур платформы (srx-admin): управление пользователями, ролями, атрибутами, подразделениями, проектами и функциональными группами, а также реестром активов компании с правами доступа.</title><rect x="394" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="476.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">control-interface</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="574" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="656.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="754" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="836.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</title><rect x="934" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1016.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">faas</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="1114" y="54" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1196.5" y="79" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="34" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="214" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Витрина проектов и карточка проекта — верхнеуровневый вход пользователя в платформу: атрибуты, местоположение, фотографии, группировки и настраиваемые вкладки с разделами-виджетами.</title><rect x="394" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="476.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">projects</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="574" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="656.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="754" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="836.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="934" y="116" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1016.5" y="141" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g><g><title>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</title><rect x="34" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">contracts</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="214" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="394" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="476.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="574" y="240" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="656.5" y="265" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="34" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="214" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Подготовка исходных САПР-моделей (IFC, NWD и другие форматы Autodesk) к просмотру и анализу: облегчённая геометрия glTF/.s3d плюс структурированный набор свойств, категорий и материалов элементов.</title><rect x="394" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="476.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Конвертер BIM-моделей</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="574" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="656.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Публичная страница выданной наружу ссылки на документ: получатель без учётной записи видит карточку документа и скачивает файл. Собственного бэкенда нет — данные отдаёт публичный эндпоинт documentations, срок действия ограничен JWT ссылки.</title><rect x="754" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="836.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">document-link</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="934" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1016.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Серверная часть сечений: хранит поперечные сечения по поверхностям и облакам точек и задания на их экспорт, принимает результат асинхронной выгрузки по webhook. Применяется при исполнительной съёмке и контроле выполненных объёмов.</title><rect x="1114" y="364" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1196.5" y="389" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">drawings</text></g><g><title>Публичная страница проверки подлинности документа по QR-штампу: сканирование кода с бумажной или PDF-копии открывает карточку с документом, страницей и его актуальным состоянием, включая статус согласования. Авторизация не требуется;</title><rect x="34" y="426" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="451" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">stamp-verification</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="214" y="426" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="451" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="34" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="214" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="394" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="476.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="574" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="656.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Выдача предписаний подрядчику по результатам строительного контроля: предписание собирается из замечаний, привязывается к договору, подрядчику и объекту, получает номер и проходит согласование по статусам.</title><rect x="754" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="836.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">prescriptions</text></g><g><title>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт.</title><rect x="934" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1016.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">remarks</text></g><g><title>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено).</title><rect x="1114" y="550" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1196.5" y="575" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">reviews</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="34" y="612" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="637" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Инструмент построения поперечных сечений по облакам точек и BIM-документам прямо во вьюере, с сохранением сечений, цветовой легендой документов и экспортом в DWG. Применяется при обмере и контроле построенного; серверная часть — drawings.</title><rect x="34" y="736" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="116.5" y="761" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cross-section</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="214" y="736" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="296.5" y="761" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат.</title><rect x="394" y="736" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="476.5" y="761" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">measurements</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="574" y="736" width="165" height="50" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="656.5" y="761" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g></svg></section><section id="view-5"><h2>A1. Ядро прикладного слоя</h2><p class="doc">Восемь сервисов с наибольшим числом связей и вызовы между ними. Стрелка идёт от вызываемого к вызывающему (serving): кого лишишься — тот и сломается. Всего в контуре 86 межсервисных связей.</p><svg viewBox="0 0 1040 715" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="595" y1="74" x2="711" y2="109" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="547" y1="75" x2="878" y2="320" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="473" y1="75" x2="142" y2="320" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="525" y1="75" x2="781" y2="532" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="711" y1="109" x2="595" y2="74" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="811" y1="163" x2="900" y2="320" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="711" y1="162" x2="190" y2="321" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="711" y1="136" x2="309" y2="136" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="796" y1="163" x2="796" y2="532" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="759" y1="163" x2="261" y2="532" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="878" y1="320" x2="547" y2="75" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="830" y1="348" x2="190" y2="348" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="796" y1="532" x2="796" y2="163" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="781" y1="532" x2="525" y2="75" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="811" y1="532" x2="900" y2="375" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="711" y1="533" x2="190" y2="374" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="510" y1="620" x2="510" y2="75" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="547" y1="620" x2="878" y2="375" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="473" y1="620" x2="142" y2="375" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="495" y1="620" x2="239" y2="163" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="239" y1="532" x2="495" y2="75" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="309" y1="533" x2="830" y2="374" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="209" y1="532" x2="120" y2="375" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="224" y1="532" x2="224" y2="163" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="309" y1="560" x2="711" y2="560" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="309" y1="136" x2="711" y2="136" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="309" y1="162" x2="830" y2="321" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="425" y="20" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="510.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="711" y="108" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="796.0" y="136" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="830" y="320" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="915.0" y="348" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="711" y="532" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="796.0" y="560" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="425" y="620" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="510.0" y="648" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="139" y="532" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="224.0" y="560" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="20" y="320" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="348" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="139" y="108" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="224.0" y="136" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g></svg></section><section id="view-6"><h2>A2. Зависят от: django</h2><p class="doc">К django обращаются 18 сервисов.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="80" x2="970" y2="238" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="145" y1="80" x2="109" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="165" y1="80" x2="281" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="185" y1="80" x2="453" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="205" y1="80" x2="625" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="225" y1="80" x2="797" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="244" y1="80" x2="970" y2="310" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">faas</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">mapper</text></g><g><title>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">measurements</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-7"><h2>A3. Зависят от: documentations</h2><p class="doc">К documentations обращаются 11 сервисов.</p><svg viewBox="0 0 1180 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="226" y1="80" x2="605" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="253" y1="80" x2="780" y2="233" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">faas</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-8"><h2>A4. Зависят от: eav</h2><p class="doc">К eav обращаются 9 сервисов.</p><svg viewBox="0 0 1180 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="171" y1="80" x2="276" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="198" y1="80" x2="441" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">faas</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g></svg></section><section id="view-9"><h2>A5. Зависят от: resources</h2><p class="doc">К resources обращаются 7 сервисов.</p><svg viewBox="0 0 1180 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="143" y1="80" x2="111" y2="230" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g></svg></section><section id="view-10"><h2>A6. Зависят от: processing</h2><p class="doc">К processing обращаются 6 сервисов.</p><svg viewBox="0 0 1180 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g></svg></section><section id="view-11"><h2>A7. Зависят от: iam</h2><p class="doc">К iam обращаются 6 сервисов.</p><svg viewBox="0 0 1180 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="73" x2="780" y2="162" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="280" y1="68" x2="970" y2="166" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="970" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g></svg></section><section id="view-12"><h2>A8. Зависят от: flows</h2><p class="doc">К flows обращаются 4 сервиса.</p><svg viewBox="0 0 800 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g></svg></section><section id="view-13"><h2>A9. Зависят от: workspaces</h2><p class="doc">К workspaces обращаются 4 сервиса.</p><svg viewBox="0 0 800 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="274" y1="80" x2="590" y2="157" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g></svg></section><section id="view-14"><h2>A10. Зависят от: system-log</h2><p class="doc">К system-log обращаются 3 сервиса.</p><svg viewBox="0 0 610 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g></svg></section><section id="view-15"><h2>A11. Зависят от: bim</h2><p class="doc">К bim обращаются 3 сервиса.</p><svg viewBox="0 0 610 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g></svg></section><section id="view-16"><h2>A12. Зависят от: pm</h2><p class="doc">К pm обращаются 3 сервиса.</p><svg viewBox="0 0 610 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="139" y1="80" x2="115" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="184" y1="80" x2="264" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="229" y1="80" x2="413" y2="150" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="20" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="150.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g></svg></section><section id="view-17"><h2>P1. Паспорт: documentations</h2><p class="doc">Что нужно, чтобы documentations работал: 7 технологических сервисов и 15 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Кто зависит от самого documentations — представление A3.</p><svg viewBox="0 0 1180 565" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="187" y1="75" x2="500" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="345" y1="75" x2="536" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="503" y1="75" x2="571" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="661" y1="75" x2="606" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="818" y1="75" x2="641" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="976" y1="75" x2="676" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="142" x2="460" y2="188" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="315" x2="476" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="310" x2="521" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="310" x2="565" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="310" x2="610" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="806" y1="310" x2="655" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="314" x2="699" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="169" y1="390" x2="520" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="334" y1="390" x2="547" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="499" y1="390" x2="575" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="664" y1="390" x2="602" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="829" y1="390" x2="630" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="993" y1="390" x2="657" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="151" y1="470" x2="539" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="323" y1="470" x2="559" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="495" y1="470" x2="579" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="460" y="180" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="210" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="20" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Серверная часть сечений: хранит поперечные сечения по поверхностям и облакам точек и задания на их экспорт, принимает результат асинхронной выгрузки по webhook. Применяется при исполнительной съёмке и контроле выполненных объёмов.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">drawings</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX.</title><rect x="210" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">inspections</text></g><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="400" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="590" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт.</title><rect x="780" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">remarks</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="970" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g><g><title>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log;</title><rect x="20" y="470" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">subscriptions</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="210" y="470" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="400" y="470" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-18"><h2>P2. Паспорт: flows</h2><p class="doc">Что нужно, чтобы flows работал: 7 технологических сервисов и 8 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Кто зависит от самого flows — представление A8.</p><svg viewBox="0 0 1180 485" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="187" y1="75" x2="500" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="345" y1="75" x2="536" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="503" y1="75" x2="571" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="661" y1="75" x2="606" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="818" y1="75" x2="641" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="976" y1="75" x2="676" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="142" x2="460" y2="188" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="315" x2="476" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="310" x2="521" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="310" x2="565" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="310" x2="610" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="806" y1="310" x2="655" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="314" x2="699" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="169" y1="390" x2="520" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="334" y1="390" x2="547" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="460" y="180" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="210" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="20" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="120" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых</text><text x="105.0" y="135" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">уведомлений</text></g><g><title>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">checklists</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="210" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g></svg></section><section id="view-19"><h2>P3. Паспорт: issues</h2><p class="doc">Что нужно, чтобы issues работал: 9 технологических сервисов и 7 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у issues меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 1180 485" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="187" y1="75" x2="500" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="345" y1="75" x2="536" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="503" y1="75" x2="571" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="661" y1="75" x2="606" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="818" y1="75" x2="641" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="976" y1="75" x2="676" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="142" x2="460" y2="188" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="380" y1="151" x2="483" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="520" y1="155" x2="552" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="315" x2="476" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="310" x2="521" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="310" x2="565" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="310" x2="610" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="806" y1="310" x2="655" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="314" x2="699" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="169" y1="390" x2="520" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="460" y="180" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="210" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Разделяемое короткоживущее состояние и очередь фоновых задач для сервисов с Celery-воркерами. Востребован узким кругом приложений, поэтому разворачивается точечно, а не как общая инфраструктура контура.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кэш</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="20" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="210" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="400" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="120" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых</text><text x="485.0" y="135" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">уведомлений</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="20" y="390" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="418" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g></svg></section><section id="view-20"><h2>P4. Паспорт: comparisons</h2><p class="doc">Что нужно, чтобы comparisons работал: 3 технологических сервиса и 6 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у comparisons меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 1180 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="190" y1="62" x2="460" y2="108" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="380" y1="71" x2="483" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="520" y1="75" x2="552" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="235" x2="476" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="230" x2="521" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="230" x2="565" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="230" x2="610" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="806" y1="230" x2="655" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="234" x2="699" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и ве…</title><rect x="460" y="100" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="130" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">comparisons</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="970" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-21"><h2>P5. Паспорт: django</h2><p class="doc">Что нужно, чтобы django работал: 8 технологических сервисов и 6 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Кто зависит от самого django — представление A2.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="187" y1="75" x2="500" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="345" y1="75" x2="536" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="503" y1="75" x2="571" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="661" y1="75" x2="606" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="818" y1="75" x2="641" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="976" y1="75" x2="676" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="142" x2="460" y2="188" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="380" y1="151" x2="483" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="315" x2="476" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="310" x2="521" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="310" x2="565" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="310" x2="610" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="806" y1="310" x2="655" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="314" x2="699" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="460" y="180" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="210" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Разделяемое короткоживущее состояние и очередь фоновых задач для сервисов с Celery-воркерами. Востребован узким кругом приложений, поэтому разворачивается точечно, а не как общая инфраструктура контура.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кэш</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="20" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="210" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами).</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">bim</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">measurements</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="780" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="970" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="1055.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-22"><h2>P6. Паспорт: faas</h2><p class="doc">Что нужно, чтобы faas работал: 0 технологических сервисов и 5 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у faas меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 990 245" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="189" y1="150" x2="403" y2="80" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="338" y1="150" x2="448" y2="80" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="487" y1="150" x2="493" y2="80" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="636" y1="150" x2="537" y2="80" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="785" y1="150" x2="582" y2="80" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</title><rect x="365" y="20" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="495.0" y="50" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">faas</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="400" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено).</title><rect x="590" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">reviews</text></g><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="780" y="150" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="178" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g></svg></section><section id="view-23"><h2>P7. Паспорт: transmittal</h2><p class="doc">Что нужно, чтобы transmittal работал: 6 технологических сервисов и 5 прикладных сервисов. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у transmittal меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 1180 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="190" y1="62" x2="460" y2="108" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="380" y1="71" x2="483" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="520" y1="75" x2="552" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="647" y1="75" x2="621" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="780" y1="73" x2="690" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="63" x2="720" y2="107" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="235" x2="476" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="230" x2="521" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="230" x2="565" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="230" x2="610" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="806" y1="230" x2="655" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF;</title><rect x="460" y="100" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="130" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">transmittal</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых</text><text x="1055.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">уведомлений</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="780" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="865.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g></svg></section><section id="view-24"><h2>P8. Паспорт: message-hub</h2><p class="doc">Что нужно, чтобы message-hub работал: 5 технологических сервисов и 4 прикладных сервиса. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у message-hub меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 990 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="190" y1="65" x2="365" y2="102" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="362" y1="75" x2="422" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="488" y1="75" x2="491" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="615" y1="75" x2="560" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="780" y1="66" x2="625" y2="101" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="189" y1="230" x2="403" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="338" y1="230" x2="448" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="487" y1="230" x2="493" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="636" y1="230" x2="537" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов.</title><rect x="365" y="100" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="495.0" y="130" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">message-hub</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Разделяемое короткоживущее состояние и очередь фоновых задач для сервисов с Celery-воркерами. Востребован узким кругом приложений, поэтому разворачивается точечно, а не как общая инфраструктура контура.</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кэш</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">issues</text></g><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g></svg></section><section id="view-25"><h2>P9. Паспорт: pm</h2><p class="doc">Что нужно, чтобы pm работал: 8 технологических сервисов и 4 прикладных сервиса. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Кто зависит от самого pm — представление A12.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="187" y1="75" x2="500" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="345" y1="75" x2="536" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="503" y1="75" x2="571" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="661" y1="75" x2="606" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="818" y1="75" x2="641" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="976" y1="75" x2="676" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="142" x2="460" y2="188" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="380" y1="151" x2="483" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="315" x2="476" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="310" x2="521" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="310" x2="565" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="310" x2="610" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения.</title><rect x="460" y="180" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="210" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">pm</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Разделяемое короткоживущее состояние и очередь фоновых задач для сервисов с Celery-воркерами. Востребован узким кругом приложений, поэтому разворачивается точечно, а не как общая инфраструктура контура.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Кэш</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="20" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="210" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="128" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g></svg></section><section id="view-26"><h2>P10. Паспорт: processing</h2><p class="doc">Что нужно, чтобы processing работал: 5 технологических сервисов и 4 прикладных сервиса. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Кто зависит от самого processing — представление A6.</p><svg viewBox="0 0 990 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="190" y1="65" x2="365" y2="102" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="362" y1="75" x2="422" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="488" y1="75" x2="491" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="615" y1="75" x2="560" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="780" y1="66" x2="625" y2="101" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="189" y1="230" x2="403" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="338" y1="230" x2="448" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="487" y1="230" x2="493" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="636" y1="230" x2="537" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ).</title><rect x="365" y="100" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="495.0" y="130" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">processing</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы;</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">iam</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="590" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g></svg></section><section id="view-27"><h2>P11. Паспорт: rfi</h2><p class="doc">Что нужно, чтобы rfi работал: 7 технологических сервисов и 4 прикладных сервиса. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у rfi меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 1180 405" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="187" y1="75" x2="500" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="345" y1="75" x2="536" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="503" y1="75" x2="571" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="661" y1="75" x2="606" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="818" y1="75" x2="641" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="976" y1="75" x2="676" y2="180" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="142" x2="460" y2="188" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="315" x2="476" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="310" x2="521" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="310" x2="565" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="657" y1="310" x2="610" y2="240" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения.</title><rect x="460" y="180" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="210" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">rfi</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Отправка исходящей почты приложениями контура. Собственного почтового сервера платформа не содержит — сервис реализуется релеем заказчика. Через него уходят уведомления о назначенных задачах, замечаниях, запросах и отправленных трансмитталах.</title><rect x="20" y="100" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="120" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Отправка почтовых</text><text x="105.0" y="135" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">уведомлений</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="20" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="210" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g><g><title>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД.</title><rect x="400" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">eav</text></g><g><title>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа.</title><rect x="590" y="310" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="675.0" y="338" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">resources</text></g></svg></section><section id="view-28"><h2>P12. Паспорт: cde</h2><p class="doc">Что нужно, чтобы cde работал: 5 технологических сервисов и 3 прикладных сервиса. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у cde меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 990 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="190" y1="65" x2="365" y2="102" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="362" y1="75" x2="422" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="488" y1="75" x2="491" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="615" y1="75" x2="560" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="780" y1="66" x2="625" y2="101" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="189" y1="230" x2="403" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="338" y1="230" x2="448" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="487" y1="230" x2="493" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов д…</title><rect x="365" y="100" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="495.0" y="130" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">cde</text></g><g><title>Публикация приложений наружу: терминация TLS, разбор внешнего домена и пути, направление запроса нужному сервису, проверка токена на границе. Сервисом пользуются только те приложения, у которых есть внешний интерфейс;</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Маршрутизация</text><text x="105.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">HTTPS-трафика</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Исполнение маршрутов согласования, описанных схемой BPMN: движок ведёт состояние процесса и раздаёт шаги воркерам прикладных сервисов. Позволяет менять логику согласования без пересборки сервисов.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="40" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Оркестрация процессов</text><text x="675.0" y="55" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">BPMN</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего.</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">flows</text></g><g><title>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">system-log</text></g><g><title>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">workspaces</text></g></svg></section><section id="view-29"><h2>P13. Паспорт: notes</h2><p class="doc">Что нужно, чтобы notes работал: 6 технологических сервисов и 3 прикладных сервиса. Стрелки, как и везде, идут от обслуживающего к обслуживаемому. Входящих вызовов у notes меньше 3, отдельного представления для них нет.</p><svg viewBox="0 0 1180 325" xmlns="http://www.w3.org/2000/svg" font-family="system-ui, sans-serif">
|
||
<defs>
|
||
<marker id="open" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8" fill="none" stroke="#555" stroke-width="1.4"/></marker>
|
||
<marker id="hollow" markerWidth="14" markerHeight="14" refX="11" refY="5" orient="auto">
|
||
<path d="M0,0 L11,5 L0,10 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
<marker id="filled" markerWidth="12" markerHeight="12" refX="10" refY="4" orient="auto">
|
||
<path d="M0,0 L10,4 L0,8 Z" fill="#555"/></marker>
|
||
<marker id="diamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#555"/></marker>
|
||
<marker id="ball" markerWidth="10" markerHeight="10" refX="2" refY="5" orient="auto">
|
||
<circle cx="4" cy="5" r="3.2" fill="#555"/></marker>
|
||
<marker id="odiamond" markerWidth="16" markerHeight="12" refX="1" refY="5" orient="auto">
|
||
<path d="M0,5 L6,1 L13,5 L6,9 Z" fill="#fff" stroke="#555" stroke-width="1.2"/></marker>
|
||
</defs><line x1="190" y1="62" x2="460" y2="108" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="380" y1="71" x2="483" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="520" y1="75" x2="552" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="647" y1="75" x2="621" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="780" y1="73" x2="690" y2="100" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="970" y1="63" x2="720" y2="107" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="190" y1="235" x2="476" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="359" y1="230" x2="521" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><line x1="508" y1="230" x2="565" y2="160" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="none" marker-end="url(#open)" /><g><title>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке;</title><rect x="460" y="100" width="260" height="60" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="590.0" y="130" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">notes</text></g><g><title>Проверка личности пользователя и выдача токена, по которому сервисы принимают решение о доступе. Самый массово используемый сервис контура.</title><rect x="20" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="105.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Аутентификация OIDC</text></g><g><title>Выдача приложениям реквизитов доступа к базам, брокерам и хранилищам во время запуска пода. Практически универсальная зависимость: почти каждый сервис с состоянием стартует только после успешного получения секретов, поэтому недоступность этого сервиса останавл…</title><rect x="210" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="295.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Управление секретами</text></g><g><title>Хранение структурированных данных доменных областей: карточек, связей, статусов, журналов. У каждого сервиса своя база, общей схемы нет — обмен между сервисами идёт через API и шины, а не через общие таблицы.</title><rect x="400" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="485.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Реляционное хранилище</text></g><g><title>Асинхронная публикация событий с сохранением журнала и несколькими независимыми потребителями. Используется там, где важен факт изменения и возможность его повторно прочитать: аудит, уведомления, синхронизация состояний между доменами.</title><rect x="590" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="675.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Событийная шина</text></g><g><title>Адресная доставка задач фоновым обработчикам с подтверждением и повторами. Обслуживает длительные операции — конвертацию, выгрузки, рассылки, — которые нельзя выполнять внутри HTTP-запроса.</title><rect x="780" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="865.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Очередь сообщений AMQP</text></g><g><title>Хранение и выдача файлов: документов, чертежей, моделей, вложений и производных представлений. Базовый сервис для всех документоориентированных областей платформы — в реляционных базах лежат только метаданные, содержимое всегда здесь.</title><rect x="970" y="20" width="170" height="55" rx="4" fill="#C9E7B7" fill-opacity="1" stroke="#4a7f3a" stroke-width="1.2"/><text x="1055.0" y="48" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Объектное хранилище</text></g><g><title>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»).</title><rect x="20" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="105.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">attachments</text></g><g><title>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий.</title><rect x="210" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="295.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">django</text></g><g><title>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации.</title><rect x="400" y="230" width="170" height="55" rx="4" fill="#B5FFFF" fill-opacity="1" stroke="#2a7f8f" stroke-width="1.2"/><text x="485.0" y="258" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">documentations</text></g></svg></section>
|
||
<section id="app-layer"><h2>Прикладной слой: описания компонентов</h2><p class="doc">38 компонентов в том же порядке, что и на карте A0. Описания выведены не из манифестов контура, а из исходного кода компонентных репозиториев, и потому проверяются чтением кода, а не сверкой с конфигурацией. То же описание всплывает подсказкой, если задержать курсор на блоке любой схемы.</p><h3>Платформа</h3><p class="doc">Общие механизмы, на которые опираются все прикладные домены: единая точка входа в интерфейс, вход и права, справочник атрибутов, рабочие пространства и проекты как контейнеры данных, журнал действий, уведомления, оркестрация процессов.</p><p class="doc">Почти все связи прикладного слоя ведут сюда, поэтому изменения в этой группе стоят дороже всего: отказ любого её компонента виден сразу во всех доменах, тогда как отказ прикладного сервиса ограничен своей областью.</p><dl class="apps"><dt>ams-sync</dt><dd><p>Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация доменных сервисов. Работает консьюмером Kafka-топика, отдельный консольный режим использовался для первичной массовой миграции пользователей и компаний. Входящих вызовов не принимает.</p><p>Стек: Python · консьюмер Kafka (kafka-python) · requests с ретраями · Zitadel Management API.</p></dd><dt>auth-flow</dt><dd><p>Входная точка авторизации платформы: страницы <code>/login</code>, <code>/logout</code>, <code>/auth/callback</code>, <code>/auth/error</code> и обработка OIDC-редиректов Zitadel по Authorization Code flow. Полученные токены передаются в оболочку микрофронтендов; бизнес-данных компонент не хранит.</p><p>Стек: TypeScript · React · Webpack 5 · внутренний sdk-js поверх oidc-client · Zitadel (OIDC) · oauth2-proxy в инфраструктуре.</p></dd><dt>control-interface</dt><dd><p>Административный контур платформы (srx-admin): управление пользователями, ролями, атрибутами, подразделениями, проектами и функциональными группами, а также реестром активов компании с правами доступа. Отдельный крупный сценарий — пакетный импорт активов из XLSX со статусами заданий и отчётами об ошибках.</p><p>Стек: TypeScript · React · MobX · Material-UI и ui-kit · Webpack 5 Module Federation · монорепозиторий npm-workspaces; собственного хранилища нет.</p></dd><dt>django</dt><dd><p>Легаси-монолит и ядро продукта: компании, пользователи, роли и подрядчики, объекты строительства, миссии аэрофотосъёмки, ортофотопланы, облака точек и поверхности, измерения, аналитика с дашбордами и метриками, карта, ТОиР, уведомления и журнал действий. Здесь же — основной SPA-хост, в который встраиваются все микрофронтенды платформы.</p><p>Стек: Python · Django + DRF · django-guardian · channels · Celery + Redis · Kafka · PostgreSQL, ClickHouse, MongoDB, S3 · фронтенд на TypeScript/React/MobX (Module Federation, PWA).</p></dd><dt>eav</dt><dd><p>Универсальная модель «сущность — атрибут — значение»: пользовательские атрибуты, их типы, схемы и справочники, расширяющие любые доменные объекты без изменения схемы БД. Второй блок — иерархический классификатор активов объекта (WBS-дерево) с импортом и экспортом через Excel.</p><p>Стек: Python · Django + DRF · django-filter · Celery · PostgreSQL (в том числе сырой SQL для иерархии) · pandas + openpyxl · контракты protobuf.</p></dd><dt>faas</dt><dd><p>Логическое имя слоя эфемерных вычислительных функций — одноразовых job-контейнеров, запускаемых движком workflow поверх Kubernetes. Отдельного репозитория и кодовой базы не найдено; значение компонента требует уточнения у команды платформы.</p><p>Стек: Предположительно Kubernetes Job и воркеры RabbitMQ поверх Docker-образов на Python и Go; собственной кодовой базы не найдено, стек требует подтверждения.</p></dd><dt>flows</dt><dd><p>Маршруты согласования проектной документации: маршрут из шагов с назначенными согласующими, ревью документов, решения участников, сроки по рабочим дням и очередь задач согласующего. Публикует события согласования в Kafka и умеет автоматически инициировать трансмиттал после завершения маршрута.</p><p>Стек: Python · FastAPI · SQLAlchemy + Alembic · PostgreSQL (JSONB) · Celery · FastStream + Kafka · фронтенд на TypeScript/React/MobX (rsbuild + Module Federation).</p></dd><dt>iam</dt><dd><p>Платформенный IAM: иерархия ресурсов, компании, пользователи, сервисные аккаунты и права по модели ReBAC (SpiceDB). Отвечает на вопросы «какие права у пользователя на ресурс» и «какие ресурсы доступны пользователю», на которые опираются остальные сервисы; пользователи заводятся во внешнем Zitadel.</p><p>Стек: Go, гексагональная архитектура · SpiceDB по gRPC с собственным Postgres-datastore · PostgreSQL · S3 · Kafka · Zitadel Management API · Helm с Istio.</p></dd><dt>message-hub</dt><dd><p>Событийный хаб домена планирования: принимает события Kafka и выполняет побочные действия — пересчёт аналитики, обновление атрибутов, письма, экспорты, системный журнал, автопланирование, синхронизацию проектов и ресурсов. Транслирует изменения в браузер по WebSocket, обеспечивая живое обновление доски проекта.</p><p>Стек: Python · FastStream + Kafka (aiokafka) · python-socketio с Redis · SQLAlchemy Core с сырым SQL к PostgreSQL · S3 · Jinja2 для писем.</p></dd><dt>projects</dt><dd><p>Витрина проектов и карточка проекта — верхнеуровневый вход пользователя в платформу: атрибуты, местоположение, фотографии, группировки и настраиваемые вкладки с разделами-виджетами. Агрегирует показатели остальных модулей, включая встраивание внешней аналитики.</p><p>Стек: Python · FastAPI · async SQLAlchemy 2.0 + Alembic · PostgreSQL (JSONB) · S3 · фронтенд на React/MobX с TanStack Query и leaflet · встраивание Superset.</p></dd><dt>subscriptions</dt><dd><p>Подписки на изменения объектов и рассылка уведомлений по e-mail, SMTP/Mailgun и Telegram с периодичностью от мгновенной до еженедельной. Источник изменений — не брокер, а периодический опрос журнала system-log; тексты формируются по шаблонам, привязанным к модели и типу события.</p><p>Стек: Python · Django + DRF · PostgreSQL с PostGIS и TimescaleDB · SMTP и Mailgun · python-telegram-bot · Jinja2 · OpenTelemetry.</p></dd><dt>system-log</dt><dd><p>Централизованный журнал системных событий (аудит) всей платформы: кто, что и над каким объектом сделал, с метаданными, ресурсом и компанией. Обеспечивает прослеживаемость изменений и служит источником событий для механизма подписок и уведомлений.</p><p>Стек: Go · Fiber · pgx + squirrel с миграциями на старте · PostgreSQL · Kafka через sarama (опционально) · отдельный воркер с cron · OpenTelemetry.</p></dd><dt>workspaces</dt><dd><p>Рабочее пространство — сцена, в которой пользователь одновременно работает с BIM-моделями, облаками точек, PDF-чертежами и панорамами объекта, настраивает отображение и сохраняет именованные состояния. Поддерживает установку прикладных модулей компании как федеративных приложений внутри сцены и архивирование данных при закрытии этапов.</p><p>Стек: Go (gorilla/mux, go-pg, Prometheus, Sentry, JWT на RSA) · PostgreSQL · фронтенд на TypeScript/React/MobX с viewer (Module Federation), кеш в IndexedDB · тесты Cypress и Jest.</p></dd></dl><h3>Управление проектом</h3><p class="doc">Планирование и учёт: календарно-сетевые планы, договоры и обязательства по ним, справочник ресурсов, рабочие заметки.</p><p class="doc">Группа потребляет данные остальных доменов чаще, чем отдаёт: план и договор ссылаются на документы, замечания и полевые измерения, обратные ссылки редки.</p><dl class="apps"><dt>contracts</dt><dd><p>Реестр договоров компании: номер, подрядчик, сроки, стоимость, привязка к проекту или объекту. Даёт коммерческий контур поверх производственных данных; на договор, в частности, ссылается предписание.</p><p>Стек: Go · Fiber v3 · pgx + squirrel · PostgreSQL (JSONB) · фронтенд на TypeScript/React/MobX по Feature-Sliced Design.</p></dd><dt>notes</dt><dd><p>Заметки и примечания на объектах проекта: пометка на 2D-чертеже или в 3D-модели со сроком, цветом, фотографиями, вложениями и связями с сущностями разных сервисов. Поддерживает отправку скриншота вида и формирование документа по заметке; применяется при авторском надзоре и строительном контроле.</p><p>Стек: Python · FastAPI · SQLAlchemy + Alembic · PostgreSQL с полнотекстовым поиском · фронтенд на TypeScript/React/MobX/Material-UI.</p></dd><dt>pm</dt><dd><p>Календарно-сетевое планирование: иерархия задач, длительности, связи предшествования, календари, базовые планы, факт и проценты выполнения, ресурсы и назначения. Импорт графиков из MS Project, Primavera и XLSX, работа на диаграмме Ганта, экспорт в PDF, асинхронное автопланирование и пересчёт.</p><p>Стек: Python · Django 5 + DRF, целевой стиль — FastAPI с async SQLAlchemy · PostgreSQL с триггерами · ClickHouse · S3 · Celery + Redis · Kafka · pandas, парсеры MS Project и Primavera · фронтенд на React/MobX.</p></dd><dt>resources</dt><dd><p>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа. Идентификатор ресурса служит сквозным ключом проекта во всех остальных сервисах, а сам реестр — общей точкой проверки прав, поэтому это один из самых востребованных компонентов контура. Интеграция только синхронная, по HTTP.</p><p>Стек: Python · Django + DRF · django-filter · PostgreSQL с ltree и PostGIS · фронтенд в отдельном репозитории.</p></dd></dl><h3>Документы и общая среда данных</h3><p class="doc">Ядро CDE: хранение документов и их версий, связи между документами, вложения, комплекты передачи, чертежи и трёхмерные модели, подготовка САПР-моделей к просмотру, проверка штампов.</p><p class="doc">Самая нагруженная группа по числу входящих ссылок — на документ ссылается почти каждый прикладной сценарий. Хранилище документов здесь же является и самым связанным компонентом всей платформы.</p><dl class="apps"><dt>attachments</dt><dd><p>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»). Скачивание идёт по временным подписанным ссылкам напрямую из объектного хранилища.</p><p>Стек: Python · FastAPI · PostgreSQL (psycopg2, сырой SQL; Alembic только для схемы) · S3 через boto3 · OpenTelemetry.</p></dd><dt>bim</dt><dd><p>Ядро работы с информационными моделями: хранит BIM-модели проекта, дерево элементов, их свойства и статусную модель хода строительства (в том числе корпоративные шаблоны статусов с цветами и переходами). Питает раскраску моделей во вьюере, фильтрацию элементов и отчётность о проценте готовности.</p><p>Стек: Go (go-pg, gorilla/mux, Prometheus) и легаси-часть на Python/Flask · PostgreSQL с шардированием и партиционированием · S3 · джоб metadata-inserter на Go.</p></dd><dt>cde</dt><dd><p>Среда общих данных (CDE): документы, версии, комплекты, права, штампы, QR-метки, электронные подписи, публичные ссылки и changelog. Публикует доменные события через transactional outbox в Kafka и постепенно принимает на себя мутирующие вызовы legacy-сервисов документации.</p><p>Стек: Go (Fiber, go-pg) · PostgreSQL · S3/MinIO · Valkey · Kafka (transactional outbox) · Camunda 8 / Zeebe · OpenTelemetry.</p></dd><dt>document-link</dt><dd><p>Публичная страница выданной наружу ссылки на документ: получатель без учётной записи видит карточку документа и скачивает файл. Собственного бэкенда нет — данные отдаёт публичный эндпоинт documentations, срок действия ограничен JWT ссылки.</p><p>Стек: TypeScript · Next.js (app router) · React · SWR · Tailwind; собственного бэкенда нет.</p></dd><dt>documentations</dt><dd><p>Рабочая среда документации проекта: диски, дерево папок, документы с версиями, страницами, атрибутами, правами и связями; штампы, ЭЦП, подписки, корзина, публичные ссылки. Отвечает также за постановку загруженных инженерных форматов в очередь конвертации. Домен находится в миграции — мутирующие операции проксируются в cde.</p><p>Стек: Go (go-pg, Fiber, swaggo) · PostgreSQL · S3 с многочастной загрузкой · Valkey · RabbitMQ · Mailgun/SMTP · фронтенд на TypeScript/React/MobX.</p></dd><dt>drawings</dt><dd><p>Серверная часть сечений: хранит поперечные сечения по поверхностям и облакам точек и задания на их экспорт, принимает результат асинхронной выгрузки по webhook. Применяется при исполнительной съёмке и контроле выполненных объёмов.</p><p>Стек: Go · gorilla/mux · go-pg с миграциями · PostgreSQL · внутренние библиотеки gotools и sdk-go · Prometheus.</p></dd><dt>stamp-verification</dt><dd><p>Публичная страница проверки подлинности документа по QR-штампу: сканирование кода с бумажной или PDF-копии открывает карточку с документом, страницей и его актуальным состоянием, включая статус согласования. Авторизация не требуется; серверная часть — публичный эндпоинт documentations.</p><p>Стек: Статический сайт без сборщика: HTML, vanilla JS, moment.js; серверная часть — Go (gorilla/mux, go-pg, PostgreSQL) в составе documentation-api.</p></dd><dt>transmittal</dt><dd><p>Формальная передача комплектов документации между участниками — сопроводительное письмо с составом, получателями, сроком и результатом приёма или отклонения. По завершении формируется акт передачи в PDF; есть шаблоны трансмитталов и связь с согласованиями, замыкающая цикл «выдал документацию → получил замечания».</p><p>Стек: Python · FastAPI · async SQLAlchemy + Alembic · PostgreSQL · S3 · taskiq + RabbitMQ · Jinja2 с собственным конвертером HTML в PDF · Mailgun и SMTP · фронтенд на React/MobX (Module Federation).</p></dd><dt>Конвертер BIM-моделей</dt><dd><p>Подготовка исходных САПР-моделей (IFC, NWD и другие форматы Autodesk) к просмотру и анализу: облегчённая геометрия glTF/<code>.s3d</code> плюс структурированный набор свойств, категорий и материалов элементов. Обязательное звено между загрузкой документа в CDE и появлением работоспособной модели в интерфейсе; работает как эфемерный джоб и как постоянный воркер RPC.</p><p>Стек: Ядро на Python с ifcopenshell и NumPy · обвязка и воркеры на Go · RabbitMQ (RPC) · S3 · Docker · плагин Navisworks на C#/.NET (SharpGLTF) · форматы IFC и NWD в glTF/GLB, <code>.s3d</code> и JSON свойств.</p></dd></dl><h3>Контроль качества</h3><p class="doc">Работа с несоответствиями: инспекции и чек-листы, замечания, проблемы, запросы информации, ревью, предписания, сравнение редакций чертежей.</p><p class="doc">Группа однородна по устройству — почти каждый её сервис читает документ, пишет запись о несоответствии и поднимает процесс в оркестраторе, — поэтому её компоненты сильнее прочих зависят от домена документов и от платформенных процессов.</p><dl class="apps"><dt>checklists</dt><dd><p>Шаблоны проверок (чек-листы из шагов и типизированных элементов ввода) и результаты их заполнения. Результат привязывается к любой сущности платформы через пару «тип сущности + идентификатор» и может блокироваться после согласования по вызову из flows.</p><p>Стек: Python · FastAPI · Piccolo ORM с админкой · PostgreSQL (JSONB) · собственный JWT-middleware · OpenTelemetry.</p></dd><dt>comparisons</dt><dd><p>Сравнение проектных данных и выявление отклонений: облако точек к облаку, облако к модели, PDF к PDF, BIM к BIM, расчёт отклонений. Тяжёлые вычисления делегируются движку workflow, результат раскладывается на элементы и изменения, доступные для фильтрации и верификации инженером.</p><p>Стек: Go (Fiber, go-pg) · PostgreSQL · Docker-образы задач в реестре · фронтенд на TypeScript/React/MobX/Material-UI (Module Federation).</p></dd><dt>inspections</dt><dd><p>События и проверки на объекте: планирование осмотров с типом, датой, ответственными, локацией и настраиваемыми атрибутами, контроль занятости исполнителей, история изменений и выгрузка реестра в XLSX. Отдельная подсистема — правила доступности и идемпотентное бронирование слотов для выездов и приёмок.</p><p>Стек: Python · FastAPI · Piccolo ORM с админкой · PostgreSQL (JSONB, триггеры, advisory-локи) · FastStream + Kafka · фронтенд на React/MobX с DevExpress Scheduler.</p></dd><dt>issues</dt><dd><p>Сервис замечаний строительного контроля: типы, настраиваемые статусные модели с правами на переходы, ответственные, комментарии, фото-вложения, атрибуты EAV и история изменений. Включает выпуск предписаний, выгрузку реестров в XLSX и PDF и рассылку уведомлений. Один бэкенд обслуживает также компоненты remarks и prescriptions.</p><p>Стек: Python · Django + DRF · PostgreSQL с полнотекстовым поиском · Celery + Redis · Kafka · S3 · pandas и ReportLab для XLSX и PDF · SimpleJWT с Zitadel.</p></dd><dt>prescriptions</dt><dd><p>Выдача предписаний подрядчику по результатам строительного контроля: предписание собирается из замечаний, привязывается к договору, подрядчику и объекту, получает номер и проходит согласование по статусам. Официальный документ формируется по шаблону движком workflow; бэкенд — приложение внутри issues.</p><p>Стек: Python · Django + DRF · PostgreSQL (приложение внутри бэкенда issues) · генерация документов движком workflow · фронтенд на React/MobX (rsbuild + Module Federation).</p></dd><dt>remarks</dt><dd><p>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт. Собственный бэкенд архивирован — модуль работает поверх issues.</p><p>Стек: TypeScript · React · MobX · Material-UI · TanStack Table и Virtual; серверная часть — стек issues.</p></dd><dt>reviews</dt><dd><p>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено). Ключевой этап между выпуском версии документа и выдачей её «в производство работ»; бэкенд общий с flows.</p><p>Стек: TypeScript · React · MobX · rsbuild + Module Federation; серверная часть — стек flows, экспорт отчётов вынесен в отдельный сервис.</p></dd><dt>rfi</dt><dd><p>Формальные запросы информации между участниками проекта: запрос с приоритетом, статусом, ответственными и привязкой к ресурсу, переписка сообщениями с пометкой одного из них как решения. Приоритеты и статусы настраиваются на уровне компании, ведётся полный журнал изменений полей.</p><p>Стек: Python · Django 5.1 + DRF · django-filter · PostgreSQL · Celery · SimpleJWT с Zitadel · фронтенд на TypeScript/React/MobX (rsbuild + Module Federation).</p></dd></dl><h3>Полевые данные</h3><p class="doc">Данные, приходящие со стройплощадки: замеры, привязка к местности, сечения, а также обработка тяжёлых входных файлов.</p><p class="doc">Единственная группа с существенной вычислительной нагрузкой: обработка вынесена на отдельные узлы, потому что её всплески не должны мешать интерактивной работе остальных сервисов.</p><dl class="apps"><dt>cross-section</dt><dd><p>Инструмент построения поперечных сечений по облакам точек и BIM-документам прямо во вьюере, с сохранением сечений, цветовой легендой документов и экспортом в DWG. Применяется при обмере и контроле построенного; серверная часть — drawings.</p><p>Стек: TypeScript · React · MobX · pixi-viewer · джоб экспорта в DWG на Go с Python-генератором · PostgreSQL · объектное хранилище.</p></dd><dt>mapper</dt><dd><p>Агрегирующий сервис (BFF), склеивающий данные нескольких API в один ответ для интерфейса: реестр документов диска вместе с состоянием согласования и заметки вместе с их связями. Собственной доменной модели и базы не имеет, ответы кеширует в Redis.</p><p>Стек: Python · FastAPI · httpx с ретраями · Redis/RedisJSON как кеш; собственной БД нет.</p></dd><dt>measurements</dt><dd><p>Геопространственные измерения по материалам аэросъёмки: высота и температура в точке, профиль вдоль ломаной, расчёт объёма по контуру и разности объёмов между съёмками, метаданные растров и пересчёт координат. Stateless-сервис без собственной БД, читающий GeoTIFF напрямую из объектного хранилища.</p><p>Стек: Python · FastAPI · GDAL, pyproj, NumPy, OpenCV, SciPy · чтение GeoTIFF из S3 через boto3; собственной БД нет.</p></dd><dt>processing</dt><dd><p>Фабрика тяжёлых вычислений платформы: движок workflow исполняет граф задач, каждая из которых запускается отдельным контейнером (Kubernetes Job или воркер через RabbitMQ). Через него работают конвертация форматов, сравнения, экспорт в DWG и генерация документов; отдельный интерфейс даёт мониторинг, логи, отмену и перезапуск задач.</p><p>Стек: Go (pgx, go-pg, zap) · PostgreSQL · Kubernetes client-go для джобов · RabbitMQ для сторонних воркеров · джобы на Python (boto3, внутренняя workflows-tools) · фронтенд на React/MobX.</p></dd></dl></section>
|
||
</html> |