feat(bond): 添加公司行为现金分红标识并优化付息计算逻辑

- 在 BondPayment 模型中添加 IsCorporateActionCashDividend 属性用于区分不同数据来源
- 修改 BondPaymentService 中的 CalcPayment 方法,按每条记录来源分别处理金额单位转换
- 更新单元测试以验证混合债券付息和公司行为分红的正确计算
- 移除不再需要的 useBondPriceScale 参数简化方法接口
- 修正注释说明以反映新的按记录类型分别计算的逻辑
This commit is contained in:
张名锐
2026-08-21 16:51:55 +08:00
parent 02da9d78a3
commit 392e36a820
5 changed files with 55 additions and 46 deletions
@@ -29,11 +29,11 @@ namespace YLErp.Modules.EodModule
}
[TestMethod]
public void CalcPayment_StockOrFundDividend_DoesNotApplyBondScale()
public void CalcPayment_CorporateActionDividend_UsesPerTenScale()
{
var payments = new List<BondPayment>
{
new BondPayment { payment_interest = 10m }
new BondPayment { payment_interest = 10m, IsCorporateActionCashDividend = true }
};
// GiveCashAmount=10(每 10 份派 10)时,payment_interest 直接存 10
@@ -42,10 +42,29 @@ namespace YLErp.Modules.EodModule
payments,
qty: 1000m,
longRatio: 1m,
payDirection: 1m,
useBondPriceScale: false);
payDirection: 1m);
Assert.AreEqual(1000m, actual);
}
[TestMethod]
public void CalcPayment_FundMixedBondPaymentAndCorporateAction_UsesEachRecordScale()
{
var payments = new List<BondPayment>
{
// bond_payment_info:每 100 份付 2200000 份应为 4000。
new BondPayment { payment_interest = 2m },
// ex_dividend_info:每 10 份派 10200000 份应为 200000。
new BondPayment { payment_interest = 10m, IsCorporateActionCashDividend = true }
};
var actual = CreateService().CalcPayment(
payments,
qty: 200000m,
longRatio: 1m,
payDirection: 1m);
Assert.AreEqual(204000m, actual);
}
}
}