hjhan
|
0910969e3f
|
fix(swap): PosiDividendSum精度差异修复(GLMS-20260105-0007)
问题:互换后PosiDividendSum=-89999.64(应为-90000),差0.36元。
根因:UpdateEodPosition cs:1635从头重算PosiDividendSum
(Round(全程,2)-已实现),与CopyEodPosition逐天递增
(每天Round(增量,2)累积)产生舍入误差累积。
修复:cs:1635改为递增模式
PosiDividendSum = eod.PosiDividendSum + TdPosiDividend - TdCloseDividend
与InterestIncomeSum的递增模式一致,避免从头重算的精度差异。
验证(golden录制/回放TDD):
- 真实数据录制GLMS-20260105-0007的eod快照+输入数据
- 回放重新调UpdateEodPosition:修复前=-89999.64(红灯),
修复后=-90000(绿灯,精确匹配)
- 121个测试全通过,无回归
|
2026-07-02 10:47:23 +08:00 |
|
hjhan
|
0e045d89db
|
test(swap): GLMS-20260105-0007分红精度差异golden红灯(复现0.36差异)
用真实测试库数据录制golden,回放复现0.36精度差异:
- 互换前 PosiDividendSum=-90400,互换支付-400
- 期望 PosiDividendSum=-90000,实际=-89999.64,差异0.36
- 回放断言失败(红灯坐实bug)
根因:UpdateEodPosition cs:1635从头重算PosiDividendSum
(Round(全程,2)-已实现),与CopyEodPosition逐天递增
(每天Round(增量,2)累积)产生舍入误差。
录制方法Record_FromRealDB标[Ignore],手动跑生成golden。
回放方法Replay_VerifyPrecisionDiff进CI,当前红灯(期望=-90000,实际=-89999.64)。
|
2026-07-02 10:28:23 +08:00 |
|
hjhan
|
d11e332ff3
|
test(swap): golden录制/回放基础设施+DealInterests场景
引入golden回放框架,补充合成测试的精确值验证缺口。
新增GoldenReplayFramework.cs:
- GoldenScenarioModel: 通用golden数据模型(输入+期望输出)
- GoldenAssert: 精确字段对比(容许指定位数误差),逐字段验证
新增DealInterestsGoldenReplayTest.cs:
- Record_AllGoldenScenarios: 生成golden JSON(标Ignore,手动跑)
- Replay_AllGoldenFiles: 读golden重跑+精确对比(进CI)
2个golden场景:
- 互换结清后待实现归零: InterestIncomeSum=0.82191780822(精确到11位)
- 普通日归档递增(回放暂不支持自动重放,留后续)
golden文件持久化到Resources/GoldenFiles/DealInterestsGolden/
价值:重构时如果任何字段变了(哪怕第8位小数),回放立刻失败。
守恒测试验证大方向对,golden验证精确值对。
验证: 119+1(回放)=120全通过。
|
2026-07-02 09:37:18 +08:00 |
|
hjhan
|
6f9aa5fb45
|
互换重收盘误删手动互换资金记录: 分析文档+TDD红灯测试
问题:重新收盘后用户手动互换产生的资金记录(ClientCashInCashOut,
Action=系统操作-互换)被误删。根因 ClearSwapPositions:400 按 Action
字符串模糊删除,而该 Action 手动/自动共用,表无来源字段区分。
引入点 commit 44e89726(2026-05-14)。
- 新增决策文档(根因/引入时间/三种修复方案/自测方法)
- 新增 SwapReEodDeleteManualCashRecordTest 4个测试(探查/诊断/录制红灯/离线校验)
- 录制 golden 坐实 bug: trade 1903 手动互换资金记录 id=13032 会被误删
|
2026-07-01 08:35:58 +08:00 |
|
hjhan
|
029475ce8d
|
test(swap): 新增互换分红重复计算录制测试+排查SQL(TDD红灯)
分红被重复计入 RealizedPnl 两次的根因:互换/平仓事件的 MarkClosePnl
已含分红成分(DividendIn),导致分红既进 RealizedMtmPnL(盯市列) 又进
RealizedDividend(分红列)。本次提供数据证据与回归基线:
- SwapDividendGoldenRecordTest: 连库录制1875(纯分红型)/1891(混合型)
5表快照→JSON golden,录制时逐事件拆解 MarkClosePnl=价差+费+分红,
按 PositionId 汇总出重复计入的分红金额。Step2 离线校验已通过。
诊断结论:1875 重复302400,1891 重复-18.66,均与 eod 分红列吻合。
- golden JSON 纳入源码树(全量复制规则),修复后可作回归基线。
- 排查SQL工具箱: 基于真实DDL核对全部列名(swap_flow_event.EventDate/
bond_payment_info.paying_interest 等),含定位样本/导出/验证/守恒4步。
- appsettings.json 测试库 zszq→glms 前缀修正。
详见 项目文档/互换分红损益字段语义与重复计算分析.md(9e6af84e)。
|
2026-06-26 09:13:37 +08:00 |
|
吴方海
|
f9d8a256a6
|
从山证v2.3.0拷贝
|
2024-05-09 14:06:26 +08:00 |
|