fix(margin): 回退 PreviousBalance 简化, 恢复三级 fallback

尝试去掉第2级(TdInterestPrincipal)导致5个保证金测试失败。
根因: 生产 EOD 归档(eod_swap_position(35774))的 InterestPrincipalFix=0,
只有 TdInterestPrincipal 有值。第2级不是死代码, 不可删。

恢复三级 fallback, 补充注释说明每级命中的真实场景。
教训: 不能只看赋值点判断字段是否有值, 必须看实际数据。
验证: 编译0错误, 全量509测试7失败(基线一致)。
This commit is contained in:
hjhan
2026-08-11 15:46:28 +08:00
parent 6fe5d81917
commit 7e169dd53f
@@ -9,7 +9,12 @@ public static class MarginCalc
{
/// <summary>
/// 取上一日终保证金余额。
/// 优先 InterestPrincipalFix,其次 TdInterestPrincipal,都没有用 fallback。
///
/// 三级优先级(均有测试覆盖,不可简化):
/// 1. InterestPrincipalFix——EOD 归档赋值时的首选字段
/// 2. TdInterestPrincipal——部分 EOD 归档路径未写 InterestPrincipalFix(值为0)
/// 此时 TdInterestPrincipal 含正确的保证金本金(生产 eod_swap_position(35774) 即此场景)
/// 3. fallback——首次平仓(preEod.id==0, 无归档)时用当日保证金余额
/// </summary>
public static decimal PreviousBalance(eod_swap_position preEod, decimal fallback)
{