# 🏗️ Reframe v3.1.1: Technical Architecture & Design ## Table of Contents - [Overview](#overview) - [Core Design Principles](#core-design-principles) - [System Architecture](#system-architecture) - [Core Components](#core-components) - [Package Management](#package-management) - [Configuration System](#configuration-system) - [Core Libraries](#core-libraries) - [Data Flow & Processing](#data-flow--processing) - [SR2025 Compliance](#sr2025-compliance) - [Technology Stack](#technology-stack) - [Performance Architecture](#performance-architecture) - [Deployment Architecture](#deployment-architecture) - [Monitoring & Observability](#monitoring--observability) --- ## Overview Reframe v3.1.1 is an enterprise-grade bidirectional SWIFT MT ↔ ISO 20022 transformation engine built in Rust. This release introduces a unified package-based architecture with configuration-driven design, providing financial institutions with a transparent, high-performance, and fully auditable message transformation solution. ### What's New in v3.1.1 - **Package-Based Architecture**: External workflow packages with reframe-package.json configuration - **Configuration-Driven**: Runtime configuration via reframe.config.json with environment variable overrides - **Unified Transformation Engine**: Single bidirectional engine handling both MT→MX and MX→MT transformations - **GraphQL API**: Query transformation history with custom fields support - **Custom Fields**: Package-specific computed fields using JSONLogic expressions - **Database Integration**: MongoDB persistence with audit trail - **Metadata Support**: User-provided metadata for workflow customization - **Hot-Reload Capability**: Update workflows without service restart - **Simplified API**: Unified endpoints with automatic message detection - **SR2025 Compliance**: Full implementation of SWIFT's November 2025 standards release --- ## Core Design Principles ### 🔍 **Complete Transparency** - All transformation logic externalized in human-readable JSON - Package-based workflow organization - Full audit trail for compliance and debugging - No proprietary black boxes or hidden logic ### ⚡ **High Performance** - Sub-millisecond transformation latency - Rust-powered for memory safety and speed - Async runtime with Tokio for concurrent processing - Zero-copy parsing where possible ### 🔧 **Configuration-Driven Architecture** - External package-based workflow system - Runtime configuration via reframe.config.json - Environment variable overrides for deployment flexibility - Hot-reloadable workflow configurations ### 📊 **Workflow-Driven** - Declarative transformation pipelines - JSONLogic-based business rules - Version-controlled configuration - Visual workflow representation ### 🔄 **True Bidirectional Design** - Unified engine for both directions - Automatic message format detection - Symmetric transformation capabilities - Consistent handling of edge cases ### 🏢 **Enterprise-Ready** - Production-grade error handling - Comprehensive monitoring and metrics - Container-native deployment - Horizontal scaling support --- ## System Architecture ### High-Level Architecture Diagram ```mermaid graph TB subgraph "External Systems" CLIENT[REST API Clients] WEB[Web Applications] CLI[CLI Tools] end subgraph "API Gateway Layer" HTTP[Axum HTTP Server
REST API v3.1.1] AUTH[Authentication] end subgraph "Processing Core" ROUTER[Intelligent Message Router
Auto Format Detection] subgraph "Unified Engines" TRANSFORM_ENGINE[Transform Engine
Bidirectional MT ↔ MX] GENERATION_ENGINE[Generation Engine
Sample Messages] VALIDATION_ENGINE[Validation Engine
Message Compliance] end end subgraph "Message Processing" subgraph "Parsers" PARSE_MT[MT Parser
SWIFT MT Format] PARSE_MX[MX Parser
ISO 20022 XML] end subgraph "Publishers" PUB_MT[MT Publisher
Generate MT] PUB_MX[MX Publisher
Generate XML] end subgraph "Generators" SAMPLE_GEN[Sample Generator
Test Data Creation] BAH_GEN[BAH Generator
Business Headers] end end subgraph "Workflow Engine" DATAFLOW[Dataflow-rs
Pipeline Orchestration] DATALOGIC[Datalogic-rs
Business Logic] VALIDATOR[SR2025 Validator
Compliance Rules] end subgraph "Package Management" PKG_MGR[Package Manager
Discovery & Loading] subgraph "External Package" PKG_CONFIG[reframe-package.json
Package Configuration] WF_TRANSFORM[Transform Workflows
Bidirectional Rules] WF_GENERATE[Generate Workflows
Sample Creation] WF_VALIDATE[Validate Workflows
Compliance Checks] SCENARIOS[Test Scenarios
Sample Data] end end subgraph "Configuration" CONFIG[reframe.config.json
Runtime Configuration] ENV_VARS[Environment Variables
Deployment Overrides] end subgraph "Observability" LOGS[Structured Logging
tracing/env_logger] METRICS[Prometheus Metrics] HEALTH[Health Checks] end %% Connections CLIENT --> HTTP WEB --> HTTP CLI --> HTTP HTTP --> AUTH AUTH --> ROUTER ROUTER -->|Auto-detect format| TRANSFORM_ENGINE ROUTER -->|Generate request| GENERATION_ENGINE ROUTER -->|Validate request| VALIDATION_ENGINE TRANSFORM_ENGINE --> PARSE_MT TRANSFORM_ENGINE --> PARSE_MX TRANSFORM_ENGINE --> DATAFLOW TRANSFORM_ENGINE --> PUB_MT TRANSFORM_ENGINE --> PUB_MX GENERATION_ENGINE --> SAMPLE_GEN GENERATION_ENGINE --> DATAFLOW VALIDATION_ENGINE --> PARSE_MT VALIDATION_ENGINE --> PARSE_MX VALIDATION_ENGINE --> DATAFLOW DATAFLOW --> DATALOGIC DATAFLOW --> VALIDATOR DATAFLOW --> WF_TRANSFORM DATAFLOW --> WF_GENERATE DATAFLOW --> WF_VALIDATE SAMPLE_GEN --> SCENARIOS TRANSFORM_ENGINE --> PKG_MGR GENERATION_ENGINE --> PKG_MGR VALIDATION_ENGINE --> PKG_MGR PKG_MGR --> PKG_CONFIG PKG_MGR --> CONFIG CONFIG --> ENV_VARS ROUTER --> LOGS DATAFLOW --> LOGS HTTP --> METRICS HTTP --> HEALTH ``` --- ## Core Components ### 1. **Main Server** (`src/main.rs`) - Initializes Axum HTTP server - Sets up unified route handlers - Manages engine lifecycle - Loads configuration from reframe.config.json ### 2. **API Handlers** (`src/handlers.rs`) - **Unified Transform Handler**: Auto-detects message format and direction - **Generate Handler**: Creates sample messages for testing - **Validate Handler**: Validates MT and MX messages - **Admin Handlers**: Workflow reload and package management - Request validation with metadata support - Response formatting and error handling ### 3. **Package Manager** (`src/package_manager.rs`) - Package discovery and loading from reframe.config.json - Package validation and version compatibility - Configuration management with environment variable overrides - Runtime package information and metadata ### 4. **Transformation Engines** (`src/engine.rs`) - **Transform Engine**: Unified bidirectional MT ↔ ISO 20022 transformations - **Generation Engine**: Sample message creation for both MT and MX - **Validation Engine**: Message compliance checking for both formats - Workflow orchestration using dataflow-rs - Hot-reload capability without service restart - Package-based workflow loading ### 5. **Message Parsers** - **MT Parser** (`src/parse_mt.rs`): Custom SWIFT MT parser with field validation - **MX Parser** (`src/parse_mx.rs`): ISO 20022 XML parsing with schema validation - **Validation Helpers** (`src/validation_helpers.rs`): Common validation utilities ### 6. **Message Generators** - **MX Generator** (`src/mx_generator.rs`): JSON to ISO 20022 XML conversion - **MT Generator** (`src/mt_generator.rs`): Structured data to SWIFT MT format - **Sample Generator** (`src/sample_generator.rs`): Test data creation using datafake-rs ### 7. **Message Publishers** - **MT Publisher** (`src/publish_mt.rs`): Format and publish MT messages - **MX Publisher** (`src/publish_mx.rs`): Format and publish MX messages with proper namespaces ### 8. **Custom Fields Module** (`src/custom_fields.rs`) - Package-specific computed fields using JSONLogic expressions - Three storage strategies: precompute, runtime, and hybrid - Field evaluation at storage and query time - Error handling with graceful degradation ### 9. **Database Integration** (`src/database/`) - **MongoDB Client** (`mongodb.rs`): Audit trail persistence with custom field support - **Conversion Utilities** (`conversion.rs`): Message to/from database document conversion - Custom field filtering and querying - Transaction history and analytics ### 10. **GraphQL API** (`src/graphql/`) - **Schema** (`schema.rs`): GraphQL query and mutation definitions - **Types** (`types.rs`): GraphQL types with custom fields support - Message querying with filters and pagination - Package-specific custom field resolvers ### 11. **Scenario Management** (`src/scenario_loader.rs`) - Load test scenarios from package - Generate realistic test data - Support for multiple message variants ### 12. **OpenAPI Documentation** (`src/openapi.rs`) - Swagger/OpenAPI spec generation with runtime configuration - Interactive API documentation - Request/response examples - Configurable server URLs and metadata ### 10. **Type Definitions** (`src/types.rs`) - Common data structures and types - Request/response models with metadata support - AppState with three unified engines - Error types for structured error handling --- ## Package Management ### Package Structure External packages follow this standardized structure: ``` reframe-package-swift-cbpr/ ├── reframe-package.json # Package configuration ├── transform/ │ ├── index.json # Unified workflow index │ ├── outgoing/ # MT → MX transformations │ │ ├── parse-mt.json │ │ ├── MT103/ │ │ │ ├── bah-mapping.json │ │ │ ├── document-mapping.json │ │ │ ├── precondition.json │ │ │ └── postcondition.json │ │ └── combine-xml.json │ └── incoming/ # MX → MT transformations │ ├── parse-mx.json │ └── pacs008/ │ ├── 01-variant-detection.json │ ├── 02-preconditions.json │ └── ... ├── generate/ │ ├── index.json │ ├── generate-mt.json │ └── generate-mx.json ├── validate/ │ ├── index.json │ ├── validate-mt.json │ └── validate-mx.json └── scenarios/ ├── index.json ├── outgoing/ │ └── mt103_to_pacs008_cbpr_standard.json └── incoming/ └── pacs008_to_mt103_cbpr_standard.json ``` ### Package Configuration **reframe-package.json**: ```json { "id": "swift-cbpr-mt-mx", "name": "SWIFT CBPR+ MT <-> MX Transformations - SR2025", "version": "2.0.0", "description": "Official SWIFT CBPR+ transformations", "author": "Plasmatic Team", "license": "Apache-2.0", "engine_version": "3.1.1", "required_plugins": ["swift-mt-message", "mx-message"], "workflows": { "transform": { "path": "transform", "description": "Unified bidirectional transformation workflows", "entry_point": "index.json" }, "generate": { "path": "generate", "description": "Sample message generation", "entry_point": "index.json" }, "validate": { "path": "validate", "description": "Message validation workflows", "entry_point": "index.json" } }, "scenarios": { "path": "scenarios", "description": "Test scenarios", "entry_point": "index.json" } } ``` --- ## Configuration System ### Runtime Configuration **reframe.config.json** (project root): ```json { "packages": [ { "path": "../reframe-package-swift-cbpr", "enabled": true } ], "server": { "host": "0.0.0.0", "port": 3000, "runtime": { "tokio_worker_threads": "auto", "thread_name_prefix": "reframe-worker" } }, "logging": { "format": "compact", "level": "info", "show_target": false, "show_thread": false, "show_file_location": false, "show_span_events": false, "file_output": { "enabled": false, "directory": "./logs", "file_prefix": "reframe", "rotation": "daily" } }, "api_docs": { "enabled": true, "title": "Reframe API", "version": "3.1.1", "description": "Enterprise-grade bidirectional SWIFT MT ↔ ISO 20022 transformation service", "contact": { "name": "Plasmatic Team", "email": "enquires@goplasmatic.io" }, "license": { "name": "Apache 2.0", "identifier": "Apache-2.0", "url": "https://opensource.org/license/apache-2-0" }, "external_docs_url": "https://sandbox.goplasmatic.io", "server_url": "http://localhost:3000" }, "defaults": { "package_id": null, "package_path": "../reframe-package-swift-cbpr" } } ``` ### Configuration Priority System Configuration values are resolved in this order (highest to lowest priority): 1. **Environment Variables** (highest priority) 2. **reframe.config.json** file 3. **Built-in Defaults** (lowest priority) ### Environment Variables | Variable | Description | Default | |----------|-------------|---------| | `REFRAME_PACKAGE_PATH` | Path to workflow package | `../reframe-package-swift-cbpr` | | `TOKIO_WORKER_THREADS` | Async runtime worker threads | CPU count | | `API_SERVER_URL` | OpenAPI server URL override | `http://localhost:3000` | | `RUST_LOG` | Logging level | `info` | --- ## Core Libraries ### Dataflow-rs (Workflow Engine) - **Purpose**: JSON-based workflow orchestration - **Features**: - Declarative pipeline definitions - Conditional routing - Data transformation operators - Error handling and recovery ### Datalogic-rs (Logic Engine) - **Purpose**: JSONLogic implementation for business rules - **Features**: - Complex conditional evaluation - Variable substitution - Mathematical operations - String manipulation ### Datafake-rs (Data Generation) - **Purpose**: Realistic test data generation - **Features**: - Faker.js compatible API - Custom generators - Locale support - Reproducible data with seeds ### Swift-MT-Message (MT Library) - **Purpose**: SWIFT MT message handling - **Version**: 3.0+ - **Features**: - All MT message types - Field validation - Block structure parsing - SR2025 compliance ### MX-Message (ISO 20022 Library) - **Purpose**: ISO 20022 message handling - **Version**: 3.0+ - **Features**: - Complete message catalog - XML serialization/deserialization - Schema validation - BAH v3 support --- ## Data Flow & Processing ### Unified Transformation Flow ```mermaid sequenceDiagram participant Client participant Router participant Transform Engine participant Parser (MT/MX) participant Workflow Engine participant Publisher (MX/MT) Client->>Router: POST /api/transform Note over Router: Auto-detect format
from message content Router->>Transform Engine: Route message Transform Engine->>Parser (MT/MX): Parse message Parser (MT/MX)-->>Transform Engine: Structured data Note over Transform Engine: Set metadata
including user metadata Transform Engine->>Workflow Engine: Execute transformation Note over Workflow Engine: Load appropriate workflows
from package (outgoing/incoming) Workflow Engine-->>Transform Engine: Transformed data Transform Engine->>Publisher (MX/MT): Generate output Publisher (MX/MT)-->>Client: Transformed message ``` ### Metadata Flow User-provided metadata is merged into the workflow execution context: ```json { "message": "", "metadata": { "priority": "high", "custom_field": "value" } } ``` The workflow can access these values: ```json { "logic": { "if": [ {"==": [{"var": "metadata.priority"}, "high"]}, "URGENT", "NORMAL" ] } } ``` --- ## SR2025 Compliance ### Key SR2025 Updates Implemented 1. **Business Application Header v3** - Enhanced party identification - Improved service level codes - Extended priority options 2. **Structured Remittance Information** - Creditor reference information - Structured reference types - Document adjustment details 3. **Enhanced Data Quality** - Mandatory UETR (Unique End-to-end Transaction Reference) - LEI (Legal Entity Identifier) support - Improved address structures 4. **New Message Types** - camt.105 - Billing report - camt.106 - Investigation response - camt.107 - Non-deliverable information - Additional pain and pacs variants 5. **Validation Enhancements** - Cross-field validation rules - Business rule enforcement - Format validation improvements --- ## Technology Stack ### Core Technologies | Component | Technology | Version | Purpose | |-----------|-----------|---------|---------| | Language | Rust | 1.75+ | Core implementation | | Async Runtime | Tokio | 1.47 | Asynchronous I/O | | Web Framework | Axum | 0.8 | HTTP server | | XML Processing | quick-xml | 0.38 | Fast XML parsing | | JSON Processing | serde_json | 1.0 | JSON serialization | | API Documentation | utoipa | 5.4 | OpenAPI generation | | Logging | tracing/env_logger | Latest | Structured logging | | Configuration | arc-swap | Latest | Lock-free config updates | --- ## Performance Architecture ### Design Optimizations 1. **Async Processing** - Tokio runtime for non-blocking I/O - Concurrent request handling - Efficient resource utilization - Automatic CPU core scaling 2. **Engine Caching** - Pre-loaded workflow engines - Arc-swap for zero-downtime reloads - Shared engine state across threads 3. **Zero-Copy Parsing** - Direct memory access for string operations - Minimal allocations during parsing - Reuse of buffers where possible 4. **Configuration System** - Lock-free configuration reads with ArcSwap - Hot-reload without service interruption - Package-based workflow loading ### Tokio Runtime Configuration The async runtime automatically scales with available CPU cores: ```bash # Auto-detection (default, uses all CPU cores) cargo run --release # Explicit configuration TOKIO_WORKER_THREADS=4 cargo run --release # Low-resource environment TOKIO_WORKER_THREADS=1 cargo run ``` --- ## Deployment Architecture ### Container Architecture ```dockerfile # Multi-stage build FROM rust:1.75 as builder # Build optimized binary FROM debian:bookworm-slim # Minimal runtime with only required libraries # Non-root user execution # Health check endpoint ``` ### Deployment Options 1. **Docker Standalone** - Single container deployment - Volume mounts for packages and config - Environment-based configuration 2. **Docker Compose** - Multi-container orchestration - Service dependencies - Network isolation 3. **Kubernetes** - Horizontal pod autoscaling - ConfigMaps for configuration and workflows - Ingress controllers - Service mesh integration 4. **Cloud Native** - AWS ECS/Fargate - Azure Container Instances - Google Cloud Run - OpenShift ### Scaling Strategy - **Horizontal Scaling**: Stateless design allows linear scaling - **Load Balancing**: Round-robin or least-connections - **Auto-scaling**: Based on CPU/memory or request rate - **Geographic Distribution**: Deploy close to users --- ## Monitoring & Observability ### Health Checks ```json GET /health { "status": "healthy", "timestamp": "2025-10-14T10:00:00Z", "engines": { "transform": "ready", "generation": "ready", "validation": "ready" }, "capabilities": [ "bidirectional_transformation", "sample_generation", "message_validation", "workflow_reload" ], "config": { "thread_count": 8 } } ``` ### Logging Strategy ```rust // Structured logging example info!( message_type = "MT103", direction = "outgoing", duration_ms = 5, "Transformation completed successfully" ); ``` ### Metrics Collection Key metrics to monitor: - Request throughput (requests/second) - Transformation latency (milliseconds) - Error rates by message type - Engine workflow execution time - Memory usage and GC pressure --- ## API Endpoints ### Unified Transformation API - `POST /api/transform`: Unified bidirectional transformation - Auto-detects message format (MT or MX) - Supports optional `message_type_hint` for routing - Handles both MT → MX and MX → MT - Accepts user metadata for workflow customization ### Sample Generation - `POST /api/generate`: Generate sample messages - Supports both MT and MX message types - Uses scenarios from package ### Validation - `POST /api/validate`: Validate messages - Auto-detects and validates MT or MX - Returns validation status and errors ### Administration - `POST /admin/reload-workflows`: Hot reload workflows from package - `GET /api/packages`: List loaded packages with details - `GET /health`: Health check with engine status - `GET /swagger-ui`: Interactive API documentation - `GET /api-docs/openapi.json`: OpenAPI specification --- ## Future Roadmap ### Near Term - Kafka/RabbitMQ integration - Enhanced monitoring dashboard - Multi-package support (beyond single default package) - Real-time WebSocket notifications ### Medium Term - Plugin system for custom functions - Multi-tenant support - Cloud-native SaaS offering - Performance optimization tools ### Long Term - Real-time streaming transformations - Machine learning for mapping suggestions - Predictive error detection - Cross-border payment optimization --- ## Conclusion Reframe v3.1.1 represents a significant advancement with its unified package-based architecture. The configuration-driven design with external packages provides: - **Scalability**: From single instances to global deployments - **Maintainability**: Clear separation of concerns and modular design - **Extensibility**: Easy to add new message types via packages - **Observable**: Comprehensive monitoring and debugging capabilities - **Secure**: Multiple layers of security and compliance features - **Flexible**: Runtime configuration without recompilation For more information, see our other documentation: - [Configuration Guide](configuration.md) - Detailed configuration options - [Installation Guide](installation.md) - Setup and deployment - [Custom Fields Guide](custom-fields.md) - Package-specific computed fields and GraphQL API - [Message Formats](message-formats.md) - Supported messages