Commit Graph
89 Commits
Author SHA1 Message Date
hjhan 4c6251164d fix(eod): FR007收盘检查日按计息取价日回拨,抽出EodCheckFr007Price
- 检查日改用 IndexFixerBase.GetFixingDate(与计息取价同源):
  交易日=当日(行为零变更),周末/节假日=上一交易日,
  解除非交易日收盘"必报FR007未入库"死锁(2026-08-28:0523周六收盘)
- 缺价报错附回拨说明与涉及FR007浮动的交易编号(上限20笔),
  交易日缺价文案与旧版格式一致
- FR007检查从EodCheckSettlePrice抽出为独立检查服务EodCheckFr007Price,
  报错沿用原步骤名;新增8个无库单测
2026-08-28 15:46:06 +08:00
锦麟 王 8d5b781156 BugFix 去掉注释 2026-08-27 13:36:26 +08:00
tengyufan 877cf9dc4f fix: 兼容TRS日终推送历史利息腿类别为空 2026-08-27 13:16:01 +08:00
锦麟 王 4adfbabec1 基于 .NET 的本地预付金互换预付金计算逻辑,调整菜单项名 2026-08-26 15:26:54 +08:00
张名锐 0da330e058 fix(settlement): 注释掉结算日期间的保证金计算
- 在EodCheckMonitoredTrade中注释掉了CalculateMargin调用
- 避免在交换位置服务处理期间重复计算保证金
- 确保结算流程的准确性和一致性
2026-08-26 14:41:39 +08:00
张名锐 0be56ab14b Merge branch 'glms/feature/0812_zmr_divPower' into 'glms/feature/1.4.2'
fix(bond): #JTZG-136 国联民生-有期间付息,自动互换的的时候互换日期不正确

See merge request otc-dev/zszq-trs!18
2026-08-26 05:41:41 +00:00
张名锐 ac7b04e79d fix(bond): #JTZG-136 国联民生-有期间付息,自动互换的的时候互换日期不正确
- 将 BondPaymentService.GetBondPayments 方法的过滤条件从 reg_date 改为 payment_date
- 更新相关日志信息显示 [分红-付息日口径] 替代 [分红-登记日口径]
- 修正单元测试中的注释和变量名,统一使用 payment_date 口径描述
- 修改测试数据构造,验证按实际付息日进行票息计提的逻辑
- 更新相关文档注释,明确日期口径变更的具体实现方式
2026-08-26 13:40:59 +08:00
张名锐 327348c9b3 Merge branch 'glms/feature/0812_zmr_divPower' into 'glms/feature/1.4.2'
feat(swap): 添加公司行为现金分红按登记日权益数量计算功能

See merge request otc-dev/zszq-trs!16
2026-08-26 02:35:03 +00:00
张名锐 6c582ac958 feat(swap): 添加公司行为现金分红按登记日权益数量计算功能
- 新增 CalcBondPayment 方法支持传入公司行为权益数量参数
- 在 SwapEodPositionService 中识别现金分红类型的公司行为持仓
- 修改 CopyEodPosition 和 UpdateEodPosition 方法传递公司行为前的数量信息
- 更新 SaveCurrentEodInitalPosi 方法支持公司行为数量计算
- 在 BondPaymentService 中实现公司行为现金分红按登记日权益数量计算逻辑
- 添加单元测试验证公司行为现金分红使用除权前数量的计算功能
2026-08-26 10:33:51 +08:00
tengyufan 336cc3d88b feat: 新增TRS合约日终Kafka推送
- 在日终任务的逐日循环中,于当日收盘、风险监控和日终文件生成完成后,
  按 valueDate 推送一条 TRS 合约全量快照;区间收盘逐日推送,空日推送空快照。
- 基于 eod_swap、trade、eod_swap_position、swap_position 组装合约字段,
  Kafka Key 使用 yyyy-MM-dd 格式的 valueDate。
- 新增带 Key 的 Kafka 发送重载;保留原有无 Key 发送及其吞异常行为,避免影响既有调用。
- 推送失败最多尝试 3 次;最终失败记录 Error 日志,并按 eod_swap.id 写入 push_status,
  空快照失败使用 record_id=0。
- 增加 ContractTopic 配置,默认及各部署环境使用 onederiv.trs.contract.v1。
- 增加定向单测,覆盖空快照、区间逐日推送、重试成功、三次失败和字段映射。
2026-08-25 16:07:21 +08:00
张名锐 76a491a388 Merge branch 'glms/feature/0812_zmr_divPower' into 'glms/feature/1.4.2'
refactor(swap): 统一债券价格处理逻辑

See merge request otc-dev/zszq-trs!13
2026-08-25 07:39:53 +00:00
张名锐 f7766fb723 fix(dividend): 公司行为优化
- 债券付息查询/BondPayment/BondPaymentList这个界面 不再查询公司行为除权表

- 公司行为事件的说明 格式化一下变为:调整前:名义本金:XXXX  期初标的价格:XXXX 持仓数量:XXXX
调整后:名义本金:XXXX  期初标的价格:XXXX 持仓数量:XXXX

- 报错信息修改:当某个标的的除权除息数据仍有交易引用时
则修改标的公司行为数据时则提示“不可修改,有交易【交易编号】使用了该条除权除息数据”。
2026-08-25 15:39:01 +08:00
锦麟 王 c35befbe8f #EQD-6948 国联民生-实现保证金规则(2)追保金额的产生与收盘计算 收盘计算和授信占用 2026-08-24 16:34:18 +08:00
锦麟 王 8648b62af9 Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2-margin 2026-08-24 09:40:03 +08:00
张名锐 fa63d4ee69 Merge branch 'refs/heads/glms/feature/1.4.2' into glms/feature/0812_zmr_divPower 2026-08-21 17:09:15 +08:00
张名锐 392e36a820 feat(bond): 添加公司行为现金分红标识并优化付息计算逻辑
- 在 BondPayment 模型中添加 IsCorporateActionCashDividend 属性用于区分不同数据来源
- 修改 BondPaymentService 中的 CalcPayment 方法,按每条记录来源分别处理金额单位转换
- 更新单元测试以验证混合债券付息和公司行为分红的正确计算
- 移除不再需要的 useBondPriceScale 参数简化方法接口
- 修正注释说明以反映新的按记录类型分别计算的逻辑
2026-08-21 16:51:55 +08:00
lisong 120f443aae Merge remote-tracking branch 'dest/glms/feature/1.4.2' into test 2026-08-21 16:00:48 +08:00
苏睿 6c547a0d13 !27 增加vega(1bp)希腊值
Merge pull request !27 from feature/p132_155-yf-vega-1bp
2026-08-21 07:40:04 +00:00
张名锐 02da9d78a3 refactor(EodModule): 移除债券支付服务中对公司行为同步镜像的依赖
- 不再依赖 bond-sync 镜像,Stock/Fund 公司行为直接作为展示行返回
- 展示金额按"每 10 份派现金额"换算为 GiveCashAmount / 10
- 添加公司行为除权表数据查询逻辑,与现有查询结果合并
- 简化债券支付服务中公司行为处理逻辑,移除去重机制
- 更新现金分红处理逻辑,统一通过 CalcBondPayment 读取 ex_dividend_info
- 移除不再需要的 channel_source 和 jsid 字段设置
2026-08-21 13:50:31 +08:00
锦麟 王 7b1f69a410 #EQD-6948 国联民生-实现保证金规则(2)追保金额的产生与收盘计算 授信和现金tag 2026-08-21 10:33:29 +08:00
张名锐 582cb2c7c5 Merge branch 'glms/feature/1.4.2' into glms/feature/0812_zmr_divPower
# Conflicts:
#	YLErpDAL/Modules/EodModule/BondPaymentService.cs
#	YLErpDAL/Modules/SwapModule/SwapDealService.cs
2026-08-20 16:21:13 +08:00
张名锐 ff7e540084 refactor(swap): 优化基金公司行为处理逻辑 - finished001
- 修改 FindFundCorporateActions 方法以支持查询跨日期范围的公司行为记录
- 实现按生效日期和ID顺序稳定排序的多条公司行为记录处理
- 更新平仓时基金基线恢复逻辑以正确处理跨多个生效日的场景
- 在测试类中重写 FindFundCorporateActions 方法以支持单元测试验证
- 添加完整的跨非交易日公司行为恢复功能测试用例
2026-08-20 16:10:56 +08:00
锦麟 王 febd0ce02e #EQD-6947 国联民生-保证金计算整体改造-实现第一版盯市规则(不支持同一客户多部门)(1)保证金规则的设置 阶段3 2026-08-20 14:20:29 +08:00
尹峰 5ee510aa35 增加vega(1bp)希腊值 2026-08-20 14:15:12 +08:00
张名锐 b2f4e16782 feat(bond): 支持股票和基金现金分红纳入债券支付计算 - 收紧过度开发行为
- 实现股票/基金现金分红数据从 ex_dividend_info 同步到 BondPayment
- 新增公司行为去重机制,避免镜像任务完成后重复计息
- 统一现金分红存储口径为"每 10 份派现金额",保持与同步任务一致性
- 修改 CalcPayment 方法,股票/基金分红需除以 10 转换实际现金金额
- 添加单元测试验证债券票息和股票/基金分红的不同计算方式
- 更新文档注释说明"每 10 份派现金额"存储规范
- 修复公司行为生效日处理逻辑,确保正确应用除权系数
- 扩展测试覆盖股票类证券的公司行为处理场景
2026-08-20 13:30:36 +08:00
张名锐 aa3548e77f feat(bond): 支持债券与股票基金公司行为现金流计算的差异化处理 - init2
- 修改 CalcPayment 方法添加 useBondPriceScale 参数区分债券和股票/基金的金额计算口径
- 债券利息按每100元面值票息通过BondPriceConverter转为入库金额,股票基金分红直接计算
- 在BondPaymentService中添加详细的参数说明文档注释
- 更新SwapDealService中分红计算逻辑,根据标的类型自动选择合适的金额转换方式
- 新增CorporateActionEventLifecycleTest单元测试验证公司行为事件生命周期管理
- 添加SplitCorporateActionTddTest测试验证拆合股功能
- 优化FundCorporateActionRollbackAndUnwindTest扩展到股票类型测试
- 更新前端OperationHistory页面表格列宽和显示格式支持更长的说明信息
2026-08-19 17:48:34 +08:00
张名锐 11a7aabce5 Merge branch 'glms/feature/0812_zmr_divPower' into glms/feature/1.4.2 2026-08-14 14:51:56 +08:00
hjhan fffdea4526 fix(EQD-7004): 分红关键链路日志 Debug 提升为 Info(生产可见,k8s console 可输出)
bdba5fbe 中加的分红日志原为 Debug 级;但生产 NLog minlevel=Info,k8s console 打不出来。

- 按决策改为 Info 级(5 处): BondPaymentService.GetBondPayments(reg_date 过滤区间+命中条数)、SwapDealService.GetPreEodPositionByDate(EOD 定位+回退)、GetPreEodDividendSum(取EOD日期+PosiDividendSum)、方案C 平仓预览/收益结算两处 DividendIn 赋值

此后日志一律不使用 Debug 级(生产不可见)。任务编号 EQD-7004。
2026-08-14 12:53:39 +08:00
hjhan bdba5fbecd fix(EQD-7004): 补全分红登记日口径修复的多次付息累计测试与Trace日志
原修复 9df39491 仅覆盖单次登记日(4/3)的两个单点修复,本次补全 EQD-7004 的完整验证与排查手段:

- 测试 GLMS20260105_0006 新增 4 个场景:5 期 reg_date 过滤口径各自命中正确子集;五期票息累计=5x36160=180800;auto 实现归0后下次登记日重新累加;4 期挂账累计读 144640

- 分红读取关键链路加 Debug 级日志(生产可关):BondPaymentService.GetBondPayments(reg_date 过滤区间+命中条数)、SwapDealService.GetPreEodPositionByDate(EOD 定位+回退)、GetPreEodDividendSum(取EOD日期+PosiDividendSum)、方案C 平仓预览/收益结算两处 DividendIn 赋值

实跑 dotnet test 全 GREEN(6/6)。任务编号 EQD-7004。
2026-08-14 10:05:01 +08:00
hjhan 9df39491da fix(dividend): 分红按债权登记日(reg_date)口径计提,手动互换读取当日EOD快照 (GLMS-20260105-0006)
- BondPayment 实体补映射 reg_date(债权登记日,对应 bond_payment_info.reg_date 列)
- BondPaymentService.GetBondPayments 改按 reg_date 过滤(原错用 pay_date_PL/支付日;pay_date_PL 是理论付息日,仍属支付日,非登记日)
- SwapDealService.GetPreEodPositionByDate 由 ValueDate < dealDate 改 <=,登记日当天手动互换读当日EOD分红而非T-1
- 新增 GLMS20260105_0006_RegisterDateDividendTest 回归测试(手工合成内存,先RED复现后GREEN 2/2)

根因:bond_payment_info 表仅有 pay_date_PL(理论付息日)/pay_date_act(实际付息日) 两个支付日,缺登记日;
代码用支付日判定票息归属,且手动互换只读 T-1 EOD 快照;登记日≠支付日(恰差一工作日)时缺陷被掩盖,
导致对话框分红收益显示 0。
2026-08-13 12:31:45 +08:00
张名锐 04f4468be5 refactor(trade): 优化除权信息处理逻辑和数据查询策略
- 在 FindExDividendByBusinessKey 方法中添加注释说明业务唯一键按"标的 + 自然日"定义
- 实现字段独立合并策略,当前值非零时覆盖旧值,为零时保留旧值
- 保存前统一截断时间部分,确保同一天不同时间能命中同一个自然日业务键
- 先在当前批次内按业务键归并,避免重复行生成多条数据库记录
- 除权数据查询时不使用 SQL 左连接,防止重复行扩增影响风险计算
- 使用不区分大小写的 UnderlyingCode 匹配,兼容代码大小写差异
- 除权记录不参与 SQL 左连接,先完成基础关联再内存查找唯一记录
- 风险对象的除权 Pv 重算规则与持仓处理保持一致,仅在股票交易类型下执行
2026-08-13 11:09:50 +08:00
张名锐 5a51d66970 refactor(dividend): 优化除权除息计算逻辑并改进数据类型精度
- 将除权除息相关数值字段从 double 类型改为 decimal 类型以提高精度
- 重构了红利比率计算方法 GetRatio,新增 GetRatioDecimal 方法使用 decimal 计算
- 修改价格和持仓数量计算逻辑,统一使用 decimal 进行高精度运算
- 更新数据库查询逻辑,将篮子标的判断从 IsBasket() 方法改为 CommodityCode 条件
- 优化 AddDividendInfos 方法中的批量处理逻辑,增加业务键冲突检测
- 添加数据源标识字段 DataSource 和来源更新时间字段 SourceUpdatedAt
- 新增 FindExDividendByBusinessKey 和 MergeNonZeroDividendValues 辅助方法
- 更新结算服务中除权除息信息的获取方式,使用字典查找替代 LINQ JOIN
- 修复前端保存除权信息时的响应处理逻辑
- 为基金类型也开放除权功能,不仅限于股票类型
- 添加单元测试验证篮子标的查询翻译逻辑的正确性
2026-08-13 10:53:57 +08:00
hjhan 22f22bc9c5 refactor(margin): ConsTrade.InterestMarginModels 4处引用收敛到 MarginModes
上次失败根因: EodClientBalanceCalc:134 是 EF Core LINQ 表达式,
HashSet.Contains 无法翻译成 SQL, 导致场景3/4 全红。

修正: MarginModes 新增 ForLinq(List<int>) 供 EF Core 翻译用。
- SwapEodPositionService 2处纯函数(非LINQ): 用 MarginModes.Contains
- EodClientBalanceCalc LINQ表达式: 用 MarginModes.ForLinq.Contains
- RealTimeClientBanlanceService(已ToList,内存集合): 用 MarginModes.Contains

ConsTrade.InterestMarginModels 产品代码引用: 4处 → 0(只剩定义+注释)。
保证金mode判断 {初始预付金,追加预付金} 现在统一由 MarginModes 提供。

验证: sln编译0错误, 全量485测试7失败(基线一致,零回归)。
2026-08-11 09:57:20 +08:00
hjhan ef1a126b8f refactor(margin): 4处散落marginTypes收敛到MarginModes
SwapEodPositionService: 删除 marginTypes 字段(13处.Contains全改MarginModes.Contains)
SwapEventEmailService: marginTypes 字段改为 MarginModes.All.ToList()
EodClientBalanceCalc: 删除未使用的 marginTypes 局部变量(死代码)
ClientBalanceUtility: 删除未使用的 marginTypes 局部变量(死代码)

收敛后 {初始预付金,追加预付金} 集合只在 MarginModes.All 一处定义,
消除6处副本口径分裂风险。

验证: sln编译0错误, 全量485测试7失败(基线一致,零回归)。
注: 上次27失败是stash残留导致的状态不一致,本次从干净状态逐步改。
2026-08-11 09:40:48 +08:00
hjhan 2dcd17f557 EQD-6967 fix(eod): 收盘缺失价检查按客户作用域收敛持仓分支
- EodCheckSettlePrice 抽出 public static QueryPositionUnderlyingCodes,
  增加 clienIds 过滤:client-scoped 收盘不再把其他客户/系统级(ClientId=0)
  持仓标的纳入"检查标的结算价格缺失"。
- clienIds==null(系统级全结算)时短路为 true,零回归。
- class 改 public 便于单测。
- 新增 EodCheckSettlePriceClientScopeTest 确定性回归测试(红绿双段验证)。
- 代码补充 EQD-6967 防御行为详细注释(仅聚焦客户作用域收敛)。
- 防御范围说明:场内 exchange_trade 无 ClientId 列,场内分支噪声需靠结算模式选
  '场外交易'(IsSettleExchangeTrades=false)规避,本提交不覆盖该分支。
2026-08-06 13:56:31 +08:00
yexuzhong 9d43616272 字段大小写 2026-08-06 10:18:03 +08:00
yexuzhong 74121a89ed Gamma_r未计算出来,取值错误 2026-08-05 15:15:40 +08:00
张名锐 6e523de2c0 Merge branch 'glms/feature/1.4.2' into glms/feature/dotnumber 2026-08-04 13:13:32 +08:00
张名锐 03ee9cca26 fix(settlement): 修复预付金计算中的精度问题
- 对保证金比率进行四舍五入到小数点后两位处理
- 将硬编码的保证金最大比率计算改为基于调整后的保证金比率
- 修复可取预付金计算中的类型转换问题
- 确保计算过程中数值精度的一致性
- 移除多余的文件末尾大括号以符合代码规范
2026-08-04 13:12:02 +08:00
yexuzhong 52b842ecab 国联民生 greeks计算代码完成 2026-08-03 17:44:25 +08:00
yexuzhong b41346240c 债券期货 greek计算数据获取完成 2026-08-03 16:40:40 +08:00
yexuzhong 3f6c060b4c 国联民生 greek计算 40% 2026-08-03 16:13:40 +08:00
张名锐 2eba4ce2a9 feat(settlement): 添加标的类型判断逻辑支持价格表分流
- 在ConsGlobal中为所有标的类型常量添加中文注释说明
- 新增UseStockPriceTable方法用于判断标的类型是否使用股票价格表
- 修改SettlementPriceImportService中的价格表分流逻辑
- 添加单元测试验证股指期货、基金等进入股票价格表的逻辑
- 确保Shibor、利率收益率和债券指数进入正确的商品期货价格表
2026-07-31 16:57:49 +08:00
yexuzhong 633cd7d32d 计算指标可配置 2026-07-31 14:49:52 +08:00
yexuzhong 5d580960d8 #EQD-6669 国联民生-期权希腊值计算步长和细节调整(定价引擎部分) 2026-07-31 10:35:25 +08:00
tengyufan e1c5f72418 #EQD-6604 国联民生-确认书编码生成环节移到簿记(支持手工录入)
feat: 国联民生收益互换簿记后按确认书规则生成交易编号

- - 国联收益互换首次入库后复用原交易确认书编号规则生成交易编号,保留手工填写的交易编号
- 覆盖手工新增、系统流水自动簿记、普通交易导入、流水导入和日终合成今日交易流水
- 自动流水簿记增加本地事务,交易编号回写与基础簿记数据失败时统一回滚
- 交易确认书生成时直接取交易编号,不再重新生成确认书编号
- 结算管理-交易确认书页面将合约编号更名为交易确认书编号
- 上传确认书时将合约编号更名为交易确认书编号
- 历史交易编号不处理
2026-07-29 16:45:29 +08:00
马冰冰 4419a4125b (fix): 将原保证金模板名称=系统默认 的默认值改为null。 2026-07-22 16:28:17 +08:00
hjhan 42602055de test(eod): 为 FR007 入库 UnderlyingId 守卫补纯函数单测
- EodPriceService 抽出纯函数 ResolveUnderlyingIdForCode(行为不变),SyncUnderlyingIdFromCode 调用之,便于无库单测
- 新增 EodPriceUnderlyingIdGuardTest:7 用例全过,覆盖空代码/标的不存在维持原值、已一致不改动、FR007 错行(511160.SH=2173889、159111.SZ=2173890)校正为 2170838、非错配不互相覆盖
- 对应根因:GLMS-20260701 FR007 价格行 UnderlyingId 错挂导致网页查得到/结算查不到
2026-07-17 11:24:11 +08:00
hjhan 75988a33eb fix: eod_commodity_future_price 入库前以 UnderlyingCode 重派生 UnderlyingId,防止 FR007 等价格行 UnderlyingId 与 FutureContractId 失同步
- 新增 EodPriceService.SyncUnderlyingIdFromCode:入库前以 UnderlyingCode(FutureContractId) 为准反查真实 UnderlyingId,不一致则告警并自动校正
- SaveEodFuturePrice(web编辑/新增)、SettlementPriceImportService(xlsx上传)、EodSyntheticPriceSaveService(系统合成价) 写入前调用
- 根治'网页端能查到、EOD结算查不到'的失同步问题
2026-07-17 10:32:57 +08:00
hjhan 18ba0271ec refactor: eod 数据来源写库改用 EodPriceBase 常量
EodSyntheticPriceSaveService 三处 DataSource="系统"、SwapFlowService 一处 DataSource="人工",均改为引用既有 EodPriceBase.系统/人工 常量,消除 eod 数据来源列值散落字面量。仅统一“数据来源”语义,不动无关的系统操作员名(OptName/UserName 等)字面量。
2026-07-13 16:56:04 +08:00