using YLErp.DBModels;
namespace YLErp.Modules.SwapModule.Accrual;
///
/// 融资腿在某一计息日生效的利率(不可变值对象)。
///
/// 计息只认一个数:(当日生效年利率)。
/// 固定腿与浮动腿的区别是"取率"环节的事,已在 SwapDealService.CalcDailySimpleInterestByEod
/// 收敛成 all-in 数;本结构不再为腿型背负四个字段——利息计算不是互换特有的,
/// 固定利率就是一个 。
///
public readonly struct FundingLegRate
{
/// 当日生效年利率(all-in)。固定腿=固定利率;浮动腿=加点利差+指数定盘。
public decimal Rate { get; }
/// 计息用的当日生效年利率。即 。
public decimal AllInRate => Rate;
private FundingLegRate(decimal rate)
=> Rate = rate;
/// 构造固定腿利率。
public static FundingLegRate Fixed(decimal fixedRate)
=> new(fixedRate);
/// 构造浮动腿利率(all-in = 加点利差 + 指数定盘)。
public static FundingLegRate Floating(decimal spread, decimal indexFixing)
=> new(spread + indexFixing);
/// 从 swap_position 构造:固定腿→Fixed(spread),浮动腿→Floating(spread+fixing)。
public static FundingLegRate Build(swap_position position, decimal spread, decimal effectiveFloat)
=> string.IsNullOrEmpty(position.FloatRateUnderlyingCode)
? Fixed(spread)
: Floating(spread, effectiveFloat);
}