Vista General de Arquitectura
¿Qué es Imagy?
Imagy es una plataforma multi-tenant de servicios financieros digitales construida por Reimagine Tech LLC. Permite a empresas (B2B) operar servicios de crédito, firma digital, validación de identidad y gestión de clientes bajo un modelo SaaS con aislamiento por tenant y soporte para organizaciones internas.
Productos de la Plataforma
| Producto | Dominio | Descripción |
|---|---|---|
| Imagy Identity | Identity | Autenticación, tenants, organizaciones, sesiones, RBAC |
| ImagFlow | Flow | Motor de flujos genérico: diseño, ejecución, proveedores, reglas |
| ImagLend | Lending | Productos de crédito configurables, originación, cartera, cobranza |
| ImagSign | Sign | Firma digital y electrónica multi-proveedor |
| ImagID | Subject | Subject 360: perfil unificado, dispositivos, listas B/N, scoring |
| ImagGuard | Compliance | KYC, AML, PEP, listas restrictivas (futuro) |
Diagrama de Arquitectura de Alto Nivel
Capas de la Arquitectura
Capa de Clientes
| Cliente | Tecnología | Propósito |
|---|---|---|
| Imagy Console | React 19 + Vite + TypeScript | Panel administrativo unificado para todos los módulos y tenants |
| Apps Públicas | React 19 (standalone) | Wizard de crédito, ejecución de flujos (sin autenticación previa) |
| Apps Terceros | Cualquiera | Integración via API REST con JWT o API Key |
Capa Edge (API Gateway)
El Gateway es el único punto de entrada público. Basado en YARP (.NET), implementa:
- BFF Pattern: Tokens almacenados server-side, solo cookies httpOnly al browser
- JWT Validation: Valida firma, expiración, issuer de Keycloak
- JWT Propagation: Propaga el JWT completo a servicios internos
- Tenant Routing: Resuelve tenant desde subdominio, header o query param
- Rate Limiting: Por tenant y por endpoint
- CORS: Configurado por tenant (white-label)
Capa de Identity
| Componente | Responsabilidad |
|---|---|
| Keycloak | Identity Provider multi-realm, Organizations API, SSO, IdP brokering |
| Tenant Management | Control Plane: CRUD tenants, usuarios, roles, módulos, organizaciones, temas |
Capa de Servicios de Negocio
Cada servicio es un microservicio independiente con su propia base de datos:
| Servicio | BD | Comunicación |
|---|---|---|
| ImagFlow | imagy_flow | Publica eventos, expone API para ejecución |
| ImagLend | imagy_lending | Consume eventos de Flow, invoca Flow y Sign |
| ImagSign | imagy_sign | Invocado por Flow (como paso) y por Lend (firma de contratos) |
| ImagID | imagy_subject | Consume eventos de todos, expone API de consulta |
Capa Transversal
| Servicio | Responsabilidad |
|---|---|
| Provider Gateway | Adapter pattern para proveedores externos, failover, circuit breaker |
| Notifications | Envío multi-canal (SMS, email, webhook, push) |
| Audit | Trazabilidad inmutable de todas las acciones |
Capa de Infraestructura
| Componente | Servicio AWS | Propósito |
|---|---|---|
| PostgreSQL 16 | Aurora Serverless v2 | Persistencia (cluster compartido, BD por dominio) |
| Valkey 8 | ElastiCache Serverless | Cache, sesiones, datos temporales |
| RabbitMQ | Amazon MQ | Mensajería asíncrona entre servicios |
| Object Storage | S3 | Documentos, imágenes, evidencias |
| Secrets | Secrets Manager | Credenciales, API keys, rotación automática |
| DNS | Route 53 | Dominios, wildcard, resolución |
| TLS | ACM | Certificados auto-renovables |
| WAF | AWS WAF | Protección OWASP, rate limiting |
| Compute | ECS Fargate | Contenedores serverless |
Comunicación entre Servicios
| Tipo | Cuándo usar | Ejemplo |
|---|---|---|
| HTTP síncrono | Necesitas respuesta inmediata para continuar | ImagLend consulta ImagID para verificar listas antes de aprobar |
| Evento asíncrono | Notificar algo que pasó, sin esperar respuesta | ImagLend publica credit.disbursed, ImagID lo consume para actualizar perfil |
| HTTP + evento | Acción que requiere confirmación + notificación | ImagFlow invoca ImagSign (HTTP), luego ImagSign publica signature.completed |
Principios de Diseño
| Principio | Implementación |
|---|---|
| JWT Propagation | El JWT viaja completo entre servicios. Cada servicio valida independientemente. |
| Database per Domain | Cada dominio tiene su BD. Nunca acceder a la BD de otro servicio. |
| Event-Driven | Comunicación asíncrona via RabbitMQ. Eventos son contratos versionados. |
| Multi-Tenancy (RLS) | PostgreSQL Row Level Security. Aislamiento por tenant_id en cada query. |
| Zero Trust | Validación en cada capa. No confiar en headers custom. |
| Maker-Checker | Cambios críticos requieren aprobación (configurable por tenant). |
| Trazabilidad Total | Todo evento se publica. Subject 360 consolida la vista del cliente. |
| FTR-Compliant | Diseñado para certificación AWS Partner desde el inicio. |
Flujo de un Request Típico
Despliegue
Producción (AWS)
Local (Docker Compose)
bash
docker compose -f docker-compose.infra.yml up -d # PostgreSQL, Valkey, RabbitMQ, Keycloak
dotnet run --project src/Imagy.{Domain}.Api # Cada servicio individualmenteRepositorios
| Repositorio | Capa | Descripción |
|---|---|---|
imagy-identity-gateway | Edge | API Gateway (BFF, OIDC, YARP) |
imagy-identity-management | Identity | Tenant Management (Control Plane) |
imagy-flow-engine | Core | Motor de flujos, ejecución, proveedores, reglas |
imagy-lending | Core | Productos de crédito, originación, cartera |
imagy-sign | Core | Firma digital y electrónica |
imagy-subject | Core | Subject 360, dispositivos, listas |
imagy-console | Client | Panel administrativo React |
imagy-console-public | Client | Apps públicas (wizard, ejecución) |
imagy-infra | Infra | AWS CDK (Infrastructure as Code) |
imagy-shared | Shared | Librerías compartidas (.NET) |
docs/reimagine-platform | Docs | Documentación central (este sitio) |
Stack Tecnológico
| Capa | Tecnología |
|---|---|
| Backend | .NET 10, C# 13, ASP.NET Core |
| ORM (escritura) | Entity Framework Core 10 |
| Queries (lectura) | Dapper 2.x |
| CQRS | MediatR |
| Validación | FluentValidation |
| Mensajería | MassTransit + RabbitMQ |
| Auth | Keycloak 24+ (realm-per-tenant, Organizations) |
| Gateway | YARP 2.x |
| Frontend | React 19, TypeScript 6, Vite 8 |
| State (FE) | Zustand, TanStack Query |
| Forms (FE) | React Hook Form + Zod |
| Estilos | Tailwind CSS 4 |
| Base de datos | PostgreSQL 16 (Aurora Serverless v2) |
| Cache | Valkey 8 (ElastiCache) |
| Mensajería | RabbitMQ (Amazon MQ) |
| Storage | S3 |
| Compute | ECS Fargate |
| IaC | AWS CDK (TypeScript) |
| CI/CD | GitHub Actions |
| Observability | CloudWatch, X-Ray |
| Security | WAF, KMS, Secrets Manager, GuardDuty |
Documentos Relacionados
- Dominios de Negocio — Detalle de cada dominio y sus responsabilidades
- Comunicación — Patrones de comunicación sync/async
- Multi-Tenancy — RLS, tenant isolation, organizaciones
- Seguridad — Auth, encryption, zero trust
- URLs y Dominios — Subdominios, white-label, resolución
- Infraestructura — AWS, Docker local, FTR
- Datos (CQRS) — BD por dominio, read replicas, migraciones