El modelo C4 es un enfoque de "zoom" para documentar arquitecturas de software, creado por Simon Brown. Proporciona diferentes niveles de abstracción para diferentes audiencias:
🔗 Más información: c4model.info
flowchart TD
%% === TÍTULO PRINCIPAL ===
Title[🏦 Sistema Bancario BP
Diagrama de Contexto - Arquitectura del Sistema]
%% === USUARIOS DEL SISTEMA ===
subgraph Users[👥 Usuarios del Sistema]
direction LR
U1[👤
Cliente Bancario
Realiza operaciones bancarias
vía web o app móvil]
U2[👨💼
Empleado del Banco
Gestiona cuentas y aprueba
transacciones]
U3[👨💻
Administrador
Gestiona y monitorea
la plataforma]
end
%% === SISTEMA PRINCIPAL ===
BP[🏦
Sistema Bancario BP
Plataforma bancaria digital completa
Gestión de cuentas, transferencias, pagos
y consultas en tiempo real]
%% === SISTEMAS EXTERNOS ORGANIZADOS ===
subgraph ExternalSystems[🔗 Sistemas Externos]
direction TB
subgraph Comms[📧 Comunicaciones]
E1[📧
Servicio de Email]
E2[📱
Proveedor SMS]
E3[🔔
Firebase FCM]
end
subgraph Payments[💳 Pagos e Identidad]
E4[💸
Red ACH]
E5[💳
Gateway de Pagos]
E6[🆔
Proveedor Identidad]
end
subgraph Infra[🛠️ Infraestructura]
E7[☁️
Almacenamiento Cloud]
E8[📊
Monitoreo]
end
end
%% === CONEXIONES CON ETIQUETAS ===
U1 -->|Realiza operaciones bancarias
Web & App Móvil
HTTPS/WSS| BP
U2 -->|Gestiona operaciones
Aprueba transacciones
HTTPS| BP
U3 -->|Administra y monitorea
el sistema
HTTPS/SSH| BP
BP -->|Envía notificaciones
por correo
SMTP/API REST| E1
BP -->|Envía mensajes SMS
y códigos OTP
API REST| E2
BP -->|Envía notificaciones
push móviles
FCM API| E3
BP -->|Procesa transferencias
interbancarias
ISO 8583/SWIFT| E4
BP -->|Procesa pagos
con tarjeta
API REST/Webhooks| E5
BP -->|Verifica identidad
de usuarios - KYC
API REST| E6
BP -->|Almacena documentos
y backups
S3 API| E7
BP -->|Envía métricas
y logs
Prometheus/Loki| E8
%% === ESTILOS CON COLORES PASTEL ===
classDef title fill:#FCE4EC,stroke:#C2185B,stroke-width:2px,rx:15,ry:15
classDef users fill:#E8F5E9,stroke:#4CAF50,stroke-width:2px,rx:12,ry:12
classDef mainSystem fill:#E3F2FD,stroke:#1976D2,stroke-width:2px,rx:12,ry:12
classDef external fill:#FFF3E0,stroke:#FF9800,stroke-width:2px,rx:10,ry:10
classDef comms fill:#F3E5F5,stroke:#9C27B0,stroke-width:1px,rx:8,ry:8
classDef payments fill:#E0F2F1,stroke:#00897B,stroke-width:1px,rx:8,ry:8
classDef infra fill:#FFEBEE,stroke:#D32F2F,stroke-width:1px,rx:8,ry:8
classDef userItem fill:#FFFFFF,stroke:#4CAF50,stroke-width:1px,rx:8,ry:8
classDef externalItem fill:#FFFFFF,stroke:#666666,stroke-width:1px,rx:6,ry:6
%% APLICAR ESTILOS ===
class Title title
class Users users
class BP mainSystem
class ExternalSystems external
class Comms comms
class Payments payments
class Infra infra
class U1,U2,U3 userItem
class E1,E2,E3,E4,E5,E6,E7,E8 externalItem
%% ESTILOS DE LÍNEAS ===
linkStyle 0,1,2 stroke:#4CAF50,stroke-width:2px
linkStyle 3,4,5 stroke:#9C27B0,stroke-width:1.5px
linkStyle 6,7,8 stroke:#00897B,stroke-width:1.5px
linkStyle 9,10 stroke:#D32F2F,stroke-width:1.5px
flowchart TD
%% === TÍTULO PRINCIPAL ===
Title[🏦 Sistema Bancario BP - Arquitectura de Contenedores
]
%% === USUARIOS ===
subgraph Users[👥 Usuarios]
direction LR
U1[👤
Cliente Bancario
Accede desde web o móvil]
U2[👨💼
Empleado Banco
Gestiona operaciones]
end
%% === APLICACIONES CLIENTE ===
subgraph ClientApps[📱 Aplicaciones Cliente]
direction LR
A1[📱
App Móvil
React Native
iOS/Android]
A2[🌐
App Web
React.js + Vite
SPA]
end
%% === API GATEWAY ===
GW[🔌
API Gateway
Kong/NGINX + Node.js
OAuth 2.0, Rate Limiting]
%% === MICROSERVICIOS ACTUALIZADOS ===
subgraph Microservices[⚙️ Microservicios]
direction TB
subgraph CoreBanking[💼 Servicios Bancarios Core]
M1[🔐
MS-Autenticación
Node.js + Passport.js
:3005 REST]
M2[👤
MS-Datos-Cliente
Node.js + GraphQL
:3004 GraphQL]
M3[💸
MS-Pagos-Internos
Node.js + GraphQL
:3002 GraphQL]
M4[🌐
MS-Pagos-Interbancarios
Node.js + GraphQL
:3003 GraphQL + SAGA]
end
subgraph DataServices[📊 Servicios de Datos]
M5[📈
MS-Históricos
Node.js + GraphQL
:3001 GraphQL CQRS]
M6[📝
MS-Auditoría
Node.js + GraphQL
:3006 GraphQL + Worker Pool]
M7[📢
MS-Notificaciones
Node.js + Bull Queue
:3007 GraphQL + Workers]
M8[📁
MS-Archivos
Node.js + Multer
:3008 REST]
end
end
%% === BASE DE DATOS ===
subgraph Databases[🗄️ Bases de Datos]
direction LR
DB1[🐘
PostgreSQL
Primary
Cuentas, Transacciones]
DB2[🐘
PostgreSQL
Replicas
Lecturas, Consultas]
DB3[🍃
MongoDB
Documentos, Históricos, Logs]
DB4[🔴
Redis Cluster
Sesiones, Cache, Temporal]
DB5[☁️
Cloud Storage
Archivos, Documentos]
end
%% === INFRAESTRUCTURA ===
subgraph Infrastructure[🔄 Infraestructura]
direction LR
I1[📬
Apache Kafka
Event Streaming, CQRS]
I2[🔑
HashiCorp Vault
Secrets, API Keys]
I3[⚡
Bull Queue
Jobs, Workers]
end
%% === SISTEMAS EXTERNOS ===
subgraph External[🌍 Sistemas Externos]
direction LR
E1[💳
Red ACH
Transferencias Interbancarias]
E2[🔔
Firebase
Push Notifications]
E3[📧
Email/SMS
SendGrid, Twilio]
end
%% === CONEXIONES PRINCIPALES ===
Users --> ClientApps
ClientApps -->|HTTPS/REST/GraphQL| GW
GW -->|GraphQL Federation| Microservices
%% === CONEXIONES API GATEWAY A MICROSERVICIOS ===
GW -->|Autentica
REST/gRPC| M1
GW -->|Consulta datos
GraphQL| M2
GW -->|Transferencias internas
GraphQL| M3
GW -->|Transferencias externas
GraphQL| M4
GW -->|Consulta históricos
GraphQL| M5
GW -->|Registro auditoría
GraphQL| M6
GW -->|Envía notificaciones
GraphQL| M7
GW -->|Gestiona archivos
REST| M8
%% === CONEXIONES MICROSERVICIOS A DATOS ===
M1 -->|Usuarios/Sesiones
SQL/TLS| DB1
M1 -->|Cache sesiones
Redis Protocol| DB4
M1 -->|Secrets
HTTPS/API| I2
M2 -->|Datos cliente
SQL/TLS| DB1
M2 -->|Cache consultas
Redis Protocol| DB4
M3 -->|Transacciones
SQL/TLS| DB1
M3 -->|Eventos pagos
Kafka Protocol| I1
M4 -->|Transacciones
SQL/TLS| DB1
M4 -->|SAGA Orchestration
Kafka Protocol| I1
M4 -->|Transferencias ACH
ISO 8583| E1
M5 -->|Datos lectura
SQL/TLS| DB2
M5 -->|Históricos
MongoDB Protocol| DB3
M6 -->|Consume eventos
Kafka Protocol| I1
M6 -->|Logs auditoría
MongoDB Protocol| DB3
M7 -->|Jobs notificaciones
Bull Queue| I3
M7 -->|Push notifications
FCM API| E2
M7 -->|Email/SMS
HTTPS/API| E3
M8 -->|Metadatos
MongoDB Protocol| DB3
M8 -->|Archivos
Cloud Storage API| DB5
M8 -->|Cache archivos
Redis Protocol| DB4
%% === ESTILOS CON COLORES PASTEL ===
classDef title fill:#FCE4EC,stroke:#C2185B,stroke-width:2px,rx:15,ry:15
classDef users fill:#E8F5E9,stroke:#4CAF50,stroke-width:2px,rx:12,ry:12
classDef clientApps fill:#E3F2FD,stroke:#1976D2,stroke-width:2px,rx:12,ry:12
classDef gateway fill:#FFF3E0,stroke:#FF9800,stroke-width:2px,rx:12,ry:12
classDef microservices fill:#F3E5F5,stroke:#9C27B0,stroke-width:2px,rx:12,ry:12
classDef coreBanking fill:#E0F2F1,stroke:#00897B,stroke-width:1px,rx:10,ry:10
classDef dataServices fill:#FFEBEE,stroke:#D32F2F,stroke-width:1px,rx:10,ry:10
classDef databases fill:#FFF9C4,stroke:#FBC02D,stroke-width:2px,rx:12,ry:12
classDef infrastructure fill:#E8EAF6,stroke:#3F51B5,stroke-width:2px,rx:12,ry:12
classDef external fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px,rx:12,ry:12
classDef item fill:#FFFFFF,stroke:#666666,stroke-width:1px,rx:8,ry:8
%% APLICAR ESTILOS ===
class Title title
class Users users
class ClientApps clientApps
class GW gateway
class Microservices microservices
class CoreBanking coreBanking
class DataServices dataServices
class Databases databases
class Infrastructure infrastructure
class External external
class U1,U2,A1,A2,M1,M2,M3,M4,M5,M6,M7,M8,DB1,DB2,DB3,DB4,DB5,I1,I2,I3,E1,E2,E3 item
flowchart TD
%% === TÍTULO PRINCIPAL ===
Title[🔧 MS-Pagos - Diagrama de Componentes
Microservicio de Procesamiento de Pagos con Event Sourcing]
%% === API GATEWAY ===
GW[🌐
API Gateway
Apollo Gateway
GraphQL Federation :8080]
%% === MICROSERVICIO PRINCIPAL - ARRIBA ===
subgraph MSPagos[💸 MS-Pagos - Microservicio de Pagos]
direction TB
subgraph EntryLayer[🔐 Capa de Entrada & Seguridad]
C1[🛡️
Payment API Controller
Express.js REST
Valida JWT, Rate Limiting]
C2[🔑
Auth Middleware
JWT Validator
Verifica OAuth 2.0, Claims]
C12[🔒
Encryption Service
AES-256-GCM
Cifrado datos sensibles]
end
subgraph BusinessLayer[💼 Lógica de Negocio Core]
C3[⚙️
Transfer Service
Business Logic
Orquesta proceso transferencia]
C4[✅
Validation Component
Joi/Zod Schemas
Valida montos, límites diarios]
C5[🕵️
Fraud Detection
ML Model + Rules Engine
Scoring riesgo, bloqueo automático]
C6[🔄
Saga Orchestrator
Saga Pattern
Coordina transacciones distribuidas]
end
subgraph DataLayer[💾 Capa de Datos & Eventos]
C9[💾
Transaction Repository
TypeORM/Sequelize
Acceso datos transaccionales]
C13[📨
Event Box
Outbox Pattern
Garantiza entrega eventos atómica]
C14[🔄
CQRS Projector
Projection Handler
Sincroniza datos lectura]
C10[📢
Event Publisher
Kafka Producer
Publica eventos de dominio]
C11[📝
Audit Logger
Winston/Pino
Registro compliance, auditoría]
end
subgraph InfrastructureLayer[🛠️ Infraestructura & Comunicación]
C7[⚡
Circuit Breaker
Opossum/Hystrix
Fail-fast, fallback logic]
C8[🌐
ACH Network Client
ISO 8583 Protocol
Cliente red interbancaria]
end
end
%% === SISTEMAS EXTERNOS - HORIZONTALMENTE POR DEBAJO ===
E2[🐘
PostgreSQL
PostgreSQL 15
Base transaccional ACID]
E6[🍃
MongoDB
MongoDB 6
Consultas optimizadas]
E3[🔴
Redis
Redis 7 Cluster
Cache, locks distribuidos]
E4[📬
Kafka
Kafka 3.x + Zookeeper
Event streaming, mensajería]
E1[💳
Red ACH
Sistema interbancario
Transferencias externas]
E5[🔑
Vault
HashiCorp Vault
Gestión secrets, certificados]
%% === CONEXIONES PRINCIPALES ===
GW -->|Envía requests
HTTPS/REST/GraphQL| C1
%% === CONEXIONES CAPA DE ENTRADA ===
C1 -->|Valida autenticación
In-Memory| C2
C1 -->|Procesa transferencia
Function Call| C3
%% === CONEXIONES LÓGICA DE NEGOCIO ===
C3 -->|Valida datos entrada
Function Call| C4
C3 -->|Verifica patrones fraude
Function Call| C5
C3 -->|Inicia orquestación saga
Function Call| C6
C3 -->|Registra operación auditoría
Function Call| C11
%% === CONEXIONES SAGA ORCHESTRATOR ===
C6 -->|Persiste transacción
SQL| C9
C6 -->|Llama servicio externo
Function Call| C7
C6 -->|Publica eventos negocio
Function Call| C10
C6 -->|Cifra datos sensibles
Function Call| C12
%% === PATRÓN CQRS - FLUJO ESCRITURA ===
C9 -->|Evento outbox transaccional
SQL Transaction| C13
%% === CONEXIONES INFRAESTRUCTURA ===
C7 -->|Ejecuta transferencia protegida
Function Call| C8
%% === CONEXIONES A SISTEMAS EXTERNOS ===
C2 -->|Obtiene public keys
HTTPS/TLS 1.3| E5
C9 -->|Guarda transacción
SQL/TLS 1.3| E2
C9 -->|Usa locks distribuidos
Redis Protocol| E3
C13 -->|Publica evento consistente
Kafka Protocol/SASL| E4
E4 -->|Consume eventos
Kafka Consumer| C14
C14 -->|Sincroniza datos lectura
Bulk Operations| E6
C14 -->|Actualiza cache consultas
Redis Protocol| E3
C8 -->|Envía transacción segura
ISO 8583/TLS| E1
C10 -->|Publica mensaje eventos
Kafka Protocol/SASL| E4
C11 -->|Envía log auditoría
Kafka Protocol| E4
C12 -->|Obtiene keys cifrado
HTTPS/TLS 1.3| E5
C5 -->|Lee scoring cache
Redis Protocol| E3
%% === ESTILOS CON COLORES PASTEL ===
classDef title fill:#FCE4EC,stroke:#C2185B,stroke-width:2px,rx:15,ry:15
classDef gateway fill:#E3F2FD,stroke:#1976D2,stroke-width:2px,rx:12,ry:12
classDef msPagos fill:#F3E5F5,stroke:#9C27B0,stroke-width:2px,rx:12,ry:12
classDef entryLayer fill:#E8F5E9,stroke:#4CAF50,stroke-width:1px,rx:10,ry:10
classDef businessLayer fill:#FFF3E0,stroke:#FF9800,stroke-width:1px,rx:10,ry:10
classDef dataLayer fill:#E0F2F1,stroke:#00897B,stroke-width:1px,rx:10,ry:10
classDef infrastructureLayer fill:#FFEBEE,stroke:#D32F2F,stroke-width:1px,rx:10,ry:10
classDef externalSystems fill:#FFF9C4,stroke:#FBC02D,stroke-width:2px,rx:8,ry:8
classDef component fill:#FFFFFF,stroke:#666666,stroke-width:1px,rx:8,ry:8
%% APLICAR ESTILOS ===
class Title title
class GW gateway
class MSPagos msPagos
class EntryLayer entryLayer
class BusinessLayer businessLayer
class DataLayer dataLayer
class InfrastructureLayer infrastructureLayer
class C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 component
class E1,E2,E3,E4,E5,E6 externalSystems
%% ESTILOS DE LÍNEAS ===
linkStyle 0 stroke:#1976D2,stroke-width:2px
linkStyle 1,2 stroke:#4CAF50,stroke-width:1.5px
linkStyle 3,4,5,6 stroke:#FF9800,stroke-width:1.5px
linkStyle 7,8,9,10 stroke:#00897B,stroke-width:1.5px
linkStyle 11 stroke:#4CAF50,stroke-width:2px
linkStyle 12 stroke:#D32F2F,stroke-width:1.5px
%% Conexiones a sistemas externos
linkStyle 13 stroke:#9C27B0,stroke-width:1.5px
linkStyle 14 stroke:#0288D1,stroke-width:1.5px
linkStyle 15 stroke:#FBC02D,stroke-width:1.5px
linkStyle 16 stroke:#7B1FA2,stroke-width:1.5px
linkStyle 17,18 stroke:#1976D2,stroke-width:1.5px
linkStyle 19 stroke:#E64A19,stroke-width:1.5px
linkStyle 20,21 stroke:#7B1FA2,stroke-width:1.5px
linkStyle 22 stroke:#9C27B0,stroke-width:1.5px
linkStyle 23 stroke:#FBC02D,stroke-width:1.5px
Los diagramas C4 presentados siguen la metodología oficial de Simon Brown, proporcionando diferentes niveles de zoom para diferentes audiencias:
| Nivel | Diagrama | Audiencia | Enfoque |
|---|---|---|---|
| C4 Level 1 | Contexto | Stakeholders, Gerencia | Sistema en su entorno, actores, sistemas externos |
| C4 Level 2 | Contenedores | Arquitectos, Tech Leads | Apps, servicios, bases de datos, tecnologías |
| C4 Level 3 | Componentes | Desarrolladores | Componentes internos, patrones, seguridad |