P05: Gestión de Información Territorial

@startuml

scale 0.7

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

title Diagrama de Contenedores - P05: Gestión de Información Territorial


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_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")
            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")
            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") {
            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_PUB, "Publicación", "Publica información al *broker* de mensajes para ser comunicada a otros servicios.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-PUB")
            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_DISPATCH, "Despachador", "Envía información a OTM.", $link="../containers.html#ITRENDCL-SIGRID-SRV-INT-DISPATCH")
            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")
            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")
            }

    Container_Boundary(DOM_ENCRYPT, "Dominio de Encriptación y codificación", $link="../containers.html#ITRENDCL-SIGRID-DOM-ENCRYPT") {
            Container(SRV_ENCRYPT_KMS, "KMS", "Servicio de gestión de claves.", $link="../containers.html#ITRENDCL-SIGRID-SRV-ENCRYPT-KMS")
            }

    Container_Boundary(DOM_AUDIT, "Dominio de Auditoría", $link="../containers.html#ITRENDCL-SIGRID-DOM-AUDIT") {
            Container(SRV_AUDIT_PROC, "Procesador de información", "Recibe acciones del sistema para almacenarlas.", $link="../containers.html#ITRENDCL-SIGRID-SRV-AUDIT-PROC")
            ContainerDb(DB_AUDIT_TRACE, "Auditoría de trazabilidad", "Almacena la información sobre acciones de los usuarios.", $link="../containers.html#ITRENDCL-SIGRID-DB-AUDIT-TRACE")
            }


}

Rel(SRV_GIS_WEBMAPS,DB_GIS, "consulta/guarda")
    Rel(SRV_GIS_WEBMAPS,DB_COM_BROKER, "consume")
    Rel(SRV_INT_PUB,SRV_ENCRYPT_KMS, "usa", "API")
    Rel(SRV_INT_PUB,DB_COM_BROKER, "publica")
    Rel(DB_ANALYSIS,SRV_ANALYSIS_RESOURCES, "gatilla", "API")
    Rel(DB_ANALYSIS,SRV_ANALYSIS_STATS, "gatilla", "API")

    Rel(SRV_INT_CONV,SRV_INT_DISPATCH, "gatilla", "API")


    Rel(SRV_INT_INGESTQUEUE,SRV_INT_PIPELINE, "gatilla", "API")
    Rel(SRV_INT_PUBQUEUE,SRV_ENCRYPT_KMS, "usa", "API")
    Rel(SRV_INT_PUBQUEUE,SRV_INT_CONV, "gatilla", "API")
    Rel(SRV_INT_PUBQUEUE,DB_COM_BROKER, "consume")
    Rel(SRV_AUDIT_PROC,DB_AUDIT_TRACE, "guarda")

    Rel(SRV_ANALYSIS_INGEST,SRV_ANALYSIS_ETL, "gatilla", "API")
    Rel(SRV_ANALYSIS_INGEST,DB_COM_BROKER, "consume")
    Rel(SRV_GIS_BOUNDS,DB_GIS, "consulta/guarda")



    Rel(SRV_ANALYSIS_ETL,DB_ANALYSIS, "guarda")

    Rel(SRV_INT_PIPELINE,SRV_INT_PUB, "gatilla", "API")


SHOW_LEGEND()
@enduml