Modelos de Arquitectura - JuanHerreraP/Proyecto-MISO-Solventa-Grupo-11 GitHub Wiki
1. Vista funcional general
Descripción
La vista funcional general muestra cómo se divide Solventa en componentes y cómo estos colaboran para atender el portal web, la aplicación Android y los sistemas de socios.
Los tres canales ingresan mediante un API Gateway. Desde allí, las solicitudes se dirigen al BFF Web, al BFF Móvil o al componente de Distribución y Socios. Estos componentes utilizan los mismos servicios de dominio para evitar duplicar las reglas de cotización, perfilamiento, suscripción, pólizas, pagos y siniestros.
Diagrama
flowchart TD
subgraph Canales["Canales"]
Web["Portal Web"]
Movil["App Móvil (cámara, GPS, biometría, modo offline)"]
Socios["Sistemas de socios (embedded)"]
end
subgraph Gateway["API y Ruteo"]
ApiGW["API Gateway (auth, rate limiting, scopes)"]
BFF_Web["BFF Web"]
BFF_Movil["BFF Móvil"]
end
subgraph Core["Servicios de Dominio"]
MS_Auth["Identidad, KYC y Consentimiento"]
MS_Risk["Perfilamiento de Riesgo"]
MS_Rating["Cotización y Precio"]
MS_Under["Suscripción"]
MS_Policy["Emisión y Ciclo de Vida"]
MS_Pay["Cobros y Pagos"]
MS_Claims["Siniestros"]
MS_Partners["Distribución y Socios"]
end
EventBus["Event Bus"]
subgraph Adaptadores["Adaptadores (aislamiento de terceros)"]
Ad_OF["Adaptador Open Finance"]
Ad_OD["Adaptador Open Data"]
Ad_KYC["Adaptador KYC / AML"]
Ad_Pay["Adaptador Pagos"]
Ad_Sign["Adaptador Firma Electrónica"]
Ad_Tele["Adaptador Telemetría"]
end
subgraph Externos["Proveedores Externos"]
Ext_OF["Open Finance"]
Ext_OD["Open Data"]
Ext_KYC["Proveedor KYC / AML"]
Ext_Pay["Pasarela de Pagos"]
Ext_Sign["Firma Electrónica"]
Ext_Tele["Telemetría / IoT"]
end
%% Conectores Capa 1 a Capa 2
Web -->|HTTPS / REST| ApiGW
Movil -->|HTTPS / REST| ApiGW
Socios -->|HTTPS / REST| ApiGW
%% Conectores Internos de Capa 2
ApiGW -->|Filtro & Enrutamiento Seguro| BFF_Web
ApiGW -->|Filtro & Enrutamiento Seguro| BFF_Movil
%% Flujo de Control: BFF Web hacia el Core
BFF_Web -->|1. Solicitar Emisión| MS_Policy
BFF_Web -->|2. Evaluar Viabilidad| MS_Under
BFF_Web -->|3. Consultar Tarifas| MS_Rating
BFF_Web -->|4. Sincronizar Alianzas| MS_Partners
%% Flujo de Control: BFF Móvil hacia el Core
BFF_Movil -->|1. Reportar Reclamación| MS_Claims
BFF_Movil -->|2. Autenticación Biométrica| MS_Auth
BFF_Movil -->|3. Consultar Cotización| MS_Rating
BFF_Movil -->|4. Descargar Certificados| MS_Policy
%% Flujo de Control Interno del Core transaccional
MS_Partners -->|Cargar Parámetros del Socio| MS_Rating
MS_Risk -->|Suministrar Perfil para Tarifación| MS_Rating
MS_Rating -->|Enviar Prima Calculada| MS_Under
MS_Under -->|Aprobar Riesgo Técnico| MS_Policy
MS_Policy -->|Gatillar Cobro de Cobertura| MS_Pay
MS_Claims -->|Dispersar Pago de Indemnización| MS_Pay
%% Conexiones con el Event Bus (Siniestralidad Paramétrica)
MS_Claims -.->|Publicar evento paramétrico asíncrono| EventBus
EventBus -.->|Disparar pago automático asíncrono| MS_Pay
%% Conexiones e Integración de Adaptadores del Core
MS_Risk -->|Verificar Historial Financiero| Ad_OF
MS_Rating -->|Enriquecer Análisis con Open Finance| Ad_OF
Ad_OF -->|Llamada API Externa HTTPS / TLS 1.3| Ext_OF
MS_Risk -->|Consultar Datos Públicos y Prediales| Ad_OD
Ad_OD -->|Consulta Abierta HTTPS| Ext_OD
MS_Auth -->|Validar Identidad en Onboarding| Ad_KYC
Ad_KYC -->|Onboarding Síncrono HTTPS| Ext_KYC
MS_Pay -->|Procesar Recaudo / Indemnizaciones| Ad_Pay
Ad_Pay -->|Pasarela Segura HTTPS / Estándar PCI-DSS| Ext_Pay
MS_Policy -->|Firmar Póliza Emitida| Ad_Sign
Ad_Sign -->|Firma Digital XML Criptográfica| Ext_Sign
MS_Claims -->|Monitorear Telemetría Satelital / Vuelos| Ad_Tele
Ad_Tele -->|Conexión Activa de Escucha / Webhook| Ext_Tele
%% Clases de Estilo de Colores Originales
classDef canal fill:#eef2f8,stroke:#5b6b8c,stroke-width:1.5px,color:#233047;
classDef gateway fill:#eaf1fb,stroke:#3866a3,stroke-width:1.5px,color:#173252;
classDef core fill:#eefaf1,stroke:#2f8f52,stroke-width:1.5px,color:#144d28;
classDef msg fill:#fdf3e7,stroke:#c98a2b,stroke-width:1.5px,color:#5c3d0e,stroke-dasharray: 4 3;
classDef adapter fill:#f3eefb,stroke:#7a52b8,stroke-width:1.5px,color:#3b1f66;
classDef ext fill:#f7f7f8,stroke:#8a8f98,stroke-width:1.5px,color:#3a3d42;
class Web,Movil,Socios canal;
class ApiGW,BFF_Web,BFF_Movil gateway;
class MS_Auth,MS_Risk,MS_Rating,MS_Under,MS_Policy,MS_Pay,MS_Claims,MS_Partners core;
class EventBus msg;
class Ad_OF,Ad_OD,Ad_KYC,Ad_Pay,Ad_Sign,Ad_Tele adapter;
class Ext_OF,Ext_OD,Ext_KYC,Ext_Pay,Ext_Sign,Ext_Tele ext;
Patrón 1: API Gateway para centralizar el acceso
Patrón 2: Backend for Frontend para web y Android
Patrón 3: Puertos y Adaptadores
2. Vista funcional móvil
Descripción
La vista funcional móvil muestra cómo se organizan los componentes de la aplicación Android y cómo se comunican con los servicios de Solventa.
La aplicación utiliza capacidades locales como cámara, GPS, biometría, notificaciones y almacenamiento offline. Las operaciones en línea ingresan mediante el API Gateway y son atendidas por el BFF Móvil.
Cuando no existe conexión, la información se guarda localmente y se sincroniza automáticamente al recuperar el acceso a internet.
flowchart TD
ApiGW["API Gateway"]
BFF_Movil["BFF Móvil"]
subgraph AppMovil["App Móvil Nativa (Android)"]
UI["Interfaz de Usuario"]
subgraph OnDevice["Capacidades locales (on-device)"]
Cam["Cámara"]
GPS["Geolocalización / GPS"]
Bio["Biometría (Face ID / Touch ID)"]
Push["Notificaciones push"]
end
DB_Off["Almacenamiento local (modo offline)"]
Sync["Sincronizador offline"]
end
%% Conexiones locales del dispositivo (On-Device)
UI -->|Llamada nativa de API del sistema operativo| OnDevice
UI -->|Lectura y escritura de datos locales síncrona| DB_Off
DB_Off -->|Lectura de transacciones encoladas| Sync
%% Flujo de comunicación transaccional y de sincronización hacia el backend
UI -->|Peticiones transaccionales síncronas HTTPS REST| ApiGW
Sync -.->|Envío diferido de transacciones por lotes HTTPS| ApiGW
ApiGW -->|Ruteo y propagación de token de seguridad JWT| BFF_Movil
%% Flujos de datos lógicos desde capacidades locales al backend
Cam -.->|Carga de imágenes multipart/form-data HTTPS| BFF_Movil
GPS -.->|Envío de coordenadas de ubicación geográfica HTTPS| BFF_Movil
Bio -.->|Envío de firma criptográfica y token de autenticación HTTPS| BFF_Movil
Push -.->|Suscripción de token de dispositivo y registro de alertas HTTPS| BFF_Movil
%% Definición de estilos originales
classDef canal fill:#eef2f8,stroke:#5b6b8c,stroke-width:1.5px,color:#233047;
classDef ondevice fill:#f4f7fb,stroke:#7c8aa8,stroke-width:1.5px,color:#2d3752;
classDef gateway fill:#eaf1fb,stroke:#3866a3,stroke-width:1.5px,color:#173252;
class UI,DB_Off,Sync canal;
class Cam,GPS,Bio,Push ondevice;
class ApiGW,BFF_Movil gateway;
Patrón 4: Offline-First con sincronización
3. Vista de despliegue
Descripción
La vista de despliegue muestra dónde se ejecutan los componentes de Solventa y cómo se comunican dentro de AWS.
El portal web y Android ingresan por el API Gateway. Los BFF y servicios de dominio se ejecutan en ECS Fargate, mientras PostgreSQL, Redis y SNS/SQS soportan persistencia, caché y mensajería.
La infraestructura se distribuye en varias zonas de disponibilidad para mejorar la continuidad y permitir el escalamiento automático.
flowchart TB
subgraph Canales["Canales y Dispositivos"]
Web["Portal Web (navegador)"]
subgraph Movil["App Móvil Nativa"]
SQLiteLoc[("Almacenamiento local (billetera offline)")]
BioLoc["Enclave seguro (biometría local)"]
end
end
subgraph VPC["VPC Solventa (región principal)"]
subgraph DMZ["Subred pública (DMZ)"]
ApiGW["API Gateway (OAuth 2.0, rate limiting)"]
ALB["Application Load Balancer"]
ApiGW -->|"Ruteo Privado HTTP / Puerto 80"| ALB
end
subgraph Computo["Cómputo — ECS Fargate (autoescalado)"]
BFF_Web["BFF Web"]
BFF_Movil["BFF Móvil"]
MS_Auth["Identidad, KYC y Consentimiento"]
MS_Risk["Perfilamiento de Riesgo"]
MS_Rating["Cotización y Precio"]
MS_Under["Suscripción"]
MS_Policy["Emisión y Ciclo de Vida"]
MS_Pay["Cobros y Pagos"]
MS_Claims["Siniestros"]
MS_Partners["Distribución y Socios"]
end
AZ_B["Zona de disponibilidad secundaria (réplica en caliente, failover automático)"]
subgraph Mensajeria["Mensajería (SNS + SQS)"]
SNS_Eventos["Amazon SNS (tópico de eventos de negocio)"]
SQS_Pagos["Amazon SQS (cola de pagos automáticos)"]
SQS_Telemetria["Amazon SQS (cola de eventos de telemetría)"]
SQS_Perfilamiento["Amazon SQS (cola de solicitudes de perfilamiento)"]
SNS_Eventos -.->|"fan-out (Integración interna AWS)"| SQS_Pagos
end
subgraph Datos["Persistencia y Caché"]
DB_Store[("Base de datos relacional (Aurora PostgreSQL, Multi-AZ)")]
RedisCache[("ElastiCache Redis (caché + idempotencia)")]
end
end
%% Conectores de Entrada (Canales a API Gateway)
Web -->|"HTTPS / TLS 1.3 / Puerto 443"| ApiGW
Movil -->|"HTTPS / TLS 1.3 / Puerto 443"| ApiGW
%% Conectores de Balanceo de Carga a BFFs (DMZ a Cómputo Privado)
ALB -->|"HTTP / REST / Puerto 80"| BFF_Web
ALB -->|"HTTP / REST / Puerto 80"| BFF_Movil
%% Alta Disponibilidad (Cómputo a AZ Secundaria)
Computo -.->|"replicación Multi-AZ (Sincronización AWS)"| AZ_B
%% Conectores de Mensajería Asíncrona (Event-Driven)
MS_Claims -.->|"publica evento paramétrico (HTTPS / AWS SDK)"| SNS_Eventos
SQS_Pagos -.->|"consume para pago automático (HTTPS Long Polling)"| MS_Pay
SQS_Telemetria -.->|"consume (HTTPS Long Polling)"| MS_Claims
MS_Rating -.->|"publica solicitud de perfilamiento (HTTPS / AWS SDK)"| SQS_Perfilamiento
SQS_Perfilamiento -.->|"consume solicitud (HTTPS Long Polling)"| MS_Risk
%% Conectores de Persistencia y Bases de Datos (Microservicios a Datos)
MS_Auth -->|"TCP / JDBC PostgreSQL / Puerto 5432"| DB_Store
MS_Under -->|"TCP / JDBC PostgreSQL / Puerto 5432"| DB_Store
MS_Policy -->|"TCP / JDBC PostgreSQL / Puerto 5432"| DB_Store
MS_Pay -->|"TCP / JDBC PostgreSQL / Puerto 5432"| DB_Store
MS_Claims -->|"TCP / JDBC PostgreSQL / Puerto 5432"| DB_Store
MS_Partners -->|"TCP / JDBC PostgreSQL / Puerto 5432"| DB_Store
%% Conectores de Caché y Baja Latencia
MS_Rating -->|"TCP / Protocolo Redis / Puerto 6379"| RedisCache
MS_Risk -->|"TCP / Protocolo Redis / Puerto 6379"| RedisCache
subgraph LambdaAdapters["Adaptadores Serverless (AWS Lambda)"]
Lambda_OF["Lambda — Open Finance"]
Lambda_OD["Lambda — Open Data"]
Lambda_KYC["Lambda — KYC / AML"]
Lambda_Pay["Lambda — Pasarelas de Pago"]
Lambda_Sign["Lambda — Firma Electrónica"]
end
%% Conector de Core a Adaptadores Serverless
Computo -->|"Invocación de Función Serverless (HTTPS / AWS SDK)"| LambdaAdapters
classDef canal fill:#eef2f8,stroke:#5b6b8c,stroke-width:1.5px,color:#233047;
classDef ondevice fill:#f4f7fb,stroke:#7c8aa8,stroke-width:1.5px,color:#2d3752;
classDef edge fill:#eaf7f6,stroke:#2f9e94,stroke-width:1.5px,color:#0d4a44;
classDef gateway fill:#eaf1fb,stroke:#3866a3,stroke-width:1.5px,color:#173252;
classDef compute fill:#eefaf1,stroke:#2f8f52,stroke-width:1.5px,color:#144d28;
classDef ha fill:#f2f2f2,stroke:#8a8f98,stroke-width:1.5px,color:#3a3d42,stroke-dasharray: 3 3;
classDef msg fill:#fdf3e7,stroke:#c98a2b,stroke-width:1.5px,color:#5c3d0e,stroke-dasharray: 4 3;
classDef data fill:#eaf6fb,stroke:#2b7aa8,stroke-width:1.5px,color:#123c52;
classDef adapter fill:#f3eefb,stroke:#7a52b8,stroke-width:1.5px,color:#3b1f66;
classDef ext fill:#f7f7f8,stroke:#8a8f98,stroke-width:1.5px,color:#3a3d42;
class Web canal;
class SQLiteLoc,BioLoc ondevice;
class Route53,WAF,CloudFront,S3Web edge;
class ApiGW,ALB gateway;
class BFF_Web,BFF_Movil,MS_Auth,MS_Risk,MS_Rating,MS_Under,MS_Policy,MS_Pay,MS_Claims,MS_Partners compute;
class AZ_B ha;
class SNS_Eventos,SQS_Pagos,SQS_Telemetria,SQS_Perfilamiento msg;
class DB_Store,RedisCache data;
class Lambda_OF,Lambda_OD,Lambda_KYC,Lambda_Pay,Lambda_Sign adapter;
class ExtOF,ExtOD,ExtKYC,ExtPay,ExtSign,ExtTelemetry ext;
Patrón 5: Mensajería asíncrona con consumidor idempotente
Patrón 6: Cache-Aside
Patrón 7: Redundancia Multi-AZ y Autoescalado
4. Vista de información
Descripción
La vista de información muestra las principales entidades de Solventa, sus atributos y las relaciones existentes entre clientes, cotizaciones, suscripciones, pólizas, pagos y siniestros.
El modelo permite identificar cómo se genera y relaciona la información durante el ciclo de vida del seguro, desde el consentimiento y perfilamiento del cliente hasta la emisión de la póliza y el pago de una indemnización.
También permite reconocer los datos sensibles que requieren cifrado, control de acceso, integridad y trazabilidad.
classDiagram
direction TB
class SocioDistribucion {
+String idSocio
+String nombre
+String categoria
+Double comisionPorcentaje
+Boolean activo
}
class ClienteAsegurado {
+String idCliente
+String nombreCompleto
+String tipoIdentificacion
+String numeroIdentificacion
+String correoElectronico
+String numeroCelular
+String hashHuellaBiometrica
+DateTime fechaRegistro
}
class ConsentimientoHabeasData {
+String idConsentimiento
+String idCliente
+DateTime fechaOtorgado
+DateTime fechaVencimiento
+String ambitosAutorizadosJson
+String estadoConsentimiento
}
class PerfilRiesgoIndividual {
+String idPerfil
+String idCliente
+String idConsentimiento
+String clasificacionRiesgo
+Integer puntajeRiesgo
+String señalesOpenFinanceCifradas
+String señalesOpenDataCifradas
+DateTime fechaCalculo
}
class Cotizacion {
+String idCotizacion
+String idSocio
+String idCliente
+String idPerfil
+Double primaCalculada
+String codigoRamo
+String coberturasSolicitadasJson
+DateTime fechaCreacion
+String estado
}
class Suscripcion {
+String idSuscripcion
+String idCotizacion
+String dictamenSuscripcion
+DateTime fechaEvaluacion
+String justificacionExplicable
+String evaluadorResponsable
}
class Poliza {
+String numeroPoliza
+String idSuscripcion
+DateTime fechaEmision
+DateTime inicioVigencia
+DateTime finVigencia
+String estadoContrato
}
class Endoso {
+String idEndoso
+String numeroPoliza
+DateTime fechaEndoso
+String tipoModificacion
+String coberturasAjustadasJson
+String estado
}
class Factura {
+String idFactura
+String numeroPoliza
+Double valorTotal
+DateTime fechaEmision
+DateTime fechaVencimiento
+String estadoPago
}
class Recaudo {
+String idRecaudo
+String idFactura
+Double valorPagado
+String claveIdempotencia
+String idTransaccionPasarela
+DateTime fechaPago
+String estadoTransaccion
}
class Siniestro {
+String radicadoSiniestro
+String numeroPoliza
+DateTime fechaOcurrencia
+String descripcionHechos
+Double estimacionDañosPreliminar
+String tipoSiniestro
+String estadoSiniestro
}
class EvidenciaDigital {
+String idEvidencia
+String radicadoSiniestro
+String urlArchivoSeguro
+String metadataGeoetiquetado
+DateTime fechaCarga
+String tipoArchivo
}
class EventoExterno {
+String idEvento
+String fuenteProveedor
+String tipoEvento
+Double parametroMedido
+Double umbralDefinido
+DateTime fechaEvento
+String numeroPolizaAfectada
}
class Indemnizacion {
+String idIndemnizacion
+String radicadoSiniestro
+Double valorIndemnizado
+String cuentaDestinoTokenizada
+String idTransaccionDispersora
+DateTime fechaDispersión
+String estadoPago
}
class Notificacion {
+String idNotificacion
+String idCliente
+String tipoCanal
+String contenidoCifrado
+DateTime fechaEnvio
+String estadoEntrega
}
%% Relaciones de Dominio Lineales y Limpias
SocioDistribucion "1" --> "*" Cotizacion : Origina
ClienteAsegurado "1" --> "*" ConsentimientoHabeasData : Otorga
ConsentimientoHabeasData "1" --> "1" PerfilRiesgoIndividual : Habilita
PerfilRiesgoIndividual "1" --> "1" Cotizacion : Alimenta
ClienteAsegurado "1" --> "*" Cotizacion : Solicita
Cotizacion "1" --> "0..1" Suscripcion : Se evalua en
Suscripcion "1" --> "1" Poliza : Emite
Poliza "1" --> "*" Endoso : Registra cambios con
Poliza "1" --> "*" Factura : Ampara cobros de
Factura "1" --> "*" Recaudo : Liquidada por
Poliza "1" --> "*" Siniestro : Registra reclamacion de
Siniestro "1" --> "*" EvidenciaDigital : Soportado por
Siniestro "1" --> "0..1" Indemnizacion : Genera pago de
EventoExterno "1" --> "0..1" Siniestro : Gatilla automaticamente
ClienteAsegurado "1" --> "*" Notificacion : Recibe