diff --git a/ifrs17-template/Test/ImportStorageTest.ipynb b/ifrs17-template/Test/ImportStorageTest.ipynb index 11c212dd..73c83161 100644 --- a/ifrs17-template/Test/ImportStorageTest.ipynb +++ b/ifrs17-template/Test/ImportStorageTest.ipynb @@ -427,15 +427,15 @@ "cell_type": "code", "source": [ "var sampleGic = new GroupOfInsuranceContract(){Portfolio = \"P1\"};", - "\nvar inputDataGic = new GroupOfInsuranceContract[]{ sampleGic with {SystemName = \"Gross1\", LiabilityType = LiabilityTypes.LRC},", - "\n sampleGic with {SystemName = \"Gross2\", LiabilityType = LiabilityTypes.LRC},", - "\n sampleGic with {SystemName = \"Gross3\", LiabilityType = LiabilityTypes.LRC},", + "\nvar inputDataGic = new GroupOfInsuranceContract[]{ sampleGic with {SystemName = \"Gross1\", LiabilityType = LiabilityTypes.LRC, ContractualCurrency = \"CHF\", ValuationApproach = \"BBA\"},", + "\n sampleGic with {SystemName = \"Gross2\", LiabilityType = LiabilityTypes.LRC, ContractualCurrency = \"CHF\", ValuationApproach = \"BBA\"},", + "\n sampleGic with {SystemName = \"Gross3\", LiabilityType = LiabilityTypes.LRC, ContractualCurrency = \"CHF\", ValuationApproach = \"BBA\"},", "\n };", "\n", "\nvar sampleGric = new GroupOfReinsuranceContract(){Portfolio = \"ReP1\"};", - "\nvar inputDataGric = new GroupOfReinsuranceContract[]{ sampleGric with {SystemName = \"Reins1\", LiabilityType = LiabilityTypes.LRC},", - "\n sampleGric with {SystemName = \"Reins2\", LiabilityType = LiabilityTypes.LRC},", - "\n sampleGric with {SystemName = \"Reins3\", LiabilityType = LiabilityTypes.LRC},", + "\nvar inputDataGric = new GroupOfReinsuranceContract[]{ sampleGric with {SystemName = \"Reins1\", LiabilityType = LiabilityTypes.LRC, ContractualCurrency = \"CHF\", ValuationApproach = \"BBA\"},", + "\n sampleGric with {SystemName = \"Reins2\", LiabilityType = LiabilityTypes.LRC, ContractualCurrency = \"CHF\", ValuationApproach = \"BBA\"},", + "\n sampleGric with {SystemName = \"Reins3\", LiabilityType = LiabilityTypes.LRC, ContractualCurrency = \"CHF\", ValuationApproach = \"BBA\"},", "\n };", "\nvar sampleDnState = new DataNodeState {Partition = reportingNodePartition.Id, Year = args.Year, Month = args.Month, State = State.Active};", "\nvar inputDataState = new DataNodeState[]{ sampleDnState with {DataNode = \"Gross1\"} ,", diff --git a/ifrs17/DataModel/DataStructure.ipynb b/ifrs17/DataModel/DataStructure.ipynb index 2521b257..b251339d 100644 --- a/ifrs17/DataModel/DataStructure.ipynb +++ b/ifrs17/DataModel/DataStructure.ipynb @@ -1648,6 +1648,8 @@ "\n public string LiabilityType { get; init; }", "\n public string Profitability { get; init; }", "\n public string Partner { get; init; }", + "\n public string YieldCurveName { get; init; }", + "\n ", "\n ", "\n //DataNodeState", "\n public int Year { get; init; }", diff --git a/ifrs17/Import/ImportStorage.ipynb b/ifrs17/Import/ImportStorage.ipynb index 3bce6f0b..bc20e709 100644 --- a/ifrs17/Import/ImportStorage.ipynb +++ b/ifrs17/Import/ImportStorage.ipynb @@ -301,7 +301,7 @@ "\n ", "\n public IEnumerable GetAllAocSteps(InputSource source) => aocStepByInputSource[source];", "\n public IEnumerable GetCalculatedTelescopicAocSteps() => AocConfigurationByAocStep.Where(kvp => kvp.Value.DataType == DataType.CalculatedTelescopic).Select(kvp => kvp.Key);", - "\n ", + "\n", "\n //YieldCurve", "\n public double[] GetYearlyYieldCurve(ImportIdentity id, string economicBasis) {", "\n var yc = GetYieldCurve(id, economicBasis);", @@ -309,13 +309,13 @@ "\n }", "\n ", "\n public YieldCurve GetYieldCurve(ImportIdentity id, string economicBasis) => (economicBasis, GetYieldCurvePeriod(id)) switch {", - "\n (EconomicBases.C, PeriodType.BeginningOfPeriod) => CurrentYieldCurve[DataNodeDataBySystemName[id.DataNode].ContractualCurrency][PreviousPeriod],", - "\n (EconomicBases.C, PeriodType.EndOfPeriod) => CurrentYieldCurve[DataNodeDataBySystemName[id.DataNode].ContractualCurrency][CurrentPeriod],", + "\n (EconomicBases.C, PeriodType.BeginningOfPeriod) => CurrentYieldCurve[id.DataNode][PreviousPeriod],", + "\n (EconomicBases.C, PeriodType.EndOfPeriod) => CurrentYieldCurve[id.DataNode][CurrentPeriod],", "\n (EconomicBases.L, _ ) => LockedInYieldCurve[id.DataNode],", "\n (_, PeriodType.NotApplicable) => (YieldCurve)ApplicationMessage.Log(Error.YieldCurvePeriodNotApplicable, id.AocType, id.Novelty),", "\n (_, _) => (YieldCurve)ApplicationMessage.Log(Error.EconomicBasisNotFound, id.DataNode)", "\n };", - "\n ", + "\n", "\n //int Identity.ProjectionPeriod ", "\n public int GetProjectionCount() => ProjectionConfiguration.Count();", "\n public int GetShift(int projectionPeriod) => ProjectionConfiguration[projectionPeriod].Shift;", diff --git a/ifrs17/Test/QueriesTest.ipynb b/ifrs17/Test/QueriesTest.ipynb index 0bf6dc5d..d48841bd 100644 --- a/ifrs17/Test/QueriesTest.ipynb +++ b/ifrs17/Test/QueriesTest.ipynb @@ -528,35 +528,41 @@ "cell_type": "code", "source": [ "public async Task CheckLoadYieldCurveAsync(Args args, IEnumerable testData, ", - "\n (int year , int month) dataNodeYearAndMonth, ", - "\n double expectedCurrentPreviousFirstYcValue,", - "\n double expectedCurrentFirstYcValue,", - "\n double expectedLockedFirstYcValue)", + "\n (int year , int month, string yieldCurveName, string valuationApproach) dataNodeTestData, ", + "\n double expectedCurrentPreviousFirstYcValue = default(double),", + "\n double expectedCurrentFirstYcValue = default(double),", + "\n double expectedLockedFirstYcValue = default(double))", "\n{", "\n Activity.Start();", "\n await Workspace.Partition.SetAsync(args);", "\n await Workspace.UpdateAsync(testData);", "\n await Workspace.UpdateAsync(new ReportingNode[]{new ReportingNode{Currency=\"EUR\",SystemName=\"CH\"}});", "\n ", - "\n var dataNodes = new DataNodeData[]{new DataNodeData{ValuationApproach=\"BBA\", Year = dataNodeYearAndMonth.year, Month = dataNodeYearAndMonth.month, DataNode = gic, ContractualCurrency = \"EUR\"}};", + "\n var dataNodes = new DataNodeData[]{new DataNodeData{ValuationApproach=dataNodeTestData.valuationApproach, Year = dataNodeTestData.year, Month = dataNodeTestData.month, DataNode = gic, ContractualCurrency = \"EUR\", YieldCurveName = dataNodeTestData.yieldCurveName}};", "\n var eurLockedYieldCurve = (await LoadLockedInYieldCurveAsync(Workspace, args, dataNodes));", "\n var eurCurrentYieldCurve = (await LoadCurrentYieldCurveAsync(Workspace, args, dataNodes));", "\n ", "\n Workspace.Reset(x => x.ResetCurrentPartitions());", "\n ", "\n var errors = new List();", - "\n var currentPrevPeriod = eurCurrentYieldCurve[\"EUR\"][PreviousPeriod].Values.First();", + "\n if (eurCurrentYieldCurve[gic] == null)", + "\n return Activity.Finish();", + "\n var currentPrevPeriod = eurCurrentYieldCurve[gic][PreviousPeriod].Values.First();", "\n if(Math.Abs(currentPrevPeriod - expectedCurrentPreviousFirstYcValue) > 1E-8)", "\n errors.Add( $\"Current YieldCurve for Previous Period not matching:\\n Expected {expectedCurrentPreviousFirstYcValue} \\n Computed {currentPrevPeriod}.\" );", "\n ", - "\n var currentCurrPeriod = eurCurrentYieldCurve[\"EUR\"][CurrentPeriod].Values.First();", + "\n var currentCurrPeriod = eurCurrentYieldCurve[gic][CurrentPeriod].Values.First();", "\n if(Math.Abs(currentCurrPeriod - expectedCurrentFirstYcValue) > 1E-8)", "\n errors.Add( $\"Current YieldCurve for Current Period not matching:\\n Expected {expectedCurrentFirstYcValue} \\n Computed {currentCurrPeriod}.\" );", "\n ", - "\n var lockedYc = eurLockedYieldCurve[gic].Values.First();", - "\n if(Math.Abs(lockedYc - expectedLockedFirstYcValue) > 1E-8)", - "\n errors.Add( $\"LockedIn YieldCurve not matching:\\n Expected {expectedLockedFirstYcValue} \\n Computed {lockedYc}.\" );", - "\n ", + "\n if(dataNodeTestData.valuationApproach == ValuationApproaches.BBA)", + "\n {", + "\n if (eurLockedYieldCurve[gic] == null)", + "\n return Activity.Finish();", + "\n var lockedYc = eurLockedYieldCurve[gic].Values.First();", + "\n if(Math.Abs(lockedYc - expectedLockedFirstYcValue) > 1E-8)", + "\n errors.Add( $\"LockedIn YieldCurve not matching:\\n Expected {expectedLockedFirstYcValue} \\n Computed {lockedYc}.\" );", + "\n }", "\n if(errors.Any()) ApplicationMessage.Log(Error.Generic, string.Join(\"\\n\", errors)); ", "\n return Activity.Finish();", "\n}" @@ -570,11 +576,104 @@ "source": [ "var args = new Args(\"CH\",2020,9,Periodicity.Monthly,null);", "\nvar testData = new YieldCurve[] {new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Values = new double[]{0.1,0.2,0.3,0.4,0.5,0.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"A\", Values = new double[]{7.1,7.2,7.3,7.4,7.5,7.6} }, ", "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 3, Values = new double[]{2.1,2.2,2.3,2.4,2.5,2.6} }, ", "\n new YieldCurve{ Currency = \"EUR\", Year = 2021, Month = 9, Values = new double[]{4.1,4.2,4.3,4.4,4.5,4.6} },", - "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Values = new double[]{6.1,6.2,6.3,6.4,6.5,6.6} }};", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Values = new double[]{6.1,6.2,6.3,6.4,6.5,6.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"A\", Values = new double[]{9.1,9.2,9.3,9.4,9.5,9.6} }};", + "\n", + "\n(int year , int month, string yieldCurveName, string valuationApproach) dataNodeTestData = (2016, 6, null, \"BBA\");", + "\nvar activity = await CheckLoadYieldCurveAsync(args, testData, dataNodeTestData, 6.1, 0.1, 6.1);", + "\nactivity" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "activity.Status.Should().Be(ActivityLogStatus.Succeeded);" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "var args = new Args(\"CH\",2020,9,Periodicity.Monthly,null);", + "\nvar testData = new YieldCurve[] {new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"A\", Values = new double[]{0.1,0.2,0.3,0.4,0.5,0.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Values = new double[]{1.1,1.2,1.3,1.4,1.5,1.6} }, ", + "\n new YieldCurve{ Currency = \"CHF\", Year = 2020, Month = 6, Name = \"A\", Values = new double[]{3.1,3.2,3.3,3.4,3.5,3.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"B\", Values = new double[]{2.1,2.2,2.3,2.4,2.5,2.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"A\", Values = new double[]{6.1,6.2,6.3,6.4,6.5,6.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Values = new double[]{9.1,9.2,9.3,9.4,9.5,9.6} },", + "\n new YieldCurve{ Currency = \"CHF\", Year = 2016, Month = 3, Name = \"A\", Values = new double[]{8.1,8.2,8.3,8.4,8.5,8.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"B\", Values = new double[]{7.1,7.2,7.3,7.4,7.5,7.6} }};", + "\n", + "\n(int year , int month, string yieldCurveName, string valuationApproach) dataNodeTestData = (2016, 6, \"A\", \"BBA\");", + "\nvar activity = await CheckLoadYieldCurveAsync(args, testData, dataNodeTestData, 6.1, 0.1, 6.1);", + "\nactivity" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "activity.Status.Should().Be(ActivityLogStatus.Succeeded);" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "var args = new Args(\"CH\",2020,9,Periodicity.Monthly,null);", + "\nvar testData = new YieldCurve[] {new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 12, Name = \"A\", Values = new double[]{11.1,11.2,11.3,11.4,11.5,11.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 9, Name = \"A\", Values = new double[]{12.1,12.2,12.3,12.4,12.5,12.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"A\", Values = new double[]{13.1,13.2,13.3,13.4,13.5,13.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 3, Name = \"A\", Values = new double[]{1.1,1.2,1.3,1.4,1.5,1.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2019, Month = 12, Name = \"A\", Values = new double[]{9.1,9.2,9.3,9.4,9.5,9.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2019, Month = 9, Name = \"A\", Values = new double[]{10.1,10.2,10.3,10.4,10.5,10.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2019, Month = 6, Name = \"A\", Values = new double[]{2.1,2.2,2.3,2.4,2.5,2.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2019, Month = 3, Name = \"A\", Values = new double[]{7.1,7.2,7.3,7.4,7.5,7.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2018, Month = 6, Name = \"A\", Values = new double[]{3.1,3.2,3.3,3.4,3.5,3.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2017, Month = 6, Name = \"A\", Values = new double[]{4.1,4.2,4.3,4.4,4.5,4.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 12, Name = \"A\", Values = new double[]{8.1,8.2,8.3,8.4,8.5,8.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"A\", Values = new double[]{6.1,6.2,6.3,6.4,6.5,6.6} }};", "\n", - "\nvar activity = await CheckLoadYieldCurveAsync(args, testData, (2016, 6), 6.1, 0.1, 6.1);", + "\n(int year , int month, string yieldCurveName, string valuationApproach) dataNodeTestData = (2016, 6, \"A\", \"BBA\");", + "\nvar activity = await CheckLoadYieldCurveAsync(args, testData, dataNodeTestData, 9.1, 12.1, 8.1);", + "\nactivity" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "activity.Status.Should().Be(ActivityLogStatus.Succeeded);" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "var args = new Args(\"CH\",2020,9,Periodicity.Monthly,null);", + "\nvar testData = new YieldCurve[] {new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"A\", Values = new double[]{0.1,0.2,0.3,0.4,0.5,0.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"B\", Values = new double[]{2.1,2.2,2.3,2.4,2.5,2.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"A\", Values = new double[]{6.1,6.2,6.3,6.4,6.5,6.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"B\", Values = new double[]{4.1,4.2,4.3,4.4,4.5,4.6} }};", + "\n ", + "\n(int year , int month, string yieldCurveName, string valuationApproach) dataNodeTestData = (2016, 6, \"A\", \"VFA\");", + "\nvar activity = await CheckLoadYieldCurveAsync(args, testData, dataNodeTestData, 6.1, 0.1);", "\nactivity" ], "metadata": {}, @@ -590,6 +689,33 @@ "execution_count": 0, "outputs": [] }, + { + "cell_type": "code", + "source": [ + "var args = new Args(\"CH\",2020,9,Periodicity.Monthly,null);", + "\nvar testData = new YieldCurve[] {new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"B\", Values = new double[]{0.1,0.2,0.3,0.4,0.5,0.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2020, Month = 6, Name = \"B\", Values = new double[]{2.1,2.2,2.3,2.4,2.5,2.6} }, ", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"C\", Values = new double[]{4.1,4.2,4.3,4.4,4.5,4.6} },", + "\n new YieldCurve{ Currency = \"EUR\", Year = 2016, Month = 3, Name = \"B\", Values = new double[]{6.1,6.2,6.3,6.4,6.5,6.6} }};", + "\n", + "\n(int year , int month, string yieldCurveName, string valuationApproach) dataNodeTestData = (2016, 2, \"A\", \"BBA\");", + "\n", + "\nvar activity = await CheckLoadYieldCurveAsync(args, testData, dataNodeTestData);" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "activity.Status.Should().Be(ActivityLogStatus.Failed);", + "\nactivity.Errors.Select(x => x.ToString().Contains(Get(Error.YieldCurveNotFound)).Should().Be(true));" + ], + "metadata": {}, + "execution_count": 0, + "outputs": [] + }, { "cell_type": "markdown", "source": [ diff --git a/ifrs17/Utils/Queries.ipynb b/ifrs17/Utils/Queries.ipynb index e90d6921..2a102c0f 100644 --- a/ifrs17/Utils/Queries.ipynb +++ b/ifrs17/Utils/Queries.ipynb @@ -183,18 +183,18 @@ { "cell_type": "code", "source": [ - "public static async Task> LoadLockedInYieldCurveAsync(this IQuerySource querySource, Args args, ", - "\n IEnumerable dataNodes)", + "public static async Task> LoadLockedInYieldCurveAsync(this IQuerySource querySource, Args args, IEnumerable dataNodes)", + "\n", "\n{", "\n var lockedInYieldCurveByGoc = new Dictionary();", "\n foreach (var dn in dataNodes.Where(x => x.ValuationApproach == ValuationApproaches.BBA))", "\n {", - "\n var argsNew = args with {Year = dn.Year, Month = dn.Month, Scenario = args.Scenario};", - "\n var loadedYc = (await querySource.LoadCurrentParameterAsync(argsNew, x => x.Currency, x => x.Currency == dn.ContractualCurrency));", - "\n ", - "\n if(!loadedYc.TryGetValue(dn.ContractualCurrency, out var lockedYc))", + "\n var argsNew = args with {Year = dn.Year, Month = MonthInAYear, Scenario = args.Scenario};", + "\n var loadedYc = (await querySource.LoadCurrentParameterAsync(argsNew, x => x.Currency, x => x.Currency == dn.ContractualCurrency && x.Name == dn.YieldCurveName));", + "\n ", + "\n if (!loadedYc.TryGetValue(dn.ContractualCurrency, out var lockedYc))", "\n ApplicationMessage.Log(Error.YieldCurveNotFound, dn.ContractualCurrency, argsNew.Year.ToString(), argsNew.Month.ToString());", - "\n ", + "\n ", "\n lockedInYieldCurveByGoc[dn.DataNode] = lockedYc;", "\n }", "\n ", @@ -217,14 +217,33 @@ { "cell_type": "code", "source": [ - "public static async Task>> LoadCurrentYieldCurveAsync(this IQuerySource querySource, Args args, ", - "\n IEnumerable dataNodes)", - "\n{", - "\n var contractualCurrenciesInScope = dataNodes.Select(dn => dn.ContractualCurrency).ToHashSet();", - "\n return (await querySource.LoadCurrentAndPreviousParameterAsync(args, ", - "\n x => x.Currency,", - "\n x => contractualCurrenciesInScope.Contains(x.Currency)", - "\n ));", + "public static async Task>> LoadCurrentYieldCurveAsync(this IQuerySource querySource, Args args,", + "\n IEnumerable dataNodes)", + "\n{ ", + "\n var currentYieldCurveByGoc = new Dictionary>();", + "\n", + "\n var dnByValAppContrCurrYcName = dataNodes.ToDictionaryGrouped(x => (ValuationApproach: x.ValuationApproach, ContractualCurrency: x.ContractualCurrency, YieldCurveName: x.YieldCurveName), ", + "\n x => x.Select(y => y.DataNode).ToArray());", + "\n ", + "\n foreach (var key in dnByValAppContrCurrYcName.Keys)", + "\n {", + "\n var loadedYc = await querySource.LoadCurrentAndPreviousParameterAsync(args, ", + "\n x => x.Currency,", + "\n x => x.Currency == key.ContractualCurrency ", + "\n && (key.ValuationApproach == ValuationApproaches.VFA", + "\n ? x.Name == key.YieldCurveName", + "\n : true));", + "\n ", + "\n if (!loadedYc.TryGetValue(key.ContractualCurrency, out var currentYcDict))", + "\n ApplicationMessage.Log(Error.YieldCurveNotFound, key.ContractualCurrency, args.Year.ToString(), args.Month.ToString());", + "\n", + "\n foreach(var dn in dnByValAppContrCurrYcName[key])", + "\n {", + "\n currentYieldCurveByGoc[dn] = loadedYc[key.ContractualCurrency];", + "\n }", + "\n }", + "\n ", + "\n return currentYieldCurveByGoc;", "\n}" ], "metadata": {}, @@ -291,6 +310,7 @@ "\n Profitability = dn.Profitability,", "\n Partner = dn.Partner,", "\n IsReinsurance = dn.GetType() == typeof(GroupOfReinsuranceContract),", + "\n YieldCurveName = dn.YieldCurveName", "\n };", "\n }", "\n );",