diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
index 8762407..379e082 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
@@ -45,12 +45,14 @@
+
+
@@ -61,21 +63,30 @@
+
+
+
+
+
+
+
+
+
-
+
@@ -152,6 +163,7 @@
+
@@ -163,15 +175,24 @@
+
+
+
+
+
+
+
+
+
diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index 61aae1a..2331513 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,12 +14,52 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -43,52 +83,22 @@
-
-
+
+
+
@@ -125,7 +166,7 @@
-
+
@@ -181,7 +222,8 @@
-
+
+
1602593830686
@@ -265,90 +307,90 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -361,18 +403,18 @@
-
+
-
+
-
+
-
+
@@ -381,22 +423,26 @@
+
+
+
+
-
+
-
+
-
+
-
+
@@ -427,6 +473,32 @@
+
+ file://$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs
+ 86
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs
+ 14
+
+
+
+
+
+
+
+
+
+
diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs
new file mode 100644
index 0000000..0fba824
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithNominal.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class BaseColumnWithNominal : BaseColumnWithXIRR
+ {
+ public BaseColumnWithNominal(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ public double Nominal => (Math.Pow(IRR + 1, (double) 1 / 12) - 1) * 12;
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs
index 58afc35..0be37c7 100644
--- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs
+++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithSum.cs
@@ -4,7 +4,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
public class BaseColumnWithSum : BaseColumn
{
- protected BaseColumnWithSum(int count) : base(count)
+ public BaseColumnWithSum(int count) : base(count)
{
}
diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs
index 890cc75..56f6d81 100644
--- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs
+++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs
@@ -6,7 +6,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
public class BaseColumnWithXIRR : BaseColumn
{
- protected BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count)
+ public BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count)
{
Dates = dateTempColumn.Values;
}
diff --git a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs
index 4b7de86..91a30ff 100644
--- a/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs
+++ b/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXNPV.cs
@@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
private readonly double rate;
- protected BaseColumnWithXNPV(int count, DateTempColumn dateTempColumn, double rate) : base(count)
+ public BaseColumnWithXNPV(int count, DateTempColumn dateTempColumn, double rate) : base(count)
{
Dates = dateTempColumn.Values;
this.rate = rate;
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs
index 47f201b..7a765aa 100644
--- a/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowLeasingColumn.cs
@@ -15,13 +15,11 @@ namespace EvoCalculator.Core.Calculation.Columns
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
- {
Values[i] = sumColumn.Values[i]
+ negativeCashflowColumn.Values[i]
- nsibBruttoGrColumn.Values[i]
- tlmGrColumn.Values[i]
- gpsGrColumn.Values[i];
- }
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
index 6ed441b..38fa216 100644
--- a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
@@ -2,7 +2,7 @@
namespace EvoCalculator.Core.Calculation.Columns
{
- public class CashflowMSFOColumn : BaseColumnWithXIRR
+ public class CashflowMSFOColumn : BaseColumnWithNominal
{
public CashflowMSFOColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
@@ -16,7 +16,6 @@ namespace EvoCalculator.Core.Calculation.Columns
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.Values[1] + npvBonusExpensesColumn.Values[1] + agentComissionExpensesColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
- {
Values[i] = sumColumn.Values[i]
+ negativeCashflowColumn.Values[i]
- nsibBruttoGrColumn.Values[i]
@@ -24,7 +23,6 @@ namespace EvoCalculator.Core.Calculation.Columns
- gpsGrColumn.Values[i]
+ npvBonusExpensesColumn.Values[i]
+ agentComissionExpensesColumn.Values[i];
- }
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs
new file mode 100644
index 0000000..130cd17
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowNPVColumn.cs
@@ -0,0 +1,28 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class CashflowNPVColumn : BaseColumn
+ {
+ public CashflowNPVColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
+ NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn,
+ TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn,
+ RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn,
+ TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn)
+ {
+ Values[0] = -preparedValues.AcquisitionExpenses;
+ Values[1] = sumColumn.Values[1] + npvBonusExpensesColumn.Values[1] +
+ agentComissionExpensesColumn.Values[1] - taxColumn.Values[1] + nsibExpensesColumn.Values[1];
+
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] + npvBonusExpensesColumn.Values[i] +
+ agentComissionExpensesColumn.Values[i] + ratExpensesColumn.Values[i] - taxColumn.Values[i] -
+ transExpensesColumn.Values[i] + nsibExpensesColumn.Values[i] + tlmExpensesColumn.Values[i] +
+ gpsExpensesColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs b/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs
index a9300ee..982b9fa 100644
--- a/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/DeprecationLDColumn.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Linq;
+using System.Linq;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
diff --git a/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs
index 339a5b1..25022da 100644
--- a/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/ExpensesColumn.cs
@@ -7,7 +7,7 @@
}
public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn,
- RatExpensesColumn ratExpensesColumn, TransExprensesColumn transExprensesColumn,
+ RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn,
NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
InsuranceBonusExpensesColumn insuranceBonusExpensesColumn,
@@ -17,7 +17,7 @@
Values[i] =
agentComissionExpensesColumn.Values[i]
+ ratExpensesColumn.Values[i]
- + transExprensesColumn.Values[i]
+ + transExpensesColumn.Values[i]
+ nsibExpensesColumn.Values[i]
+ tlmExpensesColumn.Values[i]
+ gpsExpensesColumn.Values[i]
diff --git a/EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs
new file mode 100644
index 0000000..d794049
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/IRRGrColumn.cs
@@ -0,0 +1,18 @@
+using System;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class IRRGrColumn : BaseColumn
+ {
+ public IRRGrColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(DateTempColumn dateTempColumn, CashflowColumn cashflowColumn)
+ {
+ for (var i = 1; i < Values.Length; i++)
+ Values[i] = Math.Pow(1 + cashflowColumn.IRR,
+ (double) (dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days / 365) - 1;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs
index 8f1be16..3b7b7df 100644
--- a/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/InsuranceBonusExpensesColumn.cs
@@ -11,36 +11,24 @@ namespace EvoCalculator.Core.Calculation.Columns
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{
if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod)
- {
Values[2] = preparedValues.InsuranceBonus;
- }
else
- {
/*
- * +1 - компенсация того, что считается с 0 позиции
- */
+ * +1 - компенсация того, что считается с 0 позиции
+ */
for (var i = 2; i < Values.Length; i += i == 2 ? 11 : 12)
if (preparedValues.NmperInsurance - i >= 3)
{
if (
- (preparedValues.NmperInsurance == constants.MaxOnePolicePeriod && i <= 3) ||
- (preparedValues.NmperInsurance > constants.MaxOnePolicePeriod &&
- preparedValues.NmperInsurance - i > constants.MaxOnePolicePeriod)
+ preparedValues.NmperInsurance == constants.MaxOnePolicePeriod && i <= 3 ||
+ preparedValues.NmperInsurance > constants.MaxOnePolicePeriod &&
+ preparedValues.NmperInsurance - i > constants.MaxOnePolicePeriod
)
- {
Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * 12;
- }
else
- {
Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance *
(preparedValues.NmperInsurance - i + 1);
- }
}
- else
- {
- // 0
- }
- }
Values[0] = Sum;
}
diff --git a/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs b/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs
new file mode 100644
index 0000000..62ab046
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs
@@ -0,0 +1,15 @@
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class InterestColumn : BaseColumn
+ {
+ public InterestColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(IRRGrColumn irrGrColumn, NIColumn niColumn)
+ {
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = niColumn.Values[i - 1] * (decimal) irrGrColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NIColumn.cs b/EvoCalculator.Core.Calculation/Columns/NIColumn.cs
new file mode 100644
index 0000000..e6f7369
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NIColumn.cs
@@ -0,0 +1,18 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NIColumn : BaseColumn
+ {
+ public NIColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, CashflowColumn cashflowColumn, IRRGrColumn irrGrColumn)
+ {
+ Values[1] = preparedValues.NiAtInception;
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = Values[i - 1] + Values[i - 1] * (decimal) irrGrColumn.Values[i] - cashflowColumn.Values[i];
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs
new file mode 100644
index 0000000..f6a5c20
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NPVColumn.cs
@@ -0,0 +1,17 @@
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NPVColumn : BaseColumnWithNominal
+ {
+ public NPVColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
+ {
+ }
+
+ 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/NPVWeightColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs
new file mode 100644
index 0000000..0cd2279
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/NPVWeightColumn.cs
@@ -0,0 +1,23 @@
+using System;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class NPVWeightColumn : BaseColumn
+ {
+ public NPVWeightColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(PreparedValues preparedValues, DateTempColumn dateTempColumn)
+ {
+ 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/NSIBBruttoGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs
index 770595e..aec37e5 100644
--- a/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/NSIBBruttoGrColumn.cs
@@ -12,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
Values[1] = 0;
for (var i = 2; i < Values.Length; i++)
- Values[i] = (decimal) preparedValues.NsibBrutto / (preparedValues.Nmper - 1);
+ Values[i] = preparedValues.NsibBrutto / (preparedValues.Nmper - 1);
Values[0] = Sum;
}
diff --git a/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs
index 3e7054f..343fafb 100644
--- a/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/NSIBExpensesColumn.cs
@@ -16,10 +16,10 @@ namespace EvoCalculator.Core.Calculation.Columns
if (preparedValues.Nmper - i >= 3)
{
if (preparedValues.Nmper - i < 16 - 1)
- Values[i] = -(decimal) preparedValues.NsibNetto / preparedValues.Nmper *
+ Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper *
(preparedValues.Nmper - i + 1);
else
- Values[i] = -(decimal) preparedValues.NsibNetto / preparedValues.Nmper * 12;
+ Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper * 12;
}
else
{
diff --git a/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs b/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs
index 5afc858..1899862 100644
--- a/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs
@@ -12,10 +12,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
Values[0] = 0;
Values[1] = 0;
- for (var i = 2; i < Values.Length - 1; i++)
- {
- Values[i] = preparedPayments.Rows[i - 1].PercentPayment;
- }
+ for (var i = 2; i < Values.Length - 1; i++) Values[i] = preparedPayments.Rows[i - 1].PercentPayment;
Values[^1] = 0;
}
diff --git a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
index d3ccd9a..5b107a7 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
@@ -28,10 +28,7 @@ namespace EvoCalculator.Core.Calculation.Columns
Values[0] = -_preparedValues.BaseCost;
Values[1] = _preparedValues.FirstPaymentSum;
- for (var i = 2; i < Values.Length - 1; i++)
- {
- Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100;
- }
+ for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100;
Values[^1] = _preparedValues.LastPaymentSum;
}
diff --git a/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs
new file mode 100644
index 0000000..02e588d
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentColumn.cs
@@ -0,0 +1,19 @@
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class SumCurrentColumn : BaseColumn
+ {
+ public SumCurrentColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(SumWithVATColumn sumWithVatColumn)
+ {
+ 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/SumCurrentInterestColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentInterestColumn.cs
new file mode 100644
index 0000000..b7a8bbb
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentInterestColumn.cs
@@ -0,0 +1,16 @@
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class SumCurrentInterestColumn : BaseColumn
+ {
+ public SumCurrentInterestColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(InterestColumn interestColumn)
+ {
+ for (var i = 1; i < Values.Length; i++) Values[i] = interestColumn.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
new file mode 100644
index 0000000..57ed362
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentNegativeColumn.cs
@@ -0,0 +1,19 @@
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class SumCurrentNegativeColumn : BaseColumn
+ {
+ public SumCurrentNegativeColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(NegativeCashflowColumn negativeCashflowColumn)
+ {
+ 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.Calculation/Columns/SumCurrentTLMColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs
new file mode 100644
index 0000000..b38a406
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/SumCurrentTLMColumn.cs
@@ -0,0 +1,21 @@
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class SumCurrentTLMColumn : BaseColumn
+ {
+ public SumCurrentTLMColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(TLM_GrColumn tlmGrColumn)
+ {
+ const int FIRST_YEAR_NUM = 13;
+ for (var i = 1; i < Values.Length; i++)
+ if (i < FIRST_YEAR_NUM)
+ Values[i] = tlmGrColumn.Values.Skip(FIRST_YEAR_NUM).Sum(x => x);
+ else
+ Values[i] = tlmGrColumn.Values.Skip(i + 1).Sum(x => x);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs
new file mode 100644
index 0000000..fd6f38e
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs
@@ -0,0 +1,22 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Columns
+{
+ public class SumRepaymentColumn : BaseColumn
+ {
+ public SumRepaymentColumn(int count) : base(count)
+ {
+ }
+
+ public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues,
+ SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn,
+ SumCurrentInterestColumn sumCurrentInterestColumn, SumCurrentTLMColumn sumCurrentTlmColumn)
+ {
+ for (var i = 2; i < Values.Length; i++)
+ Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] -
+ sumCurrentTlmColumn.Values[i] * (1 + (decimal) calculation.VatValue) -
+ sumCurrentInterestColumn.Values[i] * (1 + (decimal) calculation.VatValue) *
+ (decimal) preparedValues.Repayment;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs b/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs
index ceff258..fd5800b 100644
--- a/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/TaxColumn.cs
@@ -9,7 +9,7 @@
public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn,
AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn,
RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
- ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExprensesColumn transExprensesColumn,
+ ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn,
NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn,
InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
GPSExpensesColumn gpsExpensesColumn)
@@ -21,7 +21,7 @@
+ ratExpensesColumn.Values[i]
+ registrExpensesColumn.Values[i]
+ comissionBonusExpensesColumn.Values[i]
- + transExprensesColumn.Values[i]
+ + transExpensesColumn.Values[i]
+ npvBonusExpensesColumn.Values[i]
+ agentComissionExpensesColumn.Values[i]
+ insuranceBonusExpensesColumn.Values[i]
diff --git a/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/TransExpensesColumn.cs
similarity index 82%
rename from EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs
rename to EvoCalculator.Core.Calculation/Columns/TransExpensesColumn.cs
index 4b38728..fe7424f 100644
--- a/EvoCalculator.Core.Calculation/Columns/TransExprensesColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/TransExpensesColumn.cs
@@ -3,9 +3,9 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
- public class TransExprensesColumn : BaseColumnWithSum
+ public class TransExpensesColumn : BaseColumnWithSum
{
- public TransExprensesColumn(int count) : base(count)
+ public TransExpensesColumn(int count) : base(count)
{
}
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs
index b4dd733..30eb07b 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs
@@ -10,7 +10,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
[Fact]
public void CashflowLeasingTest1()
{
- var preparedValues = new PreparedValues()
+ var preparedValues = new PreparedValues
{
Nmper = 25,
AcquisitionExpenses = 2507300
@@ -86,7 +86,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
new DateTime(2023, 12, 31),
new DateTime(2024, 1, 31),
new DateTime(2024, 2, 29),
- new DateTime(2024, 3, 31),
+ new DateTime(2024, 3, 31)
}
};
@@ -119,7 +119,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
108000,
96000,
96000,
- 25000,
+ 25000
}
};
@@ -152,7 +152,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
0,
0,
0,
- 0,
+ 0
}
};
@@ -185,7 +185,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
1113.75868055556m,
1113.75868055556m,
1113.75868055556m,
- 1113.75868055556m,
+ 1113.75868055556m
}
};
@@ -218,7 +218,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
900m,
900m,
900m,
- 900m,
+ 900m
}
};
@@ -252,7 +252,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
1000m,
1000m,
1000m,
- 1000m,
+ 1000m
}
};
@@ -290,7 +290,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
104986.241319444m,
92986.2413194444m,
92986.2413194444m,
- 21986.2413194444m,
+ 21986.2413194444m
};
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs
index f3130de..5569f44 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs
@@ -5,12 +5,12 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class CashflowMSFOTests
+ public class CashflowMsfoTests
{
[Fact]
- public void CashflowMSFOTest1()
+ public void CashflowMsfoTest1()
{
- var preparedValues = new PreparedValues()
+ var preparedValues = new PreparedValues
{
Nmper = 25,
AcquisitionExpenses = 2507300
@@ -86,7 +86,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
new DateTime(2023, 12, 31),
new DateTime(2024, 1, 31),
new DateTime(2024, 2, 29),
- new DateTime(2024, 3, 31),
+ new DateTime(2024, 3, 31)
}
};
@@ -119,7 +119,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
108000,
96000,
96000,
- 25000,
+ 25000
}
};
@@ -152,7 +152,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
0,
0,
0,
- 0,
+ 0
}
};
@@ -185,7 +185,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
1113.75868055556m,
1113.75868055556m,
1113.75868055556m,
- 1113.75868055556m,
+ 1113.75868055556m
}
};
@@ -218,7 +218,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
900m,
900m,
900m,
- 900m,
+ 900m
}
};
@@ -252,7 +252,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
1000m,
1000m,
1000m,
- 1000m,
+ 1000m
}
};
@@ -285,7 +285,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
0,
0,
0,
- 0,
+ 0
}
};
@@ -318,7 +318,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
0,
0,
0,
- 0,
+ 0
}
};
@@ -359,12 +359,13 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
104986.241319444m,
92986.2413194444m,
92986.2413194444m,
- 21986.2413194444m,
+ 21986.2413194444m
};
Assert.Equal(expected.Length, cashflowMsfoColumn.Values.Length);
- Assert.Equal(0.0517445296049118, cashflowMsfoColumn.IRR, new DoubleArrayComparer(0.01));
+ Assert.Equal(0.0517445296049118, cashflowMsfoColumn.IRR, new DoubleArrayComparer());
+ Assert.Equal(0.0505564421421205, cashflowMsfoColumn.Nominal, new DoubleArrayComparer());
Assert.Equal(expected, cashflowMsfoColumn.Values, new DecimalArrayComparer());
}
}
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs
new file mode 100644
index 0000000..e0975be
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs
@@ -0,0 +1,467 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class CashflowNpvTests
+ {
+ [Fact]
+ public void CashflowNpvTest1()
+ {
+ 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 sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null)
+ {
+ Values = new[]
+ {
+ -2542903.66268442m,
+ 625000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 96000m,
+ 96000m,
+ 25000m
+ }
+ };
+
+ var npvBonusExpenses = new NPVBonusExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -29266.5425270833m,
+ -1676.30246875m,
+ -27590.2400583333m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var agentComissionExpenses = new AgentComissionExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -446104.166666667m,
+ 0,
+ -446104.166666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var taxColumn = new TaxColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 60301.716983905m,
+ 47477.2805581053m,
+ -87962.9468973872m,
+ 4527.53444761279m,
+ 5727.53444761279m,
+ 4527.53444761279m,
+ 4527.53444761279m,
+ 4527.53444761279m,
+ 4527.53444761279m,
+ 4527.53444761279m,
+ 4527.53444761279m,
+ 4527.53444761279m,
+ 3900.22165941717m,
+ 7184.77620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 4445.67620487171m,
+ 3818.36341667609m,
+ 3818.36341667609m,
+ 106.762753185324m
+ }
+ };
+
+ 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 negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -110416.666666667m,
+ -53000m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ -57416.6666666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -6000m,
+ -12000m,
+ 0,
+ 0,
+ 6000m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var transExpensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new decimal[]
+ {
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ -20000m,
+ -1600m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m,
+ -800m
+ }
+ };
+
+ var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ -15000m,
+ -1200m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m,
+ -600m
+ }
+ };
+
+
+ var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1);
+ cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpenses, agentComissionExpenses,
+ taxColumn,
+ nsibExpensesColumn, negativeCashflowColumn, ratExpensesColumn, transExpensesColumn, tlmExpensesColumn,
+ gpsExpensesColumn);
+
+
+ var expected = new[]
+ {
+ -2507300m,
+ 573536.926973145m,
+ -268531.459827613m,
+ 114072.465552387m,
+ 118872.465552387m,
+ 114072.465552387m,
+ 114072.465552387m,
+ 114072.465552387m,
+ 114072.465552387m,
+ 114072.465552387m,
+ 114072.465552387m,
+ 114072.465552387m,
+ 102699.778340583m,
+ 39496.6096284616m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 102154.323795128m,
+ 90781.6365833239m,
+ 90781.6365833239m,
+ 23493.2372468147m
+ };
+
+
+ Assert.Equal(expected.Length, cashflowNpvColumn.Values.Length);
+ Assert.Equal(expected, cashflowNpvColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs
index 615a994..58998c3 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs
@@ -2,7 +2,6 @@
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
-using Xunit.Abstractions;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs
index 3e379cf..1539df1 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class DeprecationLDTests
+ public class DeprecationLdTests
{
[Fact]
- public void DeprecationLDTest1()
+ public void DeprecationLdTest1()
{
var preparedValues = new PreparedValues
{
@@ -18,8 +18,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
- var deprecationLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2);
- deprecationLDColumn.ComputeValues(preparedValues);
+ var deprecationLdColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2);
+ deprecationLdColumn.ComputeValues(preparedValues);
var expected = new[]
{
@@ -65,7 +65,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
- var values = deprecationLDColumn.Values;
+ var values = deprecationLdColumn.Values;
Assert.Equal(expected, values, new DecimalArrayComparer());
}
}
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs
index 5f17c2e..53a79de 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class DeprecationLPTests
+ public class DeprecationLpTests
{
[Fact]
- public void DeprecationLPTest1()
+ public void DeprecationLpTest1()
{
var preparedValues = new PreparedValues
{
@@ -53,8 +53,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
- deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn);
+ var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
+ deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var expected = new[]
{
@@ -92,12 +92,12 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
- var values = deprecationLPColumn.Values;
+ var values = deprecationLpColumn.Values;
Assert.Equal(expected, values, new DecimalArrayComparer());
}
[Fact]
- public void DeprecationLPTest2()
+ public void DeprecationLpTest2()
{
var preparedValues = new PreparedValues
{
@@ -143,8 +143,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
- deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn);
+ var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
+ deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var expected = new[]
{
@@ -182,7 +182,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
- var values = deprecationLPColumn.Values;
+ var values = deprecationLpColumn.Values;
Assert.Equal(expected, values, new DecimalArrayComparer());
}
}
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs
index 38e1e96..b1ced0e 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs
@@ -15,7 +15,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
Nmper = 30
};
- var deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1)
+ var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -53,7 +53,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var deprecationLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2)
+ var deprecationLdColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2)
{
Values = new[]
{
@@ -100,7 +100,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
var deprecationColumn = new DeprecationColumn(preparedValues.NmperDeprecation + 2);
- deprecationColumn.ComputeValues(deprecationLPColumn, deprecationLDColumn);
+ deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var expected = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs
index 8f50b72..aaab2ba 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs
@@ -14,7 +14,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
Nmper = 24
};
- var AgentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1)
+ var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -46,7 +46,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var RatExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1)
+ var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -78,7 +78,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var TransExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1)
+ var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -110,7 +110,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var NsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1)
+ var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -142,7 +142,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var TLMExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1)
+ var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -174,7 +174,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var GPSExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1)
+ var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -206,7 +206,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var RegistrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1)
+ var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -238,7 +238,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var InsuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1)
+ var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -270,7 +270,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var ComissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1)
+ var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -302,7 +302,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var NPVBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1)
+ var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
@@ -336,9 +336,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
- expensesColumn.ComputeValues(AgentComissionExpensesColumn, RatExpensesColumn, TransExprensesColumn,
- NsibExpensesColumn, TLMExpensesColumn, GPSExpensesColumn, RegistrExpensesColumn,
- InsuranceBonusExpensesColumn, ComissionBonusExpensesColumn, NPVBonusExpensesColumn);
+ expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
+ nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
+ insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
var expected = new[]
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs
index b70e6a0..4555b2f 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class GPSExpensesTests
+ public class GpsExpensesTests
{
[Fact]
- public void GPSExpensesTest1()
+ public void GpsExpensesTest1()
{
var preparedValues = new PreparedValues
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs
index d5d5d6e..ac9cdc0 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs
@@ -5,7 +5,7 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class GPS_GrTests
+ public class GpsGrTests
{
[Fact]
public void GPS_GrTest1()
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs b/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs
new file mode 100644
index 0000000..d3f6369
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs
@@ -0,0 +1,205 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class IrrGrTests
+ {
+ [Fact]
+ public void IrrGrTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var dateTempColumn = new DateTempColumn(67)
+ {
+ Values = new[]
+ {
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 11, 30),
+ new DateTime(2018, 12, 31),
+ new DateTime(2019, 1, 31),
+ new DateTime(2019, 2, 28),
+ new DateTime(2019, 3, 31),
+ new DateTime(2019, 4, 30),
+ new DateTime(2019, 5, 31),
+ new DateTime(2019, 6, 30),
+ new DateTime(2019, 7, 31),
+ new DateTime(2019, 8, 31),
+ new DateTime(2019, 9, 30),
+ new DateTime(2019, 10, 31),
+ new DateTime(2019, 11, 30),
+ new DateTime(2019, 12, 31),
+ new DateTime(2020, 1, 31),
+ new DateTime(2020, 2, 29),
+ new DateTime(2020, 3, 31),
+ new DateTime(2020, 4, 30),
+ new DateTime(2020, 5, 31),
+ new DateTime(2020, 6, 30),
+ new DateTime(2020, 7, 31),
+ new DateTime(2020, 8, 31),
+ new DateTime(2020, 9, 30),
+ new DateTime(2020, 10, 31),
+ new DateTime(2020, 11, 30),
+ new DateTime(2020, 12, 31),
+ new DateTime(2021, 1, 31),
+ new DateTime(2021, 2, 28),
+ new DateTime(2021, 3, 31),
+ new DateTime(2021, 4, 30),
+ new DateTime(2021, 5, 31),
+ new DateTime(2021, 6, 30),
+ new DateTime(2021, 7, 31),
+ new DateTime(2021, 8, 31),
+ new DateTime(2021, 9, 30),
+ new DateTime(2021, 10, 31),
+ new DateTime(2021, 11, 30),
+ new DateTime(2021, 12, 31),
+ new DateTime(2022, 1, 31),
+ new DateTime(2022, 2, 28),
+ new DateTime(2022, 3, 31),
+ new DateTime(2022, 4, 30),
+ new DateTime(2022, 5, 31),
+ new DateTime(2022, 6, 30),
+ new DateTime(2022, 7, 31),
+ new DateTime(2022, 8, 31),
+ new DateTime(2022, 9, 30),
+ new DateTime(2022, 10, 31),
+ new DateTime(2022, 11, 30),
+ new DateTime(2022, 12, 31),
+ new DateTime(2023, 1, 31),
+ new DateTime(2023, 2, 28),
+ new DateTime(2023, 3, 31),
+ new DateTime(2023, 4, 30),
+ new DateTime(2023, 5, 31),
+ new DateTime(2023, 6, 30),
+ new DateTime(2023, 7, 31),
+ new DateTime(2023, 8, 31),
+ new DateTime(2023, 9, 30),
+ new DateTime(2023, 10, 31),
+ new DateTime(2023, 11, 30),
+ new DateTime(2023, 12, 31),
+ new DateTime(2024, 1, 31),
+ new DateTime(2024, 2, 29),
+ new DateTime(2024, 3, 31)
+ }
+ };
+
+ var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 625000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 108000m,
+ 50583.3333333333m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 96000m,
+ 96000m,
+ 25000m
+ }
+ };
+
+ var irrGrColumn = new IRRGrColumn(67);
+ irrGrColumn.ComputeValues(dateTempColumn, cashflowColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 0,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0263773400122931,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0263773400122931,
+ 0.0282219060742697
+ };
+
+
+ Assert.Equal(expected.Length, irrGrColumn.Values.Length);
+ Assert.Equal(expected, irrGrColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
index aced5b6..ac42dcf 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs
@@ -249,7 +249,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
0,
0,
0,
- 0,
+ 0
};
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs
new file mode 100644
index 0000000..9af1b4b
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs
@@ -0,0 +1,164 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class InterestTests
+ {
+ [Fact]
+ public void InterestTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var irrGrColumn = new IRRGrColumn(67)
+ {
+ Values = new[]
+ {
+ 0,
+ 0,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0263773400122931,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0263773400122931,
+ 0.0282219060742697
+ }
+ };
+
+ var niColumn = new NIColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ 1882300m,
+ 1813685.30118027m,
+ 1744870.95739846m,
+ 1674114.54166988m,
+ 1596731.30073274m,
+ 1521794.10152786m,
+ 1443337.87682477m,
+ 1364071.62281796m,
+ 1281309.69919789m,
+ 1197470.70118071m,
+ 1111265.60683612m,
+ 1033602.27893863m,
+ 1012189.17203965m,
+ 931821.135837486m,
+ 850118.904411111m,
+ 766110.880283362m,
+ 678318.847459713m,
+ 589462.298261128m,
+ 497554.152763897m,
+ 403596.079330063m,
+ 306613.933068336m,
+ 207267.162688453m,
+ 117116.637086127m,
+ 24313.8286442689m,
+ 0.0112325733425678m
+ }
+ };
+
+
+ var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
+ interestColumn.ComputeValues(irrGrColumn, niColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 0,
+ 51385.3011802696m,
+ 51185.6562181931m,
+ 49243.5842714204m,
+ 42616.7590628555m,
+ 45062.8007951257m,
+ 41543.7752969065m,
+ 40733.7459931845m,
+ 37238.0763799393m,
+ 36161.0019828137m,
+ 33794.9056554118m,
+ 30336.6721025071m,
+ 29170.226434357m,
+ 27631.9637978352m,
+ 26297.7685736248m,
+ 23991.9758722514m,
+ 20207.9671763514m,
+ 19143.4508014149m,
+ 16091.854502769m,
+ 14041.9265661655m,
+ 11017.853738273m,
+ 8653.22962011698m,
+ 5849.47439767389m,
+ 3197.19155814215m,
+ 686.182588304444m
+ };
+
+
+ Assert.Equal(expected.Length, interestColumn.Values.Length);
+ Assert.Equal(expected, interestColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs
new file mode 100644
index 0000000..e28cbaa
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs
@@ -0,0 +1,164 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class NiTests
+ {
+ [Fact]
+ public void NiTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ NiAtInception = 1882300
+ };
+
+ var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, new DateTempColumn(67))
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 625000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 120000m,
+ 108000m,
+ 50583.3333333333m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 108000m,
+ 96000m,
+ 96000m,
+ 25000m
+ }
+ };
+
+ var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ 0,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0263773400122931,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0254562982413058,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0272992090422726,
+ 0.0282219060742697,
+ 0.0282219060742697,
+ 0.0263773400122931,
+ 0.0282219060742697
+ }
+ };
+
+ var targetColumn = new NIColumn(preparedValues.Nmper + 1);
+ targetColumn.ComputeValues(preparedValues, cashflowColumn, irrGrColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 1882300m,
+ 1813685.30118027m,
+ 1744870.95739846m,
+ 1674114.54166988m,
+ 1596731.30073274m,
+ 1521794.10152786m,
+ 1443337.87682477m,
+ 1364071.62281796m,
+ 1281309.69919789m,
+ 1197470.70118071m,
+ 1111265.60683612m,
+ 1033602.27893863m,
+ 1012189.17203965m,
+ 931821.135837486m,
+ 850118.904411111m,
+ 766110.880283362m,
+ 678318.847459713m,
+ 589462.298261128m,
+ 497554.152763897m,
+ 403596.079330063m,
+ 306613.933068336m,
+ 207267.162688453m,
+ 117116.637086127m,
+ 24313.8286442689m,
+ 0.0112325733425678m
+ };
+
+
+ Assert.Equal(expected.Length, targetColumn.Values.Length);
+ Assert.Equal(expected, targetColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs
new file mode 100644
index 0000000..f7f4395
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPV.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 NpvTests
+ {
+ [Fact]
+ public void NpvTest1()
+ {
+ 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 cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 571313.823489742m,
+ -259747.895766236m,
+ 122856.029613764m,
+ 127656.029613764m,
+ 122856.029613764m,
+ 122856.029613764m,
+ 122856.029613764m,
+ 122856.029613764m,
+ 122856.029613764m,
+ 122856.029613764m,
+ 122856.029613764m,
+ 110604.985995822m,
+ 47401.8172837004m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 110059.531450367m,
+ 97808.4878324251m,
+ 97808.4878324251m,
+ 23404.3131074786m
+ }
+ };
+
+ var npvWeightColumn = new NPVWeightColumn(preparedValues.Nmper + 1)
+ {
+ 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 npvColumn = new NPVColumn(preparedValues.Nmper + 1, dateTempColumn);
+ npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
+
+
+ var expected = new[]
+ {
+ -2507300m,
+ 571313.823489742m,
+ -258257.889121036m,
+ 121427.292785753m,
+ 125423.653414413m,
+ 120061.208881215m,
+ 119349.605966586m,
+ 118664.974025805m,
+ 117961.646596671m,
+ 117284.976486258m,
+ 116589.82830403m,
+ 115898.800265829m,
+ 103742.98230024m,
+ 44197.4581165829m,
+ 102030.85350046m,
+ 101426.116521635m,
+ 100824.963819535m,
+ 100265.821212887m,
+ 99671.545582335m,
+ 99099.7940198555m,
+ 98512.429433735m,
+ 97947.3269752218m,
+ 97366.7930625188m,
+ 86015.7595398495m,
+ 85522.3424404413m,
+ 20343.1040414542m
+ };
+
+
+ Assert.Equal(expected.Length, npvColumn.Values.Length);
+ Assert.Equal(0.053786775, npvColumn.IRR, new DoubleArrayComparer());
+ Assert.Equal(0.0525046595222296, npvColumn.Nominal, new DoubleArrayComparer());
+ Assert.Equal(expected, npvColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
index 55a6114..29c1281 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class NPVBonusExpensesTests
+ public class NpvBonusExpensesTests
{
[Fact]
- public void NPVBonusExpensesTest1()
+ public void NpvBonusExpensesTest1()
{
var preparedValues = new PreparedValues
{
@@ -68,7 +68,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
[Fact]
- public void NPVBonusExpensesTest2()
+ public void NpvBonusExpensesTest2()
{
var preparedValue = new PreparedValues
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs
new file mode 100644
index 0000000..ea84c8a
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs
@@ -0,0 +1,172 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class NpvWeightTests
+ {
+ [Fact]
+ public void NpvWeightTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ LoanRate = 0.07
+ };
+
+ var dateTempColumn = new DateTempColumn(67)
+ {
+ Values = new[]
+ {
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 10, 31),
+ new DateTime(2018, 11, 30),
+ new DateTime(2018, 12, 31),
+ new DateTime(2019, 1, 31),
+ new DateTime(2019, 2, 28),
+ new DateTime(2019, 3, 31),
+ new DateTime(2019, 4, 30),
+ new DateTime(2019, 5, 31),
+ new DateTime(2019, 6, 30),
+ new DateTime(2019, 7, 31),
+ new DateTime(2019, 8, 31),
+ new DateTime(2019, 9, 30),
+ new DateTime(2019, 10, 31),
+ new DateTime(2019, 11, 30),
+ new DateTime(2019, 12, 31),
+ new DateTime(2020, 1, 31),
+ new DateTime(2020, 2, 29),
+ new DateTime(2020, 3, 31),
+ new DateTime(2020, 4, 30),
+ new DateTime(2020, 5, 31),
+ new DateTime(2020, 6, 30),
+ new DateTime(2020, 7, 31),
+ new DateTime(2020, 8, 31),
+ new DateTime(2020, 9, 30),
+ new DateTime(2020, 10, 31),
+ new DateTime(2020, 11, 30),
+ new DateTime(2020, 12, 31),
+ new DateTime(2021, 1, 31),
+ new DateTime(2021, 2, 28),
+ new DateTime(2021, 3, 31),
+ new DateTime(2021, 4, 30),
+ new DateTime(2021, 5, 31),
+ new DateTime(2021, 6, 30),
+ new DateTime(2021, 7, 31),
+ new DateTime(2021, 8, 31),
+ new DateTime(2021, 9, 30),
+ new DateTime(2021, 10, 31),
+ new DateTime(2021, 11, 30),
+ new DateTime(2021, 12, 31),
+ new DateTime(2022, 1, 31),
+ new DateTime(2022, 2, 28),
+ new DateTime(2022, 3, 31),
+ new DateTime(2022, 4, 30),
+ new DateTime(2022, 5, 31),
+ new DateTime(2022, 6, 30),
+ new DateTime(2022, 7, 31),
+ new DateTime(2022, 8, 31),
+ new DateTime(2022, 9, 30),
+ new DateTime(2022, 10, 31),
+ new DateTime(2022, 11, 30),
+ new DateTime(2022, 12, 31),
+ new DateTime(2023, 1, 31),
+ new DateTime(2023, 2, 28),
+ new DateTime(2023, 3, 31),
+ new DateTime(2023, 4, 30),
+ new DateTime(2023, 5, 31),
+ new DateTime(2023, 6, 30),
+ new DateTime(2023, 7, 31),
+ new DateTime(2023, 8, 31),
+ new DateTime(2023, 9, 30),
+ new DateTime(2023, 10, 31),
+ new DateTime(2023, 11, 30),
+ new DateTime(2023, 12, 31),
+ new DateTime(2024, 1, 31),
+ new DateTime(2024, 2, 29),
+ new DateTime(2024, 3, 31)
+ }
+ };
+
+ var npvWeightColumn = new NPVWeightColumn(67);
+ npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
+
+
+ var expected = 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
+ };
+
+
+ Assert.Equal(expected.Length, npvWeightColumn.Values.Length);
+ Assert.Equal(expected, npvWeightColumn.Values, new DoubleArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs
index 249b5ad..f17b0e1 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class NSIBBruttoGrTests
+ public class NsibBruttoGrTests
{
[Fact]
- public void NSIBBruttoGrTest1()
+ public void NsibBruttoGrTest1()
{
var preparedValues = new PreparedValues
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs
index 716f5fd..27efd19 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class NSIBExpensesTests
+ public class NsibExpensesTests
{
[Fact]
- public void NSIBExpensesTest1()
+ public void NsibExpensesTest1()
{
var preparedValues = new PreparedValues
{
@@ -58,7 +58,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
[Fact]
- public void NSIBExpensesTest2()
+ public void NsibExpensesTest2()
{
var preparedValues = new PreparedValues
{
@@ -94,7 +94,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
[Fact]
- public void NSIBExpensesTest3()
+ public void NsibExpensesTest3()
{
var preparedValues = new PreparedValues
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs
new file mode 100644
index 0000000..e1711c7
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs
@@ -0,0 +1,89 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class SumCurrentTests
+ {
+ [Fact]
+ public void SumCurrentTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var sumWithVatColumn = new SumWithVATColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 4626000m,
+ 1500000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 144000m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 129600m,
+ 115200m,
+ 115200m,
+ 30000m
+ }
+ };
+
+ var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
+ sumCurrentColumn.ComputeValues(sumWithVatColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 4626000m,
+ 3126000m,
+ 2982000m,
+ 2838000m,
+ 2694000m,
+ 2550000m,
+ 2406000m,
+ 2262000m,
+ 2118000m,
+ 1974000m,
+ 1830000m,
+ 1686000m,
+ 1556400m,
+ 1426800m,
+ 1297200m,
+ 1167600m,
+ 1038000m,
+ 908400m,
+ 778800m,
+ 649200m,
+ 519600m,
+ 390000m,
+ 260400m,
+ 145200m,
+ 30000m
+ };
+
+
+ Assert.Equal(expected.Length, sumCurrentColumn.Values.Length);
+ Assert.Equal(expected, sumCurrentColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs
new file mode 100644
index 0000000..dc145c0
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs
@@ -0,0 +1,88 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class SumCurrentInterestTests
+ {
+ [Fact]
+ public void SumCurrentInterestTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var interestColumn = new InterestColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ 51385.3011802696m,
+ 51185.6562181931m,
+ 49243.5842714204m,
+ 42616.7590628555m,
+ 45062.8007951257m,
+ 41543.7752969065m,
+ 40733.7459931845m,
+ 37238.0763799393m,
+ 36161.0019828137m,
+ 33794.9056554118m,
+ 30336.6721025071m,
+ 29170.226434357m,
+ 27631.9637978352m,
+ 26297.7685736248m,
+ 23991.9758722514m,
+ 20207.9671763514m,
+ 19143.4508014149m,
+ 16091.854502769m,
+ 14041.9265661655m,
+ 11017.853738273m,
+ 8653.22962011698m,
+ 5849.47439767389m,
+ 3197.19155814215m,
+ 686.182588304444m
+ }
+ };
+
+ var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
+ sumCurrentInterestColumn.ComputeValues(interestColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 665283.367743173m,
+ 613898.066562903m,
+ 562712.41034471m,
+ 513468.826073289m,
+ 470852.067010434m,
+ 425789.266215308m,
+ 384245.490918402m,
+ 343511.744925217m,
+ 306273.668545278m,
+ 270112.666562464m,
+ 236317.760907052m,
+ 205981.088804545m,
+ 176810.862370188m,
+ 149178.898572353m,
+ 122881.129998728m,
+ 98889.1541264768m,
+ 78681.1869501255m,
+ 59537.7361487106m,
+ 43445.8816459416m,
+ 29403.9550797761m,
+ 18386.1013415031m,
+ 9732.87172138608m,
+ 3883.39732371219m,
+ 686.205765570042m,
+ 0.0231772655979618m
+ };
+
+
+ Assert.Equal(expected.Length, sumCurrentInterestColumn.Values.Length);
+ Assert.Equal(expected, sumCurrentInterestColumn.Values, new DecimalArrayComparer(0.1));
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs
new file mode 100644
index 0000000..2204761
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs
@@ -0,0 +1,89 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class SumCurrentNegativeTests
+ {
+ [Fact]
+ public void SumCurrentNegativeTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -110416.666666667m,
+ -53000m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ -57416.6666666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
+ sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ -110416.666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ };
+
+
+ Assert.Equal(expected.Length, sumCurrentNegativeColumn.Values.Length);
+ Assert.Equal(expected, sumCurrentNegativeColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs
new file mode 100644
index 0000000..2fb72ff
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs
@@ -0,0 +1,89 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class SumCurrentTlmTests
+ {
+ [Fact]
+ public void SumCurrentTlmTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25
+ };
+
+ var tlmGrColumn = new TLM_GrColumn(preparedValues.Nmper + 1, new DateTempColumn(67), 0)
+ {
+ Values = new[]
+ {
+ -17757.5461595619m,
+ 0,
+ 1800m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m,
+ 900m
+ }
+ };
+
+ var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
+ sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 10800m,
+ 9900m,
+ 9000m,
+ 8100m,
+ 7200m,
+ 6300m,
+ 5400m,
+ 4500m,
+ 3600m,
+ 2700m,
+ 1800m,
+ 900m,
+ 0m
+ };
+
+
+ Assert.Equal(expected.Length, sumCurrentTlmColumn.Values.Length);
+ Assert.Equal(expected, sumCurrentTlmColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs
new file mode 100644
index 0000000..9209479
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs
@@ -0,0 +1,192 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Columns
+{
+ public class SumRepaymentTests
+ {
+ [Fact]
+ public void SumRepaymentTest1()
+ {
+ var preparedValues = new PreparedValues
+ {
+ Nmper = 25,
+ Repayment = 0.25
+ };
+
+ var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ 3876000m,
+ 3126000m,
+ 2982000m,
+ 2838000m,
+ 2694000m,
+ 2550000m,
+ 2406000m,
+ 2262000m,
+ 2118000m,
+ 1974000m,
+ 1830000m,
+ 1686000m,
+ 1556400m,
+ 1426800m,
+ 1297200m,
+ 1167600m,
+ 1038000m,
+ 908400m,
+ 778800m,
+ 649200m,
+ 519600m,
+ 390000m,
+ 260400m,
+ 145200m,
+ 30000m
+ }
+ };
+
+ var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ -110416.666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ -57416.6666666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+ }
+ };
+
+ var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ 665283.367743173m,
+ 613898.066562903m,
+ 562712.41034471m,
+ 513468.826073289m,
+ 470852.067010434m,
+ 425789.266215308m,
+ 384245.490918402m,
+ 343511.744925217m,
+ 306273.668545278m,
+ 270112.666562464m,
+ 236317.760907052m,
+ 205981.088804545m,
+ 176810.862370188m,
+ 149178.898572353m,
+ 122881.129998728m,
+ 98889.1541264768m,
+ 78681.1869501255m,
+ 59537.7361487106m,
+ 43445.8816459416m,
+ 29403.9550797761m,
+ 18386.1013415031m,
+ 9732.87172138608m,
+ 3883.39732371219m,
+ 686.205765570042m,
+ 0.0231772655979618m
+ }
+ };
+
+ var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 0,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 11700m,
+ 10800m,
+ 9900m,
+ 9000m,
+ 8100m,
+ 7200m,
+ 6300m,
+ 5400m,
+ 4500m,
+ 3600m,
+ 2700m,
+ 1800m,
+ 900m,
+ 0m
+ }
+ };
+
+
+ var sumRepaymentColumnColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
+ sumRepaymentColumnColumn.ComputeValues(new Constants.Calculation(), preparedValues, sumCurrentColumn,
+ sumCurrentNegativeColumn,
+ sumCurrentInterestColumn, sumCurrentTlmColumn);
+
+
+ var expected = new[]
+ {
+ 0,
+ 0,
+ 2870373.91336446m,
+ 2741729.61022992m,
+ 2612502.68551135m,
+ 2481287.7132302m,
+ 2350806.55346874m,
+ 2219269.68605781m,
+ 2087489.80985577m,
+ 1954661.23276975m,
+ 1821509.53336459m,
+ 1687648.00506122m,
+ 1552749.00669197m,
+ 1432980.07462228m,
+ 1370166.33042829m,
+ 1249535.66100038m,
+ 1128213.25376206m,
+ 1005755.64391496m,
+ 882978.679155387m,
+ 759286.235506218m,
+ 634978.813476067m,
+ 509764.169597549m,
+ 383840.138483584m,
+ 257074.980802886m,
+ 143914.138270329m,
+ 29999.9930468203m
+ };
+
+
+ Assert.Equal(expected.Length, sumRepaymentColumnColumn.Values.Length);
+ Assert.Equal(expected, sumRepaymentColumnColumn.Values, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs
index ad96e9e..9164ad0 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class TLMExpensesTests
+ public class TlmExpensesTests
{
[Fact]
- public void TLMExpensesTest1()
+ public void TlmExpensesTest1()
{
var preparedValues = new PreparedValues
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs
index 919f085..11c1673 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs
@@ -5,7 +5,7 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class TLM_GrTests
+ public class TlmGrTests
{
[Fact]
public void TLM_GrTest1()
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs
index 069bb46..ae2779b 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs
@@ -213,7 +213,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1)
+ var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs
index 1594301..f353c4d 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs
@@ -16,7 +16,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
TransportTaxGr = 30000
};
- var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1);
+ var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
@@ -70,7 +70,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
TransportTaxGr = 24000
};
- var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1);
+ var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs
index 10c01e4..3af034f 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs
@@ -4,10 +4,10 @@ using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
- public class VATColumnTests
+ public class VatColumnTests
{
[Fact]
- public void VATColumnTest1()
+ public void VatColumnTest1()
{
var preparedValues = new PreparedValues
{
diff --git a/EvoCalculator.Core/Controllers/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
index 8ab84a8..a04b9c7 100644
--- a/EvoCalculator.Core/Controllers/v1/CalculationController.cs
+++ b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
@@ -101,7 +101,7 @@ namespace EvoCalculator.Core.Controllers.V1
ratExpensesColumn.ComputeValues(preparedValues);
- var transExprensesColumn = new TransExprensesColumn(preparedValues.Nmper + 1);
+ var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);