Пример #1
0
        public void Test_AccruedInterestProcessingCeaseDays()
        {
            ApplicationSettings generalSettings = ApplicationSettings.GetInstance("");

            generalSettings.DeleteAllParameters();
            generalSettings.AddParameter(OGeneralSettings.DONOTSKIPWEEKENDSININSTALLMENTSDATE, false);
            generalSettings.AddParameter(OGeneralSettings.INCREMENTALDURINGDAYOFF, true);
            generalSettings.AddParameter(OGeneralSettings.PAYFIRSTINSTALLMENTREALVALUE, true);
            generalSettings.AddParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true);
            generalSettings.AddParameter(OGeneralSettings.BAD_LOAN_DAYS, 50);
            generalSettings.AddParameter(OGeneralSettings.CEASE_LAIE_DAYS, 10);
            generalSettings.AddParameter(OGeneralSettings.USE_DAILY_ACCRUAL_OF_PENALTY, false);

            Loan myContract = _SetContract(6000, 0.0833m, OLoanTypes.Flat,
                                           new NonRepaymentPenalties(0, 0, 0, 0), false, 0,
                                           new DateTime(2010, 10, 15), 3);

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

            Assert.AreEqual(new DateTime(2010, 11, 15), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2010, 12, 15), myContract.GetInstallment(1).ExpectedDate);

            RepaymentEvent rpeEvent = myContract.Repay(1, new DateTime(2010, 11, 15), 2500, false, true);

            Assert.AreEqual(rpeEvent.Interests, 500m);
            rpeEvent = myContract.Repay(2, new DateTime(2010, 12, 10), 300, false, true);
            Assert.AreEqual(rpeEvent.Interests, 300);

            AccruedInterestEvent e = myContract.GetAccruedInterestEvent(new DateTime(2010, 12, 31));

            Assert.AreEqual(e.Code, "LIAE");
            Assert.AreEqual(e.AccruedInterest, 1151);
            myContract.Events.Add(e);
        }
Пример #2
0
        public void TestAccruedInterestProcessingNegativeCase()
        {
            Loan myContract = _SetContract(6000, 0.0833m, OLoanTypes.Flat,
                                           new NonRepaymentPenalties(0, 0, 0, 0), false, 0,
                                           new DateTime(2010, 10, 15), 3);

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

            Assert.AreEqual(new DateTime(2010, 11, 15), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2010, 12, 15), myContract.GetInstallment(1).ExpectedDate);

            RepaymentEvent rpeEvent = myContract.Repay(1, new DateTime(2010, 11, 15), 2500, false, true);

            Assert.AreEqual(rpeEvent.Interests, 500m);
            rpeEvent = myContract.Repay(2, new DateTime(2010, 12, 15), 2500, false, true);
            Assert.AreEqual(rpeEvent.Interests, 500);
            rpeEvent = myContract.Repay(3, new DateTime(2010, 12, 15), 300, false, true);
            Assert.AreEqual(rpeEvent.Interests, 300);

            AccruedInterestEvent e = myContract.GetAccruedInterestEvent(new DateTime(2010, 12, 31));
            //Assert.AreEqual(e, null);
        }
Пример #3
0
        public void Test_LateLoanProcessingDoCalculationTwoTimes()
        {
            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);

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

            Assert.AreEqual(e.Code, "GLBL");
            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, "BLLL");
            myContract.Repay(1, new DateTime(2010, 11, 6), 500, false, true);
            //late loan to the good loan
            e = myContract.GetOverdueEvent(new DateTime(2010, 11, 6));

            Assert.AreEqual(e.Code, "LLGL");
            Assert.AreEqual(e.OLB, 243m);
        }
Пример #4
0
        public void Test_ProvisionLoanProcessing()
        {
            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, ProvisioningValue = 0.5, ProvisioningInterest = 0.5, ProvisioningPenalty = 0.5
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 2, NbOfDaysMin = 1, NbOfDaysMax = 30, ProvisioningValue = 1, ProvisioningInterest = 1, ProvisioningPenalty = 1
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 3, NbOfDaysMin = 31, NbOfDaysMax = 60, ProvisioningValue = 1.5, ProvisioningInterest = 1.5, ProvisioningPenalty = 1.5
            });
            provisionTable.Add(new ProvisioningRate {
                Number = 3, NbOfDaysMin = 60, NbOfDaysMax = 999, ProvisioningValue = 2, ProvisioningInterest = 2, ProvisioningPenalty = 2
            });


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

            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, 2000);
            myContract.Events.Add(e);
            myContract.Repay(1, new DateTime(2010, 10, 20), 500, false, true);
        }
Пример #5
0
        public void Test_RescheduleBadLoanProcessing()
        {
            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, 12, 1));
            ReschedulingOptions ro = new ReschedulingOptions
            {
                InterestRate              = 0.04m,
                NewInstallments           = 2,
                RepaymentDateOffset       = 0,
                ChargeInterestDuringShift = true,
                ReschedulingDate          = new DateTime(2010, 12, 1)
            };

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

            Assert.AreEqual(list[0].Code, "BLRL");
            // 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
        }
Пример #6
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);
        }
Пример #7
0
        public void RepayInstallment_DontCancelFees_KeepNotExpectedInstallment_OverDuePrincipal_36DaysLate()
        {
            ApplicationSettings.GetInstance("").UpdateParameter("CALCULATION_LATE_FEES_DURING_PUBLIC_HOLIDAYS", true);

            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0.003, 0), false, 1);

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

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate);

            OCurrency amountPaid = 500, interestEvent = 0, principalEvent = 0, feesEvent = 0;
            OCurrency commissionAmount = 0;

            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 3, 9)); //36 days late
            rLI.RepayInstallments(new DateTime(2006, 3, 9), ref amountPaid, ref interestEvent, ref principalEvent, ref feesEvent, ref commissionAmount);
            AssertRepayEvent(5, feesEvent, 60, interestEvent, 200, principalEvent, 235, amountPaid);

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 30, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 200, 30, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);

            ApplicationSettings.GetInstance("").UpdateParameter("CALCULATION_LATE_FEES_DURING_PUBLIC_HOLIDAYS", false);

            myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0.003, 0), true, 1);
            rLI        = _SetRepaymentOptions(myContract, false);

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate);

            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 3, 9)); //36 days late
            rLI.RepayInstallments(new DateTime(2006, 3, 9), ref amountPaid, ref interestEvent, ref principalEvent, ref feesEvent, ref commissionAmount);
            AssertRepayEvent(9, feesEvent, 120, interestEvent, 371, principalEvent, 0, amountPaid);

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 30, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 171, 30, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }
Пример #8
0
        public void RepayInstallment_WrittenOffContract_DontStopWriteOff_InitialAmount_8LateDays_EnoughMoneyToRepay()
        {
            ApplicationSettings gp = ApplicationSettings.GetInstance("");

            gp.UpdateParameter(OGeneralSettings.STOP_WRITEOFF_PENALTY, false);
            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0.0026, 0, 0, 0), true, 1);

            myContract.WriteOff(new DateTime(2006, 2, 1));
            OpenCBS.CoreDomain.Contracts.Loans.LoanRepayment.Repayment.RepayLateInstallments.CalculateInstallments rLI = _SetRepaymentOptions(myContract, false);

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            //8 days late
            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 2, 9));

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 0, 21); //1000 * 0.0026 * 8 = 20.8 => 21
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }
Пример #9
0
        public void RepayInstallment_DontCancelFees_KeepNotExpectedInstallment_OverDuePrincipal_8DaysLate()
        {
            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0, 0, 0.003, 0), false, 1);

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

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);

            OCurrency amountPaid = 100, interestEvent = 0, principalEvent = 0, feesEvent = 0;
            OCurrency commissionAmount = 0;

            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 2, 9));                   //8 days late
            rLI.RepayInstallments(new DateTime(2006, 2, 9), ref amountPaid, ref interestEvent, ref principalEvent, ref feesEvent, ref commissionAmount);
            AssertRepayEvent(0, feesEvent, 30, interestEvent, 0, principalEvent, 70, amountPaid); //0 because (gracePeriod) donc no principal

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 30, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }
Пример #10
0
        public void RepayInstallment_CancelFees_InitialAmount_8DaysLate_EnoughMoneyToRepay()
        {
            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0.003, 0, 0, 0), true, 1);

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

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);

            OCurrency amountPaid = 30, interestEvent = 0, principalEvent = 0, feesEvent = 0;
            OCurrency commissionAmount = 0;

            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 2, 9)); //8 days late
            rLI.RepayInstallments(new DateTime(2006, 2, 9), ref amountPaid, ref interestEvent, ref principalEvent, ref feesEvent, ref commissionAmount);
            AssertRepayEvent(0, feesEvent, 30, interestEvent, 0, principalEvent, 0, amountPaid);

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 30, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }
Пример #11
0
        public void CalculateNewInstallmentsWithlateFees_CancelFees_InitialAmount_OLB_OverdueInterest_OverduePrincipal_36LateDays()
        {
            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0.003, 0.004, 0.003, 0.003), true, 1);

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

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate);
            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 3, 9));//36 days late

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }
Пример #12
0
        public void CalculateNewInstallmentsWithlateFees_DontCancelFees_InitialAmount_OLB_OverdueInterest_OverduePrincipal_36LateDays()
        {
            ApplicationSettings.GetInstance("").UpdateParameter("CALCULATION_LATE_FEES_DURING_PUBLIC_HOLIDAYS", true);

            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0.003, 0.004, 0.003, 0.003), true, 1);

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

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate);
            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 3, 9));         //36 days late

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 0, 255); //1000 * 0.003 * 36 + 1000 * 0.004 * 36 + 0 * 0.003 * 36 + 30 * 0.003 * 36 = 255.24 =>255
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 6); //30 * 0.003 * 8 + 200 * 0.003 * 8 = 5.52 => 6
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);

            //NOT CALCULATION_LATE_FEES_DURING_PUBLIC_HOLIDAYS
            ApplicationSettings.GetInstance("").UpdateParameter("CALCULATION_LATE_FEES_DURING_PUBLIC_HOLIDAYS", false);

            myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0.003, 0.004, 0.003, 0.003), true, 1);
            rLI        = _SetRepaymentOptions(myContract, false);

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            Assert.AreEqual(new DateTime(2006, 3, 1), myContract.GetInstallment(1).ExpectedDate);
            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 3, 9)); //36 days late

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 0, 231);
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 5);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }
Пример #13
0
        public void CalculateNewInstallmentsWithlateFees_DontCancelFees_InitialAmount_OLB_8LateDays()
        {
            Loan myContract = _SetContract(OLoanTypes.Flat, new NonRepaymentPenalties(0.0026, 0.0046, 0, 0), true, 1);

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

            Assert.AreEqual(new DateTime(2006, 2, 1), myContract.GetInstallment(0).ExpectedDate);
            rLI.CalculateNewInstallmentsWithLateFees(new DateTime(2006, 2, 9));        //8 days late

            AssertSpecifiedInstallment(myContract.GetInstallment(0), 30, 0, 0, 0, 58); //1000 * 0.0026 * 8 + 1000 * 0.0046 * 8 = 57.6 =>58
            AssertSpecifiedInstallment(myContract.GetInstallment(1), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(2), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(3), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(4), 30, 200, 0, 0, 0);
            AssertSpecifiedInstallment(myContract.GetInstallment(5), 30, 200, 0, 0, 0);
        }