feat(bond): 支持股票和基金现金分红纳入债券支付计算 - 收紧过度开发行为
- 实现股票/基金现金分红数据从 ex_dividend_info 同步到 BondPayment - 新增公司行为去重机制,避免镜像任务完成后重复计息 - 统一现金分红存储口径为"每 10 份派现金额",保持与同步任务一致性 - 修改 CalcPayment 方法,股票/基金分红需除以 10 转换实际现金金额 - 添加单元测试验证债券票息和股票/基金分红的不同计算方式 - 更新文档注释说明"每 10 份派现金额"存储规范 - 修复公司行为生效日处理逻辑,确保正确应用除权系数 - 扩展测试覆盖股票类证券的公司行为处理场景
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
using YLErp.DBModels;
|
||||
namespace YLErp.Modules.EodModule
|
||||
{
|
||||
[TestClass]
|
||||
public class BondPaymentServiceCalculationTest
|
||||
{
|
||||
private static BondPaymentService CreateService()
|
||||
{
|
||||
return new BondPaymentService(
|
||||
new OptUserInfo(0, nameof(BondPaymentServiceCalculationTest), OptUserFrom.UnitTest));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CalcPayment_BondCoupon_KeepsPerHundredScale()
|
||||
{
|
||||
var payments = new List<BondPayment>
|
||||
{
|
||||
new BondPayment { payment_interest = 1m }
|
||||
};
|
||||
|
||||
// 债券票息 1 表示每 100 元面值付 1 元:1 * 1000 / 100 = 10。
|
||||
var actual = CreateService().CalcPayment(
|
||||
payments,
|
||||
qty: 1000m,
|
||||
longRatio: 1m,
|
||||
payDirection: 1m);
|
||||
|
||||
Assert.AreEqual(10m, actual);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CalcPayment_StockOrFundDividend_DoesNotApplyBondScale()
|
||||
{
|
||||
var payments = new List<BondPayment>
|
||||
{
|
||||
new BondPayment { payment_interest = 10m }
|
||||
};
|
||||
|
||||
// GiveCashAmount=10(每 10 份派 10)时,payment_interest 直接存 10;
|
||||
// 持仓 1000 份的现金分红 = 10 * 1000 / 10 = 1000,不能再套债券报价的 /100 换算。
|
||||
var actual = CreateService().CalcPayment(
|
||||
payments,
|
||||
qty: 1000m,
|
||||
longRatio: 1m,
|
||||
payDirection: 1m,
|
||||
useBondPriceScale: false);
|
||||
|
||||
Assert.AreEqual(1000m, actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user