Files
zszq-trs/YLErpDAL/Modules/SuperviseReportModule/SAC/Model/OptionTerminationModel.cs
T

217 lines
13 KiB
C#

using Newtonsoft.Json;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Xml.Serialization;
using YLErp.Modules.SuperviseReportModule.SAC.Common;
using static YLErp.DBModels.Consts.ConsReport;
namespace YLErp.Modules.SuperviseReportModule.SAC.Model
{
/// <summary>
/// 了结确认书
/// </summary>
[Table("A1007_OptionTermination")]
public class OptionTerminationModel : ReportBaseModel
{
/// <summary>
/// 操作标识
/// <para>长度:1</para>
/// <para>必填:是</para>
/// <para>说明:<see cref="OptFlagsEnum"/></para>
/// </summary>
[XmlIgnore]
[SacDescription("OperationType", "操作标识", "1", true, "")]
public OptFlagsEnum OperationType { get; set; }
/// <summary>
/// 业务编号
/// <para>长度:50</para>
/// <para>必填:否</para>
/// <para>说明:校验规则:补正时必填;</para>
/// </summary>
[CheckConditionStringValue(ConditionName = nameof(OperationType), ConditionValue = "A", CheckHandleNameArr = new[] { "B" })]
[CheckConditionStringNEQValue(ConditionName = nameof(OperationType), ConditionValue = "A", CheckHandleNameArr = new[] { "A" })]
[CheckStringMaxLength(MaxLength = 50, CheckHandleName = "A")]
[CheckStringMaxLength(MaxLength = 50, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("BizID", "业务编号", "50", false, "校验规则:补正时必填;")]
public new string BizID { get; set; }
/// <summary>
/// 操作事件编号
/// <para>长度:6</para>
/// <para>必填:是</para>
/// <para>
/// 说明:存续期发生相关事件时,必填;
/// 同一笔交易确认书下应当保证唯一性,并按照事件发生顺序进行编号,起始编号为0000.
/// 如一笔交易下依次发生展期\调仓\终止事件,编号应当分别为0000\0001\0002,
/// 场外业务报告系统返回编号分别为E0000\R0001\T0002
/// </para>
/// </summary>
[CheckStringLengthInMap(Map = new[] { 4, 5 })]
[DefaultValue("")]
[SacDescription("DurationEventNO", "操作事件编号", "6", true, "存续期发生相关事件时,必填;\r\n同一笔交易确认书下应当保证唯一性,并按照事件发生顺序进行编号,起始编号为0000.\r\n如一笔交易下依次发生展期、调仓、终止事件,编号应当分别为0000、0001、0002,\r\n场外业务报告系统返回编号分别为E0000、R0001、T0002;")]
public new string DurationEventNO { get; set; }
/// <summary>
/// 交易确认书编号(双方约定)
/// <para>长度:100</para>
/// <para>必填:是</para>
/// <para>说明:双方约定;</para>
/// </summary>
[CheckStringMaxLength(MaxLength = 100)]
[DefaultValue("")]
[SacDescription("ConfirmationNo", "交易确认书编号(双方约定)", "100", true, "双方约定;")]
public string ConfirmationNo { get; set; }
/// <summary>
/// 存续期操作类型
/// <para>长度:2</para>
/// <para>必填:是</para>
/// <para>说明:<see cref="YLErp.DBModels.Consts.ConsReport.OperationTypeMap"/>敲入、敲出只限于自动赎回、安全气囊、障碍及其组合类期权填写</para>
/// </summary>
[CheckStringInMap(Map = new[] { "01", "02", "03", "05", "06" })]
[DefaultValue("")]
[SacDescription("DurationOperationType", "存续期操作类型", "2", true, "敲入、敲出只限于自动赎回、安全气囊、障碍及其组合类期权填写")]
public string DurationOperationType { get; set; }
/// <summary>
/// 操作发生日期
/// <para>长度:10</para>
/// <para>必填:是</para>
/// <para>说明:分别为“确定进行展期日期”“合约终止日期”“交易发生违约日期”“发生敲入事件日期”“发生敲出事件日期”</para>
/// </summary>
// [CheckConditionStringInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new[] { "02", "03" }, CheckHandleNameArr = new[] { "A" })]
// [CheckConditionStringNotInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new[] { "02", "03" }, CheckHandleNameArr = new[] { "B" })]
[CheckStringMaxLength(MaxLength = 10)]
[CheckStringIsDateTimeFormat()]
// [CheckStringMaxLength(MaxLength = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("ExpirationDate", "操作发生日期", "10", true, "分别为“确定进行展期日期”“合约终止日期”“交易发生违约日期”“发生敲入事件日期”“发生敲出事件日期”")]
public string ExpirationDate { get; set; }
/// <summary>
/// 展期后到期日
/// <para>长度:10</para>
/// <para>必填:否</para>
/// <para>说明:当“存续期操作类型”为“展期”时,必填;不存在展期操作数据,不得早于原合约到期日;存在展期操作数据,不得早于最近一次展期数据的“展期后到期日”</para>
/// </summary>
[CheckConditionStringValue(ConditionName = nameof(DurationOperationType), ConditionValue = "01", CheckHandleNameArr = new[] { "A" })]
[CheckConditionStringNEQValue(ConditionName = nameof(DurationOperationType), ConditionValue = "01", CheckHandleNameArr = new[] { "B" })]
[CheckStringMaxLength(MaxLength = 10, CheckHandleName = "A")]
[CheckStringIsDateTimeFormat(CheckHandleName = "A")]
[CheckStringMaxLength(MaxLength = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("RenewalDate", "展期后到期日", "10", false, "当“存续期操作类型”为“展期”时,必填;不存在展期操作数据,不得早于原合约到期日;存在展期操作数据,不得早于最近一次展期数据的“展期后到期日”")]
public string RenewalDate { get; set; }
/// <summary>
/// 违约方
/// <para>长度:2</para>
/// <para>必填:否</para>
/// <para>说明:<see cref="FillPartyMap"/>当"存续期操作类型"为"违约终止"时,必填</para>
/// </summary>
[CheckConditionStringValue(ConditionName = nameof(DurationOperationType), ConditionValue = "03", CheckHandleNameArr = new[] { "A" })]
[CheckConditionStringNEQValue(ConditionName = nameof(DurationOperationType), ConditionValue = "03", CheckHandleNameArr = new[] { "B" })]
[CheckStringInMap(Map = new[] { "0", "1" }, CheckHandleName = "A")]
[CheckStringLength(Length = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("DefaultingParty", "违约方", "2", false, "当存续期操作类型为违约终止时,必填;")]
public string DefaultingParty { get; set; }
/// <summary>
/// 违约事件说明
/// <para>长度:1024</para>
/// <para>必填:否</para>
/// <para>说明:当"存续期操作类型"为"违约终止"时,必填</para>
/// </summary>
[CheckConditionStringValue(ConditionName = nameof(DurationOperationType), ConditionValue = "03", CheckHandleNameArr = new[] { "A" })]
[CheckConditionStringNEQValue(ConditionName = nameof(DurationOperationType), ConditionValue = "03", CheckHandleNameArr = new[] { "B" })]
[CheckStringMaxLength(MaxLength = 1024, CheckHandleName = "A")]
[CheckStringMaxLength(MaxLength = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("DefaultEvent", "违约事件说明", "1024", false, "当存续期操作类型为违约终止时,必填;")]
public string DefaultEvent { get; set; }
/// <summary>
/// 名义本金变动(元)
/// <para>长度:36,2</para>
/// <para>必填:否</para>
/// <para>说明:当"存续期操作类型"选择"终止""违约终止"时,必填,数值必须为负数</para>
/// </summary>
[CheckConditionStringInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new[] { "02", "03" }, CheckHandleNameArr = new[] { "A" })]
[CheckConditionStringNotInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new[] { "02", "03" }, CheckHandleNameArr = new[] { "B" })]
[CheckStringIntLength(BeforePointMaxLength = 36, AfterPointLength = 2, MaxValue = 0, CheckHandleName = "A")]
[CheckStringLength(Length = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("TerminationAmount", "名义本金变动(元)", "36,2", false, "当存续期操作类型选择终止、违约终止时,必填,数值必须为负数;")]
public string TerminationAmount { get; set; }
/// <summary>
/// 存量名义本金(元)
/// <para>长度:36,2</para>
/// <para>必填:是</para>
/// <para>说明:大于等于 0 的数字</para>
/// </summary>
[CheckStringIntLength(AfterPointLength = 2, BeforePointMaxLength = 36, MinValue = 0)]
[DefaultValue("")]
[SacDescription("Balance", "存量名义本金(元)", "36,2", true, "大于等于 0 的数字")]
public string Balance { get; set; }
/// <summary>
/// 本次支付金额(元)
/// <para>长度:36,2</para>
/// <para>必填:否</para>
/// <para>说明:校验规则:1 当存续期操作类型,选择终止\违约终止时必填;2 支付为正,收取为负</para>
/// </summary>
[CheckConditionStringInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new string[] { "02", "03" }, CheckHandleNameArr = new[] { "A" })]
[CheckConditionStringNotInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new string[] { "02", "03" }, CheckHandleNameArr = new[] { "B" })]
[CheckStringIntLength(AfterPointLength = 2, BeforePointMaxLength = 36, CheckHandleName = "A")]
[CheckStringMaxLength(MaxLength = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("AmountPaidThisTime", "本次支付金额(元)", "36,2", false, "校验规则:\r\n1 当存续期操作类型,选择终止、违约终止时必填;\r\n2 支付为正,收取为负;")]
public string AmountPaidThisTime { get; set; }
/// <summary>
/// 已了结交易实际收益率(%)
/// <para>长度:8,2</para>
/// <para>必填:否</para>
/// <para>说明:当“存续期操作类型”选择“终止”“违约终止”时,必填;</para>
/// </summary>
[CheckConditionStringInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new string[] { "02", "03" }, CheckHandleNameArr = new[] { "A" })]
[CheckConditionStringNotInMap(ConditionName = nameof(DurationOperationType), ConditionMap = new string[] { "02", "03" }, CheckHandleNameArr = new[] { "B" })]
[CheckStringIntLength(AfterPointLength = 2, BeforePointMaxLength = 8, CheckHandleName = "A")]
[CheckStringMaxLength(MaxLength = 0, Required = false, CheckHandleName = "B")]
[DefaultValue("")]
[SacDescription("ClosedTransactionsRealRateReturn", "已了结交易实际收益率(%)", "8,2", false, "当“存续期操作类型”选择“终止”“违约终止”时,必填;")]
public string ClosedTransactionsRealRateReturn { get; set; }
/// <summary>
/// 存续期信息附件
/// <para>长度:</para>
/// <para>必填:否</para>
/// <para>说明:校验规则:只支持 PDF 格式</para>
/// </summary>
[CheckStringEndsWith(EndsWithString = ".pdf", Required = false)]
[DefaultValue("")]
[SacDescription("OptionDurationManagementAtt", "存续期信息附件", "", false, "校验规则:只支持 PDF 格式")]
public string OptionDurationManagementAtt { get; set; }
/// <summary>
/// 障碍事件状态
/// <para>长度:2</para>
/// <para>必填:否</para>
/// <para>说明:<see cref="BarrierEventStatusMap"/>根据存续期操作类型中 05 敲入、06 敲出的填写情况,由系统自动取值,填报方无需填写报送</para>
/// </summary>
[CheckStringMaxLength(MaxLength = 2, Required = false)]
[DefaultValue("")]
[SacDescription("BarrierEventStatus", "障碍事件状态", "2", false, "根据存续期操作类型中 05 敲入、06 敲出的填写情况,由系统自动取值,填报方无需填写报送")]
public string BarrierEventStatus { get; set; }
[XmlIgnore]
[DefaultValue("")]
[SacDescription("TradeId", "本次支付金额", "36,2", false, "校验规则:\r\n1 当存续期操作类型,选择终止、违约终止时必填;\r\n2 保留两位小数;\r\n3 TODO 选展期时,该字段不能填,否则报送失败;")]
public string TradeId { get; set; }
/// <summary>
/// 空白1
/// </summary>
[XmlIgnore]
[DefaultValue("")]
[SacDescription("Blank1", "空白1", "", false, "")]
public string Blank1 { get; set; }
/// <summary>
/// 空白2
/// </summary>
[XmlIgnore]
[DefaultValue("")]
[SacDescription("Blank2", "空白2", "", false, "")]
public string Blank2 { get; set; }
}
}