コード例 #1
0
        public void GetLoanPaymentOverwiew_ExpectedBehavior()
        {
            // Arrange
            var loanPaymentCalculatorInternal = new LoanPaymentCalculatorInternal();
            var loanParameters = new LoanParameters
            {
                LoanAmount            = 500000,
                DurationOfLoanInYears = 10,
            };

            var loanTerms = new LoanTerms
            {
                AnnualInterestRate = 0.05m,
                PaymentsPerYear    = 12,
                AdminFeeRelative   = 0.01m,
                MaxAdminFee        = 10000,
            };

            // Act
            var result = loanPaymentCalculatorInternal.GetLoanPaymentOverwiew(
                loanParameters,
                loanTerms);

            // Assert
            Assert.Equal(500000, result.LoanAmount);
            Assert.Equal(10, result.DurationOfLoanInYears);
            Assert.Equal(5303.28m, result.MonthlyPayment);
            Assert.Equal(136393.09m, result.AmountPaidAsInterest);
            Assert.Equal(5000m, result.AdministrativeFee);
        }
        public OverviewDetails GetLoanPaymentOverwiew(LoanParameters loanParameters, LoanTerms loanTerms)
        {
            var loanAmount         = loanParameters.LoanAmount;
            var durationOfLoan     = loanParameters.DurationOfLoanInYears;
            var annualInterestRate = loanTerms.AnnualInterestRate;
            var paymentsPerYear    = loanTerms.PaymentsPerYear;
            var adminFeeRelative   = loanTerms.AdminFeeRelative;
            var maxAdminFee        = loanTerms.MaxAdminFee;

            var amountOfPayments       = durationOfLoan * paymentsPerYear;
            var interestRatePerPayment = annualInterestRate / paymentsPerYear;
            var monthlyPayment         = this.GetMonthlyPayment((double)loanAmount, amountOfPayments, (double)interestRatePerPayment);
            var totalAmmountPayed      = monthlyPayment * amountOfPayments;
            var amountPaidAsInterest   = totalAmmountPayed - loanAmount;
            var administrativeFee      = this.GetAdministrativeFee(loanAmount, adminFeeRelative, maxAdminFee);

            return(new OverviewDetails
            {
                LoanAmount = loanAmount,
                DurationOfLoanInYears = durationOfLoan,
                MonthlyPayment = Math.Round(monthlyPayment, 2),
                AmountPaidAsInterest = Math.Round(amountPaidAsInterest, 2),
                AdministrativeFee = Math.Round(administrativeFee, 2),
            });
        }
コード例 #3
0
        public PaymentOverview CalculatePaymentOverview(LoanParameters parameters, LoanTerms terms)
        {
            var totalNumberOfPayments = parameters.DurationInYears * terms.PaymentsInYear;

            var administrativeFee = _loanCalculations.CalculateAdministrativeFee(
                parameters.MoneyToLoan.Amount,
                terms.AdministrativeFeeRate,
                terms.AdministrativeFeeMaxCap
                );

            var singlePayment = _loanCalculations.CalculateSinglePayment(
                parameters.MoneyToLoan.Amount,
                terms.AnnualInterestRate,
                terms.PaymentsInYear, totalNumberOfPayments
                );

            var totalPayment = _loanCalculations.CalculateTotalPayment(
                singlePayment,
                totalNumberOfPayments
                );

            var totalInterest = _loanCalculations.CalculateTotalInterest(
                totalPayment,
                parameters.MoneyToLoan.Amount
                );

            var aop = _loanCalculations.CalculateAop(
                totalPayment,
                administrativeFee,
                parameters.MoneyToLoan.Amount,
                parameters.DurationInYears
                );

            return(new PaymentOverview(
                       new Money(singlePayment),
                       new Money(totalPayment),
                       new Money(totalInterest),
                       new Money(administrativeFee),
                       new Percent(aop),
                       parameters,
                       terms
                       ));
        }
コード例 #4
0
 public void ShowLoanTerms(LoanTerms loanTerms)
 {
     Console.WriteLine($"\nLoan terms:");
     Console.WriteLine(loanTerms.ToString());
 }