• Biblioteca EQUILIBRIUM equilibrium-system.com

UNIÓN UNIFICADA: arquitectura de defensa

UNIÓN UNIDA

Arquitectura de defensa integral del siglo XXI

Informe estratégico ampliado

I. Introducción: la nueva naturaleza del conflicto

Después de la Guerra Mundial II, la guerra dejó de ser exclusivamente militar.

Hoy en día, el conflicto es:

La defensa ya no es igual al ejército.

La defensa es la integridad del sistema.

II. Filosofía de Doctrina Victoria

La victoria del siglo XXI es una condición en la que:

Fórmula:

Ganar = Represión de la soberanía

Si cualquier multiplicador es igual a cero el sistema es vulnerable.

III. Arquitectura de la Unión Unida 1. Contorno militar estratégico

Objetivo : Garantizar la inevitabilidad de la respuesta.

Elementos clave:

Principio: El posible conflicto debe perderse de antemano para el iniciador.

2. Soberanía tecnológica

El que controla la tecnología es el que determina las reglas.

Ámbitos:

Dependencia = riesgo estratégico.

3. Sostenibilidad económica

Sin una economía sostenible, la defensa se está agotando.

Contorno:

4. Seguridad básica

La fractura informativa destruye más rápido que los misiles.

Es necesario:

La sociedad debe entender por qué existe la Unión.

5. Diplomacia noosférica

El nivel más alto de defensa es la reducción de los conflictos ambientales.

Principios:

El objetivo es crear un mundo en el que la guerra no sea sostenible.

IV. Modelo de los cinco niveles de sostenibilidad de la Unión

Nivel

Criterios de sostenibilidad

Riesgo de debilitamiento

Militar

Retención garantizada

Agresión externa

Tecnología

Sistemas independientes

Bloqueo del desarrollo

Económico

Autonomía

Restauración

Social

Confianza y justicia

Diferencia interna

Espejoso

Misión general

Degradación de la identidad


V. Principio " La defensa mediante el desarrollo "

Modelo clásico:

Primero la seguridad, después el desarrollo.

El modelo integral de la Unión:

El desarrollo es la seguridad.

El impulso tecnológico reduce la probabilidad de conflicto más que el aumento del número de efectivos del ejército.

VI. Modelo institucional

Todos los elementos deben funcionar como un solo organismo.

VII. Riesgos del siglo XXI

La defensa debe estar adelantada, no reactiva.

VIII. Conclusión

La Unión Unificada no es un bloque militar. Es una arquitectura de sostenibilidad.

La victoria del siglo XXI es:

Sólo una combinación de estos factores crea una verdadera seguridad.



Proyecto de carta de envío

Unión Unida: Arquitectura de Defensa Integral del siglo XXI

Distinguidos colegas:

En el contexto de la transformación del sistema de seguridad mundial, la aceleración de los ciclos tecnológicos y el aumento de las formas híbridas de enfrentamiento, es especialmente importante pasar de las medidas fragmentadas a una arquitectura integral de sostenibilidad.

Se presenta un informe estratégico sobre el desarrollo de los conocimientos especializados

Unión Unida: Arquitectura de Defensa Integral XXI.

En el informe se establece un enfoque sistemático de las cuestiones relacionadas con:

El modelo propuesto se basa en el principio de:

El desarrollo es la seguridad.

En el informe se considera que la defensa no es sólo un marco militar, sino también un conjunto de elementos interrelacionados: la industria, la ciencia, la educación, la política de información y la cooperación internacional.

Se presta especial atención a:

El documento es de carácter analítico y analítico y está destinado a ser objeto de debate en la comunidad profesional.

Estamos dispuestos a presentar una versión ampliada, aplicaciones analíticas y una hoja de ruta gradual para la aplicación.

Con respeto,

S. L. Sokolov

El borrador de la carta está reforzado.

Orientación para el informe estratégico sobre la arquitectura integrada de la sostenibilidad de la defensa

Estimado _____,

A fin de promover un enfoque sistemático de la sostenibilidad nacional, se presenta un informe analítico sobre:

Unión Unida: Arquitectura de Defensa Integral XXI

El documento contiene un modelo estructurado de defensa basado en cinco marcos interrelacionados y en indicadores de rendimiento mensurables.

1. Contorno militar estratégico

Se propone pasar de la ampliación cuantitativa a los parámetros de la exclusión garantizada de la agresión.

Indicadores clave:

2. Soberanía tecnológica

○ Reducción de la dependencia crítica de los proveedores externos.

Metas propuestas:

3. Sostenibilidad económica

Sin una base económica, la capacidad de defensa se está agotando.

Metrics:

4. Sostenibilidad cognitiva y social

Los conflictos actuales son híbridos.

Indicadores:

5. Principio " La defensa mediante el desarrollo "

El informe justifica una estrategia en la que:

El desarrollo de la industria, la ciencia y la educación se considera parte del sistema de defensa.

Sincronización propuesta:

Resultado práctico de la aplicación del modelo

El informe es analítico y está destinado a ser examinado por expertos. Estamos dispuestos a presentar cálculos ampliados, una matriz de riesgos y una hoja de ruta gradual.

I. Informe: Unión Unida: Arquitectura de Defensa Integral del siglo XXI

7 conclusiones clave

1. La naturaleza del conflicto ha cambiado

El enfrentamiento actual es híbrido: sanciones, limitaciones tecnológicas, ciberataques, influencia de la información. El contorno militar ○ es sólo uno de los elementos.

2. Defensa = sistema de contorno interrelacionado

El modelo consta de 5 niveles:

El debilitamiento de cualquier nivel reduce la sostenibilidad de todo el sistema.

3. La dependencia tecnológica es el principal riesgo del siglo XXI

La vulnerabilidad crítica se crea en las esferas siguientes:

Reducción de la dependencia

4. Sostenibilidad económica - condición de disuasión

Sin una base industrial, no puede haber defensa a largo plazo.

Es necesario:

5. La sostenibilidad cognitiva afecta directamente a la seguridad

La fractura informativa de la sociedad puede causar un daño comparable al de un ataque militar. Se requiere un trabajo sistemático con:

6. El desarrollo es un elemento de defensa.

Inversiones en:

Reduce la probabilidad de conflicto más que la mera acumulación de fuerzas.

7. El objetivo no es ganar la guerra, sino prevenirla.

Una estructura de defensa eficaz hace que la agresión sea económica y estratégicamente inútil.

II. MATRIKA DE RISCOS 

(Posible daño: medidas de respuesta)

№

Riesgo

Viabilidad

Posible daño

Respuesta

1

Embargo tecnológico

Alta

Limitación del desarrollo, dependencia

Localización de los procesos críticos

2

Ciberataques de infraestructura

Alta

Interrupción de control

Establecimiento de circuitos autónomos y sistemas de reserva

3

Presión de saneamiento

Media superior

Pérdidas financieras

Diversificación de los mecanismos de cálculo

4

Desestabilización de la información

Alta

Polarización social

Programas de alfabetización en los medios de comunicación y comunicación estratégica

5

Disminución demográfica

Media

Disminución de la capacidad del personal

Apoyo a la política familiar y educativa

6

Fuga de competencias tecnológicas

Media

Pérdida de soberanía científica

Inversiones en investigación y desarrollo y programas de recursos humanos

7

Restricciones energéticas

Baja (media)

Reducción de la capacidad industrial

Desarrollo de sistemas energéticos autónomos

Concentración final en la carta

En la carta adjunta, puede añadirse un párrafo final:

La aplicación de un modelo integrado de sostenibilidad de la defensa permitirá pasar de una gestión de riesgos reactiva a una arquitectura proactiva de prevención de conflictos.


SECCIÓN FORTALECTIVA

Sostenibilidad económica como contorno de defensa

1. Orientación estratégica

La economía no es un apoyo a la defensa.

La economía es la base de la disuasión.

Históricamente, la sostenibilidad no sólo se ha garantizado por la fuerza militar, sino también por la capacidad industrial. Después de la segunda guerra mundial, la movilización industrial fue el factor clave de la victoria.

En el siglo XXI, la movilización = autonomía tecnológica y financiera.

2. Parámetros fundamentales de la sostenibilidad económica

2.1. Autonomía industrial

Metas (horizon de 5–7 años):

Meta de control: Índice de autonomía industrial (IPA).

2.2. Sostenibilidad financiera

Los riesgos del siglo XXI son los bloqueos calculados y la dependencia monetaria.

Metas:


Meta de control: Tasa de independencia financiera (KFI).

2.3. Autonomía energética

Energía = capacidad de gestión. Parámetros:

Metrika: Índice de sostenibilidad energética (IEU).

2.4. Seguridad alimentaria

La seguridad alimentaria es un factor de estabilidad social.

Objetivos:

  • - 95% suministro interno de productos básicos;
  • Reserva estratégica 12 meses;
  • La autonomía de las semillas 80%.

Meta: Tasa de autonomía alimentaria (KPA).

2.5. Valor añadido tecnológico

El modelo de las materias primas aumenta la vulnerabilidad. Vector objetivo:

  • Aumento de la proporción de productos de alto valor añadido 50% En la estructura de las exportaciones;
  • Aumento del gasto en I+D a 3% PIB;
  • Aumento de la proporción de las industrias de alta tecnología: 25% PIB.

Metrika: Índice de profundidad tecnológica (ITG).

3. Arreglos institucionales para la aplicación

  • Observatorio de Riesgos Estratégicos (auditoría trimestral).
  • Junta de Coordinación de la Autonomía Tecnológica.
  • Integración de la política industrial con el sistema educativo.
  • Grupos de producción estratégica de ciclo completo.
  • Planificación de inversiones a largo plazo (horizonte de 10–15 años).

4. Modelo económico " Defensa mediante el desarrollo "

Fórmula:

Sostenibilidad económica = Producción - Tecnología - Autonomía financiera - Dotación

Si un elemento se debilita, el sistema es vulnerable.

5. Matriz de riesgos económicos (versión mejorada)


Riesgo

Viabilidad

Daños

Prioridad de la respuesta

Bloqueo tecnológico

Alta

Crítica

Máximo

Aislamiento financiero

Media superior

Alto

Alto

Limitaciones lógicas

Media

Alto

Alto

Adicción a los productos básicos

Media

Media

Media

Disminución demográfica

Media

Estratégico

Máximo



6. Posición final para la carta

Se puede añadir el acento final:

La sostenibilidad económica se considera un elemento de la estructura de defensa nacional que garantiza una capacidad a largo plazo de disuasión estratégica y desarrollo.



Anexo A. Análisis hipotético de la sostenibilidad

Metodología

Valoramos el sistema en 5 (militar, tecnológico, económico, cognitivo, institucional) mediante:

Hipótesis 1. Optimista

*La competencia dirigida + la ventana del desarrollo

Triggers

La ventana de oportunidad

Medidas prioritarias

Resultado

Hipótesis 2. Base

Presión prolongada + olas de restricciones

Triggers

Riesgos clave

Medidas prioritarias

Resultado

Hipótesis 3. Estrés

* Expansión aguda: brechas financieras y tecnológicas + cibercybers.

Triggers

Perfil de daños: alto/crítico, especialmente en los primeros 30–90 días.

Contorno de crisis (que debería estar listo de antemano)

Objetivo: Mantener la capacidad de control, evitar la destrucción de la infraestructura en cascada.

Anexo B. Cuadro de sincronización intersectorial

La idea es simple: la sostenibilidad de la defensa no se logra en la industria, sino en las interconexiones (datos sobre la energía, producción, producción, logística, finanzas, significado).

1) Matriz de Contura - Sector - Salir KPI”


Sistema

Industrias de base

Salida crítica

KPI (ejemplo)

Militar Estratégica

Comunicaciones, satélites, equipo

la gobernanza sostenible

hora de recuperación;porcentaje de canales protegidos

Tecnología

Microelectrónica, maquinaria, software

cadenas independientes

Coeficiente de localización; proporción de software nacional en los sistemas críticos

Económico

Industria, energía, finanzas

base de recursos

reservas de críticas; autonomía de balance energético

Cognitivo

Educación, medios de comunicación, cultura

Sostenibilidad social

índice de confianza; velocidad de neutralización de las campañas de información

Institucional

Administración pública, normalización

Coordinación

tiempo de adopción de decisiones; % de proyectos con sincronización



2) Cuadro __7 cadenas clave (las conexiones más importantes)


Cadena

¿Por qué?

Lugar estrecho

Que sincronizar

Microelectrónica - telecomunicaciones - administración

Gobernanza del país

Componentes/fábricas

localización + normas + certificación

Energía - Industria - logística

sostenibilidad de la producción

red/reserva

Generación distribuida + reservación de objetos

Datos de IE de seguridad cibernética

Defensa de avanzada

Personal/PG

Centros de datos + aprendizaje + protocolos de respuesta

Financiación de la cuenta de comercio exterior

Sostenibilidad del intercambio

Clering/moneda

Otros cálculos + reservas + rutas

Materiales de química de la maquinaria

de producción completa

Materiales raros

reservas de almacenamiento + reprocesamiento + sustitución

Educación - Personal de I+D

El impulso tecnológico

fuga de cerebros

Becas + Escuelas de Ingeniería + encargo de investigación y desarrollo

El significado de la confianza de la preparación para la movilización

Sostenibilidad social

polarización

Comunicación + cultura + medios de comunicación



3) Mini-registro de dependencia crítica

Esto se insertará en un cuadro en un anexo y se rellenará sobre la base de:







Anexo B. Prueba de resistencia al estrés: 10 sistemas críticos de la Unión

Escala

1) Sistema de energía (generación + red + control)

Umbral de falla: pérdida de capacidad de 15% en la región por 6 horas o interrupción de la frecuencia/perturbabilidad de la red.

Cascade: Conexión Agua/Cerca de la Industria - Logística de la Salud.

Plan de recuperación

KPI

2) Comunicaciones y gestión (magistrados, telecomunicaciones especiales, redes de radio)

Límite de eliminación: degradación de la capacidad de control > 2 horas (conducciones inestables en eslabones clave).

Cascad: Administración del Estado, defensa, finanzas, logística.

Plan de recuperación

KPI

3) Sistema financiero y cálculos

Umbral de rechazo: imposibilidad de realizar cálculos en masa > 24 horas o congelación de canales externos de compensación.

Cascade: Comercio de logística de tensión social.

Plan de recuperación

KPI

4) Logística y transporte (FC/portuarios/autos/aviones)

Límite de rechazo: fallo en la entrega de las críticas > 72 horas o bloqueo de los nodos clave.

Cascade: Combustible - Industria.

Plan de recuperación

KPI

5) Alimentación y cadenas agrícolas

Límite de rechazo: déficit de canasta básica en la región > 7 días o shock de precios > del corredor establecido.

Cascade: Sostenibilidad social

Plan de recuperación

KPI

6) Salud y estado de preparación

Límite de eliminación: sobrecarga de hospitales > 20% para 2+ semanas o déficit de critiquetas.

Cascad: Demografía

Plan de recuperación

KPI

7) Gobierno y continuidad del poder

Límite de rechazo: incapacidad de adoptar o adoptar decisiones a niveles clave > 2 horas.

Cascade: Se acabó.

Plan de recuperación

KPI

8) y movilización industrial

Umbral de rechazo: interrupción de las críticas/componentes > 30 días.

Cascades el contorno militar de la política exterior tecnológica.

Plan de recuperación

  • 0–24ch: Inventario de la dependencia crítica, redistribución de la capacidad, conversión de líneas.
  • 24–72ch: lanzamiento de suministros alternativos/sustitución, certificación acelerada.
  • a 30d: inicio de la producción de " puntos de aflojamiento " , reservas de almacenamiento, contratos a largo plazo.

KPI

  • Tiempo de sustitución del critico (mes);
  • Proporción de la localización basada en las críticas (%);
  • Existencias de componentes críticos (mes de revestimiento).

9) Educación/personal/INR (contorno de ingeniería)

Límite de renuncia: escasez persistente de profesionales clave o fuga de competencias.

Cascade: Tecnología de la industria de la defensa.

Plan de recuperación

  • 0–24ch: Priorización de competencias clave, Registro de Personal.
  • 24–72ch: paquetes de estímulo, programas acelerados de readiestramiento.
  • hasta 30d: Escuelas de Ingeniería, subsidios de investigación y desarrollo, encargo de aplicaciones.

KPI

  • Emisión de ingenieros/año por orden de prioridad;
  • La proporción de I+D del PIB (%);
  • Fecha de cierre de las vacantes en las criticas (días).

10) Media/infosreda/sostenibilidad cognitiva

El umbral de rechazo es la polarización masiva, la caída de la confianza por debajo del umbral crítico o el éxito de las operaciones de información que causan parálisis administrativa.

Cascad: Sostenibilidad social

Plan de recuperación

  • 0–24ch: un centro de comunicaciones para la crisis, hechos-contorno rápidos, prevención del pánico.
  • 24–72ch: Campañas de sensibilización, alfabetización en los medios de comunicación, trabajo con líderes comunitarios.
  • 30d: Estrategia de seguridad del sistema (educación + cultura + medios de comunicación).

KPI

  • Velocidad de desactivación (horas);
  • Índice de confianza en las instituciones;
  • Proporción de la población con nivel básico de alfabetización en los medios de comunicación (%).


Anexo G - El cuartel general del incidente (cuarto de la estructura)

Composición:

Energía, comunicaciones, ciberfinanzas, logística, socialismo, medios de comunicación, industria.

Protocolo único: 

Encuentra el aislamiento de ○ Restauración postanálisis.

Modo: 

24/7 en escenarios de estrés, ejercicios semanales en el modo de base.










PASO DE LA SOSTENIBILIDAD

(norma para el sistema crítico de la Unión)

1. Identificación del sistema

  • Nombre del sistema:
  • Contorno (militar/tecnológico/económico/cognitivo/institucional):
  • Nivel de criticidad: I / II / III
  • Órgano responsable/coordinador:

2. Función específica

¿Qué tiene que hacer el sistema en cualquier circunstancia? (formulado en 1–2 líneas, sin palabras comunes)

3. Umbral de cesión (zona roja)

Concretamente:

  • Tiempo de degradación:
  • Escala:
  • Pérdida de funcionamiento (%):

4. Reserva

  • Reserva física (capacidad, almacenes, equipo):
  • Reserva de información (por canales paralelos):
  • Reserva de personal:
  • Reserva financiera:

5. Hipótesis de respuesta. 0–24 horas

(primeras acciones) 24–72 horas

(estabilización) hasta 30 días

(rehabilitación y fortalecimiento)

6. KPI Sostenibilidad

  • Hora de recuperación (RTO):
  • Pérdida admisible de datos (RPO):
  • % Autonomía:
  • Frecuencia de las pruebas de estrés:
  • Índice de preparación (combinado):

7. Nivel de madurez

1

2

3 en funcionamiento

4

5 - Resiliencia al estrés

Ejemplo 1

Pasaporte para la sostenibilidad

Contorno: tecnología económica

Crítica: I

Función específica:

Garantizar la continuidad del suministro de energía a la infraestructura y la industria críticas.

Umbral de rechazo:

Pérdida > 15% capacidad regional por > 6 Horas.

Reservación:

  • 20% generación distribuida
  • 100% Reserva de objetos críticos
  • 30 días de existencias de componentes esenciales

KPI:

  • Horas de recuperación < 12
  • 95% Críticas de alimentación autónoma
  • 2 prueba de estrés por año

Ejemplo 2

Sistema financiero

Contorno: económico

Crítica: I

Función específica:

Continuidad de los cálculos y las prestaciones sociales.

Umbral de rechazo:

Imposibilidad de las operaciones masivas > 24 horas.

Reservación:

  • Mecanismo alternativo de compensación
  • 24 meses para cubrir las importaciones de posiciones críticas
  • 2 Centro de datos independientes

KPI:

  • 99% pagos pendientes
  • Restablecimiento de los pagos en masa < 6 horas
  • Porcentaje de cálculos autónomos 70%

Ejemplo 3

Pasaporte de sostenibilidad - Comunicaciones y gestión

Contorno: institucional y militar

Crítica: I

Función específica:

Gestión garantizada a todos los niveles.

Umbral de rechazo:

Interrupción de las comunicaciones permanentes > 2 horas.

Reservación:

  • Canales de repetición (optica + satélite + reserva de radio)
  • Centros de control de reserva
  • Doble contorno criptográfico

KPI:

  • Cambio a reserva < 10 minutos
  • 100% nodos clave con duplicación
  • Ejercicios trimestrales

Cómo usar esto estratégicamente

Si el documento se envía oficialmente, recomiendo que:

  • Construir 10 pasaportes (todos los sistemas críticos).
  • Remplazarlos en el cuadro sinóptico Índices de Sostenibilidad de la Unión.
  • Implantar un procedimiento anual de auditoría.
  • Añádase una sección sobre la dinámica de 3.


I. Índice de sostenibilidad de la Unión (SIU)

1. Lógica del índice

La sostenibilidad no es una suma, sino un diseño de contorno.

Si un contorno es débil, todo el sistema es vulnerable.

Fórmula: 

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

Donde:

  • W - Contorno militar
  • T - Tecnología
  • E ○ Económico
  • C - Cognitivo (social)
  • I. Instituciones

Cada contorno se mide en una escala de 0–100.

Se utiliza la media geométrica para que el eslabón débil reduzca el total.

2. Cálculo interno de cada contorno

Cada contorno = promedio de 5:

Sistema

Opciones

W

Control, autonomía de gestión, reservas, estabilidad cibernética, ejercicios

T

Localización, I+D, dotación de personal, independencia del software, profundidad de producción

E

Industria, finanzas, energía, alimentos, logística

C

Confianza, sostenibilidad de la información, educación, integración cultural, preparación para la movilización

I

Velocidad de las soluciones, coordinación intersectorial, duplicación de centros, auditoría de riesgos, transparencia KPI

3. Escala de interpretación

SIU

Nivel

0–40

Sistema vulnerable

40–60

Parcialmente sostenible

60–75

Estable

75–85

Alta sostenibilidad

85–100

Estratégicamente protegida

4. Ejemplo de cálculo (condicional)

W = 78

T = 62

E = 70

C = 65

I = 60

SIU ~ 66 Conclusión: el sistema es estable, pero es necesario fortalecer el marco tecnológico e institucional.

II. CARTA DE DURA: TRANSICIÓN 2 - 5

Niveles de madurez

2 ○ Conseguido parcialmente

3

4 ○ Se prueba periódicamente

5 ○ Resiliencia al estrés

ETAP 1 (0–2)

Transición 2 ° 3. Objetivo: Formalizar el sistema.

  • Confirmar los pasaportes de estabilidad.
  • Establecer un registro único de dependencia crítica.
  • Iniciar la auditoría anual SIU.
  • Establecer un observatorio de riesgos.
  • Comienza las pruebas de estrés trimestrales.

Resultado: el sistema se está gestionando.

ETAP 2 (2–5 años)

Transición 3 ° 4. Objetivo: Verificar el sistema en la práctica.

  • Ejercicios intersectoriales periódicos.
  • Duplicación de los centros de control.
  • Aumento de las reservas a niveles normativos.
  • Localización de 60–75% componentes críticos.
  • Aumento de I+D: 3% PIB.

Resultado: El sistema aguanta el estrés básico.

ETAP 3 (5–10 años)

Transición 4 ° 5. Objetivo: Autonomía estratégica total.

  • Doble contorno de control completo.
  • 80–90% autonomía de las industrias críticas.
  • Sostenibilidad al aislamiento financiero.
  • Un alto índice de confianza (75).
  • SIU ≥ 80.

Resultado: la agresión se vuelve insostenible.



III. Mecanismo de control

Una vez al año

  • Contrabando SIU.
  • Actualización de pasaportes.
  • Informe público (o cerrado) sobre la dinámica.
  • Ajuste de la hoja de ruta.

General

La sostenibilidad no es un informe. Es una dinámica controlada de los indicadores.

PLATFORMA DE CONSULTAS

Prototipo de interfaz (MVP)

1 - - - STRATEGIC DASHBOARD

Elemento central:

SIU - Índice consolidado de sostenibilidad

Un gran indicador circular:

  • 0–40 Zona roja
  • 40–60 amarilla
  • 60–75 Verde
  • 75 + verde oscuro

Bajo él, la dinámica de 12 meses.

Derecha: 5

Sistema

Índice

Entrenamiento

Militar

78

↑

Tecnología

62

→

Económico

70

↑

Cognitivo

65

↓

Institucional

60

→

Click para cada uno de ellos es un paso hacia el detalle.

2 - Contorno (ejemplo: Económico)

Bloque 1 — KPI en tiempo real

  • Autonomía industrial (%)
  • Sostenibilidad financiera
  • Equilibrio energético
  • Índice de alimentación
  • Sostenibilidad lógica

Cada uno con una indicación semáfora.

Grupo 2 - Mapa de riesgos

Matriz: Probabilidad

Los riesgos se ponen de relieve automáticamente cuando se sobrepasa el umbral.

Grupo 3

Calendario 1 / 3 / 5

  • Proyección al ritmo actual.

3

Interfaz:

Filtrador:

  • Industria
  • Nivel de riesgo
  • Parte de las importaciones
  • Período de sustitución

Cuadro

○ Componente ○ Riesgo ○ Sustitución ○ Período de la reserva

El sistema identifica automáticamente las posiciones críticas.

4

Pantalla de escenarios:

  • Optimista
  • Base
  • Estrés

El usuario selecciona el evento:

  • Bloqueo financiero
  • Ciberataca
  • Un fallo lógico
  • Incidente energético

El sistema prevé:

  • Caída SIU
  • Horas de recuperación
  • Efectos de cascada

5️⃣ WAR ROOM DIGITAL

El modo se activa automáticamente con:

  • SIU menos 60
  • Excediendo el umbral de riesgo crítico

La pantalla se divide en 4:

  • Mapa de acontecimientos
  • Críticas KPI
  • Desafíos y decisiones
  • Tiempo de reacción

6 - Arquitectura de los niveles de acceso

Nivel 1

Solo los índices y el analista.

Nivel 2

Indicadores sectoriales y riesgos.

Nivel 3 ○

Datos y parámetros profundos.

7 - Estructura técnica MVP

  • Backend: Contorno de servidor protegido
  • Base de datos: distribuida
  • Análisis: módulo de cálculo SIU
  • Interfaz: web + protegido intranet
  • Lógica: Auditoría continua de las medidas

8 - Funcionamiento mínimo de lanzamiento (6–9 meses)

  • Cuantía SIU.
  • Dashbord 5 contorno.
  • Pasaportes de sostenibilidad.
  • Prueba básica de estrés.
  • Ingreso manual KPI.

Sin demasiadas complicaciones.


I. Efecto económico del aumento de la sostenibilidad

1. Lógica básica

La sostenibilidad reduce:

  • bonificación por riesgo,
  • volatilidad,
  • pérdidas debidas a las crisis,
  • Costos de sustitución de las importaciones en caso de emergencia.

Y aumenta:

  • El atractivo de las inversiones,
  • la profundidad del reprocesamiento,
  • valor añadido,
  • La autonomía tecnológica.

2. Modelo de impacto en el PIB. 

Dividiendo el efecto en 4:

1○ Reducción de las pérdidas de crisis

Históricamente las crisis se comen 3–8% El PIB en el escenario del estrés.

El aumento de SIU de 60 a 80 reduce las pérdidas en 30–50%.

Economías: 1,5–3% PIB anual en el horizonte de 10 años.

2Aumento del valor añadido tecnológico

Aumento de la proporción de alto riesgo: +10% respecto de la estructura de las exportaciones

= +2–3% al PIB a mediano plazo.

3○ Reducción de los costos financieros

La sostenibilidad disminuye:

  • Costo de los préstamos;
  • Pérdidas relacionadas con las sanciones,
  • Una fuga de capitales.

Efecto estimado: +0,5–1,5% PIB.

4

Inversiones en:

  • Energía,
  • digitalización,
  • Cooperación industrial, 
  • La animadora es 1,4–1,8.

3. Efecto acumulativo

Durante la transición SIU 65 ° 80: Posible crecimiento del PIB: +3–6% a la trayectoria básica en el horizonte de 7–10.

General: La sostenibilidad es rentable.


II. Plataforma de vigilancia

Vamos al control digital.

Arquitectura de la plataforma

1. Objetivo

Vigilancia real de la sostenibilidad en modo 24/7. No informes una vez al año. Es un sistema vivo.

2. Módulos básicos

MÓDULO 1 — SIU-CORE

  • Cálculo automático del índice de sostenibilidad.
  • Dashbord 5 contorno.
  • Evolución de 1–5–10 años.

MODOUL 2 ○ REESTRUCTURA DE LAS ESFERAS CRÍTICAS

  • El componente de la industria de ○ es el proveedor del riesgo.
  • Las señales están por encima del umbral.

MODOUL 3 ○ ESTS EST ENGINE

  • Modelización de escenarios.
  • Evaluación de los efectos en cascada.
  • Proyección del tiempo de recuperación.

MÓDULO 4 — SEGUIMIENTO DE KPI

  • Energía.
  • Comunicaciones.
  • Finanzas.
  • Logistica.
  • Educación.
  • CGK.

MÓDULO 5 — WAR ROOM DIGITAL

  • Integración de datos en la crisis.
  • Centro de adopción de decisiones.
  • Historia de los incidentes.

3. Arquitectura tecnológica

La plataforma comprende:

  • Fecha-contorno protegido,
  • Nodos distribuidos,
  • la capa analítica (AI),
  • Interfaz de gestión estratégica.

4. Niveles de acceso

  • Estratégico (índice compuesto).
  • Operativo (indicadores sectoriales).
  • Técnica (metografías y alarmas específicas).

5. Etapa de aplicación

Etapa 1 (1–2)

  • Inicio SIU-CORE.
  • Pasaportes de sostenibilidad.
  • Pruebas básicas de estrés.

Etapa 2 (3–5 años)

  • Integración de los datos sectoriales.
  • Señales automáticas.
  • Centro de Vigilancia Digital.

Etapa 3 (5–10 años)

  • Una doble digital completa de resistencia.
  • Proyección en IA.
  • Protección preventiva.

Conexión final. Crecimiento SIU - Reducción del riesgo de las inversiones - Fortalecimiento de la sostenibilidad del PIB. Ciclo cerrado.

Data Model (esquema de datos) de la plataforma de información sobre el medio ambiente para MVP. Esto se puede entregar inmediatamente al arquitecto/productor: naturaleza, conexiones, campos, normas de inversión y cálculo SIU.

Base de datos de la plataforma de información sobre el medio ambiente (MVP)

0) Principios del modelo

  • Continuidad: Todo lo importante se registra como medida / incidente / decisión / prueba.
  • Version: Pasaportes, KPI y umbrales tienen versiones (para que la auditoría vea la historia).
  • Jerarquía: Sistema de Contorno KPI - Medición.
  • Normativa vs Fact: Se mantienen por separado los valores específicos y las mediciones reales.

1) Repertorio (core)

1.1 Contour: Contorno de sostenibilidad (5 - ¿Qué).

  • contour_id (PK)
  • code (W, T, E, C, I)
  • name
  • weight (predeterminado 0.2)
  • description

1.2 Critical System. 10 sistemas críticos (energía, comunicaciones, finanzas...).

  • 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. Subsistemas dentro de CriticalSystem.

  • subsystem_id (PK)
  • system_id (FK → CriticalSystem)
  • name
  • description
  • status

1.4 OrgUnit. Organizaciones/oficinas.

  • org_id (PK)
  • name
  • type (operator/regulator/analysis/…)
  • contact_role (no datos personales, sólo papel)
  • status

1.5 UserRole (RBAC). Roles de acceso.

  • role_id (PK)
  • name (strategic/operational/technical/auditor/admin)
  • permissions (json/bitmask)

2) Pasaportes de sostenibilidad (versión y control)

2.1 ResiliencePassport. Pasaporte del sistema (sombrero actual).

  • 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. Versión del pasaporte (auditoría y modificación).

  • version_id (PK)
  • passport_id (FK)
  • version_no (int)
  • target_function (text)
  • failure_threshold (text + structured fields infra)
  • 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. (opcional, si se necesita estructurar)

  • threshold_id (PK)
  • version_id (FK)
  • metric (e.g. “capacity_loss_pct”, “outage_hours”)
  • operator (>, >=, <…)
  • value (float)
  • unit

2.4 ReserveProfile. Un perfil de las reservas en la versión del pasaporte.

  • 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 y medidas

3.1 KPI. Manual 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. Conexión KPI al sistema/subsistema y contorno + normas.

  • 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) (monto de contorno = 1.0)
  • effective_from, effective_to
  • source_type (manual/api/import)
  • owner_org (FK)

3.3 Measurement. Mediciones efectivas KPI.

  • measurement_id (PK)
  • kpi_def_id (FK)
  • timestamp
  • value (float)
  • quality_flag (ok/suspect/missing)
  • ingested_at
  • source_ref (linea: archivo/detector/sistema)

4) Riesgos y dependencia

4.1 Risk Register. Registro de riesgos (por ejemplo, en el caso de la matriz, es probable que haya daños).

  • 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. Adicciones críticas (componente/programa/material).

  • 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) Incidentes y War Room

5.1 Incident. Incidente/emergencia (real o doctrina).

  • 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 Incident Impact. Efectos de cascada (de los cuales KPI/sistemas resultaron dañados).

  • impact_id (PK)
  • incident_id (FK)
  • kpi_def_id (FK, nullable)
  • affected_system_id (FK, nullable)
  • delta_value (float, nullable)
  • notes

5.3 DecisionLog. Registro de decisiones War Room.

  • decision_id (PK)
  • incident_id (FK)
  • time
  • decision_text
  • assigned_org (FK)
  • deadline
  • status (planned/in_progress/done)
  • evidence_ref (nullable)

6) Pruebas de estrés y escenarios

6.1 Scenario

  • scenario_id (PK)
  • name (optimistic/base/stress + custom)
  • description
  • assumptions (text/json)
  • created_at

6.2 StressTestRun. Iniciando la prueba.

  • run_id (PK)
  • scenario_id (FK)
  • initiated_at
  • initiated_by_role
  • scope (national/region/system)
  • status

6.3 StressTestResult. Resultados de sistemas/contorno.

  • 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) Cálculo de índices (SIU)

7.1 ContourScore. Un resumen del período.

  • contour_score_id (PK)
  • contour_id (FK)
  • period_start, period_end
  • score_0_100
  • computed_at
  • method_version (para cambiar la metodología)

7.2 SIUScore. Índice 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

Regla de cálculo (MVP)

  • Consideramos que cada ContourScore es un promedio ponderado de KPI a KPI Definition.weight_in_contour durante el período (por ejemplo, last/avg).
  • SIU = media geométrica de cinco contornos:
    SIU = (W × T × E × C × I)^{1/5}
  • Si hay muchas missings en el contorno, debemos imponer una multa (por ejemplo, 5...-15), para estimular los datos.

8 Comunicaciones (corto)

  • 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 ○ Acumulaciones periódicas

9) Conjunto mínimo de datos de lanzamiento MVP

Para que la plataforma viva de inmediato:

  • 10 CriticalSystem
  • 5 Contour
  • 5 KPI por contorno (25 KPI mínimo)
  • 1 Pasaporte al sistema (10) + versión
  • Importaciones semanales de Measurement (incluso manuales)
  • 1 Hipótesis básica de prueba de estrés


DDL esqueleto de PostgreSQL (cuadros/placas/índices) y wireframe de navegación/pantallas, estrictamente bajo nuestro Model Data.

1) PostgreSQL DDL (esqueleto)


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

-- PLATFORM "SOYUZ" - MVP DDL (PostgreSQL)

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


- 0) Enums (puede reemplazarse por directorios)

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, sólo papel, sin datos personales

  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 - breve descripción del umbral de rechazo

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


Nota MVP

  • En DDL no hay tabla de usuario (Libros/autenticación). Para MVP, es suficiente RBAC funciones externas + SSO/LDAP más tarde.
  • Hay muchos pesos: contour.weight + kpi_definition.weight_in_contour. En MVP se pueden registrar los contornos de 0.2 y sólo se pueden controlar KPI.

2) Wireframe interface (menú + pantallas)

Navegación mundial (menú izquierdo)

  • Inicio
  • Contorno
    • W Militar
    • T Tecnología
    • E Economía
    • C Cognitivo
    • I Institucional
  • Sistemas críticos
    • Energía
    • Contacto
    • Finanzas
    • Logistica
    • Alimentación
    • Salud
    • Administración pública
    • CGK
    • Dotación de personal/INRA
    • Infosred
  • Pasaportes de sostenibilidad
  • KPI y Mediciones
  • Riesgos y dependencia
  • Pruebas de estrés
  • War Room
  • Informes / Exportación
  • Preferencias
    • Referencias
    • Umbrales/escalas
    • Funciones de acceso

Pantalla 1: Principal (Strategic Dashboard)

Barra superior:

  • Período (una semana/mes/trimes)
  • Filtrador (país/región/sistema)
  • Botón ♪ Iniciar pruebas de estrés
  • Índice de modo (Normal / Alert / War Room)

Cuerpo:

  • Gran SIU gauge
  • 5 barras de contorno (W/T/E/C/I): score + tendencia + status
  • - Top-5 - (de riesgo_register de riesgo_score)
  • *Top-5 adicciones (dependency_item on risk_level=critical)
  • ○ Incidentes activos (de hecho=open/contained)

Pantalla 2: Contorno (ejemplo: Economía)

Fichas:

  • KPI
  • Riesgos
  • Adicciones
  • Acontecimientos (incidentes)
  • Recomendaciones (sobre la base de los resultados de las pruebas de estrés)

KPI.

  • Cuadro KPI con umbrales (target/warn/critical)
  • Calendario para cada KPI (last 90 days)
  • * Falles de datos (quality_flag=missing) ○ multa en el índice

Pantalla 3: Sistema Crítico (ejemplo: Energía)

Botella del sistema:

  • Nivel de crítica
  • Órgano responsable (org_unit)
  • Pasaporte actual (versión)

Bloques:

  • KPI sistemas (por ejemplo, subsistemas)
  • Umbral de rechazo (de passport_version + failure_threshold)
  • Reservas (de reserve_profile)
  • Incidentes del sistema
  • Botón Abrir War Room en el sistema

Pantalla 4: Pasaportes de sostenibilidad

  • Lista de pasaportes (system + contour + maturity)
  • Abrir pasaporte - Historia de las versiones
  • Editor de versión (si el papel lo permite)
  • Botón }Asignar el nombre actual (actualizar actual_version_id)

Pantalla 5: KPI y mediciones

  • Catálogo KPI
  • Conexiones KPI a sistemas (kpi_definition)
  • Importación de mediciones / entrada manual
  • Control de calidad de los datos (ok/suspect/missing)
  • Auditoría de las fuentes (source_ref)

Pantalla 6: Riesgos y dependencia

  • Matriz probable de daño (heatmap)
  • Registro de riesgos (risk_register)
  • Registro de dependencia (dependency_item) con filtros:
    • riesgo_level
    • import_share_pct
    • substitution_due_months

Pantalla 7: Pruebas de estrés

  • Hipótesis (scenario)
  • Inicio (stress_test_run)
  • Resultados (stress_test_result):
    • Reducción prevista SIU
    • Estimación RTO
    • recomendaciones

Pantalla 8: War Room

Layaut 4 panel:

  • Mapa/tiempo del incidente
  • KPI
  • Lista de decisiones (decision_log)
  • Objetivos/períodos/responsables (decision_log status)

Entrada automática a War Room si:

  • siu_score < 60 or
  • Incidente de severity 4 o
  • риск_score ≥ 20 (5×4, 5×5)

1) ContourScore y SIU (SQL)

1.1 Normalización KPI en la escala 0–100

Idea: Cada dimensión KPI se traduce a 0–100 en relación con los umbrales críticos_value / warning_value / target_value.

  • Si es superior_is_better:
    • value ≥ target → 100
    • value ≤ critical → 0
    • Interpolación lineal entre critical y target (puede complicarse más tarde)
  • Si lower_is_better: espejo

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

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


Nota: warning_value todavía no se ha utilizado en la fórmula. En v2, puedes hacer una función critical: warning tarrget.


1.2 ContourScore = promedio ponderado KPI por contorno

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

-- 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 = media geométrica 5 + multa por 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 (opcional) materialized views para velocidad

-- 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 data (MVP)

2.1 Conturas, funciones, organizaciones, 10 sistemas críticos

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

-- SEED DATA - CORE

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


-- Contours

INSERT INTO contour (code, name, weight, description) VALUES

(W', 'Militar', 0.2, 'Retención, control, estabilidad cibernética, ejercicios')

('T', 'technology',0.2, 'localización, I+D, software, personal, profundidad de producción')

('E', 'E', '0.2, 'Industria, finanzas, energía, alimentos, logística')

('C', 'Cognitivo', '0.2,'Confianza, Infosos, Educación, Cultura')

( 'I', 'institution', '0.2, 'Coordinación, velocidad de decisión, auditoría de riesgos, reserva de control')

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 (aproximadamente)

INSERT INTO org_unit (name, type, contact_role, status) VALUES

('Центр мониторинга СОЮЗ','analysis','координатор','active'),

("Operador de Crítica," "Operator," "Operador," "Operador," "Operador"),

(" Kibercent " , " operator " , " guardia " , " activo ")

('Contorno Financiero', 'operator','Coordinador','active')

(" Contorno " , " Operator " , " Coordinador " , " Activ ")

(" Infosred/comunicaciones " , " Operator " , " Coordinador " , " Activ ")

(" I+D y personal " , " operator " , " coordinador " , ' 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

(" Energosistema " , " Energy " , 1),

(" Comunicaciones y Administración " , " Comm " , 1)

(" Sistema financiero " , " financiación " , 1),

(Logistics and Transport, Logistics, 1)

(" Sistema alimentario " , " alimentos " , 1),

(Salud, health, 2)

(" Continuidad de la administración pública " , " Gobierno " , 1)

('OPC y movilización industrial', 'defense_industry', 1)

(" e I+D " , " hr_rnd " , 2)

(" Infosred and Cognitive Sustainability " , "info " , 1)

) AS x(name, category, crit)

JOIN org_unit ou ON ou.name = 'Центр мониторинга СОЮЗ'

ON CONFLICT (name) DO NOTHING;


2.2 KPI (25: 5 por contorno)

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

-- SEED DATA - KPI CATALOG (25)

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


-- W (higher better unless stated)

INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES

(W1: Autocontrol', '%', 'last', 'higher_is_better', 'Dolares de marcos autónomos de control'),

(W2: Proporción de canales protegidos, %', 'last', 'higher_is_better', 'Dol de canales protegidos'),

(W3: Hora del cambio a la reserva', 'min', 'last', 'lower_is_better', 'menos tiempo antes del cambio a los canales de reserva'),

(W4: Facturabilidad Cibernética (límite de impacto) ", "index', 'last', 'higher_is_better', 'Índice de resistencia a los ataques'),

(W5: Frecuencia de los ejercicios interconectores, 'per_year', 'last', 'higher_is_better', 'Enseñanza/año');


-- T

INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES

(T1: Localización de los componentes críticos', '%', 'last', 'higher_is_better', 'Dol de los componentes críticos localizados')

('T2: Proporción de software nacional en los sistemas críticos', '%', 'last', 'higher_is_better', 'Utilización de software nacional'),

(T3: I+D al PIB', %GDP', 'last', 'higher_is_better', 'intensidad de I+D'),

(T4: Emisión de ingenieros por prioridades, 'per_year', 'last', 'higher_is_better', 'Número de graduados/año')

(T5: Tiempo de sustitución del crítico, "months," "last', 'lower_is_better', "Red de sustitución de un punto estrecho");


-- E

INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES

(E1: Autonomía Industrial, %, last','higher_is_better', 'Samoaficy of Production'),

(E2: Continuidad de los pagos en masa, %', 'last', 'higher_is_better', 'La tasa de pago sin demora'),

(E3: Autonomía energética, porcentaje, last','higher_is_better', 'Del suministro interno de energía'),

(E4: Días de la Reserva Alimentaria, Días, Last', 'higher_is_better', 'Cuenta de la Reserva')

(E5: SLA entrega de critiques, '%', 'last','higher_is_better', 'entrega de critiques en SLA');


-- C

INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES

('C1: Índice de confianza en las instituciones', 'index', 'last','higher_is_better', 'la confianza pública'),

(C2: Velocidad de refutación de los bucles, hours', 'last', 'lower_is_better', 'horas antes de la neutralización')

(C3: Tasa de alfabetización en los medios de comunicación, porcentaje, last','higher_is_better', 'Población con alfabetización en los medios de comunicación básica')

('C4: Cobertura de la educación del sistema', '%', 'last','higher_is_better', 'La cobertura de los programas'),

('C5: Índice de vinculación social', 'index', 'last','higher_is_better', 'Polarización/relación');


-- I

INSERT INTO kpi (name, unit, aggregation, direction, description) VALUES

(I1: Hora del ciclo de toma de decisiones, "hours," "last', 'lower_is_better', 'de un evento a una decisión')

(I2: Cubierta de pasaportes resistentes, %', 'last', 'higher_is_better', 'Dol de sistemas de pasaportes'),

(I3: Frecuencia de la auditoría de riesgos, 'per_year', 'last','higher_is_better', 'auditos/año'),

(I4: Duplicación de los centros de control, porcentaje, last', 'higher_is_better', 'Cubran los centros de reserva'),

(I5: Ejecución a tiempo, '%', 'last', 'higher_is_better', 'La proporción de tareas cumplidas a tiempo')

ON CONFLICT (name) DO NOTHING;


2.3 Conectores de KPI y 10 (KPIDEfinition)

Para que el MVP llegue a tiempo, hacemos que cada uno de los 25 KPI esté atado a todos los sistemas (es normal para el MVP y luego a los subsistemas). Peso dentro del contorno = 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 - Escala de condiciones, más tarde

      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;


Importante: un KPI como «ingenieros graduados» requiere normalización según la población/el plan. En el MVP es solo demostrativo. En la versión de producción utilizamos «ingenieros por 100k» o «% de cumplimiento del plan».


2.4 Varias mediciones para que el Dashbord muestre SIU

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

-- SEED DATA - MEASUREMENTS (latest values)

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


-Vamos a medir "hoy" para todos los kpi_definition.

- Para mostrar: valores alrededor del target (con pequeñas variaciones).

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


Cómo verificar que el cálculo funcione (ahora)

- 1) Ver 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) Contorno

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

(" Bloqueo técnico de los componentes críticos " , " tech " , " Control de suministros/equipo " , "5','5',

 (SELECT org_id FROM org_unit WHERE name='Центр мониторинга СОЮЗ'), 'open', NOW()),

(" Kiberatake a Criterinfraestructura " , " Cyber " , " Atacos a la energía/comunicaciones/logística " , "5','4',

 (SELECT org_id FROM org_unit WHERE name='Cibercentro'), 'open', NOW

(" Logistics " , " Descarrilamiento de rutas/superficies "4','4',

 (SELECT org_id FROM org_unit WHERE name='Logistical'), '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= 'Comunicación y control'),

 "Patata crítica," "component," "foreign," 85,

 " Desarrollo de un equivalente nacional + producción por contrato " , 24,6, 'critical',

 (SELECT org_id FROM org_unit WHERE name='Центр мониторинга СОЮЗ')),

(SELECT system_id FROM critical_system WHERE name= 'Sistema financiero'),

 Componentes HSM, Component, Mixed, 40,

 " Localización de la producción y certificación " , 18,9, 'high,

 (SELECT org_id FROM org_unit WHERE name='Cibercent')

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='Energosystem'),

 'outage',4,NOW - INTERVAL '3 hours', 'contained', 'una falla local en el centro de control',

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