rustkernel_treasury/
lib.rs

1//! # RustKernel Treasury Management
2//!
3//! GPU-accelerated treasury management kernels.
4//!
5//! ## Kernels
6//! - `CashFlowForecasting` - Multi-horizon cash flow projection
7//! - `CollateralOptimization` - LP/QP optimization
8//! - `FXHedging` - Currency exposure management
9//! - `InterestRateRisk` - Duration/convexity analysis
10//! - `LiquidityOptimization` - LCR/NSFR optimization
11
12#![warn(missing_docs)]
13
14pub mod cashflow;
15pub mod collateral;
16pub mod fx;
17pub mod interest_rate;
18pub mod liquidity;
19pub mod types;
20
21pub use cashflow::CashFlowForecasting;
22pub use collateral::CollateralOptimization;
23pub use fx::FXHedging;
24pub use interest_rate::InterestRateRisk;
25pub use liquidity::LiquidityOptimization;
26
27/// Register all treasury kernels.
28pub fn register_all(
29    registry: &rustkernel_core::registry::KernelRegistry,
30) -> rustkernel_core::error::Result<()> {
31    use rustkernel_core::traits::GpuKernel;
32
33    tracing::info!("Registering treasury management kernels");
34
35    // Cash flow kernel (1)
36    registry.register_metadata(cashflow::CashFlowForecasting::new().metadata().clone())?;
37
38    // Collateral kernel (1)
39    registry.register_metadata(collateral::CollateralOptimization::new().metadata().clone())?;
40
41    // FX kernel (1)
42    registry.register_metadata(fx::FXHedging::new().metadata().clone())?;
43
44    // Interest rate kernel (1)
45    registry.register_metadata(interest_rate::InterestRateRisk::new().metadata().clone())?;
46
47    // Liquidity kernel (1)
48    registry.register_metadata(liquidity::LiquidityOptimization::new().metadata().clone())?;
49
50    tracing::info!("Registered 5 treasury management kernels");
51    Ok(())
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57    use rustkernel_core::registry::KernelRegistry;
58
59    #[test]
60    fn test_register_all() {
61        let registry = KernelRegistry::new();
62        register_all(&registry).expect("Failed to register treasury kernels");
63        assert_eq!(registry.total_count(), 5);
64    }
65}