hjhan
|
feffc196c6
|
fix(interest): 修复浮动利率部分/全平利息尾差(Bug A/B/C) 并补充回归测试
- Bug A(SwapDealService): 复利早退分支 TdInterestAmount 未乘 closePrecent
- Bug B(SwapDealService): CalcDailyCompoundInterest 用 interest 而非 EOD 四舍五入快照
- Bug C(SwapEodPositionService): 用 oriPosiNotionalValue(平仓前原始本金) 重算平仓利息
- 新增 SwapInterestScenario3And4FloatingTest: 24 个浮动利率用例, 走真实生产函数
(GetInterests / SaveAutoEodWithCloseInterestPosition), 对照 Excel 手算 oracle(AO/BL/BN),
断言容差 0.01, 非 re-baseline; 含 DebugCompare 调试输出便于与生产/Excel 逐项对比
- 附 缺陷分析-利息部分平仓尾差20260807.md 与 oracle 源 xlsx
|
2026-08-08 09:02:05 +08:00 |
|
hjhan
|
66a97e03ef
|
fix(swap): 复利重置日=平仓日时 calcLast 不再跳过 FR007 取价
根因(GLMS-JIATT-20260805):InterestCalcMode='10'(算头不算尾,calcLast=false)时,
CalcDailyCompoundInterest 循环的 'if(!calcLast && accrueDate==endDate) continue'
会跳过平仓日。若平仓日恰好是重置日(i%period==0),取价代码块被一并跳过,
导致 flowEvent.FloatRate 落库为旧周期利率,传染后续 EOD 复利计算。
修复:把重置日的 FR007 取价提前到 calcFirst/calcLast 跳过判断之前——
calcLast 只应跳过'计息',不应跳过'重置日利率取价'。同时循环外用最终
floatRate 兜底赋值 flowEvent.FloatRate,确保落库值反映最后重置日的利率。
验证:
- CI_007 合成测试(平仓日=重置日):修复前 FloatRate=旧值(FAIL),修复后=新值(PASS)
- 连库验证(GLMS-JIATT-20260805 8/4平仓):FloatRate 0.0123→0.0213(8/3新值)
- 利息金额不变(calcLast 不计当天利息,Amount 不受影响,只修正 FloatRate 字段)
- 全套 swap 测试无新增回归(334通过,2失败均为pre-existing单利/EOD路径)
附:CI_007 复现测试 + GLMS20260805 FR007/EOD 诊断工具 + 文档 longRatio 状态更新
|
2026-08-07 20:43:16 +08:00 |
|
hjhan
|
7e2042510f
|
docs(swap): 记录 income 页当前行为与待确认项
- 第七章开头加状态说明:'income 漏 longRatio 即错' 标注为待业务背书的
Working Hypothesis,非最终定性。
- 新增第八章'当前行为实录与待确认项':
* 8.1 income(收益结算按钮)页 MarkClosePnl 当前公式实录(无 longRatio,代码实证)
* 8.2 swap_position.PosiGrossPrice 恒为期初价 P0、结算/平仓后不滚动(代码实证)
* 8.3 已确认事实 vs 待确认假设 对照表
* 8.4 待业务/量化确认的 4 个问题清单
* 8.5 两条验证 SQL(空头结息事件 / 同持仓多次结算)
* 8.6 多轮回归未暴露原因(覆盖空洞+校验同源+数据隐形+多头恒等)
- 本次仅记录现状与待确认项,不改代码、不加测试;longRatio 不一致与
基准不滚动的真实生产影响仍为待证(需跑 8.5 SQL 定性)。
|
2026-08-07 15:26:54 +08:00 |
|
hjhan
|
aaeb4bddf8
|
docs(swap): 新增互换 MarkClosePnl 口径一致性审计与空头回归红测试(不改生产代码)
- 项目文档/互换计算口径一致性_残留问题与治理路线.md:定义 BUG 本质(分散计算/字段重叠/硬编码精度),
定位 income 页缺 longRatio 导致空头符号相反的残留点,并给出如何确认 income 错/unwind 对 的裁决链与改动安全性论证。
- YLErpWeb/fe-tests/_proof_short_income.js:纯 Node 红测试原型,证明多头两页一致(掩盖)、空头符号相反、补 longRatio 后一致。
- YLErpWeb/fe-tests/markClosePnlShortConsistency.test.js:jest 格式红测试(与 parity.test.js 同风格),作为后续修复的回归护栏。
说明:仅审计与测试资产,本次未修改任何生产代码(前端页面/后端 C# 均未改动)。
|
2026-08-06 22:00:44 +08:00 |
|
hjhan
|
0747deb909
|
fix: 步骤3-b 多字段连续手动编辑应累计REV(不再仅最后赢)
根因:applyBondManualEdit 每次调用先重置全部 bondRev 再只标当前字段,
导致连续手动编辑多字段(不回车)时只有最后编辑的字段留 REV,
中间手工编辑字段的 REV 被静默抹掉,UI 与步骤3-b需求不符。
修复:applyBondManualEdit 改为累计 REV(仅置当前字段、保留其它已手工编辑字段的 REV),
driver/AUTO 仍清。单字段编辑(步骤2/3)行为不变,无回归。
配套:
- 更新 a2d2bb31 中3个旧断言("仅最后留REV")为断言累加,避免测试守护错误行为
- 文档约定3 补充"连续编辑多字段时各手动字段累计REV"
swapCalc.js 为独立 script(?v=JsVersion),部署 dotnet publish 即生效,无需重建 bundle。
测试:bondCalc 全套 72 例通过。
|
2026-07-30 09:55:57 +08:00 |
|
hjhan
|
ad16095729
|
docs: 更新改进方案——补充双bundle架构说明+qiankun微前端现状+阶段0已完成标记
|
2026-07-29 22:47:10 +08:00 |
|
hjhan
|
d380ae3f28
|
docs: 新增 zszq-trs 接手统一总览(技术栈地图/高频优先级/6大坑/学习路径/文档复核/微前端盲区)
|
2026-07-29 22:46:42 +08:00 |
|
hjhan
|
daaf993126
|
docs: 互换模块长期改进方案——从106次提交47%修复率到可预测交付
|
2026-07-29 22:13:28 +08:00 |
|
hjhan
|
ffa51c6ae6
|
test(EQD-6838): 补充债券三字段互算集成层测试 + 踩坑总结文档
|
2026-07-29 21:28:07 +08:00 |
|
hjhan
|
5e27d6cef8
|
docs(valuation): 新增估值模块前端改造说明文档
记录:
- 改造范围、路径A决策依据、方案对比(否决otcdms-ui/free-jqGrid的理由)
- 分组配置映射表(需求字段 ↔ colModel.name ↔ 后端字段)
- 缺失字段清单(TODO,待后端确认):标的类型/期间付息分红/付息方式/合约估值两口径/保证金利息/期间分红/预付金系列/TRS估值
- 已知约束:冻结列冲突绕法、setcolumnChooser兼容、导出口径区分
- 测试要点、后续工作
|
2026-07-08 08:57:46 +08:00 |
|
hjhan
|
178f1d7db8
|
docs(swap): 借鉴testable分支的Seam实践指南(团队规范沉淀)
从 origin/glms/feature/refactor-swap-event-testable 的 docs/seams-pattern-practice-guide.md 借鉴。
内容:Protected Virtual Seams 模式方法论、依赖类型提取策略表、可测试子类模式、
三层测试体系(合成+黄金+端到端)、命名约定、渐进节奏、6条经验教训。
与当前分支已采用的 seam 模式(SwapDealService/SwapEodPositionService)一致,作团队规范。
|
2026-07-03 09:05:37 +08:00 |
|
hjhan
|
ed80745bf2
|
字段命名建议
|
2026-07-02 18:09:27 +08:00 |
|
hjhan
|
cd03fc53fb
|
互换两个独立bug分析文档+诊断测试
Bug①利息默认值偏大: 互换结清后eod的InterestProfitSum(待实现)没归零
(=RealizedInterest=77.26), 导致后续平仓默认值=77.26(本该0)+增量→偏大。
6-29收盘后三天对比坐实: 6-30默认83.70, 7-1默认90.14, 均含已实现的77.26。
根因 eod公式cs:829 对互换场景扣减失效(TdInterestIncome≈TdCloseInterest抵消)。
Bug②收益结算审核后状态卡死: ApproveSwapTrade(cs:1525)漏ExerciseDate判断,
到期互换审核后状态退回'确认成交'(CloseMethod默认0≠全部平仓1),
导致EodCheckMaturityTrade一直阻止收盘。引入点083848fb(2025-05-28)。
- 新增利息偏大分析文档(根因/修复方案A扣RealizedInterest/B eod归零)
- 新增审核状态卡死分析文档(根因/修复补ExerciseDate判断)
- 新增SwapPartialUnwindInterestDefaultTest(Step0探查/Step0b诊断/Step0d三天对比)
|
2026-07-01 09:57:25 +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
|
5a731c4442
|
docs(swap): MarkClosePnl字段语义统一决策文档
修复ab70531f让MarkClosePnl不再含分红后,梳理出消费端3处PosiPnl公式
不一致(①不减分红/②③减分红,2024~2026分批引入),其中②③对新数据
会多减一份分红导致结算单/收益偏小。
给出3种改法权衡(修正公式/数据迁移/TotalClosePnl分离)+建议分阶段路径,
列出4个需团队决策的问题。含字段引用全景表便于实施定位。
|
2026-06-26 13:41:32 +08:00 |
|
hjhan
|
ee1e8487d7
|
docs(swap): 排查SQL新增第2.5步-分红重复计算完整证明
4段查询还原证据链(含事件/价格/费用/付息明细):
段1事件拆解 MarkClosePnl=价差+费+分红;段2 EOD逐日盯市vs分红列;
段3累计对照;段4一句话结论。已连库实测:1875重复302400、1891重复-18.66。
修正段1列名: PosiNetPrice/PosiGrossPrice 在swap_flow_event是[NotMapped]
不入库,改用 TradingAmountNetAvg/TradingAmountNetFeeAvg。
|
2026-06-26 09:55:19 +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 |
|
hjhan
|
9e6af84e47
|
新增文档:互换分红损益字段语义与重复计算分析
分析互换分红/付息损益核算链路中的字段语义混乱与分红重复计算问题,
用真实交易数据佐证,供团队对齐字段语义、确定修复方案:
- 核心结论:MarkClosePnl含分红(价差+费+DividendIn),而DividendIn又
单独存同一笔分红,导致汇总时分红算2次(确定,非2~3次)
- 字段三层分类:客观源头/一次计算/入库字段,理清哪些是录入哪些是计算
- totalInterest链路:payment_interest→求和→×0.01→增值税调整→DividendIn
- MarkClosePnl含分红的四场景对照(手动互换/平仓、自动互换/平仓)
- 真实数据佐证:6笔交易(含EventType=3/4)显示差值=0且价差=0
- 重复次数确定2次:两个层级各自独立计算,非叠加3次
- 演进过程(f9d8a256→2140a97f,用hash+日期)
- 修复方向A(治本:MarkClosePnl不含分红)/B(保守:改汇总公式)
- 附录A:验证SQL(重复检验/守恒检验)
- 附录B:精确文件:类:行号索引
- 附录C:calcFloatClosePnl两处不一致技术债(floatRatio/longRatio)
- 附录D:测试策略(记录golden source分支refactor-swap-event-testable)
|
2026-06-26 07:33:36 +08:00 |
|
hjhan
|
697c7babf2
|
新增文档:互换交易价格字段存储与显示规范
汇总互换价格显示Bug排查结论,供后续维护参考:
- 核心规则:债券类入库相对价(÷100)、展示×100;非债券类原样
- ÷100机制:由FastVue.parseNumber实现(percent:true时number/100)
- 关键字段映射:swap_position/swap_flow_event/eod_swap_position
(标注TradingAmountNetAvg名像期末实装期初、PosiGrossPrice在
event表为NotMapped等易混点)
- 互换事件生成路径:手动/自动互换-分红型/利息端
- 已修复Bug与教训(4个)
- 附录A:排查工具箱SQL(5个,期初持仓/事件入库值/分红数据源/
中债估值/脏数据修复)
- 附录B:字段命名与数据流向速查表
|
2026-06-25 19:15:54 +08:00 |
|
hjhan
|
497371ee97
|
feat(swap): 更新互换模块独立化方案文档
- 完善互换模块现状分析,明确新老表结构对比
- 更新核心架构原则,确定完全舍弃老表结构
- 优化业务逻辑实现,基于trade表和swap_position表构建
- 增强数据模型验证,添加必要的数据注解
- 完善异常处理机制,改进错误日志记录
- 重构API服务设计,实现完整的互换交易流程
- 更新实施路线图,明确各阶段任务优先级
- 删除冗余的迁移清单文档内容
|
2026-02-13 10:51:45 +08:00 |
|
hjhan
|
7f0f15ceaa
|
docs(architecture): 添加互换模块独立化实施方案文档
- 设计了基于YARP反向代理的微服务架构方案
- 规划了独立互换API服务的技术实现细节
- 定义了完整的数据传输对象(DTO)结构
- 制定了前端无感知适配的路由映射规则
- 创建了详细的迁移清单和实施路线图
- 配置了监控告警和风险控制机制
|
2026-02-13 10:02:54 +08:00 |
|
吴方海
|
f9d8a256a6
|
从山证v2.3.0拷贝
|
2024-05-09 14:06:26 +08:00 |
|