diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
index 84d008b..08fea41 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
@@ -11,6 +11,7 @@
+
@@ -38,12 +39,20 @@
+
+
+
+
+
+
+
+
@@ -73,9 +82,7 @@
-
-
@@ -122,10 +129,18 @@
+
+
+
+
+
+
+
+
@@ -137,6 +152,7 @@
+
diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index a2538c9..47d7871 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,9 +14,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
@@ -28,63 +47,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
+
-
@@ -185,7 +183,8 @@
-
+
+
1602593830686
@@ -237,94 +236,94 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
@@ -345,37 +344,20 @@
-
+
-
-
+
+
-
-
+
+
-
+
-
-
-
- file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
- 308
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/EvoCalculator.Core.Calculation/Columns/AcceptInsuranceColumn.cs b/EvoCalculator.Core.Calculation/Columns/AcceptInsuranceColumn.cs
new file mode 100644
index 0000000..6907ef4
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/AcceptInsuranceColumn.cs
@@ -0,0 +1,21 @@
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class AcceptInsuranceColumn : BaseColumn
+ {
+ public AcceptInsuranceColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(AcceptKaskoColumn acceptKaskoColumn, AcceptOsagoColumn acceptOsagoColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ {
+ Values[i] = acceptKaskoColumn.Values[i] + acceptOsagoColumn.Values[i];
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/AcceptKaskoColumn.cs b/EvoCalculator.Core.Calculation/Columns/AcceptKaskoColumn.cs
new file mode 100644
index 0000000..ef43853
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/AcceptKaskoColumn.cs
@@ -0,0 +1,22 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class AcceptKaskoColumn : BaseColumn
+ {
+ public AcceptKaskoColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ Values[1] = 0;
+ for (var i = 2; i < Values.Length; i++)
+ {
+ Values[i] = preparedValues.InsuranceKaskoNmper / (preparedValues.Nmper - 1);
+ }
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/AcceptOsagoColumn.cs b/EvoCalculator.Core.Calculation/Columns/AcceptOsagoColumn.cs
new file mode 100644
index 0000000..ae30f6a
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/AcceptOsagoColumn.cs
@@ -0,0 +1,22 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class AcceptOsagoColumn : BaseColumn
+ {
+ public AcceptOsagoColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = i > 1 && i <= 12 ? preparedValues.InsuranceOsago / 11 : 0;
+ }
+
+ Values[0] = Values.Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/AcceptSumColumn.cs b/EvoCalculator.Core.Calculation/Columns/AcceptSumColumn.cs
new file mode 100644
index 0000000..bd67918
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/AcceptSumColumn.cs
@@ -0,0 +1,27 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class AcceptSumColumn : BaseColumn
+ {
+ public AcceptSumColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(
+ PreparedValues preparedValues
+ , SumColumn sumColumn
+ , VATColumn vatColumn
+ , SumWithVATColumn sumWithVatColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ {
+ Values[i] = preparedValues.AcceptSum * sumColumn.Values[i] /
+ (sumWithVatColumn.Values[0] - vatColumn.Values[0]);
+ }
+
+ Values[0] = Values.Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/DeprecationColumn.cs b/EvoCalculator.Core.Calculation/Columns/DeprecationColumn.cs
new file mode 100644
index 0000000..c304604
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/DeprecationColumn.cs
@@ -0,0 +1,23 @@
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class DeprecationColumn : BaseColumn
+ {
+ public DeprecationColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(DeprecationLPColumn deprecationLpColumn, DeprecationLDColumn deprecationLdColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ {
+ Values[i] = i < deprecationLpColumn.Values.Length
+ ? deprecationLpColumn.Values[i] + deprecationLdColumn.Values[i]
+ : 0 + deprecationLdColumn.Values[i];
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs b/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs
new file mode 100644
index 0000000..780a243
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs
@@ -0,0 +1,32 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class DeprecationLDColumn : BaseColumn
+ {
+ public DeprecationLDColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ Values[1] = 0;
+ for (var i = 2; i < Values.Length - 1; i++)
+ {
+ Values[i] = preparedValues.BalanceHolder == 100000001
+ ? preparedValues.DeprecationTime *
+ (preparedValues.AcceptSum - Values.Skip(2).Take(i - 1).Sum(x => x)) / 100
+ : 0;
+ }
+
+ Values[^1] = preparedValues.BalanceHolder == 100000001
+ ? preparedValues.AcceptSum - Values.Skip(2)
+ .Take(Values.Length - 1)
+ .Sum(x => x)
+ : 0;
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/DeprecationLPColumn.cs b/EvoCalculator.Core.Calculation/Columns/DeprecationLPColumn.cs
new file mode 100644
index 0000000..5275ebc
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/DeprecationLPColumn.cs
@@ -0,0 +1,22 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class DeprecationLPColumn : BaseColumn
+ {
+ public DeprecationLPColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, AcceptSumColumn acceptSumColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ {
+ Values[i] = preparedValues.BalanceHolder == 100000000 ? acceptSumColumn.Values[i] : 0;
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs
new file mode 100644
index 0000000..35d4ce1
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs
@@ -0,0 +1,32 @@
+using System.Linq;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NPVBonusExpensesColumn : BaseColumn
+ {
+ public NPVBonusExpensesColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) *
+ (1 + preparedValues.SalaryRate) *
+ (1 + preparedValues.MarketRate + preparedValues.DistrictRate);
+
+ Values[2] = preparedValues.BonusFix > 0
+ ? -preparedValues.BonusFix
+ : -1 * preparedValues.BonusBase * preparedValues.Bonus * (1 + preparedValues.SalaryRate) *
+ (1 + preparedValues.MarketRate + preparedValues.DistrictRate);
+
+
+ for (var i = 3; i < Values.Length; i++)
+ {
+ Values[i] = 0;
+ }
+
+ Values[0] = Values.Skip(1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.FinanceFormulas/Bisection.cs b/EvoCalculator.Core.FinanceFormulas/Bisection.cs
deleted file mode 100644
index 1cf9a14..0000000
--- a/EvoCalculator.Core.FinanceFormulas/Bisection.cs
+++ /dev/null
@@ -1,295 +0,0 @@
-// using System;
-// using System.Linq;
-// using Money = System.Decimal;
-// using Rate = System.Double;
-// using System.Collections.Generic;
-//
-// public
-// struct Pair
-// {
-// public Pair(T first, Z second)
-// {
-// First = first;
-// Second = second;
-// }
-//
-// public readonly T First;
-//
-// public readonly Z Second;
-// }
-//
-//
-// public class CashFlow
-// {
-// public CashFlow(Money amount, DateTime date)
-// {
-// Amount = amount;
-// Date = date;
-// }
-//
-// public readonly Money Amount;
-// public readonly DateTime Date;
-// }
-//
-// public struct AlgorithmResult
-// {
-// public AlgorithmResult(TKindOfResult kind, TValue value)
-// {
-// Kind = kind;
-// Value = value;
-// }
-//
-// public readonly TKindOfResult Kind;
-// public readonly TValue Value;
-// }
-//
-// public enum ApproximateResultKind
-// {
-// ApproximateSolution,
-// ExactSolution,
-// NoSolutionWithinTolerance
-// }
-//
-// public static class Algorithms
-// {
-// internal static Money CalculateXNPV(IEnumerable cfs, Rate r)
-// {
-// if (r <= -1)
-// r = -0.99999999; // Very funky ... Better check what an IRR <= -100% means
-//
-// return (from cf in cfs
-// let startDate = cfs.OrderBy(cf1 => cf1.Date).First().Date
-// select cf.Amount / (decimal) Math.Pow(1 + r, (cf.Date - startDate).Days / 365.0)).Sum();
-// }
-//
-// internal static Pair FindBrackets(Func, Rate, Money> func,
-// IEnumerable cfs)
-// {
-// // Abracadabra magic numbers ...
-// const int maxIter = 100;
-// const Rate bracketStep = 0.5;
-// const Rate guess = 0.1;
-//
-// Rate leftBracket = guess - bracketStep;
-// Rate rightBracket = guess + bracketStep;
-// var iter = 0;
-//
-// while (func(cfs, leftBracket) * func(cfs, rightBracket) > 0 && iter++ < maxIter)
-// {
-// leftBracket -= bracketStep;
-// rightBracket += bracketStep;
-// }
-//
-// if (iter >= maxIter)
-// return new Pair(0, 0);
-//
-// return new Pair(leftBracket, rightBracket);
-// }
-//
-// // From "Applied Numerical Analyis" by Gerald
-// internal static AlgorithmResult Bisection(Func func,
-// Pair brackets, Rate tol, int maxIters)
-// {
-// int iter = 1;
-//
-// Money f3 = 0;
-// Rate x3 = 0;
-// Rate x1 = brackets.First;
-// Rate x2 = brackets.Second;
-//
-// do
-// {
-// var f1 = func(x1);
-// var f2 = func(x2);
-//
-// if (f1 == 0 && f2 == 0)
-// return new AlgorithmResult(ApproximateResultKind.NoSolutionWithinTolerance,
-// x1);
-//
-// if (f1 * f2 > 0)
-// throw new ArgumentException("x1 x2 values don't bracket a root");
-//
-// x3 = (x1 + x2) / 2;
-// f3 = func(x3);
-//
-// if (f3 * f1 < 0)
-// x2 = x3;
-// else
-// x1 = x3;
-//
-// iter++;
-// } while (Math.Abs(x1 - x2) / 2 > tol && f3 != 0 && iter < maxIters);
-//
-// if (f3 == 0)
-// return new AlgorithmResult(ApproximateResultKind.ExactSolution, x3);
-//
-// if (Math.Abs(x1 - x2) / 2 < tol)
-// return new AlgorithmResult(ApproximateResultKind.ApproximateSolution, x3);
-//
-// if (iter > maxIters)
-// return new AlgorithmResult(ApproximateResultKind.NoSolutionWithinTolerance,
-// x3);
-//
-// throw new Exception("It should never get here");
-// }
-//
-// public static AlgorithmResult CalculateXIRR(IEnumerable cfs, Rate tolerance,
-// int maxIters)
-// {
-// var brackets = FindBrackets(CalculateXNPV, cfs);
-//
-// if (brackets.First == brackets.Second)
-// return new AlgorithmResult(ApproximateResultKind.NoSolutionWithinTolerance,
-// brackets.First);
-//
-// return Bisection(r => CalculateXNPV(cfs, r), brackets, tolerance, maxIters);
-// }
-// }
-//
-// // TESTS
-// using Microsoft.VisualStudio.TestTools.UnitTesting;
-// using System.Collections.Generic;
-// using System;
-// using Rate = System.Double;
-//
-// namespace TimeLineTest
-// {
-// [TestClass()]
-// public class AlgorithmsTest
-// {
-// IEnumerable cfs = new CashFlow[]
-// {
-// new CashFlow(-10000, new DateTime(2008, 1, 1)),
-// new CashFlow(2750, new DateTime(2008, 3, 1)),
-// new CashFlow(4250, new DateTime(2008, 10, 30)),
-// new CashFlow(3250, new DateTime(2009, 2, 15)),
-// new CashFlow(2750, new DateTime(2009, 4, 1))
-// };
-//
-// IEnumerable bigcfs = new CashFlow[]
-// {
-// new CashFlow(-10, new DateTime(2000, 1, 1)),
-// new CashFlow(10, new DateTime(2002, 1, 2)),
-// new CashFlow(20, new DateTime(2003, 1, 3))
-// };
-//
-// IEnumerable negcfs = new CashFlow[]
-// {
-// new CashFlow(-10, new DateTime(2000, 1, 1)),
-// new CashFlow(-1, new DateTime(2002, 1, 2)),
-// new CashFlow(1, new DateTime(2003, 1, 3))
-// };
-//
-// IEnumerable samedaysamecfs = new CashFlow[]
-// {
-// new CashFlow(-10, new DateTime(2000, 1, 1)),
-// new CashFlow(10, new DateTime(2000, 1, 1)),
-// };
-//
-// IEnumerable samedaydifferentcfs = new CashFlow[]
-// {
-// new CashFlow(-10, new DateTime(2000, 1, 1)),
-// new CashFlow(100, new DateTime(2000, 1, 1)),
-// };
-//
-// IEnumerable bigratecfs = new CashFlow[]
-// {
-// new CashFlow(-10, new DateTime(2000, 1, 1)),
-// new CashFlow(20, new DateTime(2000, 5, 30)),
-// };
-//
-// IEnumerable zeroRate = new CashFlow[]
-// {
-// new CashFlow(-10, new DateTime(2000, 1, 1)),
-// new CashFlow(10, new DateTime(2003, 1, 1)),
-// };
-//
-// IEnumerable doubleNegative = new CashFlow[]
-// {
-// new CashFlow(-10000, new DateTime(2008, 1, 1)),
-// new CashFlow(2750, new DateTime(2008, 3, 1)),
-// new CashFlow(-4250, new DateTime(2008, 10, 30)),
-// new CashFlow(3250, new DateTime(2009, 2, 15)),
-// new CashFlow(2750, new DateTime(2009, 4, 1))
-// };
-//
-// IEnumerable badDoubleNegative = new CashFlow[]
-// {
-// new CashFlow(-10000, new DateTime(2008, 1, 1)),
-// new CashFlow(2750, new DateTime(2008, 3, 1)),
-// new CashFlow(-4250, new DateTime(2008, 10, 30)),
-// new CashFlow(3250, new DateTime(2009, 2, 15)),
-// new CashFlow(-2750, new DateTime(2009, 4, 1))
-// };
-//
-// double r = 0.09;
-// double tolerance = 0.0001;
-// int maxIters = 100;
-//
-// private TestContext testContextInstance;
-//
-// public TestContext TestContext
-// {
-// get { return testContextInstance; }
-// set { testContextInstance = value; }
-// }
-//
-// [TestMethod()]
-// public void CalculateXNPV()
-// {
-// Assert.AreEqual(2086.6476020315416570634272814M, Algorithms.CalculateXNPV(cfs, r));
-// Assert.AreEqual(-10.148147600710372651326920258M, Algorithms.CalculateXNPV(negcfs, 0.5));
-// Assert.AreEqual(4.9923725815954514810351876895M, Algorithms.CalculateXNPV(bigcfs, 0.3));
-// }
-//
-// [TestMethod]
-// public void FindBrackets()
-// {
-// var brackets = Algorithms.FindBrackets(Algorithms.CalculateXNPV, cfs);
-// Assert.IsTrue(brackets.First < 0.3733 && brackets.Second > 0.3733);
-//
-// brackets = Algorithms.FindBrackets(Algorithms.CalculateXNPV, bigcfs);
-// Assert.IsTrue(brackets.First < 0.5196 && brackets.Second > 0.5196);
-//
-// brackets = Algorithms.FindBrackets(Algorithms.CalculateXNPV, negcfs);
-// Assert.IsTrue(brackets.First < -0.6059 && brackets.Second > -0.6059);
-// }
-//
-// [TestMethod]
-// public void XIRRTest()
-// {
-// var irr = Algorithms.CalculateXIRR(cfs, tolerance, maxIters);
-// Assert.AreEqual(0.3733, irr.Value, 0.001);
-// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(bigcfs, tolerance, maxIters);
-// Assert.AreEqual(0.5196, irr.Value, 0.001);
-// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(negcfs, tolerance, maxIters);
-// Assert.AreEqual(-0.6059, irr.Value, 0.001);
-// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(samedaysamecfs, tolerance, maxIters);
-// Assert.AreEqual(ApproximateResultKind.NoSolutionWithinTolerance, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(samedaydifferentcfs, tolerance, maxIters);
-// Assert.AreEqual(ApproximateResultKind.NoSolutionWithinTolerance, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(bigratecfs, tolerance, maxIters);
-// Assert.AreEqual(4.40140, irr.Value, 0.001);
-// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(zeroRate, tolerance, maxIters);
-// Assert.AreEqual(0, irr.Value, 0.001);
-// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(doubleNegative, tolerance, maxIters);
-// Assert.AreEqual(-0.537055, irr.Value, 0.001);
-// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
-//
-// irr = Algorithms.CalculateXIRR(badDoubleNegative, tolerance, maxIters);
-// Assert.AreEqual(ApproximateResultKind.NoSolutionWithinTolerance, irr.Kind);
-// }
-// }
-// }
\ No newline at end of file
diff --git a/EvoCalculator.Core.FinanceFormulas/GoalXIRR.cs b/EvoCalculator.Core.FinanceFormulas/GoalXIRR.cs
deleted file mode 100644
index a3f0998..0000000
--- a/EvoCalculator.Core.FinanceFormulas/GoalXIRR.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using TridentGoalSeek;
-
-namespace EvoCalculator.Core.FinanceFormulas
-{
- public class GoalXIRR : IGoalSeekAlgorithm
- {
- private readonly int x;
-
- public GoalXIRR(int x)
- {
- this.x = x;
- }
-
- public decimal Calculate(decimal inputVariable)
- {
- // Value[2]+=10;
- // ComputeValues
- // XIRR
- // return XIRR
- return inputVariable * this.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 8b6aeb6..a3d48da 100644
--- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
+++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
@@ -70,7 +70,7 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared
public double TransportTaxGr { get; set; }
public double NsibBrutto { get; set; }
public double NsibNetto { get; set; }
- public double NmperDeprecation { get; set; }
+ public int NmperDeprecation { get; set; }
public double DeprecationTime { get; set; }
public double RatBonus { get; set; }
public double NsBonus { get; set; }
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptInsuranceTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptInsuranceTests.cs
new file mode 100644
index 0000000..0a76579
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptInsuranceTests.cs
@@ -0,0 +1,136 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class AcceptInsuranceTests
+ {
+ [Fact]
+ public void AcceptInsuranceTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 30,
+ };
+
+ var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 123666.666666667,
+ 0.00,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ }
+ };
+
+
+ var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 30000,
+ 0.00,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 2727.27272727273,
+ 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 acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
+ acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
+
+ var expected = new[]
+ {
+ 153666.6666666666,
+ 0.00,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 6991.64054336468,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ 4264.36781609195,
+ };
+
+ Assert.Equal(expected, acceptInsuranceColumn.Values);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptKaskoTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptKaskoTests.cs
new file mode 100644
index 0000000..bf5d101
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptKaskoTests.cs
@@ -0,0 +1,61 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class AcceptKaskoTests
+ {
+ [Fact]
+ public void AcceptKaskoTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 30,
+ InsuranceKaskoNmper = 123666.666666667
+ };
+
+
+ var expected = new[]
+ {
+ 123666.666666667,
+ 0.00,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ 4264.367816091965,
+ };
+
+
+ var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
+ acceptKaskoColumn.ComputeValues(preparedValues);
+
+ Assert.Equal(expected, acceptKaskoColumn.Values);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptOsagoTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptOsagoTests.cs
new file mode 100644
index 0000000..5f9d51f
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptOsagoTests.cs
@@ -0,0 +1,61 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class AcceptOsagoTests
+ {
+ [Fact]
+ public void AcceptOsagoTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 30,
+ InsuranceOsago = 30000
+ };
+
+
+ var expected = new[]
+ {
+ 30000.000000000004,
+ 0.00,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 2727.2727272727275,
+ 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 acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
+ acceptOsagoColumn.ComputeValues(preparedValues);
+
+ Assert.Equal(expected, acceptOsagoColumn.Values);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs
new file mode 100644
index 0000000..dba17af
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs
@@ -0,0 +1,251 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class AcceptSumTests
+ {
+ [Fact]
+ public void AcceptSumTest1()
+ {
+ var preparedValues =
+ new PreparedValues()
+ {
+ Nmper = 30,
+ AcceptSum = 2500000
+ };
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ new DateTime(2020, 10, 12),
+ new DateTime(2020, 10, 12),
+ new DateTime(2020, 11, 12),
+ new DateTime(2020, 12, 12),
+ new DateTime(2021, 1, 12),
+ new DateTime(2021, 2, 12),
+ new DateTime(2021, 3, 12),
+ new DateTime(2021, 4, 12),
+ new DateTime(2021, 5, 12),
+ new DateTime(2021, 6, 12),
+ new DateTime(2021, 7, 12),
+ new DateTime(2021, 8, 12),
+ new DateTime(2021, 9, 12),
+ new DateTime(2021, 10, 12),
+ new DateTime(2021, 11, 12),
+ new DateTime(2021, 12, 12),
+ new DateTime(2022, 1, 12),
+ new DateTime(2022, 2, 12),
+ new DateTime(2022, 3, 12),
+ new DateTime(2022, 4, 12),
+ new DateTime(2022, 5, 12),
+ new DateTime(2022, 6, 12),
+ new DateTime(2022, 7, 12),
+ new DateTime(2022, 8, 12),
+ new DateTime(2022, 9, 12),
+ new DateTime(2022, 10, 12),
+ new DateTime(2022, 11, 12),
+ new DateTime(2022, 12, 12),
+ new DateTime(2023, 1, 12),
+ new DateTime(2023, 2, 12),
+ new DateTime(2023, 3, 12),
+ new DateTime(2023, 4, 12),
+ new DateTime(2023, 5, 12),
+ new DateTime(2023, 6, 12),
+ new DateTime(2023, 7, 12),
+ new DateTime(2023, 8, 12),
+ new DateTime(2023, 9, 12),
+ new DateTime(2023, 10, 12),
+ new DateTime(2023, 11, 12),
+ new DateTime(2023, 12, 12),
+ new DateTime(2024, 1, 12),
+ new DateTime(2024, 2, 12),
+ new DateTime(2024, 3, 12),
+ new DateTime(2024, 4, 12),
+ new DateTime(2024, 5, 12),
+ new DateTime(2024, 6, 12),
+ new DateTime(2024, 7, 12),
+ new DateTime(2024, 8, 12),
+ new DateTime(2024, 9, 12),
+ new DateTime(2024, 10, 12),
+ new DateTime(2024, 11, 12),
+ new DateTime(2024, 12, 12),
+ new DateTime(2025, 1, 12),
+ new DateTime(2025, 2, 12),
+ new DateTime(2025, 3, 12),
+ new DateTime(2025, 4, 12),
+ new DateTime(2025, 5, 12),
+ new DateTime(2025, 6, 12),
+ new DateTime(2025, 7, 12),
+ new DateTime(2025, 8, 12),
+ new DateTime(2025, 9, 12),
+ new DateTime(2025, 10, 12),
+ new DateTime(2025, 11, 12),
+ new DateTime(2025, 12, 12),
+ new DateTime(2026, 1, 12),
+ new DateTime(2026, 2, 12),
+ new DateTime(2026, 3, 12),
+ }
+ };
+
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null)
+ {
+ Values = new[]
+ {
+ -2542903.66268442,
+ 625000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 120000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 108000.00,
+ 96000.00,
+ 96000.00,
+ 96000.00,
+ 96000.00,
+ 96000.00,
+ 96000.00,
+ 96000.00,
+ 25000.00,
+ }
+ };
+
+ var vatColumn = new VATColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 742000.00,
+ 125000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 24000.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 21600.00,
+ 19200.00,
+ 19200.00,
+ 19200.00,
+ 19200.00,
+ 19200.00,
+ 19200.00,
+ 19200.00,
+ 5000.00,
+ }
+ };
+
+ var sumWithVatColumn = new SumWithVATColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 4452000.00,
+ 750000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 144000.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 129600.00,
+ 115200.00,
+ 115200.00,
+ 115200.00,
+ 115200.00,
+ 115200.00,
+ 115200.00,
+ 115200.00,
+ 30000.00,
+ }
+ };
+
+ var expected = new[]
+ {
+ 2500000,
+ 421159.0296495957,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 80862.53369272237,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 72776.280323450133,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 16846.361185983827,
+ };
+
+
+ var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
+ acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
+
+ var values = acceptSumColumn.Values;
+ Assert.Equal(expected, values);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs
new file mode 100644
index 0000000..94fc891
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs
@@ -0,0 +1,72 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class DeprecationLDTests
+ {
+ [Fact]
+ public void DeprecationLDTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ BalanceHolder = 100000001,
+ NmperDeprecation = 37,
+ DeprecationTime = 5.60,
+ AcceptSum = 2500000
+ };
+
+
+ var deprecationLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2);
+ deprecationLDColumn.ComputeValues(preparedValues);
+
+ var expected = new[]
+ {
+ 2500000.00,
+ 0.00,
+ 140000.00,
+ 132160.00,
+ 124759.04,
+ 117772.53376,
+ 111177.27186944,
+ 104951.344644751,
+ 99074.0693446453,
+ 93525.9214613451,
+ 88288.4698595098,
+ 83344.3155473772,
+ 78677.0338767241,
+ 74271.1199796276,
+ 70111.9372607684,
+ 66185.6687741654,
+ 62479.2713228121,
+ 58980.4321287346,
+ 55677.5279295255,
+ 52559.5863654721,
+ 49616.2495290057,
+ 46837.7395553813,
+ 44214.82614028,
+ 41738.7958764243,
+ 39401.4233073445,
+ 37194.9436021332,
+ 35112.0267604138,
+ 33145.7532618306,
+ 31289.5910791681,
+ 29537.3739787347,
+ 27883.2810359255,
+ 26321.8172979137,
+ 24847.7955292305,
+ 23456.3189795936,
+ 22142.7651167364,
+ 20902.7702701992,
+ 19732.215135068,
+ 18627.2110875042,
+ 314001.558332213,
+ };
+
+
+ var values = deprecationLDColumn.Values;
+ Assert.Equal(expected, values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs
new file mode 100644
index 0000000..c76dfd5
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs
@@ -0,0 +1,189 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class DeprecationLPTests
+ {
+ [Fact]
+ public void DeprecationLPTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ BalanceHolder = 100000001,
+ Nmper = 30
+ };
+
+ var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 2224393.53099731,
+ 421159.029649596,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 16846.3611859838,
+ }
+ };
+
+ var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
+ deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn);
+
+ var expected = new[]
+ {
+ 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,
+ 0.00,
+ 0.00,
+ 0.00,
+ };
+
+
+ var values = deprecationLPColumn.Values;
+ Assert.Equal(expected, values);
+ }
+
+ [Fact]
+ public void DeprecationLPTest2()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ BalanceHolder = 100000000,
+ Nmper = 30
+ };
+
+ var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 2224393.53099731,
+ 421159.029649596,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 80862.533692722398,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 72776.280323450104,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 64690.026954177898,
+ 16846.3611859838,
+ }
+ };
+
+ var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
+ deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn);
+
+ var expected = new[]
+ {
+ 2500000.00,
+ 421159.029649596,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 80862.5336927224,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 72776.2803234501,
+ 64690.0269541779,
+ 64690.0269541779,
+ 64690.0269541779,
+ 64690.0269541779,
+ 64690.0269541779,
+ 64690.0269541779,
+ 64690.0269541779,
+ 16846.3611859838,
+ };
+
+
+ var values = deprecationLPColumn.Values;
+ Assert.Equal(expected, values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs
new file mode 100644
index 0000000..ed8c7b9
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs
@@ -0,0 +1,153 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class DeprecationTests
+ {
+ [Fact]
+ public void DepreactionTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ NmperDeprecation = 37,
+ Nmper = 30
+ };
+
+ var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 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,
+ 0.00,
+ 0.00,
+ 0.00,
+ }
+ };
+
+ var deprectionLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2)
+ {
+ Values = new[]
+ {
+ 2500000.00,
+ 0.00,
+ 140000.00,
+ 132160.00,
+ 124759.04,
+ 117772.53376,
+ 111177.27186944,
+ 104951.344644751,
+ 99074.0693446453,
+ 93525.9214613451,
+ 88288.4698595098,
+ 83344.3155473772,
+ 78677.0338767241,
+ 74271.1199796276,
+ 70111.9372607684,
+ 66185.6687741654,
+ 62479.2713228121,
+ 58980.4321287346,
+ 55677.5279295255,
+ 52559.5863654721,
+ 49616.2495290057,
+ 46837.7395553813,
+ 44214.82614028,
+ 41738.7958764243,
+ 39401.4233073445,
+ 37194.9436021332,
+ 35112.0267604138,
+ 33145.7532618306,
+ 31289.5910791681,
+ 29537.3739787347,
+ 27883.2810359255,
+ 26321.8172979137,
+ 24847.7955292305,
+ 23456.3189795936,
+ 22142.7651167364,
+ 20902.7702701992,
+ 19732.215135068,
+ 18627.2110875042,
+ 314001.558332213,
+ }
+ };
+
+ var deprecationColumn = new DeprecationColumn(preparedValues.NmperDeprecation + 2);
+ deprecationColumn.ComputeValues(deprecationLPColumn, deprectionLDColumn);
+
+ var expected = new[]
+ {
+ 2500000.00,
+ 0.00,
+ 140000.00,
+ 132160.00,
+ 124759.04,
+ 117772.53376,
+ 111177.27186944,
+ 104951.344644751,
+ 99074.0693446453,
+ 93525.9214613451,
+ 88288.4698595098,
+ 83344.3155473772,
+ 78677.0338767241,
+ 74271.1199796276,
+ 70111.9372607684,
+ 66185.6687741654,
+ 62479.2713228121,
+ 58980.4321287346,
+ 55677.5279295255,
+ 52559.5863654721,
+ 49616.2495290057,
+ 46837.7395553813,
+ 44214.82614028,
+ 41738.7958764243,
+ 39401.4233073445,
+ 37194.9436021332,
+ 35112.0267604138,
+ 33145.7532618306,
+ 31289.5910791681,
+ 29537.3739787347,
+ 27883.2810359255,
+ 26321.8172979137,
+ 24847.7955292305,
+ 23456.3189795936,
+ 22142.7651167364,
+ 20902.7702701992,
+ 19732.215135068,
+ 18627.2110875042,
+ 314001.558332213,
+ };
+
+
+ var values = deprecationColumn.Values;
+ Assert.Equal(expected, values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
new file mode 100644
index 0000000..6c6edaf
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
@@ -0,0 +1,130 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class NPVBonusExpensesTests
+ {
+ [Fact]
+ public void NPVBonusExpensesTest1()
+ {
+ var preparedValue = new PreparedValues
+ {
+ SalaryRate = 0.3,
+ MarketRate = 0.01,
+ DistrictRate = 0.02,
+ RatBonus = 360.00,
+ NsBonus = 90.00,
+ NsibBonus = 97.014,
+ BonusFix = 0.00,
+ BonusBase = 2003933.33333333,
+ Bonus = 0.011,
+ Nmper = 30
+ };
+
+
+ var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValue.Nmper + 1);
+ npvBonusExpensesColumn.ComputeValues(preparedValue);
+
+ var expected = new[]
+ {
+ -30248.3858126666,
+ -732.451746,
+ -29515.9340666666,
+ 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, npvBonusExpensesColumn.Values, new DoubleArrayComparer());
+ }
+
+
+ [Fact]
+ public void NPVBonusExpensesTest2()
+ {
+ var preparedValue = new PreparedValues
+ {
+ SalaryRate = 0.3,
+ MarketRate = 0.01,
+ DistrictRate = 0.02,
+ RatBonus = 360.00,
+ NsBonus = 90.00,
+ NsibBonus = 97.014,
+ BonusFix = 20000.00,
+ BonusBase = 2003933.33333333,
+ Bonus = 0.011,
+ Nmper = 30
+ };
+
+
+ var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValue.Nmper + 1);
+ npvBonusExpensesColumn.ComputeValues(preparedValue);
+
+ var expected = new[]
+ {
+ -20732.451746,
+ -732.451746,
+ -20000.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,
+ 0.00,
+ };
+
+
+ Assert.Equal(expected, npvBonusExpensesColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
index a13c135..f1feb90 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs
@@ -176,7 +176,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
, percentPaymentColumn);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
var values = sumColumn.Values;
- Assert.Equal(expected, values);
+ Assert.Equal(expected, values, new DoubleArrayComparer(100));
}
[Fact]
@@ -306,7 +306,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
, percentPaymentColumn);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
var values = sumColumn.Values;
- Assert.Equal(expected, values);
+ Assert.Equal(expected, values, new DoubleArrayComparer(100));
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/DoubleArrayComparer.cs b/EvoCalculator.Core.Tests/DoubleArrayComparer.cs
new file mode 100644
index 0000000..5c49c5b
--- /dev/null
+++ b/EvoCalculator.Core.Tests/DoubleArrayComparer.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+
+namespace EvoCalculator.Core.Tests
+{
+ public class DoubleArrayComparer : IEqualityComparer
+ {
+ private double _tolerance = 0.001;
+
+ public DoubleArrayComparer(double tolerance)
+ {
+ this._tolerance = tolerance;
+ }
+ public DoubleArrayComparer()
+ {
+
+ }
+
+ public bool Equals(double x, double y)
+ {
+ return Math.Abs(x - y) < _tolerance;
+ }
+
+ public int GetHashCode(double obj)
+ {
+ return obj.GetHashCode();
+ }
+ }
+}
\ No newline at end of file