锦麟 王
|
d43e77ee6f
|
#EQD-6948 国联民生-实现保证金规则(2)追保金额的产生与收盘计算 ETF 子类分档(转债ETF/科创债ETF)
|
2026-08-24 18:23:26 +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 |
|
hjhan
|
7b65ec0979
|
chore(swap): 删除全部期货公司定制保证金计算死代码——36个厂商类+东吴DongWu子目录+调度器四处厂商switch收敛Default直调+MarginTypeEnum三个不可达枚举项;连带YLErpUnitTest厂商类历史快照副本与4个厂商测试(3个零断言草稿/1个招证金标准)。本分支Company=国联无专属case,厂商路径本就永不执行;顺带消除Debug配置残留的格林大华#if DEBUG两处编译错误。-23231行,Release/Debug/UnitTestProject三处构建0错误
|
2026-08-22 07:58:25 +08:00 |
|
hjhan
|
e90f2d9fc2
|
chore(swap): 删除dbf旧导入死簇与HTStatus死字段——SwapFlowImportService整条zip/dbf链+TradeBase.HTStatus
ImportSwapTradesFromZip标记[Obsolete]且全仓零调用,其私有依赖链GetDbfFiles→GetDbfDatas→GetSwapFlowData_SZ/_SH→ConvertDateTime仅被它触达,连同DotNetDBF/SharpZipLib两个using一并删除;Excel导入路径(ImportSwapTradesFromExcel)不受影响。TradeBase.HTStatus全仓无读无写,属性删除后EF不再映射该列(数据库列残留留给DBA评估)。
dotnet build 0错误
|
2026-08-22 07:38:08 +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 |
|
tengyufan
|
e5a1ca1f68
|
fix: 收益互换OA移动审批改为内部定时轮询
- 复用 HostedTaskService 定时器轮询待处理的 OA 移动审批状态
- 增加单实例防重入控制,避免同一进程内重复同步
- 新增 Erp.TradeApprovalOaSyncIntervalSeconds 配置,默认 30 秒
- 支持在 Admin 全局配置页修改查询间隔,保存后立即生效,无需重启
- 补充 AppConfig 初始化 SQL,不再依赖 PowerJob 或 XXL-JOB 外部调度
|
2026-08-21 16:48:37 +08:00 |
|
tengyufan
|
3f0984800a
|
feat: 收益互换开平仓及收益结算接入OA移动审批
#EQD-6425 国联民生-衍生品系统移动审批(提交OA流程)
- 审批节点支持配置“关联OA移动审批”
- 创建OA流程并记录请求、requestId、状态及异常备注
- 支持OA轮询同步审批通过、退回和归档状态
- 本地通过、拒绝、撤回时同步强制归档未结束OA流程
- 增加审批列表OA备注展示及本地Mock联调接口
- 新增OA审批记录表和数据库升级脚本
- OA移动审批使用独立查询地址及isnextflow配置,不影响交易确认书OA
|
2026-08-21 15:54:54 +08:00 |
|
马冰冰
|
38e0a7795f
|
Merge branch 'glms/feature/1.4.2-M819' into glms/feature/1.4.2
|
2026-08-21 14:19:40 +08:00 |
|
马冰冰
|
f16634534c
|
feature:#EQD-7093 国联民生-交易确认书校验(2)针对ETF标的获取新增信息并且支持配置分类。 ETF交易确认书中填充参考标的证券全称、参考标的基金管理人,
|
2026-08-21 14:16:05 +08:00 |
|
锦麟 王
|
7b1f69a410
|
#EQD-6948 国联民生-实现保证金规则(2)追保金额的产生与收盘计算 授信和现金tag
|
2026-08-21 10:33:29 +08:00 |
|
张名锐
|
8efb468c56
|
Merge branch 'glms/feature/1.4.2' into glms/feature/0812_zmr_divPower
|
2026-08-21 09:50:12 +08:00 |
|
hjhan
|
71683083ef
|
feat(swap): EQD-6953 平仓期末结算收益率字段载体+结算确认书Excel导出——[NotMapped]ExitYtm随UnwindData进swap_event.EventData(零表结构变更);生成器从浮动腿回读导出固定4位不去零(0.0000);模板nodma_01.xlsx新增S列;命名遵《互换价格字段命名规范决策文档》平仓=Exit(非End/Close/Final)
|
2026-08-20 17:29:10 +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 |
|
hjhan
|
5552402a7c
|
feat(swap): EQD-6977 罚息开关簿记默认值管道——TradeExtendJson.IsPenaltyInterest(存量缺省false零回填) + InitUnwind 平仓页带出簿记值 + GetUnwindInterestList 参数透传
|
2026-08-20 15:53:11 +08:00 |
|
hjhan
|
ffffe842c6
|
fix(swap): EQD-6977 罚息精确续接落地——承接量改用实际计息状态(preEod基数+事件实结,弃冻结重放)、锚点统一PosiStartDate、罚息并入既有利息流InterestFee(去独立事件/去is_penalty_interest列及DDL/回退closeList与EOD两处守护)、接缝加eventType==平仓守卫、trace逐腿全程落盘、新增多区间不同定盘恒等式测试(旧冻结重放实现必挂)
|
2026-08-20 15:11:33 +08:00 |
|
锦麟 王
|
febd0ce02e
|
#EQD-6947 国联民生-保证金计算整体改造-实现第一版盯市规则(不支持同一客户多部门)(1)保证金规则的设置 阶段3
|
2026-08-20 14:20:29 +08:00 |
|
hjhan
|
99ca8ebf2c
|
refactor(swap): EQD-6977 罚息标志管道——UnwindData/InterestCalcRequest/GetUnwindInterests 透传 isPenaltyInterest
新增 UnwindData.IsPenaltyInterest(bool);InterestCalcRequest 加 IsPenaltyInterest 字段+私有ctor参数+IntradayUnwind 工厂可选参(default false);GetUnwindInterests 加 isPenaltyInterest 可选参并透传 IntradayUnwind。零行为变化,现有调用方经默认值不受影响,Penalty 套件 11/11 通过。
|
2026-08-20 12:57:29 +08:00 |
|
hjhan
|
11459ed73f
|
feat(swap): EQD-6977 swap_flow_event 增加 is_penalty_interest 列
模型属性 IsPenaltyInterest + Column(is_penalty_interest) 显式映射;增量 DDL 落 DbUpdate/Ver-5.7.0/prod.sql。存量 DEFAULT 0 自动为否。列命名 snake_case 与全表 PascalCase 不一致,评审文档已标注待拍板。
|
2026-08-20 12:31:43 +08:00 |
|
张名锐
|
aa3548e77f
|
feat(bond): 支持债券与股票基金公司行为现金流计算的差异化处理 - init2
- 修改 CalcPayment 方法添加 useBondPriceScale 参数区分债券和股票/基金的金额计算口径
- 债券利息按每100元面值票息通过BondPriceConverter转为入库金额,股票基金分红直接计算
- 在BondPaymentService中添加详细的参数说明文档注释
- 更新SwapDealService中分红计算逻辑,根据标的类型自动选择合适的金额转换方式
- 新增CorporateActionEventLifecycleTest单元测试验证公司行为事件生命周期管理
- 添加SplitCorporateActionTddTest测试验证拆合股功能
- 优化FundCorporateActionRollbackAndUnwindTest扩展到股票类型测试
- 更新前端OperationHistory页面表格列宽和显示格式支持更长的说明信息
|
2026-08-19 17:48:34 +08:00 |
|
hjhan
|
0418d9f3d3
|
refactor(swap): InterestCalcMode 算头算尾解析收口至 TradeExtendJson.CalcFirst/CalcLast
三处重复的 StartsWith/EndsWith 字符串解析(GetInterests / InitInterestDate /
SwapEodPositionService EOD平仓后结息)收口为 TradeExtendJson 计算属性:
- [JsonIgnore] 保证 ExtendJson 序列化字节不变;
- InitInterestDate 原写法在 InterestCalcMode 为显式 null 时会 NRE,
收口后与其他两处 null-安全语义对齐(缺省=算头算尾,实际不可达,属性缺省 11)。
EQD-6968 三判定之一的"算不算尾"至此单点可查。
验证:内存套件 102/102 全绿(GLMS20260817Fr007 23 + Cache 7 + CloseInterest/
InterestScenario/TailSnapshot/EntrySemantics 72)
|
2026-08-19 09:31:38 +08:00 |
|
锦麟 王
|
2e58ca2498
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2-margin
|
2026-08-17 10:20:04 +08:00 |
|
hjhan
|
e2431e9d44
|
refactor(accrual): 计息类型整体迁入 DAL——新增 Accrual/InterestMath,删 Core 未接线孤儿
搬迁(算法体逐字未动,仅换命名空间与归属):
- SwapInterest.Round/AccrualDays/FundingLegPrecision + AccrualBoundary/InterestResult
→ YLErpDAL/Modules/SwapModule/Accrual/InterestMath.cs
- AccrualTrace → Accrual/AccrualTrace.cs(被迫同迁:其 MarkStart 引用 AccrualBoundary,
Core 不能反向依赖 DAL)
- 引用切换:Simple/CompoundInterestAccrual、AccrualPolicy、SwapCalcTrace、SwapDealService
(保留 using YLErp.Derivatives.Interest——IIndexFixer/IndexFixerBase 留 Core)
删除(零生产引用,孤儿清零):
- Core:SwapInterest.cs 算法方法(AccrueSimple/AccrueCompoundInArrears/ApplyUnwind/
AccrueUnrealized/ToInterestRate,未接线且与 DAL 生产实现舍入/rollover 口径已分叉)、
AccrualContext.cs、InterestRate.cs
- DAL:AccrualState.cs(零引用死类)
- 测试:SwapInterest_CompoundInArrears_RolloverTimingTests.cs(仅测已删原语)
验证:两解决方案 Rebuild 0 错误;磁盘 SwapInterest. 残留 0;影子/分红/场景 86/86 通过
(含 Accrual 3 影子对账、Margin 影子、divPower 新增 AutoUnwindMultiPartial)。
注:AccrualContext 默认精度 11 与生产 12 的分叉隐患随删除一并消除;
已删原语若将来重建须先补对账测试,勿凭记忆复原(ARCHITECTURE.md 已留警告)。
|
2026-08-14 15:31:04 +08:00 |
|
hjhan
|
b2cbbff9e7
|
refactor(margin): 删除未接线的保证金死代码预留抽象
- 删除 MarginAccount 整类、IMarginResolver 子树(MarginForm/CashMargin/CreditMargin/GuaranteeMargin)、MarginBalance 只读 struct:全仓零生产实例化,结构上无法适配 CalcMarginInterest 的盘中差分模型。
- 删除仅覆盖上述死代码的 MarginLegTest(不损失活代码覆盖率)。
- 保留被 CalcMarginInterest 实际使用的 MarginCalc/MarginModes 活代码。
- 同步修剪 ARCHITECTURE.md 树图与对账表,清理 AccrualContext.cs 过期注释。
|
2026-08-14 08:55:37 +08:00 |
|
tengyufan
|
8afd449c40
|
feat(ClientBlack): 新增客户黑名单审批流程
- 黑名单新增、删除、批量导入、批量移出在配置审批节点后,审批通过才生效
- 新增黑名单待提交后可提交审批;仅首节点未审批时可撤回,进入后续节点禁止撤回
- 增加黑名单审批列表、审批弹窗、审批操作日志及状态筛选
- 支持审批配置中的“黑名单审批”流程及对应菜单、模块权限、操作权限
- 黑名单审批中禁止同名记录覆盖备注;已在黑名单中的同名导入会明确提示本次将修改备注
- 未配置审批节点时保持原有直接生效行为
- 增加黑名单审批状态机单测,39/39 通过
- 修正撤回全部失败时仍提示“撤回审批成功”的问题
|
2026-08-13 17:21:04 +08:00 |
|
锦麟 王
|
07d7eee418
|
Merge remote-tracking branch 'origin/glms/feature/1.4.2' into glms/feature/1.4.2-margin
|
2026-08-13 14:02:16 +08:00 |
|
锦麟 王
|
e8bb04d6bf
|
#EQD-6947 国联民生-保证金计算整体改造-实现第一版盯市规则(不支持同一客户多部门)(1)保证金规则的设置 阶段2 新增字段 BondTerm,调整互换交易模板绑定逻辑
|
2026-08-13 13:19:06 +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 |
|
hjhan
|
dea9c4cba5
|
docs(margin): 修复保证金计息重构后的过时文档与注释
按最新代码(CalcMarginInterest 已接生产、orginPv hack 已删、MarginAccount 未接线、保证金精度=12)修正:
- 删除 orginPv 维度重映射的孤儿 summary(方法已删)
- SwapDealService 注释:去掉 orginPv(InitSwapDealInterest)/保证金腿 引用
- SwapInterest/AccrualContext/InterestRate:去掉 Precision=11 是"保证金腿"、"保证金场景"等错误归因(保证金实际跑精度12)
- MarginAccount/MarginBalance:标注"尚未接线",生产入口指向 CalcMarginInterest,去掉"余额×利率×天数"过度简化
- 测试注释:去掉"无 orginPv/差分"(盘中保留差分)、"提交2 待切换"(已完成)
仅文档/注释,零代码行为变化。
|
2026-08-13 10:58:47 +08:00 |
|
hjhan
|
70550af29a
|
refactor(funding-leg): 清理CalcNotional死参数posiLong/posiShort+修正过时InterestMode注释
- 删除 IFundingLegStrategy.CalcNotional 的 posiLong/posiShort 死参数(多空存续腿界面已禁用,三个实现均不读取),同步三个实现签名、SwapDealService 唯一调用点、FundingLegStrategyTest 7 处调用
- 修正 SwapPosition/SwapFlowEvent/EodSwapPosition 的 InterestMode 字段注释(去掉已删的 3/4,补全 5/6/9)
- 重写 SwapUnwindFloatingLegDiagnosticTdd 过时类注释
零行为变化;编译 0 错误;FundingLegStrategyTest 11/11 通过。
|
2026-08-13 08:51:21 +08:00 |
|
锦麟 王
|
ab90712255
|
#EQD-6947 国联民生-保证金计算整体改造-实现第一版盯市规则(不支持同一客户多部门)(1)保证金规则的设置 阶段1,开放v2
|
2026-08-12 15:38:55 +08:00 |
|
hjhan
|
ff937f24e7
|
refactor(accrual): EOD去退化差分——删除baseNotional死参数
EOD路径 orginPv≡posiPrincipal(调用点line1091/1096实证),notional==baseNotional恒成立,
差分项 notional-baseNotional 恒为0,baseNotional 是死参数。
简化:
- AccrueSimpleEod: 删 notional+baseNotional 两参数,basis=priorNotional 直赋值
- AccrueCompoundEod: 删 baseNotional 参数,非重置日 basis=priorNotional
- SimpleEodBasis 整个删除(不再需要)
- CompoundEodBasis 去掉 baseNotional 参数
- EodContext trace 去掉 baseNotional
- 差分注释块删除(EOD不再有差分)
差分逻辑 notional-baseNotional 只该存在于 unwind 专用路径(Period函数本就没有baseNotional)
净减20行(18增/38删),SwapModule零回归(7基线/508通过/8跳过)
|
2026-08-12 10:58:53 +08:00 |
|
hjhan
|
3b02440979
|
refactor(accrual): 接线CalcDailyCompoundInterestByEod→AccrueCompoundEod + 全链路Trace
- AccrualTrace新增Segment(分段区间/天数/基数/利率)与EodContext(重置日/平仓比例/基数分量)语义方法
- AccrueSimplePeriod/AccrueCompoundPeriod补全AccrualTrace?参数:MarkStart→逐段Segment→复利Rollover→Unwind→MarkEnd
- CalcDailyCompoundInterestByEod内部实现下沉至FundingLegAccrual.AccrueCompoundEod纯函数
删除调试垃圾LogFactory('test').Error,取率/重置日/remainingFraction逻辑保留
- flowEvent.InterestPrincipal/FloatRate副作用在调用方保留(下游EOD播种次日TdInterestPrincipal)
- 全量SwapModule测试零回归(7基线失败/508通过/8跳过)
|
2026-08-12 10:37:52 +08:00 |
|
hjhan
|
3f194f7ccc
|
fix(accrual): Round收口到SwapInterest.Round + 复利分段边界修复
3项修复:
1. SwapInterest.Round 从 private 改为 public:
所有计息路径收口到一处, FundingLegAccrual 不再用裸 Math.Round
2. ApplyUnwind 精度警告:
注释标注'资金腿务必传 FundingLegPrecision=12', 默认11是易忘的坑
3. AccrueCompoundPeriod 分段边界修复(根因):
旧bug: 中间段 IncludeEnd=true 导致重置日利息用了旧本金
修复: 中间段 IncludeEnd=false(半开区间), 重置日归下一段用新本金
对齐旧逐日循环语义: 重置日先更新本金再算息
同时: 中间值不Round(对齐旧代码只在最终输出Round一次)
清理: 删除 SwapInterestAccrueCompoundInArrearsTest 半成品残留
验证: 编译0错误, 7个影子测试全过, 全量520测试7失败(基线一致)。
|
2026-08-12 09:59:53 +08:00 |
|
hjhan
|
5dc8bdbf9e
|
refactor(interest): 计息 trace 命名对齐业界最佳实践
- InterestTrace → AccrualTrace:追踪对象是"计息过程"而非泛指的 Interest,与仓库
既有的 SwapCalcTrace(-Trace 后缀约定) 及 AccrualContext/AccrualBoundary/AccrualPolicy
家族一致;AccrualTrace 经 SwapCalcTrace.Write 常驻落盘,二者职责分清(收集器 vs 落盘通道)。
- InterestStep → AccrualTraceEvent、InterestTraceEntry → AccrualTraceEntry:
条目类别对应 QuantLib/Strata 的"事件"概念(AccrualTraceEvent),命名自描述。
- SwapCalcTrace.Persist → Write:"Persist" 易误读为落库持久化;此处只是写入日志通道,
且类内已有私有 Record(string),故用 Write 避免歧义。
纯改名、数值逻辑零改动;YLErpDAL + UnitTestProject 编译 0 错。
|
2026-08-12 07:05:41 +08:00 |
|
hjhan
|
be3be877ec
|
refactor(interest): 引入 AccrualContext 并将 AccrueCompound 重命名为 AccrueCompoundInArrears
1. 新增 AccrualContext 只读值对象,把 annualDays/precision/trace 三个"与金额利率无关"
的横向参数打包为上下文成员。计息纯函数只吃一个 ctx,签名去噪、可读性提升;
ctx 为只读值对象(非类的实例/静态字段),不破坏纯函数(线程安全、可重入、可测)。
trace 因此成为"传入上下文的成员"而非散落参数,满足"默认成员而非参数"的诉求。
2. AccrueCompound → AccrueCompoundInArrears:精确表达 OIS/SOFR/FR007 的
compounded-in-arrears 语义(每子区间取定盘、段末滚入本金),与
InterestRate.Compounding.Compounded 闭式分支(TRS 下死路径)一刀两断、不再混淆。
纯增量、数值逻辑不变;YLErpDAL + UnitTestProject 编译 0 错 0 警;FR007 两段切换场景
实跑 trace 与旧版数值完全一致。
|
2026-08-12 06:13:38 +08:00 |
|
hjhan
|
fba87bd7cc
|
feat(interest): AccrueCompound 支持每段独立利率 + 发射 Reset/Rollover trace
重构为按重置日切段、每段可有独立利率(resetSchedule),适配 FR007 浮动逐段取价
(取价仍在编排层,原语只吃一个数,与 QuantLib/Strata 同范);trace 记录
重置日前后利率切换与段末并本金(本金增加),完整覆盖"重置日前后/利率切换/本金增减"。
|
2026-08-12 06:05:02 +08:00 |
|
hjhan
|
03861ea369
|
feat(interest): 新增 InterestTrace 结构化追踪收集器
纯值对象(零日志依赖):计息纯函数把"发生了什么"记录为语义化条目
(Day/ResetBefore/ResetAfter/Rollover/Unwind),由适配器统一经 SwapCalcTrace
常驻落盘。ToString 产出稳定可 diff 的逐行文本,新旧引擎同一笔交易可直接 diff
定位"是计算变了还是重构引入漂移"。
|
2026-08-12 06:05:01 +08:00 |
|
hjhan
|
39ec71f268
|
refactor(interest): SwapInterest 计息数学收敛为 InterestRate,新增资金腿精度常量
引入 ToInterestRate 入口把 TRS 利率收敛为通用原语;提取 FundingLegPrecision=12
公共常量,消除 SwapDealService 与 FundingLegAccrual 的重复定义。
|
2026-08-12 05:36:01 +08:00 |
|
hjhan
|
aff540801c
|
feat(interest): 新增通用利息原语 InterestRate(与互换解耦)
单利/复利/连续复利收敛为 Compounding 一个 switch 分支,利息计算不再住在
SwapModule/互换词汇里,谁需要算息都能直接用。连续复利仅 e^(r·t) 一行。
|
2026-08-12 05:36:01 +08:00 |
|
hjhan
|
246392b665
|
cleanup: 删除 SwapInterestAdapter 半成品, 回退 SwapInterest 未提交改动
SwapInterestAdapter + SwapInterest 增强(annualized/segmentRates/
resetCarryInterest) + 配套测试 是半成品, 有G7/G8已知边界,
且破坏现有测试。按审查建议回退, 作为独立PR后续处理。
当前工作区只剩 BondIndex/RateYield 到期日修复。
验证: 编译0错误, 全量513测试7失败(基线一致)。
|
2026-08-11 19:23:21 +08:00 |
|
hjhan
|
a610b962a5
|
docs: InterestModeEnum 补充已删除成员编号注释
记录 3/4/7/8 删除前的名称和编号, 防止误回收。
注释里有数字空位标注(3=已删, 4=已删, 7=已删, 8=已删)。
|
2026-08-11 13:06:36 +08:00 |
|
hjhan
|
e9b54bdcf6
|
cleanup: 删除死代码枚举 mode 3/4/7/8 及相关引用
mode 3(持仓名义本金)/4(持仓市值): 零引用死代码
mode 7/8(多空存续名义本金): 界面已禁用, 无历史数据(用户确认)
删除:
- InterestModeEnum: 移除 持仓名义本金/持仓市值/多头存续名义本金/空头存续名义本金
枚举值保持显式(1/2/5/6/9), DB契约不变
- CalcNotionalByMode: 移除 mode 7/8 的 case
- ConsTrade.InterestModels/InterestNotionalModels: 移除 mode 7/8
- 删除3个 mode 7/8 相关测试方法(场景已不存在)
CalcNotionalByMode 现在只剩 mode 5/6(保证金)的 case,
待 Margin 独立计息入口建成后整体删除。
验证: 编译0错误, 全量508测试7失败(基线一致)。
|
2026-08-11 13:00:52 +08:00 |
|
hjhan
|
8f677d4cb7
|
fix(enum): InterestModeEnum/InterestTypeEnum 显式赋值, 钉死 DB 契约
原枚举成员无显式值, 靠声明顺序隐式得 0..9。
DB(swap_position.InterestMode)、ConsTrade.InterestModels、
SwapFlowEvent(InterestMode==0) 全部依赖此顺序。
一旦有人重排或插入成员, int 映射静默错乱——最难查的 bug。
显式赋值: Unknown=0, 固定值=1, ... 标的期初全价=9。
InterestTypeEnum 同理: 单利=0, 复利=1。
值与原隐式顺序完全一致, 行为零变化。
验证: 编译0错误, 全量507测试7失败(基线一致)。
|
2026-08-11 11:30:59 +08:00 |
|
hjhan
|
250c41b925
|
refactor(interest): 抽取 IIndexFixer 取价接缝 + 清理固定值腿错误测试
为后续拆三类腿做准备,新增 FR007 取价的独立接口层(参考 QuantLib IborIndex
分层),本次零生产代码改动,全部为新增小文件。
新增文件(取价接缝,供后续 SwapDealService 6 处 inline 取价迁移用):
- Framework/YLErp.Core/Interest/IIndexFixer.cs
接口定义:给定取价日和标的代码返回当日利率,取价与计息解耦
- Framework/YLErp.Core/Interest/IndexFixerBase.cs
取价日计算工具:收敛原散落 6 处的 GetNonHolidayDefore(date.AddDays(rule))
- YLErpDAL/Modules/SwapModule/Fr007IndexFixer.cs
生产实现 + GetFixingOrThrow 辅助方法,独立文件便于单测
测试清理(删除基于错误假设的测试):
- 删除 SwapFixedInterestLegClosePercentBugTest.cs 整个文件
该文件假设'固定值腿利息应随平仓比例线性缩放',但固定值是合同写死的、
永远不随平仓比例变化。d1badfe4 的'修复'本身才是错的,当前分支已正确回退
- 修正 SwapUnwindPrepayPrincipalBugTdd.cs 固定值测试方法
断言从'应=Fix×0.5'改为'恒=Fix不随比例变化',对齐正确的业务定义
已知失败(非本次引入,留待后续与拆腿一起修):
- BondTrsAutoSwapScenarioTest 的 AS_001/004/008/009/010/011 共 6 个
原因:SaveAutoSwapDeal 直接调 AddClientCashInCashOut(非virtual)绕过
AddClientCash(virtual)封装,无库环境抛'客户信息未找到'。
从 096d2609 引入时即失败,需 AddClientCashInCashOut 加 virtual + 客户数据
mock,与拆腿那次可测性改造一起做
|
2026-08-10 18:01:37 +08:00 |
|
hjhan
|
d78d5a46c4
|
feat(interest): 新增 TRS 利息腿纯函数库 SwapInterest
独立于 SwapDealService / SwapEodPositionService 的纯函数计息层:无副作用、
同 input 同 output,正交轴(算头算尾 / 单利复利 / unwind / 待实现收益)各自独立。
术语采用金融标准 Unwind / Realized / Unrealized。纯新增零接入核心计息逻辑,
待 Excel 对账确认"绿而不错"后 pilot 替换。
|
2026-08-09 16:07:27 +08:00 |
|
lisong
|
38573596a9
|
Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine
|
2026-08-07 09:34:46 +08:00 |
|
尹峰
|
f256a623df
|
feat: create_eod_bond_lending_rate_table.sql
|
2026-08-06 13:10:05 +08:00 |
|
lisong
|
36877744fa
|
Merge remote-tracking branch 'dest/glms/feature/1.4.2' into feature/p132_74-risk-engine
|
2026-08-05 17:28:20 +08:00 |
|