P02: Gestión de emergencia

@startuml

scale 0.7

!include <C4/C4_Container>
!include <C4/C4_Context>

title Diagrama de Contenedores - P02: Gestión de emergencia (SIGRID)

System(SIGRIDCLIENTS, "Aplicaciones Clientes de SIGRID", "Aplicaciones clientes con distinto énfasis que utilizan los nodos del SIGRID para disponibilizar información.", $link="../systems.html#ITRENDCL-SIGRID-SYS-SIGRIDCLIENTS")

System_Ext(GOOGLE_CAP, "Google Public Alerts", "Notificaciones de Alertas para la población mediante Google", $link="../systems.html#ITRENDCL-SIGRID-SYS-GOOGLE_CAP")
System_Ext(EMAIL, "Email Service", "Sistema de envío de emails.", $link="../systems.html#ITRENDCL-SIGRID-SYS-EMAIL")
System_Ext(PUSH, "Push Notification Service", "Sistema de envío de notificaciones Push.", $link="../systems.html#ITRENDCL-SIGRID-SYS-PUSH")
System_Ext(SAE, "SAE", "Sistema de Alerta de Emergencias (SAE)", $link="../systems.html#ITRENDCL-SIGRID-SYS-SAE")
System_Ext(SIRENAS, "SIRENAS", "Software de Sistema de Gestión de Sirenas de Alertamiento de Tsunamis", $link="../systems.html#ITRENDCL-SIGRID-SYS-SIRENAS")
System_Ext(EMA, "EMA", "Software de Gestión de eventos y alertas de la Unidad de Alerta Temprana de SENAPRED", $link="../systems.html#ITRENDCL-SIGRID-SYS-SENAPRED-EMA")

Boundary(EXTERNAL_AUTH, "Sistemas de autenticación externos") {
    System_Ext(OAUTH_SENAPRED, "Proveedor de Autenticación SENAPRED", "Oauth server Microsoft Entra", $link="../systems.html#ITRENDCL-SIGRID-SYS-OAUTH_SENAPRED")
    System_Ext(OAUTH_BOMBEROS, "Proveedor de Autenticación OTMA", "Oauth server Microsoft Entra", $link="../systems.html#ITRENDCL-SIGRID-SYS-OTMA")
    System_Ext(OAUTH_SERNAGEOMIN, "Proveedor de Autenticación Organismo Público", "Oauth server Microsoft Entra", $link="../systems.html#ITRENDCL-SIGRID-SYS-OAUTH_ORG_PUBLICO")
}

Boundary(MONITORING_SYSTEMS, "Sistemas de monitoreo") {
    System_Ext(SIDCO, "SIDCO", "Sistema de Información Digital para Control de Operaciones (SIDCO)", $link="../systems.html#ITRENDCL-SIGRID-SYS-SIDCO")
    System_Ext(SHOA, "Sistema Nacional de Alarma de Maremotos SHOA", "Sistema Nacional de Alarma de Maremotos - SNAM SHOA", $link="../systems.html#ITRENDCL-SIGRID-SYS-SHOA")
    System_Ext(CSN, "Sitio web del Centro Sismológico Nacional", "Sitio web del Centro Sismológico Nacional (3/03/2025)", $link="../systems.html#ITRENDCL-SIGRID-SYS-CSN")
    System_Ext(BOMBEROS, "Sistema de Información Bomberil", "Sistema de Información de Bomberos para incendios estructurales, accidentes y colapsos", $link="../systems.html#ITRENDCL-SIGRID-SYS-BOMBEROS")
    System_Ext(SERNAGEOMIN, "Red Nacional de Vigilancia Volcánica", "Red Nacional de Vigilancia Volcánica SERNAGEOMIN", $link="../systems.html#ITRENDCL-SIGRID-SYS-RNVV")
    System_Ext(DMC, "DMC", "Sitio web de la Dirección Meteorológica de Chile (28/02/2025)", $link="../systems.html#ITRENDCL-SIGRID-SYS-DMC")
}

System_Boundary(SIGRID, "SIGRID", $link="../systems.html#ITRENDCL-SIGRID-SYS-SIGRID") {
    Container_Boundary(DOM_GOB, "Dominio de Gobernanza de datos", $link="../containers.html#ITRENDCL-SIGRID-DOM-GOB") {
        Container(SRV_GOB_DQ, "Servicio de Calidad de datos", "Almacena y valida la calidad de los datos.", $link="../containers.html#ITRENDCL-SIGRID-SRV-GOB-DQ")
        Container(SRV_GOB_LC, "Servicio de Ciclo de vida de datos", "Define estándares de ciclo de vida y trazabilidad de los datos.", $link="../containers.html#ITRENDCL-SIGRID-SRV-GOB-LC")
        Container(SRV_GOB_PM, "Servicio de Ciclo de vida de datos", "Define estándares de ciclo de vida y trazabilidad de los datos.", $link="../containers.html#ITRENDCL-SIGRID-SRV-GOB-LC")
        ContainerDb(DB_GOB, "BD Gobernanza", "Base de datos de información de gobernanza.", $link="../containers.html#ITRENDCL-SIGRID-DB-GOB")
    }

    Container_Boundary(DOM_EC, "Dominio de Comunicación externa", $link="../containers.html#ITRENDCL-SIGRID-DOM-EC") {
        Container(SRV_EC_API, "API Management", "Punto de entrada para clientes, gestión de autenticación y autorización.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EC-API")
    }

    Container_Boundary(DOM_UM, "Dominio de Gestión de usuarios", $link="../containers.html#ITRENDCL-SIGRID-DOM-UM") {
        Container(SRV_UM_IDENT, "Servicio de identidad", "Servicio de gestión de identidades federadas.", $link="../containers.html#ITRENDCL-SIGRID-SRV-UM-IDENT")
        Container(SRV_UM_PERM, "Servicio de permisos y políticas", "Servicio de gestión de permisos de usuarios.", $link="../containers.html#ITRENDCL-SIGRID-SRV-UM-PERM")
    }

    Container_Boundary(DOM_EMG, "Dominio de Emergencia", $link="../containers.html#ITRENDCL-SIGRID-DOM-EMG") {
        Container(SRV_EMG_ORCH, "Gestor documental", "Orquestador del almacenamiento de información.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-ORCH")
        Container(SRV_EMG_DOCFMT, "Transformador de formatos", "Sistema de conversión de formatos.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-DOCFMT")

        Boundary(DOM_EMG_APPS, "Aplicaciones de Emergencia") {
            Container(SRV_EMG_INFNET, "Información del estado de la emergencia", "Gestiona recursos de emergencia.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-INFNET")
            Container(SRV_EMG_INFPEOPLE, "Información para la ciudadanía", "Gestiona información para la ciudadanía.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-INFPEOPLE")
            Container(SRV_EMG_INFHISTORY, "Información histórica", "Gestión de eventos, amenazas e información histórica.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-INFHISTORY")
            Container(SRV_EMG_KNOWLEDGE, "Información de Conocimiento", "Almacena información de gestión de conocimiento.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-KNOWLEDGE")
            Container(SRV_EMG_RESOURCES, "Información de recursos de emergencia", "Gestiona recursos de emergencia.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-RESOURCES")
            Container(SRV_EMG_MONITOR, "Información de organismos de monitoreo", "Gestiona la información de los sistemas de monitoreo.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-MONITOR")
        }

        Container(SRV_EMG_SEARCH, "Servicio de búsqueda", "Ejecuta búsquedas de información.", $link="../containers.html#ITRENDCL-SIGRID-SRV-EMG-SEARCH")
        ContainerDb(DB_EMG, "BD emergencia", "Base de datos de información documental sobre emergencias.", $link="../containers.html#ITRENDCL-SIGRID-DB-EMG")
        ContainerDb(DB_EMG_FS, "Sistema de archivos", "Sistema de archivos.", $link="../containers.html#ITRENDCL-SIGRID-DB-EMG-FS")
    }

    Container_Boundary(DOM_ALERT, "Dominio de Creación de alertas", $link="../containers.html#ITRENDCL-SIGRID-DOM-ALERT") {
        Container(SRV_ALERT_CAP, "Servicio CAP", "Sistema de publicación de mensajes CAP.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ALERT-CAP")
        Container(SRV_ALERT_SIREN, "Creación de sirenas", "Sistema de sirenas.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ALERT-SIREN")
        Container(SRV_ALERT_SAE, "Creación de SAE", "Sistema de Alertas de Emergencias", $link="../containers.html#ITRENDCL-SIGRID-SRV-ALERT-SAE")
    }

    Container_Boundary(DOM_NOTIFY, "Dominio de Notificaciones", $link="../containers.html#ITRENDCL-SIGRID-DOM-NOTIFY") {
        Container(SRV_NOTIFY_ORCH, "Gestor de notificaciones", "Orquestador de la creación de notificaciones.", $link="../containers.html#ITRENDCL-SIGRID-SRV-NOTIFY-ORCH")
        Container(SRV_NOTIFY_CHANNELS, "Gestor de canales", "Gestión de canales de comunicación.", $link="../containers.html#ITRENDCL-SIGRID-SRV-NOTIFY-CHANNELS")
        Container(SRV_NOTIFY_SUBS, "Servicio de suscripciones", "Gestión de suscriptores.", $link="../containers.html#ITRENDCL-SIGRID-SRV-NOTIFY-SUBS")
        ContainerDb(DB_NOTIFY, "BD Notificaciones", "Base de datos de información de notificaciones enviadas.", $link="../containers.html#ITRENDCL-SIGRID-DB-NOTIFY")
    }

    Container_Boundary(DOM_COM, "Dominio de Comunicación interna", $link="../containers.html#ITRENDCL-SIGRID-DOM-COM") {
        ContainerDb(DB_COM_BROKER, "Message broker", "Bus de eventos del sistema.", $link="../containers.html#ITRENDCL-SIGRID-DB-COM-BROKER")
    }
}

Rel(SIGRIDCLIENTS, SRV_EC_API, "usa", "API")
Rel(SIGRIDCLIENTS, SRV_UM_IDENT, "usa", "API")
Rel(SRV_EC_API, SRV_EMG_ORCH, "expone", "API")
Rel(SRV_EC_API, SRV_EMG_SEARCH, "expone", "API")
Rel(SRV_EC_API, DOM_ALERT, "expone", "API")

Rel(SRV_UM_IDENT, EXTERNAL_AUTH, "federa identidades", "API")
Rel(SRV_UM_IDENT, SRV_UM_PERM, "usa", "API")

Rel(SRV_ALERT_CAP, GOOGLE_CAP, "usa", "API")
Rel(SRV_ALERT_SAE, SAE, "integra con", "API")
Rel(SRV_ALERT_SIREN, SIRENAS, "controla", "API")
Rel(DOM_ALERT, EMA, "integra con", "API")

Rel(SRV_EMG_ORCH, MONITORING_SYSTEMS, "recibe información de", "API")
Rel(SRV_EMG_MONITOR, SIDCO, "monitorea", "API")
Rel(SRV_EMG_MONITOR, SHOA, "monitorea", "API")
Rel(SRV_EMG_MONITOR, CSN, "monitorea", "API")
Rel(SRV_EMG_MONITOR, BOMBEROS, "monitorea", "API")
Rel(SRV_EMG_MONITOR, SERNAGEOMIN, "monitorea", "API")
Rel(SRV_EMG_MONITOR, DMC, "monitorea", "API")

Rel(SRV_EMG_ORCH, SRV_EMG_INFNET, "expone", "API")
Rel(SRV_EMG_ORCH, SRV_EMG_INFPEOPLE, "expone", "API")
Rel(SRV_EMG_ORCH, SRV_EMG_INFHISTORY, "expone", "API")
Rel(SRV_EMG_ORCH, SRV_EMG_KNOWLEDGE, "expone", "API")
Rel(SRV_EMG_ORCH, SRV_EMG_RESOURCES, "expone", "API")
Rel(SRV_EMG_ORCH, SRV_EMG_MONITOR, "expone", "API")
Rel(SRV_EMG_ORCH, DB_COM_BROKER, "publica")
Rel(DOM_EMG_APPS, SRV_EMG_DOCFMT, "usa", "API")
Rel(DOM_EMG_APPS, DB_EMG, "consulta/guarda")
Rel(DOM_EMG_APPS, DB_EMG_FS, "consulta/guarda")

Rel(DOM_ALERT, DB_COM_BROKER, "consume")

Rel(SRV_NOTIFY_ORCH, SRV_NOTIFY_CHANNELS, "usa", "API")
Rel(SRV_NOTIFY_ORCH, SRV_NOTIFY_SUBS, "usa", "API")
Rel(SRV_NOTIFY_ORCH, DB_NOTIFY, "guarda")
Rel(SRV_NOTIFY_ORCH, DB_COM_BROKER, "consume")
Rel(SRV_NOTIFY_ORCH, EMAIL, "usa", "API")
Rel(SRV_NOTIFY_ORCH, PUSH, "usa", "API")

Rel(SRV_GOB_DQ, DB_GOB, "consulta/guarda")
Rel(SRV_GOB_LC, DB_GOB, "consulta/guarda")
Rel(SRV_GOB_PM, DB_GOB, "consulta/guarda")

SHOW_LEGEND()
@enduml