feat(swap): 添加公司行为现金分红按登记日权益数量计算功能
- 新增 CalcBondPayment 方法支持传入公司行为权益数量参数 - 在 SwapEodPositionService 中识别现金分红类型的公司行为持仓 - 修改 CopyEodPosition 和 UpdateEodPosition 方法传递公司行为前的数量信息 - 更新 SaveCurrentEodInitalPosi 方法支持公司行为数量计算 - 在 BondPaymentService 中实现公司行为现金分红按登记日权益数量计算逻辑 - 添加单元测试验证公司行为现金分红使用除权前数量的计算功能
This commit is contained in:
@@ -189,10 +189,26 @@ namespace YLErp.Modules.EodModule
|
||||
decimal qty,
|
||||
decimal longRatio,
|
||||
decimal payDirection)
|
||||
{
|
||||
return CalcPayment(payments, qty, longRatio, payDirection, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 公司行为现金分红按登记日权益数量计算;同一窗口中的原生债券付息仍按当前持仓数量计算。
|
||||
/// </summary>
|
||||
public decimal CalcPayment(
|
||||
List<BondPayment> payments,
|
||||
decimal qty,
|
||||
decimal longRatio,
|
||||
decimal payDirection,
|
||||
decimal? corporateActionQty)
|
||||
{
|
||||
var actualAmount = (payments ?? new List<BondPayment>()).Sum(payment =>
|
||||
{
|
||||
var paymentAmount = (payment.payment_interest ?? 0m) * qty;
|
||||
var paymentQty = payment.IsCorporateActionCashDividend
|
||||
? corporateActionQty ?? qty
|
||||
: qty;
|
||||
var paymentAmount = (payment.payment_interest ?? 0m) * paymentQty;
|
||||
// bond_payment_info 原生期间付息按每 100 份存储;由 ex_dividend_info 补充的
|
||||
// 公司行为现金分红按每 10 份存储。Fund 标的可能同时命中两类记录,故必须逐条分流。
|
||||
return payment.IsCorporateActionCashDividend
|
||||
|
||||
Reference in New Issue
Block a user