iac/docs/architecture/preview.html

128 lines
71 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: 32px 0 4px; }
.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; }
svg { width:100%; height:auto; min-width:700px; }
.legend { font-size:13px; color:#444; }
.legend code { background:#eee; padding:1px 5px; border-radius:3px; }
</style>
<h1>СДЕ Sarex — контур УГМК</h1>
<p class="legend">Автогенерация из <code>ugmk-technology.archimate</code>. Зелёный — технологический слой,
голубой — прикладной. Пунктир с полым треугольником — realization, стрелка — serving,
ромб — composition, линия с шариком — assignment.</p>
<section><h2>T1. Технологический слой — контур УГМК</h2><p class="doc">Что развёрнуто в кластере d8-ugmk-prod и какие технологические сервисы это даёт. Приложения-потребители вынесены в отдельные представления T2T9.</p><svg viewBox="0 0 1695 670" 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>
</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="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)"/><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">Кластер d8-ugmk-prod (Deckhouse)</text><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><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">cr.yandex/crp3ccidau046kdj8g9q</text><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.uralmine.com — объектное хранилище УГМК</text><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">NFS-хранилище (StorageClass nfs01)</text><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">Gitea 10.222.255.165:3000 (infra/iac)</text><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">um-sarex-k8s-frontend-01</text><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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="483" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">Helm-чарты *-contour</text><text x="1407.5" y="498" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">(OCI)</text><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></svg></section><section><h2>T2. Потребители: Маршрутизация HTTPS-трафика</h2><p class="doc">21 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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)" /><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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></svg></section><section><h2>T3. Потребители: Аутентификация OIDC</h2><p class="doc">10 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><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><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><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">checklists</text><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><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><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><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><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><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><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">iam</text><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><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></svg></section><section><h2>T4. Потребители: Управление секретами</h2><p class="doc">25 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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)" /><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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">rfi</text><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">subscriptions</text><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">system-log</text><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><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></svg></section><section><h2>T5. Потребители: Реляционное хранилище</h2><p class="doc">23 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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><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">rfi</text><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">subscriptions</text><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">system-log</text><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">transmittal</text><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">workspaces</text></svg></section><section><h2>T6. Потребители: Кэш</h2><p class="doc">3 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><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><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><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><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">message-hub</text><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">pm</text></svg></section><section><h2>T7. Потребители: Событийная шина</h2><p class="doc">12 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><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><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><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">contracts</text><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><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><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><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">iam</text><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">inspections</text><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">issues</text><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">mapper</text><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><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><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><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">system-log</text></svg></section><section><h2>T8. Потребители: Очередь сообщений AMQP</h2><p class="doc">11 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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="320" y1="50" x2="280" y2="50" stroke="#555" stroke-width="1.3" opacity="0.75" stroke-dasharray="6,4" marker-end="url(#hollow)" /><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><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><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">contracts</text><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><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><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><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><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">mapper</text><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">notes</text><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><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">processing</text><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">rfi</text><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">transmittal</text></svg></section><section><h2>T9. Потребители: Объектное хранилище</h2><p class="doc">13 из 35 приложений контура. Связи выведены из манифестов apps/*/base и apps/*/d8-ugmk-prod.</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>
</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)" /><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><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="43" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">s3.uralmine.com — объектное хранилище</text><text x="450.0" y="58" font-size="12" text-anchor="middle" dominant-baseline="middle" fill="#111">УГМК</text><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><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><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><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><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><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">iam</text><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">issues</text><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">mapper</text><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><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><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><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">rfi</text><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">subscriptions</text></svg></section>
</html>