private static OCurrency _LoanLossReserveBalance(Loan pCredit,ProvisionTable pProvisionningTable, int writeOffDays) { OCurrency balance = 0; if (!pCredit.Disbursed) return balance; if (pCredit.GetPastDueDays(TimeProvider.Today) == 0) return balance; if (pCredit.GetPastDueDays(TimeProvider.Today) > writeOffDays) return balance; foreach (Installment installment in pCredit.InstallmentList) { if (installment.ExpectedDate >= TimeProvider.Today) break; balance += (installment.InterestsRepayment - installment.PaidInterests); } balance += pCredit.GetUnpaidLatePenalties(TimeProvider.Today); int pastDueDays = pCredit.GetPastDueDays(TimeProvider.Today); balance += pCredit.GetOlb() * Convert.ToDecimal(pProvisionningTable.GetProvisiningRateByNbOfDays(pastDueDays).Rate); OCurrency realBalance = 0; return balance > realBalance ? balance : realBalance; }
private static OCurrency _CashCreditBalance(Loan pCredit) { if (!pCredit.Disbursed || pCredit.Rescheduled) return 0; if (pCredit.GetPastDueDays(TimeProvider.Today) == 0) return pCredit.GetOlb(); else return 0; }
private static OCurrency _LoanLossBalance(Loan pCredit, int writeOffDays) { if (pCredit.WrittenOff || pCredit.GetPastDueDays(TimeProvider.Today) > writeOffDays) return pCredit.GetOlb(); return 0; }
private static OCurrency _BadLoanBalance(Loan pCredit, int badLoanDays) { int pastDueDays = pCredit.GetPastDueDays(TimeProvider.Today); if (pastDueDays <= badLoanDays && pastDueDays != 0) return pCredit.GetOlb(); else return 0; }
private static OCurrency _RescheduledLoanBalance(Loan pCredit) { if (pCredit.Rescheduled) return pCredit.GetOlb(); else return 0; }
private static OCurrency _IncomeLoanLossBalance(Loan pCredit, ProvisionTable pProvisionningTable) { OCurrency olb = pCredit.GetOlb(); OCurrency rate = Convert.ToDecimal(pProvisionningTable.GetProvisiningRateByNbOfDays(0).Rate); if (pCredit.GetPastDueDays(TimeProvider.Today) != 0) olb = 0; if (pCredit.WrittenOff) return 0; if (!pCredit.Disbursed) return 0; if (pCredit.AllInstallmentsRepaid) return 0; if (!pCredit.BadLoan) return (pCredit.Amount - olb) * rate; else return (pCredit.Amount) * rate; }
private static OCurrency _LiabilitiesLoanLossBalance(Loan pCredit,ProvisionTable pProvisionningTable) { if (pCredit.Disbursed && !pCredit.BadLoan) if (pCredit.GetPastDueDays(TimeProvider.Today) == 0) return pCredit.GetOlb() * Convert.ToDecimal(pProvisionningTable.GetProvisiningRateByNbOfDays(0).Rate); else return 0; else return 0; }
private static OCurrency _ProvisionWriteOffBalance(Loan pCredit, int writeOffDays) { OCurrency balance = 0; if (pCredit.WrittenOff || pCredit.GetPastDueDays(TimeProvider.Today) > writeOffDays) return pCredit.GetOlb(); foreach (BadLoanRepaymentEvent e in pCredit.Events.GetEventsByType(typeof(BadLoanRepaymentEvent))) { balance += e.AccruedProvision; } return balance; }
private static OCurrency _UnrecoverableBadLoanBalance(Loan pCredit, int badLoanDays, int writeOffDays) { int pastDueDays = pCredit.GetPastDueDays(TimeProvider.Today); if (pastDueDays > badLoanDays && pastDueDays <= writeOffDays) return pCredit.GetOlb(); else return 0; }
private static OCurrency _RescheduledLoanBalance(Loan pCredit) { return pCredit.Rescheduled ? pCredit.GetOlb() : 0; }