Files
zszq-trs/YLErpDAL/Modules/FinancialModule/CJFinancialVoucherService.cs
T
2024-05-09 14:06:26 +08:00

717 lines
33 KiB
C#

using BaseOUDAL;
using YLErp.BLL;
using YLErp.Configuration;
using YLErp.Model;
using YLErp.Models.Tag;
using YLErp.Modules.RiskListModule;
using YLErp.Modules.TagModule;
using YLErp.Modules.TradeModule;
using YLErp.QdpModule;
namespace YLErp.Modules.FinancialModule
{
/// <summary>
/// 长江财务凭证服务
/// </summary>
public class CJFinancialVoucherService : YLBaseService
{
DateTime _valueDate;
private static List<string> ExcludedTrade = new List<string> { "商品期货", "场内期权", "远期" };
private static Dictionary<string, string> ErpDetailIds = new Dictionary<string, string>();
private static List<string> diedStatusList = new List<string>() { ConsTrade.已到期, ConsTrade.已执行, ConsTrade.已平仓 };
public CJFinancialVoucherService(OptUserInfo userInfo) : base(userInfo)
{
_valueDate = valuedateBLL.ValueDate;
using (var db = new ErpBaseContext())
{
var dictId = db.Dictionaries.FirstOrDefault(x => x.Name == "财务凭证明细段")?.Id;
if (dictId != null)
{
ErpDetailIds = db.DictionaryItems.Where(x => x.DictId == dictId).ToDictionary(x => x.Name, x => x.ShortName);
}
}
}
/// <summary>
/// 获取客商编码
/// </summary>
/// <param name="namekey"></param>
/// <returns></returns>
private string GetErpDetailId(string comment)
{
if (!string.IsNullOrWhiteSpace(comment) && ErpDetailIds.Any())
{
if (ErpDetailIds.ContainsKey(comment))
{
return ErpDetailIds[comment];
}
}
return string.Empty;
}
/// <summary>
/// 一、交易确认(期末持仓成本)
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public FinancialVoucher_CJDto GetTradeConfirmData(FinancialVoucher_CJReq req)
{
var result = new FinancialVoucher_CJDto();
var db = new YLContext();
#region 一、交易确认(期末持仓成本)
var tradeConfirmPeriod = req.EndDate.ToString("yyyy-MM");
var tradeConfirmAccountingDate = req.EndDate.ToString("yyyy/MM/dd");
var tradeConfirmAccountingDate2 = req.EndDate.ToString("yyMMdd");
var tradeConfirmDetailDate = req.EndDate.ToString("yyyyMMdd");
result.TradeConfirmPeriod = tradeConfirmPeriod;
result.TradeConfirmAccountingDate = tradeConfirmAccountingDate;
result.TradeConfirmAccountingDate2 = tradeConfirmAccountingDate2;
result.TradeConfirmDetailPeriod = tradeConfirmDetailDate;
#region 上期
var dayBefore = QdpCalendarHelper.GetNonHolidayDefore(req.StartDate.AddDays(-1));
var reqFin = new FinancialSummaryModelReq()
{
CurrentPeriodDateStart = req.PreStartDate,
CurrentPeriodDateEnd = dayBefore,
TradeTypeList = req.SummaryType != "场外期权" ? ConsTrade.NonOptionTradeTypes : ConsTrade.OptionTradeTypes,
UserAssets = req.UserAssets,
UserClients = req.UserClients
};
var priorPeriodList = tradeBLL.SearchOptionTrade(reqFin);
//权益
//上期卖出场外期权成本
//卖出
result.DebitOriginalAmt1 = Math.Abs((priorPeriodList.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "卖出" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
//买入
result.CreditOriginalAmt1 = Math.Abs((priorPeriodList.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "买入" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
//商品
//卖出
result.DebitOriginalAmt10 = Math.Abs((priorPeriodList.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "卖出" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
//买入
result.CreditOriginalAmt5 = Math.Abs((priorPeriodList.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "买入" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
#endregion
#region 本期
reqFin = new FinancialSummaryModelReq()
{
CurrentPeriodDateStart = req.StartDate,
CurrentPeriodDateEnd = req.EndDate,
SummaryType = req.SummaryType,
UserAssets = req.UserAssets,
UserClients = req.UserClients
};
var finalData = FinancialSummary_Option(reqFin);
//权益
//卖出
result.CreditOriginalAmt2 = Math.Abs((finalData.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "卖出" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
//买入
result.DebitOriginalAmt2 = Math.Abs((finalData.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "买入" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
//商品
//卖出
result.CreditOriginalAmt6 = Math.Abs((finalData.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "卖出" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
//买入
result.DebitOriginalAmt11 = Math.Abs((finalData.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "买入" && x.Status == false).Sum(x => x.TradePrice) ?? 0)).ToString("0.00");
#endregion
//本期-其他应付款
result.CreditOriginalAmt3 = (Math.Abs(double.Parse(result.DebitOriginalAmt1)) + Math.Abs(double.Parse(result.DebitOriginalAmt2)) - (Math.Abs(double.Parse(result.CreditOriginalAmt1)) + Math.Abs(double.Parse(result.CreditOriginalAmt2)))).ToString("0.00");
result.CreditOriginalAmt7 = (double.Parse(result.DebitOriginalAmt1) + double.Parse(result.DebitOriginalAmt2) + double.Parse(result.DebitOriginalAmt10) + double.Parse(result.DebitOriginalAmt11)
- double.Parse(result.CreditOriginalAmt1) - double.Parse(result.CreditOriginalAmt2) - double.Parse(result.CreditOriginalAmt5) - double.Parse(result.CreditOriginalAmt6)).ToString("0.00");
#endregion
#region 二、清算(每交易日平仓盈亏)
result.ClearPeriod = tradeConfirmPeriod;
result.ClearAccountingPeriod = tradeConfirmAccountingDate;
result.ClearAccountingPeriod2 = tradeConfirmAccountingDate2;
result.ClearDetailPeriod = tradeConfirmDetailDate;
////衍生工具_卖出看跌商品期权_公允价值变动
result.DebitOriginalAmt4 = (finalData.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "卖出" && x.Status == true).Sum(x => x.ConfirmPnl) ?? 0).ToString("0.00");
////衍生工具_买入看跌商品期权_公允价值变动
result.DebitOriginalAmt6 = (finalData.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "买入" && x.Status == true).Sum(x => x.ConfirmPnl) ?? 0).ToString("0.00");
////衍生工具_卖出看跌商品期权_公允价值变动
result.DebitOriginalAmt14 = (finalData.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "卖出" && x.Status == true).Sum(x => x.ConfirmPnl) ?? 0).ToString("0.00");
////衍生工具_买入看跌商品期权_公允价值变动
result.DebitOriginalAmt15 = (finalData.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "买入" && x.Status == true).Sum(x => x.ConfirmPnl) ?? 0).ToString("0.00");
//权益
result.DebitOriginalAmt16 = (double.Parse(result.DebitOriginalAmt4) + double.Parse(result.DebitOriginalAmt6)).ToString("0.00");
//商品
result.DebitOriginalAmt17 = (double.Parse(result.DebitOriginalAmt14) + double.Parse(result.DebitOriginalAmt15)).ToString("0.00");
//卖出
result.DebitOriginalAmt22 = (double.Parse(result.DebitOriginalAmt4) + double.Parse(result.DebitOriginalAmt14)).ToString("0.00");
//买入
result.DebitOriginalAmt23 = (double.Parse(result.DebitOriginalAmt6) + double.Parse(result.DebitOriginalAmt15)).ToString("0.00");
////其他应付款-其他
result.DebitOriginalAmt3 = (double.Parse(result.DebitOriginalAmt4) + double.Parse(result.DebitOriginalAmt6) + double.Parse(result.DebitOriginalAmt14) + double.Parse(result.DebitOriginalAmt15)).ToString("0.00");
#endregion
#region 三、每交易日持仓盈亏
result.DailyWinLossPeriod = tradeConfirmPeriod;
result.DailyWinLossAccountingPeriod = tradeConfirmAccountingDate;
result.DailyWinLossAccountingPeriod2 = tradeConfirmAccountingDate2;
result.DailyWinLossDetailPeriod = tradeConfirmDetailDate;
//衍生工具_卖出看跌商品期权_公允价值变动
result.DebitOriginalAmt8 = (finalData.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "卖出").Sum(x => x.Pnl) ?? 0).ToString("0.00");
//衍生工具_买入看跌商品期权_公允价值变动
result.DebitOriginalAmt9 = (finalData.rows.Where(x => x.UnderlyingInstrumentType != "CommodityFutures" && x.TradeDirection == "买入").Sum(x => x.Pnl) ?? 0).ToString("0.00");
result.DebitOriginalAmt18 = (finalData.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "卖出").Sum(x => x.Pnl) ?? 0).ToString("0.00");
result.DebitOriginalAmt19 = (finalData.rows.Where(x => x.UnderlyingInstrumentType == "CommodityFutures" && x.TradeDirection == "买入").Sum(x => x.Pnl) ?? 0).ToString("0.00");
result.DebitOriginalAmt20 = (double.Parse(result.DebitOriginalAmt8) + double.Parse(result.DebitOriginalAmt18)).ToString("0.00");
result.DebitOriginalAmt21 = (double.Parse(result.DebitOriginalAmt9) + double.Parse(result.DebitOriginalAmt19)).ToString("0.00");
result.CreditOriginalAmt4 = (double.Parse(result.DebitOriginalAmt20) + double.Parse(result.DebitOriginalAmt21)).ToString("0.00");
#endregion
#region 会计科目码
var nv = YieldChain.Helpers.UrlHelper.ParseQueryString(PS.Config.ErpElement.YongYouKeMuCode) ?? new System.Collections.Specialized.NameValueCollection();
if (nv.AllKeys.Any())
{
foreach (var key in nv.AllKeys)
{
result.AccountingSubjectCodeDic.Add(key, nv[key]);
}
}
#endregion
return result;
}
/// <summary>
/// 出入金
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public List<FinancialVoucherCashInOut_CJDto> GetCashInOutTotal(FinancialVoucher_CJReq req)
{
var result = new List<FinancialVoucherCashInOut_CJDto>();
using (var db = new YLContext())
{
var states = new List<string> { "已确认", "已结算" };
var directions = new List<string> { "出金", "入金" };
var cashInCashOutQuery = from cico in db.ClientCashInCashOut
where directions.Contains(cico.Direction)
&& cico.ValidState != "InValid" && states.Contains(cico.State)
select cico;
var start = req.StartDate;
var end = req.EndDate;
if (req.StartDate != DateTime.MinValue && start != default)
{
cashInCashOutQuery = cashInCashOutQuery.Where(d => d.HappenDate >= start);
}
if (req.EndDate != DateTime.MinValue && end != default)
{
var tmpdate = end.AddDays(1);
cashInCashOutQuery = cashInCashOutQuery.Where(d => d.HappenDate < tmpdate);
}
var cashInCashOutList = cashInCashOutQuery.OrderByDescending(x => x.HappenDate).ToList();
var periodReq = req.EndDate.ToString("yyyy-MM");
var accountDateReq = req.EndDate.ToString("yyyy/MM/dd");
var accountDateReq2 = req.EndDate.ToString("yyMMdd");
var detailDateReq = req.EndDate.ToString("yyyyMMdd");
//////入金
//入金-借方;出金-贷方
var detailNo = 16;
var LineNo = 10;
var cashinlist = cashInCashOutList.Where(x => x.Direction == "入金").ToList();
var totalcashin = cashinlist.Sum(x => x.Money) ?? 0;
foreach (var cash in cashinlist)
{
var period = cash.HappenDate?.ToString("yyyy-MM");
//获取明细段 代码
var detailSegment = "0"; //从备注去匹配编码
if (!string.IsNullOrWhiteSpace(cash.Comments))
{
detailSegment = GetErpDetailId(cash.Comments?.Trim());
}
var cashindto = new FinancialVoucherCashInOut_CJDto()
{
Direction = cash.Direction,
LineNo = (LineNo).ToString(),
Period = period,
AccountingDate = accountDateReq,
AccountSegment = "100201",
DetailSegment = detailSegment,
DebitOriginalAmount = Math.Abs(cash.Money ?? 0).OtcFormatMoney(grouping: false),
JournalEntriesBName = $"880010tangcheng{accountDateReq2}出入金",
JournalEntriesName = $"880010tangcheng{accountDateReq2}出入金",
JournalEntriesSpec = "出入金",
ProjectSegment = "0",
JournalEntriesSummary = "出入金",
DetailedId = $"tangcheng{detailDateReq}{(detailNo++).ToString().PadLeft(3, '0')}"
};
result.Add(cashindto);
LineNo = LineNo + 10;
}
//////出金
var cashoutlist = cashInCashOutList.Where(x => x.Direction == "出金").ToList();
var totalcashout = cashoutlist.Sum(x => x.Money) ?? 00;
foreach (var cash in cashoutlist)
{
var period = cash.HappenDate?.ToString("yyyy-MM");
//获取明细段 代码
var detailSegment = "0"; //从备注去匹配编码
if (!string.IsNullOrWhiteSpace(cash.Comments))
{
detailSegment = GetErpDetailId(cash.Comments);
}
var cashoutdto2 = new FinancialVoucherCashInOut_CJDto()
{
Direction = cash.Direction,
LineNo = (LineNo).ToString(),
Period = period,
AccountingDate = accountDateReq,
ProjectSegment = "0",
AccountSegment = "100201",
DetailSegment = detailSegment,
CreditOriginalAmount = Math.Abs(cash.Money ?? 0).OtcFormatMoney(grouping: false),
JournalEntriesBName = $"880010tangcheng{accountDateReq2}出入金",
JournalEntriesName = $"880010tangcheng{accountDateReq2}出入金",
JournalEntriesSpec = "出入金",
JournalEntriesSummary = "出入金",
DetailedId = $"tangcheng{detailDateReq}{(detailNo++).ToString().PadLeft(3, '0')}"
};
result.Add(cashoutdto2);
LineNo = LineNo + 10;
}
//汇总
var cashoutdto = new FinancialVoucherCashInOut_CJDto()
{
LineNo = (LineNo).ToString(),
Period = periodReq,
AccountingDate = accountDateReq,
AccountSegment = "211698",//汇总
ProjectSegment = "207",
DetailSegment = "0",
CreditOriginalAmount = (totalcashin - totalcashout).OtcFormatMoney(grouping: false),
JournalEntriesBName = $"880010tangcheng{accountDateReq2}出入金",
JournalEntriesName = $"880010tangcheng{accountDateReq2}出入金",
JournalEntriesSpec = "出入金",
JournalEntriesSummary = "出入金",
DetailedId = $"tangcheng{detailDateReq}{(detailNo).ToString().PadLeft(3, '0')}"
};
result.Add(cashoutdto);
return result;
}
}
public SearchListResult<FinancialSummaryOptionModel> FinancialSummary_Option(FinancialSummaryModelReq req)
{
//默认值查询场外期权的交易
if (req.TradeTypeList == null || req.TradeTypeList.Count == 0)
{
switch (req.SummaryType)
{
case "远期/掉期":
req.TradeTypeList = new List<string> { "远期" };
break;
case "互换":
req.TradeTypeList = new List<string> { "收益互换" };
break;
case "场外期权":
default:
req.SummaryType = "场外期权";
req.TradeTypeList = ConsTrade.OptionTradeTypes;
break;
}
}
var contractBLL = new TradeDocumentService(UserInfo);
var modelList = new List<FinancialSummaryModelBase>();
var searchTradeList = tradeBLL.SearchOptionTrade(req);
var tradeIds = searchTradeList.rows.Select(O => O.TradeId).ToList();
var parentTradeIds = searchTradeList.rows.Select(x => x.ParentTradeId).ToHashSet();
var parentTrades = DbContext.trade.Where(x => parentTradeIds.Contains(x.id)).ToDictionary(n => n.id);
//var cashs = trade_cashBLL.GetTrade_Cashes(tradeIds);
var lastDate = QdpCalendarHelper.GetNonHolidayDefore(req.CurrentPeriodDateStart.AddDays(-1));
var currentDate = QdpCalendarHelper.GetNonHolidayDefore(req.CurrentPeriodDateEnd);
var positionReq = new EodTradePositionReq
{
ValueDateStart = lastDate,
ValueDateEnd = currentDate,
TraderIds = string.Join(",", tradeIds)
};
List<EodTradePosition> positions = null;
if (PS.Config.Company == CompanyEnum.光大光子)
{
positions = new EodTradePositionBLL().SearchList_extend(positionReq)?.rows.Select(O => (EodTradePosition)O).ToList();
}
else
{
positions = new EodTradePositionBLL().SearchList<eod_trade_position>(positionReq)?.rows.Select(O => (EodTradePosition)O).ToList();
}
var totleDeltaCashDict = new Dictionary<string, double>();
List<EodTradePosition> position = null;
Dictionary<int, EodTradeRisk> riskDict = null;
if (PS.Config.Company == CompanyEnum.光大光子 && req.SummaryType == "场外期权")
{
position = new RiskDailyReportService(UserInfo, currentDate).GetFutureList<eod_trade_position_extend>(currentDate).Select(O => (EodTradePosition)O).ToList();
using (var db = new YLContext())
{
if (PS.Config.Company == CompanyEnum.光大光子)
{
riskDict = (from riskDb in db.eod_trade_risk_extend where tradeIds.Contains(riskDb.TradeId) select riskDb).ToList().GroupBy(O => O.TradeId).ToDictionary(K => K.Key, V => (EodTradeRisk)V.OrderByDescending(O => O.ValueDate).First());
}
else
{
riskDict = (from riskDb in db.eod_trade_risk where tradeIds.Contains(riskDb.TradeId) select riskDb).ToList().GroupBy(O => O.TradeId).ToDictionary(K => K.Key, V => (EodTradeRisk)V.OrderByDescending(O => O.ValueDate).First());
}
}
foreach (var item in searchTradeList.rows)
{
if (!totleDeltaCashDict.ContainsKey(item.UnderlyingCode))
{ totleDeltaCashDict[item.UnderlyingCode] = 0; }
if (riskDict.ContainsKey(item.TradeId))
{
totleDeltaCashDict[item.UnderlyingCode] += Math.Abs(riskDict[item.TradeId].DeltaCash);
}
}
}
else
{
position = new List<EodTradePosition>();
riskDict = new Dictionary<int, EodTradeRisk>();
}
var futureDict = position.GroupBy(O => O.UnderlyingCode).ToDictionary(K => K.Key, V => (double)V.ToList().Sum(O => O.PositionPnL));
var feeDict = position.GroupBy(O => O.UnderlyingCode).ToDictionary(K => K.Key, V => (double)V.ToList().Sum(O => O.Commission));
Dictionary<int, List<TagDto>> clientTagList = null;
if (searchTradeList != null && searchTradeList.rows != null && searchTradeList.rows.Any())
{
using (var tagService = new TagService(OptUser))
{
clientTagList = tagService.GetTagByClientIds(searchTradeList.rows.Select(p => p.ClientId).Distinct().ToList());
}
}
if (clientTagList == null)
{
clientTagList = new Dictionary<int, List<TagDto>>();
}
foreach (var item in searchTradeList.rows)
{
if (parentTrades.TryGetValue(item.ParentTradeId, out var parentTrade))
{
item.TradeNumber = parentTrade.TradeNumber;
}
double percent = 1;
if (riskDict.ContainsKey(item.TradeId) && totleDeltaCashDict.ContainsKey(item.UnderlyingCode))
{
var tradePercent = (item.Notional ?? 0) / item.OriginalNotional;
tradePercent = tradePercent == 0 ? 1 : tradePercent;
var totleDeltaCash = riskDict[item.TradeId].DeltaCash;
percent = Math.Abs(totleDeltaCash * tradePercent / totleDeltaCashDict[item.UnderlyingCode]);
}
double? lastPv = positions.FindAll(O => O.TradeId == item.TradeId && O.ValueDate == lastDate).Sum(O => O.Amount == 0 ? 0 : Convert.ToDouble(O.Pv) / O.Amount);
double? lastPnl = positions.FindAll(O => O.TradeId == item.TradeId && O.ValueDate == lastDate).Sum(O => O.Amount == 0 ? 0 : Convert.ToDouble(O.PositionPnL) / O.Amount);
double? pv = positions.FindAll(O => O.TradeId == item.TradeId && O.ValueDate == currentDate).Sum(O => O.Amount == 0 ? 0 : Convert.ToDouble(O.Pv) / O.Amount);
double? Pnl = positions.FindAll(O => O.TradeId == item.TradeId && O.ValueDate == currentDate).Sum(O => O.Amount == 0 ? 0 : Convert.ToDouble(O.PositionPnL) / O.Amount);
//model.ConfirmPnl = model.Status ? clearPrice + tradePrice : null;//我方清算盈亏;
item.LastPv = lastPv * item.Notional;//上期期末市值;
item.LastTotalPnl = lastPnl * item.Notional;//上期末累计浮动盈亏;
item.Pv = pv * item.Notional;//本期期末市值;
item.TotalPnl = Pnl * item.Notional;//本期末累计浮动盈亏;
if (item.TradeDate >= req.CurrentPeriodDateStart)
{ item.LastTotalPnl = 0; }
if (item.UnderlyingCode != null)
{
item.FuturePnl = futureDict.ContainsKey(item.UnderlyingCode) ? futureDict[item.UnderlyingCode] * percent : 0;//期货盈亏(结算价);
item.ServiceFee = feeDict.ContainsKey(item.UnderlyingCode) ? feeDict[item.UnderlyingCode] * percent : 0;//期货手续费;
item.CountRatio = DataCacheProvider.GetUnderlyingDataSource().GetData(item.UnderlyingCode).CountRatio;
}
else
{
item.FuturePnl = 0;//期货盈亏(结算价);
item.ServiceFee = 0;//期货手续费;
item.CountRatio = 1;
}
item.FinancialEntry = null;//财务入账;
var SpotPrice = DbContext.trade.Where(l => l.id == item.TradeId).FirstOrDefault()?.SpotPrice;
item.SurvivingNominalPrincipal = item.PositionAmount * SpotPrice;
//拼装标签值
if (clientTagList.ContainsKey(item.ClientId))
{
item.Tags = clientTagList[item.ClientId];
item.OutputTags = TagService.GetOutputTagsStr(item.Tags);
}
}
return searchTradeList;
}
}
public class FinancialVoucher_CJReq
{
public DateTime PreStartDate { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string SummaryType { get; set; }
public List<int> UserAssets { get; set; }
public List<int> UserClients { get; set; }
}
public class FinancialVoucher_CJDto
{
#region 期间
public string TradeConfirmPeriod { get; set; }
public string TradeConfirmDetailPeriod { get; set; }
public string ClearPeriod { get; set; }
public string ClearDetailPeriod { get; set; }
public string DailyWinLossPeriod { get; set; }
public string DailyWinLossDetailPeriod { get; set; }
#endregion
#region 记账日期
public string TradeConfirmAccountingDate { get; set; }
public string ClearAccountingPeriod { get; set; }
public string DailyWinLossAccountingPeriod { get; set; }
public string TradeConfirmAccountingDate2 { get; set; }
public string ClearAccountingPeriod2 { get; set; }
public string DailyWinLossAccountingPeriod2 { get; set; }
#endregion
#region 借方原币金额
/// <summary>
/// 上期-卖出-场外期权-权益-成本-未完结
/// </summary>
public string DebitOriginalAmt1 { get; set; }
/// <summary>
/// 本期-买入-场外期权-权益-成本-未完结
/// </summary>
public string DebitOriginalAmt2 { get; set; }
/// <summary>
/// 本期-清算盈亏之和
/// </summary>
public string DebitOriginalAmt3 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-权益-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt4 { get; set; }
public string DebitOriginalAmt5 { get; set; }
/// <summary>
/// 本期-买入-场外期权-权益-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt6 { get; set; }
public string DebitOriginalAmt7 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-权益-持仓盈亏
/// </summary>
public string DebitOriginalAmt8 { get; set; }
/// <summary>
/// 本期-买入-场外期权-权益-持仓盈亏
/// </summary>
public string DebitOriginalAmt9 { get; set; }
/// <summary>
/// 上期-卖出-场外期权-商品-成本-未完结
/// </summary>
public string DebitOriginalAmt10 { get; set; }
/// <summary>
/// 本期-买入-场外期权-商品-成本-未完结
/// </summary>
public string DebitOriginalAmt11 { get; set; }
public string DebitOriginalAmt12 { get; set; }
public string DebitOriginalAmt13 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-商品-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt14 { get; set; }
/// <summary>
/// 本期-买入-场外期权-商品-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt15 { get; set; }
/// <summary>
/// 本期-(卖出买入之和)-场外期权-权益-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt16 { get; set; }
/// <summary>
/// 本期-(卖出买入之和)-场外期权-商品-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt17 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-商品-持仓盈亏
/// </summary>
public string DebitOriginalAmt18 { get; set; }
/// <summary>
/// 本期-买入-场外期权-商品-持仓盈亏
/// </summary>
public string DebitOriginalAmt19 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-(权益商品之和)-持仓盈亏
/// </summary>
public string DebitOriginalAmt20 { get; set; }
/// <summary>
/// 本期-买入-场外期权-(权益商品之和)-持仓盈亏
/// </summary>
public string DebitOriginalAmt21 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-(权益商品之和)-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt22 { get; set; }
/// <summary>
/// 本期-买入-场外期权-(权益商品之和)-清算盈亏-完结
/// </summary>
public string DebitOriginalAmt23 { get; set; }
#endregion
#region 贷方原币金额
/// <summary>
/// 上期-买入-场外期权-权益-成本-未完结
/// </summary>
public string CreditOriginalAmt1 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-权益-成本-未完结
/// </summary>
public string CreditOriginalAmt2 { get; set; }
public string CreditOriginalAmt3 { get; set; }
/// <summary>
/// 本期-持仓盈亏之和
/// </summary>
public string CreditOriginalAmt4 { get; set; }
/// <summary>
/// 上期-买入-场外期权-商品-成本-未完结
/// </summary>
public string CreditOriginalAmt5 { get; set; }
/// <summary>
/// 本期-卖出-场外期权-商品-成本-未完结
/// </summary>
public string CreditOriginalAmt6 { get; set; }
/// <summary>
/// 本期-成本-其他应付款
/// </summary>
public string CreditOriginalAmt7 { get; set; }
#endregion
#region 会计科目段
public Dictionary<string, string> AccountingSubjectCodeDic { get; set; } = new Dictionary<string, string>();
#endregion
#region 出入金
public List<FinancialVoucherCashInOut_CJDto> CashInOutInfoList { get; set; }
#endregion
}
public class FinancialVoucherCashInOut_CJDto
{
public string Direction { get; set; }
/// <summary>
/// 行号
/// </summary>
public string LineNo { get; set; }
/// <summary>
/// 期间(账期)
/// </summary>
public string Period { get; set; }
/// <summary>
/// 记账日期
/// </summary>
public string AccountingDate { get; set; }
/// <summary>
/// 会计科目段
/// </summary>
public string AccountSegment { get; set; }
/// <summary>
/// 明细段
/// </summary>
public string DetailSegment { get; set; }
/// <summary>
/// 项目段
/// </summary>
public string ProjectSegment { get; set; }
/// <summary>
/// 借方原币金额
/// </summary>
public string DebitOriginalAmount { get; set; }
/// <summary>
/// 贷方原币金额
/// </summary>
public string CreditOriginalAmount { get; set; }
/// <summary>
/// 日记账批名
/// </summary>
public string JournalEntriesBName { get; set; }
/// <summary>
/// 日记账名称
/// </summary>
public string JournalEntriesName { get; set; }
/// <summary>
/// 日记账说明
/// </summary>
public string JournalEntriesSpec { get; set; }
/// <summary>
/// 日记账行摘要
/// </summary>
public string JournalEntriesSummary { get; set; }
/// <summary>
/// 明细行标识
/// </summary>
public string DetailedId { get; set; }
}
}