P04: COGRID

@startuml

scale 0.7

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

title Diagrama de Contenedores - P04: COGRID (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(SYSGROUP, "Sistemas de monitoreo o Sistemas de Organizaciones pertenecientes al SIGRID", "Sistemas propios de cada organización que envían información al SIGRID.", $link="../systems.html#ITRENDCL-SIGRID-SYS-SYSGROUP")

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(GIS_SYSTEMS, "Sistemas GIS Externos") {
    System_Ext(VISOR_CHILE, "Visor ChilePreparado", "Visor ChilePreparado [ArcGIS Online] para información geográfica sobre amenazas, vulnerabilidad y riesgo", $link="../systems.html#ITRENDCL-SIGRID-SYS-ARC_GIS_ONLINE")
    System_Ext(VISORGRD, "VisorGRD", "VisorGRD [ArcGIS Platform] para información territorial", $link="../systems.html#ITRENDCL-SIGRID-SYS-ARC_GIS_PLATFORM")
    System_Ext(GEOMOP, "GEOMOP", "Portal de la Infraestructura de datos Espaciales del Ministerio (IDEMOP)", $link="../systems.html#ITRENDCL-SIGRID-SYS-GEOMOP")
    System_Ext(PORTAL_GEOMIN, "Portal GEOMIN", "Catálogo Nacional de Información Geológica y Minera (ArcGIS)", $link="../systems.html#ITRENDCL-SIGRID-SYS-PORTAL_GEOMIN")
}

Boundary(MONITORING_SYSTEMS, "Sistemas de Monitoreo") {
    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_Ext(DGA, "DGA", "Sitio Web 'Servicios de Información' (28/02/2025)", $link="../systems.html#ITRENDCL-SIGRID-SYS-DGA")
    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(SERNAGEOMIN, "SERNAGEOMIN", "Sitio web de SERNAGEOMIN (28/02/2025)", $link="../systems.html#ITRENDCL-SIGRID-SYS-SERNAGEOMIN")
    System_Ext(SIDCO, "SIDCO", "Sistema de Información Digital para Control de Operaciones (SIDCO)", $link="../systems.html#ITRENDCL-SIGRID-SYS-SIDCO")
}

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_GIS, "Dominio de Información territorial", $link="../containers.html#ITRENDCL-SIGRID-DOM-GIS") {
        Container(SRV_GIS_BOUNDS, "Servicio de límites geográficos", "Servicio que disponibiliza límites geográficos de Chile.", $link="../containers.html#ITRENDCL-SIGRID-SRV-GIS-BOUNDS")
        Container(SRV_GIS_WEBMAPS, "Servidores de Mapas Web", "Servicio de gestión de información geográfica como *layers* y mapas usando el protocolo WMS.", $link="../containers.html#ITRENDCL-SIGRID-SRV-GIS-WEBMAPS")
        Container(SRV_GIS_INGEST, "Ingesta de Información territorial", "Servicio que almacena nueva información territorial.", $link="../containers.html#ITRENDCL-SIGRID-SRV-GIS-INGEST")
        ContainerDb(DB_GIS, "BD Espacial", "Base de datos capaz de indexar eficientemente información georeferenciada.", $link="../containers.html#ITRENDCL-SIGRID-DB-GIS")
    }

    Container_Boundary(DOM_ANALYSIS, "Dominio de Análisis de datos", $link="../containers.html#ITRENDCL-SIGRID-DOM-ANALYSIS") {
        Container(SRV_ANALYSIS_INGEST, "Ingesta de información", "Orquestador para el análisis de información.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ANALYSIS-INGEST")
        Container(SRV_ANALYSIS_ETL, "ETL", "Sistema de transformación de los datos para ser analizados.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ANALYSIS-ETL")
        Container(SRV_ANALYSIS_RESOURCES, "Análisis de recursos de emergencia", "Análisis de recursos de emergencia.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ANALYSIS-RESOURCES")
        Container(SRV_ANALYSIS_STATS, "Generación de estadísiticas", "Análisis de estadísticas internas de SIGRID.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ANALYSIS-STATS")
        Container(SRV_ANALYSIS_OTHER, "Otros posibles análisis", "Anlálsis utilizando algoritmos de inteligencia artificial, *data lake* entre otros.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ANALYSIS-OTHER")
        ContainerDb(DB_ANALYSIS, "BD Analítica", "Base de datos que almacena los resultados de los análisis de la información del SIGRID.", $link="../containers.html#ITRENDCL-SIGRID-DB-ANALYSIS")
    }

    Container_Boundary(DOM_INT, "Dominio de Integración", $link="../containers.html#ITRENDCL-SIGRID-DOM-INT") {
        ContainerQueue(SRV_INT_INGESTQUEUE, "Cola de ingesta", "Recibe la información de los sistemas de monitoreo usando el formato EDXL encriptado.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-INGESTQUEUE")
        Container(SRV_INT_DISPATCH, "Despachador", "Envía información a OTM.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-DISPATCH")
        Container(SRV_INT_PIPELINE, "Pipeline EDXL", "Transforma mensajes EDXL a mensajes del *broker* para ser distribuídos en el SIGRID.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-PIPELINE")
        Container(SRV_INT_CONV, "Transformador EDXL", "Transforma información del sistema a EDXL para ser comunicado.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-CONV")
        Container(SRV_INT_PUB, "Publicación", "Publica información al *broker* de mensajes para ser comunicada a otros servicios.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-PUB")
        ContainerQueue(SRV_INT_PUBQUEUE, "Cola de publicación", "Recibe información para ser enviada al OTM.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-PUBQUEUE")
    }

    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_GIS_BOUNDS, "expone", "API")
Rel(SRV_EC_API, SRV_ANALYSIS_INGEST, "expone", "API")

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

Rel(SYSGROUP, SRV_INT_INGESTQUEUE, "informa", "API")
Rel(SRV_INT_INGESTQUEUE, SRV_INT_PIPELINE, "gatilla", "API")
Rel(SRV_INT_PIPELINE, SRV_INT_PUB, "gatilla", "API")
Rel(SRV_INT_PUB, DB_COM_BROKER, "publica")
Rel(SRV_INT_PUBQUEUE, SRV_INT_CONV, "gatilla", "API")
Rel(SRV_INT_PUBQUEUE, DB_COM_BROKER, "consume")
Rel(SRV_INT_CONV, SRV_INT_DISPATCH, "gatilla", "API")
Rel(SRV_INT_DISPATCH, SYSGROUP, "informa", "API")

Rel(SRV_GIS_WEBMAPS, VISOR_CHILE, "integra con", "API")
Rel(SRV_GIS_WEBMAPS, VISORGRD, "integra con", "API")
Rel(SRV_GIS_INGEST, GIS_SYSTEMS, "obtiene datos de", "API")
Rel(SRV_GIS_BOUNDS, DB_GIS, "consulta/guarda")
Rel(SRV_GIS_WEBMAPS, DB_GIS, "consulta/guarda")
Rel(SRV_GIS_WEBMAPS, DB_COM_BROKER, "consume")
Rel(SRV_GIS_INGEST, DB_GIS, "consulta/guarda")
Rel(SRV_GIS_INGEST, DB_COM_BROKER, "consume")

Rel(SRV_ANALYSIS_INGEST, MONITORING_SYSTEMS, "obtiene datos de", "API")
Rel(SRV_ANALYSIS_INGEST, DMC, "obtiene datos meteorológicos", "API")
Rel(SRV_ANALYSIS_INGEST, DGA, "obtiene datos hidrológicos", "API")
Rel(SRV_ANALYSIS_INGEST, CSN, "obtiene datos sísmicos", "API")
Rel(SRV_ANALYSIS_INGEST, SERNAGEOMIN, "obtiene datos geológicos", "API")
Rel(SRV_ANALYSIS_INGEST, SIDCO, "obtiene datos de incendios", "API")
Rel(SRV_ANALYSIS_INGEST, SRV_ANALYSIS_ETL, "gatilla", "API")
Rel(SRV_ANALYSIS_INGEST, DB_COM_BROKER, "consume")
Rel(SRV_ANALYSIS_ETL, DB_ANALYSIS, "guarda")
Rel(DB_ANALYSIS, SRV_ANALYSIS_RESOURCES, "gatilla", "API")
Rel(DB_ANALYSIS, SRV_ANALYSIS_STATS, "gatilla", "API")
Rel(DB_ANALYSIS, SRV_ANALYSIS_OTHER, "gatilla", "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