iac/docs/architecture/preview.html

597 lines
532 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>