ЕДИНЫЙ СОЮЗ
Интегральная Оборонная Архитектура XXI века
Расширенный стратегический доклад
I. Введение: новая природа конфликта
После World War II война перестала быть исключительно военной.
Сегодня конфликт — это:
- санкционные режимы,
- технологическая изоляция,
- кибератаки,
- разрушение идентичности,
- управление нарративами,
- подрыв финансовых систем.
Оборона больше не равна армии.
Оборона — это целостность системы.
II. Философия Доктрины Победы
Победа XXI века — это состояние, при котором:
- Агрессия становится экономически невыгодной.
- Информационная атака не разрушает общество.
- Внутренние противоречия не перерастают в раскол.
- Союз остаётся центром притяжения.
Формула:
Победа = Сдерживание × Суверенитет × Смысл × Развитие
Если любой множитель равен нулю — система уязвима.
III. Архитектура Единого Союза1. Военно-стратегический контур
Задача — гарантированная неотвратимость ответа.
Ключевые элементы:
- стратегическое сдерживание,
- ПРО и ПВО нового поколения,
- киберкомандование,
- автономные системы управления,
- защищённая спутниковая инфраструктура.
Принцип: потенциальный конфликт должен быть заранее проигрышным для инициатора.
2. Технологический суверенитет
Кто контролирует технологии — тот определяет правила.
Направления:
- микроэлектроника,
- программная независимость,
- ИИ и большие данные,
- автономные энергетические системы,
- критическая цифровая инфраструктура.
Зависимость = стратегический риск.
3. Экономическая устойчивость
Без устойчивой экономики оборона истощается.
Контуры:
- диверсифицированная торговля,
- продовольственная безопасность,
- энергетическая автономия,
- альтернативные расчётные механизмы,
- долгосрочное промышленное планирование.
4. Смысловая безопасность
Информационный раскол разрушает быстрее ракет.
Необходимы:
- стратегическая коммуникация,
- культурная политика,
- образование с системным мышлением,
- защита от когнитивных манипуляций.
Общество должно понимать, ради чего существует Союз.
5. Ноосферная дипломатия
Высший уровень обороны — снижение конфликтности среды.
Принципы:
- инфраструктурные альянсы,
- экономическая взаимозависимость,
- кооперационные платформы,
- интеграция в глобальные цепочки без потери суверенитета.
Цель — создать мир, в котором война нерациональна.
IV. Модель пяти уровней устойчивости Союза
Уровень |
Критерий устойчивости |
Риск при ослаблении |
|
Военный |
Гарантированное сдерживание |
Внешняя агрессия |
|
Технологический |
Независимые системы |
Блокировка развития |
|
Экономический |
Самодостаточность |
Истощение |
|
Социальный |
Доверие и справедливость |
Внутренний раскол |
|
Смысловой |
Общая миссия |
Деградация идентичности |
V. Принцип “Оборона через развитие”
Классическая модель:
Сначала безопасность — потом развитие.
Интегральная модель Союза:
Развитие и есть безопасность.
Технологический рывок снижает вероятность конфликта сильнее, чем увеличение численности армии.
VI. Институциональная модель
- Центр стратегического анализа.
- Институт технологического суверенитета.
- Совет смысловой политики.
- Платформа промышленной кооперации.
- Контур цифрового управления.
Все элементы должны работать как единый организм.
VII. Риски XXI века
- технологическая блокада,
- санкционные войны,
- демографическое истощение,
- киберугрозы,
- разрушение образовательной системы.
Оборона должна быть опережающей, а не реактивной.
VIII. Заключение
Единый Союз — это не военный блок. Это архитектура устойчивости.
Победа в XXI веке — это:
- стабильная экономика,
- технологическая независимость,
- культурная целостность,
- стратегическое сдерживание,
- международная кооперация.
Только сочетание этих факторов формирует реальную безопасность.
Проект сопроводительного письма
к докладу “Единый Союз: Интегральная Оборонная Архитектура XXI века”
Уважаемые коллеги,
В условиях трансформации глобальной системы безопасности, ускорения технологических циклов и роста гибридных форм противостояния особую актуальность приобретает переход от фрагментарных мер к целостной архитектуре устойчивости.
В развитие экспертных наработок представляется стратегический доклад
“Единый Союз: Интегральная Оборонная Архитектура XXI века”.
Доклад формирует системный подход к вопросам:
- стратегического сдерживания нового поколения,
- технологического и цифрового суверенитета,
- экономической устойчивости в условиях санкционного давления,
- защиты когнитивного и смыслового пространства,
- снижения конфликтности через инфраструктурную кооперацию.
Предлагаемая модель исходит из принципа:
Развитие и есть безопасность.
В докладе оборона рассматривается не только как военный контур, но как совокупность взаимосвязанных элементов: промышленности, науки, образования, информационной политики и международной кооперации.
Особое внимание уделено:
- интеграции цифровых систем управления,
- устойчивости критической инфраструктуры,
- институциональной координации стратегических направлений.
Документ носит экспертно-аналитический характер и предназначен для обсуждения в профессиональном сообществе.
Готовы представить расширенную версию, аналитические приложения и поэтапную дорожную карту реализации.
С уважением,
С. Л. Соколов
Проект письма усиленная версия.
О направлении стратегического доклада по интегральной архитектуре оборонной устойчивости
Уважаемый ________,
В целях развития системного подхода к обеспечению национальной устойчивости направляется аналитический доклад:
«Единый Союз: Интегральная Оборонная Архитектура XXI века»
Документ содержит структурированную модель обороны, основанную на пяти взаимосвязанных контурах и измеримых показателях эффективности.
1. Военно-стратегический контур
Предлагается переход от количественного наращивания к параметрам гарантированной невыгодности агрессии.
Ключевые индикаторы:
- коэффициент автономности систем управления (% независимости от внешних платформ);
- устойчивость критической инфраструктуры (время восстановления после инцидента);
- доля защищённых каналов связи;
- уровень киберустойчивости (порог отражения атак).
2. Технологический суверенитет
Фокус — снижение критической зависимости от внешних поставщиков.
Предлагаемые целевые параметры:
- доля отечественных компонентов в критических отраслях;
- уровень локализации микроэлектроники;
- независимость программных решений в госсекторе;
- доля стратегических данных, размещённых в национальных центрах обработки.
3. Экономическая устойчивость
Без экономической базы оборонный потенциал истощается.
Метрики:
- коэффициент промышленной самодостаточности;
- продовольственная автономность (% внутреннего обеспечения);
- диверсификация экспортных направлений;
- устойчивость расчётных механизмов к внешнему давлению.
4. Когнитивная и социальная устойчивость
Современные конфликты имеют гибридный характер.
Показатели:
- уровень общественного доверия к институтам;
- доля граждан, вовлечённых в образовательные программы системного мышления;
- индекс информационной устойчивости;
- скорость нейтрализации деструктивных информационных кампаний.
5. Принцип «Оборона через развитие»
Доклад обосновывает стратегию, при которой:
развитие промышленности, науки и образования рассматривается как элемент оборонной системы.
Предлагается синхронизация:
- промышленной политики,
- научно-технологического планирования,
- цифровой трансформации,
- кадровой стратегии.
Практический результат внедрения модели
- снижение стратегических рисков;
- повышение управляемости в кризисных сценариях;
- формирование устойчивой архитектуры сдерживания;
- повышение международной субъектности через инфраструктурные проекты.
Доклад носит аналитический характер и предназначен для экспертного рассмотрения. Готовы представить расширенные расчёты, матрицу рисков и поэтапную дорожную карту.
I. Доклад: «Единый Союз: Интегральная Оборонная Архитектура XXI века»
7 ключевых выводов
1. Характер конфликта изменился
Современное противостояние носит гибридный характер: санкции, технологические ограничения, кибератаки, информационное воздействие. Военный контур — лишь один из элементов.
2. Оборона = система взаимосвязанных контуров
Модель включает 5 уровней:
- Военно-стратегический
- Технологический
- Экономический
- Социально-когнитивный
- Институционально-координационный
Ослабление любого уровня снижает устойчивость всей системы.
3. Технологическая зависимость — главный риск XXI века
Критическая уязвимость формируется в сферах:
- микроэлектроники,
- программного обеспечения,
- энергетических технологий,
- цифровой инфраструктуры.
Снижение зависимости — стратегический приоритет.
4. Экономическая устойчивость — условие сдерживания
Без промышленной базы невозможна долгосрочная оборона.
Необходимы:
- диверсификация торговли,
- автономные расчётные механизмы,
- развитие производственных цепочек полного цикла.
5. Когнитивная устойчивость влияет на безопасность напрямую
Информационный раскол общества способен нанести ущерб, сопоставимый с военным ударом. Требуется системная работа с:
- образованием,
- медиасредой,
- культурной политикой.
6. Развитие — это элемент обороны
Инвестиции в:
- науку,
- инфраструктуру,
- цифровое управление,
- промышленную модернизацию
снижают вероятность конфликта сильнее, чем простое наращивание сил.
7. Цель — не победа в войне, а предотвращение войны
Эффективная архитектура обороны делает агрессию экономически и стратегически бессмысленной.
II. МАТРИЦА РИСКОВ
(вероятность × ущерб × ответные меры)
|
№ |
Риск |
Вероятность |
Потенциальный ущерб |
Ответные меры |
|
1 |
Технологическая блокада |
Высокая |
Ограничение развития, зависимость |
Локализация критических производств |
|
2 |
Кибератаки на инфраструктуру |
Высокая |
Нарушение управления |
Создание автономных контуров и резервных систем |
|
3 |
Санкционное давление |
Средняя–высокая |
Финансовые потери |
Диверсификация расчётных механизмов |
|
4 |
Информационная дестабилизация |
Высокая |
Социальная поляризация |
Программы медиаграмотности и стратегической коммуникации |
|
5 |
Демографическое снижение |
Средняя |
Ослабление кадрового потенциала |
Поддержка семейной и образовательной политики |
|
6 |
Утечка технологических компетенций |
Средняя |
Потеря научного суверенитета |
Инвестиции в НИОКР и кадровые программы |
|
7 |
Энергетические ограничения |
Низкая–средняя |
Снижение промышленного потенциала |
Развитие автономных энергосистем |
Итоговый акцент для письма
В сопроводительном письме можно добавить финальный абзац:
Внедрение интегральной модели оборонной устойчивости позволит перейти от реактивного управления рисками к проактивной архитектуре предотвращения конфликтов.
УСИЛЕННЫЙ РАЗДЕЛ
Экономическая устойчивость как контур обороны
1. Стратегический тезис
Экономика — это не «поддержка» обороны.
Экономика — это фундамент сдерживания.
Исторически устойчивость обеспечивалась не только военной силой, но и индустриальным потенциалом. После World War II ключевым фактором победы стала промышленная мобилизация.
В XXI веке мобилизация = технологическая и финансовая автономность.
2. Ключевые параметры экономической устойчивости
2.1. Промышленная самодостаточность
Целевые показатели (горизонт 5–7 лет):
- ≥ 75% локализации в критических отраслях (машиностроение, энергетика, оборонно-промышленный комплекс);
- ≥ 60% локализации микроэлектронной компонентной базы;
- ≥ 80% внутреннего обеспечения стратегических материалов.
Контрольная метрика: Индекс промышленной автономности (IPA).
2.2. Финансовая устойчивость
Риски XXI века — это расчётные блокировки и валютная зависимость.
Целевые ориентиры:
- ≥ 70% внешнеторговых операций — в альтернативных расчётных механизмах;
- формирование резервной модели межбанковских расчётов;
- доля стратегических резервов ≥ 24 месяцев покрытия импорта критических позиций.
Контрольная метрика: Коэффициент финансовой независимости (KFI).
2.3. Энергетическая автономность
Энергия = управляемость. Параметры:
- ≥ 90% внутреннего энергобаланса за счёт собственных ресурсов;
- ≥ 20% доли распределённой генерации;
- резервирование критических объектов (100%).
Метрика: Индекс энергетической устойчивости (IEU).
2.4. Продовольственная безопасность
Продовольствие — фактор социальной стабильности.
Цели:
- ≥ 95% внутреннего обеспечения базовых продуктов;
- стратегический резерв ≥ 12 месяцев;
- автономность семенного фонда ≥ 80%.
Метрика: Коэффициент продовольственной автономии (KPA).
2.5. Технологическая добавленная стоимость
Сырьевая модель усиливает уязвимость. Целевой вектор:
- рост доли продукции с высокой добавленной стоимостью ≥ 50% в структуре экспорта;
- увеличение расходов на НИОКР до ≥ 3% ВВП;
- рост доли высокотехнологичных отраслей ≥ 25% ВВП.
Метрика: Индекс технологической глубины (ITG).
3. Институциональные механизмы реализации
4. Экономическая модель «Оборона через развитие»
Формула:
Экономическая устойчивость = Производство × Технологии × Финансовая автономия × Кадры
Если один элемент ослаблен — система уязвима.
5. Матрица экономических рисков (усиленная версия)
|
Риск |
Вероятность |
Ущерб |
Приоритет ответа |
|
Технологическая блокировка |
Высокая |
Критический |
Максимальный |
|
Финансовая изоляция |
Средняя–высокая |
Высокий |
Высокий |
|
Логистические ограничения |
Средняя |
Высокий |
Высокий |
|
Сырьевая зависимость |
Средняя |
Средний |
Средний |
|
Демографическое снижение |
Средняя |
Стратегический |
Максимальный |
6. Итоговая позиция для письма
Можно добавить финальный акцент:
Экономическая устойчивость рассматривается как элемент национальной оборонной архитектуры, обеспечивающий долгосрочную способность к стратегическому сдерживанию и развитию.
Приложение А. Сценарный анализ устойчивости
Методика
Оцениваем систему по 5 контурам (военный, технологический, экономический, когнитивный, институциональный) через:
- вероятность события (Н/С/В),
- ущерб (Н/С/В/Критический),
- время реакции (часы/дни/недели),
- порог устойчивости (какие резервы/дубли нужны, чтобы не “провалиться”).
Сценарий 1. Оптимистичный
“Управляемая конкуренция + окно развития”
Триггеры
- внешнее давление не нарастает, гибридные атаки остаются «фоновыми»;
- сохраняются каналы торговли/кооперации через альтернативные маршруты.
Окно возможностей
- ускоренная локализация критических компонентов;
- модернизация промышленности без мобилизационного режима;
- рост внутреннего спроса на высокотех.
Приоритетные действия
- Поднять НИОКР и кадровые программы (инженеры/прикладные науки).
- Дотянуть импортозамещение до “критического минимума” по компонентам.
- Ввести постоянный мониторинг рисков и техзависимостей (квартальные аудиты).
Целевой результат
- устойчивость без стресс-режима, рост технологической глубины.
Сценарий 2. Базовый
“Длительное давление + волны ограничений”
Триггеры
- периодические новые пакеты ограничений;
- удорожание логистики, локальные сбои поставок;
- нарастание киберинцидентов и информационных кампаний.
Ключевые риски
- “узкие места” в микроэлектронике/станкостроении/ПО;
- срывы по критическим материалам и комплектующим;
- деградация доверия из-за экономической турбулентности и атак на идентичность.
Приоритетные действия
- Матрица критических зависимостей (компонент → поставщик → замена → срок).
- Резервирование: запасы критических позиций (12–24 месяца).
- Дублирование контуров управления: автономные каналы связи/данных.
- Промышленная кооперация полного цикла (кластерный принцип).
Целевой результат
- система держит давление без потери управляемости и без “проедания” будущего.
Сценарий 3. Стресс
“Резкая эскалация: финансово-технологический разрыв + киберудары”
Триггеры
- ограничение расчётов/ликвидности по внешним каналам;
- критические санкции по оборудованию/компонентам;
- массированные кибератаки по энергетике/связи/логистике;
- синхронная информационная операция на деморализацию/раскол.
Профиль ущерба: высокий/критический, особенно в первые 30–90 дней.
Антикризисный контур (что должно быть готово заранее)
- Режим автономности: резервные схемы платежей/клиринга, приоритетные отрасли.
- Операционный “war room”: единый центр координации инцидентов (кибер + логистика + энергосеть + инфо).
- Оборона критической инфраструктуры: изоляция сегментов, ручные протоколы, резервные мощности.
- Социальная устойчивость: защита доходов базовых групп, контроль цен на критический набор.
- Мобилизационное импортозамещение: быстрые линии замещения, перераспределение мощностей.
Целевой результат: удержание управляемости, предотвращение каскадного отказа инфраструктуры.
Приложение Б. Таблица межотраслевой синхронизации
Идея простая: оборонная устойчивость достигается не отраслью, а стыками (данные ↔ энергия ↔ производство ↔ кадры ↔ логистика ↔ финансы ↔ смысл).
1) Матрица “Контур → Отрасль → Выход → KPI”
|
Контур |
Опорные отрасли |
Критический выход |
KPI (пример) |
|
Военно-стратегический |
связь, спутники, приборостроение |
устойчивое управление |
время восстановления управления; доля защищённых каналов |
|
Технологический |
микроэлектроника, станкостроение, ПО |
независимые цепочки |
доля локализации; доля отечественного ПО в критсистемах |
|
Экономический |
промышленность, энергетика, финансы |
ресурсная база |
запасы критпозиций; автономность энергобаланса |
|
Когнитивный |
образование, медиа, культура |
устойчивость общества |
индекс доверия; скорость нейтрализации инфокампаний |
|
Институциональный |
госуправление, стандартизация |
координация |
время принятия решений; % проектов с межвед. синхронизацией |
2) Таблица “7 ключевых цепочек” (самые важные стыки)
|
Цепочка |
Зачем нужна |
Узкое место |
Что синхронизировать |
|
Микроэлектроника → связь → управление |
управляемость страны |
компоненты/фабрики |
локализация + стандарты + сертификация |
|
Энергия → промышленность → логистика |
устойчивость производства |
сети/резерв |
распределённая генерация + резервирование объектов |
|
Данные → ИИ → киберзащита |
опережающая оборона |
кадры/ПО |
дата-центры + обучение + протоколы реагирования |
|
Финансы → расчёты → внешняя торговля |
устойчивость обмена |
клиринг/валюта |
альтернативные расчёты + резервы + маршруты |
|
Материалы → химия → машиностроение |
производство полного цикла |
редкие материалы |
складские резервы + переработка + замены |
|
Образование → кадры → НИОКР |
технологический рывок |
утечка мозгов |
гранты + инженерные школы + заказ на НИОКР |
|
Смысл → доверие → мобилизационная готовность |
социальная устойчивость |
поляризация |
коммуникация + культура + медиаграмотность |
3) Мини-реестр “Критические зависимости” (шаблон строки)
Это вставляется таблицей в приложение и заполняется по факту:
- Позиция (компонент/материал/ПО)
- Система (где используется)
- Текущий источник (внешний/внутренний)
- Риск (блокировка/удорожание/срыв)
- Замена (аналог/разработка)
- Срок замены (6/12/24/36 мес)
- Резерв (склад, месяцы покрытия)
- Ответственный контур (технологии/экономика/институции)
Приложение В. Стресс-тест устойчивости: 10 критических систем Союза
Шкала
- Порог отказа — что считается “красной зоной” (по времени/масштабу).
- Каскад — какие системы падают следом.
- План восстановления — что делаем в первые 24 часа / 72 часа / 30 дней.
- KPI готовности — чем измеряем реальную готовность (а не отчётность).
1) Энергосистема (генерация + сети + диспетчеризация)
Порог отказа: потеря ≥ 15% мощности в регионе на > 6 часов, либо нарушение частоты/устойчивости сети.
Каскад: связь → вода/тепло → промышленность → логистика → здравоохранение.
План восстановления
- 0–24ч: изоляция аварийных сегментов, приоритетное питание критобъектов, ввод резервов (ДГУ/газотурбины), ручные протоколы управления.
- 24–72ч: перераспределение потоков, запуск распределённой генерации, переброска мобильных подстанций.
- до 30д: ремонт “узких мест”, создание постоянных резервных схем и складов криткомплектов.
KPI
- время восстановления критнагрузок (часы);
- доля критобъектов с резервным питанием (%);
- время переключения на резервные схемы (мин).
2) Связь и управление (магистрали, спецсвязь, радиосети)
Порог отказа: деградация управляемости > 2 часов (неустойчивые каналы в ключевых звеньях).
Каскад: госуправление → оборона → финансы → логистика.
План восстановления
- 0–24ч: переход на защищённые резервные каналы, приоритет трафика, отключение компрометированных сегментов.
- 24–72ч: развёртывание мобильных узлов, спутниковое резервирование, восстановление маршрутизации.
- до 30д: обновление криптоконтуров, “двойной контур” связи на всех уровнях.
KPI
- доля защищённых каналов (%);
- время переключения на резерв (мин);
- доля автономных узлов связи (%).
3) Финансовая система и расчёты
Порог отказа: невозможность массовых расчётов > 24 часов или заморозка внешних клиринговых каналов.
Каскад: торговля → логистика → социальная напряжённость.
План восстановления
- 0–24ч: включение резервного контура расчётов (внутренние клиринги), лимитирование рисков, приоритет зарплат/пенсий/критзакупок.
- 24–72ч: перевод внешних операций в альтернативные механизмы, стабилизация ликвидности.
- до 30д: расширение автономных платёжных каналов, регламенты “финансовой мобилизации”.
KPI
- непрерывность выплат населению (%);
- доля операций, проходящих через резервный контур (%);
- время восстановления массовых платежей (часы).
4) Логистика и транспорт (ЖД/порты/авто/авиа узлы)
Порог отказа: сбой поставок критгрузов > 72 часов или блокировка ключевых узлов.
Каскад: продовольствие → топливо → промышленность.
План восстановления
- 0–24ч: переориентация маршрутов, приоритет критгрузов, ввод спецрежима в узлах.
- 24–72ч: мобилизация резервных перевозчиков, распределение складских резервов.
- до 30д: создание дублёров маршрутов, контейнерные/складские мощности, “сухие порты”.
KPI
- доставка критгрузов в SLA (%);
- время обхода блокированного узла (часы/дни);
- запас складских резервов (дни покрытия).
5) Продовольствие и агроцепочки
Порог отказа: дефицит базовой корзины в регионе > 7 дней или ценовой шок > заданного коридора.
Каскад: социальная устойчивость → доверие → управляемость.
План восстановления
- 0–24ч: выпуск резервов, ценовые коридоры на критнабор, приоритетная логистика.
- 24–72ч: перераспределение по регионам, поддержка производителей/переработки.
- до 30д: укрепление семенного/кормового фонда, расширение переработки, складская инфраструктура.
KPI
- дни покрытия стратегрезервом;
- стабильность цены базовой корзины (% отклонения);
- доля внутреннего обеспечения (%).
6) Здравоохранение и санитарная готовность
Порог отказа: перегрузка стационаров > 20% мощностей на 2+ недели или дефицит критлекарств.
Каскад: демография → экономика → доверие.
План восстановления
- 0–24ч: triage-протоколы, перераспределение потоков, мобилизация запасов.
- 24–72ч: развертывание временных мощностей, логистика лекарств/расходников.
- до 30д: расширение отечественного производства критпозиций, обновление стандартов.
KPI
- обеспеченность критпрепаратами (дни);
- время развёртывания допмощностей (сутки);
- доля отечественных критмедизделий (%).
7) Госуправление и непрерывность власти
Порог отказа: неспособность принимать/доводить решения на ключевых уровнях > 2 часов.
Каскад: всё.
План восстановления
- 0–24ч: переход на резервные центры управления, регламенты “управление без ИТ”, приоритетные каналы.
- 24–72ч: синхронизация уровней, единый штаб инцидента (war room).
- до 30д: “дублирование управляемости” (центры, кадры, связь, процедуры).
KPI
- время восстановления цепочки командования;
- доля органов с резервным управлением (%);
- частота учений (раз/год).
8) ОПК и промышленная мобилизация
Порог отказа: срыв критпроизводств/комплектующих > 30 дней.
Каскад: военный контур → технологический → внешнеполитический.
План восстановления
KPI
9) Образование/кадры/НИОКР (инженерный контур)
Порог отказа: устойчивый дефицит ключевых специалистов или утечка компетенций.
Каскад: технологии → промышленность → оборона.
План восстановления
- 0–24ч: приоритизация ключевых компетенций, “кадровый реестр”.
- 24–72ч: стимулирующие пакеты, ускоренные программы переподготовки.
- до 30д: инженерные школы, гранты НИОКР, заказ на прикладные разработки.
KPI
- выпуск инженеров/год по приоритетам;
- доля НИОКР от ВВП (%);
- срок закрытия вакансий в критсферах (дни).
10) Медиа/инфосреда/когнитивная устойчивость
Порог отказа: массовая поляризация, падение доверия ниже критпорога или успешные инфооперации, вызывающие управленческий паралич.
Каскад: социальная устойчивость → госуправление → экономика.
План восстановления
- 0–24ч: единый центр коммуникации кризиса, быстрый факт-контур, пресечение паники.
- 24–72ч: разъяснительные кампании, медиаграмотность, работа с лидерами сообществ.
- до 30д: системная стратегия смысловой безопасности (образование + культура + медиа).
KPI
- скорость опровержения деструктивного вброса (часы);
- индекс доверия к институтам;
- доля населения с базовой медиаграмотностью (%).
Приложение Г. “War Room” — единый штаб инцидента (шаблон структуры)
Состав:
энергия, связь, кибер, финансы, логистика, соцблок, медиа, промышленность.
Единый протокол:
обнаружение → изоляция → восстановление → пост-анализ.
Режим:
24/7 при стресс-сценарии, еженедельные учения в базовом режиме.
ПАСПОРТ УСТОЙЧИВОСТИ
(стандарт для критической системы Союза)
1. Идентификация системы
- Название системы:
- Контур (военный / технологический / экономический / когнитивный / институциональный):
- Уровень критичности: I / II / III
- Ответственный орган/координатор:
2. Целевая функция
Что система обязана обеспечивать при любых условиях? (формулировка в 1–2 строках, без общих слов)
3. Порог отказа (красная зона)
Конкретно:
- Время деградации:
- Масштаб:
- Потеря функционала (%):
4. Резервирование
- Физический резерв (мощности, склады, оборудование):
- Информационный резерв (дублирующие каналы):
- Кадровый резерв:
- Финансовый резерв:
5. Сценарий реагирования. 0–24 часа
(первые действия) 24–72 часа
(стабилизация) До 30 дней
(восстановление и усиление)
6. KPI устойчивости
- Время восстановления (RTO):
- Допустимая потеря данных (RPO):
- % автономности:
- Частота стресс-тестов:
- Индекс готовности (сводный):
7. Уровень зрелости
1 — декларативный
2 — частично реализованный
3 — функционирующий
4 — регулярно тестируемый
5 — устойчивый к стресс-сценарию
Пример 1
Паспорт устойчивости — Энергосистема
Контур: экономико-технологический
Критичность: I
Целевая функция:
Обеспечение непрерывного энергоснабжения критической инфраструктуры и промышленности.
Порог отказа:
Потеря > 15% мощности в регионе на > 6 часов.
Резервирование:
- 20% распределённой генерации
- 100% резервирование критических объектов
- 30 дней запасов ключевых комплектующих
KPI:
- Время восстановления < 12 часов
- 95% критобъектов с автономным питанием
- 2 стресс-теста в год
Пример 2
Паспорт устойчивости — Финансовая система
Контур: экономический
Критичность: I
Целевая функция:
Непрерывность расчётов и социальных выплат.
Порог отказа:
Невозможность массовых операций > 24 часов.
Резервирование:
- Альтернативный клиринговый механизм
- 24 месяца покрытия импорта критических позиций
- 2 независимых дата-центра
KPI:
- 99% выплат в срок
- Восстановление массовых платежей < 6 часов
- Доля автономных расчётов ≥ 70%
Пример 3
Паспорт устойчивости — Связь и управление
Контур: институционально-военный
Критичность: I
Целевая функция:
Гарантированная управляемость на всех уровнях.
Порог отказа:
Нарушение устойчивой связи > 2 часов.
Резервирование:
- Дублирующие каналы (оптика + спутник + радиорезерв)
- Резервные центры управления
- Криптографический двойной контур
KPI:
- Переключение на резерв < 10 минут
- 100% ключевых узлов с дублированием
- Ежеквартальные учения
Как это использовать стратегически
Если документ направляется официально, рекомендую:
- Сделать 10 паспортов (по всем критическим системам).
- Свести их в сводную таблицу “Индекс устойчивости Союза”.
- Ввести ежегодную процедуру аудита.
- Добавить раздел “динамика показателей за 3 года”.
I. СВОДНЫЙ ИНДЕКС УСТОЙЧИВОСТИ СОЮЗА (SIU)
1. Логика индекса
Устойчивость — это не сумма, а произведение контуров.
Если один контур слабый — вся система уязвима.
Формула:
SIU = (W × T × E × C × I)^{1/5},
Где:
- W — Военный контур
- T — Технологический
- E — Экономический
- C — Когнитивный (социальный)
- I — Институциональный
Каждый контур оценивается по шкале 0–100.
Используется геометрическое среднее, чтобы слабое звено снижало общий показатель.
2. Внутренний расчёт каждого контура
Каждый контур = среднее по 5 параметрам:
Контур |
Параметры |
W |
Сдерживание, автономность управления, резервирование, киберустойчивость, учения |
T |
Локализация, НИОКР, кадровый резерв, независимость ПО, глубина производства |
E |
Промышленность, финансы, энергия, продовольствие, логистика |
C |
Доверие, информационная устойчивость, образование, культурная интеграция, мобилизационная готовность |
I |
Скорость решений, межотраслевая координация, дублирование центров, аудит рисков, прозрачность KPI |
3. Шкала интерпретации
SIU |
Уровень |
|
0–40 |
Уязвимая система |
|
40–60 |
Частично устойчивая |
|
60–75 |
Стабильная |
|
75–85 |
Высокая устойчивость |
|
85–100 |
Стратегически защищённая |
4. Пример расчёта (условный)
W = 78
T = 62
E = 70
C = 65
I = 60
SIU ≈ 66 Вывод: система стабильна, но технологический и институциональный контуры требуют усиления.
II. ДОРОЖНАЯ КАРТА: ПЕРЕХОД 2 → 5
Уровни зрелости
2 — Частично реализовано
3 — Функционирует
4 — Регулярно тестируется
5 — Устойчиво к стресс-сценарию
ЭТАП 1 (0–2 года)
Переход 2 → 3. Цель: Формализовать систему.
- Утвердить паспорта устойчивости.
- Ввести единый реестр критических зависимостей.
- Запустить ежегодный аудит SIU.
- Создать центр мониторинга рисков.
- Начать квартальные стресс-тесты.
Результат: система управляется.
ЭТАП 2 (2–5 лет)
Переход 3 → 4. Цель: Проверить систему в практике.
- Регулярные межотраслевые учения.
- Дублирование центров управления.
- Увеличение резервов до нормативных уровней.
- Локализация 60–75% критических компонентов.
- Повышение НИОКР ≥ 3% ВВП.
Результат: система выдерживает базовый стресс.
ЭТАП 3 (5–10 лет)
Переход 4 → 5. Цель: Полная стратегическая автономность.
- Полный двойной контур управления.
- 80–90% автономности критических отраслей.
- Устойчивость к финансовой изоляции.
- Высокий индекс доверия (>75).
- SIU ≥ 80.
Результат: агрессия становится нерациональной.
III. Контрольный механизм
Раз в год:
- Пересчёт SIU.
- Обновление паспортов.
- Публичный (или закрытый) отчёт по динамике.
- Корректировка дорожной карты.
Главное
Устойчивость — это не доклад. Это управляемая динамика показателей.
ПЛАТФОРМА «СОЮЗ»
Прототип интерфейса (MVP)
1️⃣ Главный экран — STRATEGIC DASHBOARD
Центральный элемент:
SIU — Сводный индекс устойчивости
Большой круговой индикатор:
- 0–40 красная зона
- 40–60 жёлтая
- 60–75 зелёная
- 75+ тёмно-зелёная
Под ним — динамика за 12 месяцев.
Справа — 5 контуров
Контур |
Индекс |
Тренд |
|
Военный |
78 |
↑ |
|
Технологический |
62 |
→ |
|
Экономический |
70 |
↑ |
|
Когнитивный |
65 |
↓ |
|
Институциональный |
60 |
→ |
Клик по каждому — переход к детализации.
2️⃣ Экран контура (пример: Экономический)
Блок 1 — KPI в реальном времени
- Промышленная автономность (%)
- Финансовая устойчивость
- Энергетический баланс
- Продовольственный индекс
- Логистическая устойчивость
Каждый — со светофорной индикацией.
Блок 2 — Карта рисков
Матрица: Вероятность × Ущерб
Риски автоматически подсвечиваются при превышении порога.
Блок 3 — Тренды
График 1 / 3 / 5 лет
- прогноз при текущей динамике.
3️⃣ Модуль “РЕЕСТР ЗАВИСИМОСТЕЙ
Интерфейс:
Фильтр:
- Отрасль
- Уровень риска
- Импортная доля
- Срок замещения
Таблица:
| Компонент | Риск | Замена | Срок | Резерв |
Система автоматически выделяет критические позиции.
4️⃣ МОДУЛЬ “СТРЕСС-ТЕСТ”
Экран сценариев:
- Оптимистичный
- Базовый
- Стресс
Пользователь выбирает событие:
- Финансовая блокировка
- Кибератака
- Логистический сбой
- Энергетический инцидент
Система рассчитывает:
- падение SIU
- время восстановления
- каскадные эффекты
5️⃣ WAR ROOM DIGITAL
Режим активируется автоматически при:
- падении SIU ниже 60
- превышении порога критического риска
Экран делится на 4 зоны:
- Карта событий
- Критические KPI
- Задачи и решения
- Таймер реакции
6️⃣ Архитектура уровней доступа
Уровень 1 — Стратегический
Только индексы и сводная аналитика.
Уровень 2 — Операционный
Отраслевые показатели и риски.
Уровень 3 — Технический
Глубокие данные и параметры.
7️⃣ Техническая архитектура MVP
- Backend: защищённый серверный контур
- База данных: распределённая
- Аналитика: модуль расчёта SIU
- Интерфейс: web + защищённый intranet
- Логи: непрерывный аудит действий
8️⃣ Минимальный функционал запуска (6–9 месяцев)
- Расчёт SIU.
- Дашборд 5 контуров.
- Паспорта устойчивости.
- Базовый стресс-тест.
- Ручной ввод KPI.
Без избыточной сложности.
I. Экономический эффект от роста устойчивости
1. Базовая логика
Устойчивость снижает:
- премию за риск,
- волатильность,
- потери от кризисов,
- издержки импортозамещения в аварийном режиме.
И увеличивает:
- инвестиционную привлекательность,
- глубину переработки,
- добавленную стоимость,
- технологическую самостоятельность.
2. Модель влияния на ВВП.
Разделим эффект на 4 блока:
1️⃣ Снижение кризисных потерь
Исторически кризисы “съедают” 3–8% ВВП в стресс-сценарии.
Повышение SIU с 60 → 80 снижает потери на 30–50%.
Экономия: ≈ 1,5–3% ВВП ежегодно в горизонте 10 лет.
2️⃣ Рост технологической добавленной стоимости
Увеличение доли высокотеха:+10% к структуре экспорта
= +2–3% к ВВП в среднесрочной перспективе.
3️⃣ Снижение финансовых издержек
Устойчивость уменьшает:
- стоимость заимствований,
- санкционные потери,
- утечку капитала.
Оценочный эффект: +0,5–1,5% ВВП.
4️⃣ Инфраструктурный мультипликатор
Инвестиции в:
- энергетику,
- цифровизацию,
- промышленную кооперацию,
- дают мультипликатор 1,4–1,8.
3. Суммарный эффект
При переходе SIU 65 → 80: Потенциальный прирост ВВП: +3–6% к базовой траектории в горизонте 7–10 лет.
Главное: устойчивость окупается.
II. Платформа мониторинга “СОЮЗ”
Переходим к цифровому управлению.
Архитектура платформы “СОЮЗ”
1. Цель
Реальный мониторинг устойчивости в режиме 24/7. Не отчёты раз в год. А живая система.
2. Основные модули
МОДУЛЬ 1 — SIU-CORE
- Автоматический расчёт индекса устойчивости.
- Дашборд 5 контуров.
- Динамика за 1–5–10 лет.
МОДУЛЬ 2 — РЕЕСТР КРИТИЧЕСКИХ ЗАВИСИМОСТЕЙ
- Компонент → отрасль → поставщик → риск.
- Сигналы при превышении порога.
МОДУЛЬ 3 — СТРЕСС-ТЕСТ ENGINE
- Моделирование сценариев.
- Оценка каскадных эффектов.
- Прогноз времени восстановления.
МОДУЛЬ 4 — KPI МОНИТОРИНГ
- Энергия.
- Связь.
- Финансы.
- Логистика.
- Образование.
- ОПК.
МОДУЛЬ 5 — WAR ROOM DIGITAL
- Интеграция данных в кризисе.
- Центр принятия решений.
- История инцидентов.
3. Технологическая архитектура
Платформа включает:
- защищённый дата-контур,
- распределённые узлы,
- аналитический слой (AI),
- интерфейс стратегического управления.
4. Уровни доступа
- Стратегический (сводный индекс).
- Операционный (отраслевые показатели).
- Технический (конкретные метрики и тревоги).
5. Этапность внедрения
Этап 1 (1–2 года)
- Запуск SIU-CORE.
- Паспорта устойчивости.
- Базовые стресс-тесты.
Этап 2 (3–5 лет)
- Интеграция отраслевых данных.
- Автоматические сигналы.
- Центр цифрового мониторинга.
Этап 3 (5–10 лет)
- Полный цифровой двойник устойчивости.
- Прогнозирование на базе ИИ.
- Предиктивная защита.
Итоговая связка. Рост SIU →Снижение рисков →Рост инвестиций →Рост ВВП →Усиление устойчивости. Замкнутый цикл.
Data Model (схема данных) платформы “СОЮЗ” для MVP. Это можно сразу отдавать архитектору/разработчику: сущности, связи, поля, правила версионирования и расчёта SIU.
Data Model платформы «СОЮЗ» (MVP)
0) Принципы модели
- Событийность: всё важное фиксируется как измерение / инцидент / решение / тест.
- Версионность: паспорта, KPI и пороги имеют версии (чтобы аудит видел историю).
- Иерархия: Система → Контур → Подсистема → KPI → Измерение.
- Нормативы vs Факт: отдельно храним целевые значения и фактические измерения.
1) Справочники (core)
1.1 Contour. Контуры устойчивости (5 штук).
- contour_id (PK)
- code (W, T, E, C, I)
- name
- weight (по умолчанию 0.2)
- description
1.2 Critical System. 10 критических систем (энергия, связь, финансы…).
- system_id (PK)
- name
- category (energy/comm/finance/…)
- criticality_level (1/2/3)
- owner_org
- region_scope (national/region/local)
- status (active/archived)
1.3 Subsystem. Подсистемы внутри CriticalSystem.
- subsystem_id (PK)
- system_id (FK → CriticalSystem)
- name
- description
- status
1.4 OrgUnit. Организации/подразделения.
- org_id (PK)
- name
- type (operator/regulator/analysis/…)
- contact_role (не персональные данные, только роль)
- status
1.5 UserRole (RBAC). Роли доступа.
- role_id (PK)
- name (strategic/operational/technical/auditor/admin)
- permissions (json/bitmask)
2) Паспорта устойчивости (версии и контроль)
2.1 ResiliencePassport. Паспорт системы (актуальная “шапка”).
- passport_id (PK)
- system_id (FK)
- contour_id (FK)
- current_version_id (FK → PassportVersion)
- maturity_level (1–5)
- created_at, updated_at
2.2 PassportVersion. Версия паспорта (аудит и изменения).
- version_id (PK)
- passport_id (FK)
- version_no (int)
- target_function (text)
- failure_threshold (text + structured fields ниже)
- rto_target_hours (float)
- rpo_target_hours (float)
- autonomy_target_pct (float)
- test_frequency_per_year (int)
- approved_by_org (FK → OrgUnit)
- effective_from, effective_to
- notes
2.3 FailureThreshold. (опционально, если нужно структурировать)
- threshold_id (PK)
- version_id (FK)
- metric (e.g. “capacity_loss_pct”, “outage_hours”)
- operator (>, >=, <…)
- value (float)
- unit
2.4 ReserveProfile. Профиль резервов по версии паспорта.
- reserve_id (PK)
- version_id (FK)
- reserve_type (physical/data/people/finance)
- description
- coverage_days (float, nullable)
- capacity_units (nullable)
- last_verified_at
3) KPI и измерения
3.1 KPI. Справочник KPI.
- kpi_id (PK)
- name
- unit (%, hours, days, index)
- aggregation (avg/min/max/last/weighted)
- direction (higher_is_better / lower_is_better)
- description
3.2 KPIDefinition. Привязка KPI к системе/подсистеме и контуру + нормативы.
- kpi_def_id (PK)
- kpi_id (FK)
- system_id (FK)
- subsystem_id (FK, nullable)
- contour_id (FK)
- target_value (float)
- warning_value (float)
- critical_value (float)
- weight_in_contour (float) (сумма по контуру = 1.0)
- effective_from, effective_to
- source_type (manual/api/import)
- owner_org (FK)
3.3 Measurement. Фактические измерения KPI.
- measurement_id (PK)
- kpi_def_id (FK)
- timestamp
- value (float)
- quality_flag (ok/suspect/missing)
- ingested_at
- source_ref (строка: файл/датчик/система)
4) Риски и зависимости
4.1 RiskRegister. Реестр рисков (в т.ч. для матрицы вероятн×ущерб).
- risk_id (PK)
- name
- type (tech/finance/cyber/logistics/info/…)
- description
- probability (1–5)
- impact (1–5)
- risk_score (computed = prob×impact)
- owner_org (FK)
- status (open/mitigating/closed)
- last_reviewed_at
4.2 DependencyItem. Критические зависимости (компонент/ПО/материал).
- dep_id (PK)
- system_id (FK)
- subsystem_id (FK, nullable)
- item_name
- item_type (component/material/software/service)
- current_source (domestic/foreign/mixed)
- import_share_pct (float)
- substitution_plan (text)
- substitution_due_months (int)
- reserve_coverage_months (float)
- risk_level (low/med/high/critical)
- owner_org (FK)
- updated_at
5) Инциденты и War Room
5.1 Incident. Инцидент/событие (реальный или учение).
- incident_id (PK)
- system_id (FK)
- incident_type (cyber/outage/supply/finance/info/…)
- severity (1–5)
- started_at, ended_at
- status (open/contained/recovered/closed)
- summary
- root_cause (nullable)
- created_by_role (FK → UserRole)
5.2 IncidentImpact. Каскадный эффект (какие KPI/системы задеты).
- impact_id (PK)
- incident_id (FK)
- kpi_def_id (FK, nullable)
- affected_system_id (FK, nullable)
- delta_value (float, nullable)
- notes
5.3 DecisionLog. Журнал решений War Room.
- decision_id (PK)
- incident_id (FK)
- time
- decision_text
- assigned_org (FK)
- deadline
- status (planned/in_progress/done)
- evidence_ref (nullable)
6) Стресс-тесты и сценарии
6.1 Scenario
- scenario_id (PK)
- name (optimistic/base/stress + custom)
- description
- assumptions (text/json)
- created_at
6.2 StressTestRun. Запуск теста.
- run_id (PK)
- scenario_id (FK)
- initiated_at
- initiated_by_role
- scope (national/region/system)
- status
6.3 StressTestResult. Результаты по системам/контурам.
- result_id (PK)
- run_id (FK)
- system_id (FK)
- contour_id (FK)
- expected_siu_drop (float)
- expected_rto_hours (float)
- critical_findings (text)
- recommended_actions (text)
7) Расчёт индексов (SIU)
7.1 ContourScore. Сводный балл контура за период.
- contour_score_id (PK)
- contour_id (FK)
- period_start, period_end
- score_0_100
- computed_at
- method_version (чтобы менять методику)
7.2 SIUScore. Индекс SIU.
- siu_id (PK)
- period_start, period_end
- siu_0_100
- w_score, t_score, e_score, c_score, i_score
- computed_at
- method_version
Правило расчёта (MVP)
- Считаем каждый ContourScore как взвешенное среднее KPI по KPI Definition.weight_in_contour за период (например, last/avg).
- SIU = геометрическое среднее пяти контуров:
SIU = (W × T × E × C × I)^{1/5} - Если по контуру много missing, вводим штраф (например, -5…-15), чтобы стимулировать данные.
8) Связи (коротко)
- Contour 1—N Resilience Passport
- CriticalSystem 1—N ResiliencePassport, 1—N Subsystem, 1—N KPIDefinition, 1—N Incident, 1—N DependencyItem
- KPI 1—N KPIDefinition
- KPIDefinition 1—N Measurement
- Incident 1—N DecisionLog, 1—N IncidentImpact
- Scenario 1—N StressTestRun 1—N StressTestResult
- ContourScore + SIUScore — периодические агрегаты
9) Минимальный набор данных для запуска MVP
Чтобы платформа “жила” сразу:
- 10 CriticalSystem
- 5 Contour
- по 5 KPI на контур (25 KPI минимум)
- 1 паспорт на систему (10 паспортов) + версии
- еженедельный импорт Measurement (даже ручной)
- 1 базовый сценарий стресс-теста
DDL-скелет под PostgreSQL (таблицы/ключи/индексы) и wireframe навигации/экранов строго под наш Data Model.
1) PostgreSQL DDL (скелет)
-- =========================================
-- PLATFORM "SOYUZ" - MVP DDL (PostgreSQL)
-- =========================================
-- 0) Enums (можно заменить на справочники)
DO $$ BEGIN
CREATE TYPE risk_status AS ENUM ('open','mitigating','closed');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE incident_status AS ENUM ('open','contained','recovered','closed');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE quality_flag AS ENUM ('ok','suspect','missing');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE kpi_direction AS ENUM ('higher_is_better','lower_is_better');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE kpi_aggregation AS ENUM ('avg','min','max','last','weighted');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE system_status AS ENUM ('active','archived');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE reserve_type AS ENUM ('physical','data','people','finance');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE dependency_type AS ENUM ('component','material','software','service');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN
CREATE TYPE source_type AS ENUM ('manual','api','import');
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
-- 1) Core reference tables
CREATE TABLE IF NOT EXISTS contour (
contour_id BIGSERIAL PRIMARY KEY,
code TEXT NOT NULL UNIQUE CHECK (code IN ('W','T','E','C','I')),
name TEXT NOT NULL,
weight NUMERIC(6,4) NOT NULL DEFAULT 0.2000,
description TEXT
);
CREATE TABLE IF NOT EXISTS org_unit (
org_id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
type TEXT,
contact_role TEXT, -- только роль, без персональных данных
status system_status NOT NULL DEFAULT 'active'
);
CREATE TABLE IF NOT EXISTS user_role (
role_id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE, -- strategic/operational/technical/auditor/admin
permissions JSONB NOT NULL DEFAULT '{}'::jsonb
);
CREATE TABLE IF NOT EXISTS critical_system (
system_id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
category TEXT NOT NULL, -- energy/comm/finance/logistics/...
criticality_level SMALLINT NOT NULL CHECK (criticality_level BETWEEN 1 AND 3),
owner_org BIGINT REFERENCES org_unit(org_id),
region_scope TEXT NOT NULL DEFAULT 'national',
status system_status NOT NULL DEFAULT 'active'
);
CREATE TABLE IF NOT EXISTS subsystem (
subsystem_id BIGSERIAL PRIMARY KEY,
system_id BIGINT NOT NULL REFERENCES critical_system(system_id) ON DELETE CASCADE,
name TEXT NOT NULL,
description TEXT,
status system_status NOT NULL DEFAULT 'active',
UNIQUE(system_id, name)
);
-- 2) Passports (versioned)
CREATE TABLE IF NOT EXISTS resilience_passport (
passport_id BIGSERIAL PRIMARY KEY,
system_id BIGINT NOT NULL REFERENCES critical_system(system_id) ON DELETE CASCADE,
contour_id BIGINT NOT NULL REFERENCES contour(contour_id),
current_version_id BIGINT, -- FK added after passport_version exists
maturity_level SMALLINT NOT NULL DEFAULT 2 CHECK (maturity_level BETWEEN 1 AND 5),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(system_id, contour_id)
);
CREATE TABLE IF NOT EXISTS passport_version (
version_id BIGSERIAL PRIMARY KEY,
passport_id BIGINT NOT NULL REFERENCES resilience_passport(passport_id) ON DELETE CASCADE,
version_no INT NOT NULL,
target_function TEXT NOT NULL,
failure_threshold_txt TEXT, -- краткое описание порога отказа
rto_target_hours NUMERIC(10,2),
rpo_target_hours NUMERIC(10,2),
autonomy_target_pct NUMERIC(6,2),
test_frequency_per_year INT,
approved_by_org BIGINT REFERENCES org_unit(org_id),
effective_from DATE NOT NULL DEFAULT CURRENT_DATE,
effective_to DATE,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(passport_id, version_no)
);
ALTER TABLE resilience_passport
ADD CONSTRAINT fk_passport_current_version
FOREIGN KEY (current_version_id) REFERENCES passport_version(version_id);
CREATE TABLE IF NOT EXISTS failure_threshold (
threshold_id BIGSERIAL PRIMARY KEY,
version_id BIGINT NOT NULL REFERENCES passport_version(version_id) ON DELETE CASCADE,
metric TEXT NOT NULL,
operator TEXT NOT NULL, -- >, >=, < ...
value NUMERIC(18,6) NOT NULL,
unit TEXT
);
CREATE TABLE IF NOT EXISTS reserve_profile (
reserve_id BIGSERIAL PRIMARY KEY,
version_id BIGINT NOT NULL REFERENCES passport_version(version_id) ON DELETE CASCADE,
reserve_type reserve_type NOT NULL,
description TEXT,
coverage_days NUMERIC(10,2),
capacity_units TEXT,
last_verified_at TIMESTAMPTZ
);
-- 3) KPI model
CREATE TABLE IF NOT EXISTS kpi (
kpi_id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
unit TEXT NOT NULL,
aggregation kpi_aggregation NOT NULL DEFAULT 'avg',
direction kpi_direction NOT NULL DEFAULT 'higher_is_better',
description TEXT
);
CREATE TABLE IF NOT EXISTS kpi_definition (
kpi_def_id BIGSERIAL PRIMARY KEY,
kpi_id BIGINT NOT NULL REFERENCES kpi(kpi_id),
system_id BIGINT NOT NULL REFERENCES critical_system(system_id) ON DELETE CASCADE,
subsystem_id BIGINT REFERENCES subsystem(subsystem_id) ON DELETE SET NULL,
contour_id BIGINT NOT NULL REFERENCES contour(contour_id),
target_value NUMERIC(18,6),
warning_value NUMERIC(18,6),
critical_value NUMERIC(18,6),
weight_in_contour NUMERIC(8,6) NOT NULL DEFAULT 0.200000,
effective_from DATE NOT NULL DEFAULT CURRENT_DATE,
effective_to DATE,
source_type source_type NOT NULL DEFAULT 'manual',
owner_org BIGINT REFERENCES org_unit(org_id),
CHECK (weight_in_contour >= 0 AND weight_in_contour <= 1)
);
CREATE INDEX IF NOT EXISTS idx_kpi_def_system ON kpi_definition(system_id);
CREATE INDEX IF NOT EXISTS idx_kpi_def_contour ON kpi_definition(contour_id);
CREATE INDEX IF NOT EXISTS idx_kpi_def_kpi ON kpi_definition(kpi_id);
CREATE TABLE IF NOT EXISTS measurement (
measurement_id BIGSERIAL PRIMARY KEY,
kpi_def_id BIGINT NOT NULL REFERENCES kpi_definition(kpi_def_id) ON DELETE CASCADE,
timestamp TIMESTAMPTZ NOT NULL,
value NUMERIC(18,6) NOT NULL,
quality_flag quality_flag NOT NULL DEFAULT 'ok',
ingested_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
source_ref TEXT
);
CREATE INDEX IF NOT EXISTS idx_measurement_kpi_def_time ON measurement(kpi_def_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS idx_measurement_time ON measurement(timestamp DESC);
-- 4) Risks & dependencies
CREATE TABLE IF NOT EXISTS risk_register (
risk_id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
type TEXT NOT NULL,
description TEXT,
probability SMALLINT NOT NULL CHECK (probability BETWEEN 1 AND 5),
impact SMALLINT NOT NULL CHECK (impact BETWEEN 1 AND 5),
risk_score SMALLINT GENERATED ALWAYS AS (probability * impact) STORED,
owner_org BIGINT REFERENCES org_unit(org_id),
status risk_status NOT NULL DEFAULT 'open',
last_reviewed_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_risk_score ON risk_register(risk_score DESC);
CREATE INDEX IF NOT EXISTS idx_risk_status ON risk_register(status);
CREATE TABLE IF NOT EXISTS dependency_item (
dep_id BIGSERIAL PRIMARY KEY,
system_id BIGINT NOT NULL REFERENCES critical_system(system_id) ON DELETE CASCADE,
subsystem_id BIGINT REFERENCES subsystem(subsystem_id) ON DELETE SET NULL,
item_name TEXT NOT NULL,
item_type dependency_type NOT NULL,
current_source TEXT NOT NULL, -- domestic/foreign/mixed
import_share_pct NUMERIC(6,2),
substitution_plan TEXT,
substitution_due_months INT,
reserve_coverage_months NUMERIC(10,2),
risk_level TEXT NOT NULL, -- low/med/high/critical
owner_org BIGINT REFERENCES org_unit(org_id),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_dep_system ON dependency_item(system_id);
CREATE INDEX IF NOT EXISTS idx_dep_risk ON dependency_item(risk_level);
-- 5) Incidents & War Room
CREATE TABLE IF NOT EXISTS incident (
incident_id BIGSERIAL PRIMARY KEY,
system_id BIGINT NOT NULL REFERENCES critical_system(system_id) ON DELETE CASCADE,
incident_type TEXT NOT NULL, -- cyber/outage/supply/finance/info/...
severity SMALLINT NOT NULL CHECK (severity BETWEEN 1 AND 5),
started_at TIMESTAMPTZ NOT NULL,
ended_at TIMESTAMPTZ,
status incident_status NOT NULL DEFAULT 'open',
summary TEXT,
root_cause TEXT,
created_by_role BIGINT REFERENCES user_role(role_id)
);
CREATE INDEX IF NOT EXISTS idx_incident_system ON incident(system_id, started_at DESC);
CREATE INDEX IF NOT EXISTS idx_incident_status ON incident(status);
CREATE TABLE IF NOT EXISTS incident_impact (
impact_id BIGSERIAL PRIMARY KEY,
incident_id BIGINT NOT NULL REFERENCES incident(incident_id) ON DELETE CASCADE,
kpi_def_id BIGINT REFERENCES kpi_definition(kpi_def_id) ON DELETE SET NULL,
affected_system_id BIGINT REFERENCES critical_system(system_id) ON DELETE SET NULL,
delta_value NUMERIC(18,6),
notes TEXT
);
CREATE TABLE IF NOT EXISTS decision_log (
decision_id BIGSERIAL PRIMARY KEY,
incident_id BIGINT NOT NULL REFERENCES incident(incident_id) ON DELETE CASCADE,
time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
decision_text TEXT NOT NULL,
assigned_org BIGINT REFERENCES org_unit(org_id),
deadline TIMESTAMPTZ,
status TEXT NOT NULL DEFAULT 'planned', -- planned/in_progress/done
evidence_ref TEXT
);
CREATE INDEX IF NOT EXISTS idx_decision_incident ON decision_log(incident_id, time DESC);
-- 6) Scenarios & stress tests
CREATE TABLE IF NOT EXISTS scenario (
scenario_id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE, -- optimistic/base/stress/custom
description TEXT,
assumptions JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS stress_test_run (
run_id BIGSERIAL PRIMARY KEY,
scenario_id BIGINT NOT NULL REFERENCES scenario(scenario_id),
initiated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
initiated_by_role BIGINT REFERENCES user_role(role_id),
scope TEXT NOT NULL DEFAULT 'national', -- national/region/system
status TEXT NOT NULL DEFAULT 'running'
);
CREATE TABLE IF NOT EXISTS stress_test_result (
result_id BIGSERIAL PRIMARY KEY,
run_id BIGINT NOT NULL REFERENCES stress_test_run(run_id) ON DELETE CASCADE,
system_id BIGINT NOT NULL REFERENCES critical_system(system_id) ON DELETE CASCADE,
contour_id BIGINT NOT NULL REFERENCES contour(contour_id),
expected_siu_drop NUMERIC(10,2),
expected_rto_hours NUMERIC(10,2),
critical_findings TEXT,
recommended_actions TEXT
);
CREATE INDEX IF NOT EXISTS idx_stress_result_run ON stress_test_result(run_id);
CREATE INDEX IF NOT EXISTS idx_stress_result_system ON stress_test_result(system_id);
-- 7) Scores (computed aggregates)
CREATE TABLE IF NOT EXISTS contour_score (
contour_score_id BIGSERIAL PRIMARY KEY,
contour_id BIGINT NOT NULL REFERENCES contour(contour_id),
period_start DATE NOT NULL,
period_end DATE NOT NULL,
score_0_100 NUMERIC(6,2) NOT NULL CHECK (score_0_100 BETWEEN 0 AND 100),
computed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
method_version TEXT NOT NULL DEFAULT 'mvp_v1',
UNIQUE(contour_id, period_start, period_end, method_version)
);
CREATE TABLE IF NOT EXISTS siu_score (
siu_id BIGSERIAL PRIMARY KEY,
period_start DATE NOT NULL,
period_end DATE NOT NULL,
siu_0_100 NUMERIC(6,2) NOT NULL CHECK (siu_0_100 BETWEEN 0 AND 100),
w_score NUMERIC(6,2) NOT NULL,
t_score NUMERIC(6,2) NOT NULL,
e_score NUMERIC(6,2) NOT NULL,
c_score NUMERIC(6,2) NOT NULL,
i_score NUMERIC(6,2) NOT NULL,
computed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
method_version TEXT NOT NULL DEFAULT 'mvp_v1',
UNIQUE(period_start, period_end, method_version)
);
-- Helpful indexes for dashboard queries
CREATE INDEX IF NOT EXISTS idx_siu_latest ON siu_score(period_end DESC);
CREATE INDEX IF NOT EXISTS idx_contour_score_latest ON contour_score(period_end DESC, contour_id);
Нота по MVP
- В DDL нет таблицы пользователей (логин/аутентификация). Для MVP достаточно RBAC ролей + внешней SSO/LDAP позже.
- Весов много: contour.weight + kpi_definition.weight_in_contour. В MVP можно зафиксировать контуры по 0.2 и управлять только KPI-весами.
2) Wireframe интерфейса (меню + экраны)
Глобальная навигация (левое меню)
- Главная
- Контуры
- W Военный
- T Технологии
- E Экономика
- C Когнитивный
- I Институциональный
- Критические системы
- Энергия
- Связь
- Финансы
- Логистика
- Продовольствие
- Здравоохранение
- Госуправление
- ОПК
- Кадры/НИОКР
- Инфосреда
- Паспорта устойчивости
- KPI и Измерения
- Риски и Зависимости
- Стресс-тесты
- War Room
- Отчёты / Экспорт
- Настройки
- Справочники
- Пороги/шкалы
- Роли доступа
Экран 1: Главная (Strategic Dashboard)
Верхняя панель:
- Период (неделя/месяц/квартал)
- Фильтр (страна/регион/система)
- Кнопка “Запустить стресс-тест”
- Индикатор режима (Normal / Alert / War Room)
Тело:
- Большой SIU gauge
- 5 плиток контуров (W/T/E/C/I): score + тренд + статус
- “Топ-5 рисков” (из risk_register по risk_score)
- “Топ-5 зависимостей” (из dependency_item по risk_level=critical)
- “Активные инциденты” (из incident status=open/contained)
Экран 2: Контур (пример: Экономика)
Вкладки:
- KPI
- Риски
- Зависимости
- События (инциденты)
- Рекомендации (из результатов стресс-тестов)
KPI-вкладка:
- Таблица KPI с порогами (target/warn/critical)
- График тренда по каждому KPI (last 90 days)
- “Провалы данных” (quality_flag=missing) — штраф в индексе
Экран 3: Критическая система (пример: Энергия)
Шапка системы:
- Уровень критичности
- Ответственный орган (org_unit)
- Текущий паспорт (версия)
Блоки:
- KPI системы (в т.ч. подсистемы)
- Порог отказа (из passport_version + failure_threshold)
- Резервы (из reserve_profile)
- Инциденты по системе
- Кнопка “Открыть War Room по системе”
Экран 4: Паспорта устойчивости
- Список паспортов (system + contour + maturity)
- Открытие паспорта → история версий
- Редактор версии (если роль позволяет)
- Кнопка “Назначить текущей” (обновляет current_version_id)
Экран 5: KPI и измерения
- Каталог KPI
- Привязки KPI к системам (kpi_definition)
- Импорт измерений / ручной ввод
- Контроль качества данных (ok/suspect/missing)
- Аудит источников (source_ref)
Экран 6: Риски и зависимости
- Матрица вероятн×ущерб (heatmap)
- Реестр рисков (risk_register)
- Реестр зависимостей (dependency_item) с фильтрами:
- риск_level
- import_share_pct
- substitution_due_months
Экран 7: Стресс-тесты
- Сценарии (scenario)
- Запуски (stress_test_run)
- Результаты (stress_test_result):
- ожидаемое падение SIU
- ожидаемый RTO
- рекомендации
Экран 8: War Room
Лэйаут 4 панели:
- Карта/таймлайн инцидента
- KPI “красной зоны”
- Лента решений (decision_log)
- Задачи/сроки/ответственные (decision_log status)
Авто-вход в War Room, если:
- siu_score < 60 или
- инцидент severity ≥ 4 или
- риск_score ≥ 20 (5×4, 5×5)
1) Расчёт ContourScore и SIU (SQL)
1.1 Нормализация KPI в шкалу 0–100
Идея: каждое измерение KPI переводим в балл 0–100 относительно порогов critical_value / warning_value / target_value.
- Если higher_is_better:
- value ≥ target → 100
- value ≤ critical → 0
- между critical и target — линейная интерполяция (можно усложнить позже)
- Если lower_is_better: зеркально
-- =========================================
-- KPI scoring view (0..100)
-- Uses latest measurement per KPI definition within period
-- =========================================
CREATE OR REPLACE VIEW v_kpi_latest_in_period AS
SELECT
kd.kpi_def_id,
kd.kpi_id,
kd.system_id,
kd.subsystem_id,
kd.contour_id,
kd.target_value,
kd.warning_value,
kd.critical_value,
kd.weight_in_contour,
k.direction,
k.aggregation,
m.timestamp,
m.value,
m.quality_flag
FROM kpi_definition kd
JOIN kpi k ON k.kpi_id = kd.kpi_id
JOIN LATERAL (
SELECT m1.*
FROM measurement m1
WHERE m1.kpi_def_id = kd.kpi_def_id
ORDER BY m1.timestamp DESC
LIMIT 1
) m ON TRUE
WHERE kd.effective_to IS NULL OR kd.effective_to >= CURRENT_DATE;
-- Score each KPI definition to 0..100
CREATE OR REPLACE VIEW v_kpi_score_latest AS
SELECT
v.*,
CASE
WHEN v.quality_flag = 'missing' THEN 0
WHEN v.direction = 'higher_is_better' THEN
CASE
WHEN v.target_value IS NULL OR v.critical_value IS NULL THEN NULL
WHEN v.value >= v.target_value THEN 100
WHEN v.value <= v.critical_value THEN 0
ELSE ROUND( ( (v.value - v.critical_value) / NULLIF((v.target_value - v.critical_value),0) ) * 100, 2)
END
WHEN v.direction = 'lower_is_better' THEN
CASE
WHEN v.target_value IS NULL OR v.critical_value IS NULL THEN NULL
WHEN v.value <= v.target_value THEN 100
WHEN v.value >= v.critical_value THEN 0
ELSE ROUND( ( (v.critical_value - v.value) / NULLIF((v.critical_value - v.target_value),0) ) * 100, 2)
END
ELSE NULL
END AS score_0_100
FROM v_kpi_latest_in_period v;
Примечание: warning_value пока не используется в формуле. В v2 можно сделать “ломаную” функцию: critical→warning→target.
1.2 ContourScore = взвешенное среднее KPI по контуру
-- =========================================
-- Contour score = weighted average of KPI scores
-- =========================================
CREATE OR REPLACE VIEW v_contour_score_current AS
SELECT
c.contour_id,
c.code AS contour_code,
CURRENT_DATE AS period_start,
CURRENT_DATE AS period_end,
ROUND(
SUM(ks.score_0_100 * kd.weight_in_contour) / NULLIF(SUM(kd.weight_in_contour),0),
2
) AS score_0_100,
SUM(CASE WHEN ks.score_0_100 IS NULL THEN 1 ELSE 0 END) AS null_scores_cnt,
SUM(CASE WHEN ks.quality_flag = 'missing' THEN 1 ELSE 0 END) AS missing_cnt
FROM contour c
JOIN kpi_definition kd ON kd.contour_id = c.contour_id
JOIN v_kpi_score_latest ks ON ks.kpi_def_id = kd.kpi_def_id
GROUP BY c.contour_id, c.code;
1.3 SIU = геометрическое среднее 5 контуров + штраф за missing
-- =========================================
-- SIU score = geometric mean of 5 contour scores
-- + optional penalty for missing data
-- =========================================
CREATE OR REPLACE VIEW v_siu_score_current AS
WITH cs AS (
SELECT
contour_code,
score_0_100,
missing_cnt
FROM v_contour_score_current
),
pivot AS (
SELECT
MAX(CASE WHEN contour_code='W' THEN score_0_100 END) AS w_score,
MAX(CASE WHEN contour_code='T' THEN score_0_100 END) AS t_score,
MAX(CASE WHEN contour_code='E' THEN score_0_100 END) AS e_score,
MAX(CASE WHEN contour_code='C' THEN score_0_100 END) AS c_score,
MAX(CASE WHEN contour_code='I' THEN score_0_100 END) AS i_score,
SUM(missing_cnt) AS total_missing
FROM cs
)
SELECT
CURRENT_DATE AS period_start,
CURRENT_DATE AS period_end,
w_score, t_score, e_score, c_score, i_score,
-- Base geometric mean
ROUND(
POWER(
NULLIF(w_score,0) * NULLIF(t_score,0) * NULLIF(e_score,0) * NULLIF(c_score,0) * NULLIF(i_score,0),
1.0/5.0
),
2
) AS siu_base,
-- Penalty: -0.5 per missing KPI (cap -15)
GREATEST(
ROUND(
POWER(
NULLIF(w_score,0) * NULLIF(t_score,0) * NULLIF(e_score,0) * NULLIF(c_score,0) * NULLIF(i_score,0),
1.0/5.0
) - LEAST(total_missing * 0.5, 15),
2
),
0
) AS siu_0_100
FROM pivot;
1.4 (Опционально) materialized views для скорости
-- Materialize contour and SIU daily/weekly via cron/job
CREATE MATERIALIZED VIEW IF NOT EXISTS mv_contour_score_current AS
SELECT * FROM v_contour_score_current;
CREATE MATERIALIZED VIEW IF NOT EXISTS mv_siu_score_current AS
SELECT * FROM v_siu_score_current;
-- Refresh commands:
-- REFRESH MATERIALIZED VIEW mv_contour_score_current;
-- REFRESH MATERIALIZED VIEW mv_siu_score_current;
2) Seed-данные (MVP)
2.1 Контуры, роли, организации, 10 критических систем
-- =========================================
-- SEED DATA - CORE
-- =========================================
-- Contours
INSERT INTO contour (code, name, weight, description) VALUES
('W','Военный',0.2,'Сдерживание, управляемость, киберустойчивость, учения'),
('T','Технологический',0.2,'Локализация, НИОКР, ПО, кадры, производственная глубина'),
('E','Экономический',0.2,'Промышленность, финансы, энергия, продовольствие, логистика'),
('C','Когнитивный',0.2,'Доверие, инфоустойчивость, образование, культура'),
('I','Институциональный',0.2,'Координация, скорость решений, аудит рисков, резервирование управления')
ON CONFLICT (code) DO NOTHING;
-- Roles
INSERT INTO user_role (name, permissions) VALUES
('strategic', '{"read":"all","write":"none"}'),
('operational','{"read":"all","write":"kpi,incident,decision"}'),
('technical', '{"read":"all","write":"kpi,measurement,deps"}'),
('auditor', '{"read":"all","write":"none"}'),
('admin', '{"read":"all","write":"all"}')
ON CONFLICT (name) DO NOTHING;
-- Org units (примерно)
INSERT INTO org_unit (name, type, contact_role, status) VALUES
('Центр мониторинга СОЮЗ','analysis','координатор','active'),
('Оператор критинфры','operator','дежурный','active'),
('Киберцентр','operator','дежурный','active'),
('Финансовый контур','operator','координатор','active'),
('Логистический контур','operator','координатор','active'),
('Инфосреда/коммуникации','operator','координатор','active'),
('НИОКР и кадры','operator','координатор','active')
ON CONFLICT (name) DO NOTHING;
-- 10 Critical systems
INSERT INTO critical_system (name, category, criticality_level, owner_org, region_scope, status)
SELECT x.name, x.category, x.crit, ou.org_id, 'national', 'active'
FROM (VALUES
('Энергосистема','energy',1),
('Связь и управление','comm',1),
('Финансовая система','finance',1),
('Логистика и транспорт','logistics',1),
('Продовольственная система','food',1),
('Здравоохранение','health',2),
('Непрерывность госуправления','governance',1),
('ОПК и промышленная мобилизация','defense_industry',1),
('Кадры и НИОКР','hr_rnd',2),
('Инфосреда и когнитивная устойчивость','info',1)
) AS x(name, category, crit)
JOIN org_unit ou ON ou.name = 'Центр мониторинга СОЮЗ'
ON CONFLICT (name) DO NOTHING;
2.2 KPI (25 штук: по 5 на каждый контур)
-- =========================================
-- SEED DATA - KPI CATALOG (25)
-- =========================================
-- W (higher better unless stated)
INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES
('W1: Автономность управления','%','last','higher_is_better','Доля автономных контуров управления'),
('W2: Доля защищённых каналов','%','last','higher_is_better','Доля защищённых каналов связи'),
('W3: Время переключения на резерв','min','last','lower_is_better','Минуты до перехода на резервные каналы'),
('W4: Киберустойчивость (порог отражения)','index','last','higher_is_better','Индекс устойчивости к атакам'),
('W5: Частота межконтурных учений','per_year','last','higher_is_better','Учения/год');
-- T
INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES
('T1: Локализация криткомпонентов','%','last','higher_is_better','Доля локализованных критических компонентов'),
('T2: Доля отечественного ПО в критсистемах','%','last','higher_is_better','Применение отечественного ПО'),
('T3: НИОКР к ВВП','%GDP','last','higher_is_better','Интенсивность НИОКР'),
('T4: Выпуск инженеров по приоритетам','per_year','last','higher_is_better','Количество выпускников/год'),
('T5: Время замещения криткомпонента','months','last','lower_is_better','Срок замещения узкого места');
-- E
INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES
('E1: Промышленная автономность','%','last','higher_is_better','Самодостаточность производства'),
('E2: Непрерывность массовых платежей','%','last','higher_is_better','Доля платежей без задержек'),
('E3: Энергетическая автономность','%','last','higher_is_better','Доля внутреннего обеспечения энергии'),
('E4: Дни продовольственного резерва','days','last','higher_is_better','Покрытие резервом'),
('E5: SLA доставки критгрузов','%','last','higher_is_better','Доставка критгрузов в SLA');
-- C
INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES
('C1: Индекс доверия к институтам','index','last','higher_is_better','Общественное доверие'),
('C2: Скорость опровержения вбросов','hours','last','lower_is_better','Часы до нейтрализации'),
('C3: Доля медиаграмотности','%','last','higher_is_better','Население с базовой медиаграмотностью'),
('C4: Охват системного образования','%','last','higher_is_better','Доля охвата программами'),
('C5: Индекс социальной связанности','index','last','higher_is_better','Поляризация/связанность');
-- I
INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES
('I1: Время цикла принятия решения','hours','last','lower_is_better','От события до решения'),
('I2: Покрытие паспортами устойчивости','%','last','higher_is_better','Доля систем с паспортами'),
('I3: Регулярность аудита рисков','per_year','last','higher_is_better','Аудитов/год'),
('I4: Дублирование центров управления','%','last','higher_is_better','Покрытие резервными центрами'),
('I5: Исполнение решений в срок','%','last','higher_is_better','Доля задач выполненных в срок')
ON CONFLICT (name) DO NOTHING;
2.3 Привязки KPI к контурам и 10 системам (KPIDefinition)
Чтобы MVP “завёлся”, делаем так: каждый из 25 KPI привязываем ко всем системам (это нормально для MVP, потом дробим по подсистемам). Вес внутри контура = 0.2 (5 KPI).
-- =========================================
-- SEED DATA - KPI DEFINITIONS (25 KPI x 10 systems)
-- =========================================
-- Helper: get contour_id by code
WITH contours AS (
SELECT contour_id, code FROM contour
),
systems AS (
SELECT system_id FROM critical_system WHERE status='active'
),
kpimap AS (
SELECT kpi_id, name FROM kpi
),
defs AS (
SELECT
s.system_id,
c.contour_id,
k.kpi_id,
-- targets/warn/critical per KPI name (MVP rough norms)
CASE
WHEN k.name LIKE 'W1:%' THEN 85
WHEN k.name LIKE 'W2:%' THEN 80
WHEN k.name LIKE 'W3:%' THEN 10
WHEN k.name LIKE 'W4:%' THEN 80
WHEN k.name LIKE 'W5:%' THEN 4
WHEN k.name LIKE 'T1:%' THEN 70
WHEN k.name LIKE 'T2:%' THEN 80
WHEN k.name LIKE 'T3:%' THEN 3
WHEN k.name LIKE 'T4:%' THEN 100000 -- условная шкала, позже нормируем
WHEN k.name LIKE 'T5:%' THEN 12
WHEN k.name LIKE 'E1:%' THEN 75
WHEN k.name LIKE 'E2:%' THEN 99
WHEN k.name LIKE 'E3:%' THEN 90
WHEN k.name LIKE 'E4:%' THEN 180
WHEN k.name LIKE 'E5:%' THEN 95
WHEN k.name LIKE 'C1:%' THEN 75
WHEN k.name LIKE 'C2:%' THEN 6
WHEN k.name LIKE 'C3:%' THEN 60
WHEN k.name LIKE 'C4:%' THEN 50
WHEN k.name LIKE 'C5:%' THEN 70
WHEN k.name LIKE 'I1:%' THEN 12
WHEN k.name LIKE 'I2:%' THEN 100
WHEN k.name LIKE 'I3:%' THEN 4
WHEN k.name LIKE 'I4:%' THEN 80
WHEN k.name LIKE 'I5:%' THEN 90
ELSE NULL
END AS target_value,
CASE
WHEN k.name LIKE 'W3:%' THEN 20
WHEN k.name LIKE 'T5:%' THEN 18
WHEN k.name LIKE 'C2:%' THEN 12
WHEN k.name LIKE 'I1:%' THEN 24
ELSE NULL
END AS warning_value,
CASE
WHEN k.name LIKE 'W1:%' THEN 50
WHEN k.name LIKE 'W2:%' THEN 40
WHEN k.name LIKE 'W3:%' THEN 60
WHEN k.name LIKE 'W4:%' THEN 40
WHEN k.name LIKE 'W5:%' THEN 1
WHEN k.name LIKE 'T1:%' THEN 40
WHEN k.name LIKE 'T2:%' THEN 50
WHEN k.name LIKE 'T3:%' THEN 1
WHEN k.name LIKE 'T4:%' THEN 20000
WHEN k.name LIKE 'T5:%' THEN 36
WHEN k.name LIKE 'E1:%' THEN 50
WHEN k.name LIKE 'E2:%' THEN 90
WHEN k.name LIKE 'E3:%' THEN 70
WHEN k.name LIKE 'E4:%' THEN 30
WHEN k.name LIKE 'E5:%' THEN 80
WHEN k.name LIKE 'C1:%' THEN 45
WHEN k.name LIKE 'C2:%' THEN 48
WHEN k.name LIKE 'C3:%' THEN 30
WHEN k.name LIKE 'C4:%' THEN 20
WHEN k.name LIKE 'C5:%' THEN 40
WHEN k.name LIKE 'I1:%' THEN 72
WHEN k.name LIKE 'I2:%' THEN 60
WHEN k.name LIKE 'I3:%' THEN 1
WHEN k.name LIKE 'I4:%' THEN 40
WHEN k.name LIKE 'I5:%' THEN 60
ELSE NULL
END AS critical_value
FROM systems s
JOIN contours c ON TRUE
JOIN kpimap k ON (
(c.code='W' AND k.name LIKE 'W%:%') OR
(c.code='T' AND k.name LIKE 'T%:%') OR
(c.code='E' AND k.name LIKE 'E%:%') OR
(c.code='C' AND k.name LIKE 'C%:%') OR
(c.code='I' AND k.name LIKE 'I%:%')
)
)
INSERT INTO kpi_definition (
kpi_id, system_id, contour_id,
target_value, warning_value, critical_value,
weight_in_contour, source_type, owner_org
)
SELECT
d.kpi_id, d.system_id, d.contour_id,
d.target_value, d.warning_value, d.critical_value,
0.2,
'manual',
(SELECT org_id FROM org_unit WHERE name='Центр мониторинга СОЮЗ' LIMIT 1)
FROM defs d
ON CONFLICT DO NOTHING;
Важно: KPI вроде “выпуск инженеров” требует нормализации по населению/плану. В MVP он просто демонстрационный. В боевой версии делаем “инженеры на 100k” или “% выполнения плана”.
2.4 Несколько измерений, чтобы дашборд сразу показал SIU
-- =========================================
-- SEED DATA - MEASUREMENTS (latest values)
-- =========================================
-- Проставим измерения "сегодня" для всех kpi_definition.
-- Для демонстрации: значения около target (с небольшими отклонениями).
INSERT INTO measurement (kpi_def_id, timestamp, value, quality_flag, source_ref)
SELECT
kd.kpi_def_id,
NOW(),
CASE
WHEN k.name LIKE 'W1:%' THEN 82
WHEN k.name LIKE 'W2:%' THEN 77
WHEN k.name LIKE 'W3:%' THEN 14
WHEN k.name LIKE 'W4:%' THEN 75
WHEN k.name LIKE 'W5:%' THEN 3
WHEN k.name LIKE 'T1:%' THEN 60
WHEN k.name LIKE 'T2:%' THEN 72
WHEN k.name LIKE 'T3:%' THEN 2.2
WHEN k.name LIKE 'T4:%' THEN 70000
WHEN k.name LIKE 'T5:%' THEN 16
WHEN k.name LIKE 'E1:%' THEN 70
WHEN k.name LIKE 'E2:%' THEN 98.5
WHEN k.name LIKE 'E3:%' THEN 88
WHEN k.name LIKE 'E4:%' THEN 120
WHEN k.name LIKE 'E5:%' THEN 93
WHEN k.name LIKE 'C1:%' THEN 68
WHEN k.name LIKE 'C2:%' THEN 10
WHEN k.name LIKE 'C3:%' THEN 45
WHEN k.name LIKE 'C4:%' THEN 38
WHEN k.name LIKE 'C5:%' THEN 62
WHEN k.name LIKE 'I1:%' THEN 18
WHEN k.name LIKE 'I2:%' THEN 70
WHEN k.name LIKE 'I3:%' THEN 2
WHEN k.name LIKE 'I4:%' THEN 55
WHEN k.name LIKE 'I5:%' THEN 84
ELSE NULL
END AS value,
'ok'::quality_flag,
'seed_mvp'
FROM kpi_definition kd
JOIN kpi k ON k.kpi_id = kd.kpi_id
WHERE (kd.effective_to IS NULL OR kd.effective_to >= CURRENT_DATE);
Как проверить, что расчёт работает (быстро)
-- 1) Посмотреть KPI scores
SELECT contour_id, COUNT(*) cnt, ROUND(AVG(score_0_100),2) avg_score
FROM v_kpi_score_latest
GROUP BY contour_id
ORDER BY contour_id;
-- 2) Контуры
SELECT * FROM v_contour_score_current ORDER BY contour_code;
-- 3) SIU
SELECT * FROM v_siu_score_current;
-- =========================================
-- DASHBOARD PACK (single query views)
-- SIU + contour tiles + top risks + top deps + active incidents
-- =========================================
-- 1) Latest SIU (from materialized if exists, else from view)
CREATE OR REPLACE VIEW v_dashboard_siu_latest AS
SELECT *
FROM v_siu_score_current;
-- 2) Contour tiles
CREATE OR REPLACE VIEW v_dashboard_contours AS
SELECT
contour_id,
contour_code,
score_0_100,
missing_cnt,
null_scores_cnt
FROM v_contour_score_current
ORDER BY contour_code;
-- 3) Top risks (by risk_score)
CREATE OR REPLACE VIEW v_dashboard_top_risks AS
SELECT
risk_id,
name,
type,
probability,
impact,
risk_score,
status,
last_reviewed_at
FROM risk_register
WHERE status IN ('open','mitigating')
ORDER BY risk_score DESC, last_reviewed_at NULLS LAST
LIMIT 5;
-- 4) Top dependencies (critical first, then high; shortest due date first)
CREATE OR REPLACE VIEW v_dashboard_top_dependencies AS
SELECT
dep_id,
item_name,
item_type,
system_id,
import_share_pct,
substitution_due_months,
reserve_coverage_months,
risk_level,
updated_at
FROM dependency_item
WHERE risk_level IN ('critical','high')
ORDER BY
CASE risk_level WHEN 'critical' THEN 0 ELSE 1 END,
substitution_due_months NULLS LAST,
reserve_coverage_months NULLS FIRST,
updated_at DESC
LIMIT 5;
-- 5) Active incidents (open/contained)
CREATE OR REPLACE VIEW v_dashboard_active_incidents AS
SELECT
i.incident_id,
i.system_id,
cs.name AS system_name,
i.incident_type,
i.severity,
i.started_at,
i.status,
i.summary
FROM incident i
JOIN critical_system cs ON cs.system_id = i.system_id
WHERE i.status IN ('open','contained')
ORDER BY i.severity DESC, i.started_at DESC
LIMIT 10;
-- 6) Single "dashboard pack" view as JSON (handy for API)
CREATE OR REPLACE VIEW v_dashboard_pack_json AS
SELECT jsonb_build_object(
'siu', (SELECT to_jsonb(s) FROM v_dashboard_siu_latest s),
'contours', (SELECT jsonb_agg(to_jsonb(c) ORDER BY c.contour_code) FROM v_dashboard_contours c),
'top_risks', (SELECT jsonb_agg(to_jsonb(r)) FROM v_dashboard_top_risks r),
'top_dependencies', (SELECT jsonb_agg(to_jsonb(d)) FROM v_dashboard_top_dependencies d),
'active_incidents', (SELECT jsonb_agg(to_jsonb(a)) FROM v_dashboard_active_incidents a)
) AS dashboard;
-- =========================================
-- OPTIONAL: ROLLUPS (weekly/monthly) for fast charts
-- Uses measurements to compute contour scores by period.
-- =========================================
-- Helper: choose period bucket. For weekly: date_trunc('week', ts), monthly: date_trunc('month', ts)
-- 1) KPI score per period (latest measurement within period)
CREATE OR REPLACE VIEW v_kpi_latest_by_week AS
WITH m2 AS (
SELECT
m.kpi_def_id,
date_trunc('week', m.timestamp)::date AS period_start,
(date_trunc('week', m.timestamp) + INTERVAL '6 days')::date AS period_end,
m.timestamp,
m.value,
m.quality_flag,
ROW_NUMBER() OVER (
PARTITION BY m.kpi_def_id, date_trunc('week', m.timestamp)
ORDER BY m.timestamp DESC
) AS rn
FROM measurement m
)
SELECT
kd.kpi_def_id,
kd.kpi_id,
kd.system_id,
kd.subsystem_id,
kd.contour_id,
kd.target_value,
kd.warning_value,
kd.critical_value,
kd.weight_in_contour,
k.direction,
m2.period_start,
m2.period_end,
m2.timestamp,
m2.value,
m2.quality_flag
FROM m2
JOIN kpi_definition kd ON kd.kpi_def_id = m2.kpi_def_id
JOIN kpi k ON k.kpi_id = kd.kpi_id
WHERE m2.rn = 1;
-- Score weekly
CREATE OR REPLACE VIEW v_kpi_score_by_week AS
SELECT
v.*,
CASE
WHEN v.quality_flag = 'missing' THEN 0
WHEN v.direction = 'higher_is_better' THEN
CASE
WHEN v.target_value IS NULL OR v.critical_value IS NULL THEN NULL
WHEN v.value >= v.target_value THEN 100
WHEN v.value <= v.critical_value THEN 0
ELSE ROUND( ( (v.value - v.critical_value) / NULLIF((v.target_value - v.critical_value),0) ) * 100, 2)
END
WHEN v.direction = 'lower_is_better' THEN
CASE
WHEN v.target_value IS NULL OR v.critical_value IS NULL THEN NULL
WHEN v.value <= v.target_value THEN 100
WHEN v.value >= v.critical_value THEN 0
ELSE ROUND( ( (v.critical_value - v.value) / NULLIF((v.critical_value - v.target_value),0) ) * 100, 2)
END
ELSE NULL
END AS score_0_100
FROM v_kpi_latest_by_week v;
-- 2) Contour score by week (across all systems, MVP global)
CREATE OR REPLACE VIEW v_contour_score_by_week AS
SELECT
c.contour_id,
c.code AS contour_code,
ks.period_start,
ks.period_end,
ROUND(
SUM(ks.score_0_100 * kd.weight_in_contour) / NULLIF(SUM(kd.weight_in_contour),0),
2
) AS score_0_100,
SUM(CASE WHEN ks.score_0_100 IS NULL THEN 1 ELSE 0 END) AS null_scores_cnt,
SUM(CASE WHEN ks.quality_flag = 'missing' THEN 1 ELSE 0 END) AS missing_cnt
FROM contour c
JOIN kpi_definition kd ON kd.contour_id = c.contour_id
JOIN v_kpi_score_by_week ks ON ks.kpi_def_id = kd.kpi_def_id
GROUP BY c.contour_id, c.code, ks.period_start, ks.period_end;
-- 3) SIU by week
CREATE OR REPLACE VIEW v_siu_by_week AS
WITH cs AS (
SELECT period_start, period_end, contour_code, score_0_100, missing_cnt
FROM v_contour_score_by_week
),
pivot AS (
SELECT
period_start,
period_end,
MAX(CASE WHEN contour_code='W' THEN score_0_100 END) AS w_score,
MAX(CASE WHEN contour_code='T' THEN score_0_100 END) AS t_score,
MAX(CASE WHEN contour_code='E' THEN score_0_100 END) AS e_score,
MAX(CASE WHEN contour_code='C' THEN score_0_100 END) AS c_score,
MAX(CASE WHEN contour_code='I' THEN score_0_100 END) AS i_score,
SUM(missing_cnt) AS total_missing
FROM cs
GROUP BY period_start, period_end
)
SELECT
period_start,
period_end,
w_score, t_score, e_score, c_score, i_score,
ROUND(
POWER(
NULLIF(w_score,0) * NULLIF(t_score,0) * NULLIF(e_score,0) * NULLIF(c_score,0) * NULLIF(i_score,0),
1.0/5.0
),
2
) AS siu_base,
GREATEST(
ROUND(
POWER(
NULLIF(w_score,0) * NULLIF(t_score,0) * NULLIF(e_score,0) * NULLIF(c_score,0) * NULLIF(i_score,0),
1.0/5.0
) - LEAST(total_missing * 0.5, 15),
2
),
0
) AS siu_0_100
FROM pivot
ORDER BY period_end DESC;
If you want the MVP to feel “alive” immediately, run this quick seed for risks/dependencies/incidents too:
-- =========================================
-- Optional seed: risks, dependencies, incident
-- =========================================
INSERT INTO risk_register (name, type, description, probability, impact, owner_org, status, last_reviewed_at)
VALUES
('Технологическая блокировка криткомпонентов','tech','Ограничение поставок/оборудования','5','5',
(SELECT org_id FROM org_unit WHERE name='Центр мониторинга СОЮЗ'), 'open', NOW()),
('Кибератака на критинфраструктуру','cyber','Атаки на энергетику/связь/логистику','5','4',
(SELECT org_id FROM org_unit WHERE name='Киберцентр'), 'open', NOW()),
('Логистический разрыв по критгрузам','logistics','Срыв маршрутов/узлов','4','4',
(SELECT org_id FROM org_unit WHERE name='Логистический контур'), 'mitigating', NOW())
ON CONFLICT DO NOTHING;
INSERT INTO dependency_item (system_id, item_name, item_type, current_source, import_share_pct,
substitution_plan, substitution_due_months, reserve_coverage_months,
risk_level, owner_org)
VALUES
((SELECT system_id FROM critical_system WHERE name='Связь и управление'),
'Критический сетевой чипсет','component','foreign',85,
'Разработка отечественного аналога + контрактное производство',24,6,'critical',
(SELECT org_id FROM org_unit WHERE name='Центр мониторинга СОЮЗ')),
((SELECT system_id FROM critical_system WHERE name='Финансовая система'),
'Компоненты HSM (криптомодули)','component','mixed',40,
'Локализация производства и сертификация',18,9,'high',
(SELECT org_id FROM org_unit WHERE name='Киберцентр'))
ON CONFLICT DO NOTHING;
INSERT INTO incident (system_id, incident_type, severity, started_at, status, summary, created_by_role)
VALUES
((SELECT system_id FROM critical_system WHERE name='Энергосистема'),
'outage',4,NOW() - INTERVAL '3 hours','contained','Локальный сбой в узле диспетчеризации',
(SELECT role_id FROM user_role WHERE name='operational'))
ON CONFLICT DO NOTHING;
Use this one-liner to fetch the whole dashboard payload: