diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
index 379e082..1606b2d 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
@@ -45,6 +45,7 @@
+
@@ -52,14 +53,21 @@
+
+
+
+
+
+
+
@@ -71,17 +79,21 @@
+
+
+
+
@@ -162,8 +174,13 @@
+
+
+
+
+
@@ -171,7 +188,9 @@
+
+
@@ -183,16 +202,20 @@
+
+
+
+
diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index 2331513..cfeb6f3 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,51 +14,29 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -83,11 +61,9 @@
-
-
@@ -96,36 +72,6 @@
@@ -223,7 +199,8 @@
-
+
+
1602593830686
@@ -260,7 +237,14 @@
1603646824466
-
+
+ 1603717567220
+
+
+
+ 1603717567220
+
+
@@ -288,7 +272,8 @@
-
+
+
@@ -303,110 +288,110 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -415,26 +400,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -465,40 +450,27 @@
256
-
+
-
+
file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs
- 86
+ 85
-
+
-
+
-
- file://$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs
- 14
-
-
-
-
-
-
-
-
-
-
@@ -511,6 +483,9 @@
+
+
+
diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithGoalSeek.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithGoalSeek.cs
new file mode 100644
index 0000000..279deb3
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithGoalSeek.cs
@@ -0,0 +1,15 @@
+using TridentGoalSeek;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public abstract class BaseColumnWithGoalSeek : BaseColumnWithXIRR, IGoalSeekAlgorithm
+ {
+ public BaseColumnWithGoalSeek(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ public abstract decimal Calculate(decimal inputVariable);
+ protected abstract void FillValues(decimal x);
+ public abstract void ComputeValues(decimal requiredValue);
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOFinal2Column.cs b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOFinal2Column.cs
new file mode 100644
index 0000000..f626cd0
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOFinal2Column.cs
@@ -0,0 +1,20 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class CashflowMSFOFinal2Column : BaseColumnWithNominal
+ {
+ public CashflowMSFOFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, DirectorBonusSumColumn directorBonusSumColumn,
+ CashflowMSFOFinalColumn cashflowMsfoFinalColumn)
+ {
+ Values[0] = -preparedValues.AcquisitionExpenses;
+ Values[1] = cashflowMsfoFinalColumn.Values[1];
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = cashflowMsfoFinalColumn.Values[i] + directorBonusSumColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOFinalColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOFinalColumn.cs
new file mode 100644
index 0000000..c0c3483
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOFinalColumn.cs
@@ -0,0 +1,20 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class CashflowMSFOFinalColumn : BaseColumnWithNominal
+ {
+ public CashflowMSFOFinalColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, CashflowMSFOColumn cashflowMsfoColumn,
+ ExtraBonusSumColumn extraBonusSumColumn)
+ {
+ Values[0] = -preparedValues.AcquisitionExpenses;
+ Values[1] = cashflowMsfoColumn.Values[1];
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = cashflowMsfoColumn.Values[i] + extraBonusSumColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowNPVFinal2Column.cs b/EvoCalculator.Core.Calculation/Columns/CashflowNPVFinal2Column.cs
new file mode 100644
index 0000000..99705cd
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowNPVFinal2Column.cs
@@ -0,0 +1,21 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class CashflowNPVFinal2Column : BaseColumn
+ {
+ public CashflowNPVFinal2Column(int count) : base(count)
+ {
+ }
+
+
+ public void ComputeValues(PreparedValues preparedValues, CashflowNPVFinalColumn cashflowNpvFinalColumn,
+ DirectorBonusSumColumn directorBonusSumColumn)
+ {
+ Values[0] = -preparedValues.AcquisitionExpenses;
+ Values[1] = cashflowNpvFinalColumn.Values[1];
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = cashflowNpvFinalColumn.Values[i] + directorBonusSumColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowNPVFinalColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowNPVFinalColumn.cs
new file mode 100644
index 0000000..fb0f8a0
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowNPVFinalColumn.cs
@@ -0,0 +1,20 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class CashflowNPVFinalColumn : BaseColumn
+ {
+ public CashflowNPVFinalColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, ExtraBonusSumColumn extraBonusSumColumn,
+ CashflowNPVColumn cashflowNpvColumn)
+ {
+ Values[0] = -preparedValues.AcquisitionExpenses;
+ Values[1] = cashflowNpvColumn.Values[1];
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = extraBonusSumColumn.Values[i] + cashflowNpvColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs b/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs
new file mode 100644
index 0000000..8ecbdd5
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs
@@ -0,0 +1,19 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class DirectorBonusSumColumn : BaseColumnWithSum
+ {
+ public DirectorBonusSumColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues)
+ {
+ Values[2] = -preparedValues.BonusBase * (decimal) preparedValues.DirectorBonus *
+ (decimal) (1 + preparedValues.SalaryRate) *
+ (decimal) (1 + preparedValues.MarketRate + preparedValues.DistrictRate);
+ Values[0] = Sum;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs b/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs
new file mode 100644
index 0000000..9f4e2a5
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs
@@ -0,0 +1,22 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class ExtraBonusSumColumn : BaseColumnWithSum
+ {
+ public ExtraBonusSumColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, CashflowMSFOColumn cashflowMsfoColumn)
+ {
+ Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan
+ ? -1 * preparedValues.BonusBase *
+ (decimal) (cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) *
+ (decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) *
+ (decimal) (1 + preparedValues.MarketRate + preparedValues.DistrictRate)
+ : 0;
+ Values[0] = Sum;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs
index f6a5c20..8c49dc1 100644
--- a/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs
@@ -9,9 +9,7 @@
public void ComputeValues(CashflowNPVColumn cashflowNpvColumn, NPVWeightColumn npvWeightColumn)
{
for (var i = 0; i < Values.Length; i++)
- {
Values[i] = cashflowNpvColumn.Values[i] * (decimal) npvWeightColumn.Values[i];
- }
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVFinal2Column.cs b/EvoCalculator.Core.Calculation/Columns/NPVFinal2Column.cs
new file mode 100644
index 0000000..4623b14
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NPVFinal2Column.cs
@@ -0,0 +1,17 @@
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NPVFinal2Column : BaseColumnWithNominal
+ {
+ public NPVFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ public void ComputeValues(CashflowNPVFinal2Column cashflowNpvFinal2Column, NPVWeightColumn npvWeightColumn)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ {
+ Values[i] = cashflowNpvFinal2Column.Values[i] * (decimal) npvWeightColumn.Values[i];
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVFinalColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVFinalColumn.cs
new file mode 100644
index 0000000..33267fd
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NPVFinalColumn.cs
@@ -0,0 +1,15 @@
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NPVFinalColumn : BaseColumnWithNominal
+ {
+ public NPVFinalColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ public void ComputeValues(CashflowNPVFinalColumn cashflowNpvFinalColumn, NPVWeightColumn npvWeightColumn)
+ {
+ for (var i = 0; i < Values.Length; i++)
+ Values[i] = cashflowNpvFinalColumn.Values[i] * (decimal) npvWeightColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs
index 0cd2279..d71b995 100644
--- a/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs
@@ -13,11 +13,9 @@ namespace EvoCalculator.Core.Calculation.Columns
{
Values[0] = 1;
for (var i = 1; i < Values.Length; i++)
- {
Values[i] = Values[i - 1] / Math.Pow(
1 + preparedValues.LoanRate / 365,
(dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days);
- }
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/RevenueColumn.cs b/EvoCalculator.Core.Calculation/Columns/RevenueColumn.cs
new file mode 100644
index 0000000..c496533
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/RevenueColumn.cs
@@ -0,0 +1,17 @@
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class RevenueColumn : BaseColumn
+ {
+ public RevenueColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn,
+ CashflowNSIBColumn cashflowNsibColumn)
+ {
+ Values[1] = nsibBruttoGrColumn.Values[1] - cashflowNsibColumn.Values[1];
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = Values[1] * nsibExpensesColumn.Values[i] / nsibExpensesColumn.Values[1];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
index 5b107a7..0c15b72 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
@@ -4,7 +4,7 @@ using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.Columns
{
- public class SumColumn : BaseColumnWithXIRR, IGoalSeekAlgorithm
+ public class SumColumn : BaseColumnWithGoalSeek
{
private readonly PercentPaymentColumn _percentPaymentColumn;
private readonly PreparedValues _preparedValues;
@@ -17,13 +17,13 @@ namespace EvoCalculator.Core.Calculation.Columns
_percentPaymentColumn = percentPaymentColumn;
}
- public decimal Calculate(decimal inputVariable)
+ public override decimal Calculate(decimal inputVariable)
{
FillValues(inputVariable);
return Convert.ToDecimal(IRR);
}
- private void FillValues(decimal x)
+ protected override void FillValues(decimal x)
{
Values[0] = -_preparedValues.BaseCost;
Values[1] = _preparedValues.FirstPaymentSum;
@@ -33,10 +33,10 @@ namespace EvoCalculator.Core.Calculation.Columns
Values[^1] = _preparedValues.LastPaymentSum;
}
- public void ComputeValues(decimal requiredIRR)
+ public override void ComputeValues(decimal requiredValue)
{
var goalSeek = new GoalSeek(this);
- goalSeek.SeekResult(requiredIRR,
+ goalSeek.SeekResult(requiredValue,
new GoalSeekOptions(
startingStabPoint: Convert.ToDecimal(
(_preparedValues.BaseCost - _preparedValues.FirstPaymentSum) /
diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs
index 02e588d..bddfc1c 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs
@@ -10,10 +10,7 @@ namespace EvoCalculator.Core.Calculation.Columns
public void ComputeValues(SumWithVATColumn sumWithVatColumn)
{
- for (var i = 1; i < Values.Length; i++)
- {
- Values[i] = sumWithVatColumn.Values.Skip(i).Sum(x => x);
- }
+ for (var i = 1; i < Values.Length; i++) Values[i] = sumWithVatColumn.Values.Skip(i).Sum(x => x);
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs
index 57ed362..71bc756 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs
@@ -10,10 +10,7 @@ namespace EvoCalculator.Core.Calculation.Columns
public void ComputeValues(NegativeCashflowColumn negativeCashflowColumn)
{
- for (var i = 1; i < Values.Length; i++)
- {
- Values[i] = negativeCashflowColumn.Values.Skip(i).Sum(x => x);
- }
+ for (var i = 1; i < Values.Length; i++) Values[i] = negativeCashflowColumn.Values.Skip(i).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 3e360be..f93f423 100644
--- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
+++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
@@ -90,5 +90,8 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared
public decimal BonusBase { get; set; }
public decimal NpvBase { get; set; }
public decimal TLMCost { get; set; }
+ public double IRR_MSFO_Plan { get; set; }
+ public double ExtraBonus { get; set; }
+ public double DirectorBonus { get; set; }
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal2.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal2.cs
new file mode 100644
index 0000000..dc0b84f
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal2.cs
@@ -0,0 +1,199 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class CashflowMsfoFinal2Tests
+ {
+ [Fact]
+ public void CashflowMsfoFinal2Test1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ AcquisitionExpenses = 2507300
+ };
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ 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 directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -7524.610925m,
+ 0,
+ -7524.610925m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 623323.69753125m,
+ -396728.986329981m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 127486.241319444m,
+ 70069.5746527778m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 112986.241319444m,
+ 112986.241319444m,
+ 21986.2413194444m
+ }
+ };
+
+ var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
+ cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
+
+ var expected = new[]
+ {
+ -2507300m,
+ 623323.69753125m,
+ -404253.597254981m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 141986.241319444m,
+ 127486.241319444m,
+ 70069.5746527778m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 127486.241319444m,
+ 112986.241319444m,
+ 112986.241319444m,
+ 21986.2413194444m
+ };
+
+
+ Assert.Equal(expected.Length, cashflowMsfoFinal2Column.Values.Length);
+ Assert.Equal(0.264075595140457, cashflowMsfoFinal2Column.IRR, new DoubleArrayComparer(0.01));
+ Assert.Equal(0.236644224219182, cashflowMsfoFinal2Column.Nominal, new DoubleArrayComparer(0.01));
+ Assert.Equal(expected, cashflowMsfoFinal2Column.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal.cs
new file mode 100644
index 0000000..073b0d6
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal.cs
@@ -0,0 +1,123 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class CashflowNpvFinalTests
+ {
+ [Fact]
+ public void CashflowNpvFinalTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ AcquisitionExpenses = 2507300
+ };
+
+ var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -7487.31397588584m,
+ 0,
+ -7487.31397588584m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 576206.70740985m,
+ -265374.923416037m,
+ 117229.001963963m,
+ 122029.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 105540.661111001m,
+ 42337.4923988798m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 93306.8657125845m,
+ 93306.8657125845m,
+ 23600.0284642829m
+ }
+ };
+
+ var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(preparedValues.Nmper + 1);
+ cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
+
+
+ var expected = new[]
+ {
+ -2507300m,
+ 576206.70740985m,
+ -272862.237391923m,
+ 117229.001963963m,
+ 122029.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 117229.001963963m,
+ 105540.661111001m,
+ 42337.4923988798m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 104995.206565546m,
+ 93306.8657125845m,
+ 93306.8657125845m,
+ 23600.0284642829m
+ };
+
+
+ Assert.Equal(expected.Length, cashflowNpvFinalColumn.Values.Length);
+ Assert.Equal(expected, cashflowNpvFinalColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal2.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal2.cs
new file mode 100644
index 0000000..e06a69b
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal2.cs
@@ -0,0 +1,123 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class CashflowNpvFinal2Tests
+ {
+ [Fact]
+ public void CashflowNpvFinal2Test1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ AcquisitionExpenses = 2507300
+ };
+
+ var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 562200.08956372m,
+ -310589.328673099m,
+ 135135.417631327m,
+ 139935.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 121656.435211628m,
+ 58453.266499507m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 107631.998246475m,
+ 107631.998246475m,
+ 23039.7637504377m
+ }
+ };
+
+ var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -7524.610925m,
+ 0,
+ -7524.610925m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(preparedValues.Nmper + 1);
+ cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
+
+
+ var expected = new[]
+ {
+ -2507300m,
+ 562200.08956372m,
+ -318113.939598099m,
+ 135135.417631327m,
+ 139935.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 121656.435211628m,
+ 58453.266499507m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 107631.998246475m,
+ 107631.998246475m,
+ 23039.7637504377m
+ };
+
+
+ Assert.Equal(expected.Length, cashflowNpvFinal2Column.Values.Length);
+ Assert.Equal(expected, cashflowNpvFinal2Column.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNSIB.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNSIB.cs
new file mode 100644
index 0000000..9405b96
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNSIB.cs
@@ -0,0 +1,232 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class CashflowNsibTests
+ {
+ [Fact]
+ public void CashflowNsibTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ 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 cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 625000m,
+ 117858.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 119758.04449644m,
+ 107480.86417874m,
+ 50064.1975120737m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 107480.86417874m,
+ 95203.6838610409m,
+ 95203.6838610409m,
+ 21986.2413194444m
+ }
+ };
+
+ var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -4811.4375m,
+ -2309.49m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ -2501.9475m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 26730.2083333333m,
+ 0,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m
+ }
+ };
+
+ var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
+ nsibBruttoGrColumn, nsibExpensesColumn);
+ cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
+
+
+ var expected = new[]
+ {
+ 0,
+ -10899.0991979689m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ -10693.5987839108m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m
+ };
+
+
+ Assert.Equal(expected.Length, cashflowNsibColumn.Values.Length);
+ Assert.Equal(0.379046887159348, cashflowNsibColumn.IRR, new DoubleArrayComparer());
+ Assert.Equal(expected, cashflowNsibColumn.Values, new DecimalArrayComparer(1));
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs
new file mode 100644
index 0000000..962e061
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.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 DirectorBonusSumTests
+ {
+ [Fact]
+ public void DirectorBonusSumTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ BonusBase = 1873191.66666667m,
+ DirectorBonus = 0.003,
+ SalaryRate = 0.3,
+ MarketRate = 0.01,
+ DistrictRate = 0.02
+ };
+
+ var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
+ directorBonusSumColumn.ComputeValues(preparedValues);
+
+
+ var expected = new[]
+ {
+ -7524.610925m,
+ 0,
+ -7524.610925m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+
+
+ Assert.Equal(expected.Length, directorBonusSumColumn.Values.Length);
+ Assert.Equal(expected, directorBonusSumColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs
new file mode 100644
index 0000000..2b15f42
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs
@@ -0,0 +1,170 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class ExtraBonusSumTests
+ {
+ [Fact]
+ public void ExtraBonusSumTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ IRR_MSFO_Plan = 0.05,
+ BonusBase = 1873191.66666667m,
+ ExtraBonus = 0.00764256319811875,
+ SalaryRate = 0,
+ MarketRate = 0,
+ DistrictRate = 0
+ };
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ 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 cashflowMsfoColumn = new CashflowMSFOColumn(preparedValues.Nmper + 1, dateTempColumn)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 623323.69753125m,
+ -355830.906125263m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 119763.500599737m,
+ 107485.774671708m,
+ 50069.1080050413m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 107485.774671708m,
+ 95208.0487436787m,
+ 95208.0487436787m,
+ 21986.2413194444m
+ }
+ };
+
+ var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
+ extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn);
+
+
+ var expected = new[]
+ {
+ -7487.31397588584m,
+ 0,
+ -7487.31397588584m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+
+
+ Assert.Equal(expected.Length, extraBonusSumColumn.Values.Length);
+ Assert.Equal(expected, extraBonusSumColumn.Values, new DecimalArrayComparer(0.3));
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal.cs
new file mode 100644
index 0000000..402eea8
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal.cs
@@ -0,0 +1,240 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class NpvFinalTests
+ {
+ [Fact]
+ public void NpvFinalTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ 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 cashflowNpvFinalColumn = new CashflowNPVFinalColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 562200.08956372m,
+ -310589.328673099m,
+ 135135.417631327m,
+ 139935.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 121656.435211628m,
+ 58453.266499507m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 107631.998246475m,
+ 107631.998246475m,
+ 23039.7637504377m
+ }
+ };
+
+ var npvWeightColumn = new NPVWeightColumn(67)
+ {
+ Values = new[]
+ {
+ 1,
+ 1,
+ 0.994263643057415,
+ 0.98837064137184,
+ 0.982512567513616,
+ 0.977251253020835,
+ 0.97145908378937,
+ 0.965886447729637,
+ 0.960161637711399,
+ 0.954653807834909,
+ 0.948995573685451,
+ 0.943370875895905,
+ 0.937959363822527,
+ 0.93240007766075,
+ 0.927051498001993,
+ 0.921556862772709,
+ 0.916094794252359,
+ 0.911014429114697,
+ 0.905614845610017,
+ 0.900419915603094,
+ 0.895083125791432,
+ 0.889948609488607,
+ 0.884673883119589,
+ 0.879430420059453,
+ 0.874385693263824,
+ 0.869203208316068,
+ 0.864217148457527,
+ 0.859094932485813,
+ 0.854003075893692,
+ 0.849429924456607,
+ 0.844395352377508,
+ 0.83955159923561,
+ 0.834575576000758,
+ 0.829788152601254,
+ 0.824869997325142,
+ 0.81998099196066,
+ 0.815277288304638,
+ 0.810445138936875,
+ 0.80579613633755,
+ 0.801020181767729,
+ 0.796272534285798,
+ 0.792008527530705,
+ 0.787314292133165,
+ 0.78279797632749,
+ 0.778158331876872,
+ 0.773694537927379,
+ 0.769108849565985,
+ 0.764550340584458,
+ 0.76016460693029,
+ 0.755659110484519,
+ 0.751324380099863,
+ 0.746871279688058,
+ 0.7424445728072,
+ 0.738468812577606,
+ 0.734091907128381,
+ 0.729880893920429,
+ 0.725554889074355,
+ 0.721392847249186,
+ 0.717117151064894,
+ 0.712866796936501,
+ 0.708777538536756,
+ 0.704576613300819,
+ 0.700534910353527,
+ 0.696382839183729,
+ 0.692255377344236,
+ 0.688416353143374,
+ 0.684336108675241
+ }
+ };
+
+ var npvFinalColumn = new NPVFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
+ npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
+
+
+ var expected = new[]
+ {
+ -2507300m,
+ 562200.08956372m,
+ -308807.677421272m,
+ 133563.879396326m,
+ 137488.306463045m,
+ 132061.256207708m,
+ 131278.528999622m,
+ 130525.468498383m,
+ 129751.843905708m,
+ 129007.541015107m,
+ 128242.913180264m,
+ 127482.817295423m,
+ 114108.792576015m,
+ 54501.8302236648m,
+ 112276.116051067m,
+ 111610.655390045m,
+ 110949.13891508m,
+ 110333.850911115m,
+ 109679.902057675m,
+ 109050.738990044m,
+ 108404.395142344m,
+ 107782.548837663m,
+ 107143.721554365m,
+ 94654.8534297361m,
+ 94111.879404115m,
+ 20026.2365707247m
+ };
+
+
+ Assert.Equal(expected.Length, npvFinalColumn.Values.Length);
+ Assert.Equal(0.13361788392067, npvFinalColumn.IRR, new DoubleArrayComparer());
+ Assert.Equal(0.126071837819239, npvFinalColumn.Nominal, new DoubleArrayComparer());
+ Assert.Equal(expected, npvFinalColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal2.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal2.cs
new file mode 100644
index 0000000..7ae3e1d
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal2.cs
@@ -0,0 +1,241 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class NpvFinal2Tests
+ {
+ [Fact]
+ public void NpvFinal2Test1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ 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 cashflowNpvFinal2Column = new CashflowNPVFinal2Column(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 562200.08956372m,
+ -318113.939598099m,
+ 135135.417631327m,
+ 139935.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 135135.417631327m,
+ 121656.435211628m,
+ 58453.266499507m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 121110.980666174m,
+ 107631.998246475m,
+ 107631.998246475m,
+ 23039.7637504377m
+ }
+ };
+
+ var npvWeightColumn = new NPVWeightColumn(67)
+ {
+ Values = new[]
+ {
+ 1,
+ 1,
+ 0.994263643057415,
+ 0.98837064137184,
+ 0.982512567513616,
+ 0.977251253020835,
+ 0.97145908378937,
+ 0.965886447729637,
+ 0.960161637711399,
+ 0.954653807834909,
+ 0.948995573685451,
+ 0.943370875895905,
+ 0.937959363822527,
+ 0.93240007766075,
+ 0.927051498001993,
+ 0.921556862772709,
+ 0.916094794252359,
+ 0.911014429114697,
+ 0.905614845610017,
+ 0.900419915603094,
+ 0.895083125791432,
+ 0.889948609488607,
+ 0.884673883119589,
+ 0.879430420059453,
+ 0.874385693263824,
+ 0.869203208316068,
+ 0.864217148457527,
+ 0.859094932485813,
+ 0.854003075893692,
+ 0.849429924456607,
+ 0.844395352377508,
+ 0.83955159923561,
+ 0.834575576000758,
+ 0.829788152601254,
+ 0.824869997325142,
+ 0.81998099196066,
+ 0.815277288304638,
+ 0.810445138936875,
+ 0.80579613633755,
+ 0.801020181767729,
+ 0.796272534285798,
+ 0.792008527530705,
+ 0.787314292133165,
+ 0.78279797632749,
+ 0.778158331876872,
+ 0.773694537927379,
+ 0.769108849565985,
+ 0.764550340584458,
+ 0.76016460693029,
+ 0.755659110484519,
+ 0.751324380099863,
+ 0.746871279688058,
+ 0.7424445728072,
+ 0.738468812577606,
+ 0.734091907128381,
+ 0.729880893920429,
+ 0.725554889074355,
+ 0.721392847249186,
+ 0.717117151064894,
+ 0.712866796936501,
+ 0.708777538536756,
+ 0.704576613300819,
+ 0.700534910353527,
+ 0.696382839183729,
+ 0.692255377344236,
+ 0.688416353143374,
+ 0.684336108675241
+ }
+ };
+
+
+ var npvFinal2Column = new NPVFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
+ npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
+
+
+ var expected = new[]
+ {
+ -2507300m,
+ 562200.08956372m,
+ -316289.124492152m,
+ 133563.879396326m,
+ 137488.306463045m,
+ 132061.256207708m,
+ 131278.528999622m,
+ 130525.468498383m,
+ 129751.843905708m,
+ 129007.541015107m,
+ 128242.913180264m,
+ 127482.817295423m,
+ 114108.792576015m,
+ 54501.8302236648m,
+ 112276.116051067m,
+ 111610.655390045m,
+ 110949.13891508m,
+ 110333.850911115m,
+ 109679.902057675m,
+ 109050.738990044m,
+ 108404.395142344m,
+ 107782.548837663m,
+ 107143.721554365m,
+ 94654.8534297361m,
+ 94111.879404115m,
+ 20026.2365707247m
+ };
+
+
+ Assert.Equal(expected.Length, npvFinal2Column.Values.Length);
+ Assert.Equal(0.129696124792099, npvFinal2Column.IRR, new DoubleArrayComparer());
+ Assert.Equal(0.122570429842705, npvFinal2Column.Nominal, new DoubleArrayComparer());
+ Assert.Equal(expected, npvFinal2Column.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/Revenue.cs b/EvoCalculator.Core.Tests/Calculation/Columns/Revenue.cs
new file mode 100644
index 0000000..83ffad6
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/Revenue.cs
@@ -0,0 +1,232 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class RevenueTests
+ {
+ [Fact]
+ public void RevenueTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+
+ var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1)
+ {
+ 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 nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 26730.2083333333m,
+ 0,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m
+ }
+ };
+
+ var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -4811.4375m,
+ -2309.49m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ -2501.9475m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
+ nsibBruttoGrColumn, nsibExpensesColumn)
+ {
+ Values = new[]
+ {
+ 0,
+ -10899.0991979689m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ -10693.5987839108m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m,
+ 1113.75868055556m
+ }
+ };
+
+ var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
+ revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 10899.0991979689m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 11807.3574644663m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+
+
+ Assert.Equal(expected.Length, revenueColumn.Values.Length);
+ Assert.Equal(expected, revenueColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core/Controllers/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
index a04b9c7..1dd0e93 100644
--- a/EvoCalculator.Core/Controllers/v1/CalculationController.cs
+++ b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
@@ -134,6 +134,7 @@ namespace EvoCalculator.Core.Controllers.V1
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
+
return new
{
dateColumn,