fix(swap): 固定值利息腿平仓比例缩放缺陷(GLMS) + 证明测试
- SwapDealService.CalcNotionalByMode 固定值分支原实现把 closePrincipal 钉成 Fix 全量 且 newClosePercent 强制置 1,导致界面『全部平仓→部分平仓』改比例时利息腿数据 完全不变。修复为 closePrincipal = InterestPrincipalFix * closePercent(与预付金/ 多头/空头/标的期初全价等模式一致),posiPrincipal 仍保留 Fix 全量,newClosePercent 保留真实平仓比例,两个缩放入口作用于不同项不双重缩放。 - EOD 结算路径 SwapEodPositionService 传 closePrecent=1 字面量,Fix*1=Fix,日终行为不变。 - 新增 SwapFixedInterestLegClosePercentBugTest(9 例真实函数复现+证明)。 - 纠正 SwapUnwindPrepayPrincipalBugTdd 中把『免疫』当期望的断言为线性缩放。 - 引入溯源:95686f4c(吴方海, EQD-5718, 2026-05-08);newClosePercent=1 祖传自 acbd2e76(2024-06-04)。
This commit is contained in:
@@ -535,13 +535,17 @@ namespace YLErp.Modules.SwapModule
|
||||
Assert.AreEqual(1_000_000m, fe.InterestPrincipal, "合约名义本金规模 50% 应=posiNotional×0.5");
|
||||
}
|
||||
|
||||
// ---- 固定值(1):CalcNotionalByMode 强制 newClosePercent=1,对 closePercent 免疫(输入 0.5 也不缩放) ----
|
||||
// ---- 固定值(1):修复后应与所有其他模式一致,按平仓比例线性缩放 ----
|
||||
// 历史缺陷:CalcNotionalByMode 对固定值腿同时把 closePrincipal 钉成 Fix 全量、newClosePercent 强制置 1,
|
||||
// 导致「全部平仓→部分平仓」改比例时利息腿数据完全不变(与用户预期及其他模式行为不符,GLMS 缺陷)。
|
||||
// 修复见 SwapDealService.cs CalcNotionalByMode 固定值分支(引入提交 95686f4c,吴方海,EQD-5718,2026-05-08)。
|
||||
// 旧断言「对平仓比例免疫、恒=Fix」本身就是在保卫该缺陷,此处纠正为正确的线性缩放。
|
||||
[TestMethod]
|
||||
public void 固定值腿_盘中_部分平仓_对平仓比例免疫_返回Fix本金()
|
||||
public void 固定值腿_盘中_部分平仓_应随平仓比例线性缩放()
|
||||
{
|
||||
const decimal baseP = 2_000_000m;
|
||||
var fe = CalcByMode((int)InterestModeEnum.固定值, baseP, 0.5m);
|
||||
Assert.AreEqual(baseP, fe.InterestPrincipal, "固定值腿 newClosePercent=1,InterestPrincipal 恒=Fix,不随平仓比例缩放");
|
||||
Assert.AreEqual(1_000_000m, fe.InterestPrincipal, "固定值腿修复后 50% 应=Fix×0.5(与其他模式一致,缺陷已修复)");
|
||||
}
|
||||
|
||||
// ---- 日终路径(settment=true):证明走 CalcDailySimpleInterestByEod,结果恒为线性 closePrincipal,不受盘中 bug 影响 ----
|
||||
|
||||
Reference in New Issue
Block a user