Содержание
Владение моделями: где изменять данные ShariX Open
Назначение: Архитектура. Продукт: ShariX Open · Общий компонент.
Для кого: Разработчик · Интегратор · Рецензент и приёмщик · Нейросеть.
Темы: Архитектура → Владение моделями · Архитектура → Границы.
Владелец модели — модуль, который определяет её смысл, структуру и разрешённые операции изменения. Если другой модуль использует эти данные, он обращается к существующей операции или хранит собственное расширение со ссылкой на общую запись. Так у одного бизнес-факта не появляются две независимые версии.
Открытые модули и их данные
| Модуль | За что отвечает | Что учитывать |
|---|---|---|
| backend, устанавливаемый как dbsynce | Company, Service, Provider, Orders, Documents, DocumentVersion, Permissions, Relationship, CheckDefinition, RequirementCheck и общие требования. | Их поля и смысл используются несколькими частями приложения. Изменения должны учитывать API, прежние данные и миграции. |
| tickets | Ticket, его жизненный цикл, комментарии, вложения и операционные события. | Статус заявки и допустимый переход меняются через предназначенные операции. |
| webservice_running | Этапы Stage, материалы Artifact, участники, связи и события исполнения. | Эти данные дополняют заказ; весь план исполнения не переносится в общую Orders. |
| payments | Платёжные проводки, финансовые снимки и распределение. | Локальное описание дополнительной покупки не становится автоматически платёжной проводкой. |
Список показывает ответственность. Точные имена классов и фактические связи проверяют по exports, моделям и миграциям нужной версии. У backend начальная точка — models/init.py. Для конкретной сущности читают:
- её модель;
- serializer;
- view;
- вызывающие функции.
Закрытые компоненты: названия и границы
Конструктор сервиса не относится к открытым модулям в таблице выше. В его LICENSE указана ShariX Proprietary License v1, код sharix-proprietary-v1. То, что модуль может устанавливаться вместе с ShariX Open или использоваться несколькими продуктами, не делает его открытым.
По проверенным лицензионным файлам тот же лицензионный код имеют следующие закрытые компоненты:
| Компонент | Название репозитория | Граница публичного описания |
|---|---|---|
| Конструктор сервиса | sharix-service-constructor | Отдельно лицензируемый компонент настройки сервиса. Внутренние модели и алгоритмы в этой Wiki не описываются. |
| Проектная среда сервисов | sharix-service-projects | Отдельный закрытый модуль работы с проектами; не часть открытой модели заказа. |
| Appointments | sharix-appointments | Отдельная закрытая функциональность записи и расписаний. |
| Интеграция Почты России | sharix-russian-post | Отдельная закрытая интеграция почтовых отправлений. |
| ShariX Knowledge — Django-модуль | sharix-knowledge | Закрытый модуль базы знаний. Его лицензия не определяет автоматически лицензию отдельного DokuWiki-плагина. |
Это перечень проверенных компонентов, а не полный каталог всех закрытых модулей. Подробности находятся в intrawiki; за ними и согласованием доступа обращаются к ответственным со стороны Platform. Публичная страница может описать разрешённую точку подключения открытого ядра, но не переносит сюда устройство закрытого компонента.
Слово shared означает совместное использование модуля, а не открытую лицензию.
Как выбрать место для нового поля или операции
- Назвать факт: что означает значение, кто его создаёт и меняет, кому оно нужно.
- Проверить, не хранится ли тот же факт в открытой общей модели и не вычисляется ли уже из связанных данных. Если вопрос касается закрытого компонента, передать его ответственному; отсутствие доступа не компенсируют копированием его моделей в открытое ядро.
- Если это общая семантика заказа, изменять её у владельца с проверкой потребителей. Если это особенность одного сервиса, рассмотреть его локальное расширение.
- Для нового действия использовать или обоснованно расширить существующую операцию. Нельзя заменить её прямой записью статуса в случайном serializer.
- Проверить прежние данные, миграции, права и отрицательные сценарии.
Внутри одной сборки допустим вызов опубликованной функции модуля, если направление зависимостей сохраняется. Для внешнего приложения используют предназначенный API или адаптер, а не прямую запись в его БД. Общая модель не должна импортировать локальную модель сервиса или код закрытого продукта, чтобы выполнить свою базовую операцию.
Пример: два разных локальных расширения заказа
В webservice_running.models экспортируются две разные Django-модели:
OrdersLocalFullTemplate— с полемorder_synced;OrdersLocalизmodels/local_examples.py— с полемorder.
Созвучные имена не делают их взаимозаменяемыми.
Перед изменением проверить:
- какой класс импортирует view;
- какие поля использует serializer;
- что сохранялось в БД.
Известное расхождение текущего локального API описано на странице Webservice Running. Исправление имени в одном месте без проверки остальных не подтверждает исправление операции.
Другие границы, которые важно сохранить
- tickets.Event фиксирует тикетное событие; ExternalEvent относится к внешнему событию исполнения. Одно не заменяют другим по совпадению слова Event.
- Artifact принадлежит модулю исполнения. Nextcloud может хранить файл, но не становится владельцем бизнес-смысла артефакта.
- Сущность, извлечённая из документа, не становится автоматически Participant. Для участника нужны своё основание и предусмотренная операция.
- Функцию общего ядра не копируют в доменный модуль ради обхода её правил; локальную особенность не помещают в ядро без общей причины.
Ядро разрешено изменять ответственно
Правило владельца не запрещает развитие ядра ShariX Open. Перед таким изменением объясняют:
- требуемое поведение;
- затронутые API и приложения;
- совместимость сохранённых данных;
- переход существующей установки.
Наличие поля или успешный импорт не заменяют проверки поведения.
При разработке сторонней компанией учитывают LICENSE и COMPLIANCE конкретного репозитория и применимые требования к предоставлению исходников. Те же требования к осмысленности изменения и проверке действуют для внутренней разработки. Страница не заменяет лицензию компонента.
Если меняется общий модуль
Общие (shared) модули ShariX Open могут использоваться и в Platform. После публикации изменения нужно оповестить ответственного со стороны Platform и передать:
- репозитории и commits;
- описание изменения;
- результаты проверки.
Ответственный проверяет изменение, тестирует его и оформляет принятие в общий код по своим инструкциям в intrawiki. Действия на Platform не выполняются как продолжение публичной инструкции ShariX Open.
Порядок передачи — shared-изменения. Связанные статьи: API, заказ и Ticket, репозитории.
Основание уточнения
Сверка исходников 28.10.2026: backend 57b98dc, webapp-base e795cd5, tickets fd64704. Карта ответственности согласована с публичным TZ: владельцы репозиториев. Лицензионные требования проверяются по версии конкретного компонента; source-сверка не является приёмкой установленной сборки.
Проверенная исходная база: 29.10.2026
Проверены опубликованные исходники указанных ревизий. Это source-анализ; он не подтверждает применённую версию, конфигурацию или успешный сценарий конкретного сервера.
- sharix-open-webapp-base: CODING_POLICY.md — f65376cdb5a3.
- sharix-open-backend: models/orders.py — 778a3280cee1.
- sharix-open-webservice-running: models/__init__.py — d5b966a88b2d.
- sharix-open-webservice-running: models/local_examples.py — d5b966a88b2d.
- sharix-open-webservice-running: models/webservice_running.py — d5b966a88b2d.