/// <summary> /// Расчитывать выплаты. /// X = (S*p) / (1-(1+p)^(1-m)) /// X - размер аннуитетного платежа; /// S - сумма кредита; /// p - 1/12 годовой процентной ставки, выраженная в сотых долях; /// ^ - означает в степени; /// m - срок кредита, в месяцах. /// </summary> /// <param name="amount">Объем долга.</param> /// <param name="interestRate">Процентная ставка.</param> /// <param name="loanTerm">Срок кредита(в месяцах).</param> /// <returns>Выплаты по кредиту.</returns> public IEnumerable<Payment> Calculate( Amount amount, InterestRate interestRate, LoanTerm loanTerm) { if (amount == null || interestRate == null || loanTerm == null) { throw new ArgumentException("Bad params for calculation"); } var payments = new List<Payment>(); var totalBalanceOwed = amount.Value; int number = 0; while (totalBalanceOwed > 0) { var loanPayment = totalBalanceOwed / (loanTerm.Value - number); var percentPayment = totalBalanceOwed * interestRate.Value / (100 * 12); totalBalanceOwed -= loanPayment; var payment = new Payment(number, percentPayment, loanPayment, totalBalanceOwed); payments.Add(payment); number++; } return payments; }
/// <summary> /// Конструктор класса. /// </summary> /// <param name="payment">Данные об оплате.</param> public PaymentViewModel(Payment payment) { this.payment = payment; }