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.Calculation.v1.Columns;
|
||||||
|
using EvoCalculator.Core.Models.Calculation.Models;
|
||||||
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||||
|
|
||||||
namespace EvoCalculator.Core.Calculation.v2.Columns;
|
namespace EvoCalculator.Core.Calculation.v2.Columns;
|
||||||
@ -36,4 +38,16 @@ public class BaseCashflowMSFOColumn : v1.Columns.BaseCashflowMSFOColumn
|
|||||||
+ _agentComissionExpensesColumn.Values[i]
|
+ _agentComissionExpensesColumn.Values[i]
|
||||||
+ _subsidyExpensesColumn.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++)
|
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;
|
Values[0] = Sum;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -105,15 +105,18 @@ public static partial class CalculateManager
|
|||||||
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
||||||
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
|
||||||
|
evoKaskoNmperGrColumn.ComputeValues();
|
||||||
|
|
||||||
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
|
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,
|
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
|
||||||
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
|
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
|
||||||
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
|
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
|
||||||
subsidyExpensesColumn);
|
subsidyExpensesColumn);
|
||||||
cashflowMsfoColumn.ComputeValues();
|
cashflowMsfoColumn.ComputeValues();
|
||||||
cashflowMsfoColumn.PostCheck(additionalData);
|
cashflowMsfoColumn.PostCheck(additionalData, constants);
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
||||||
@ -242,7 +245,7 @@ public static partial class CalculateManager
|
|||||||
|
|
||||||
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
|
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
|
||||||
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
|
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
|
||||||
|
|
||||||
postValues.ComputeDirectorBonus();
|
postValues.ComputeDirectorBonus();
|
||||||
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
|
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
|
||||||
postValues.ComputeRegionalDirectorBonus();
|
postValues.ComputeRegionalDirectorBonus();
|
||||||
@ -318,6 +321,7 @@ public static partial class CalculateManager
|
|||||||
insuranceBonusExpensesColumn,
|
insuranceBonusExpensesColumn,
|
||||||
comissionBonusExpensesColumn,
|
comissionBonusExpensesColumn,
|
||||||
expensesColumn,
|
expensesColumn,
|
||||||
|
evoKaskoNmperGrColumn,
|
||||||
negativeCashflowColumn,
|
negativeCashflowColumn,
|
||||||
nsibBruttoGrColumn,
|
nsibBruttoGrColumn,
|
||||||
taxColumn,
|
taxColumn,
|
||||||
|
|||||||
@ -84,8 +84,11 @@ public static partial class CalculateManager
|
|||||||
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
||||||
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
|
||||||
|
evoKaskoNmperGrColumn.ComputeValues();
|
||||||
|
|
||||||
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
|
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
|
||||||
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn);
|
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
|
||||||
|
|
||||||
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
|
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
|
||||||
nsibBruttoGrColumn.ComputeValues(preparedValues);
|
nsibBruttoGrColumn.ComputeValues(preparedValues);
|
||||||
@ -264,7 +267,7 @@ public static partial class CalculateManager
|
|||||||
|
|
||||||
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
|
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
|
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
|
||||||
|
|
||||||
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
|
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
|
||||||
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
|
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
|
||||||
|
|
||||||
@ -315,7 +318,8 @@ public static partial class CalculateManager
|
|||||||
registrExpensesColumn,
|
registrExpensesColumn,
|
||||||
insuranceBonusExpensesColumn,
|
insuranceBonusExpensesColumn,
|
||||||
comissionBonusExpensesColumn,
|
comissionBonusExpensesColumn,
|
||||||
expensesColumn,
|
expensesColumn,
|
||||||
|
evoKaskoNmperGrColumn,
|
||||||
negativeCashflowColumn,
|
negativeCashflowColumn,
|
||||||
nsibBruttoGrColumn,
|
nsibBruttoGrColumn,
|
||||||
taxColumn,
|
taxColumn,
|
||||||
|
|||||||
@ -26,7 +26,9 @@ public class PostValues : v2.PostValues
|
|||||||
+ Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats +
|
+ Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats +
|
||||||
_preparedValues.Registration + _preparedValues.TrackerCost +
|
_preparedValues.Registration + _preparedValues.TrackerCost +
|
||||||
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
|
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
|
||||||
_preparedValues.InsuranceFinGAPNmper) *
|
_preparedValues.InsuranceFinGAPNmper +
|
||||||
|
_preparedValues.InsuranceEvoKasko / 12 * _preparedValues.Nmper +
|
||||||
|
_preparedValues.InsuranceBonusLoss / 12 * _preparedValues.Nmper) *
|
||||||
(decimal) _preparedValues.Leasing0K +
|
(decimal) _preparedValues.Leasing0K +
|
||||||
_preparedValues.NsibBrutto;
|
_preparedValues.NsibBrutto;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,4 +12,5 @@ public class Calculation
|
|||||||
public int MaxOnePolicePeriod = 16;
|
public int MaxOnePolicePeriod = 16;
|
||||||
public double VatValue = 0.2;
|
public double VatValue = 0.2;
|
||||||
public decimal MinBonus = 100;
|
public decimal MinBonus = 100;
|
||||||
|
public double DeltaIRR = 0.02;
|
||||||
}
|
}
|
||||||
@ -122,7 +122,8 @@ public class PreparedValues
|
|||||||
TransportTaxGr;
|
TransportTaxGr;
|
||||||
|
|
||||||
public decimal AcquisitionExpenses => PlPrice + Insurance - ComissionRub - Discount + TrackerCost + TLMCost +
|
public decimal AcquisitionExpenses => PlPrice + Insurance - ComissionRub - Discount + TrackerCost + TLMCost +
|
||||||
BaseRegistration + Rats + TransportTaxGr + InsuranceFinGAP;
|
BaseRegistration + Rats + TransportTaxGr + InsuranceFinGAP +
|
||||||
|
InsuranceEvoKasko + InsuranceBonusLoss;
|
||||||
|
|
||||||
public decimal NpvBase => PlPrice +
|
public decimal NpvBase => PlPrice +
|
||||||
(NsibNetto * 12 / Nmper +
|
(NsibNetto * 12 / Nmper +
|
||||||
@ -179,4 +180,6 @@ public class PreparedValues
|
|||||||
public decimal InsuranceFinGAPNmper => InsuranceFinGAP / 12 * NmperFinGAP;
|
public decimal InsuranceFinGAPNmper => InsuranceFinGAP / 12 * NmperFinGAP;
|
||||||
public decimal BonusFinGAP { get; set; }
|
public decimal BonusFinGAP { get; set; }
|
||||||
public decimal DirectorBonusFinGAP { 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 DateTime DateStartPeriodInsurance { get; set; }
|
||||||
public decimal CostInsurance { get; set; }
|
public decimal CostInsurance { get; set; }
|
||||||
public decimal BaseInsurance { get; set; }
|
public decimal BaseInsurance { get; set; }
|
||||||
|
public decimal InsuranceBonusLoss { get; set; }
|
||||||
}
|
}
|
||||||
@ -25,10 +25,10 @@ public class CashflowMSFOColumn : BaseColumnWithNominal
|
|||||||
costInsurances = nextTableInsurance
|
costInsurances = nextTableInsurance
|
||||||
.Where(ins =>
|
.Where(ins =>
|
||||||
ins.PeriodNumberInsurance > 1
|
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])
|
&& ins.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
|
||||||
.OrderBy(x => x.TypeRiskInsurance)
|
.OrderBy(x => x.TypeRiskInsurance)
|
||||||
.Select(x => -x.CostInsurance)
|
.Select(x => -(x.CostInsurance + x.InsuranceBonusLoss))
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
var tlmCosts = Array.Empty<decimal>();
|
var tlmCosts = Array.Empty<decimal>();
|
||||||
@ -56,7 +56,7 @@ public class CashflowMSFOColumn : BaseColumnWithNominal
|
|||||||
dateStartPeriodInsurances = nextTableInsurance
|
dateStartPeriodInsurances = nextTableInsurance
|
||||||
.Where(ins =>
|
.Where(ins =>
|
||||||
ins.PeriodNumberInsurance > 1
|
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])
|
&& ins.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
|
||||||
.OrderBy(x => x.TypeRiskInsurance)
|
.OrderBy(x => x.TypeRiskInsurance)
|
||||||
.Select(x => x.DateStartPeriodInsurance)
|
.Select(x => x.DateStartPeriodInsurance)
|
||||||
|
|||||||
@ -19,7 +19,7 @@ public class SumCurrentNegativeColumn : BaseColumn<decimal>
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var targetInsurance = nextTableInsurance
|
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(
|
var groupSumCurrentNegativeColumn = GroupColumns.SumToMainGroup(
|
||||||
GroupColumns.Create(nextDateTempColumn.Values, ArraySegment<decimal>.Empty),
|
GroupColumns.Create(nextDateTempColumn.Values, ArraySegment<decimal>.Empty),
|
||||||
@ -29,7 +29,7 @@ public class SumCurrentNegativeColumn : BaseColumn<decimal>
|
|||||||
.Select(x => x.DateStartPeriodInsurance),
|
.Select(x => x.DateStartPeriodInsurance),
|
||||||
targetInsurance
|
targetInsurance
|
||||||
.Where(x => x.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
|
.Where(x => x.DateStartPeriodInsurance <= nextDateTempColumn.Values[^1])
|
||||||
.Select(x => x.CostInsurance))
|
.Select(x => x.CostInsurance + x.InsuranceBonusLoss))
|
||||||
);
|
);
|
||||||
|
|
||||||
Values = Array<decimal>.Concat(
|
Values = Array<decimal>.Concat(
|
||||||
|
|||||||
@ -52,8 +52,9 @@ public class NextValues
|
|||||||
var nextCostInsurance = 0m;
|
var nextCostInsurance = 0m;
|
||||||
if (nextTableInsurance != null)
|
if (nextTableInsurance != null)
|
||||||
nextCostInsurance = nextTableInsurance
|
nextCostInsurance = nextTableInsurance
|
||||||
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" && x.PeriodNumberInsurance == 1)
|
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO" &&
|
||||||
.Sum(x => x.CostInsurance);
|
x.PeriodNumberInsurance == 1)
|
||||||
|
.Sum(x => x.CostInsurance + x.InsuranceBonusLoss);
|
||||||
|
|
||||||
|
|
||||||
AcquisitionExpenses = preparedValues.PlPrice.Next
|
AcquisitionExpenses = preparedValues.PlPrice.Next
|
||||||
@ -112,8 +113,8 @@ public class NextValues
|
|||||||
var nextCostInsurance = 0m;
|
var nextCostInsurance = 0m;
|
||||||
if (nextTableInsurance != null)
|
if (nextTableInsurance != null)
|
||||||
nextCostInsurance = nextTableInsurance
|
nextCostInsurance = nextTableInsurance
|
||||||
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP")
|
.Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO")
|
||||||
.Sum(x => x.CostInsurance);
|
.Sum(x => x.CostInsurance + x.InsuranceBonusLoss);
|
||||||
|
|
||||||
BaseCost = (preparedValues.PlPrice.Next
|
BaseCost = (preparedValues.PlPrice.Next
|
||||||
+ nextCostInsurance
|
+ nextCostInsurance
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user