← المكتبة إكويليبريوم equilibrium-system.com

الاتحاد الموحد: هندسة الدفاع

الاتحاد الموحد سويوز

العمارة الدفاعية التكاملية للقرن الحادي والعشرين

تقرير استراتيجي موسَّع

I. مقدمة: الطبيعة الجديدة للصراع

بعد World War II، لم تعد الحرب عسكرية حصرًا.

اليوم الصراع هو:

لم تعد الدفاع تعادل الجيش.

الدفاع هو تكامل النظام.

II. فلسفة عقيدة النصر

نصر القرن الحادي والعشرين هو حالة يصبح فيها:

الصيغة:

النصر = الردع × السيادة × المعنى × التنمية

إذا كان أي عامل يساوي صفرا — فالمنظومة هشة.

ثالثا. هندسة الاتحاد الواحد 1. المنظومة العسكرية الاستراتيجية

المهمة — ضمان حتمية الرد.

العناصر الرئيسية:

المبدأ: يجب أن يكون النزاع المحتمل خاسرا سلفا للمبادر.

2. السيادة التكنولوجية

من يتحكم بالتقنيات — فهو يحدد القواعد.

الاتجاهات:

الاعتماد = خطر استراتيجي.

3. الاستدامة الاقتصادية

بدون اقتصاد مستدام يستنزف الدفاع.

المنظومات:

4. الأمن الدلالي

الانقسام المعلوماتي يدمّر أسرع من الصواريخ.

يلزم:

يجب أن يفهم المجتمع لماذا يوجد الاتحاد.

5. دبلوماسية النووسفير

أعلى مستوى للدفاع هو خفض قابلية البيئة للنزاع.

المبادئ:

الهدف هو بناء عالم يصبح فيه الحرب غير عقلاني.

رابعا. نموذج مستويات الصمود الخمسة للاتحاد

المستوى

معيار الصمود

الخطر عند الضعف

العسكري

الردع المضمون

العدوان الخارجي

تكنولوجية

الأنظمة المستقلة

حجب التطور

اقتصادية

الاكتفاء الذاتي

الاستنزاف

اجتماعية

الثقة والعدالة

الانقسام الداخلي

دلالي

المهمة المشتركة

تدهور الهوية


خامسا. مبدأ “الدفاع عبر التنمية”

النموذج الكلاسيكي:

الأمن أولا ثم التنمية.

النموذج التكاملي للاتحاد:

التنمية هي الأمن.

الطفرة التكنولوجية تخفض احتمال النزاع أكثر من زيادة عدد الجيش.

سادسا. النموذج المؤسسي

يجب أن تعمل جميع العناصر ككائن حي واحد.

السابع. مخاطر القرن الحادي والعشرين

يجب أن يكون الدفاع استباقيا لا تفاعليا.

الثامن. الخاتمة

الاتحاد الموحد ليس كتلة عسكرية. إنه هندسة الصمود.

النصر في القرن الحادي والعشرين هو:

فقط الجمع بين هذه العوامل يشكل أمانا حقيقيا.



مشروع رسالة مرافقة

إلى تقرير "الاتحاد الموحد: الهندسة الدفاعية التكاملية للقرن الحادي والعشرين"

الزملاء الأعزاء،

في ظروف تحول منظومة الأمن العالمية، وتسارع الدورات التكنولوجية، ونمو الأشكال الهجينة للمواجهة، يكتسب الانتقال من التدابير المجزأة إلى هندسة الصمود المتكاملة أهمية خاصة.

في إطار تطوير الخبرات المكتسبة، يُقدَّم تقرير استراتيجي

"الاتحاد الموحد: الهندسة الدفاعية التكاملية للقرن الحادي والعشرين".

يضع التقرير مقاربة منهجية لمسائل:

ينطلق النموذج المقترح من المبدأ:

التنمية هي الأمن.

يُنظر في التقرير إلى الدفاع ليس فقط كإطار عسكري، بل كمجموعة من العناصر المترابطة: الصناعة والعلوم والتعليم والسياسة الإعلامية والتعاون الدولي.

وقد أُولي اهتمام خاص لـ:

تتسم الوثيقة بطابع خبير تحليلي وهي مخصصة للمناقشة في الوسط المهني.

نحن مستعدون لتقديم نسخة موسعة وملاحق تحليلية وخارطة طريق مرحلية للتنفيذ.

مع التقدير،

س. ل. سوكولوف

مشروع رسالة نسخة معززة.

بشأن إرسال التقرير الاستراتيجي حول البنية المتكاملة للاستدامة الدفاعية

المحترم ________،

بهدف تطوير المقاربة المنظومية لضمان الاستدامة الوطنية، يُرسَل التقرير التحليلي:

«الاتحاد الموحد: البنية الدفاعية المتكاملة للقرن الحادي والعشرين»

تتضمن الوثيقة نموذجا منظما للدفاع يقوم على خمس منظومات مترابطة ومؤشرات فعالية قابلة للقياس.

1. المنظومة العسكرية الاستراتيجية

يُقترح الانتقال من التراكم الكمي إلى معايير ضمان عدم جدوى العدوان.

المؤشرات الرئيسية:

2. السيادة التكنولوجية

التركيز على تقليص الاعتماد الحرج على الموردين الخارجيين.

المعايير المستهدفة المقترحة:

3. الاستدامة الاقتصادية

بدون قاعدة اقتصادية، تنهك الإمكانات الدفاعية.

المقاييس:

4. الاستدامة المعرفية والاجتماعية

للنزاعات المعاصرة طابع هجين.

المؤشرات:

5. مبدأ «الدفاع عبر التنمية»

يبرر التقرير استراتيجية يقوم فيها ما يلي:

يُنظر إلى تنمية الصناعة والعلوم والتعليم باعتبارها عنصرا في المنظومة الدفاعية.

يُقترح التزامن بين:

النتيجة العملية لتطبيق النموذج

التقرير ذو طابع تحليلي ومخصص للنظر الخبير. نحن مستعدون لتقديم حسابات موسعة ومصفوفة مخاطر وخارطة طريق مرحلية.

أولاً. التقرير: «الاتحاد الموحد: البنية الدفاعية التكاملية في القرن الحادي والعشرين»

7 استنتاجات رئيسية

1. تغيرت طبيعة الصراع

المواجهة المعاصرة ذات طابع هجين: عقوبات، وقيود تكنولوجية، وهجمات إلكترونية، وتأثير معلوماتي. المنظومة العسكرية ليست سوى أحد العناصر.

2. الدفاع = منظومة من الأطر المترابطة

يتضمن النموذج 5 مستويات:

إضعاف أي مستوى يقلل من استقرار المنظومة بأكملها.

3. التبعية التكنولوجية — الخطر الرئيسي في القرن الحادي والعشرين

تتشكل قابلية التأثر الحرجة في مجالات:

تقليل التبعية — أولوية استراتيجية.

4. الاستقرار الاقتصادي — شرط الردع

بدون قاعدة صناعية لا يمكن تحقيق دفاع طويل الأمد.

يلزم:

5. الاستقرار المعرفي يؤثر على الأمن مباشرة

الانقسام المعلوماتي في المجتمع قادر على إلحاق ضرر مماثل لضربة عسكرية. الأمر يتطلب عملاً منهجياً مع:

6. التنمية عنصر من عناصر الدفاع

الاستثمارات في:

تقلل من احتمال الصراع أكثر من مجرد تعزيز القوات.

7. الهدف ليس النصر في الحرب، بل منع الحرب

البنية الدفاعية الفعالة تجعل العدوان بلا معنى اقتصادياً واستراتيجياً.

ثانياً. مصفوفة المخاطر 

(الاحتمال × الضرر × تدابير الرد)

№

الخطر

الاحتمال

الضرر المحتمل

تدابير مضادة

1

حصار تكنولوجي

مرتفعة

تقييد التنمية، والاعتماد

توطين الإنتاجات الحيوية

2

هجمات سيبرانية على البنية التحتية

مرتفعة

اضطراب الإدارة

إنشاء منظومات مستقلة وأنظمة احتياطية

3

ضغط العقوبات

متوسطة–عالية

خسائر مالية

تنويع آليات التسوية

4

زعزعة الاستقرار المعلوماتي

مرتفعة

استقطاب اجتماعي

برامج محو الأمية الإعلامية والاتصال الاستراتيجي

5

تراجع ديموغرافي

متوسطة

إضعاف إمكانات الكوادر

دعم السياسة الأسرية والتعليمية

6

تسرب الكفاءات التكنولوجية

متوسطة

فقدان السيادة العلمية

الاستثمار في البحث والتطوير وبرامج الكوادر

7

قيود الطاقة

منخفضة–متوسطة

تراجع الإمكانات الصناعية

تطوير أنظمة طاقة مستقلة

التركيز الختامي للرسالة

في الرسالة المرفقة يمكن إضافة فقرة ختامية:

سيسمح تطبيق النموذج التكاملي للاستدامة الدفاعية بالانتقال من إدارة المخاطر التفاعلية إلى هندسة استباقية لمنع النزاعات.


قسم معزز

الاستدامة الاقتصادية كمنظومة دفاع

1. الأطروحة الاستراتيجية

الاقتصاد ليس «دعماً» للدفاع.

الاقتصاد هو أساس الردع.

تاريخياً لم تُؤمَّن الاستدامة بالقوة العسكرية وحدها، بل أيضاً بالإمكانات الصناعية. بعد World War II أصبح التعبئة الصناعية العامل الحاسم في النصر.

في القرن الحادي والعشرين، التعبئة = استقلالية تكنولوجية ومالية.

2. المعايير الرئيسية للاستدامة الاقتصادية

2.1. الاكتفاء الذاتي الصناعي

المؤشرات المستهدفة (أفق 5–7 سنة):

المقياس الرقابي: مؤشر الاستقلالية الصناعية (IPA).

2.2. الاستقرار المالي

مخاطر القرن الحادي والعشرين هي الحصار الحسابي والاعتماد على العملات الأجنبية.

الأهداف المرجعية:


المؤشر الضابط: معامل الاستقلال المالي (KFI).

2.3. الاستقلال الطاقي

الطاقة = قابلية الإدارة. المعايير:

المقياس: مؤشر الاستدامة الطاقية (IEU).

2.4. الأمن الغذائي

الغذاء عامل من عوامل الاستقرار الاجتماعي.

الأهداف:

  • ≥ 95% من التزويد الداخلي بالمنتجات الأساسية؛
  • احتياطي استراتيجي ≥ 12 أشهر؛
  • استقلال صندوق البذور ≥ 80%.

المؤشر: معامل الاستقلال الغذائي (KPA).

2.5. القيمة المضافة التكنولوجية

النموذج القائم على المواد الأولية يعزز الهشاشة. المتجه المستهدف:

  • نمو حصة المنتجات ذات القيمة المضافة العالية ≥ 50% في هيكل الصادرات؛
  • زيادة النفقات على البحث والتطوير إلى ≥ 3% من الناتج المحلي الإجمالي؛
  • نمو حصة الصناعات عالية التقنية ≥ 25% من الناتج المحلي الإجمالي.

المقياس: مؤشر العمق التكنولوجي (ITG).

3. الآليات المؤسسية للتنفيذ

  • مركز رصد المخاطر الاستراتيجية (تدقيق ربع سنوي).
  • المجلس التنسيقي للاستقلال التكنولوجي.
  • دمج السياسة الصناعية مع المنظومة التعليمية.
  • عناقيد إنتاجية استراتيجية ذات دورة كاملة.
  • تخطيط استثماري طويل الأجل (أفق 10–15 سنة).

4. النموذج الاقتصادي «الدفاع عبر التنمية»

الصيغة:

الاستدامة الاقتصادية = الإنتاج × التكنولوجيا × الاستقلال المالي × الكوادر

إذا أُضعف عنصر واحد — تصبح المنظومة هشة.

5. مصفوفة المخاطر الاقتصادية (النسخة المعززة)


الخطر

الاحتمال

الضرر

أولوية الاستجابة

الحصار التكنولوجي

مرتفعة

حرج

الأقصى

العزلة المالية

متوسطة–عالية

مرتفع

مرتفع

القيود اللوجستية

متوسطة

مرتفع

مرتفع

التبعية للمواد الأولية

متوسطة

متوسط

متوسط

تراجع ديموغرافي

متوسطة

الاستراتيجي

الأقصى



6. الموقف النهائي للرسالة

يمكن إضافة لمسة ختامية:

تُعتبر الاستدامة الاقتصادية عنصرا في معمارية الدفاع الوطنية، يضمن القدرة الطويلة الأمد على الردع الاستراتيجي والتطور.



الملحق أ. تحليل سيناريوهي للاستدامة

المنهجية

نقيّم المنظومة وفق 5 أطر (العسكري، التكنولوجي، الاقتصادي، المعرفي، المؤسسي) عبر:

السيناريو 1. المتفائل

"منافسة مُدارة + نافذة تنمية"

المحفزات

نافذة الفرص

الإجراءات ذات الأولوية

النتيجة المستهدفة

السيناريو 2. الأساسي

"ضغط طويل الأمد + موجات قيود"

المحفزات

المخاطر الرئيسية

الإجراءات ذات الأولوية

النتيجة المستهدفة

السيناريو 3. الإجهاد

"تصعيد حاد: انقطاع مالي-تكنولوجي + ضربات سيبرانية"

المحفزات

ملف الضرر: مرتفع/حرج، لا سيما في الأيام الأولى 30–90.

منظومة مكافحة الأزمات (ما ينبغي أن يكون جاهزاً مسبقاً)

النتيجة المستهدفة: الحفاظ على القابلية للإدارة، ومنع الانهيار المتسلسل للبنية التحتية.

الملحق ب. جدول التزامن بين القطاعات

الفكرة بسيطة: الاستقرار الدفاعي لا يتحقق بالقطاع، بل بمواضع الوصل (البيانات ↔ الطاقة ↔ الإنتاج ↔ الكوادر ↔ اللوجستيات ↔ المالية ↔ المعنى).

1) مصفوفة "المنظومة → القطاع → المخرج → KPI"


المحيط

القطاعات الداعمة

المخرج الحرج

KPI (مثال)

العسكري-الاستراتيجي

الاتصالات، الأقمار الاصطناعية، صناعة الأجهزة

إدارة مستدامة

زمن استعادة الإدارة؛ نسبة القنوات المحمية

تكنولوجية

الإلكترونيات الدقيقة، صناعة الأدوات الآلية، البرمجيات

سلاسل مستقلة

نسبة التوطين؛ نسبة البرمجيات الوطنية في الأنظمة الحرجة

اقتصادية

الصناعة، الطاقة، المالية

قاعدة الموارد

مخزون المواقع الحرجة؛ استقلالية ميزان الطاقة

المعرفي

التعليم، الإعلام، الثقافة

استقرار المجتمع

مؤشر الثقة؛ سرعة تحييد الحملات الإعلامية

المؤسسي

الإدارة الحكومية، التوحيد القياسي

التنسيق

زمن اتخاذ القرارات؛ % المشروعات ذات التزامن بين الوزارات



2) جدول "7 السلاسل الرئيسية" (أهم مواضع الوصل)


السلسلة

لماذا نحتاجها

الاختناق

ما ينبغي تزامنه

الإلكترونيات الدقيقة → الاتصالات → الإدارة

قابلية إدارة البلاد

المكونات/المصانع

التوطين + المعايير + الاعتماد

الطاقة → الصناعة → اللوجستيات

استقرار الإنتاج

الشبكات/الاحتياطي

التوليد الموزع + احتياطي المنشآت

البيانات → الذكاء الاصطناعي → الحماية السيبرانية

الدفاع الاستباقي

الكوادر/البرمجيات

مراكز البيانات + التدريب + بروتوكولات الاستجابة

المال → التسويات → التجارة الخارجية

استقرار التبادل

المقاصة/العملة

تسويات بديلة + احتياطيات + مسارات

المواد → الكيمياء → الهندسة الميكانيكية

إنتاج بدورة كاملة

مواد نادرة

احتياطيات المخازن + إعادة المعالجة + البدائل

التعليم → الكوادر → البحث والتطوير

طفرة تكنولوجية

هجرة الأدمغة

المنح + المدارس الهندسية + طلبات البحث والتطوير

المعنى → الثقة → الجهوزية للتعبئة

الاستقرار الاجتماعي

الاستقطاب

التواصل + الثقافة + محو الأمية الإعلامية



3) سجل مصغّر "الاعتماديات الحرجة" (قالب السطر)

يُدرج هذا كجدول في الملحق ويُملأ بحسب الواقع:







الملحق ب. اختبار الإجهاد للاستقرار: 10 منظومة حرجة في الاتحاد

المقياس

1) منظومة الطاقة (التوليد + الشبكات + الإرسال والتحكم)

عتبة الانهيار: خسارة ≥ 15% من القدرة في المنطقة لأكثر من 6 ساعة، أو اختلال التردد/استقرار الشبكة.

تسلسل متتالٍ: الاتصال → المياه/الحرارة → الصناعة → اللوجستيات → الرعاية الصحية.

خطة الاستعادة

KPI

2) الاتصالات والتحكم (الخطوط الرئيسية، الاتصالات الخاصة، الشبكات اللاسلكية)

عتبة الفشل: تدهور القابلية للتحكم > 2 ساعة (قنوات غير مستقرة في الحلقات الرئيسية).

تسلسل متتالٍ: الإدارة الحكومية → الدفاع → المالية → اللوجستيات.

خطة الاستعادة

KPI

3) النظام المالي والتسويات

عتبة الفشل: استحالة إجراء مدفوعات جماعية > 24 ساعة أو تجميد قنوات المقاصة الخارجية.

تسلسل متتالٍ: التجارة → اللوجستيات → التوتر الاجتماعي.

خطة الاستعادة

KPI

4) اللوجستيات والنقل (السكك الحديدية/الموانئ/الطرق/العقد الجوية)

عتبة الفشل: تعطل إمدادات الشحنات الحيوية > 72 ساعة أو حظر العقد الرئيسية.

تسلسل متتالٍ: الغذاء → الوقود → الصناعة.

خطة الاستعادة

KPI

5) الغذاء والسلاسل الزراعية

عتبة الفشل: نقص السلة الأساسية في المنطقة > 7 يوم أو صدمة سعرية > الممر المحدد.

تسلسل متتالٍ: الاستقرار الاجتماعي → الثقة → القابلية للتحكم.

خطة الاستعادة

KPI

6) الصحة والجهوزية الصحية

عتبة الانهيار: تحميل زائد للمستشفيات الثابتة > 20% من الطاقات لمدة 2+ أسبوع أو نقص في الأدوية الحرجة.

التسلسل: الديموغرافيا ← الاقتصاد ← الثقة.

خطة الاستعادة

KPI

7) الإدارة الحكومية واستمرارية السلطة

عتبة الانهيار: العجز عن اتخاذ/إيصال القرارات على المستويات الرئيسية > 2 ساعة.

التسلسل: كل شيء.

خطة الاستعادة

KPI

8) مجمع الصناعات الدفاعية والتعبئة الصناعية

عتبة الانهيار: انقطاع الإنتاج/المكونات الحرجة > 30 يوم.

التسلسل المتعاقب: المنظومة العسكرية ← التكنولوجية ← السياسة الخارجية.

خطة الاستعادة

  • 0–24 ساعة: جرد التبعيات الحرجة، إعادة توزيع الطاقات، تحويل الخطوط.
  • 24–72 ساعة: إطلاق إمدادات بديلة/بدائل، الاعتماد المتسارع.
  • حتى 30د: نشر إنتاجات “نقاط الاختناق”، الاحتياطيات المخزنية، العقود طويلة الأجل.

KPI

  • زمن استبدال المكون الحرج (شهر)؛
  • حصة التوطين في المواد الحرجة (%)؛
  • مخزون المكونات الحرجة (أشهر تغطية).

9) التعليم/الكوادر/البحث والتطوير (المنظومة الهندسية)

عتبة الانهيار: نقص مستدام في المتخصصين الرئيسيين أو تسرب الكفاءات.

التسلسل: التكنولوجيا ← الصناعة ← الدفاع.

خطة الاستعادة

  • 0–24 ساعة: إعطاء الأولوية للكفاءات الرئيسية، “سجل الكوادر”.
  • 24–72 ساعة: حزم تحفيزية، برامج إعادة تأهيل متسارعة.
  • حتى 30د: مدارس هندسية، منح البحث والتطوير، طلبيات على التطويرات التطبيقية.

KPI

  • إخراج المهندسين/سنة حسب الأولويات؛
  • حصة البحث والتطوير من الناتج المحلي الإجمالي (%)؛
  • مدة إشغال الوظائف الشاغرة في المجالات الحرجة (يوم).

10) الإعلام/البيئة المعلوماتية/الاستقرار المعرفي

عتبة الفشل: الاستقطاب الجماهيري، انخفاض الثقة دون العتبة الحرجة أو نجاح العمليات المعلوماتية المؤدية إلى شلل إداري.

التسلسل: الاستقرار الاجتماعي ← الإدارة الحكومية ← الاقتصاد.

خطة الاستعادة

  • خلال 0–24 ساعة: مركز موحد للتواصل في الأزمات، منظومة وقائع سريعة، وقف الذعر.
  • خلال 24–72 ساعة: حملات توضيحية، محو الأمية الإعلامية، العمل مع قادة المجتمعات.
  • حتى 30 يوم: استراتيجية منظومية للأمن الدلالي (تعليم + ثقافة + إعلام).

KPI

  • سرعة دحض التسريبات الهدامة (بالساعات)؛
  • مؤشر الثقة في المؤسسات؛
  • نسبة السكان ذوي الأمية الإعلامية الأساسية (%).


الملحق ز. "غرفة الحرب" — هيئة أركان موحدة للحادث (قالب الهيكل)

التكوين:

الطاقة، الاتصالات، السيبرانية، المالية، اللوجستيات، الكتلة الاجتماعية، الإعلام، الصناعة.

بروتوكول موحد: 

الاكتشاف ← العزل ← الاستعادة ← التحليل اللاحق.

الوضع: 

24/7 في سيناريو الإجهاد، تدريبات أسبوعية في الوضع الأساسي.










بطاقة الاستقرار

(معيار للمنظومة الحرجة في الاتحاد)

1. تعريف المنظومة

  • اسم المنظومة:
  • الإطار (عسكري / تكنولوجي / اقتصادي / معرفي / مؤسسي):
  • مستوى الحراجة: I / II / III
  • الهيئة/المنسق المسؤول:

2. الدالة الهدفية

ما الذي يجب أن تؤمنه المنظومة في أي ظرف؟ (صياغة في 1–2 سطرًا، بدون كلمات عامة)

3. عتبة الفشل (المنطقة الحمراء)

بشكل محدد:

  • زمن التدهور:
  • النطاق:
  • فقدان الوظائف (%):

4. الاحتياطي

  • الاحتياطي المادي (الطاقات، المستودعات، المعدات):
  • الاحتياطي المعلوماتي (قنوات مكررة):
  • الاحتياطي الكوادري:
  • الاحتياطي المالي:

5. سيناريو الاستجابة. 0–24 ساعة

(الإجراءات الأولى) 24–72 ساعة

(الاستقرار) حتى 30 يوم

(الاستعادة والتعزيز)

6. مؤشرات الأداء الرئيسية للاستقرار

  • وقت الاستعادة (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 سنة".


أولا: المؤشر الموحد لاستدامة الاتحاد (SIU)

1. منطق المؤشر

الاستدامة ليست مجموعا، بل حاصل ضرب المنظومات.

إذا كانت إحدى المنظومات ضعيفة، فإن المنظومة كلها معرضة للخطر.

الصيغة: 

SIU = (W × T × E × C × I)^{1/5},

حيث:

  • W — المنظومة العسكرية
  • T — التكنولوجية
  • E — الاقتصادية
  • C — المعرفية (الاجتماعية)
  • I — المؤسسية

تُقيَّم كل منظومة على مقياس من 0–100.

يُستخدم المتوسط الهندسي بحيث تخفض الحلقة الضعيفة المؤشر العام.

2. الحساب الداخلي لكل منظومة

كل منظومة = المتوسط وفق 5 معايير:

المحيط

المعاملات

W

الردع، استقلالية الإدارة، التكرار الاحتياطي، الاستدامة السيبرانية، التدريبات

T

التوطين، البحث والتطوير، الاحتياطي من الكوادر، استقلالية البرمجيات، عمق الإنتاج

E

الصناعة، المالية، الطاقة، الغذاء، اللوجستيات

C

الثقة، الاستدامة المعلوماتية، التعليم، التكامل الثقافي، الجاهزية للتعبئة

I

سرعة القرارات، التنسيق بين القطاعات، تكرار المراكز، تدقيق المخاطر، شفافية مؤشرات الأداء

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 الاستنتاج: المنظومة مستقرة، لكن المنظومتين التكنولوجية والمؤسسية تحتاجان إلى تعزيز.

ثانياً. خارطة الطريق: الانتقال من 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.

النتيجة: يصبح العدوان غير عقلاني.



ثالثاً. آلية الرقابة

مرة واحدة في السنة:

  • إعادة حساب SIU.
  • تحديث البطاقات.
  • تقرير علني (أو مغلق) عن الديناميكيات.
  • تعديل خارطة الطريق.

الأهم

الصمود ليس تقريراً. بل ديناميكية مؤشرات مُدارة.

منصة «سويوز»

نموذج أولي للواجهة (MVP)

1️⃣ الشاشة الرئيسية — STRATEGIC DASHBOARD

العنصر المركزي:

SIU — المؤشر المركب للاستدامة

المؤشر الدائري الكبير:

  • 0–40 المنطقة الحمراء
  • 40–60 الصفراء
  • 60–75 الخضراء
  • 75+ الخضراء الداكنة

أسفله — الديناميكية خلال 12 أشهر.

على اليمين — 5 منظومات

المحيط

المؤشر

الاتجاه

العسكري

78

↑

تكنولوجية

62

→

اقتصادية

70

↑

المعرفي

65

↓

المؤسسي

60

→

النقر على كل منها — الانتقال إلى التفصيل.

2️⃣ شاشة المنظومة (مثال: الاقتصادية)

كتلة 1 — مؤشرات الأداء الرئيسية في الوقت الحقيقي

  • الاستقلالية الصناعية (%)
  • الاستقرار المالي
  • توازن الطاقة
  • المؤشر الغذائي
  • الاستدامة اللوجستية

كل منها — مع إشارة ضوئية.

كتلة 2 — خريطة المخاطر

المصفوفة: الاحتمال × الضرر

تُضاء المخاطر تلقائيا عند تجاوز العتبة.

كتلة 3 — الاتجاهات

مخطط 1 / 3 / 5 سنوات

  • التوقعات في ظل الديناميكية الحالية.

3️⃣ وحدة "سجل الاعتماديات"

الواجهة:

المرشح:

  • القطاع
  • مستوى الخطر
  • الحصة المستوردة
  • مدة الاستبدال

جدول:

| المكون | الخطر | البديل | المدة | الاحتياطي |

يبرز النظام تلقائيا المواقع الحرجة.

4️⃣ وحدة "اختبار الإجهاد"

شاشة السيناريوهات:

  • التفاؤلي
  • أساسي
  • الإجهاد

يختار المستخدم الحدث:

  • الحصار المالي
  • هجوم سيبراني
  • الخلل اللوجستي
  • الحادث الطاقي

يحسب النظام:

  • انخفاض SIU
  • زمن الاستعادة
  • الآثار المتسلسلة

5️⃣ WAR ROOM DIGITAL

يُفعَّل الوضع تلقائياً عند:

  • انخفاض SIU دون 60
  • تجاوز حد المخاطر الحرجة

تنقسم الشاشة إلى 4 مناطق:

  • خريطة الأحداث
  • مؤشرات الأداء الرئيسية الحرجة
  • المهام والحلول
  • مؤقت الاستجابة

6️⃣ معمارية مستويات الوصول

المستوى 1 — الاستراتيجي

المؤشرات والتحليلات المجمعة فقط.

المستوى 2 — التشغيلي

مؤشرات القطاعات والمخاطر.

المستوى 3 — التقني

البيانات والمعاملات العميقة.

7️⃣ المعمارية التقنية للنسخة الأولية MVP

  • الواجهة الخلفية: منظومة خوادم محمية
  • قاعدة البيانات: موزعة
  • التحليلات: وحدة حساب SIU
  • الواجهة: ويب + إنترانت محمية
  • السجلات: تدقيق مستمر للإجراءات

8️⃣ الحد الأدنى من وظائف الإطلاق (6–9 أشهر)

  • حساب SIU.
  • لوحة معلومات 5 منظومات.
  • بطاقات الاستدامة.
  • اختبار إجهاد أساسي.
  • إدخال مؤشرات الأداء الرئيسية يدوياً.

دون تعقيد مفرط.


أولاً. الأثر الاقتصادي لارتفاع الاستدامة

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 سنة.

الأهم: الاستدامة تسدد ثمنها.


ثانياً. منصة المراقبة "سويوز"

ننتقل إلى الإدارة الرقمية.

معمارية منصة "سويوز"

1. الهدف

مراقبة حقيقية للاستدامة في وضع 24/7. ليست تقارير مرة في السنة. بل نظام حي.

2. الوحدات الأساسية

الوحدة 1 — SIU-CORE

  • الحساب الآلي لمؤشر الاستدامة.
  • لوحة معلومات 5 منظومات.
  • الديناميكية خلال 1–5–10 سنة.

الوحدة 2 — سجل الاعتماديات الحرجة

  • المكوّن → القطاع → المورّد → الخطر.
  • إشارات عند تجاوز العتبة.

الوحدة 3 — محرك اختبار الضغط

  • نمذجة السيناريوهات.
  • تقييم الآثار المتسلسلة.
  • توقع زمن الاستعادة.

الوحدة 4 — مراقبة مؤشرات الأداء الرئيسية

  • الطاقة.
  • الارتباط.
  • المالية.
  • اللوجستيات.
  • التعليم.
  • مجمع الصناعات الدفاعية.

وحدة 5 — غرفة العمليات الرقمية

  • تكامل البيانات في الأزمات.
  • مركز اتخاذ القرارات.
  • سجل الحوادث.

3. البنية التقنية

تشمل المنصة:

  • منظومة بيانات محمية،
  • عُقد موزعة،
  • طبقة تحليلية (الذكاء الاصطناعي)،
  • واجهة الإدارة الاستراتيجية.

4. مستويات الوصول

  • الاستراتيجي (المؤشر المجمع).
  • التشغيلي (المؤشرات القطاعية).
  • التقني (المقاييس المحددة والإنذارات).

5. مراحل التنفيذ

المرحلة 1 (سنة 1–2)

  • إطلاق SIU-CORE.
  • بطاقات الاستدامة.
  • اختبارات الإجهاد الأساسية.

المرحلة 2 (3–5 سنوات)

  • دمج البيانات القطاعية.
  • الإشارات الآلية.
  • مركز الرصد الرقمي.

المرحلة 3 (5–10 سنوات)

  • التوأم الرقمي الكامل للاستدامة.
  • التنبؤ القائم على الذكاء الاصطناعي.
  • الحماية الاستباقية.

الرابط النهائي. نمو SIU ← انخفاض المخاطر ← نمو الاستثمارات ← نمو الناتج المحلي الإجمالي ← تعزيز الاستدامة. دورة مغلقة.

نموذج البيانات (مخطط البيانات) لمنصة «سويوز» للنسخة الأولية القابلة للتطبيق. يمكن تسليم هذا مباشرة إلى المهندس المعماري/المطور: الكيانات، والعلاقات، والحقول، وقواعد إدارة الإصدارات وحساب SIU.

نموذج البيانات لمنصة «سويوز» (النسخة الأولية القابلة للتطبيق)

0) مبادئ النموذج

  • الحدثية: كل أمر مهم يُسجَّل كقياس / حادث / قرار / اختبار.
  • إدارة الإصدارات: للبطاقات ومؤشرات الأداء الرئيسية والحدود إصدارات (ليرى التدقيق التاريخ).
  • التسلسل الهرمي: النظام ← المنظومة ← النظام الفرعي ← مؤشر الأداء الرئيسي ← القياس.
  • المعايير مقابل الواقع: نخزّن القيم المستهدفة والقياسات الفعلية بشكل منفصل.

1) الأدلة المرجعية (الأساسية)

1.1 Contour. منظومات الاستدامة (5).

  • contour_id (PK)
  • code (W, T, E, C, I)
  • name
  • weight (افتراضيًا 0.2)
  • description

1.2 النظام الحرج. 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 النظام الفرعي. الأنظمة الفرعية داخل النظام الحرج 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 (نص + حقول مهيكلة أدناه)
  • 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) مؤشرات الأداء والقياسات

3.1 مؤشر الأداء 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_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 (عدد عشري) (المجموع حسب المنظومة = 1.0)
  • effective_from, effective_to
  • source_type (manual/api/import)
  • owner_org (FK)

3.3 القياس Measurement. القياسات الفعلية لمؤشرات الأداء.

  • 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. الأثر المتسلسل (أي مؤشرات أداء/أنظمة تأثرت).

  • 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 درجة SIU 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 كمتوسط مرجّح لمؤشرات الأداء وفق weight_in_contour في تعريف مؤشر الأداء عن الفترة (مثل last/avg).
  • SIU = المتوسط الهندسي للمنظومات الخمس:
    SIU = (W × T × E × C × I)^{1/5}
  • إذا كثرت القيم المفقودة في منظومة، نُدخل غرامة (مثل -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 مؤشر أداء لكل منظومة (25 مؤشرأداء كحد أدنى)
  • 1 بطاقة تعريف للنظام (10 بطاقة تعريف) + الإصدارات
  • استيراد أسبوعي لـ Measurement (حتى اليدوي)
  • 1 السيناريو الأساسي لاختبار الإجهاد


هيكل DDL لـ PostgreSQL (الجداول/المفاتيح/الفهارس) وwireframe للتنقل/الشاشات وفقاً لنموذج البيانات الخاص بنا حصراً.

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 كبير
  • 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 (آخر 90 يومًا)
  • «فجوات البيانات» (quality_flag=missing) — خصم في المؤشر

شاشة 3: النظام الحرج (مثال: الطاقة)

ترويسة النظام:

  • مستوى الخطورة
  • الجهة المسؤولة (org_unit)
  • بطاقة السجل الحالي (الإصدار)

الكتل:

  • مؤشرات KPI للنظام (بما في ذلك الأنظمة الفرعية)
  • حد الفشل (من passport_version + failure_threshold)
  • الاحتياطيات (من reserve_profile)
  • الحوادث حسب النظام
  • زر «فتح غرفة العمليات للنظام»

شاشة 4: بطاقات سجل الاستدامة

  • قائمة البطاقات (system + contour + maturity)
  • فتح البطاقة ← سجل الإصدارات
  • محرر الإصدار (إذا سمح الدور بذلك)
  • زر «تعيين كإصدار حالي» (يحدّث current_version_id)

شاشة 5: KPI والقياسات

  • كتالوج KPI
  • ربط KPI بالأنظمة (kpi_definition)
  • استيراد القياسات / الإدخال اليدوي
  • مراقبة جودة البيانات (ok/suspect/missing)
  • تدقيق المصادر (source_ref)

شاشة 6: المخاطر والتبعيات

  • مصفوفة الاحتمال×الضرر (heatmap)
  • سجل المخاطر (risk_register)
  • سجل التبعيات (dependency_item) مع مرشحات:
    • risk_level
    • import_share_pct
    • substitution_due_months

شاشة 7: اختبارات الإجهاد

  • السيناريوهات (scenario)
  • عمليات الإطلاق (stress_test_run)
  • النتائج (stress_test_result):
    • الانخفاض المتوقع في SIU
    • RTO المتوقع
    • التوصيات

شاشة 8: غرفة العمليات

تخطيط لوحة 4:

  • خريطة/خط زمني للحادث
  • مؤشرات الأداء الرئيسية "المنطقة الحمراء"
  • سجل القرارات (decision_log)
  • المهام/المواعيد/المسؤولون (decision_log status)

الدخول التلقائي إلى غرفة العمليات إذا:

  • siu_score < 60 أو
  • خطورة الحادث severity ≥ 4 أو
  • risk_score ≥ 20 (5×4، 5×5)

1) حساب ContourScore و SIU (SQL)

1.1 تطبيع مؤشرات الأداء الرئيسية إلى مقياس 0–100

الفكرة: نحول كل بُعد من أبعاد مؤشرات الأداء الرئيسية إلى درجة 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 = المتوسط المرجح لمؤشرات الأداء الرئيسية حسب المنظومة

-- =========================================

-- 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 منظومات + عقوبة على القيم المفقودة

-- =========================================

-- 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;


-- وحدات تنظيمية (تقريباً)

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 مؤشر أداء رئيسي (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: اتفاقية مستوى الخدمة لتسليم الشحنات الحرجة','%','last','higher_is_better','تسليم الشحنات الحرجة وفق اتفاقية مستوى الخدمة');


-- 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 ربط مؤشرات الأداء الرئيسية بالمنظومات و10 بالنظم (KPIDefinition)

لكي "ينطلق" النموذج الأولي، نفعل ما يلي: نربط كل واحد من مؤشرات الأداء الرئيسية 25 بجميع الأنظمة (هذا طبيعي للنموذج الأولي، ثم نقسمها حسب الأنظمة الفرعية). الوزن داخل المنظومة = 0.2 (5 مؤشر أداء رئيسي).

-- =========================================

-- 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;


مهم: مؤشرات الأداء الرئيسية مثل «تخريج مهندسين» تتطلب تطبيعًا حسب السكان/الخطة. في النسخة الأولية هو مجرد عرض توضيحي. في النسخة التشغيلية نجعله «مهندسون لكل 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:

SELECT dashboard FROM v_dashboard_pack_json;