merge branch release/dyn-1711_evo-kasko
This commit is contained in:
parent
b8f8594cff
commit
fb98cbf6fd
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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; }
|
||||
}
|
||||
@ -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; }
|
||||
}
|
||||
@ -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)
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user