workspace "Divisa Whitelabel Factoring Platform" "Plataforma de factoring white‑label donde cada fondeador tiene su propia instancia con branding" { model { // Personas provider = person "Proveedor" "Carga CUFE y ofrece facturas para financiamiento" funder = person "Fondeador" "Financia facturas a través de su portal white‑label" adminUser = person "Administrador" "Administra instancias, usuarios y configuración de la plataforma" // Sistemas externos obligatorios dian = softwareSystem "DIAN" "Autoridad tributaria colombiana que valida CUFE y eventos RADIAN" radian = softwareSystem "RADIAN" "Sistema que rastrea la propiedad y los endosos de facturas electrónicamente" erp = softwareSystem "Funder ERP/Core Banking" "Sistemas de los fondeadores para conciliación y contabilidad" // Sistema principal divisa = softwareSystem "Divisa Platform" "Plataforma central de factoring white‑label desplegada íntegramente en Google Cloud Platform" { // Contenedores (NestJS + CQRS) portalTemplate = container "Funder Portal (Plantilla)" "Interfaz web/móvil white‑label construida en Flutter y desplegada por fondeador" "Flutter Web + Flutter Mobile" apiGateway = container "API Gateway" "Punto de entrada REST para proveedores y fondeadores" "NestJS (REST)" authService = container "Auth Service" "Servicio de autenticación, emisión y validación de JWT multi‑instancia" "NestJS (CQRS)" factoringService = container "Factoring Service" "Carga/validación de facturas, cálculo de descuento y endosos" "NestJS (CQRS)" settlementService = container "Settlement Service" "Liquidación de facturas y generación de CxC/CxP" "NestJS (CQRS)" reportingService = container "Reporting Service" "Dashboards y reportes exportables" "NestJS (CQRS)" redisBroker = container "Redis Broker" "Bus de eventos y colas" "GCP Memorystore (Redis)" postgresDb = container "PostgreSQL DB" "Persistencia de datos multi‑tenant" "Cloud SQL for PostgreSQL" storage = container "Object Storage" "Almacén de documentos y adjuntos" "GCP Cloud Storage" monitoring = container "Monitoring" "Trazabilidad, métricas y logs" "GCP Cloud Monitoring & Logging" // Relaciones internas portalTemplate -> apiGateway "Consume" "HTTPS/JSON" apiGateway -> authService "Validación JWT" "HTTPS/JSON" apiGateway -> factoringService "Orquesta operaciones de factoring" "HTTP/JSON" apiGateway -> reportingService "Solicita reportes" "HTTPS/JSON" // CQRS/Event‑Driven factoringService -> redisBroker "Publica eventos de factoring" "Redis Streams" settlementService -> redisBroker "Escucha eventos de factoring" "Redis Streams" reportingService -> redisBroker "Escucha eventos de dominio" "Redis Streams" // Persistencia factoringService -> postgresDb "Lectura/Escritura" "TypeORM" settlementService -> postgresDb "Lectura/Escritura" "TypeORM" reportingService -> postgresDb "Lectura" "TypeORM" // Integraciones externas factoringService -> dian "Valida CUFE" "REST/JSON" factoringService -> radian "Registra endosos" "REST/JSON" settlementService -> erp "Envía asientos contables" "REST/JSON" settlementService -> storage "Guarda comprobantes" "S3 API compatible" reportingService -> storage "Lee archivos" "S3 API compatible" // Observabilidad portalTemplate -> monitoring "Envía logs" factoringService -> monitoring "Envía logs" settlementService -> monitoring "Envía logs" reportingService -> monitoring "Envía logs" apiGateway -> monitoring "Envía logs" } // Relaciones externas provider -> portalTemplate "Ofrece facturas y consulta estado" "HTTPS" funder -> portalTemplate "Gestiona sus operaciones" "HTTPS" adminUser -> divisa "Gestiona configuración global" "HTTPS" } views { systemContext divisa { include * autolayout lr title "Divisa – System Context" } container divisa { include * autolayout lr title "Divisa – Container View (NestJS + CQRS)" } styles { element "Person" { shape "Person" background "#0085C3" color "#ffffff" } element "Software System" { background "#1168bd" color "#ffffff" } element "Container" { background "#438dd5" color "#ffffff" } element "Container:Database" { shape cylinder } relationship "*" { color "#707070" } } theme default } }