コード例 #1
0
        public void Reschedule_Annuity_ChangeInterestRate_PartiallyPaid_Overpaid()
        {
            Loan loan = _GetLoan(_GetAnnuityProduct_RoundingTypeBegin(), 10000, 0.04m, 6, new DateTime(2010, 1, 15));

            loan.Repay(1, new DateTime(2010, 2, 12), 1906, false, true);
            loan.Repay(2, new DateTime(2010, 3, 12), 1908, false, true);
            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash", "", false);

            loan.Repay(3, new DateTime(2010, 4, 5), 1500, false, 0, 0, true, 200, true, false, false, paymentMethod);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-04-15", 169, 2643, 6926, 1300, 169);
            _AssertInstallment(loan, 3, "2010-05-17", 128, 1386, 4283, 0, 31);
            _AssertInstallment(loan, 4, "2010-06-15", 87, 1427, 2897, 0, 0);
            _AssertInstallment(loan, 5, "2010-07-15", 44, 1470, 1470, 0, 0);
        }
コード例 #2
0
        public void Reschedule_Annuity_ExtendMaturity()
        {
            Loan loan = _GetLoan(_GetAnnuityProduct_RoundingTypeBegin(), 10000, 0.04m, 6, new DateTime(2010, 1, 15));

            loan.Repay(1, new DateTime(2010, 2, 12), 1906, false, true);
            loan.Repay(2, new DateTime(2010, 3, 12), 1908, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-04-15", 277, 1046, 6926, 0, 0);
            _AssertInstallment(loan, 3, "2010-05-17", 235, 1086, 5880, 0, 0);
            _AssertInstallment(loan, 4, "2010-06-15", 192, 1129, 4794, 0, 0);
            _AssertInstallment(loan, 5, "2010-07-15", 147, 1174, 3665, 0, 0);
            _AssertInstallment(loan, 6, "2010-08-16", 100, 1221, 2491, 0, 0);
            _AssertInstallment(loan, 7, "2010-09-15", 51, 1270, 1270, 0, 0);
        }
コード例 #3
0
        public void Reschedule_Annuity_ShiftDate_ChangeInterestRate_PartiallyPaid_UseCents()
        {
            Loan loan = _GetLoan(_GetAnnuityProduct_RoundingTypeBegin_WithCents(), 10000, 0.04m, 6, new DateTime(2010, 1, 12));

            loan.Repay(1, new DateTime(2010, 2, 12), 1907.62m, false, true);
            loan.Repay(2, new DateTime(2010, 3, 12), 1907.62m, false, true);
            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash", "", false);

            loan.Repay(3, new DateTime(2010, 4, 5), 1500, false, 0, 0, true, 200, true, false, false, paymentMethod);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 19,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 272.15m, 2644.40m, 6924.46m);
            _AssertInstallment(loan, 3, "2010-06-01", 128.40m, 1384.73m, 4280.06m);
            _AssertInstallment(loan, 4, "2010-07-01", 86.86m, 1426.27m, 2895.33m);
            _AssertInstallment(loan, 5, "2010-08-02", 44.07m, 1469.06m, 1469.06m);
        }
コード例 #4
0
        public void Reschedule_Annuity_ShiftDate_PartiallyPaid()
        {
            Loan loan = _GetLoan(_GetAnnuityProduct_RoundingTypeBegin(), 10000, 0.04m, 6, new DateTime(2010, 1, 15));

            loan.Repay(1, new DateTime(2010, 2, 12), 1906, false, true);
            loan.Repay(2, new DateTime(2010, 3, 12), 1908, false, true);
            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash", "", false);

            loan.Repay(3, new DateTime(2010, 4, 5), 1500, false, 0, 0, true, 200, true, false, false, paymentMethod);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 16,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 341, 2625, 6926);
            _AssertInstallment(loan, 3, "2010-06-01", 172, 1378, 4301);
            _AssertInstallment(loan, 4, "2010-07-01", 117, 1433, 2923);
            _AssertInstallment(loan, 5, "2010-08-02", 60, 1490, 1490);
        }
コード例 #5
0
        public void Reschedule_Flat_ShiftDate_ChangeInterestRate_PartiallyPaid_UseCents()
        {
            Assert.Ignore();
            Loan loan = _GetLoan(_GetFlatProduct_WithCents(), 10000, 0.04m, 6, new DateTime(2009, 12, 22));

            loan.Repay(1, new DateTime(2010, 1, 22), 2066.67m, false, true);
            loan.Repay(2, new DateTime(2010, 2, 22), 2066.67m, false, true);
//            loan.Repay(3, new DateTime(2010, 3, 5), 1500.00m, false, 0, 0, true, 200, true, false, false, OPaymentMethods.Cash);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 40,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 728.57m, 2641.65m, 6666.66m);
            _AssertInstallment(loan, 3, "2010-06-01", 300.00m, 1341.67m, 4025.01m);
            _AssertInstallment(loan, 4, "2010-07-01", 300.00m, 1341.67m, 2683.34m);
            _AssertInstallment(loan, 5, "2010-08-02", 300.00m, 1341.67m, 1341.67m);
        }
コード例 #6
0
        public void Reschedule_FixedPrincipal_ShiftDate_ChangeInterestRate_PartiallyPaid()
        {
            Loan loan = _GetLoan(_GetFixedPrincipalProduct(), 10000, 0.04m, 6, new DateTime(2010, 1, 11));

            loan.Repay(1, new DateTime(2010, 2, 11), 2067, false, true);
            loan.Repay(2, new DateTime(2010, 3, 11), 2000, false, true);
            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash", "", false);

            loan.Repay(3, new DateTime(2010, 4, 5), 1500, false, 0, 0, true, 200, true, false, false, paymentMethod);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 19,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 257, 2640, 6666);
            _AssertInstallment(loan, 3, "2010-06-01", 121, 1342, 4026);
            _AssertInstallment(loan, 4, "2010-07-01", 81, 1342, 2684);
            _AssertInstallment(loan, 5, "2010-08-02", 40, 1342, 1342);
        }
コード例 #7
0
        public void Reschedule_FixedPrincipal_ChangeInterestRate_PartiallyPaid_UseCents()
        {
            Loan loan = _GetLoan(_GetFixedPrincipalProduct_WithCents(), 10000, 0.04m, 6, new DateTime(2010, 1, 11));

            loan.Repay(1, new DateTime(2010, 2, 11), 2066.67m, false, true);
            loan.Repay(2, new DateTime(2010, 3, 11), 2000.00m, false, true);
            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash", "", false);

            loan.Repay(3, new DateTime(2010, 4, 5), 1500.00m, false, 0, 0, true, 200, true, false, false, paymentMethod);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-04-12", 161.00m, 2641.65m, 6666.66m);
            _AssertInstallment(loan, 3, "2010-05-11", 120.75m, 1341.67m, 4025.01m);
            _AssertInstallment(loan, 4, "2010-06-11", 80.50m, 1341.67m, 2683.34m);
            _AssertInstallment(loan, 5, "2010-07-12", 40.25m, 1341.67m, 1341.67m);
        }
コード例 #8
0
        public void Reschedule_FixedPrincipal_ExtendMaturity_ShiftDate()
        {
            Loan loan = _GetLoan(_GetFixedPrincipalProduct(), 10000, 0.04m, 6, new DateTime(2010, 1, 11));

            loan.Repay(1, new DateTime(2010, 2, 11), 2067, false, true);
            loan.Repay(2, new DateTime(2010, 3, 11), 2000, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 43,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-25", 625, 1111, 6666, 0, 0);
            _AssertInstallment(loan, 3, "2010-06-25", 222, 1111, 5555, 0, 0);
            _AssertInstallment(loan, 4, "2010-07-26", 178, 1111, 4444, 0, 0);
            _AssertInstallment(loan, 5, "2010-08-25", 133, 1111, 3333, 0, 0);
            _AssertInstallment(loan, 6, "2010-09-27", 89, 1111, 2222, 0, 0);
            _AssertInstallment(loan, 7, "2010-10-25", 44, 1111, 1111, 0, 0);
        }
コード例 #9
0
        public void Reschedule_FixedPrincipal_ExtendMaturity_ShiftDate_ChangeInterestRate_PartiallyPaid_UseCents()
        {
            Loan loan = _GetLoan(_GetFixedPrincipalProduct_WithCents(), 10000, 0.04m, 6, new DateTime(2010, 1, 11));

            loan.Repay(1, new DateTime(2010, 2, 11), 2066.67m, false, true);
            loan.Repay(2, new DateTime(2010, 3, 11), 2000.00m, false, true);
            PaymentMethod paymentMethod = new PaymentMethod(1, "Cash", "", false);

            loan.Repay(3, new DateTime(2010, 4, 5), 1500.00m, false, 0, 0, true, 200, true, false, false, paymentMethod);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(2).IsPartiallyRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 13,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-04-26", 226.41m, 2194.46m, 6666.66m, 1300.00m, 200.00m);
            _AssertInstallment(loan, 3, "2010-05-25", 134.17m, 894.44m, 4472.20m, 0, 0);
            _AssertInstallment(loan, 4, "2010-06-25", 107.33m, 894.44m, 3577.76m, 0, 0);
            _AssertInstallment(loan, 5, "2010-07-26", 80.50m, 894.44m, 2683.32m, 0, 0);
            _AssertInstallment(loan, 6, "2010-08-25", 53.67m, 894.44m, 1788.88m, 0, 0);
            _AssertInstallment(loan, 7, "2010-09-27", 26.83m, 894.44m, 894.44m, 0, 0);
        }
コード例 #10
0
        public void Reschedule_Flat_ExtendMaturity_ShiftDate()
        {
            Loan loan = _GetLoan(_GetFlatProduct(), 10000, 0.04m, 6, new DateTime(2009, 12, 22));

            loan.Repay(1, new DateTime(2010, 1, 22), 2067, false, true);
            loan.Repay(2, new DateTime(2010, 1, 22), 2067, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 21,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);
            _AssertInstallment(loan, 2, "2010-04-12", 700, 1111, 6666, 0, 0);
            _AssertInstallment(loan, 3, "2010-05-12", 400, 1111, 5555, 0, 0);
            _AssertInstallment(loan, 4, "2010-06-14", 400, 1111, 4444, 0, 0);
            _AssertInstallment(loan, 5, "2010-07-12", 400, 1111, 3333, 0, 0);
            _AssertInstallment(loan, 6, "2010-08-12", 400, 1111, 2222, 0, 0);
            _AssertInstallment(loan, 7, "2010-09-13", 400, 1111, 1111, 0, 0);
        }
コード例 #11
0
        public void Reschedule_ContractClosed_ThrowException()
        {
            Loan loan = _GetContract_6Month_Flat();

            loan.Repay(1, new DateTime(2006, 1, 30), 1120, true, true);
            Assert.AreEqual(loan.Closed, true);
            ReschedulingOptions ro = new ReschedulingOptions();

            loan.Reschedule(ro);
        }
コード例 #12
0
        public void Test_ProvisionRescheduledLoanProcessing()
        {
            Loan myContract = _SetContract(1000, 0.03m, OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0.003, 0), false, 1, new DateTime(2010, 6, 6), 6);

            OpenCBS.CoreDomain.Contracts.Loans.LoanRepayment.Repayment.RepayLateInstallments.CalculateInstallments rLI =
                _SetRepaymentOptions(myContract, false);

            ProvisionTable provisionTable = ProvisionTable.GetInstance(new User());

            provisionTable.ProvisioningRates = new List <ProvisioningRate>();
            provisionTable.Add(new ProvisioningRate {
                Number = 1, NbOfDaysMin = 0, NbOfDaysMax = 0, Rate = 0.5
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 2, NbOfDaysMin = 1, NbOfDaysMax = 30, Rate = 1
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 3, NbOfDaysMin = 31, NbOfDaysMax = 60, Rate = 1.5
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 3, NbOfDaysMin = 60, NbOfDaysMax = 999, Rate = 2
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 4, NbOfDaysMin = -1, NbOfDaysMax = -1, Rate = 1
            });


            Assert.AreEqual(new DateTime(2010, 7, 6), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2010, 8, 6), myContract.GetInstallment(1).ExpectedDate);
            myContract.Repay(1, new DateTime(2010, 8, 6), 100, false, false);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true,
                ReschedulingDate          = new DateTime(2010, 12, 1)
            };

            myContract.Reschedule(ro);
            myContract.Rescheduled = true;

            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2010, 10, 1));

            ProvisionEvent e = myContract.GetProvisionEvent(new DateTime(2010, 10, 1), provisionTable);

            Assert.AreEqual(e.Code, "LLPE");
            Assert.AreEqual(e.Amount, 1000);
            myContract.Events.Add(e);
        }
コード例 #13
0
        public void Test_RescheduleLateLoanProcessing()
        {
            Loan myContract = _SetContract(1000, 0.03m, OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0.003, 0), false, 1, new DateTime(2010, 6, 6), 6);

            OpenCBS.CoreDomain.Contracts.Loans.LoanRepayment.Repayment.RepayLateInstallments.CalculateInstallments rLI =
                _SetRepaymentOptions(myContract, false);

            Assert.AreEqual(new DateTime(2010, 7, 6), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2010, 8, 6), myContract.GetInstallment(1).ExpectedDate);

            myContract.Repay(1, new DateTime(2010, 7, 6), 230, false, true);
            myContract.Repay(2, new DateTime(2010, 8, 6), 230, false, true);

            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2010, 10, 1));
            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true,
                ReschedulingDate          = new DateTime(2010, 10, 1)
            };

            myContract.Reschedule(ro);
            myContract.AddRecheduleTransformationEvent(ro.ReschedulingDate);
            List <OverdueEvent> list = myContract.Events.GetOverdueEvents();

            Assert.AreEqual(list[0].Code, "LLRL");

            // good loan to the bad loan
            OverdueEvent e = myContract.GetOverdueEvent(new DateTime(2010, 10, 1));

            Assert.AreEqual(e.Code, "GLLL");
            e = myContract.GetOverdueEvent(new DateTime(2010, 10, 20));
            Assert.AreEqual(e, null);
            myContract.Repay(1, new DateTime(2010, 10, 20), 500, false, true);
            //bad loan to the late loan
            e = myContract.GetOverdueEvent(new DateTime(2010, 10, 21));

            Assert.AreEqual(e.Code, "LLGL");
            myContract.Repay(1, new DateTime(2010, 11, 6), 500, false, true);
            //late loan to the good loan
        }
コード例 #14
0
        public void Reschedule_Annuity_ShiftDate_ChangeInterestRate()
        {
            Loan loan = _GetLoan(_GetAnnuityProduct_RoundingTypeBegin(), 10000, 0.04m, 6, new DateTime(2010, 1, 15));

            loan.Repay(1, new DateTime(2010, 2, 15), 1906, false, true);
            loan.Repay(2, new DateTime(2010, 3, 15), 1908, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 16,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 315, 1656);
            _AssertInstallment(loan, 3, "2010-06-01", 158, 1705);
            _AssertInstallment(loan, 4, "2010-07-01", 107, 1756);
            _AssertInstallment(loan, 5, "2010-08-02", 54, 1809);
        }
コード例 #15
0
        public void Reschedule_FixedPrincipal_ChangeInterest()
        {
            Loan loan = _GetLoan(_GetFixedPrincipalProduct(), 10000, 0.04m, 6, new DateTime(2009, 12, 24));

            loan.Repay(1, new DateTime(2010, 1, 25), 2067, false, true);
            loan.Repay(2, new DateTime(2010, 2, 24), 2000, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-03-24", 200, 1666);
            _AssertInstallment(loan, 3, "2010-04-26", 150, 1667);
            _AssertInstallment(loan, 4, "2010-05-24", 100, 1666);
            _AssertInstallment(loan, 5, "2010-06-24", 50, 1667);
        }
コード例 #16
0
        public void Reschedule_FixedPrincipal_ShiftDate()
        {
            Loan loan = _GetLoan(_GetFixedPrincipalProduct(), 10000, 0.04m, 6, new DateTime(2009, 12, 24));

            loan.Repay(1, new DateTime(2010, 1, 25), 2067, false, true);
            loan.Repay(2, new DateTime(2010, 2, 24), 2000, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 38,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 629, 1666); // 6_666 * 0.04 * 66 / 28
            _AssertInstallment(loan, 3, "2010-06-01", 200, 1667);
            _AssertInstallment(loan, 4, "2010-07-01", 133, 1666);
            _AssertInstallment(loan, 5, "2010-08-02", 67, 1667);
        }
コード例 #17
0
        public void Reschedule_Annuity_ShiftDate_ChangeInterestRate_UseCents()
        {
            Loan loan = _GetLoan(_GetAnnuityProduct_WithCents(), 10000, 0.04m, 6, new DateTime(2010, 1, 12));

            loan.Repay(1, new DateTime(2010, 2, 12), 1907.62m, false, true);
            loan.Repay(2, new DateTime(2010, 3, 12), 1907.62m, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.03m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 19,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 335.05m, 1655.13m);
            _AssertInstallment(loan, 3, "2010-06-01", 158.08m, 1704.79m);
            _AssertInstallment(loan, 4, "2010-07-01", 106.94m, 1755.93m);
            _AssertInstallment(loan, 5, "2010-08-02", 54.26m, 1808.61m);
        }
コード例 #18
0
        public void Reschedule_Flat_ShiftDate_UseCents()
        {
            Loan loan = _GetLoan(_GetFlatProduct_WithCents(), 10000, 0.04m, 6, new DateTime(2009, 12, 24));

            loan.Repay(1, new DateTime(2010, 1, 25), 2066.67m, false, true);
            loan.Repay(2, new DateTime(2010, 2, 24), 2066.67m, false, true);
            Assert.AreEqual(loan.GetInstallment(0).IsRepaid, true);
            Assert.AreEqual(loan.GetInstallment(1).IsRepaid, true);

            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 0,
                RepaymentDateOffset       = 38,
                ChargeInterestDuringShift = true
            };

            loan.Reschedule(ro);

            _AssertInstallment(loan, 2, "2010-05-03", 942.86m, 1666.67m);
            _AssertInstallment(loan, 3, "2010-06-01", 400, 1666.66m);
            _AssertInstallment(loan, 4, "2010-07-01", 400, 1666.67m);
            _AssertInstallment(loan, 5, "2010-08-02", 400, 1666.66m);
        }