merge branch release/dyn-1711_evo-kasko

This commit is contained in:
vchikalkin 2022-10-18 10:17:05 +03:00
parent b8f8594cff
commit fb98cbf6fd
12 changed files with 87 additions and 20 deletions

View File

@ -1,5 +1,7 @@
using EvoCalculator.Core.Base.Columns;
using System;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns;
@ -36,4 +38,16 @@ public class BaseCashflowMSFOColumn : v1.Columns.BaseCashflowMSFOColumn
+ _agentComissionExpensesColumn.Values[i]
+ _subsidyExpensesColumn.Values[i];
}
public void PostCheck(AdditionalData additionalData, Constants.Calculation constants)
{
base.PostCheck(additionalData);
if (_preparedValues.PaymentDateNew != null &&
this.Nominal < (_preparedValues.IRR_MSFO_Plan - constants.DeltaIRR))
{
throw new Exception(
"По итогам результата расчета данное изменение графика влечет к убыточности сделки. Скорректируйте вносимые изменения либо получите согласование с адреса calculator@evoleasing.ru");
}
}
}

View File

@ -0,0 +1,36 @@
using System;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class EvoKaskoNmperGrColumn : BaseColumnWithSum
{
private readonly PreparedValues preparedValues;
public EvoKaskoNmperGrColumn(int count, PreparedValues preparedValues) : base(count)
{
this.preparedValues = preparedValues;
}
public void ComputeValues()
{
if (preparedValues.Nmper == 12)
{
Values[1] = preparedValues.InsuranceEvoKasko + preparedValues.InsuranceBonusLoss;
}
else
{
var EvoKaskoMonth = (preparedValues.InsuranceEvoKasko + preparedValues.InsuranceBonusLoss) / 12;
for (var i = 1; i < preparedValues.Nmper + 1; i += 12)
if (i <= preparedValues.Nmper)
Values[i] = preparedValues.Nmper - i + 1 >= 12
? EvoKaskoMonth * 12
: EvoKaskoMonth * (preparedValues.Nmper - i + 1);
}
Values[0] = -Sum;
}
}

View File

@ -8,10 +8,11 @@ public class NegativeCashflowColumn : BaseColumnWithSum
{
}
public void ComputeValues(BaseColumn<decimal> kaskoNmperGrColumn, BaseColumn<decimal> finGAPNmperGrColumn)
public void ComputeValues(BaseColumn<decimal> kaskoNmperGrColumn, BaseColumn<decimal> finGAPNmperGrColumn,
BaseColumn<decimal> evoKaskoNmperGrColumn)
{
for (var i = 1; i < Values.Length; i++)
Values[i] = -kaskoNmperGrColumn.Values[i] - finGAPNmperGrColumn.Values[i];
Values[i] = -kaskoNmperGrColumn.Values[i] - finGAPNmperGrColumn.Values[i] - evoKaskoNmperGrColumn.Values[i];
Values[0] = Sum;
}

View File

@ -105,15 +105,18 @@ public static partial class CalculateManager
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
cashflowMsfoColumn.PostCheck(additionalData, constants);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
@ -318,6 +321,7 @@ public static partial class CalculateManager
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
expensesColumn,
evoKaskoNmperGrColumn,
negativeCashflowColumn,
nsibBruttoGrColumn,
taxColumn,

View File

@ -84,8 +84,11 @@ public static partial class CalculateManager
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
@ -316,6 +319,7 @@ public static partial class CalculateManager
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
expensesColumn,
evoKaskoNmperGrColumn,
negativeCashflowColumn,
nsibBruttoGrColumn,
taxColumn,

View File

@ -26,7 +26,9 @@ public class PostValues : v2.PostValues
+ Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats +
_preparedValues.Registration + _preparedValues.TrackerCost +
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
_preparedValues.InsuranceFinGAPNmper) *
_preparedValues.InsuranceFinGAPNmper +
_preparedValues.InsuranceEvoKasko / 12 * _preparedValues.Nmper +
_preparedValues.InsuranceBonusLoss / 12 * _preparedValues.Nmper) *
(decimal) _preparedValues.Leasing0K +
_preparedValues.NsibBrutto;
}

View File

@ -12,4 +12,5 @@ public class Calculation
public int MaxOnePolicePeriod = 16;
public double VatValue = 0.2;
public decimal MinBonus = 100;
public double DeltaIRR = 0.02;
}

View File

@ -122,7 +122,8 @@ public class PreparedValues
TransportTaxGr;
public decimal AcquisitionExpenses => PlPrice + Insurance - ComissionRub - Discount + TrackerCost + TLMCost +
BaseRegistration + Rats + TransportTaxGr + InsuranceFinGAP;
BaseRegistration + Rats + TransportTaxGr + InsuranceFinGAP +
InsuranceEvoKasko + InsuranceBonusLoss;
public decimal NpvBase => PlPrice +
(NsibNetto * 12 / Nmper +
@ -179,4 +180,6 @@ public class PreparedValues
public decimal InsuranceFinGAPNmper => InsuranceFinGAP / 12 * NmperFinGAP;
public decimal BonusFinGAP { get; set; }
public decimal DirectorBonusFinGAP { get; set; }
public decimal InsuranceEvoKasko { get; set; }
public decimal InsuranceBonusLoss { get; set; }
}

View File

@ -9,4 +9,5 @@ public class TableInsuranceRow
public DateTime DateStartPeriodInsurance { get; set; }
public decimal CostInsurance { get; set; }
public decimal BaseInsurance { get; set; }
public decimal InsuranceBonusLoss { get; set; }
}

View File

@ -25,10 +25,10 @@ public class CashflowMSFOColumn : BaseColumnWithNominal
costInsurances = nextTableInsurance
.Where(ins =>
ins.PeriodNumberInsurance > 1
&& ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP"
&& ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO"
&& ins.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
.OrderBy(x => x.TypeRiskInsurance)
.Select(x => -x.CostInsurance)
.Select(x => -(x.CostInsurance + x.InsuranceBonusLoss))
.ToArray();
var tlmCosts = Array.Empty<decimal>();
@ -56,7 +56,7 @@ public class CashflowMSFOColumn : BaseColumnWithNominal
dateStartPeriodInsurances = nextTableInsurance
.Where(ins =>
ins.PeriodNumberInsurance > 1
&& ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP"
&& ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO"
&& ins.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
.OrderBy(x => x.TypeRiskInsurance)
.Select(x => x.DateStartPeriodInsurance)

View File

@ -19,7 +19,7 @@ public class SumCurrentNegativeColumn : BaseColumn<decimal>
return;
var targetInsurance = nextTableInsurance
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP");
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO");
var groupSumCurrentNegativeColumn = GroupColumns.SumToMainGroup(
GroupColumns.Create(nextDateTempColumn.Values, ArraySegment<decimal>.Empty),
@ -29,7 +29,7 @@ public class SumCurrentNegativeColumn : BaseColumn<decimal>
.Select(x => x.DateStartPeriodInsurance),
targetInsurance
.Where(x => x.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
.Select(x => x.CostInsurance))
.Select(x => x.CostInsurance + x.InsuranceBonusLoss))
);
Values = Array<decimal>.Concat(

View File

@ -52,8 +52,9 @@ public class NextValues
var nextCostInsurance = 0m;
if (nextTableInsurance != null)
nextCostInsurance = nextTableInsurance
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" && x.PeriodNumberInsurance == 1)
.Sum(x => x.CostInsurance);
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO" &&
x.PeriodNumberInsurance == 1)
.Sum(x => x.CostInsurance + x.InsuranceBonusLoss);
AcquisitionExpenses = preparedValues.PlPrice.Next
@ -112,8 +113,8 @@ public class NextValues
var nextCostInsurance = 0m;
if (nextTableInsurance != null)
nextCostInsurance = nextTableInsurance
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP")
.Sum(x => x.CostInsurance);
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO")
.Sum(x => x.CostInsurance + x.InsuranceBonusLoss);
BaseCost = (preparedValues.PlPrice.Next
+ nextCostInsurance