BuildLegRate → FundingLegRate.Build(position, spread, float) — 利率值对象的自然工厂 BuildEodPolicy → AccrualPolicy.BuildEod(position, annualDays, isCompound) — 计息政策的自然工厂 SwapDealService删除2个private static定义, 4处调用点改用类型方法 SwapModule零回归(7基线/510通过)
38 lines
1.6 KiB
C#
38 lines
1.6 KiB
C#
using YLErp.DBModels;
|
|
|
|
namespace YLErp.Modules.SwapModule.Accrual;
|
|
|
|
/// <summary>
|
|
/// 融资腿在某一计息日生效的利率(不可变值对象)。
|
|
///
|
|
/// <para>计息只认一个数:<see cref="AllInRate"/>(当日生效年利率)。
|
|
/// 固定腿与浮动腿的区别是"取率"环节的事,已在 <c>SwapDealService.CalcDailySimpleInterestByEod</c>
|
|
/// 收敛成 all-in 数;本结构不再为腿型背负四个字段——利息计算不是互换特有的,
|
|
/// 固定利率就是一个 <see cref="decimal"/>。</para>
|
|
/// </summary>
|
|
public readonly struct FundingLegRate
|
|
{
|
|
/// <summary>当日生效年利率(all-in)。固定腿=固定利率;浮动腿=加点利差+指数定盘。</summary>
|
|
public decimal Rate { get; }
|
|
|
|
/// <summary>计息用的当日生效年利率。即 <see cref="Rate"/>。</summary>
|
|
public decimal AllInRate => Rate;
|
|
|
|
private FundingLegRate(decimal rate)
|
|
=> Rate = rate;
|
|
|
|
/// <summary>构造固定腿利率。</summary>
|
|
public static FundingLegRate Fixed(decimal fixedRate)
|
|
=> new(fixedRate);
|
|
|
|
/// <summary>构造浮动腿利率(all-in = 加点利差 + 指数定盘)。</summary>
|
|
public static FundingLegRate Floating(decimal spread, decimal indexFixing)
|
|
=> new(spread + indexFixing);
|
|
|
|
/// <summary>从 swap_position 构造:固定腿→Fixed(spread),浮动腿→Floating(spread+fixing)。</summary>
|
|
public static FundingLegRate Build(swap_position position, decimal spread, decimal effectiveFloat)
|
|
=> string.IsNullOrEmpty(position.FloatRateUnderlyingCode)
|
|
? Fixed(spread)
|
|
: Floating(spread, effectiveFloat);
|
|
}
|