diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
index 08fea41..352ac57 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
@@ -19,6 +19,7 @@
+
@@ -43,20 +44,31 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -133,18 +145,29 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index 47d7871..aaa4375 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,29 +14,35 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
+
+
@@ -64,35 +70,6 @@
@@ -134,7 +140,7 @@
-
+
@@ -184,7 +190,8 @@
-
+
+
1602593830686
@@ -232,90 +239,90 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -328,10 +335,10 @@
-
+
-
+
@@ -352,12 +359,59 @@
-
+
-
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/NsibExpensesTests.cs
+ 92
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
+ 143
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
+ 183
+
+
+
+
+
+
+
+
+
+
+
+
@@ -365,13 +419,5 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/AgentComissionExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/AgentComissionExpensesColumn.cs
new file mode 100644
index 0000000..4b2d75c
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/AgentComissionExpensesColumn.cs
@@ -0,0 +1,29 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class AgentComissionExpensesColumn : BaseColumn
+ {
+ public AgentComissionExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ var agentComission = preparedValues.AgentsSum + preparedValues.DoubleAgentsSum +
+ preparedValues.DeliverySum +
+ preparedValues.BrokerSum + preparedValues.BrokerOfDeliverySum +
+ preparedValues.FinancialDeptOfDeliverySum + preparedValues.ImporterSum;
+
+ Values[2] = -agentComission;
+
+ Values[0] = Values.Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/ComissionBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/ComissionBonusExpensesColumn.cs
new file mode 100644
index 0000000..1c4f80b
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/ComissionBonusExpensesColumn.cs
@@ -0,0 +1,23 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class ComissionBonusExpensesColumn : BaseColumn
+ {
+ public ComissionBonusExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ Values[1] = preparedValues.ComissionRub;
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs
new file mode 100644
index 0000000..6fe4e53
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs
@@ -0,0 +1,37 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class ExpensesColumn : BaseColumn
+ {
+ public ExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn,
+ RatExpensesColumn ratExpensesColumn, TransExprensesColumn transExprensesColumn,
+ NsibExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
+ GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
+ InsuranceBonusExpensesColumn insuranceBonusExpensesColumn,
+ ComissionBonusExpensesColumn comissionBonusExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ {
+ Values[i] =
+ agentComissionExpensesColumn.Values[i]
+ + ratExpensesColumn.Values[i]
+ + transExprensesColumn.Values[i]
+ + nsibExpensesColumn.Values[i]
+ + tlmExpensesColumn.Values[i]
+ + gpsExpensesColumn.Values[i]
+ + registrExpensesColumn.Values[i]
+ + insuranceBonusExpensesColumn.Values[i]
+ + comissionBonusExpensesColumn.Values[i]
+ + npvBonusExpensesColumn.Values[i];
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/GPSExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/GPSExpensesColumn.cs
new file mode 100644
index 0000000..3fc6d33
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/GPSExpensesColumn.cs
@@ -0,0 +1,23 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class GPSExpensesColumn : BaseColumn
+ {
+ public GPSExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments)
+ {
+ Values[1] = -(preparedValues.TrackerCost + preparedPayments.Rows[0].GpsBasePayment);
+ for (var i = 2; i < Values.Length; i++)
+ {
+ Values[i] = -preparedPayments.Rows[i - 1].GpsBasePayment;
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs
new file mode 100644
index 0000000..a52c39e
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs
@@ -0,0 +1,45 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class InsuranceBonusExpensesColumn : BaseColumn
+ {
+ public InsuranceBonusExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ for (var i = 2; i < Values.Length; i += i == 2 ? 11 : 12)
+ {
+ if (i <= preparedValues.NmperInsurance)
+ {
+ if (preparedValues.NmperInsurance - i >= 3)
+ {
+ if (preparedValues.NmperInsurance - i < 16 - 1)
+ {
+ Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance *
+ (preparedValues.NmperInsurance - i + 1);
+ }
+ else
+ {
+ Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * 12;
+ }
+ }
+ else
+ {
+ Values[i] = 0;
+ }
+ }
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/KaskoBonusGrSumColumn.cs b/EvoCalculator.Core.Calculation/Columns/KaskoBonusGrSumColumn.cs
new file mode 100644
index 0000000..3f67136
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/KaskoBonusGrSumColumn.cs
@@ -0,0 +1,33 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class KaskoBonusGrSumColumn : BaseColumn
+ {
+ public KaskoBonusGrSumColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, KaskoNmperGrColumn kaskoNmperGrColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ {
+ if (i < 13)
+ {
+ Values[i] = kaskoNmperGrColumn.Values[i] * 1;
+ }
+ else if (i <= 24)
+ {
+ Values[i] = kaskoNmperGrColumn.Values[i] * 0.7;
+ }
+ else
+ {
+ Values[i] = kaskoNmperGrColumn.Values[i] * 0.5;
+ }
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs
index 7fa58ff..7f99a36 100644
--- a/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs
@@ -21,13 +21,20 @@ namespace EvoCalculator.Core.Calculation.Columns
{
if (i <= preparedValues.NmperInsurance)
{
- if (preparedValues.NmperInsurance - i < 16 - 1)
+ if (preparedValues.Nmper - i >= 3)
{
- Values[i] = preparedValues.InsuranceKasko / 12 * (preparedValues.NmperInsurance - i + 1);
+ if (preparedValues.NmperInsurance - i < 16 - 1)
+ {
+ Values[i] = preparedValues.InsuranceKasko / 12 * (preparedValues.NmperInsurance - i + 1);
+ }
+ else
+ {
+ Values[i] = preparedValues.InsuranceKasko;
+ }
}
else
{
- Values[i] = preparedValues.InsuranceKasko;
+ Values[i] = 0;
}
}
}
diff --git a/EvoCalculator.Core.Calculation/Columns/NsibExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/NsibExpensesColumn.cs
new file mode 100644
index 0000000..d33e4bd
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NsibExpensesColumn.cs
@@ -0,0 +1,45 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NsibExpensesColumn : BaseColumn
+ {
+ public NsibExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ for (var i = 1; i < Values.Length; i += 12)
+ {
+ if (i <= preparedValues.Nmper)
+ {
+ if (preparedValues.Nmper - i >= 3)
+ {
+ if (preparedValues.Nmper - i < 16 - 1)
+ {
+ Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper *
+ (preparedValues.Nmper - i + 1);
+ }
+ else
+ {
+ Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper * 12;
+ }
+ }
+ else
+ {
+ Values[i] = 0;
+ }
+ }
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/RatExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/RatExpensesColumn.cs
new file mode 100644
index 0000000..9295d99
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/RatExpensesColumn.cs
@@ -0,0 +1,25 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class RatExpensesColumn : BaseColumn
+ {
+ public RatExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ Values[1] = -preparedValues.BaseRatCost;
+ Values[4] = preparedValues.RetroBonus;
+
+ Values[0] = Values.Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/RegistrExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/RegistrExpensesColumn.cs
new file mode 100644
index 0000000..2a765ff
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/RegistrExpensesColumn.cs
@@ -0,0 +1,24 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class RegistrExpensesColumn : BaseColumn
+ {
+ public RegistrExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ Values[1] = -preparedValues.BaseRegistration;
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/TLMExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/TLMExpensesColumn.cs
new file mode 100644
index 0000000..c196b1d
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/TLMExpensesColumn.cs
@@ -0,0 +1,23 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class TLMExpensesColumn : BaseColumn
+ {
+ public TLMExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments)
+ {
+ Values[1] = -(preparedValues.TLMCost + preparedPayments.Rows[0].TlmBasePayment);
+ for (var i = 2; i < Values.Length; i++)
+ {
+ Values[i] = -preparedPayments.Rows[i - 1].TlmBasePayment;
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs
new file mode 100644
index 0000000..ceb6f5b
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs
@@ -0,0 +1,31 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class TransExprensesColumn : BaseColumn
+ {
+ public TransExprensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ for (var i = 0; i < Values.Length; i += 12)
+ {
+ if (i > 0)
+ {
+ Values[i] = -preparedValues.TransportTaxGrYear;
+ }
+ }
+
+ Values[^1] = -(preparedValues.TransportTaxGr + Values.Skip(1).Take(Values.Length - 1).Sum(x => x));
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
index a3d48da..db1b38e 100644
--- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
+++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
@@ -89,5 +89,6 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared
public double AcquisitionExpenses { get; set; }
public double BonusBase { get; set; }
public double NpvBase { get; set; }
+ public double TLMCost { get; set; }
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AgentComissionExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/AgentComissionExpensesTests.cs
new file mode 100644
index 0000000..e6dfced
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/AgentComissionExpensesTests.cs
@@ -0,0 +1,125 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class AgentComissionExpensesTests
+ {
+ [Fact]
+ public void AgentComissionExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ AgentsSum = 47662.50,
+ DoubleAgentsSum = 0.00,
+ DeliverySum = 0.00,
+ BrokerSum = 0.00,
+ BrokerOfDeliverySum = 0.00,
+ FinancialDeptOfDeliverySum = 0.00,
+ ImporterSum = 0.00,
+ Nmper = 30
+ };
+
+ var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
+ agentComissionExpensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -47662.50,
+ 0.00,
+ -47662.50,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ Assert.Equal(expected.Length, agentComissionExpensesColumn.Values.Length);
+ Assert.Equal(expected, agentComissionExpensesColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void AgentComissionExpensesTest2()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ AgentsSum = 47662.50,
+ DoubleAgentsSum = 31775,
+ DeliverySum = 50000,
+ BrokerSum = 75000,
+ BrokerOfDeliverySum = 100000,
+ FinancialDeptOfDeliverySum = 125000,
+ ImporterSum = 16666.6666666667,
+ Nmper = 30
+ };
+
+ var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
+ agentComissionExpensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -446104.166666667,
+ 0.00,
+ -446104.166666667,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ Assert.Equal(expected.Length, agentComissionExpensesColumn.Values.Length);
+ Assert.Equal(expected, agentComissionExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ComissionBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/ComissionBonusExpensesTests.cs
new file mode 100644
index 0000000..2332c3e
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/ComissionBonusExpensesTests.cs
@@ -0,0 +1,56 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class ComissionBonusExpensesTests
+ {
+ [Fact]
+ public void ComissionBonusExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ ComissionRub = 125000,
+ Nmper = 24
+ };
+
+ var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
+ comissionBonusExpensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ 125000.00,
+ 125000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected.Length, comissionBonusExpensesColumn.Values.Length);
+ Assert.Equal(expected, comissionBonusExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs
new file mode 100644
index 0000000..fd9ede5
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs
@@ -0,0 +1,378 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class ExpensesTests
+ {
+ [Fact]
+ public void ExpensesColumnTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 24
+ };
+
+ var AgentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -446104.166666667,
+ 0.00,
+ -446104.166666667,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var RatExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -6000,
+ -12000,
+ 0.00,
+ 0.00,
+ 6000,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var TransExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -18000,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -9000,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -9000,
+ }
+ };
+
+ var NsibExpensesColumn = new NsibExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -3376.08,
+ -1688.04,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -1688.04,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var TLMExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -33600.00,
+ -20000,
+ -1600,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ -800,
+ }
+ };
+
+ var GPSExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -25200.00,
+ -15000,
+ -1200,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ -600,
+ }
+ };
+
+ var RegistrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -2300,
+ -2300,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var InsuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 26337.50,
+ 0.00,
+ 13168.75,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 13168.75,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var ComissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 125000,
+ 125000,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var NPVBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -19695.05642,
+ -1355.97852,
+ -18339.0779,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+
+ var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
+ expensesColumn.ComputeValues(AgentComissionExpensesColumn, RatExpensesColumn, TransExprensesColumn,
+ NsibExpensesColumn, TLMExpensesColumn, GPSExpensesColumn, RegistrExpensesColumn,
+ InsuranceBonusExpensesColumn, ComissionBonusExpensesColumn, NPVBonusExpensesColumn);
+
+
+ var expected = new[]
+ {
+ -412737.803086667,
+ 72655.98148,
+ -454074.494566667,
+ -1400,
+ 4600,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -10400,
+ 10080.71,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -1400,
+ -10400,
+ };
+
+
+ Assert.Equal(expected.Length, expensesColumn.Values.Length);
+ Assert.Equal(expected, expensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs
new file mode 100644
index 0000000..628333f
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs
@@ -0,0 +1,124 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class GPSExpensesTests
+ {
+ [Fact]
+ public void GPSExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 17,
+ TrackerCost = 15000
+ };
+
+ var preparedPayments = new PreparedPayments
+ {
+ Rows = new[]
+ {
+ new PaymentRow
+ {
+ GpsBasePayment = 0.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 1200.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ new PaymentRow
+ {
+ GpsBasePayment = 600.00,
+ },
+ }
+ };
+
+ var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
+ gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
+
+
+ var expected = new[]
+ {
+ -25200.00,
+ -15000.00,
+ -1200.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ -600.00,
+ };
+
+
+ Assert.Equal(expected.Length, gpsExpensesColumn.Values.Length);
+ Assert.Equal(expected, gpsExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
new file mode 100644
index 0000000..3568067
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
@@ -0,0 +1,187 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class InsuranceBonusExpensesTests
+ {
+ [Fact]
+ public void InsuranceBonusExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ InsuranceBonus = 26337.5,
+ NmperInsurance = 27,
+ Nmper = 27
+ };
+
+ var targetColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
+ targetColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ 26337.50,
+ 0.00,
+ 11705.5555555556,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 14631.9444444444,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected.Length, targetColumn.Values.Length);
+ Assert.Equal(expected, targetColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void InsuranceBonusExpensesTest2()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ InsuranceBonus = 26337.5,
+ NmperInsurance = 24,
+ Nmper = 24
+ };
+
+ var targetColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
+ targetColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ 26337.50,
+ 0.00,
+ 13168.75,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 13168.75,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected.Length, targetColumn.Values.Length);
+ Assert.Equal(expected, targetColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void InsuranceBonusExpensesTest3()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ InsuranceBonus = 32921.875,
+ NmperInsurance = 15,
+ Nmper = 15
+ };
+
+ var targetColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
+ targetColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ 32921.875,
+ 0.00,
+ 32921.875,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected.Length, targetColumn.Values.Length);
+ Assert.Equal(expected, targetColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void InsuranceBonusExpensesTest4()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ InsuranceBonus = 26337.5,
+ NmperInsurance = 16,
+ Nmper = 16
+ };
+
+ var targetColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
+ targetColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ 26337.50,
+ 0.00,
+ 19753.125,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 6584.375,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected.Length, targetColumn.Values.Length);
+ Assert.Equal(expected, targetColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoBonusGrSumTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/KaskoBonusGrSumTests.cs
new file mode 100644
index 0000000..0100d0b
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/KaskoBonusGrSumTests.cs
@@ -0,0 +1,100 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class KaskoBonusGrSumTests
+ {
+ [Fact]
+ public void KaskoBonusGrSumTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 30
+ };
+
+ var kaskoNmperGrColumn =
+ new KaskoNmperGrColumn(preparedValues.Nmper + 1, new DateTempColumn(preparedValues.Nmper))
+ {
+ Values = new[]
+ {
+ -97954.4193420531,
+ 53000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 53000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 17666.6666666667,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+
+ var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
+ kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
+
+
+ var expected = new[]
+ {
+ 98933.3333333333,
+ 53000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 37100.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 8833.33333333333,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected, kaskoBonusGrSumColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs
index 30edf5f..b0a6cef 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs
@@ -385,5 +385,242 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var res = kaskoNmperGrColumn.Values;
Assert.Equal(expected, res);
}
+
+ [Fact]
+ public void KaskoNmperGrTest4()
+ {
+ var preparedValues =
+ new PreparedValues()
+ {
+ InsuranceKasko = 53000,
+ NmperInsurance = 15,
+ IrrExpected = 0.22,
+ Nmper = 15
+ };
+
+
+ var dateTempColumn = new DateTempColumn(67)
+ {
+ Values = new[]
+ {
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 11, 30),
+ new DateTime(2018, 12, 31),
+ new DateTime(2019, 1, 31),
+ new DateTime(2019, 2, 28),
+ new DateTime(2019, 3, 31),
+ new DateTime(2019, 4, 30),
+ new DateTime(2019, 5, 31),
+ new DateTime(2019, 6, 30),
+ new DateTime(2019, 7, 31),
+ new DateTime(2019, 8, 31),
+ new DateTime(2019, 9, 30),
+ new DateTime(2019, 10, 31),
+ new DateTime(2019, 11, 30),
+ new DateTime(2019, 12, 31),
+ new DateTime(2020, 1, 31),
+ new DateTime(2020, 2, 29),
+ new DateTime(2020, 3, 31),
+ new DateTime(2020, 4, 30),
+ new DateTime(2020, 5, 31),
+ new DateTime(2020, 6, 30),
+ new DateTime(2020, 7, 31),
+ new DateTime(2020, 8, 31),
+ new DateTime(2020, 9, 30),
+ new DateTime(2020, 10, 31),
+ new DateTime(2020, 11, 30),
+ new DateTime(2020, 12, 31),
+ new DateTime(2021, 1, 31),
+ new DateTime(2021, 2, 28),
+ new DateTime(2021, 3, 31),
+ new DateTime(2021, 4, 30),
+ new DateTime(2021, 5, 31),
+ new DateTime(2021, 6, 30),
+ new DateTime(2021, 7, 31),
+ new DateTime(2021, 8, 31),
+ new DateTime(2021, 9, 30),
+ new DateTime(2021, 10, 31),
+ new DateTime(2021, 11, 30),
+ new DateTime(2021, 12, 31),
+ new DateTime(2022, 1, 31),
+ new DateTime(2022, 2, 28),
+ new DateTime(2022, 3, 31),
+ new DateTime(2022, 4, 30),
+ new DateTime(2022, 5, 31),
+ new DateTime(2022, 6, 30),
+ new DateTime(2022, 7, 31),
+ new DateTime(2022, 8, 31),
+ new DateTime(2022, 9, 30),
+ new DateTime(2022, 10, 31),
+ new DateTime(2022, 11, 30),
+ new DateTime(2022, 12, 31),
+ new DateTime(2023, 1, 31),
+ new DateTime(2023, 2, 28),
+ new DateTime(2023, 3, 31),
+ new DateTime(2023, 4, 30),
+ new DateTime(2023, 5, 31),
+ new DateTime(2023, 6, 30),
+ new DateTime(2023, 7, 31),
+ new DateTime(2023, 8, 31),
+ new DateTime(2023, 9, 30),
+ new DateTime(2023, 10, 31),
+ new DateTime(2023, 11, 30),
+ new DateTime(2023, 12, 31),
+ new DateTime(2024, 1, 31),
+ new DateTime(2024, 2, 29),
+ new DateTime(2024, 3, 31),
+ }
+ };
+
+
+ var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn);
+ kaskoNmperGrColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -66250,
+ 66250.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ var res = kaskoNmperGrColumn.Values;
+
+ Assert.Equal(expected.Length, kaskoNmperGrColumn.Values.Length);
+ Assert.Equal(expected, res, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void KaskoNmperGrTest5()
+ {
+ var preparedValues =
+ new PreparedValues()
+ {
+ InsuranceKasko = 53000,
+ NmperInsurance = 16,
+ IrrExpected = 0.22,
+ Nmper = 16
+ };
+
+
+ var dateTempColumn = new DateTempColumn(67)
+ {
+ Values = new[]
+ {
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 11, 30),
+ new DateTime(2018, 12, 31),
+ new DateTime(2019, 1, 31),
+ new DateTime(2019, 2, 28),
+ new DateTime(2019, 3, 31),
+ new DateTime(2019, 4, 30),
+ new DateTime(2019, 5, 31),
+ new DateTime(2019, 6, 30),
+ new DateTime(2019, 7, 31),
+ new DateTime(2019, 8, 31),
+ new DateTime(2019, 9, 30),
+ new DateTime(2019, 10, 31),
+ new DateTime(2019, 11, 30),
+ new DateTime(2019, 12, 31),
+ new DateTime(2020, 1, 31),
+ new DateTime(2020, 2, 29),
+ new DateTime(2020, 3, 31),
+ new DateTime(2020, 4, 30),
+ new DateTime(2020, 5, 31),
+ new DateTime(2020, 6, 30),
+ new DateTime(2020, 7, 31),
+ new DateTime(2020, 8, 31),
+ new DateTime(2020, 9, 30),
+ new DateTime(2020, 10, 31),
+ new DateTime(2020, 11, 30),
+ new DateTime(2020, 12, 31),
+ new DateTime(2021, 1, 31),
+ new DateTime(2021, 2, 28),
+ new DateTime(2021, 3, 31),
+ new DateTime(2021, 4, 30),
+ new DateTime(2021, 5, 31),
+ new DateTime(2021, 6, 30),
+ new DateTime(2021, 7, 31),
+ new DateTime(2021, 8, 31),
+ new DateTime(2021, 9, 30),
+ new DateTime(2021, 10, 31),
+ new DateTime(2021, 11, 30),
+ new DateTime(2021, 12, 31),
+ new DateTime(2022, 1, 31),
+ new DateTime(2022, 2, 28),
+ new DateTime(2022, 3, 31),
+ new DateTime(2022, 4, 30),
+ new DateTime(2022, 5, 31),
+ new DateTime(2022, 6, 30),
+ new DateTime(2022, 7, 31),
+ new DateTime(2022, 8, 31),
+ new DateTime(2022, 9, 30),
+ new DateTime(2022, 10, 31),
+ new DateTime(2022, 11, 30),
+ new DateTime(2022, 12, 31),
+ new DateTime(2023, 1, 31),
+ new DateTime(2023, 2, 28),
+ new DateTime(2023, 3, 31),
+ new DateTime(2023, 4, 30),
+ new DateTime(2023, 5, 31),
+ new DateTime(2023, 6, 30),
+ new DateTime(2023, 7, 31),
+ new DateTime(2023, 8, 31),
+ new DateTime(2023, 9, 30),
+ new DateTime(2023, 10, 31),
+ new DateTime(2023, 11, 30),
+ new DateTime(2023, 12, 31),
+ new DateTime(2024, 1, 31),
+ new DateTime(2024, 2, 29),
+ new DateTime(2024, 3, 31),
+ }
+ };
+
+
+ var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn);
+ kaskoNmperGrColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -67480.8743169399,
+ 53000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 17666.6666666667,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ var res = kaskoNmperGrColumn.Values;
+
+ Assert.Equal(expected.Length, kaskoNmperGrColumn.Values.Length);
+ Assert.Equal(expected, res, new DoubleArrayComparer());
+ }
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NsibExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NsibExpensesTests.cs
new file mode 100644
index 0000000..5216318
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NsibExpensesTests.cs
@@ -0,0 +1,134 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class NsibExpensesTests
+ {
+ [Fact]
+ public void NsibExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ NsibNetto = 4186.80,
+ Nmper = 30
+ };
+
+ var nsibExpensesColumn = new NsibExpensesColumn(preparedValues.Nmper + 1);
+ nsibExpensesColumn.ComputeValues(preparedValues);
+
+ var expected = new[]
+ {
+ -4186.80,
+ -1674.72,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -1674.72,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -837.36,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ Assert.Equal(expected.Length, nsibExpensesColumn.Values.Length);
+ Assert.Equal(expected, nsibExpensesColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void NsibExpensesTest2()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ NsibNetto = 2093.40,
+ Nmper = 15
+ };
+
+ var nsibExpensesColumn = new NsibExpensesColumn(preparedValues.Nmper + 1);
+ nsibExpensesColumn.ComputeValues(preparedValues);
+
+ var expected = new[]
+ {
+ -2093.40,
+ -2093.40,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ Assert.Equal(expected.Length, nsibExpensesColumn.Values.Length);
+ Assert.Equal(expected, nsibExpensesColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void NsibExpensesTest3()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ NsibNetto = 2372.52,
+ Nmper = 17
+ };
+
+ var nsibExpensesColumn = new NsibExpensesColumn(preparedValues.Nmper + 1);
+ nsibExpensesColumn.ComputeValues(preparedValues);
+
+ var expected = new[]
+ {
+ -2372.52,
+ -1674.72,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -697.80,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+ Assert.Equal(expected.Length, nsibExpensesColumn.Values.Length);
+ Assert.Equal(expected, nsibExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/RatExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/RatExpensesTests.cs
new file mode 100644
index 0000000..8a5cce2
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/RatExpensesTests.cs
@@ -0,0 +1,62 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class RatExpensesTests
+ {
+ [Fact]
+ public void RatExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ BaseRatCost = 12000,
+ RetroBonus = 6000,
+ Nmper = 30,
+ };
+
+ var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
+ ratExpensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -6000.00,
+ -12000.00,
+ 0.00,
+ 0.00,
+ 6000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected, ratExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/RegistrExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/RegistrExpensesTests.cs
new file mode 100644
index 0000000..f854b15
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/RegistrExpensesTests.cs
@@ -0,0 +1,49 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class RegistrExpensesTests
+ {
+ [Fact]
+ public void RegistrExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ BaseRegistration = 2300,
+ Nmper = 17,
+ };
+
+ var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
+ registrExpensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -2300.00,
+ -2300.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected.Length, registrExpensesColumn.Values.Length);
+ Assert.Equal(expected, registrExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs
new file mode 100644
index 0000000..75b9d16
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs
@@ -0,0 +1,124 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class TLMExpensesTests
+ {
+ [Fact]
+ public void TLMExpensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 17,
+ TLMCost = 20000
+ };
+
+ var preparedPayments = new PreparedPayments
+ {
+ Rows = new[]
+ {
+ new PaymentRow
+ {
+ TlmBasePayment = 0.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 1600.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ new PaymentRow
+ {
+ TlmBasePayment = 800.00,
+ },
+ }
+ };
+
+ var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
+ tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
+
+
+ var expected = new[]
+ {
+ -33600,
+ -20000.00,
+ -1600.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ -800.00,
+ };
+
+
+ Assert.Equal(expected.Length, tlmExpensesColumn.Values.Length);
+ Assert.Equal(expected, tlmExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs
new file mode 100644
index 0000000..bafb016
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs
@@ -0,0 +1,119 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class TransExprensesTests
+ {
+ [Fact]
+ public void TransExprensesTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 30,
+ TransportTaxGrYear = 12000,
+ TransportTaxGr = 30000
+ };
+
+ var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1);
+ transExprensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -30000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -12000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -12000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -6000.00,
+ };
+
+
+ Assert.Equal(expected.Length, transExprensesColumn.Values.Length);
+ Assert.Equal(expected, transExprensesColumn.Values, new DoubleArrayComparer());
+ }
+
+ [Fact]
+ public void TransExprensesTest2()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 32,
+ TransportTaxGrYear = 9000,
+ TransportTaxGr = 24000
+ };
+
+ var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1);
+ transExprensesColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -24000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -9000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -9000.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ 0.00,
+ -6000.00,
+ };
+
+
+ Assert.Equal(expected.Length, transExprensesColumn.Values.Length);
+ Assert.Equal(expected, transExprensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core/EvoCalculator.Core.csproj b/EvoCalculator.Core/EvoCalculator.Core.csproj
index 388bcc8..03d77b5 100644
--- a/EvoCalculator.Core/EvoCalculator.Core.csproj
+++ b/EvoCalculator.Core/EvoCalculator.Core.csproj
@@ -9,6 +9,7 @@
+