Архитектура#
1. Границы ответственности#
1.1. Ядро системы (общее, переиспользуемое)#
API-contract framework (
list/scheme, envelopes, error model).Module runtime (
install/uninstall, dependency graph, module capabilities).Auth/session/permissions framework.
Общая telemetry/realtime шина (
status, WebSocket/MQTT).Базовый UI shell (карточки, fullscreen, layout, routing runtime).
1.2. Отраслевой изолят (industry package)#
отраслевые сущности и словари;
отраслевые KPI, нормы и события отклонений;
отраслевые сценарии управления/оркестрации;
отраслевые UI-модули и формы;
отраслевые интеграционные профили оборудования.
2. Правило совместимости#
Любой отраслевой модуль обязан:
публиковаться через общий модульный реестр;
использовать единый envelope ответа и общие заголовки;
не изменять ядро API обратнонесовместимо;
подключать права через общую permission-модель;
хранить отраслевые параметры в отдельном namespace.
3. Технический контракт изоляции#
3.1. Namespace модулей#
Рекомендуемый префикс:
industry.<name>.<module>примеры:
industry.poultry.climate,industry.poultry.flock,industry.swine.climate
3.1.1. Правило модульной гранулярности (принятое D-002)#
Отрасль состоит из набора специализированных модулей.
Для конкретной площадки допускается частичное включение модулей (не весь набор сразу).
Каждый модуль владеет одной ключевой сущностью (
key_entity).Модуль может строить агрегаты из других модулей (
enrichment), но source-of-truth ключевой сущности остается у владельца.
3.1.2. Правило версионирования отраслевых модулей#
Формат версии отраслевого модуля:
MAJOR.MINOR.PATCH(числовой semver).Для модулей одной отрасли в рамках активной release-линии
MAJORдолжен совпадать.Изменение
MAJOR: обратнонесовместимые изменения API/контракта данных.Изменение
MINOR: обратносовместимое расширение (новые поля, endpoint-ы, сценарии).Изменение
PATCH: исправления без изменения контракта.Минимальная автоматическая проверка политики выполняется тестом
backend-go/internal/modules/catalog/versioning_policy_test.go.
3.2. Namespace данных#
tenant_id+industry_code+site_id+object_idотраслевые таблицы и события не смешиваются без явного cross-industry представления.
3.3. Namespace конфигурации#
профиль отрасли (
industry_profile)профиль оборудования (
equipment_profile)профиль регламентов (
compliance_profile)
3.4. Жизненный цикл нормативных профилей (принятое D-003)#
Нормативы и уставки хранятся в profile-конфигурациях.
Формат обмена между хозяйствами:
YAML.Профиль проходит состояния:
draftvalidatedpublishedarchived
Каждая публикация создает новую версию (
version_id,created_at,created_by,change_note).Откат выполняется как publish предыдущей версии с новым
version_idи ссылкойrollback_of.
Минимальные операции profile-service:
exportYaml(profile_id, version_id)importYaml(industry_code, site_scope, yaml)validateProfile(profile_draft_id)publishProfile(profile_draft_id)rollbackProfile(profile_id, target_version_id)
3.5. Контуры тревог (принятое D-004)#
status— единый системный контур тревог для общей операционной видимости.industry alarm-bus— специализированный отраслевой контур тревог и эскалаций.Правило синхронизации:
industry alarm-bus -> statusпубликует агрегированные/критические события;status -> industry alarm-busне является источником истины для отраслевых деталей.
Ownership:
statusхранит унифицированное событие;отраслевой модуль хранит детальные причины, контекст и историю эскалаций.
4. Runtime модель подключения отрасли#
В ядре активируется
industry dispatcher(поindustry_code).Dispatcher подключает отраслевые manifests и backend plugins.
UI получает catalog/scheme и отображает отраслевые карточки.
Общие сервисы (
auth,status,modules) остаются едиными.
4.0.1. Правило frontend workspace для poultry#
poultryотображается во frontend как единый workspace с изолированными submodule-экранами.В
cloudprimary-входом служит overview dashboard.В
edge-singleprimary-входом служит тот же dashboard в fullscreen cards-layout:карточки уплотняются под 10» HMI;
dashboard остается экраном общего контекста и KPI;
переход в детали модуля выполняется из карточек без отдельного canvas-режима.
4.1. Режимы по уровню развертывания (принятое D-001)#
cloud(master/tenant): multi-industry режим, несколько отраслей в одном контуре.site/cabinet(edge): single-industry режим, одна отрасль на одну инсталляцию.
4.2. Правило переключения отрасли#
В cloud переключение отрасли допустимо на уровне контекста (
tenant/site/object).В edge переключение отрасли в runtime запрещено; смена отрасли выполняется через переинициализацию профиля инсталляции.
5. Минимальный пакет новой отрасли#
Для каждой новой отрасли обязательно создать:
docs/industries/<industry>/README.mddocs/industries/<industry>/architecture.mddocs/industries/<industry>/tasks.mddocs/industries/<industry>/source-instructions.md
6. Матрица общих vs отраслевых модулей#
Общие:
overview,modules,status,auth,passkey.Отраслевые: процессные панели, специализированные KPI, нормативы и сценарии.
Гибридные:
tasks,charts(общий каркас + отраслевые наборы метрик).
6.1. Метаданные отраслевого модуля#
Минимальный набор metadata в каталоге модулей:
industry_codeindustry_scope(industry|hybrid)key_entityprovides_enrichment_for(опционально)
7. Контроль качества#
Contract tests: общие + отраслевые.
E2E smoke: отдельно по каждой отрасли.
Проверка изоляции данных: обязательна для каждого релиза отрасли.
Проверка консистентности
statusиindustry alarm-bus: обязательна для каждого релиза отрасли.Проверка и аудит cross-industry policy-решений (
allow/deny) черезmodules/access-audit: обязательна для изменений прав и модульных операций.