Files
zszq-trs/YLErpDAL/Modules/SwapModule/InterestLegs/FixedNotionalLeg.cs
T
hjhan 79e9304114 refactor(interest): 新增利息腿策略接口 + 3个活跃mode实现
为拆三类腿做准备,按 Strategy 模式封装 CalcNotionalByMode 的 switch。
本次零生产代码改动,全部为新增小文件,每个类单一职责<50行。

新增(策略接口+值对象):
- InterestLegs/IInterestLegStrategy.cs
  NotionalResult 值对象(closePrincipal/posiPrincipal/closePercent)
  + IInterestLegStrategy 接口(每个mode一个实现)

新增(3个活跃利息腿mode):
- InterestLegs/FixedNotionalLeg.cs        mode 1 固定值
  计息基数恒=InterestPrincipalFix, 不随平仓比例变化(合同写死的固定值)
- InterestLegs/ContractNotionalLeg.cs     mode 2 合约名义本金规模
  平仓本金=posiNotional×closePercent, 按比例线性缩放
- InterestLegs/UnderlyingFullPriceLeg.cs  mode 9 标的期初全价
  主路径公式同mode2, 差异在衡泰路径grossPrice折算+EOD复利反推

确认现状:
- 界面实际只有3个活跃利息腿mode(1/2/9), TradeView.cshtml:330-349
- mode 3(持仓名义本金)/4(持仓市值) 零引用=死代码, 本次不实现
- mode 7/8(多空存续) 界面已注释掉, 本次不实现
- mode 5/6(预付金) 属保证金维度, 后续单独做PrepayLeg

新增测试(8个,全过):
- InterestLegStrategyTest.cs 覆盖各mode的部分平仓/全平/零平仓场景
  验证策略行为与现有CalcNotionalByMode switch完全一致
2026-08-10 18:32:17 +08:00

17 lines
631 B
C#

using YLErp.DBModels;
namespace YLErp.Modules.SwapModule.InterestLegs;
/// <summary>
/// 固定值利息腿(InterestMode=固定值)。
/// 计息基数由合约约定(InterestPrincipalFix),无论平仓比例多少都恒等于该值。
/// 业务规则:固定值就是合同写死的固定值,永远不变。
/// </summary>
public sealed class FixedNotionalLeg : IInterestLegStrategy
{
public InterestModeEnum Mode => InterestModeEnum.固定值;
public NotionalResult CalcNotional(decimal fix, decimal posiNotional, decimal posiLong, decimal posiShort, decimal closePercent)
=> new(fix, fix, 1m);
}