Expand architecture documentation: add detailed descriptions for ams-sync and resources components, update their Archimate models, and correct inter-service relationships.
This commit is contained in:
parent
2ee621bf3e
commit
3830144269
@ -6,6 +6,14 @@
|
||||
|
||||
Конкретные домены заменены на `<домен>` — файл коммитится в репозиторий и не должен содержать данных инсталляции.
|
||||
|
||||
## ams-sync
|
||||
|
||||
Репозитории: platform/ams-sync — синхронизация учётных записей с внешним провайдером идентификации; рядом лежит platform/ams без активности с апреля 2025. Стек: Python, чистая архитектура (`cmd` → `internal/app` → `controller` → `usecase` → `adapter`/`repository`), kafka-python (`KafkaConsumer`), requests с ретраями, PyJWT, pydantic-settings; адаптеры к Zitadel Management API v1 и к generic/sarex-backend как провайдеру аутентификации.
|
||||
|
||||
Компонент переносит учётные записи из Django-монолита во внешний провайдер идентификации: пользователь, заведённый или изменённый в платформе, автоматически появляется и обновляется в AMS (Access Management Service) вместе с профилем, e-mail, принадлежностью организации и метаданными, на которых затем строится авторизация в доменных сервисах. Работает в двух режимах — постоянный сервис, читающий Kafka-топик `ams-sync` и обрабатывающий события по одному, и консольный режим массовой миграции пользователей и компаний, использовавшийся при первичном переезде на Zitadel.
|
||||
|
||||
Технически организация в Zitadel выбирается по конфигурации хоста, импорт идёт через `/management/v1/users/human/_import` для одиночных пользователей и `/admin/v1/import` для батчей, следом устанавливаются метаданные учётной записи. Отсутствующие имя и фамилия подставляются заглушками, то есть компонент рассчитан на импорт неполных легаси-данных. Проверка живости — TCP, HTTP-эндпоинтов сервис не публикует и входящих вызовов от других компонентов не принимает; этим объясняется его отсутствие в графе межсервисных вызовов, выведенном из манифестов.
|
||||
|
||||
## attachments
|
||||
|
||||
Репозитории: pdm/attachments — REST-сервис хранения и выдачи файловых вложений. Стек: Python, FastAPI, Pydantic, PostgreSQL (psycopg2 + пул соединений, сырой SQL), SQLAlchemy/Alembic для схемы и миграций, S3 через boto3 (presigned URL), OpenTelemetry, JSON-логирование.
|
||||
@ -240,6 +248,14 @@ cde-api построен на чистой архитектуре с явным
|
||||
|
||||
Технически это микрофронтенд-модуль, экспортируемый в host-приложение со своим провайдером и MobX-стором и порталами для встраивания панелей, общающийся по HTTP через общий `httpService` с сервисом issues. На стороне бэкенда работают модели замечания, его изменений, типа, статусов и их связей, прав на переход и на тип, вложений, комментариев и записей атрибутов. Права строятся на JWT и наборе разрешений просмотра, редактирования, администрирования и надзора, дополнительно уточняемых на уровне типа замечания и сервисных аккаунтов. Атрибуты вынесены в собственную EAV-модель, синхронизируемую с внешним сервисом EAV миграцией первичного импорта и management-командой. Асинхронная часть — Celery-задачи уведомлений, синхронизации с OLAP-сервисом, публикации событий в Kafka и фоновой генерации больших экспортов с сохранением файлов в S3. При переносе компонента в модель ArchiMate стоит явно зафиксировать, что «remarks» и «issues» — это один бэкенд и два имени, иначе связи между элементами получатся дублирующими.
|
||||
|
||||
## resources
|
||||
|
||||
Репозитории: platform/sarex-resources — бэкенд реестра ресурсов; planning/resources-frontend — интерфейс. Стек: Python, Django 4.1–5.1 + DRF, django-filter, model_utils, PostgreSQL с расширением ltree и PostGIS, requests + pydantic для HTTP-клиента к сервису пользователей, админка Django.
|
||||
|
||||
Компонент ведёт единый реестр ресурсов платформы — иерархию объектов строительства (проект, объект, участок и далее вниз по дереву) с типами, географическим положением, кодами и правами доступа. Идентификатор ресурса (`resource_id`, `public_id`) служит сквозным ключом проекта во всех остальных сервисах, а сам реестр — общей точкой проверки прав: к нему привязываются права пользователей и сервисных аккаунтов, права на уровне компании, фотографии, состав проектной команды, график работ по проекту и идентификаторы виджетов планирования. По графу вызовов контура к нему обращаются documentations, flows, issues, pm, processing, rfi и transmittal; по коду компонентных репозиториев — также inspections, contracts, prescriptions и projects.
|
||||
|
||||
Технически дерево хранится в PostgreSQL с расширением ltree: в проекте есть собственное приложение `apps.ltree` с полем `LTreeField` и lookup'ами для запросов по поддереву, а координаты объекта ведутся через `django.contrib.gis` поверх PostGIS. Мультиарендность обеспечивается hash-индексами по `tenant_id` и сервисному аккаунту, у моделей — мягкое удаление и таймстампы через миксины. API опубликован в двух версиях (`urls.py` и `urls_v2.py` с расширенным `ResourceExpandedViewSet`). Брокеров сообщений в коде нет: интеграция со смежными сервисами только синхронная, по HTTP.
|
||||
|
||||
## reviews
|
||||
|
||||
Репозитории: proc/reviews-frontend — микрофронтенд рабочего места согласующего; proc/flows-backend — бэкенд маршрутов согласования; proc/flows-frontend — UI конструктора маршрутов; proc/export-reviews — сервис экспорта отчётов по согласованиям. Отдельного репозитория `reviews-backend` не существует. Стек: фронтенд — TypeScript, React, MobX, rsbuild + Module Federation, внутренний `sdk-js`, Helm; бэкенд — см. компонент flows (FastAPI, SQLAlchemy, PostgreSQL, Kafka через FastStream, Celery, sqladmin).
|
||||
|
||||
@ -4,6 +4,10 @@
|
||||
|
||||
Заголовок второго уровня — имя каталога в `apps/` либо идентификатор элемента для компонентов, которых в `apps/` нет. Порядок соответствует дереву на схеме.
|
||||
|
||||
## ams-sync
|
||||
|
||||
Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация доменных сервисов. Работает консьюмером Kafka-топика, отдельный консольный режим использовался для первичной массовой миграции пользователей и компаний. Входящих вызовов не принимает.
|
||||
|
||||
## attachments
|
||||
|
||||
Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»). Скачивание идёт по временным подписанным ссылкам напрямую из объектного хранилища.
|
||||
@ -116,6 +120,10 @@
|
||||
|
||||
Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт. Собственный бэкенд архивирован — модуль работает поверх issues.
|
||||
|
||||
## resources
|
||||
|
||||
Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа. Идентификатор ресурса служит сквозным ключом проекта во всех остальных сервисах, а сам реестр — общей точкой проверки прав, поэтому это один из самых востребованных компонентов контура. Интеграция только синхронная, по HTTP.
|
||||
|
||||
## reviews
|
||||
|
||||
Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено). Ключевой этап между выпуском версии документа и выдачей её «в производство работ»; бэкенд общий с flows.
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<folder name="Business" id="folder-business" type="business"/>
|
||||
<folder name="Application" id="folder-application" type="application">
|
||||
<element xsi:type="archimate:ApplicationComponent" name="ams-sync" id="ac-ams-sync">
|
||||
<documentation>apps/ams-sync/<contour>/</documentation>
|
||||
<documentation>Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация доменных сервисов. Работает консьюмером Kafka-топика, отдельный консольный режим использовался для первичной массовой миграции пользователей и компаний. Входящих вызовов не принимает.</documentation>
|
||||
</element>
|
||||
<element xsi:type="archimate:ApplicationComponent" name="attachments" id="ac-attachments">
|
||||
<documentation>Универсальное хранилище файловых вложений к любым сущностям платформы: файл кладётся в S3, метаданные — в PostgreSQL, привязка полиморфная («имя модели + идентификатор экземпляра»). Скачивание идёт по временным подписанным ссылкам напрямую из объектного хранилища.</documentation>
|
||||
@ -92,7 +92,7 @@
|
||||
<documentation>Пользовательский модуль работы с замечаниями (UI): пин на чертеже, в ячейке XLSX или на задаче графика, описание, срок, ответственные, вложения и пометки поверх листа, табличное и списочное представления, фильтры, массовое редактирование и экспорт. Собственный бэкенд архивирован — модуль работает поверх issues.</documentation>
|
||||
</element>
|
||||
<element xsi:type="archimate:ApplicationComponent" name="resources" id="ac-resources">
|
||||
<documentation>apps/resources/<contour>/</documentation>
|
||||
<documentation>Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа. Идентификатор ресурса служит сквозным ключом проекта во всех остальных сервисах, а сам реестр — общей точкой проверки прав, поэтому это один из самых востребованных компонентов контура. Интеграция только синхронная, по HTTP.</documentation>
|
||||
</element>
|
||||
<element xsi:type="archimate:ApplicationComponent" name="reviews" id="ac-reviews">
|
||||
<documentation>Рабочее место согласующего: очередь задач с приоритетами и сроками, просмотр документа, пометки и замечания, заполнение чек-листов и вынесение решения (согласовано / с замечаниями / отклонено). Ключевой этап между выпуском версии документа и выдачей её «в производство работ»; бэкенд общий с flows.</documentation>
|
||||
@ -898,47 +898,47 @@
|
||||
<bounds x="425" y="20" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0118" source="do-0110" target="do-0111" relationship="rel-244"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0127" source="do-0110" target="do-0112" relationship="rel-271"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0133" source="do-0110" target="do-0115" relationship="rel-280"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0133" source="do-0110" target="do-0116" relationship="rel-280"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0142" source="do-0110" target="do-0113" relationship="rel-300"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0111" archimateElement="ac-django" targetConnections="cn-0118 cn-0119 cn-0120">
|
||||
<bounds x="711" y="108" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0121" source="do-0111" target="do-0110" relationship="rel-251"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0126" source="do-0111" target="do-0112" relationship="rel-270"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0132" source="do-0111" target="do-0115" relationship="rel-279"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0132" source="do-0111" target="do-0116" relationship="rel-279"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0138" source="do-0111" target="do-0117" relationship="rel-295"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0141" source="do-0111" target="do-0113" relationship="rel-299"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0144" source="do-0111" target="do-0116" relationship="rel-303"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0144" source="do-0111" target="do-0115" relationship="rel-303"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0112" archimateElement="ac-flows" targetConnections="cn-0126 cn-0127 cn-0128 cn-0129 cn-0130 cn-0131">
|
||||
<bounds x="830" y="320" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0123" source="do-0112" target="do-0110" relationship="rel-254"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0135" source="do-0112" target="do-0115" relationship="rel-282"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0135" source="do-0112" target="do-0116" relationship="rel-282"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0113" archimateElement="ac-processing" targetConnections="cn-0141 cn-0142 cn-0143">
|
||||
<bounds x="711" y="532" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0120" source="do-0113" target="do-0111" relationship="rel-247"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0124" source="do-0113" target="do-0110" relationship="rel-258"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0130" source="do-0113" target="do-0112" relationship="rel-275"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0136" source="do-0113" target="do-0115" relationship="rel-284"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0136" source="do-0113" target="do-0116" relationship="rel-284"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0114" archimateElement="ac-eav">
|
||||
<bounds x="425" y="620" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0122" source="do-0114" target="do-0110" relationship="rel-253"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0128" source="do-0114" target="do-0112" relationship="rel-272"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0134" source="do-0114" target="do-0115" relationship="rel-281"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0134" source="do-0114" target="do-0116" relationship="rel-281"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0139" source="do-0114" target="do-0117" relationship="rel-296"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0115" archimateElement="ac-issues" targetConnections="cn-0132 cn-0133 cn-0134 cn-0135 cn-0136 cn-0137">
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0115" archimateElement="ac-resources" targetConnections="cn-0144">
|
||||
<bounds x="139" y="532" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0125" source="do-0115" target="do-0110" relationship="rel-260"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0131" source="do-0115" target="do-0112" relationship="rel-276"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0137" source="do-0115" target="do-0116" relationship="rel-285"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0140" source="do-0115" target="do-0117" relationship="rel-298"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0143" source="do-0115" target="do-0113" relationship="rel-302"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0116" archimateElement="ac-resources" targetConnections="cn-0144">
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0116" archimateElement="ac-issues" targetConnections="cn-0132 cn-0133 cn-0134 cn-0135 cn-0136 cn-0137">
|
||||
<bounds x="20" y="320" width="170" height="55"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0125" source="do-0116" target="do-0110" relationship="rel-260"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0131" source="do-0116" target="do-0112" relationship="rel-276"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0137" source="do-0116" target="do-0115" relationship="rel-285"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0140" source="do-0116" target="do-0117" relationship="rel-298"/>
|
||||
<sourceConnection xsi:type="archimate:Connection" id="cn-0143" source="do-0116" target="do-0113" relationship="rel-302"/>
|
||||
</child>
|
||||
<child xsi:type="archimate:DiagramObject" id="do-0117" archimateElement="ac-pm" targetConnections="cn-0138 cn-0139 cn-0140">
|
||||
<bounds x="139" y="108" width="170" height="55"/>
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<elements>
|
||||
<element identifier="ac-ams-sync" xsi:type="ApplicationComponent">
|
||||
<name xml:lang="ru">ams-sync</name>
|
||||
<documentation xml:lang="ru">apps/ams-sync/<contour>/</documentation>
|
||||
<documentation xml:lang="ru">Односторонняя синхронизация учётных записей из ядра платформы во внешний провайдер идентификации: созданный или изменённый пользователь вместе с профилем, принадлежностью организации и метаданными появляется в Zitadel, где на этих данных строится авторизация доменных сервисов. Работает консьюмером Kafka-топика, отдельный консольный режим использовался для первичной массовой миграции пользователей и компаний. Входящих вызовов не принимает.</documentation>
|
||||
</element>
|
||||
<element identifier="ac-attachments" xsi:type="ApplicationComponent">
|
||||
<name xml:lang="ru">attachments</name>
|
||||
@ -123,7 +123,7 @@
|
||||
</element>
|
||||
<element identifier="ac-resources" xsi:type="ApplicationComponent">
|
||||
<name xml:lang="ru">resources</name>
|
||||
<documentation xml:lang="ru">apps/resources/<contour>/</documentation>
|
||||
<documentation xml:lang="ru">Единый реестр ресурсов платформы — иерархия объектов строительства (проект, объект, участок и ниже) с типами, географическим положением, кодами и правами доступа. Идентификатор ресурса служит сквозным ключом проекта во всех остальных сервисах, а сам реестр — общей точкой проверки прав, поэтому это один из самых востребованных компонентов контура. Интеграция только синхронная, по HTTP.</documentation>
|
||||
</element>
|
||||
<element identifier="ac-reviews" xsi:type="ApplicationComponent">
|
||||
<name xml:lang="ru">reviews</name>
|
||||
@ -795,34 +795,34 @@
|
||||
<node identifier="do-0112" elementRef="ac-flows" xsi:type="Element" x="830" y="320" w="170" h="55"/>
|
||||
<node identifier="do-0113" elementRef="ac-processing" xsi:type="Element" x="711" y="532" w="170" h="55"/>
|
||||
<node identifier="do-0114" elementRef="ac-eav" xsi:type="Element" x="425" y="620" w="170" h="55"/>
|
||||
<node identifier="do-0115" elementRef="ac-issues" xsi:type="Element" x="139" y="532" w="170" h="55"/>
|
||||
<node identifier="do-0116" elementRef="ac-resources" xsi:type="Element" x="20" y="320" w="170" h="55"/>
|
||||
<node identifier="do-0115" elementRef="ac-resources" xsi:type="Element" x="139" y="532" w="170" h="55"/>
|
||||
<node identifier="do-0116" elementRef="ac-issues" xsi:type="Element" x="20" y="320" w="170" h="55"/>
|
||||
<node identifier="do-0117" elementRef="ac-pm" xsi:type="Element" x="139" y="108" w="170" h="55"/>
|
||||
<connection identifier="cn-0118" relationshipRef="rel-244" xsi:type="Relationship" source="do-0110" target="do-0111"/>
|
||||
<connection identifier="cn-0127" relationshipRef="rel-271" xsi:type="Relationship" source="do-0110" target="do-0112"/>
|
||||
<connection identifier="cn-0133" relationshipRef="rel-280" xsi:type="Relationship" source="do-0110" target="do-0115"/>
|
||||
<connection identifier="cn-0133" relationshipRef="rel-280" xsi:type="Relationship" source="do-0110" target="do-0116"/>
|
||||
<connection identifier="cn-0142" relationshipRef="rel-300" xsi:type="Relationship" source="do-0110" target="do-0113"/>
|
||||
<connection identifier="cn-0121" relationshipRef="rel-251" xsi:type="Relationship" source="do-0111" target="do-0110"/>
|
||||
<connection identifier="cn-0126" relationshipRef="rel-270" xsi:type="Relationship" source="do-0111" target="do-0112"/>
|
||||
<connection identifier="cn-0132" relationshipRef="rel-279" xsi:type="Relationship" source="do-0111" target="do-0115"/>
|
||||
<connection identifier="cn-0132" relationshipRef="rel-279" xsi:type="Relationship" source="do-0111" target="do-0116"/>
|
||||
<connection identifier="cn-0138" relationshipRef="rel-295" xsi:type="Relationship" source="do-0111" target="do-0117"/>
|
||||
<connection identifier="cn-0141" relationshipRef="rel-299" xsi:type="Relationship" source="do-0111" target="do-0113"/>
|
||||
<connection identifier="cn-0144" relationshipRef="rel-303" xsi:type="Relationship" source="do-0111" target="do-0116"/>
|
||||
<connection identifier="cn-0144" relationshipRef="rel-303" xsi:type="Relationship" source="do-0111" target="do-0115"/>
|
||||
<connection identifier="cn-0123" relationshipRef="rel-254" xsi:type="Relationship" source="do-0112" target="do-0110"/>
|
||||
<connection identifier="cn-0135" relationshipRef="rel-282" xsi:type="Relationship" source="do-0112" target="do-0115"/>
|
||||
<connection identifier="cn-0135" relationshipRef="rel-282" xsi:type="Relationship" source="do-0112" target="do-0116"/>
|
||||
<connection identifier="cn-0120" relationshipRef="rel-247" xsi:type="Relationship" source="do-0113" target="do-0111"/>
|
||||
<connection identifier="cn-0124" relationshipRef="rel-258" xsi:type="Relationship" source="do-0113" target="do-0110"/>
|
||||
<connection identifier="cn-0130" relationshipRef="rel-275" xsi:type="Relationship" source="do-0113" target="do-0112"/>
|
||||
<connection identifier="cn-0136" relationshipRef="rel-284" xsi:type="Relationship" source="do-0113" target="do-0115"/>
|
||||
<connection identifier="cn-0136" relationshipRef="rel-284" xsi:type="Relationship" source="do-0113" target="do-0116"/>
|
||||
<connection identifier="cn-0122" relationshipRef="rel-253" xsi:type="Relationship" source="do-0114" target="do-0110"/>
|
||||
<connection identifier="cn-0128" relationshipRef="rel-272" xsi:type="Relationship" source="do-0114" target="do-0112"/>
|
||||
<connection identifier="cn-0134" relationshipRef="rel-281" xsi:type="Relationship" source="do-0114" target="do-0115"/>
|
||||
<connection identifier="cn-0134" relationshipRef="rel-281" xsi:type="Relationship" source="do-0114" target="do-0116"/>
|
||||
<connection identifier="cn-0139" relationshipRef="rel-296" xsi:type="Relationship" source="do-0114" target="do-0117"/>
|
||||
<connection identifier="cn-0125" relationshipRef="rel-260" xsi:type="Relationship" source="do-0116" target="do-0110"/>
|
||||
<connection identifier="cn-0131" relationshipRef="rel-276" xsi:type="Relationship" source="do-0116" target="do-0112"/>
|
||||
<connection identifier="cn-0137" relationshipRef="rel-285" xsi:type="Relationship" source="do-0116" target="do-0115"/>
|
||||
<connection identifier="cn-0140" relationshipRef="rel-298" xsi:type="Relationship" source="do-0116" target="do-0117"/>
|
||||
<connection identifier="cn-0143" relationshipRef="rel-302" xsi:type="Relationship" source="do-0116" target="do-0113"/>
|
||||
<connection identifier="cn-0125" relationshipRef="rel-260" xsi:type="Relationship" source="do-0115" target="do-0110"/>
|
||||
<connection identifier="cn-0131" relationshipRef="rel-276" xsi:type="Relationship" source="do-0115" target="do-0112"/>
|
||||
<connection identifier="cn-0137" relationshipRef="rel-285" xsi:type="Relationship" source="do-0115" target="do-0116"/>
|
||||
<connection identifier="cn-0140" relationshipRef="rel-298" xsi:type="Relationship" source="do-0115" target="do-0117"/>
|
||||
<connection identifier="cn-0143" relationshipRef="rel-302" xsi:type="Relationship" source="do-0115" target="do-0113"/>
|
||||
<connection identifier="cn-0119" relationshipRef="rel-246" xsi:type="Relationship" source="do-0117" target="do-0111"/>
|
||||
<connection identifier="cn-0129" relationshipRef="rel-274" xsi:type="Relationship" source="do-0117" target="do-0112"/>
|
||||
</view>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user