diff --git a/YLErpDAL/Modules/SwapModule/Accrual/FundingLegRate.cs b/YLErpDAL/Modules/SwapModule/Accrual/FundingLegRate.cs index 284210a6..6240eae6 100644 --- a/YLErpDAL/Modules/SwapModule/Accrual/FundingLegRate.cs +++ b/YLErpDAL/Modules/SwapModule/Accrual/FundingLegRate.cs @@ -3,38 +3,27 @@ namespace YLErp.Modules.SwapModule.Accrual; /// /// 融资腿在某一计息日生效的利率(不可变值对象)。 /// -/// 把"固定利率 / 加点利差 / 浮动指数定盘"三种来源收敛为一个概念,避免把它们作为裸 decimal -/// 散落在计息方法签名里——这正是初版 AccrueSimpleEod 参数膨胀、可读性差的根因。 -/// -/// 固定腿与浮动腿是互斥的两种形态:固定腿只设 (其余为 0); -/// 浮动腿设 + 为 0)。 -/// 对两种形态统一为三者之和。 -/// -/// -/// :固定腿的固定年利率;浮动腿为 0。 -/// :浮动腿在指数之上的加点利差(合约侧);固定腿为 0。 -/// :浮动指数定盘(FR007 等);固定腿为 0。 -/// :计息用的"当日生效年利率"。固定腿取 ;浮动腿取 + (二者互斥,非叠加)。 -/// +/// 计息只认一个数:(当日生效年利率)。 +/// 固定腿与浮动腿的区别是"取率"环节的事,已在 SwapDealService.CalcDailySimpleInterestByEod +/// 收敛成 all-in 数;本结构不再为腿型背负四个字段——利息计算不是互换特有的, +/// 固定利率就是一个 /// public readonly struct FundingLegRate { - /// 固定腿的固定年利率;浮动腿为 0。 - public decimal FixedRate { get; } + /// 当日生效年利率(all-in)。固定腿=固定利率;浮动腿=加点利差+指数定盘。 + public decimal Rate { get; } - /// 浮动腿在指数之上的加点利差(合约侧);固定腿为 0。 - public decimal Spread { get; } + /// 计息用的当日生效年利率。即 + public decimal AllInRate => Rate; - /// 浮动指数定盘利率(市场侧,FR007 等);固定腿为 0。 - public decimal IndexFixing { get; } + private FundingLegRate(decimal rate) + => Rate = rate; - /// - /// 当日生效年利率。固定腿与浮动腿是互斥的两种利率确定方式,不是可叠加分量: - /// 固定腿取 ;浮动腿取 + 。 - /// 约定:固定腿只设 FixedRate(其余为 0),浮动腿只设 Spread + IndexFixing(FixedRate 为 0)。 - /// - public decimal AllInRate => FixedRate != 0m ? FixedRate : Spread + IndexFixing; + /// 构造固定腿利率。 + public static FundingLegRate Fixed(decimal fixedRate) + => new(fixedRate); - public FundingLegRate(decimal fixedRate = 0m, decimal spread = 0m, decimal indexFixing = 0m) - => (FixedRate, Spread, IndexFixing) = (fixedRate, spread, indexFixing); + /// 构造浮动腿利率(all-in = 加点利差 + 指数定盘)。 + public static FundingLegRate Floating(decimal spread, decimal indexFixing) + => new(spread + indexFixing); }