feat(bond): 支持股票和基金现金分红纳入债券支付计算 - 收紧过度开发行为
- 实现股票/基金现金分红数据从 ex_dividend_info 同步到 BondPayment - 新增公司行为去重机制,避免镜像任务完成后重复计息 - 统一现金分红存储口径为"每 10 份派现金额",保持与同步任务一致性 - 修改 CalcPayment 方法,股票/基金分红需除以 10 转换实际现金金额 - 添加单元测试验证债券票息和股票/基金分红的不同计算方式 - 更新文档注释说明"每 10 份派现金额"存储规范 - 修复公司行为生效日处理逻辑,确保正确应用除权系数 - 扩展测试覆盖股票类证券的公司行为处理场景
This commit is contained in:
@@ -77,6 +77,38 @@ namespace YLErp.Modules.SwapModule
|
||||
"未恢复基线时不得擅自改写前端请求,沿用既有当日实时流程");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FCA_UW_008_股票TRS平仓恢复有效Eod基线()
|
||||
{
|
||||
var realtime = CreateRealtimeFundPosition();
|
||||
realtime.UnderlyingCode = "STOCK.TEST";
|
||||
realtime.UnderlyingInstrumentType = ConsGlobal.InstrumentType.Stock;
|
||||
realtime.PosiQuantity = 1000m;
|
||||
realtime.PosiGrossPrice = 100m;
|
||||
realtime.PosiNetPrice = 100m;
|
||||
realtime.PosiNetFeePrice = 100m;
|
||||
realtime.PosiNetNoFeePrice = 100m;
|
||||
realtime.PosiNotionalValue = 100000m;
|
||||
|
||||
var eod = CreateEod(ExDate, 2000m, 50m);
|
||||
eod.UnderlyingCode = "STOCK.TEST";
|
||||
eod.UnderlyingInstrumentType = ConsGlobal.InstrumentType.Stock;
|
||||
|
||||
var service = CreateService(SwapDealTestFactory.CreateTrade(), realtime, eod, hasCompletedFlow: false);
|
||||
var unwindData = CreateFullCloseUnwindData();
|
||||
unwindData.ValueDate = ExDate;
|
||||
unwindData.UnwindDate = ExDate.AddDays(1);
|
||||
|
||||
Assert.IsTrue(service.RestoreEffectiveFundPositionForTest(unwindData, ExDate));
|
||||
Assert.AreEqual(2000m, realtime.PosiQuantity,
|
||||
"Stock TRS 生效日盘中平仓应使用有效 EOD 数量,不能继续使用除权前实时数量");
|
||||
Assert.AreEqual(50m, realtime.PosiGrossPrice,
|
||||
"Stock TRS 生效日盘中平仓应使用有效 EOD 价格");
|
||||
Assert.AreEqual(2000m, unwindData.PositionQty);
|
||||
Assert.AreEqual(2000m, unwindData.CloseQty);
|
||||
Assert.AreEqual(50m, unwindData.FlowEvents.Single().PosiGrossPrice);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FCA_UW_005_生效日盘中恢复前一Eod后再套除权()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user