- 在EodPnlCalculator中添加CalculateEodSwapRiskNewFields方法,实现新口径计算逻辑 - 创建EodSwapRiskNewFields和EodSwapRiskNewResponse模型类,支持新的展示字段 - 实现SearchEodSwapNewList查询方法,复用旧查询权限控制并计算新字段 - 添加index=3的新框架合约Tab页面,使用独立查询接口和列配置 - 前端JavaScript中实现colModelGridEodSwapNew列模型,替换旧字段并新增9个字段 - 完善导出功能支持新Tab的标准格式导出,保持与旧口径分离 - 更新测试用例验证新框架合约前端接线正确性
306 lines
11 KiB
C#
306 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using YLErp.Helpers;
|
|
|
|
namespace YLErp.DBModels
|
|
{
|
|
/// <summary>
|
|
/// 框架合约估值表
|
|
/// </summary>
|
|
[Table("eod_swap")]
|
|
public class eod_swap: DBModelBaseV2
|
|
{
|
|
/// <summary>
|
|
/// 交易日
|
|
/// </summary>
|
|
[DisplayName("交易日")]
|
|
[DataChange]
|
|
public DateTime ValueDate { get; set; }
|
|
/// <summary>
|
|
/// 簿记账户
|
|
/// </summary>
|
|
[DisplayName("簿记账户")]
|
|
[DataChange]
|
|
public int BookId { get; set; }
|
|
/// <summary>
|
|
/// 对手方编码
|
|
/// </summary>
|
|
[DisplayName("对手方编码")]
|
|
[DataChange]
|
|
public int ClientId { get; set; }
|
|
/// <summary>
|
|
/// 互换交易编码id
|
|
/// </summary>
|
|
[DisplayName("互换交易编码id")]
|
|
[DataChange]
|
|
public int SwapTradeId { get; set; }
|
|
/// <summary>
|
|
/// 互换交易编码
|
|
/// </summary>
|
|
[DisplayName("互换交易编码")]
|
|
[DataChange]
|
|
public string SwapTradeNo { get; set; }
|
|
/// <summary>
|
|
/// 产品类型
|
|
/// </summary>
|
|
[DisplayName("产品类型")]
|
|
[DataChange]
|
|
public string StructureType { get; set; }
|
|
/// <summary>
|
|
/// 合约名义本金。取交易原始等价名义本金,表示合约约定规模;
|
|
/// 不等于多头与空头日终腿的代数和。
|
|
/// </summary>
|
|
[DisplayName("合约名义本金")]
|
|
[DataChange]
|
|
public decimal NotionalValue { get; set; }
|
|
/// <summary>
|
|
/// 合约多头名义本金。框架合约展示口径中多头始终为正数。
|
|
/// </summary>
|
|
[DisplayName("合约多头名义本金")]
|
|
[DataChange]
|
|
public decimal NotionalValueLong { get; set; }
|
|
/// <summary>
|
|
/// 合约空头名义本金。框架合约展示口径中空头始终为负数,
|
|
/// 以便与多头直接相加得到净方向。
|
|
/// </summary>
|
|
[DisplayName("合约空头名义本金")]
|
|
[DataChange]
|
|
public decimal NotionalValueShort { get; set; }
|
|
/// <summary>
|
|
/// 合约多头标的市值
|
|
/// </summary>
|
|
[DisplayName("合约多头标的市值")]
|
|
[DataChange]
|
|
public decimal MarketValueLong { get; set; }
|
|
/// <summary>
|
|
/// 合约空头标的市值
|
|
/// </summary>
|
|
[DisplayName("合约空头标的市值")]
|
|
[DataChange]
|
|
public decimal MarketValueShort { get; set; }
|
|
/// <summary>
|
|
/// 合约浮动端待实现收益
|
|
/// </summary>
|
|
[DisplayName("合约浮动端待实现收益")]
|
|
[DataChange]
|
|
|
|
public decimal FloatingPnL { get; set; }
|
|
/// <summary>
|
|
/// 合约利率端待实现收益
|
|
/// </summary>
|
|
[DisplayName("合约利率端待实现收益")]
|
|
[DataChange]
|
|
|
|
public decimal InterestPnL { get; set; }
|
|
/// <summary>
|
|
/// 合约持仓价值
|
|
/// </summary>
|
|
[DisplayName("合约持仓价值")]
|
|
[DataChange]
|
|
|
|
public decimal PostionValue { get; set; }
|
|
/// <summary>
|
|
/// 合约当日实现收益
|
|
/// </summary>
|
|
[DisplayName("合约当日实现收益")]
|
|
[DataChange]
|
|
|
|
public decimal TdRealizedPnL { get; set; }
|
|
/// <summary>
|
|
/// 合约已实现收益
|
|
/// </summary>
|
|
[DisplayName("合约已实现收益")]
|
|
[DataChange]
|
|
|
|
public decimal RealizedPnL { get; set; }
|
|
/// <summary>
|
|
/// 收取对手方初始预付金
|
|
/// </summary>
|
|
[DisplayName("收取对手方初始预付金")]
|
|
[DataChange]
|
|
|
|
public decimal InitMarginGain { get; set; }
|
|
/// <summary>
|
|
/// 收取对手方维持预付金
|
|
/// </summary>
|
|
[DisplayName("收取对手方维持预付金")]
|
|
[DataChange]
|
|
public decimal PostionMarginGain { get; set; }
|
|
/// <summary>
|
|
/// 支付初始预付金
|
|
/// </summary>
|
|
[DisplayName("支付初始预付金")]
|
|
[DataChange]
|
|
public decimal InitMarginLoss { get; set; }
|
|
/// <summary>
|
|
/// 支付维持预付金
|
|
/// </summary>
|
|
[DisplayName("支付维持预付金")]
|
|
[DataChange]
|
|
public decimal PostionMarginLoss { get; set; }
|
|
/// <summary>
|
|
/// 当日平仓数量汇总
|
|
/// </summary>
|
|
[DisplayName("当日平仓数量汇总")]
|
|
[DataChange]
|
|
public decimal TdCloseQty { get; set; }
|
|
/// <summary>
|
|
/// 基点价值DV01
|
|
/// </summary>
|
|
[DataChange]
|
|
public decimal? dv01 { get; set; }
|
|
/// <summary>
|
|
/// 平仓起始日期
|
|
/// </summary>
|
|
[NotMapped]
|
|
public DateTime CloseStartDate { get; set; }
|
|
|
|
}
|
|
/// <summary>
|
|
/// 框架合约返回
|
|
/// </summary>
|
|
public class EodSwapResponse
|
|
{
|
|
public eod_swap position { get; set; }
|
|
public DateTime TradeDate { get; set; }
|
|
public string SwapTradeNo { get; set; }
|
|
public string ClientName { get; set; }
|
|
public string StructureType { get; set; }
|
|
public string AssetBookName { get; set; }
|
|
|
|
public int ClientId { get; set; }
|
|
|
|
public string SwapTradeTypeStr { get; set; }
|
|
|
|
public string UnderlyingType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 合约期内已实现加待实现的付息/分红金额。
|
|
/// 该字段用于框架合约风险展示,不按每日估值报告的“期间付息/期间分红”列拆分。
|
|
/// </summary>
|
|
public decimal PeriodAmount { get; set; }
|
|
|
|
/// <summary>
|
|
/// 合约浮动端待实现收益,取浮动腿盯市收益及未结交易费用,
|
|
/// 不包含期间付息/分红,避免与 <see cref="PeriodAmount"/> 重复。
|
|
/// </summary>
|
|
public decimal FloatingUnrealizedPnl { get; set; }
|
|
|
|
/// <summary>
|
|
/// 付息/分红支付方式:到期轧差时计入到期轧差估值,派息日支付时在期间支付口径展示。
|
|
/// </summary>
|
|
public string InterestPaymentMethod { get; set; }
|
|
|
|
/// <summary>
|
|
/// 合约估值(到期轧差口径)= 浮动端待实现收益 + 利率端待实现收益 + 期间付息/分红。
|
|
/// 仅当支付方式为到期轧差时赋值。
|
|
/// </summary>
|
|
public decimal? MaturityNettingValuation { get; set; }
|
|
|
|
/// <summary>
|
|
/// 合约估值(派息日支付口径)= 浮动端待实现收益 + 利率端待实现收益。
|
|
/// 派息/分红在支付日独立结算,因此不计入该估值。
|
|
/// </summary>
|
|
public decimal? PeriodPaymentValuation { get; set; }
|
|
|
|
/// <summary>
|
|
/// 我方收取的保证金利息累计额。保证金腿原始“支付”方向表示
|
|
/// 对手方向我方支付保证金,利息现金流方向与保证金本金方向相反。
|
|
/// </summary>
|
|
public decimal MarginInterestGain { get; set; }
|
|
|
|
/// <summary>
|
|
/// 我方支付的保证金利息累计额。保证金腿原始“收取”方向表示
|
|
/// 我方收取对手方保证金,应向对手方支付利息;支付金额以负数展示。
|
|
/// </summary>
|
|
public decimal MarginInterestLoss { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// EQD-7084 新“框架合约”Tab 的新增字段及拆分后的估值口径。
|
|
/// 该模型不映射数据库,仅由新查询接口计算返回。
|
|
/// </summary>
|
|
public class EodSwapRiskNewFields
|
|
{
|
|
/// <summary>
|
|
/// 浮动收益端标的类型,仅供前端按债券/非债券选择期初价格精度使用,
|
|
/// 不参与任何收益或估值计算。
|
|
/// </summary>
|
|
public string UnderlyingInstrumentType { get; set; }
|
|
|
|
/// <summary>浮动收益端多空方向。</summary>
|
|
public string UnderlyingDirection { get; set; }
|
|
|
|
/// <summary>浮动收益端标的代码。</summary>
|
|
public string UnderlyingCode { get; set; }
|
|
|
|
/// <summary>期初标的价格;债券按百分价格展示。</summary>
|
|
public decimal? InitialPrice { get; set; }
|
|
|
|
/// <summary>名义数量,取合约名义本金。</summary>
|
|
public decimal NotionalQuantity { get; set; }
|
|
|
|
/// <summary>合约起始日。</summary>
|
|
public DateTime? ContractStartDate { get; set; }
|
|
|
|
/// <summary>合约到期日。</summary>
|
|
public DateTime? ContractMaturityDate { get; set; }
|
|
|
|
/// <summary>利息端基准:FR007 或固定利率。</summary>
|
|
public string InterestBenchmark { get; set; }
|
|
|
|
/// <summary>普通利息腿当前交易日适用利率合计。</summary>
|
|
public decimal InterestRatePrice { get; set; }
|
|
|
|
/// <summary>
|
|
/// 开平仓费用。日终腿已按我方收益方向归一:我方支付为负、我方收取为正;
|
|
/// 新 Tab 单独展示该金额,但估值中仍须计入一次。
|
|
/// </summary>
|
|
public decimal OpeningClosingFee { get; set; }
|
|
|
|
/// <summary>
|
|
/// 不含开平仓费用的浮动端待实现收益,来源为日终浮动腿的 PosiMtmPnL;
|
|
/// 不可再由旧口径的 PosiProfitSum 反推,避免把费用重新混入本列。
|
|
/// </summary>
|
|
public decimal FloatingUnrealizedPnl { get; set; }
|
|
|
|
/// <summary>
|
|
/// 排除初始/维持保证金腿后的普通利息端待实现收益。保证金利息保留在其独立两列,
|
|
/// 且只通过 MarginInterestAmount 参与估值,以满足“利息端仅展示利息端盈亏”的新口径。
|
|
/// </summary>
|
|
public decimal OrdinaryInterestPnl { get; set; }
|
|
|
|
/// <summary>
|
|
/// 保证金利息净额,仅供两种合约估值维持旧总额;前端不直接绑定该字段,
|
|
/// 以防它再次落入“合约利息端待实现收益”。
|
|
/// </summary>
|
|
public decimal MarginInterestAmount { get; set; }
|
|
|
|
/// <summary>收取对手方保证金利息。</summary>
|
|
public decimal MarginInterestGain { get; set; }
|
|
|
|
/// <summary>支付对手方保证金利息。</summary>
|
|
public decimal MarginInterestLoss { get; set; }
|
|
|
|
/// <summary>到期轧差口径估值;仅 DividendPayDate=0 时有值,且包含期间付息/分红。</summary>
|
|
public decimal? MaturityNettingValuation { get; set; }
|
|
|
|
/// <summary>期间支付派息口径估值;仅 DividendPayDate 非 0 时有值,不重复计入期间付息/分红。</summary>
|
|
public decimal? PeriodPaymentValuation { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// EQD-7084 新“框架合约”Tab 响应。继承旧响应以保持原有列字段完全一致,
|
|
/// 新接口只额外序列化新增字段。
|
|
/// </summary>
|
|
public class EodSwapRiskNewResponse : EodSwapResponse
|
|
{
|
|
public EodSwapRiskNewFields NewFields { get; set; }
|
|
}
|
|
}
|