This is a living document, and its contents may be updated often. Any changes to the contents of this document are listed in the Change record section. Make sure that you have the latest version for use.
The contents of this document are applicable to all the customers who have installed the release version (4.4001) of Loan Servicing and Marketplace for the first time or have upgraded from an earlier version. You can access the release notes of the previous releases from the Q2 Customer Portal.
This document provides information on the following for the release:
The audience of this document includes business users, implementers, and system administrators.
This document assumes a basic knowledge of the product concepts, the product release, and the Salesforce platform.
Contact your Q2 Professional Services team or the Customer Success team for information on the package dependency and installation order of the packages required to install and set up the latest version of .
For information on the upgrade steps, see release-related steps in the Q2 Product Upgrade Guide.
This section briefly describes the new features and enhancements added in this release.
Note
For a detailed description of the new features and enhancements, see the following guides published over the Q2 Customer Portal:
-
Q2 Loan Servicing User Guide for Simple Loans
-
Q2 Loan Servicing User Guide for Amortized Loans
-
Q2 Loan Servicing User Guide for Line of Credit Loans
-
Q2 Loan Servicing User Guide for Master Facility
-
Q2 Loan Administration Guide
Broker commission calculation (Jira ID: ND-6593)
Feature Description
Q2 Loan Servicing now includes the ability to calculate the broker commission allowing you to offer different commission plans to brokers, with standard upfront and trail set against each commissionable item. At the contract level, you can additionally provide variance, which can be either positive or negative. You can also have a top-up commission plan if you want to offer some commission to the broker in the event of an additional loan disbursement.
Out-of-order payment reversal for multiple LPTs through ACH return file (Jira ID: ND-6985)
Feature Description
Q2 Loan Servicing has been enhanced to support out-of-order payment reversals for multiple Loan Payment Transactions (LPTs) through an ACH return file allowing you to reverse payments for multiple LPTs from single and multiple contracts through a single ACH return file.
Enhancements made after the December 2023 (4.4001) GA release
To know about the enhancements made after the December 2023 (4.4001) GA release, see the Enhancements made in the Post December 2023 release section of these release notes.
The following table lists the issues fixed in this release:
Issue ID |
Description |
---|---|
ND-1515 |
The Payment Tolerance page is not refreshing after saving it. |
ND-1363 |
The system is displaying an error message while creating a valid Protection Claim. |
ND-995 |
The system is displaying an error message while setting up a Protection Claim on a loan without automated payment setup. |
ND-793 |
There is a missing validation on the Payment Creation page. |
This section briefly describes the Known issues in this release.
Issue ID |
Description |
---|---|
ND-7035 |
Next interest posting date is not populating on the Investment Order while creating it through API. |
PD-1699 |
The system is displaying an error message when given Step up schedule. |
ND-7239 |
If system fails to reapply one event than other events which are marked as Reapply and the transaction date is after the failed event are also not getting reapplied. |
Note
These issues are planned to be fixed in the upcoming patch releases following the December 2023 General Availability release, and they will be listed in the Post 4.4001 Release section of these release notes once the patch is available.
This section briefly describes the objects added or modified in this release.
Note
For a complete list of the objects, see the Loan Servicing and Marketplace Data Dictionary.
This section briefly describes the objects added in this release.
This object stores the events added after the disbursal transaction in the loan for the broker commission calculation.
The following table describes the fields of this object:
Field Label |
Field Name |
Description |
Data Type |
Optional Fields |
|||
Event Id |
Event_Id__c |
This field indicates the ID of the event that happened on the CL Contract like a Disbursal transaction. |
Text |
Event Type |
Event_Type__c |
This field indicates the type of events like, upfront, top-up, and so on. |
Text |
Loan Account |
Loan_Account__c |
This field indicates the ID of the CL contract associated to the event. |
Text |
This section briefly describes the objects modified in this release.
This object is used to configuration of Commission Items.
The following table describes the fields of this object:
Field Label |
Field Name |
Data Type |
Description |
Commission Calculation On |
clcommon__Commission_Calculation_On__c |
Picklist |
This field indicates the amount on which the commission should be calculated. |
Commission Item Code |
clcommon__Commission_Item_Code__c |
Text (255) |
This field indicates the commission item code like: Account management, Settlement Fee and so on. |
Commission Method |
clcommon__Commission_Method__c |
Picklist |
This field indicates the calculation method that must be used for computation. The supported options are:
|
Commission Type |
clcommon__Commission_Type__c |
Picklist |
This field indicates the type of commission disbursement. Upfront is calculated at contract disbursement, Trail is calculated at payment anniversary and Top-up is calculated at principal adjustments or loan amount top-up. |
Commission Value |
clcommon__Commission_Value__c |
Number (16, 2) |
This field represents the commission value (Percentage/Amount). The value of this field depends on the Commission Method, if commission method is selected as Percentage, then this field is considered as percentage otherwise flat amount. |
Commission Name |
Name |
Text |
This field represents the Name of commission item. |
Commission Description |
clcommon__Description__c |
Text Area (255) |
This fieldrepresents the description of commission item. |
This object stores the details of the loan contract.
The following table describes the fields of this object:
Field Label |
Field Name |
Description |
Data Type |
Previous Commission Posting Date |
Previous_Commission_Posting_Date__c |
This field indicates the previous commission posting date for broker trail commission. |
Date |
This object stores various details of a broker transaction.
The following table describes the fields of this object:
Field Label |
Field API Name |
Field Type |
Description |
Adjusted Amount |
Adjusted_Amount__c |
Currency |
This field indicates to the commission amount which is already adjusted in the transaction amount. |
Aggregator |
Aggregator__c |
Lookup |
This field is stores the Aggregator type of account. |
CL Contract |
Loan_Account__c |
Lookup (CL Contract) |
This field tells the loan account for which this Broker Transaction Details object associated. |
Commission Calculate On |
Commission_Calculate_On__c |
Picklist |
This field indicates on which amount the commission should be calculated. |
Commission Item |
Points__c |
Lookup (Points) |
This field refers to the Points object. |
Commission Method |
Commission_Method__c |
Picklist |
This field indicates the calculation method to be used for computation, either Percentage or Flat Amount. |
Commission Value |
Commission_Value__c |
Number |
This field indicates commission value (Percentage/Amount). The value of this field depends on the Commission Method, if commission method is selected as Percentage, then this field is considered as percentage otherwise flat amount. |
Contract |
Contract_c |
Lookup |
This field refers to the loan contract. |
Contract Party |
Coborrower__c |
Lookup |
This field represents the contract party object. |
Internal Accounting Generated |
Internal_Accounting_Generated__c |
Checkbox |
This field indicates that the payment is considered for accounting. |
Internal Accounting Reversal Generated |
Internal_Accounting_Reversal_Generated__c |
Checkbox |
This field indicates if Reversal Accounting Entry for this transaction is created or not. |
Paid |
Paid__c |
Checkbox |
This indicates if the broker transaction is paid. |
Payable |
Payable__c |
Checkbox |
This indicates if the broker transaction is payable. |
Pending Adjustment Amount |
Pending_Adjustment_Amount__c |
Currency |
This refers to the commission amount which needs to be adjusted in upcoming broker commission transactions. |
Reversed |
Reversed__c |
Checkbox |
This field indicates if the broker transaction is reversed. |
Sub Aggregator |
Sub_Aggregator__c |
Lookup |
This field stores the Sub-Aggregator type of account. |
Tab Visibility |
Tab_Visibility__c |
Checkbox |
Read access to this field will render it's tab on contract page. |
Transaction Type |
Commission_Type__c |
Picklist |
This field indicates type of commission. |
Variance |
Variance__c |
Number |
This field is used to set positive or negative variance required on the contract level for commission items. This field value depends on the field Commission Method of Points Object, if Commission Method is a percentage, then this field consider as percentage otherwise flat amount. |
This object stores the information about the loan borrowers.
The following table describes the details of the Contract Party object.
Field Label |
Field Name |
Description |
Data Type |
Release |
Program |
Program__c |
This field refers to the Program object. |
Lookup |
December 2023 |
Program is an agreement between Vendor/Dealer and Equipment Leasing Organization detailing the terms and conditions under which financing will be provided to the Vendor / Dealer’s customers.
The following table describes the fields of this object:
Field Label |
Field Name |
Description |
Data Type |
Description |
clcommon__Commission_Plan_Description__c |
This field indicates the description of commission plan. |
DATE |
This object is used for configuring points and to store calculated points.
The following table describes the fields of this object:
Field Label |
Field Name |
Description |
Data Type |
Commission Calculation On |
clcommon__Commission_Calculation_On__c |
This field represents the amount on which the commission should be calculated. |
Picklist |
Commission Item Code |
clcommon__Commission_Item_Code__c |
This field represents the commission item codes such as, Account management, Settlement Fee, and so on. |
Text (255) |
Commission Method |
clcommon__Commission_Method__c |
This field represents the calculation method to be used for computation, either Percentage or Flat Amount. |
Picklist |
Commission Type |
clcommon__Commission_Type__c |
This field represents the type of commission. |
Picklist |
Commission Value |
clcommon__Commission_Value__c |
This field represents the commission value (Percentage/Amount). The value of this field depends on the commission method, if commission method is selected as Percentage, then this field is considered as percentage otherwise flat amount. |
Number (16, 2) |
Variance |
clcommon__Variance__c |
This field is used to set positive or negative variance required on the contract level for commission items. This field value depends on the field Commission Method of Point Setup Object, if Commission Method is a percentage, then this field is considered as percentage otherwise flat amount. |
Number (16, 2) |
Points Setup |
clcommon__Points_Setup__c |
This field refers to Points Setup object. |
Lookup (Points Setup) |
Description |
clcommon__Description__c |
This field indicates the description of commission item. |
Text Area (255) |
Contract Party |
Coborrower__c |
This field refers to Points Setup object. |
Lookup (Contract Party) |
End Date |
clcommon__End_Date__c |
This field indicates the end date up to which the commission item (points setup) is applicable. |
Date |
Account is a standard object from Salesforce. It represents the borrower. It can also represent a broker too. In the case of Broker Commission, it stores the details of a broker account when the Broker flag is set to true.
The following table describes the fields of this object:
Field Label |
Field Name |
Description |
Data Type |
Commission Plan |
Commission_Plan__c |
This field refers to the added default commission plan at the account level. |
Lookup |
This section briefly describes the objects that are used but are not modified in this release.
Vendor (Broker Account) program (Commission Plan) association is a junction object that associates the Broker Account and Commission Plan.
The following table describes the fields of this object:
Field Label |
API Name |
Description |
Data Type |
System Generated Fields |
|||
Created By |
CreatedById |
This field references the created by ID |
Lookup(User) |
Last Modified By |
LastModifiedById |
This field references the Last Modified By Id |
Lookup(User) |
Owner |
OwnerId |
This field references the owner ID |
Lookup(User,Group) |
Program |
clcommon__Program__c |
This field indicates the related Program |
Lookup(Program) |
Vendor and Program Association Name |
Name |
This field indicates the vendor and program associate name |
Text(80) |
Optional Fields |
|||
Vendor |
clcommon__Vendor__c |
This field references the associated Vendor |
Lookup(Account) |
Program |
clcommon__Program__c |
This field indicates the related Program |
Lookup(Program) |
This object is used for configuring Points.
The following table describes the fields of this object:
Field Label |
Field Name |
Description |
Field Type |
---|---|---|---|
System Generated Fields |
|||
Account |
This field points to Accounts of type Vendor, Manufacturer, Broker. |
REFERENCE(Account) |
|
CL Product |
This field points to the CL Product. |
REFERENCE(CL_Product__c) |
|
Points |
This field points to the Points Setup. |
REFERENCE(Points_Setup__c) |
|
Program |
This field points to the Vendor Program. |
REFERENCE(Program__c) |
|
Optional Fields |
|||
Program (Commission Plan) |
clcommon__Program__c |
This field refers to the Program Object |
Lookup(Program) |
Points (Commission Item) |
clcommon__Points_Setup__c |
This field refers to the Points Setup Object |
Lookup(Points Setup) |
There are no REST APIs added or modified in this release.
Note
For a complete list of the Loan Servicing and Marketplace REST APIs, see Loan Servicing and Marketplace REST APIs Guide.
There are no global methods added or modified in this release.
Note
For a complete list of the Loan Servicing and Marketplace global methods, see Loan Servicing and Marketplace Global Methods Guide.
Follow this section for the details on the issues fixed in the patches on the 4.4000 release of the following packages:
-
CL Common
-
Q2 Loan Servicing
-
Q2 Marketplace
The system is incorrectly calculating the interest posted on Investor Additional Interest Component (AIC) when the due payment is made in installments on the same day (Jira ID:PDRFF-3283/ND-8584)
When the due payment is made in installments on the same day, the system is calculating the interest posted on the Investor AIC, based on the first LPT amount instead of calculating the interest based on the AIC of the contract.
Example to understand the issue-
Create a contract with the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
IPT Frequency = Billing Frequency
-
Enable Interest Posting for IO = True
-
Add Fee Amount to Bill = True
-
-
Create an Additional Interest Component with the following values:, , , , I
-
Interest Bearing Principal = Delinquent Amount
-
Is Interest Posting = True
-
Interest Posting Frequency = Billing Frequency
-
Rate = 20%
-
Interest Posting Day = 1
-
Add 1 Investor account in the org with 100% share.
-
-
Add AIC on Investment Orders with similar configuration as on loan's AIC.
-
On the Investment Order set IO Commitment Amount as $10,000 and IO Commitment Percent as 100%.
-
Move the current system date to the Next Due Date April 1, 2013.
The values are updated as follows:
-
Bill-1 for the Amount of $1,046.40
-
IPT-1 for the amount of $83.33
-
AIC IPT-1 for the amount of $0
-
-
Run IO Accrual and Posting job.
-
Move the current system date to April 10,2013.
-
Interest Accrued on Loan = $25
-
Interest Accrued on loan's AIC = $5.23
-
-
Run the IO Accrual Job.
On IO's AIC the Interest Accrued is $5.23
-
Create LPT-1 to pay 50% amount of Bill-1, that is, for $523.20.
-
Create LPT-2 to pay remaining 50% amount of Bill-1.
-
Run Investor Payout Job.
The system is incorrectly displaying the Interest Remaining as $2.62, that means, the Interest Accrued on AIC of Investor when it moves to Interest Remaining is reduced.
The issue is resolved, and the system is now correctly calculating the interest based on the contract's AIC when the due payment is made in installments.
When a backdated payment and another payment are made on the same day, the system is incorrectly generating bills with $0 due amount (Jira ID:PDRFF-3182/ND-8332)
When a backdated payment on a loan contract causes a reversal, and another payment is made on the same date, then when the next Billing job is executed it results in a $0 bill.
As a result, the system skips the interest posting and continues generating $0 bills for all subsequent billing periods.
Example to understand the issue-
Create a simple loan contract with the following details:
-
Current system date = January 5, 2016
-
IPT Frequency = Billing Frequency
-
Interest-Only Period = 6
-
Term = 12 months
-
Capitalization Enabled = True
-
Loan Amount = $10,000
-
-
Move current system date to January 25, 2016 and create an LPT of $100.
-
Move current system date to February 10, 2016.
-
Reverse the last LPT created on January 25, 2016.
-
Create a new LPT of $100 with transaction date as February 10, 2016.
-
Move Current system date to the next day (11 February 2016).
The system is not generating Bills and IPTs.
This issue is now fixed and the system is generating bills and IPTs correctly even when there is a reversal on the loan contract and another payment is made on the same date.
The system is creating duplicate bills, when an Additional Interest Component is added to the loan contract mid of loan cycle where the Add Interest To Bill flag is set to True in the Interest Components Details (Jira ID: PDRFF-3546/ND-8631)
The system is creating duplicate bills if an Additional Interest Component is added to the loan contract mid of loan cycle and the Add Interest To Bill flag is set to true.
Example to understand the issue-
Create a loan contract with the current system date as March 01, 2013, and the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
TCM = Month And Days
-
Payment Frequency = Monthly
-
IPT Freq = Billing Frequency
-
-
Move the current system date to April 01, 2013. The values are updated as follows:
-
IPT 1 = $83.33
-
Bill1 is generated for $1046.40.
-
-
Move the current system date to April 10, 2013.
-
Create an LPT to pay the bill's amount.
-
Go to the lending product used to create contract and create Additional Interest Component on Lending Product with following details:
-
Interest Bearing Principal = Credit Limit
-
Interest Rate = 5%
-
TCM = Month And Days
-
IPT Frequency = Billing Frequency
-
-
Select Save.
-
Edit the Interest Component and edit following fields with given values:
-
CL Contract = <Loan Name> created above
-
Go to Loan Account details page and refresh the page.
The system displays the Additional Interest Component tab.
Edit Interest Component layout and update the following fields:
-
Add Interest To Bill = True
-
Current Interest rate = 5%
-
Interest Posting Day = 1
-
Next Interest Posting Date = May 01, 2013
-
-
Select Save.
-
Now move the current system date to May 01, 2013.
The system is incorrectly creating a duplicate bill for April 01, 2013 along with the May 01, 2013 bill.
The issue is now resolved and the system is not creating duplicate bills, when an AIC is added to the loan contract mid of loan cycle where the Add Interest To Bill flag is set to True in the Interest Components Details.
The system is displaying an error message while trying to validate a new Interest Rate Schedule entry on the Rescheduling a Loan page (Jira ID:PDRFF-3536/ND-8629)
The system is displaying the error message while trying to validate a new Interest Rate Schedule entry on the Rescheduling a Loan page and the system is not rescheduling the loan successfully:
Important
SObject row was retrieved via SOQL without querying the requested field: loan_Loan_Productc.loanEnable_Adjustment_Entry_c.
The issue is now fixed and on selecting Validate button on the Interest Rate Schedule page the system is not displaying an error message and the loan is getting rescheduled successfully.
When attempting to reschedule a loan contract, the system is displaying an error message (Jira ID:PDRFF-3525/ND-8588)
When attempting a backdated reschedule of the loan contract, if the transaction date is equal to the pre-bill date or falls between pre-bill and the due date the system is dispalying the following error message:
Important
CL010100: Unexpected DML Exception Update failed. First exception on row 0 with id a8rbn0000007vrBAAQ; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, loan.LoanAccountTrigger: execution of BeforeUpdate caused by: loan.LoanProcessingException: Interest Only Period should be less than the contract term (loan)
-
Create a loan contract with the current system date as March 10, 2013, and the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
IPT Frequency = Billing Frequency
-
Interest Only Terms = 4
-
Prebill Days = 11
-
Delinquency Grace Days = 13
-
Ballon Amount = 1000
-
Balloon Type= Balloon Amount Including Only Principal
-
-
Approve and disburse the loan contract.
-
Move the current system date to Next Due Generation Date March 30, 2013.
The system generates Bill-1 of amount $83.33 with Due date as April 10,2013.
-
Move the current system date to Next Interest Posting Date, that is, April 10,2013.
Do not skip this date other wise Next interest only Bill will be generated with $0 amount.
-
Move current system date to May 05, 2013, few days ahead of the Next Due Generation Date.
The system generates Bill-2 of amount $83.34.
-
Go to Rescheduling a Loan page and update the following values:
-
Interest Only period = 0
-
Number of Installments = 9
-
Maintain Delinquency = True
-
Interest Rate = 20%
-
-
Select Preview.
After the fix: If the loan reschedule transaction date is within pre-bill days and Interest Only Period = 0 then the system will retain the bill of May 10, 2013, created in advance. (The additional interest to be received due to increase in rate will be collected in future bills to be generated) Only the EMI of April 10, 2013, Bill has the Interest Only component.
-
Select Save to reschedule the loan.
The values are updated as follows:
-
Last Accrual Date = April 29, 2013
-
Next Due Date Generation = May 30, 2013
-
Next Due Date = June 10, 2013
-
Bill-2 of May 10, 2013 should remain Primary
-
Interest Only Period = 1 (due to 1 Interest Only Bill already generated)
Note
Bill-2 is not a Interest Only bill. It is just that the new Interest Accrued + Principal is greater than Bill-2 amount. So, the system displays the Interest with rispect to EMI-2 and remaining amount is adjusted in future EMI(s).
If the user reduces Rate from 10% to 7% while rescheduling the systemwill generate Bill -2 with P+I components.
-
The issue is now fixed, and the system is rescheduling loans successfully.
If any fee other than the periodic fee is suspended, the periodic fee is also getting suspended (Jira ID:PDRFF-3537/ND-8646)
If any fee other than the periodic fee is suspended, the periodic fee on the contract is also getting suspended.
Example to understand the issue-
Created a loan contract and disburse the amount.
-
Set up a Periodic Fee for a fixed amount and monthly frequency.
-
Generate bills and LPTs.
-
Select the Suspend Fees button.
-
Add a fee. For example, BPAY Fee for one year from October 26, 2024, to October 26, 2025.
-
Now, select the Reschedule button and see the Preview.
The system is incorrectly displaying $0 as the Fee for the same suspended fee period, that is, from October 26, 2024, to October 26, 2025.
The issue is resolved now and the Periodic Fee is getting added to the Reschedule Preview for all periods.
The system is unable to write-off a loan on which the Accrual Entry Frequency is not selected (Jira ID: PDRFF-3331/ND-8421)
Issue Description
Currently, the system writes -off a loan only if the Accrual Entry Frequency is set to either Month-end or Daily and it displays the following error message on attempting to write-off a loan that has no options selected for the Accrual Entry Frequency flag.
Note
Attempt to de-reffrence a null object.
Resolution
The issue is now resolved and the loans can be written-off without setting the Accrual Entry Frequency flag.
When attempting to reschedule a loan contract the system is displaying an error message (Jira ID:PDRFF-3489/ND-8565)
Issue Description
When attempting a backdated reschedule of the loan contract, if the transaction date falls within the pre-bill period, the system shows this error message:
Important
CL010100: Unexpected DML Exception Update failed. First exception on row 0 with id a8rbn0000007vrBAAQ; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, loan.LoanAccountTrigger: execution of BeforeUpdate caused by: loan.LoanProcessingException: Interest Only Period should be less than the contract term (loan)
-
Create a loan contract with the current system date as March 10, 2013, and the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 5
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
IPT Frequency = Billing Frequency
-
Interest Only Terms = 4
-
Prebill Days = 11
-
Delinquency Grace Days = 13
-
-
Approve and disburse the loan contract.
-
Move the current system date to Next Due Generation Date March 30, 2013.
The system generates Bill-1 of amount $83.33.
-
Move the current system date to Next Interest Posting Date, that is, April 10,2013.
IPT-1 is created of the amount $83.33.
-
Move the current system date to Next Due Generation Date, that is, April 29, 2013. Go to Reschedule page.
Before the fix: The system incorrectly displaying Interest Only Terms as 2.
After the fix: The system correctly displaying Interest Only Terms as 3.
-
To perform a backdated reschedule set the Transaction Date as Aprill 24, 2013 and Number of Installments as 4.
-
Before the fix: System displayed the error message.
-
After the fix: System is rescheduling the loan successfully without displaying any error message.
-
Previous Bill generated on May 10, 2013, is now correctly marked as non-primary after backdated reschedule.
-
Resolution
The issue is now fixed, and the system is rescheduling loans successfully.
The system is displaying an error message on attempting to change the Due Date (Jira ID:PDRFF-3354/ND-8476)
Issue Description
The system is displaying the following error message on attempting to change the Due Date associated with a loan contract:
Important
02:49:46.1 (456186531)|VARIABLE_ASSIGNMENT|[63]|e|"common.apex.runtime.impl.ExecutionException: Argument cannot be null."|0x275f3869
Resolution
The issue is now resolved, and the system is not displaying an error message on attempting to change the Due Date.
The system is displaying an error message, on attempting to reschedule a loan with Maintain Delinquency set to True (Jira ID: PDRFF-3372/ND-8451)
Issue Description
The system is displaying the following error message, on attempting to reschedule loan with Maintain Delinquency set to True:
Important
Invalid decimal: Error is in expression '{!setMaintainDelinquencyFlag}' in page loan:reschedulealoan: Class.loan.LoanTransactionUtil.fetchOldInterestRate: line 4914, column 1
Resolution
The issue is now fixed, and the system is not displaying any error message on attempting to reschedule a loan with Maintain Delinquency set to True.
While calculating the Trial Broker commission on the Consolidated Loan Balance, the system is not considering the Deposit Amount (Jira ID:PDRFF-3495/ND-8571)
Issue Description
Let us consider a scenario where the latest transaction in the contract is a payment transaction that satisfies Principal and Interest component, and excess amount from the same transaction is moved to Deposit. In this scenario, while calculating the trail broker commission the system is not considering the amount in the deposit that is, the system is calculating the trail broker commission based on the Loan Balance inaccurately instead of calculating based on the consolidated loan balance.
Example to understand the issue-
Let us create a commission point with trail percentage and commission, value of 0.5% and commission must be calculated on the consolidated loan balance. Create a loan contract with PAM deposit and the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Term = 10
-
Start Date oct -1 2012
-
Payment Date = 01 November, 2012
-
Add broker and variance = 0
-
Commission Value = 0.5%
-
Don't add any deposit.
-
-
Approve and disburse the loan.
-
Move the current system date to the next payment date.
Broker commission value must be $4.17 (First month).
-
Make a payment of $1,046.40 on November 01, 2012.
-
Move the current system date to December 01, 2012.
Broker commission value must be $3.77.
-
Make a payment of $2,500, such that the bill is satisfied, and remaining amount moves to deposit.
-
Move the current system date to January 01, 2013.
Broker commission value must be $2.76.
-
Move the current system date to January 03, 2013, and make a payment of $2,500.
-
Move the current system date to February 01, 2013.
The broker commission must be calculated as follows:
[(loan balance-deposit) * number of day * (Commission Value + variance)]/360*100
[[(8065.84 -1453.60)*05*2]/36000+(7074.50-2907.20)*0.5*28)/36000] = $1.80
-
Move the current system date to February 06, 2013.
-
Perform Deposit Adjustment -Subtract.
Select Deposit Adjustment this will take you to Change Deposits page, select edit and manually change deposit from $2,907.20 to $2,453.65.
-
Move the current system date to March 01, 2013.
Broker commission value must be $1.73.
((7074.50-2907.20)*0.5*5)/36000+((7074.50-2453.65)*0.5*25)/36000 = $1.73
Resolution
The issue is now fixed, and the system is calculating the Trial Broker commission correctly based on the Consolidated Loan Balance.
On running the LoanClosureDynamicJob, the system is neither creating an LPT of Tolerance type nor is it updating the loan status to Closed - Obligation met (Jira ID: PDRFF-3419/ND-8546)
Issue Description
On running the LoanClosureDynamicJob, with the Adjust Deposit Amount In Payoff flag disabled, the system is neither creating a LPT of Tolerance type nor is it updating the loan status to Closed - Obligation met.
Example to Understand the issue
-
Create a loan contract and disburse the amount.
-
Generate bills and LPTs.
-
Set the Payoff Tolerance Amount = $25
-
Pay off the loan such that the the contract status gets updated to Active - Marked for closure status.
When the payoff amount in the contract goes below $25, run the LoanClosureDynamicJob for the contact.
Before the fix: Although the LoanClosureDynamicJob is executed successfully, the system is not creating an LPT of the Tolerance type and the contract status incorrectly remains in the Active - Marked for closure status.
Expected Result: After the LoanClosureDynamicJob is executed successfully, the system must create an LPT of Tolerance type and the contract status must be updated to Closed - Obligation met.
Resolution
The issue is now resolved and when the Can we say Pay off amount goes below Payoff Tolerance Amount, on executing the LoanClosureDynamicJob, the system is creating an LPT of Tolerance type and it is also updating the loan status to Closed - Obligation met.
On attempting to reverse a disbursal transaction, the system is displaying an error message (Jira ID: PDRFF-3497/ND-8558)
When disbursal transaction exceeds 50,000 in the customer org, on attempting to reverse a disbursal transaction, the system is displaying the following error message:
Note
System.LimitException: loan:Too many query rows: 50001. The error is coming in loan.BulkLoanDisbursalReversalAction at line number 1458
03:33:15.980 (68980584507)|LIMIT_USAGE_FOR_NS|loan|
Number of SOQL queries: 24 out of 100
Number of query rows: 79483 out of 50000 ******* CLOSE TO LIMIT
Resolution
The issue is now resolved and the system is not displaying any error message on attempting to reverse a disbursal transaction.
The system is creating duplicate bills, when an AIC is added to the loan contract mid of loan cycle where the Add Interest To Bill flag is set to True in the Interest Components Details (Jira ID: PDRFF-3378/ND-8462)
Issue Description
The system is creating duplicate bills if an Additional Interest Component is added to the loan contract mid of loan cycle and the Add Interest To Bill flag is set to true.
Example to understand the issue
-
Create a loan contract with the current system date as March 01, 2013, and the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
TCM = Month And Days
-
Payment Frequency = Monthly
-
IPT Freq = Billing Frequency
-
-
Move the current system date to April 01, 2013. The values are updated as follows:
-
IPT 1 = $83.33
-
Bill1 is generated for $1046.40.
-
-
Move the current system date to April 10, 2013.
-
Create an LPT to pay the bill's amount.
-
Go to the lending product used to create contract and create Additional Interest Component on Lending Product with following details:
-
Interest Bearing Principal = Credit Limit
-
Interest Rate = 5%
-
TCM = Month And Days
-
IPT Frequency = Billing Frequency
-
-
Select Save.
-
Edit the Interest Component and edit following fields with given values:
-
CL Contract = <Loan Name> created above
-
Go to Loan Account details page and refresh the page.
The system displays the Additional Interest Component tab.
Edit Interest Component layout and update the following fields:
-
Add Interest To Bill = True
-
Current Interest rate = 5%
-
Interest Posting Day = 1
-
Next Interest Posting Date = May 01, 2013
-
-
Select Save.
-
Now move the current system date to May 01, 2013.
The system is incorrectly creating a duplicate bill for April 01, 2013 along with the May 01, 2013 bill.
Resolution
The issue is now resolved and the system is not creating duplicate bills, when an AIC is added to the loan contract mid of loan cycle where the Add Interest To Bill flag is set to True in the Interest Components Details.
When creating a loan contract, the system is displaying an error message if the number of Amortization Term is more than the number of Payment Term (Jira ID: PDRFF-3360/PD-1789)
Issue Description
When creating a loan contract, the system is displaying the following error message if the number of Amortization Term is more than the number of Payment Term:
Note
Index out of bound exception
Example to understand the issue
-
Create a loan contract with the with current system date as December 05, 2020, and the following values:
-
Loan Amount = $10,000
-
Time Counting Method = Month And Days
-
Payment Term = 48
-
Amortization Term = 480
-
Payment Frequency = Semi-Monthly
-
Interest = 12%
-
Fincalc Version = 4.0
The system is displaying the following error message:
Note
Index out of bound exception
-
Resolution
The issue is now resolved, and the system is not displaying any error message while creating a contract even if the number of Amortization Term is more than the number of Payment Term.
The Interest Posting Transaction is not getting created correctly for the sold Investment Order when selling to multiple investors (Jira ID: PDRFF-3396/ND-8411/MD-507)
Issue Description
On selling the Investment Order (IO) to more than one investor, the system is not posting the Interest Accrued from Last Interest Posting Date to current date and hence, there is no Interest Posting Transaction generated for the selling IO. The value of this Interest Accrued is instead getting displayed in the Interest Remaining field. Also, the Income to be Collected flag for the sold investor remains set to false, resulting in no funds being allocated to the sold IO during the payout process.
Resolution
The issue is now resolved and the Interest Posting Transaction is getting created correctly for the sold Investment Order when selling to multiple investors.
A new option named Actual Days (366) Exclude last day is added to the Time Counting Method to facilitate the accurate AMZ schedules calculation during the transition from leap year to non-leap year (Jira ID: PDRFF-3352/PD-1786)
Enhancement Description
The following new option is added to the Time Counting Methods to facilitate the accurate AMZ schedules calculation during the transition from leap year to non-leap year:
-
Actual Days (366) Exclude last day
When you select this method, the system considers that a year has 365 days in a non-leap year and 366 days in a leap year. Thus, P x R/365 is calculated as the interest per day for non-leap year and P x R/366 as the interest per day for a leap year where P indicates the principal amount on which interest is to be calculated and R indicates the annual rate of interest.
The Actual Days (366) Exclude last day option differs from Actual Days (366) option in the calculation of number of days while transitioning from a leap year to a non-leap year or vice versa.
The Actual Days (366) Exclude last day excludes the last day of the leap year or the non leap year while calculating the number of days during the transition from leap year to non-leap year (or vice versa), whereas Actual Days (366) does not exclude the last day.
Note
For more details on all the Time Counting Methods, see the Interest Calculations using Time Counting Methods(put the section and guide names in italics) of the Q2 Loan Servicing User Guide for Simple Loans or select the following link: https://q2-digital-lending-docs.q2.com/hc/en-us/articles/32861763648019-Interest-calculations-using-Time-Counting-Methods
The following example elaborates the calculation of days using the Actual Days (366) Exclude last day option:
Consider the billing date is 15 th of every month. The number of days in one billing cycle from December 15, 2023, to January 15, 2024, is calculated as following:
Year |
Start Date |
End Date |
Number of days |
Interest calculation |
---|---|---|---|---|
2023 (Non - leap year) |
15 December |
31-Dec-23 |
16 |
16/365 |
2024 (Leap year) |
31-Dec-23 |
15-Jan-24 |
15 |
15/366 |
Total Number of Days |
31 |
As seen in the preceding table, the last day, December 31, 2023, is not considered as part of the non-leap year for calculation of the number of days. It is considered as part of the leap year.
Migration Script
While migrating to Q2 Loan Servicing December'23 version, go to https://github.com/cloudlending/neon-1/tree/v_4.4001_December23_Patch_Branch/UnmanagedCustomerScripts/TCMMigration and execute the following job codes:
global class UpdateLoanContractTCMJob extends clcommon.DynamicJob {
global static String jobName = 'UPDATE LOAN CONTRACT TCM';
global UpdateLoanContractTCMJob() {
super(jobName, getQuery(null));
}
global UpdateLoanContractTCMJob(List<Id> contractIds) {
super(jobName, getQuery(contractIds));
}
global override void doInitialize() {} // do nothing
global override String getRuntimeQuery() {
return getQuery(null);
}
global static String getQuery(List<Id> contractIds) {
String allowabledLoanStatuses = '\'' + loan.LoanConstants.LOAN_STATUS_ACTIVE_GOOD_STANDING + '\'' + ',' +
'\''+ loan.LoanConstants.LOAN_STATUSACTIVE_BAD_STANDING + '\'' + ',' +
'\''+ loan.LoanConstants.LOAN_STATUS_ACTIVE_MATURED + '\'';
String ns = 'loan';
mfiflexUtil.ExecutionContext ec = mfiflexUtil.ExecutionContext.getExecContext();
mfiflexUtil.ObjectCache loanOC ;
loanOC = ec.getObject('LoansJob');
if ( loanOC != null) {
ec.deleteObject('LoansJob');
}
loanOC = ec.createObject('LoansJob',
'Loan_Account__c',
ns);
String fields = 'Id, ' +
'Time_Counting_Method__c ';
loanOC.addFields(fields);
loanOC.addNamedParameter('tcm', loan.LoanConstants.TIME_COUNTING_ACTUAL_DAYS_366);
String whereClause = 'Loan_Status__c in (' + allowabledLoanStatuses + ')'
+ ' AND Invalid_Data__c = false AND Time_Counting_Method__c = :tcm';
if (contractIds!=null && contractIds.size() > 0) {
whereClause += ' AND Id IN :contractIds';
}
loanOC.setWhereClause(whereClause);
String query = loanOC.buildQuery().getQuery();
system.debug('query :: ' + query);
return query;
}
global override String getRuntimeQueryForPipelinedExecution(Set<Id> records) {
return null;
}
global override void doStart(Database.BatchableContext bc) {}
global override void doExecute(Database.BatchableContext bc, List<sObject> scope) {
List<loan__Loan_Account__c> loanAccountList = (List<loan__Loan_Account__c>) scope;
for (loan__Loan_Account__c loanAccount : loanAccountList) {
loanAccount.loan__Time_Counting_Method__c = 'Actual Days (366) Exclude last day';
}
update loanAccountList;
}
global override void doFinish(Database.BatchableContext bc) {}
}
global class UpdateLoanProductTCMJob extends clcommon.DynamicJob {
global static String jobName = 'UPDATE LOAN PRODUCT TCM';
global UpdateLoanProductTCMJob() {
super(jobName, getQuery());
}
global override void doInitialize() {} // do nothing
global override String getRuntimeQuery() {
return getQuery();
}
global static String getQuery() {
String ns = 'loan';
mfiflexUtil.ExecutionContext ec = mfiflexUtil.ExecutionContext.getExecContext();
mfiflexUtil.ObjectCache productOC ;
productOC = ec.getObject('LoansJob');
if ( productOC != null) {
ec.deleteObject('LoansJob');
}
productOC = ec.createObject('LoansJob',
'Loan_Product__c',
ns);
String fields = 'Id, ' +
'Time_Counting_Method__c ';
productOC.addFields(fields);
productOC.addNamedParameter('tcm', loan.LoanConstants.TIME_COUNTING_ACTUAL_DAYS_366);
String whereClause = 'Time_Counting_Method__c = :tcm';
productOC.setWhereClause(whereClause);
String query = productOC.buildQuery().getQuery();
system.debug('query :: ' + query);
return query;
}
global override String getRuntimeQueryForPipelinedExecution(Set<Id> records) {
return null;
}
global override void doStart(Database.BatchableContext bc) {}
global override void doExecute(Database.BatchableContext bc, List<sObject> scope) {
List<loan__Loan_Product__c> loanProductList = (List<loan__Loan_Product__c>) scope;
for (loan__Loan_Product__c loanProduct : loanProductList) {
loanProduct.loan__Time_Counting_Method__c = 'Actual Days (366) Exclude last day';
}
update loanProductList;
}
global override void doFinish(Database.BatchableContext bc) {}
}
Upgrade steps
Following steps are mandatory to add the Actual Days (366) Exclude the last day picklist value to the Loan_Product.
-
Log in to your Salesforce account.
-
Go to Setup > Object Manager.
-
On the Object Manger page, go to Lending Product ( Loan_Loan_Product_c).
-
Go to Custom Fields Relationships > Time Counting Methods..
-
On the Time Counting Method page, in the Values section, select New.
-
On the Add Picklist Values Time Counting Method page, in the text box, enter
Actual Days (366) Exclude the last day
and select Save.
Following steps are mandatory to add the Actual Days (366) Exclude the last day picklist value to the Loan Contract.
-
Log in to your Salesforce account.
-
Go to Setup > Object Manager.
-
On the Object Manger page go to CL contract.
-
Go to Custom Fields Relationships > Time Counting Methods.
-
On the Time Counting Method page, in the Values section, select New.
-
On the Add Picklist Values Time Counting Method page, in the text box, enter
Actual Days (366) Exclude the last day
and select Save.
On attempting to change the Fiscal Year Start Month on the Fiscal Year Information page, the system is displaying an error message (Jira ID: PDRFF-3392/ND-8432)
Issue Description
On the Fiscal Year Information page, while trying to change the Fiscal Year Start Date from the default month of January to some other month, the system is displaying an error message as per the different scenarios explained as follows.
Example to understand the issue
Scenario 1
There are no records in the <Fiscal Year Settings> object and the user is trying to change the Fiscal Year Start Month by performing the following steps.
-
Go to Setup > Quick Find > Fiscal Year > for Standard Fiscal Year select Fiscal Year Start Month and from the drop-down list select July.
-
Go to Setup > Service Configuration > Under Batch select SOD/EOD Process.
-
On the SOD- EOD Process page, change the Move System Date to (Future/Past) field to July 01, 2023.
-
Go to Apex Jobs page, the Status will be updated to Completed.
-
Go back to the SOD- EOD Process page, on selecting Refresh, the system is displaying the following error:
Note
Subscript is invalid because list is empty
Scenario 2
There are records in the <Fiscal Year Settings> object and the user is trying to change the Fiscal Year Start Month by performing the following steps.
-
Go to Setup > Quick Find > Fiscal Year > for Standard Fiscal Year select Fiscal Year Start Month and from the drop-down list select July.
-
Select Save.
-
Go to Setup > Developer Console > execute the following queries:
-
SELECT Id, StartDate, EndDate, Name, IsStandardYear, YearType FROM FiscalYearSettings
If the system does not display any records, query the Period object using the following query:
-
SELECT Id, FiscalYearSettingsId, Type, StartDate, EndDate FROM Period LIMIT 1
Note
Once the user has queried the Period object they will always be able to see the records and there is no need to querry the Period object every time
Then execute the following query:
-
loan_Day_Processc - SELECT Id, Name, Datec, Day_Startedc, Day_Endedc, Statusc FROM Day_Processc where Date_c > 2023-06-30
-
loan_Month_Processc - SELECT Id, Last_Day_of_Monthc FROM Month_Processc where Last_Day_of_Month_c > 2023-06-30
-
-
Delete all future records.
-
Move the current system date to January 01, 2023 and then to June 30, 2023.
-
Move the current system date to the next date July 01, 2023.
The system is displaying the following error message:
Expected Result - The system must move the current system date to July 01, 2023.
Resolution
The issue is now fixed. After you install the latest patch that contains this fix, perform the following steps to change the Fiscal Year Start Month for each of the preceding scenarios:
For Scenario 1
There are no records in the Fiscal Year Settings.
-
Move the current system date to June 30, 2023, without running batch jobs using the following script.
-
Date sodDate = Date.newInstance(2023,6,30);
loan.GlobalProcessFacade.moveSystemToDate(sodDate, false); //yyyy,mm,dd
-
-
Update the Start Date and the End Date in the Fiscal_Year__c object if user is updating Standard Fiscal Year Month to any month other than January. For example, set Start Date to July 01, 2022, and End Date to July 30, 2023.
-
Delete all the future records.
-
Go to Setup > Developer Console, execute the following code:
List<loan__Fiscal_Year__c> fiscalYear = [SELECT id, loan__Fiscal_Year_Setting_Id__c,loan__Start_Date__c, Name
FROM loan__Fiscal_Year__c order By loan__Start_Date__c];
Organization org = [SELECT FiscalYearStartMonth,Id,UsesStartDateAsFiscalYearName
FROM Organization WITH SECURITY_ENFORCED];
for(loan__Fiscal_Year__c fy : fiscalYear) {
Date startDate = Date.newInstance(fy.loan__Start_Date__c.year(), org.FiscalYearStartMonth, 1);
Date endDate = startDate.addYears(1).addDays(-1);
fy.loan__Start_Date__c = startDate;
fy.loan__End_Date__c = endDate;
if(org.UsesStartDateAsFiscalYearName) { //Name of the Fiscal Year record is depends on this condition
fy.Name = '' + startDate.year();
}
else {
fy.Name = '' + endDate.year();
}
loan.GlobalLoanUtilFacade facade = new loan.GlobalLoanUtilFacade();
Date sysDate = facade.getCurrentSystemDate();
if(sysDate >= startDate && sysDate <= endDate) {
fy.loan__Status__c = 'Open';
}
else {
fy.loan__Status__c = '';
}
}
update fiscalYear;
-
Move the current sequence date to July 01, 2023.
The system is updating the date successfully and Day_Process and Month_Process records are getting created successfully for the Fiscal Year July 01, 2023, to June 30, 2024.
For Scenario 2
There are records in the Fiscal Year Settings.
To update Start Date and End Date in the Fiscal_Year__c object if the user is updating Standard Fiscal Year Month to any month other than January.
-
Go to Setup > Developer Console, execute the following code:
List<loan__Fiscal_Year__c> fiscalYear = [SELECT id, loan__Fiscal_Year_Setting_Id__c,loan__Start_Date__c, Name
FROM loan__Fiscal_Year__c order By loan__Start_Date__c];
Organization org = [SELECT FiscalYearStartMonth,Id,UsesStartDateAsFiscalYearName
FROM Organization WITH SECURITY_ENFORCED];
for(loan__Fiscal_Year__c fy : fiscalYear) {
Date startDate = Date.newInstance(fy.loan__Start_Date__c.year(), org.FiscalYearStartMonth, 1);
Date endDate = startDate.addYears(1).addDays(-1);
fy.loan__Start_Date__c = startDate;
fy.loan__End_Date__c = endDate;
if(org.UsesStartDateAsFiscalYearName) { //Name of the Fiscal Year record is depends on this condition
fy.Name = '' + startDate.year();
}
else {
fy.Name = '' + endDate.year();
}
loan.GlobalLoanUtilFacade facade = new loan.GlobalLoanUtilFacade();
Date sysDate = facade.getCurrentSystemDate();
if(sysDate >= startDate && sysDate <= endDate) {
fy.loan__Status__c = 'Open';
}
else {
fy.loan__Status__c = '';
}
}
update fiscalYear;
-
Move the current system date to July 01, 2023.
The system is updating the date successfully and Day_Process and Month_Process records are getting created successfully for the Fiscal Year July 01, 2023, to June 30, 2024.
Inactive Bank Accounts are accepted while making disbursements (Jira ID: PDRFF-3384/ND-8406)
Issue Description
While making a loan disbursal, the system is allowing to select inactive Bank Accounts and make the disbursements. The system must not allow the user to do a disbursement to a bank account which is currently not active.
Expected Behavior
Only the bank accounts which are marked as active should be available to select in the Bank Account field in the Loan Disbursal Transaction.
Resolution
This issue is fixed. Now, if a user tries to save a disbursal transaction where an inactive Bank Account is selected, the system is throwing the following error message and not allowing to save such a disbursement:
Note
“BA-… Bank accounts is/are inactive.”
For a Written-Off loan, the Interest Remaining is getting added to the Total Payoff Amount for a PayOff Quote of a future date (Jira ID: PDRFF-3298/ND-8276)
Issue Description
After a contract is written-off and a Payoff Quote is generated for a future date, the Interest Remaining is getting calculated for the days from the Transaction Date to the Payoff Quote date.
Example
Let us say a contract is created, approved, and disbursed. Let us say two bills are generated and the first bill is paid. After this, let us say that the contract is written-off and a Payoff Quote is generated for a future date of 6/15/2022. The Transaction Date is 5/30/2022. The Principal Balance is $952.97, Interest Remaining is $46.34 and Interest Per Diem is $0.93. The number of days between the Transaction Date and the Payoff Quote date is 16 days.
Actual Result:
Total Payoff Amount = 952.97 + 46.34 + 0.93 * 16 = 1,014.14.
Expected Result:
Total Payoff Amount = 952.97 + 46.34 = 999.31
Reason
When a Payoff Quote is generated, the unpaid interest amount (Interest Remaining) was getting added to the Total Payoff Amount if the Payoff Quote date was greater than the Transaction Date irrespective of the loan Status.
Expectation
When the status is Closed-Written off, while generating the Payoff Quote with a payoff date greater than the Transaction Date, the unpaid interest (Interest Remaining) must not get added to the Total Payoff Amount and the unpaid interest field value must be zero.
Resolution
This issue is fixed, and now when the status is Closed-Written off, while generating the Payoff Quote with a payoff date greater than the Transaction Date, the unpaid interest (Interest Remaining) is not getting added to the Total Payoff Amount and the value of the Interest Remaining on the Payoff Quote is zero.
The system is not generating Preview on rescheduling loans with uncleared payments (Jira ID: PDRFF-3301/ND-8342)
Issue Description
The system is not displaying the following expected pop-up error message after selecting Preview while attempting to reschedule a loan contract with uncleared payments.
Note
CL019406: Following payment transactions are not yet cleared - (LPT-009211516)
Resolution
The issue is now fixed by modifying the logic such that after selecting Preview, while attempting to reschedule a loan contract with uncleared payments, the system is displaying the required pop-up message.
Before the fix, if the loan contract had multiple uncleared payments, the system would display only one LPT in the error message. But after the fix, the pop-up error message is updated such that it will list out all the uncleared LPTs as follows:
Note
CL019406: Following payment transactions are not yet cleared - (LPT-009211516), (LPT-000000767)
Note
The system may list out only a certain number of uncleared LPTs as there is a character limitation to the error message.
The system is unable to create a backdated disbursal transaction for transaction date less than expected disbursal date (Jira ID: PDRFF-3190/ND-8144)
Issue Description
The system is unable to create a backdated disbursal transaction for transaction date that is after the contract creation date and before the expected disbursal date.
Example to understand the issue
-
Create a loan contract with the following values:
-
Contract creation date = August 31, 2024
-
Expected disbursal date = September 10, 2024
-
Draw period end date: September 10, 2024
-
-
Move system date to September 10, 2024 but do not disburse loan.
-
Move system date to September 12, 2024 and perform first funding with a backdated disbursal transaction date as September 06, 2024.
System is not permitting this transaction and is displaying the following error message:
Note
CL013405: Disbursal Transaction Date should be on or after the Contract Date.
Resolution
The issue is now fixed and the system is now able to create a backdated disbursal transaction for transaction date that is after the contract creation date and before the expected disbursal date.
The system is unable to clear an LPT which has multiple charges (Jira ID: PDRFF-2897/ND-8264)
Issue Description
The system is unable to clear an LPT which has multiple charges as some of the charges do not have a Last Accrual Date (LAD).
If multiple charges are applied at once, only the charges with an LAD is getting processed correctly. The system is ignoring the charges without an LAD.
Example to understand the issue
-
Create a loan contract with an LPT record.
-
Move the current system date to five days ahead and create multiple charges on the same date.
-
Move the current system date again to one week ahead and clear the LPT record.
-
On trying to clear the LPT, the system is displaying the following error message:
Note
Unable to process the payment for loan. A capitalized charge does not have Last Accrual Date set. Please populate this value by the preceding transaction date and proceed to make this payment. - Cause null-2883
Resolution
This issue is now resolved and the system is clearing the LPTs with multiple charges too.
The system is displaying an error message on attempting to reschedule a loan by extending maturity date (Jira ID: PDRFF-3409/ND-8455)
Issue Description
On a day six months before the maturity date, if a loan with (n-1) Interest Only (IO) periods, where n is the number of terms, is rescheduled, by extending the maturity date by one year, the system is displaying the following error message:
Note
Interest Only Period should be less than the contract term.
Example to understand the issue
-
Create a loan contract with the following values:
-
Interest Calculation Method = Declining Balance
-
Time Counting Method = Actual/360
-
Payment Application Mode = Current Dues
-
Accrual Start Basis = Contract Date
-
Payment Frequency = Quarterly
-
Interest Type = Floating
-
Interest Rate Change Method = Change Payment Amount
-
Funding in Tranches = True
-
Repayment Procedure = Equal Monthly Installments
-
Actual Interest Only Payments = True
-
Enable Adjustment Entry = True
-
Loan Amount = $10,000
-
Term = 4
-
Interest Rate = 10
-
Interest Calculation Method = Declining Balance
-
Floating Rate Revision Frequency = Daily
-
Revolving = True
-
Interest Only Period = 3
-
Draw Period End Date = March 01, 2016
-
Payment Frequency = Quarterly
-
Payment Application Order = Spread
-
Payment Start Date = December 01, 2015
-
Expected Disbursal Date = November 01, 2015
-
-
Disburse $8,000.
-
Move the current system date to December 01, 2015.
-
Create an IO payment of bill amt.
-
Move the current system date to December 12, 2015
-
Reschedule the loan with the following values:
-
Transaction Date = December 02, 2015
-
Repayment Start Date = March 01, 2016
-
Interest Only Period = 2
-
Frequency of Loan Payment = Quarterly
-
Reschedule Balance = Principal Remaining
-
Number of Installments = 3
-
Maintain Delinquency = False
-
-
Move the current system date to March 01, 2016.
-
Create an IO payment of bill amt
-
Move the current system date to March 02, 2016
-
Reschedule the loan.
The system is displaying an error message.
Resolution
The issue is now fixed, and the system can now successfully reschedule a loan by extending the maturity date by one year.
During payment reversal, unpaid capitalized charge amount is getting added to the Fee Remaining field (Jira ID: PDRFF-2919/ND-7720)
Issue Description
If an unpaid capitalized charge is present on the contract, and an existing payment is reversed, Fees Remaining field is updated with this unpaid charge instead of updating the Fees Capitalized field.
This unpaid capitalized charge is not getting cleared from the Fees Remaining even after the charge is waived off.
Example to understand the behavior after the fix
-
Create a loan contract and associate with a fee set containing 2 capitalized fees with the following values:
-
Fee Name 1
-
Fee Amount = $100 (Fixed)
-
Type=Other
-
-
Fee Name 2
-
Fee Amount = $200 (fixed)
-
Type = Other
-
-
-
On March 01, 2013, create a loan contract with the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method =Month and Days
-
Payment Frequency = Monthly
-
IPT Frequency = Monthly
-
Capitalization= True
-
Fee Set = Fee set consisting of the above created fees
-
-
Move the Current System Date to few days after first due date and create a capitalized charge-1 (Fee Name 1). Make due payment which satisfies the charge. The values are as follows:
-
Fee Paid = $100
-
Fee Capitalized = $0
-
Fee Remaining = $0
-
-
Add another charge ( Fee Name 2) capitalized charge on the same day.
-
Fee Capitalized = $200
-
-
Reverse the payment Fee Name 1.
Charge value that was paid earlier as part of the payment (Fee Name 1) now moves to Fees Capitalized and new unpaid charge value (Fee Name 2) of contract moves to Fees Remaining.
-
At this stage, waive the newly created charge on the contract. The values are updated as follows:
-
Fee Remaining = $0
-
Before the fix the system displayed the Fee Remaining incorrectly as $200
-
-
Fee Paid = $200
-
OLT is created for Transaction Type = Charge Waive
-
LPT is auto-created for the Transaction Amount = 200 (which is the paid charge created due to the Waiver action)
-
Last Accrual Date = April 11, 2013
-
Interest Remaining = $28.10
-
Resolution
The issue is now fixed and during payment reversal, the unpaid capitalized charge amount is getting added to the Fees Capitalized field correctly.
When a rescheduling action is performed on a loan contract, the system is calculating the balloon payment (nth payment) amount incorrectly (Jira ID: PDRFF-3183/ND-8102)
Issue Description
On performing a rescheduling action on a loan contract, the system is calculating the balloon payment (nth payment) amount incorrectly and in turn is also updating the EMI amount incorrectly.
Example to understand the issue
-
Set the current system date to March 01, 2013, and create a loan contract with the following values:
-
Loan Amount = $1,00,000
-
Rate = 12%
-
Terms = 12
-
Time Counting Method = Actual Days
-
Interest Posting Frequency = Billing Frequency
-
Interest Calculation Method = Flexible Repayment
-
Balloon Payment Type = Balloon Amount Including Only Principal,
-
Balloon Payment = $10,000
-
Payment Application Mode = Current Dues
-
Delinquency Basis = Schedule Balance
-
Funding in Tranches = True
-
Revolving = True
-
Draw Billing Method = Interest Only
-
-
Approve and disburse the loan.
The Current Payment Amount = $8,099.10
In Amortization Schedule the values are updated as follows:
-
Last record has Due Date = March 01, 2014
-
Due Amount = $18,099.10
-
Due Principal = $17,934.07
-
Due Interest = $165.09
-
Due Fee = $0
-
Balance = $0
-
-
Go to the Reschedule Page, without modifying any value select Preview.
Before the fix: In the preview of amortization schedule, the Current Payment Amount is incorrectly displayed as $7,460.28.
The last EMI record incorrectly displays the value:
-
Principal = $25,326.31
-
Interest = $233.14
-
Amount = $25,559.45
After the fix: The Amortization schedule is same as it was after the loan disbursal.
On the Amortization Schedule, the values are correctly displayed as follows:
-
Last record has Due Date = March 01, 2014
-
Due Amount = $18,099.10
-
Due Principal = $17,934.07
-
Due Interest = $165.09,
-
Due Fee = $0
-
Balance = $0
-
Resolution
The issue is now resolved and on performing a rescheduling action on a loan contract, the system is calculating the balloon payment (nth payment) amount correctly.
The system is displaying an error message during investor payout for contracts with 1000 plus active investors (Jira ID: PDRFF-3156/ND-8304)
Issue Description
The system is displaying the following error message during investor payout for contracts with 1000 plus active investors
Note
Apex heap size exceeded
Resolution
This issue is now fixed and the system is not displaying an error message during investor payout for contracts with 1000 plus active investors
The system is displaying an incorrect Last Transaction Timestamp (Jira ID: PDRFF-2688/ND-7954)
Issue Description
The system is displaying an incorrect Last Transaction Timestamp due to the due to the variations in user timezones and the organization's timezone.
Following is an example of the issue:
-
Consider that the transaction creation time, as per the user timezone of GMT+0, is recorded as December 13, 2023, 03:16 AM.
-
Salesforce converts this time to match the company timezone of GMT-5, displaying it on the UI as December 12, 2023, 10:16 PM, while storing the actual UTC time in the field as December 13, 2023, 03:16 AM.
-
However, the last transaction timestamp field displays December 11, 2023, 10:16 PM in the UI, and stores December 12, 2023, 03:16 AM in the UTC time.
The Salesforce database stores datetime field values in UTC format, while the UI displays them according to the timezone of the user viewing it. In this case, when last transaction timestamp takes the date value from the organization's system date and the time value from Salesforce UTC, it is resulting in an incorrect combination. Consequently, displaying an incorrect value.
Resolution
The issue is fixed, the last transaction timestamp field is now populating based on the timezone of the viewing user (company timezone).
The system is not displaying the alert Message on the Reschedule page, when the Disable Autocheck Maintain Delinquency flag is unchecked (Jira ID: PDRFF-3279/ND-8289)
Issue Description
When the loan is rescheduled from the Reschedule page with the Disable Autocheck Maintain Delinquency flag unchecked and the system is not displaying the following alert message is instead incorrectly generating the preview.
Note
Rescheduling on Principal Balance. Maintain Delinquency is false. Do you want to proceed?
Resolution
The issue is now fixed and the system is displaying the alert message on the Reschedule page even when the Disable Autocheck Maintain Delinquency flag is unchecked.
The system is not reverting the value of the Reverse Amount for the Next Due field to the previous value after a Payoff LPT reversal (Jira ID: PDRFF-3036/ND-8109)
Issue Description
The system is not reverting the value of the Reverse Amount for the Next Due field to the previous value after a Payoff LPT reversal.
Example to understand the issue
-
Set the Current System Date to March 01, 2013 and create a loan contract with the following values:
-
Loan Amount =10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
IPT Frequency = Monthly
-
-
Approve and disburse the loan.
-
Move the current system date to April 10, 2013.
The system creates Bill-1 and IPT-1.
-
Create an LPT for the amount of $3040.6 (Bill amount + $1,000) (LPT-1).
-
Reverse Amount for Next Due = $2,000
-
-
Move the current system date to April 10, 2013.
-
Create a loan payoff transaction to close the loan (LPT-2) with transaction amount of $7,054.53 and transaction date of April 10, 2013.
-
Reverse Amount for Next Due = $0
-
-
Reverse payoff LPT (LPT-2).
-
Reverse Amount for Next Due is not reverting back to $2,000. The system still displays it as $0.
-
Resolution
The issue is now fixed and the system is reverting back the value of the Reverse Amount for the Next Due field to the previous value after a Payoff LPT reversal.
The system is applying multiple Motor Early Payoff Fees charges to a single loan for multiple payoff payments (Jira ID: PDRFF-3101/ND-8005)
Issue Description
The system is applying multipleMotor Early Payoff Fees charges to a single loan for multiple payoff payments. Instead the system must apply the payoff penalties as follows:
-
Once the payoff charge is applied on the loan contract, it must not be applied again
-
Once the payoff charge is applied and a payoff is attempted, pre-payment penalty must not be applied again
Example to understand the issue
Scenario 1
Let us consider a scenario where the user creates an excess LPT to pay the payoff charge.
-
Set the current system date to March 01, 2013, and create a loan contract with the following values:
-
Create a payoff charge and add it to fee set.
-
Link fee set with product.
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 4
-
Time Counting Method = Month and Days
-
Interest Posting Transaction Frequency = Billing Frequency
-
-
Approve and disburse the loan.
-
Under the Prepayment Penalty Details tab, create Prepayment Penalty Configuration for payoff charge with the following values:
-
Calculation Type = Fixed
-
Tenor Slab Type = Term Based
-
Add Seq 1 with Lower Limit = 0, Upper Limit = 3, Value = 400
-
-
Create LPT-1 of amount $10,000 (same as the payoff amount)
-
The system displays a warning message for the amount of $400.
-
Save page to create LPT.
-
The system creates a Payoff Charge-1 for the amount of $400.
-
Create an LPT-2 for the amount of $500.
-
Select Save.
-
Before the fix:
-
The system displayed a warning message to create another Payoff Charge for the amount of $400.
-
On selecting Save again, the system created one more payoff charge of the amount $400. This charge has a Total Amount Due of $300 and Paid Amount of $100.
After the fix:
-
The system is not displaying a warning message and sub header to create payoff charge.
-
Another payoff charge is not getting created.
-
Payoff Charge-1 is getting paid.
-
Loan status is updated to Closed - Obligations met
-
After paying a charge amount of $400, remaining amount goes towards Excess. So, Excess field is updated to $100.
-
Scenario 2
Let us consider a scenario where the user creates an LPT of exact amount to pay the payoff charge.
-
Set the current system date to March 01, 2013, and create a loan contract with the following values:
-
Create a payoff charge and add it to fee set.
-
Link fee set with product.
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 4
-
Time Counting Method = Month and Days
-
Interest Posting Transaction Frequency = Billing Frequency
-
-
Approve and disburse the loan.
-
Under Prepayment Penalty Details tab, create Prepayment Penalty Configuration for payoff charge with the following values:
-
Calculation Type = Fixed
-
Tenor Slab Type = Term Based
-
Add Seq 1 with Lower Limit = 0, Upper Limit = 3, Value = 400
-
-
Create an LPT-1 for the amount of $10,000
-
The system displays a warning message for the amount of $400
-
Save the page to create LPT.
-
The system creates a Payoff Charge-1 for the amount of $400.
-
Create an LPT2 for the amount of $400.
-
Select Save.
-
After the fix:
-
The system is not displaying a warning message and sub header to create payoff charge.
-
Another payoff charge is not getting created.
-
Payoff Charge-1 is getting paid.
-
Loan status is updated to Closed - Obligations Met.
-
Resolution
The issue is now resolved and the system is not charging multiple Motor Early Payoff Fees charges to a single loan for multiple payoff payments.
UI issues on the loan page in the Lightning Experience (Jira ID: PDRFF-3174/ND-8378)
Issue Description
After an upgrade, the Lightning Experience is displaying the following errors:
-
Angular arrow are not being displayed properly on collapse and expand view.
-
Tabs on loan account details page are being displayed with a blue background.
Resolution
The issue is fixed now by modifying the logic such that the UI appears as expected.
If the Payoff Fees field is configured with a frozen fee configuration then the system is not clearing the payoff loan payment transactions on loan accounts (Jira ID: PDRFF-3114/ND-8303)
Issue Description
The system is not clearing a payoff loan payment transactions on a loan contract and is displaying the following error message, when there is a frozen fee configuration on payoff fees.
Note
Rolling back the batch. Message - CL012016: Cannot apply charges. Loan account LAI-00006252 has active Frozen Fee Config FFC-15456 preventing charges on this account. - Cause null-38.
Resolution
The issue is now fixed and the system is now clearing the payoff loan payment transactions on loan accounts with a frozen fee configuration without an error message.
On adding a pre-paid fee while disbursing a refinanced contract, the system is creating duplicate distribution of Refinanced Distribution Type (Jira ID: PDRFF-3269/ND-8389)
Issue Description
On adding a pre-paid fee while disbursing a refinanced contract, the system is creating duplicate distribution of Refinanced Distribution Type and is displaying the following error message:
Note
CL013435: Sum of distributions amount is not equal to disbursal transaction amount.
On regenerating distributions, the system is adding one more duplicate distribution of Refinanced Distribution Type to the list.
Example to understand the issue
-
Create a pre-paid fee with $0 amount and add it to the fee set.
-
Create a loan contract and run through one or two payment cycles.
-
Create a new refinanced contract with the additional loan amount of $5,000 and approve the same.
-
Now, while disbursing the contract, add the Pre-Paid Fees and add some value in the Amount field and then select Add prepaid Fee.
-
The system creates a duplicate distribution of Refinanced Distribution Type, which is not removable until the page is refreshed. On selecting Regenerate Distributions, the system is creating one more distribution of Refinanced Distribution Type.
-
On selecting validate, the system is displaying the following error message:
Note
CL013435: Sum of distributions amount is not equal to disbursal transaction amount.
Resolution
The issue is now fixed and the system is not is creating duplicate distribution of Refinanced Distribution Type.
The system is displaying a NullPointerException error, when the investors have become inactive, and the user runs the Investor Payout Job (Jira ID: PDRFF-3316/ND-8416)
Issue Description
When the contract status is Closed-Obligation Met, all the investors have become inactive, and the user runs the Investor Payout Job, the system is displaying the following error message:
Note
Attempt to de-reference a null objectCause: nullStack: (loan)Line number: 484Type name: System.NullPointerExceptionStacktrace - Entering - execute() of MFiFlexBatchJobDelegate
Resolution
The issue is now fixed and the system is not displaying the error message.
The system is not generating Loan Transaction Summary for Additional Interest - Excess Payoff type of transaction (Jira ID: PDRFF-2766/ND-7963)
Issue Description
If a payoff LPT transaction is created to payoff the loan on a non-billing date, the system calculates the regular interest and the additional interest components for the loan, but does not post them on a non-billing date. Then on the payoff date, the system generates the Interest Posting Excess-Payoff and Additional Interest Excess-Payoff and these components are paid off by the payoff amount.
The system is generating a Loan Transaction Summary for Interest Posting Excess-Payoff transaction but not for Additional Interest Excess-Payoff transaction.
Resolution
The issue is now fixed and the system is generating a Loan Transaction Summary both for the Additional Interest Excess-Payoff transaction and the Interest Posting Excess-Payoff transaction.
The remaining amount on an Investment Order is getting incorrectly calculated when a loan is paid off (Jira ID: PDRFF-1893/ND-7973)
Issue Description
When a loan is paid off, the remaining amount on the Investment Order is getting calculated incorrectly. The remaining amount must be updated to zero.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Amount = $2,00,000
-
Rate =10%
-
Terms = 12
-
Time Calculating Method = Month and Days
-
Interest Type = Fixed
-
Payment Frequency = Monthly
-
IPT enabled = True
-
Is IPT enabled for IO = True
-
IPT Frequency = Monthly
-
Contract Date = October 3, 2013
-
-
Let us create four investors with investor name as InvestorA, InvestorB, InvestorC and InvestorD with the following details:
-
Investor flag = True
-
Available funds = $1,00,000
-
InvestorA share = 15%
-
InvestorB share = 15%
-
InvestorC share = 20%
-
InvestorD share = 20%
-
-
Let us change the InvestorA priority to 1, InvestorB priority to 2 and keep InvestorC and InvestorD as null.
-
Let us create a spread wise principal LPT of amount $60,000 and clear it.
-
Let us run the Investor Payout Job.
This payment satisfies InvestorA and InvestorB and both the investor status is updated to Inactive.
-
Now let us remove the priority from InvestorA and InvestorB.
-
Let us go to Nov 3, 2013.
The IPT is created.
-
Now let us run the Investment Order posting Job.
IPT is created for InvestorC and InvestorD.
-
Let us create a payoff transaction and payoff the loan and run the Investor Payout Job.
The values must be updated as follows:
-
Remaining Investment Amount and Interest Posted amount must get paid off and become zero.
-
IO status must change to Inactive on both the IO's (InvestorC and InvestorD)
But the Remaining Investment Amount is not getting updated to zero when a loan is paid off.
-
This issue is occurring because the investors with null priority are not getting picked up by the Investor Payout Job.
Resolution
This issue is fixed now, and the Remaining Investment Amount is getting calculated correctly.
When the Investor Payout job is run, the system is calculating the Interest Accrued even after the IOs are sold (Jira ID: PDRFF-3086/ND-8123)
Issue Description
For a back-dated payment, when the Investor Payout job is run, the system is calculating the Interest Accrued even after the IOs are sold.
Resolution
The issue is now fixed, and the system is not calculating the Interest Accrued for sold off IOs.
The system is not displaying the batch details from the Process Interface Records page (Jira ID: PDRFF-3175/ND-8288)
Issue Description
In the lightening mode, go to Servicing Configuration> Batch Jobs > Data Import> View Batches and select the required batch. On the Process Interface Records page although the system is displaying a record number in the Eligible Records on selecting Show/Refresh records the system is not displaying any records
Resolution
This issue is now fixed, and the system is displaying the records from the data imports.
No confirmation email received after a successful execution of the DAGs (Jira ID: PDRFF-2951/PD-1744)
Issue Description
After a successful execution of the DAGs, no confirmation email is received at the registered email ID.
Resolution
This issue is fixed as a confirmation email is now successfully received at the registered email ID upon successful execution of the DAGs.
When the Investor Payout job is run, the system is calculating the Interest Accrued even after the IOs are sold (Jira ID: PDRFF-3362/ND-8123)
Issue Description
For a back-dated payment, when the Investor Payout job is run, the system is calculating the Interest Accrued even after the IOs are sold.
Resolution
This issue is fixed and the internal logic has been modified to prevent interest from accruing for the sold off IOs when the Investor Payout job is run.
LoanPaymentTxnClearingDynamicJob is failing and the system is displaying an error message (Jira ID: PDRFF-3336/ND-8278)
Issue Description
On attempting to process 180 payments, the LoanPaymentTxnClearingDynamicJob is failing and the system is displaying the following error message:
Note
Apex heap size too large: 12161335
Resolution
The issue is now fixed by modifying the logic such that LoanPaymentTxnClearingDynamicJob is not failing and the system is not displaying any error message.
The system is displaying an error message when the user is trying to create a contract with the disbursal date and payment start date both falling on a business holiday (Jira ID: PDRFF-3084/PD-1767)
Issue Description
The system is displaying the following error message when a user is trying to create a contract with the disbursal date and payment start date both falling on a business holiday as per the Business Hours Holiday:
Note
Invalid input, schedules could not be generated
Example to understand the issue
-
On March 01, 2013, create a loan contract with the following values:
-
Fincalc Version = 4.0 (under Additional Parameters section)
-
Add a Business Hours with Saturday and Sunday as Off
-
Loan Amount = $10,000
-
Rate = 27%
-
Terms = 364
-
Is IPT Posting = True
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
-
Set Expected Disbursal Date as March 02, 2013 (a holiday as per Business Hours) and Payment Start Date as March 31, 2013 (a holiday as per Business Hours).
-
Select Save.
System displays the following error message:
Note
Invalid input, schedules could not be generated.
Resolution
The issue is now fixed and the system is not displaying any error when the user creates a contract with the disbursal date and payment start date both falling on a business holiday.
On reversing an adhoc payment LPT, the system is displaying an error (Jira ID: PDRFF-2921/ND-7975)
Issue Description
The system is displaying a Null reference error when attempting to reverse an adhoc payment LPT.
Following is an example of the issue:
-
Consider a contract with a Due Date of 9 February, 2024.
-
Reverse the two adhoc payments.
The system is displaying the following error.
Note
Rolling back the batch. Message - Attempt to de-reference a null object
-
Make three payments simultaneously on 14 February, 2024.
The first payment successfully clears the Due bill and IPT.
However, the subsequent two payments were classified as adhoc and are allocated towards the principal.
Resolution
The issue is fixed. Adhoc payment LPTs can now be reversed without any error.
Add a pop-up message when the when Reschedule Balance is set to Principal Remaining and Maintain Delinquency is set to False (Jira ID: PDRFF-2428/ND-7970)
Issue Description
The system is allowing for rescheduling to take place with the Reschedule Balance set at Principal Remaining. A pop- up message must be displayed only when the Reschedule Balance is set to Principal Remaining and Maintain Delinquency is set to False. The system must not display a pop-up message for any other combinations.
Resolution
This issue is fixed now and the system now displaying the required pop-up message.
The system is creating an excess Payoff IPT on internal transfer of an LPT (Jira ID: PDRFF-2788/ND-7964)
Issue Description
During mid-cycle internal transfers or deposit to loan transfers, the system is creating excess payoff IPT. This is occurring when a payment of amount higher than the payoff balance amount is made toward the loan in the middle of the billing cycle.
In this scenario, the system is incorrectly identifying the internal transfer LPT as a payoff LPT, resulting in the generation of an additional IPT for the interest accrued up to the current date. Although the contract status remains in the active state, the surplus IPT is appearing on the statements.
An example explaining this issue
-
Create a loan contract with the following values on March 01, 2013:
-
Loan Amount = $140,000
-
Interest Rate = 10% (Fixed)
-
Terms = 10
-
Time Counting Method = Month And Days
-
IPT Frequency = Monthly
-
Payment Frequency = Monthly
-
Adjust Deposit Amount In Payoff = True
-
-
Create a Deposit record as follows:
-
Deposit Amount = $40,000
-
Deposit Rate = 10%
-
Priority = 1
-
-
Move the Current System Date to March 10, 2013.
The values are updated as follows:
-
Interest Accrued = $250
-
Deposit Interest Accrued = $100
-
-
Create an LPT with the following values
-
Payment Amount = $80,000
-
Payment Mode = Cash
-
PAM = Deposit
-
Transaction Date = March 10, 2013
-
-
Since loan is in Active - Good Standing status, the LPT amount is stored in Deposit.
The values are updated as follows;
-
Deposit Amount = $120,000
-
Today's Payoff (approx.) = $20,250
-
Loan Balance = $140,000
-
Principal Rem = $140,000
-
Reserve Amount for Next Due = 0
-
Interest Remaining = $250
-
Interest Accrued = Interest Posted = Interest Capitalized = $0
-
-
Create internal transfer LPT using Quick Menu. Make a Deposit to Loan Transfer of amount $100,000.
The system is creating an excess Payoff IPT of $250 although the Loan Balance is greater than Deposit Amount present. Last Interest Posting Date = March 10, 2013.
Resolution
The issue is fixed, now after the deposit-to-loan transfer, the deposit value is adjusted to reflect the transaction, ensuring that the correct comparison is made with the write-off amount.
loan.PayoffQuote().getPayoffAmount() API is not considering the deposit amount resulting in an incorrect payoff amount getting calculated (Jira ID: PDRFF-2439/ND-7743)
Issue Description
When we use the API loan.PayoffQuote().getPayoffAmount() for getting the total payoff without creating the Payoff Quote record the system is the system is not considering the deposit amount in the loan while calculating the payoff and hence, the payoff amount is getting calculated with an incorrect value. For example, say there is a Deposit Amount of $5,000 in the loan, then this amount must get deducted from the Payoff Amount when Adjust Deposit in Payoff = True. However, the system is not considering this Deposit Amount and hence the Payoff Amount is calculated incorrectly.
Resolution
The issue is now fixed. The system is now considering the deposit amount and hence, calculating the payoff correctly.
Following fixed issues are ported to 4.4001.76 December'23 patch.
Issue key |
Summary |
---|---|
PDRFF-3030 |
LoanDepositPaymentCreationDynamicJob failing with "Apex Heap Size Too Large" error |
PD-1741 |
DateTime formatting for Dynamic SOQL query returning wrong value |
PDRFF-1107 |
Rescheduling Advance IO causing list index out bounds exception |
Twilio integration not working (Jira ID: PDRFF-3242/PD-1775)
Issue Description
The system is unable to send notification as the Twilio integration was failing and the following error message was returned from the API.
Note
Failed to process Queueable job for class TwilioQueueablehelper
Resolution
This is because the end point of the concerned API that was used to send the SMS was deprecated in Twilio.
Note
The API calls third-party application called Twilio to send an SMS.
In a loan where adjustment entry is enabled, after a backdated payment reversal, the system is rescheduling the loan based on an incorrect Principal Remaining (Jira ID: PDRFF-3194/ND-8070)
Issue Description
After a backdated payment reversal in a loan where adjustment entry is enabled, with Maintain Delinquency set to True, the system is rescheduling the loan based on an incorrect Principal Remaining during a schedule Preview or Save.
Note
The system is rescheduling the loan based on the correct Principal Remaining when Maintain Delinquency is set to false.
Example to understand the issue
-
Set the Current System Date to September 01, 2015, and create a loan contract with the following values:
-
Is Interest Posting = False
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Actual Days (366)
-
Payment Frequency = Quarterly
-
Interest Type = Floating
-
Interest Rate Change Method = Change Payment Amount
-
Funding in Tranches = True
-
Floating Rate Revision Frequency = Quarterly
-
Revolving = True
-
Payment Start Date = December 01, 2015
-
The values for floating rates are as follows:
-
Floating Rates = 5, Effective From = September 01, 2015, Effective To = November 30, 2015
-
Floating Rates = 5.5, Effective From = December 01, 2015, Effective To = February 29, 2016
-
Floating Rates = 6, Effective From = March 01, 2016, Effective To = May 31, 2016
-
-
This contact has flexible repayment plan with n-1 Interest Only terms and one EMI term.
-
-
Approve and disburse only $7,000.
-
Create (LPT-1) with Principal Only payment of $2,500.
This reduces the Principle Remaining to $4,500.
-
Reschedule the loan with Principle Remaining ($4,500) and with Maintain Delinquency set to True.
-
Move the current system dates a few days ahead to October 10, 2015, and disburse $2,000.
The Principal Remaining will be $6,500.
-
Create LPT-2 Principal only Payment of $1,000.
The Principal Remaining will be $5,500.
-
Reschedule the loan with Principle Remaining ($5,500) and with Maintain Delinquency set to True.
-
Reverse LPT-1.
The Principal Remaining will be $8,000.
-
Reschedule a loan with principle remaining and with Maintain Delinquency set to True.
Before the fix: The system was incorrectly considering Principal Remaining as $5,500 while rescheduling the loan with Maintain Delinquency set to True.
After the fix: The system is considering the correct value of Principal Remaining as $8,000 while rescheduling the loan with Maintain Delinquency set to True
Resolution
The issue is now fixed and after a backdated payment reversal, the system is considering the correct value of Principal Remaining while rescheduling the loan with Maintain Delinquency set to True.
In a loan where adjustment entry is enabled, the system is not generating a Repayment Schedule after second disbursal reversal (Jira ID: PDRFF-3181/ND-8064)
Issue Description
In a loan where adjustment entry is enabled, after a second disbursal reversal on the same day, the system is not updating the schedules as per the first disbursal balance, and it still remains the same as second disbursal balance.
Example to understand the issue
-
Set the current system date to March 01, 2013, and create a loan contract with the following values:
-
Adjustment Entry = True
-
Is Interest Posting= False
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
FIT=True
-
Payment Frequency = Quarterly
-
-
Approve and disburse the only $3,000.
The new repayment schedule is generated for $3,000.
-
Disburse $5000 (Disbursement -2) on same date.
The new repayment schedule is generated for $8,000.
-
Reverse the Disbursement -2 on the same date.
Before the fix: The system generates the repayment schedule incorrectly for $8,000.
After the fix: The system correctly generates the repayment schedule for $3,000.
Resolution
The issue is now fixed by modifying the logic such that that in a loan where adjustment entry is enabled, multiple events, such as disbursal, disbursal reversal, and rate change, are occurring on the same day, then the system behaves as follows:
-
The system restores the schedule from the snapshot correctly when a disbursal reversal is occurring after an active LAD on the same day.
-
The system regenerates the schedule correctly when a disbursal reversal is occurring before an active LAD on the same day.
The system is updating the Floating Rate Revision Date incorrectly (Jira ID: PDRFF-3180/ND-8000)
Issue Description
While updating the next Floating Rate Revision Date for Quarterly frequency of floating rate frequency, the backdated first funding on the contract is considering disbursal transaction created date instead of actual funding date.
Floating Rate Revision Date is a field whose value must get calculated in the future.
Therefore, as a part of the fix, if a user has not defined the Floating Rate Revision Date during the first disbursal, then the system calculates the future Floating Rate Revision Date from the first disbursal date considering the Floating Rate Revision Frequency.
For example,
-
Current system date (Loan creation date) = March 01, 2023
-
Floating Rate Revision Frequency = Quarterly
-
Floating Rate Revision Date on loan = Null
-
Move the current system date to June 12, 2023
-
First Loan Disbursal = June 10, 2023 (Backdated)
Before the fix: The system updated Floating Rate Revision Date incorrectly as September 12, 2023.
After the fix: The Floating Rate Revision Date is updated correctly as September 10, 2023.
If a user has defined the Floating Rate Revision Date, the system then updates the future Floating Rate Revision Rate by considering the Floating Rate Revision frequency from the defined Floating Rate Revision Date and not the first disbursal date.
For example,
-
Current system date (Loan creation date) = March 01, 2023
-
Floating Rate Revision Frequency = Quarterly
-
Floating Rate Revision Date on loan = June 01, 2023
-
First Loan Disbursal = June 10, 2023
Then the Floating Rate Revision Date is updated as September 01, 2023.
Resolution
The issue is now fixed and the system is updating the Floating Revision Rate Date correctly.
The system is displaying a null pointer exception for a backdated disbursement reversal (Jira ID: PDRFF-3136/ND-7987)
Issue Description
When a backdated disbursement is reversed, the system is throwing a null pointer exception.
Resolution
The issue is now resolved, and the system is not displaying a null pointer exception for a backdated disbursement reversal.
On running the LoanDepositPaymentCreationDynamicJob, the system is displaying a heap size error message (Jira ID: PDRFF-3030/ND-7955)
Issue Description
LoanDepositPaymentCreationDynamicJob is run for 50,000 loan contracts that have 360 terms with FloatingRateInterestRevisionJob and every contract has undergone three reschedulings, then the system is displaying the following error message:
Note
Too many query row exceptions.
Resolution
The issue is now fixed andLoanDepositPaymentCreationDynamicJob is running without displaying any error.
When the disbursement occurs several days after the contract creation, the system is failing to update the interest rate as per the Floating Rate Interest in the Interest Rate Schedule (Jira ID: PDRFF-3117/ND-7916)
Issue Description
The system is failing to update the interest rate as per the Floating Rate Interest in the Interest Rate Schedule attached to the contract when the disbursement occurs several days after the contract creation.
Resolution
The issue is now fixed and the system is updating the interest rate as per the Floating Rate Interest in the Interest Rate Scheduleattached to the contract when the disbursement occurs several days after the contract creation.
After a backdated floating index rate change floating index rate change, the system is not updating the Last Rate Change Date on the contract correctly (Jira ID: PDRFF-3145/ND-8024)
Issue Description
In a loan where adjustment entry is enabled, when a backdated floating index rate change is reversed, the system is not updating the value of Last Rate Change Date field on the contract correctly.
Resolution
The issue is now fixed and the system is updating the Last Rate Change Date on the contract correctly after a backdated floating index rate change reversal.
The system is displaying a NullPointerException during a payment creation (Jira ID: PDRFF-3189/ND-8099)
Issue Description
During payment creation, if the Adjusted Interest Non-Capitalized field is empty (null value), the system is displaying a Null pointer exception.
Resolution
This issue is now fixed and the system is not displaying a NullPointerException during a payment creation.
On reversing an adhoc payment LPT, the system is displaying an error (Jira ID: PDRFF-3048/ND-8025)
Issue Description
The system is displaying a Null reference error when attempting to reverse an adhoc payment LPT.
Following is an example of the issue:
-
Consider a contract with a Due Date of 9 February, 2024.
-
Make three payments simultaneously on 14 February, 2024.
The first payment successfully clears the Due bill and IPT.
However, the subsequent two payments were classified as adhoc and are allocated towards the principal.
-
Reverse the two adhoc payments.
The system is displaying the following error.
Note
Rolling back the batch. Message - Attempt to de-reference a null object
Resolution
The issue is fixed. Adhoc payment LPTs can now be reversed without any error.
For a Written-Off loan, the Interest Remaining is getting added to the Total Payoff Amount for a PayOff Quote of a future date (Jira ID: PDRFF-3298/ND-8276)
Issue Description
After a contract is written-off and a Payoff Quote is generated for a future date, the Interest Remaining is getting calculated for the days from the Transaction Date to the Payoff Quote date.
Example
Let us say a contract is created, approved, and disbursed. Let us say two bills are generated and the first bill is paid. After this, let us say that the contract is written-off and a Payoff Quote is generated for a future date of June 15, 2022. The Transaction Date is May 30, 2022. The Principal Balance is $952.97, Interest Remaining is $46.34 and Interest Per Diem is $0.93. The number of days between the Transaction Date and the Payoff Quote date is 16 days.
Actual Result:
Total Payoff Amount = $952.97 + $46.34 + $0.93 * 16 = $1,014.14.
Expected Result:
Total Payoff Amount = $952.97 + $46.34 = $999.31
Reason
When a Payoff Quote is generated, the unpaid interest amount (Interest Remaining) was getting added to the Total Payoff Amount if the Payoff Quote date was greater than the Transaction Date irrespective of the loan Status.
Expectation
When the status is Closed-Written off, while generating the Payoff Quote with a payoff date greater than the Transaction Date, the unpaid interest (Interest Remaining) must not get added to the Total Payoff Amount and the unpaid interest field value must be zero.
Resolution
This issue is fixed, and now when the status is Closed-Written off, while generating the Payoff Quote with a payoff date greater than the Transaction Date, the unpaid interest (Interest Remaining) is not getting added to the Total Payoff Amount and the value of the Interest Remaining on the Payoff Quote is zero.
Start of Day and Interest Posting jobs are failing with an exception Too many DML rows (Jira ID: PDRFF-3067/ND-7995)
Issue Description
For a batch size of 200, Start of Day job and Interest Posting job are failing with an exception Too many DML rows.
Resolution
The issue is now fixed and Start of Day job and Interest Posting job are working without displaying an exception.
When a loan is rescheduled, the system is calculating the amortization schedule incorrectly (Jira ID: PDRFF-3102/ND-7919)
Issue Description
On the reschedule page, when the setting of the Maintain Delinquency flag is switched from True to False or vice verse, the system is calculating the amortization schedule correctly only for the initial setting, but it is not updating the amortization schedule with the update in the Maintain Delinquency flag.
Note
The issue was replicated using Fin calc 3.1
Example to understand the issue
-
Set the Current System Date to March 01, 2013, and create a loan contract with the following values:
-
Loan Amount = $3,000
-
Rate = 98.5%
-
Terms = 36
-
Time Counting Method = Actual Days (366)
-
Payment Frequency = Monthly
-
Payment Start Date = November 15, 2023
-
-
Approve and disburse the loan.
-
Move the current system date to November 15, 2023, to generate first Bill.
-
Create LPT to pay off amount equal to Bill-1.
-
Move the current system date to May 20, 2024.
-
Go to Reschedule page and set the values as follows:
-
Interest Rate = 96.5%
-
Transaction Date = May 20, 2024
-
Repayment Start Date = June 15, 2024
-
Maintain Delinquency = False
-
-
Select Preview. You will see correct amortization schedule.
-
Do not select Save and keep the Reschedule page open.
-
While staying on the same page, now reset Maintain Delinquency flag to True.
-
Click Preview again.
The EMIs in the amortization schedule are not generated correctly.
Resolution
The issue is now fixed, and the system is generating the updated amortization schedule correctly even after the settings of the Maintain Delinquency flag are changed.
After a backdated Certificate Rate Change, the system is calculating the Interest Posted on an Investment Order incorrectly (Jira ID: PDRFF-2660/ND-7490)
Issue Description
When a backdated Certificate Rate Change is performed on an Investment Order (IO), the system is calculating the value of Interest Posted on that IO incorrectly.
It is calculating the Interest Posted on IO as a sum of interest accrued till the current system date using the older certificate rate and the interest accrued from the backdated transaction date of the rate change till the current system date using the new certificate rate.
The expected behavior is that the Interest Posted on IO must be calculated as a sum of the interest accrued till the backdated transaction date of the certificate rate change using the older certificate rate and the interest accrued from that backdated transaction date to the current system date using the new certificate rate.
Let us say a loan is disbursed on September 17, 2023, and an Investment Order (IO) is added to this loan. Then let us say a payment is made after a month on October 17. This results in the system calculating some value for the Interest Posted on the IO. Then move the date to a month later, say November 16. Now let us say that a backdated rate change is performed on the loan and then a backdated Certificate Rate Change is performed on the IO for November 12. Then move to November 17. After running the necessary jobs, it is observed that the system is calculating the Interest Posted on IO using the old Certificate Rate considering 29 days, which is till today (November 17), instead of 25 days, which is till November 12, and then adding it to the interest calculated using the new Certificate Rate for the rest of the 5 days (from November 12 to November 17.)
The expected behavior is that the Interest Posted on IO must be a sum of the interest accrued till the backdated transaction date (November 12) of the certificate rate change using the older certificate rate and the interest accrued from that backdated transaction date (November 12) to the current system date (November 17) using the new certificate rate.
Resolution
To fix this issue, the internal logic has been modified and the system now calculate the Interest Posted correctly by considering the backdated Certificate Rate Change transaction date.
The system is calculating incorrect Fees Remaining and Fees Capitalized (Jira ID: PDRFF-2578/ND-7279)
Issue Description
The Fees Remaining field displays a negative value and the value of Fees Capitalized is incorrect.
Example to understand the issue
Let us see an example to understand this issue:
-
Let us create a contract with Is Interest Posting and Is Capitalization Enabled flags as True.
Note
Fee Set should contain a Periodic Fee with the following fields marked as True: Include In Dues, Include In Schedules and Enable Fee Capitalization.
-
Move the system's date to the Second Due Date.
Note
Do not create the first cycle payment.
-
Let us disburse the contract on June 3, 2017.
-
On the first due date, July 3, 2017, the bill and periodic fee gets created.
-
Move the system date to August 3, 2017.
-
This creates the second bill and periodic fee.
-
The Fee Capitalized is $20.
-
-
Create an LPT for the first due date and satisfy the bill.
-
In the Contract History, we can see the following: “Fees Capitalized from 20 to 10."
-
-
Create an LPT for the second due date.
-
Now on the contract history, the Fees Remaining is seen as -10.
-
If we see the LPT snapshot for the second payment, the Fees Capitalized will still be 20 and Fees Remaining will be -10.
-
Resolution
The issue is observed when the second LPT is paid. At that time, a new IPT is generated where the charge is capitalized again, due to which the Fees Remaining is getting calculated to a negative value and the Fees Capitalized is increased from 10 to 20.
The system is displaying an error message when a loan contract is rescheduled after a rate change (JIRA ID: PDRFF-1625/ND-7290)
Issue Description
When a contract is rescheduled after the following rate change scenarios:
-
When there are two rate schedules defined for a date in the past and they have the same start date.
-
When a loan has a defined rate schedule for current and future dates and is updated with a new rate, then the system is still considering the old rate schedule.
the system is throwing the following error message:
“Error: After holiday treatment, the start date of Sequence ## is clashing with start date of Sequence ## in the Rate Schedule.”
Resolution
The issue is fixed now, and the loan contract is getting rescheduled without any error message.
The following conditions are the resolution for the preceding respective scenarios:
-
The rate schedule is not considered for dates before last accrual date.
-
When a new rate is chosen, the old rate schedule is updated with the same date for the present and future rate schedules.
The loan status is not getting updated to closed and the Excess Payoff IPT is not getting created when a loan payoff is done (JIRA ID: PDRFF-1592/ND-7298)
Issue Description
For the loans that have Interest Remaining more than the deposit amount , when a loan payoff is done, the loan status is not getting updated to closed and the Excess Payoff IPT is not getting created.
Example to understand the issue
-
Let us create a loan product with the following details :
-
Amount = $40,000
-
Rate =10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
Payment Frequency = Monthly
-
IPT = True
-
IPT Freq = Monthly
-
Adjust Deposit Amount In Payoff = True
-
Contract Date = March 1,2013
-
-
Let us add deposit of amount $100 , approve and disburse the contract.
-
Let us go to March 15, 2013 and reschedule the contract with Maintain Delinquency flag set to true.
-
Now let us create two charges manually of amount $50 and $150.
-
let us generate a payoff quote.
-
Now let us create a payoff transaction with amount equal to payoff quote amount.
This should update the values as follows:
-
The loan status is updated to Active-Marked for Closure.
-
Excess payoff IPT of amount $1,666.25 is created.
-
Paid Amount on IPT = $1,566.25
However the Excess Payoff Amount is not getting created.
-
-
Let us run the Loan Closure Job.
This should update the values as follows:
-
The loan status should be updated to Closed-Obligations Met.
However, the loan status is still in Active-Good Standing.
-
Resolution
This issue is fixed now, and the Excess Payoff IPT is getting created and loan status is getting updated to closed.
The system is displaying Apex CPU time limit exceed error when the user is trying to preview the rescheduled data prior to rescheduling a loan (Jira ID: PDRFF-1901/PD-1709)
Issue Description
While previewing the rescheduled data by clicking the Preview button before the rescheduling of a loan, the user is unable to preview the rescheduled data and the system is displaying the Apex CPU time limit exceed error.
Example to understand the issue
-
Let us create a loan with the following details:
-
Interest Type = Fixed
-
Term = 360
-
Payment Frequency = Monthly
-
Contract Date = March 1,2013
-
-
Let us go to April 1,2013.
The system generates a bill.
-
Let us update the interest value to 12%.
-
Now let us go to the Flexible Repayment Plan page and update the payment plan.
-
Now let us click the Preview button.
The system must display schedules preview.
However, the system is displaying the Apex CPU time limit exceed error.
Resolution
This issue is fixed now, and the user is able to preview the rescheduled data successfully.
Important step after installing this patch
After you install this latest version of the patch, you must add the following configuration setting to use the optimized version of calculator:
-
Go to (Setup) > Setup > Custom Settings > CL Platform Settings.
-
Click New in the Custom Fields section.
-
Create a new text field named Calc Optimized Version by performing the following steps:
-
Select Text and click Next.
-
Provide the following values for the respective fields:
Field
Value
Field Label
Calc Optimized Version
Length
It can be anything. For example, 10.
Field Name
Calc_Optimized_Version__c
-
-
To use the existing version of the calculator, either do not create the preceding field or create it and provide the value to the newly created Calc Optimized Version field as v1 or null. If you do not create the preceding field, the system by default, uses v1 as the financial calculator version. For optimized goal seek version, provide the value to the preceding newly created field as v2.
The system is updating the Transaction Amount incorrectly after displaying an error message (Jira ID: PDRFF-2676/ND-7267)
Issue Description
While creating an LPT, if you enter a Transaction Amount with a comma and digits after the decimal point that are greater than the defined number in the org, then the system is displaying the following error message and upon selecting OK the system is rounding the value up to two decimal digits and then truncating the digits after the decimal point.
Note
You are trying to enter more than 2 decimal places, which is not permitted for this field. Given value will be rounded off to 2 decimal places while saving
The system must round off the value to two decimal points and then display that amount after selecting Validate.
Example to understand the issue
-
On Record a Payment page let us add a Transaction Amount which includes comma and has three or more digits after the decimal point.
-
Transaction Amount= 1,234.567
-
-
Immediately after entering amount, the system displays the following message:
Note
You are trying to enter more than 2 decimal places, which is not permitted for this field. Given value will be rounded off to 2 decimal places while saving
-
On selecting OK, the system rounds off the value to upto two digits after the decimal point and updates the value as follows:
-
Transaction Amount = 1,234,57 (Incorrect)
-
Resolution
This issue is fixed. Now, if you enter an amount with a comma and digits after the decimal point that are greater than the defined number in the org, the system is updating the value in the Transaction Amount field correctly.
The interest is not getting posted on the contract when a backdated LPT is reversed using ACH (Jira ID: PDRFF-2244/ND-7278/ND-7509)
Issue Description
In a loan contract where fees are capitalized, if the backdated LPTs are reversed using ACH and then the Periodic Charge Job is run, the interest is not getting posted.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Enable Fee Capitalization = True
-
Contract Start Date = March 1, 2013
-
Payment Frequency = Monthly
-
-
Let us add a Fee component with the following parameters:
-
Fee Name = Periodic Fee
-
Fee Amount = $40
-
Enable Fee Capitalization = True
-
Periodic Fee Amount Type = Per period amount
-
Include in Dues = True
-
Include in Schedule = True
-
Periodic Charge Start Basis = First Payment Date
-
-
Let us go to March 5, 2013, and create an LPT-1 of amount $1,000.
The values must be updated as follows:
-
Interest Remaining = $11.11
-
LAD = March 5, 2013
-
Loan Balance = $9000
-
-
Let us go to April 1, 2013.
The bill is generated and the values must be updated as follows:
-
Interest Posted = $76.11
-
Bill-1 = $1,086.40
-
Periodic Charge = $40
-
LAD = April 1, 2013
-
Loan Balance = $9,116.11
Let us not clear the bill.
-
-
Now let us go to April 30, 2013, and reverse the LPT-1 created on March 5, 2013.
After reversal, the LAD gets updated to March 5, 2013, which is lesser than the New Interest Posting Date (April 1, 2013).
The values must be updated as follows:
-
Interest Posted on April 1, 2013, gets reversed and a new IPT of amount $83.33 gets created.
-
Next Interest Posting Date is updated to May 1, 2013.
-
LAD = April 1, 2013.
-
New Loan Balance = $10000+$40+$83.33 = $10,123.33 (Loan Balance + Periodic Charge + Interest Posted)
-
Interest Accrued = ( Loan Balance*Rate*No of Days/360) (10123.33*10*29/360) = $81.55
-
Delinquent Amount = $1,086.40
-
Amount Due Till Current = $1,126.40
-
Payment Amount on bill must be updated from $1,000 to $0.
-
-
Let us go to May 1, 2013, which is the Periodic Charge creation date.
The values must be updated as follows:
-
Periodic Charge-2 gets created.
-
Fee Capitalized = $80
-
LAD = May 1, 2013.
-
Next Interest Posting Date must be updated to June 1, 2013.
-
Interest Accrued = ( Loan Balance*Rate*No of Days/360) (10123.33*10*30/360) = $84.36
-
Interest Capitalized = $83.33 + $84.36 = $167.69
-
Interest Posted = 167.69
-
Loan Balance = $10,247.69
-
Today's Payoff = 10,247.69
-
Amount Due Till Current = $1,166.40
However, after the LPT is reversed and the Periodic Charge Job is run, the interest is not getting posted on the contract.
This is because for the contract with capitalized periodic charge, the LAD is occurring before the next interest posting date.
-
Resolution
This issue is now fixed. As part of fix, if LAD is occurring before the next interest posting date, then the Periodic Charge Job of SOD batch triggers IPT Job internally so that the next interest posting date occurs before the LAD. This regenerates the pending IPTs, and the SOD batch's IPT Job generates the future IPTs for the next interest posting date without any issues.
The Last Due Date is getting updated incorrectly as null after the bill is paid (Jira ID: PDRFF-2569/ND-7293)
Issue Description
When a loan is created (regular and deposit) the Last Due Date field value is getting deleted, due to which the bills are getting generated for higher values and thereby causing issue with IPT’s and payments ultimately.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Deposit Offset Days = 0
-
Auto Change Deposit Rate = True
-
Payment Adjustment Mode = Deposits
-
-
Let us move to March 1, 2013, and create loan as per given precondition and a deposit record:
-
Deposit Amount = $6,000 and Rate =10%
-
-
Let us go to the Last Due Date April 1, 2013.
-
Let us reschedule the loan with Maintain Delinquency = True and set Interest Only Period = 2.
-
Preview and Save.
-
Let us move to the next Due Date May 1, 2013.
Now, the system updates the value of Last Due Date as NULL instead of May 1, 2013.
Resolution
This issue is fixed. Now, the system updates the Last Due Date as May 1, 2013 after the bill is paid.
User is unable to configure Contingency Status Code Rules (Jira ID: PDRFF-2136/ND-7287)
Issue description
User is employing the following steps to configure the Contingency Status Code rules, within the system:
-
Go to the Servicing Configuration section.
-
Accessing the Contingency Rules menu select Add Rules to initiate the rule creation process.
However, during this configuration attempt, they are unable to add rules and are receiving the following error message:
Attempt to de-reference a null object.
An unexpected error has occurred. Your solution provider has been notified. (clcommon)
Resolution
This issue is now fixed.
The Last Due Date is getting updated incorrectly as null after the bill is paid (Jira ID: PDRFF-2569/ND-7293)
Issue Description
When a loan is created (regular and deposit) the Last Due Date field value is getting deleted, due to which the bills are getting generated for higher values and thereby causing issue with IPT’s and payments ultimately.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Deposit Offset Days = 0
-
Auto Change Deposit Rate = True
-
Payment Adjustment Mode = Deposits
-
-
Let us move to March 1, 2013, and create loan as per given precondition and a deposit record:
-
Deposit Amount = $6,000 and Rate =10%
-
-
Let us go to the Last Due Date April 1, 2013.
-
Let us reschedule the loan with Maintain Delinquency = True and set Interest Only Period = 2.
-
Preview and Save.
-
Let us move to the next Due Date May 1, 2013.
Now, the system updates the value of Last Due Date as NULL instead of May 1, 2013.
Resolution
This issue is fixed. Now, the system updates the Last Due Date as May 1, 2013 after the bill is paid.
The Deposit Amount in the child deposit account is getting calculated incorrectly when an LPT is reversed (JIRA ID: PDRFF-2207/ND-7296)
Issue Description
When a Loan Payment Transaction in a loan with Payment Application Mode as Deposit is reversed, the system is calculating a negative value for deposit amount in the child deposit account.
In other words, there is an inconsistency seen between the values of the deposit amounts displayed in the child deposit account and the Current Deposit Amount of the parent deposit.
Note: Child deposit accounts are the deposit transactions created on the main deposit as highlighted in the following image:
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Contract Start Date = March 1, 2013
-
Payment Application Mode = Deposit
-
Auto change Deposit Rate = True
-
Payment Frequency = Monthly
-
-
Let us create a Deposit account on the existing contract with the following details and activate it:
-
Loan Amount = $0
-
Deposit Rate = 5%
-
Priority = 1
-
Deposit Offset Days = 0
-
-
Let us add an amount of $1,000 in the deposit account with Payment Application Mode as Deposit.
-
Let us go to March 15, 2013, and add an amount of $200 in the deposit account with Payment Application Mode as Deposit.
-
Let us go to March 17, 2013, and perform a Deposit Rate change through deposit adjustment.
-
Now let us go to March 31, 2013, and create an LPT of amount $200 with Payment Application Mode as Deposit.
The Deposit Amount value must be updated to $1,700.
-
Let us go ahead and reverse the LPT created on March 31, 2013.
The Deposit Amount must be updated to $1,500.
-
Now let us go to April 1, 2013. Since this is the second bill date, all internal jobs along with LoanDepositPaymentCreationJob is run.
The values must be updated as follows:
-
A new child deposit record must be created.
-
The deposit amount on the child deposit must be same as parent's current deposit amount.
However, the deposit amount of new child deposit is getting calculated as a negative amount.
-
Resolution
This issue is fixed now, and the deposit amount of the new child deposit is getting calculated correctly.
The system is calculating the repayment schedule incorrectly for loans with zero payment flexible repayment plan (JIRA ID: PDRFF-1614/ND-7300)
Issue Description
For loans that have zero payment flexible repayment plan and periodic fee added to them, the repayment schedule is getting calculated incorrectly .
Example to understand the issue
-
Let us create a loan with the following details:
-
Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
IPT Frequency = Monthly
-
IPT = True
-
Contract Date = May 30,2013
-
-
Let us add a fee set with the following details :
-
Fee Amount = $100
-
Include in Dues = True
-
Include in Schedules = True
-
Periodic Fee Amount Type = Per period amount
-
-
Let us add a flexible repayment plan with the following details:
-
Payment Type = EMI
-
Payment Amount = $0
-
Number of Payments = 3
-
Payment Start Date = June 30,2013
-
-
Let us approve and disburse the loan.
The values must be updated as follows:
-
AMZ schedules must be generated.
-
The first three schedules must be generated with zero Interest, zero Principal, zero due amount and Zero fees upto September 30, 2014.
-
Normal EMI schedules must get generated after September 30,2013 without skipping any schedule.
-
After the contract is created, the current payment amount must be updated to $0.
However, the zero amount EMI schedules are getting skipped for the first three schedules.
-
Resolution
This issue is fixed now, and the repayment schedule is getting calculated correctly .
The system is displaying maximum view state limit exceeded error message (Jira ID: PDRFF-1710/ND-7320)
Issue Description
While processing a file with more than 150 ACH records, the system is displaying the following error message:
Note
Maximum view state limit exceeded.
Resolution
This issue is now fixed and files with more than 150 ACH records are getting processed successfully without any error messages.
The system is displaying an error message while trying to create a new dynamic query on the CL Contract object (JIRA ID: PDRFF-2160/PD-1704)
Issue Description
While trying to create a new dynamic query, on selecting the CL Contract object to query on, the system is displaying the following error message:
Error Message
Visualforce Error
Maximum view state size limit (170KB)exceeded.
Actual view state size for this page was 171.938KB.
Note
This issue is only seen while trying to select the CL Contract object to query on. Selecting other objects is not resulting in any error messages.
This issue is occurring because on selecting the CL Contract object to query, the system is unable to display all the fields on the page as the number of fields is exceeding the limit that the page can accommodate.
Resolution
This issue is now fixed, and the system is allowing user to create dynamic query on the CL Contract object without any error messages.
The system is calculating the repayment schedule incorrectly for loans with zero payment flexible repayment plan (JIRA ID: PDRFF-1614/PD-1707)
Issue Description
For loans that have zero payment flexible repayment plan and periodic fee added to them, the repayment schedule is getting calculated incorrectly .
Example to understand the issue
-
Let us create a loan with the following details:
-
Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
IPT Frequency = Monthly
-
IPT = True
-
Contract Date = May 30,2013
-
-
Let us add a fee set with the following details :
-
Fee Amount = $100
-
Include in Dues = True
-
Include in Schedules = True
-
Periodic Fee Amount Type = Per period amount
-
-
Let us add a flexible repayment plan with the following details:
-
Payment Type = EMI
-
Payment Amount = $0
-
Number of Payments = 3
-
Payment Start Date = June 30,2013
-
-
Let us approve and disburse the loan.
The values must be updated as follows:
-
AMZ schedules must be generated.
-
The first three schedules must be generated with zero Interest, zero Principal, zero due amount and Zero fees upto September 30, 2014.
-
Normal EMI schedules must get generated after September 30,2013 without skipping any schedule.
-
After the contract is created, the current payment amount must be updated to $0.
However, the zero amount EMI schedules are getting skipped for the first three schedules.
-
Resolution
This issue is fixed now, and the repayment schedule is getting calculated correctly .
The Current Reserve Amount balance is getting updated incorrectly on the Loan Transaction Summary after a bill is generated (Jira ID: PDRFF-2068/ND-6952)
Issue Description
When a payment is made with an amount higher than the due amount and the next bill generated, then the amount is getting added incorrectly to the Current Reserve Amount balance on the LTS of the bill.
Example to understand the issue
Let us say in a loan we have current due amount of $50 to be paid. We go ahead and make a payment of amount $100. Once this payment is done, the excess $50 gets added to the Current Reserve Amount balance.
On the next bill date, let's suppose the due amount is $100 and the LTS is created for the same. In this LTS, the Current Reserve Amount balance is already consisting of $50, which is incorrect.
The Current Reserve Amount in the LTS must be $0 since the $50 amount has partially paid the current bill.
Resolution
This issue is fixed now, and the Current Reserve Amount in LTS is getting updated correctly. After the fix, when a bill is paid from the Reserve Amount for Next Due, then the Current Reserve Amount in the Loan Transaction Summary has the latest value of Reserve Amount For Next Due after the bill is paid from Reserve.
Deposit Amount is getting calculated incorrectly when loan has multiple deposits with child records (Jira ID: PDRFF-2446/ND-7133)
Issue Description
In a loan contract when there are multiple deposits and child deposits is created on different dates for various parent deposits the system is considering the cutoff date for the latest child deposit, neglecting other parent deposits and resulting in incorrect transaction amounts for new child deposit entries.
Example of the system behavior after the fix
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
-
Let us go to March 1, 2013.
Create a loan with two deposit records with following values and then approve and disburse the loan:
-
Deposit 1: $1,500, Rate=10%, and Priority = 1
-
Deposit 2 : $0, Rate=10%, and Priority = 0
-
-
Let us move to March 8, 2013.
-
Let us make deposit transfer from Deposit 1 to Deposit 2 of $1,000.
-
Let us move to March 15, 2013.
-
Make a mid cycle payment of $100. It goes towards Deposit 1.
-
Now let us go to the next Due Date April 1, 2013, and allow LoanDepositPaymentCreationDynamicJob batch job to create the internal transfer.
The system is calculating the amount of Deposit 2 as negative.
Resolution
This issue is fixed. The latest child record of Deposit 2 calculates Deposit Amount of $553.6. The system is now querying the latest child deposit before the transaction date for each parent deposit, ensuring that accurate child deposit records are created.
The system is calculating incorrect Fees Remaining and Fees Capitalized (Jira ID: PDRFF-1941/ND-7314)
Issue Description
The Fees Remaining field displays a negative value and the value of Fees Capitalized is incorrect.
Example to understand the issue
Let us see an example to understand this issue:
-
Let us create a contract with Is Interest Posting and Is Capitalization Enabled flags as True.
Note
Fee Set should contain a Periodic Fee with the following fields marked as True: Include In Dues, Include In Schedules and Enable Fee Capitalization.
-
Move the system's date to the Second Due Date.
Note
Do not create the first cycle payment.
-
Let us disburse the contract on June 3, 2017.
-
On the first due date, July 3, 2017, the bill and periodic fee gets created.
-
Move the system date to August 3, 2017.
-
This creates the second bill and periodic fee.
-
The Fee Capitalized is $20.
-
-
Create an LPT for the first due date and satisfy the bill.
-
In the Contract History, we can see the following: “Fees Capitalized from 20 to 10."
-
-
Create an LPT for the second due date.
-
Now on the contract history, the Fees Remaining is seen as -10.
-
If we see the LPT snapshot for the second payment, the Fees Capitalized will still be 20 and Fees Remaining will be -10.
-
Resolution
The issue is observed when the second LPT is paid. At that time, a new IPT is generated where the charge is capitalized again, due to which the Fees Remaining is getting calculated to a negative value and the Fees Capitalized is increased from 10 to 20.
The system is facing layout issues while viewing in the Lightning Experience after the Winter'22 upgrade (Jira ID: PDRFF-2779/ND-7334)
Issue Description
The header with CL Contract and LAI-XXXXXXX details on the CL Contracts page is appearing twice while viewing the application in the Lightning Experience.
Resolution
This issue is fixed now, and the header on the CL Contracts page is appearing correctly.
Investor Payout Dynamic Job and LPT reversal is failing with an error message (Jira ID: PDRFF-2420/PDRFF-2458/ND-7336)
Issue Description
When the Investor Payout Dynamic Job is run, some of the LPTs are not getting processed and the system is displaying the following error message:
Error Message
14:42:01.3 (942516029)|VARIABLE_ASSIGNMENT|[EXTERNAL]|this|"common.apex.runtime.impl.ExecutionException"|
0x3ff9a90b 14:42:01.3 (942544790)|VARIABLE_ASSIGNMENT|[EXTERNAL]|message|
"String to Datetime c (49 more) ..."
Then when the LPT is reversed, the system is displaying the following error message:
Error Message
CL010100: Unexpected DML Exception Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Error processing payment reversal for contract - LAI-00001879 - String to Datetime conversion logic for Locale no_NO is not available: [] at line 20
This issue is occurring because the two locale formats no_NO and ja_JP were not part of the system.
Resolution
The issue is fixed now, and the two locale formats have been added to the system.
Paid to Investor flag is not getting set to true when an LPT is created to pay the Charge amount (Jira ID: PDRFF-2095/ND-7338)
Issue Description
When a Loan Payment Transaction ( LPT) is created manually to satisfy a charge, the Paid to Investor Flag is not getting set to true due to which the next month's Interest LPT is also not getting picked up by the Paid to Investor Job and hence the investor is not getting paid with the next month's interest paid.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Amount = $10,000
-
Rate =10%
-
Terms = 6
-
Interest Only Terms = 4
-
Payment Frequency = Monthly
-
Enable Interest Posting For IO = True
-
Contract Date = March 1, 2013
-
-
Let us create an Investment Order on the existing contract with the following details and activate it.
-
Certificate Rate = 10%
-
Share = 100%
-
-
Let us add a fee set with the following parameters:
-
Fee Name = NSF Fee
-
Fee Amount = $100
-
-
Let us go to March 2, 2013, and create an LPT-1 of amount $100 to satisfy only the Charge.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
Paid to Investor flag must be set to true.
However, the Paid to Investor flag is not getting set to true.
-
Let us go to April 1, 2013.
Bill-1 is generated.
-
Let us create an LPT-2 to pay the bill .
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
-
Let us go to April 2, 2013, and create an LPT-3 of amount $100 to pay the Principal.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
The values must be updated as follows:
-
Paid to Investor flag must be set to true.
-
ILT must be created for Payment on investor side.
However, the third payment is not paid toward the Investor. Also, the Paid to Investor flag is not getting set to true for fee only payment after LPT-1.
-
Resolution
This issue is now fixed, and the Paid to Investor flag is getting set to true .
Note
To make the fix work, the previous data must be rectified because Unit of Work is not enabled for Investor Payout Job, other wise the job will continue picking up bad data and will fail.
When a contract is rescheduled, the system is displaying an exception (Jira ID: PDRFF-2052/ND-7340)
Issue Description
When a loan with Payment Frequency as Semi-Monthly PD, is rescheduled, and if the difference between first payment date and second due date, is less than five days, the system is displaying the following exception:
Note
Apex CPU time limit exceeded Error is in expression '{!actionTo}' in component <apex:commandButton> in component loan:busybutton Error is in expression '{!preview}' in component <apex:commandButton> in page loan:reschedulealoan: Class.clcommon.DateUtil.getNextCycleDateSemiMonthlyPayDay: line 108, column 1.
Note
For Semi-Monthly PD, the difference between the first and the second payment dates specified on the CL Contract page must be equal to or greater than four days and less than 31 days.
Example to Understand the Issue
-
Let us create a loan contract with the following values:
-
Loan Amount = $10,000
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Semi - Monthly - PD
-
IPT Frequency = Monthly
-
Rate = 10%
-
-
Let us go to March 1, 2013, approve, and disburse the loan.
-
Payment Start Date = April 1, 2013
-
Second Due Date = April 10, 2013
-
-
Once the loan is active, go to Reschedule page and set the values as follows:
-
Repayment Start Date = April 1, 2013
-
Second Due Date =April 5, 2013
-
The system displays the following exception:
Note
Apex CPU time limit exceeded Error is in expression '{!actionTo}' in component <apex:commandButton> in component loan:busybutton Error is in expression '{!preview}' in component <apex:commandButton> in page loan:reschedulealoan: Class.clcommon.DateUtil.getNextCycleDateSemiMonthlyPayDay: line 108, column 1.
Resolution
This issue is fixed. Now the system is not displaying an Apex CPU time limit instead now displays the following error message:
Note
Minimum 5 days difference should be there between Payment start date and second due date.
The Actual Next Installment Date is getting reverted after Index Rate Changes (Jira ID: PDRFF-2222/ND-7343)
Issue Description
In a loan contract that has an interest rate change occurring on the Next Due Generation Date, when the Billing Job runs, the system is updating the Actual Next Installment Date correctly, but after the Change Interest Rate job runs on the same day, the system is reverting the Actual Next Installment Date to the previous value. The system must not change the value of Actual Next Installment Date after the Change Interest Rate job runs.
Example to understand the behavior after the fix
-
Set the Current System Date to March 1, 2013, and crate a loan contact with the following values:
-
Interest Rate = 10%
-
Loan Amount = $10,000
-
Terms = 10
-
TCM = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Billing Frequency
-
Interest Type = Floating
-
Pre Bill Days = 1
-
Floating Rate Revision Frequency = Daily
-
Add Actual Next Installment Date to Loan Details layout if not added already
-
Add multiple Interest Rate Schedules with the following values:
-
FRI, Index Rate = 0, Margin = 0 Start from March 1, 2013
-
FRI, Index Rate = 0, Margin = 5 Start from March 31, 2013
-
-
Approve and disburse the loan
-
-
Move the Current System Date to the Next Due Generation Date that is, March 31, 2013.
-
Bill 1 is generated for April 1, 2013, and the Next Due Date is May 1, 2013.
Actual Next Installment Date is getting updated to May 1, 2013, correctly after the Billing Job is run, but it is reverting to April 1, 2013, after Change Interest Rate job is run.
Resolution
This issue is now fixed. The system is updating the Actual Next Installment Date correctly.
The system is displaying an error message when a payment is reversed (Jira ID: PDRFF-2339/ND-7345)
Issue Description
After the Winter'22 upgrade, during a payment reversal, the system is displaying the following error message:
Error Message
Unexpected DML Exception Insert failed. First exception on row 0; first error:
FIELD_CUSTOM_VALIDATION_EXCEPTION, Error processing payment reversal for contract - LAI-00015122 - Aggregate query has too many rows for direct assignment,
use FOR loop: [] at line 20
Resolution
This issue is fixed now and the system now allows user to perform payment reversal without any error message.
Floating Rate Revision job is failing with an error message (Jira ID: PDRFF-2157/ND-7346)
Issue Description
When the Floating Rate Revision job is run to perform the floating rate change for a loan, it is failing with the following error message:
Error Message
"Aggregate query has too many rows for direct assignment, use FOR loop"
Resolution
This issue is fixed now, and the Floating Rate Revision job is running successfully without any error messages.
The system is not allowing to search the transaction details in the Loan Transaction Summary Detail section (Jira ID: PDRFF-2273/ND-7349)
Issue Description
When the Search button on the Loan Transaction Summary Detail section is clicked, the system displays the following error message:
Error Message
"Attempt to de-reference a null object"
Error is in expression '{!validateUserAccess}' in component <apex:page> in page loan:txnsummary: Class.loan.SecureUIAndInvocationController.validateUserAccess: line 8, column 1
An unexpected error has occurred. Your solution provider has been notified. (loan)"
Resolution
This issue is now fixed , and transaction details are getting reflected in the Loan Transaction Summary Detail section of the loan contracts.
Note
It is recommended to view the transaction details by performing the following steps:
Quick Menu>Account Statement> Loan Transaction Statement
The system is displaying an error message if Transaction Date is selected before specifying the Fee Type on the Waiver window (Jira ID: PDRFF-2049/ND-7351)
Issue Description
While trying to waive a charge on the Waiver window, if the Transaction Date is selected before specifying the Fee Type, the system is displaying the following error message:
Error Message
"CL016443: Fee Type cannot be null.
Error is in expression '{!updateTxnDate}' in page loan:waiver: Class.loan.FeeWaiveAction.setFeeNames: line 102, column 1
Class.loan.WaiverController.calculateChargeAmount: line 265, column 1
Class.loan.WaiverController.updateTxnDate: line 166, column 1"
Resolution
This issue is fixed. As part of fix, a null check validation is added on Fee type and the system now allows user to select the Transaction Date prior to the required Fee Type on the Waiver window without any error message.
The interest is getting posted incorrectly and the unpaid charges are getting included in the maturity bill incorrectly in an ARR-enabled loan (Jira ID: PDRFF-2074/ND-7352)
Issue Description
In an ARR-enabled loan with Include in Dues flag set to false, the interest is getting posted incorrectly and the unpaid charges are getting included in the maturity bill incorrectly.
Example to understand the issue
-
Let us create a lending product that is ARR-enabled.
-
Let us say that today is March 1, 2021, and we create a loan with ARR for 2 month and calculation type as Manual Interest Input, Interest Only Term as 1, approve, and disburse it.
-
Let us create a fee set with Include in Dues flag set to false.
-
Let us go to Loan Actions> Manual Billing > create Manual Billing to create the manual bill for next due date with the bill amount.
-
Let us go to the next IPT date, which is April 1, 2021.
The values must be updated as follows:
-
Bill-1 is generated and IPT-1 is created.
-
Unpaid fees is not included in the maturity bill.
-
The Interest Posted must match the manual bill amount.
-
-
Let us go ahead and pay the bill-1.
-
Create an ad-hoc charge on the loan.
-
Let us go to Loan Actions> Manual Billing > create Manual Billing to create the manual bill for next due date with the bill amount.
-
Now let us go to the next IPT date, which is May 1, 2021, which is the maturity date.
The values must be updated as follows:
-
Bill-2 is generated and IPT-2 is created.
-
Unpaid charge must not included in the maturity bill.
-
The Interest Posted after bill-2 must match the manual bill amount in the OLT.
However, the values are updated as follows:
-
Unpaid fees is getting included in bill-2 incorrectly even though Include in Dues flag is set to false.
-
The Interest Posted after bill-2 is not matching the manual bill amount in the OLT.
-
Resolution
This issue is fixed, unpaid charges are not getting included in the bill when Include in Dues flag is set to false and the interest is getting posted correctly on the maturity date.
The rescheduling of a loan contract after rate schedule addition is failing with an error message (Jira ID: PDRFF-2214/ND-7364)
Issue Description
When a new rate schedule is added by clicking Loan Quick Menu > Loan Actions > Rate Change and then clicking Validate, the rescheduling of a loan contract is failing with the following error message:
Note
SObject row was retrieved via SOQL without querying the requested field: loan_Loan_Productc.loanMax_Interest_Rate_c
This is because while performing a reschedule, the fields mentioned in the preceding error message were not getting queried.
Resolution
This issue is fixed. As part of the fix, the fields mentioned in the preceding error message have been added in the query now and the loan contracts are getting rescheduled successfully.
Two ETFs are charged for a split off payment in same bank file (Jira ID: PDRFF-1806/ND-7359)
Issue Description
When the loan balance is less than the tolerance specified, the contract status should get updated as 'Active - Marked for closure'. Instead the system is generating another ETF charge which is impacting the loan balance and overall payoff and the loan status is not updating to 'Active - Marked for closure'.
Example to understand the issue
-
Let us create a loan contract.
-
Let us setup a Minimum interest calculation for the contract.
-
Define an ETF charge for this contract.
-
Let us define a payoff tolerance limit for the contract, in such a way that if the principle goes below the tolerance limit then the ETF charge is created. (in this case the tolerance is $30)
-
Move the system dates ahead for few days so the interest is accrued on loan.
-
Now create an LPT manually in such a way that only the principal/advance remaining on loan is cleared. The value in the Interest remaining field gets updated.
-
As the payment cleared the principal completely, ETF charge is created. Hence the value in loan balance becomes (Sum of interest remaining and Fee remaining)
-
Manually waive off this charge, LPT record is created for waived off amount with payment type as 'Waived'.
For example, if the loan principal amount is $10,000 and tolerance is defined as $30 the loan status can be moved to Waived if the principal of amount $9,970 or above is paid.
-
The value in loan balance will be equal to 'interest remaining'.
-
Now create a payment manually in such a way that it brings down the loan balance below the tolerance limit.
The system is generating another ETF charge and the loan status is not updated to 'Active - Marked for closure'.
Resolution
The issue is now fixed and the loan status is updated to 'Active - Marked for closure' when the loan balance is less than the tolerance specified.
The Deposit Rate is getting updated incorrectly when a loan contract with interest type as floating is rescheduled (Jira ID: PDRFF-1955/ND-7362)
Issue Description
When a loan contract with interest type as floating is rescheduled, the Deposit Rate is getting updated incorrectly.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Interest Type = Floating
-
Index Rate Change = 10%
-
Payment Frequency = Monthly
-
Payment Application Mode = Deposit
-
Auto Change Deposit Rate = True
-
Contract Date = March 1, 2013
-
-
Let us create a Deposit account on the existing contract with the following details and activate it:
-
Loan Amount = $1,000
-
Deposit Rate = 10%
-
-
Let us go to March 5, 2013, and reschedule the loan with the following details:
-
Floating Rate Index = Current FRI on loan (This value is selected when the product is created)
-
Interest Rate = 8%
-
Repayment Start Date = March 5, 2013
The values must be updated as follows:
-
Loan is rescheduled.
-
The current Interest Rate on the loan must reduce from 10% to 8%.
-
The Deposit Rate on the loan must also get reduced from 10% to 8% .
However, the Deposit Rate is not getting updated automatically after the loan is rescheduled, even though the Auto Change Deposit Rate flag is set to true.
-
Resolution
This issue is fixed now, and the Deposit Rate is getting updated automatically after the loan is rescheduled.
The Minimum Interest Amount is getting added again to the Payoff Amount incorrectly when the system date changes to a future date (Jira ID: PDRFF-2275/ND-7366)
Issue Description
In a loan where a minimum loan interest is defined, if the borrower makes a payment in middle of the cycle such that the Principal Balance becomes zero and the Minimum Interest Amount is not paid off, the balance Minimum Interest charge is getting created and added to the payoff amount. This amount is getting added again to the Today's Payoff incorrectly when the system is moving to any future Date.
Example to understand the issue
-
Let us create a contract on March 1, 2013, with the following values and then approve and disburse it:
-
Amount = $10,000
-
Rate = 10%
-
Term = 1
-
Pay Frequency = Single-Payment
-
IPT Frequency = Monthly
-
TCM = Month and Days
-
Minimum Interest Option = Minimum Interest Period
-
Minimum Interest Period (in Days) = 180
-
-
In the Additional Parameters section, verify that the value of Minimum Interest Amount is displayed as $491.67.
-
Move the SOD to May 10, 2013.
Since the SOD has moved by two cycles (monthly) the system creates two IPTs.
For the period between May 1, 2013, and May 10, 2013, the system updates the different parameter values as follows:
-
Interest Accrued = $25
-
Today's Payoff = $10,491.67
-
-
Let us create an LPT of amount $10,291.67.
-
The system creates Minimum Interest Charge of amount $300 which has the following values:
-
Total Amount Due = $200
-
Amount Paid = 100
-
Today Payoff = $200
-
Loan Balance = $0
-
Principal Remaining = $0
-
-
Let us go to May 11, 2013.
The Loan Payoff must be $200. As the Loan Balance is $0 no interest must be accrued but the system is adding a Minimum Interest Amount of $300 to today's payoff.
-
Let us move to June 1, 2013 the next Due Date.
System does not post an IPT of $0 amount on June 1, 2013.
Resolution
The issue is fixed. The logic is now updated and the Minimum Interest charge is not getting added to the payoff again.
Loan Payoff is not working after the Spring '22 upgrade for an FAMZ loan (Jira ID: PDRFF-1314/ND-7368)
Issue Description
After the Spring '22 upgrade, the Loan Payoff is not working for an FAMZ Loan. When we click the Loan Payoff, the system is displaying the following error message:
Note
Aggregate query has too many rows for direct assignment, use FOR loop.
This issue is occurring due to more than 200 child records of the type of repayment schedules being processed by the system.
Example of the issue
Let us create a Flexi AMZ loan with a Payment Frequency of daily and a Payment Term of 396.
Let us say that the Interest Posting is enabled with frequency as daily.
When the loan status is in Active good standing or active bad standing, click the Loan Payoff button (or through the Loan Quick Menu action), the system displays the following error message:
Note
Aggregate query has too many rows for direct assignment, use FOR loop.
Resolution
This issue is fixed as the internal logic has now been changed to use the FOR loop in the code for iterating the child records.
The Total Pre-Paid Fees is not getting added in the loan amount while a loan is converted from an application to a contract (Jira ID: PDRFF-2028/ND-7370)
Issue Description
While converting a loan application to a loan contract using the contract creation API , the pre-paid fees is not getting added in the loan amount. Because of this after disbursal, the pre-paid fees is not getting added to the disbursal amount .
Resolution
This issue is fixed now, and the pre-paid fees is getting added in the loan amount successfully.
System is not allowing to perform a Rate Change when the Principal Remaining is zero (Jira ID: PDRFF-2014/ND-7374)
Issue Description
In a loan contract where the Interest Type is Floating, after a payment is made before the Maturity Date such that the Principal/Advance Remaining becomes zero and there is still some Interest Accrued that is not yet posted, the system is not allowing to perform a Rate Change and is throwing an error message.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Deposit Offset Days = 0
-
Auto Change Deposit Rate = True
-
Payment Adjustment Mode = Deposits
-
Let us go to March 1, 2013. Let us create, approve, and disburse the loan.
-
Let us add a Rate Schedule row with following values:
-
Floating Rate Index = <FRI name>
-
Margin = 0
-
Interest Rate = 10%
-
Start Date = March 1, 2013
-
-
Let us go to April 10, 2013.
-
Let us create an LPT-1 of $10,000 which is equal to the Loan Balance.
The values are updated as follows:
-
Principal Remaining = 0
-
Loan Balance = 0
-
Interest Remaining = $25
-
Reserve Amount for Next Due = $10,000
-
-
Let us go to Loan Quick Menu > Loan Actions > Rate Change > add a new row to Rate Schedule with the following values:
-
Floating Rate Index = FRI rate = 20%
-
Start Date = April 10, 2013
-
-
Select Save.
-
Let us go to March 10, 2013.
-
Go to Loan Quick Menu > Action > Reschedule and set Repayment Start Date to June 1, 2013, preview, and select Save.
The system is not allowing to reschedule the loan.
Resolution
This issue is fixed. All Index Rate Changes are now updated and the values are as follows:
-
Loan Status = Active Good Standing
-
Last Transaction Type = Index Rate Change
-
OLT is getting created for Index Rate Change
-
Current Interest Rate = 20%
-
Current Payment Amount = $25.22 ( penny difference of .01 may occur)
-
New Repayment Schedule and Repayment Schedule Summary are getting generated for receiving the remaining interest of $25.21
The system is now allowing you to reschedule the loan successfully.
-
New RSS and RS are created and old ones are getting archived non-primary.
-
Next Due Generation Date is getting updated as June 1, 2013.
The amortization schedule is getting generated incorrectly when an Interest Only loan with flexible repayment plan is rescheduled (Jira ID: PDRFF-2117/ND-7378)
Issue Description
When an Interest Only loan with flexible repayment plan is rescheduled, the amortization schedule is getting generated incorrectly.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Contract Date = January 9, 2013
-
Is Capitalization Enabled = True
-
Payment Frequency = Monthly
-
Payment Start Date = February 9, 2013
-
-
Let us add a flexible repayment plan with the following details:
-
Interest Only Period = 6, Payment Start Date = February 9, 2013
-
Equal Monthly Installments = 4, Payment Start Date = August 9, 2013
-
-
Let us go to February 9, 2013.
Bill-1 is generated.
-
Let us go to February 20, 2013, and reschedule the loan .
The values must be updated as follows:
-
Loan is rescheduled.
-
Interest Only Term must be updated to 5.
-
The number of installments must be updated 9.
However, the amortization schedule for one of the Interest Only Term is getting skipped.
-
Resolution
This issue is fixed now, and the amortization schedule is getting generated correctly.
The system is not displaying a confirmation message upon a successful payoff (Jira ID: PDRFF-2797/ND-7388 [PROBLEM LINK])
Issue Description
The system is not displaying any confirmation message upon making a successful payoff. The system must display a confirmation message indicating that the payoff is successful.
To reproduce the issue, perform the following steps:
-
Go to Loan Quick Menu > Payment Transactions > Loan Payoff.
-
On the Record a Pay-off page, in the Spread section, in the Transaction Amount field, enter the expected payoff amount and select Save.
Resolution
The issue is fixed, the system now displays a success message when the payoff is successful. An example of a confirmation message upon a successful payoff:
Note
Success: CL017835: Loan Paid off = LAI-00000092
The InterestPostingAmzDynamicJob is failing with an error message (Jira ID: PDRFF-2353/ND-7380)
Issue Description
In an FAMZ loan, when the InterestPostingAMZDynamicJob is run, the system displays the following error message:
Error Message
SObject row was retrieved via SOQL without querying the requested field: loan_Interest_Posting_Transactionc.loanExternal_Id_c
Objs = [a1a1v00000rCJ6NAAW, a1a1v00000rCNJBAA4, a1a1v00000rCNMAAA4, a1a1v00000rCU1aAAG, a1a1v00000rCUsRAAW, a1a1v00000rCV5..
Because of this, the Last Interest Posting Date and the Next Interest Posting Dates are not getting updated on the contract, and the LPTs are not getting cleared.
Resolution
This issue is not reproducible while testing in the Q2 local org. However, as part of the fix, the field mentioned in the preceding error message, which is the loan_Interest_Posting_Transaction_c.loan_External_Id_c field, has been added in the query now and the internal logic of the InterestPostingAmzDynamicJob has been modified so that it runs successfully.
The Additional Interest Component is not getting considered when Available Funds is updated during Investor Payout (Jira ID: PDRFF-2510/ND-7391)
Issue Description
When a payment including Additional Interest Component (AIC) is made in a loan that has Interest Bearing Principal (for calculating AIC) as Delinquent Amount, and when the Investor Payout Job is run, the system is considering the AIC in the calculations while creating Investor Loan Transaction (ILTID) for the investor, but it is not considering the AIC while updating the Available Funds in the Account of that investor.
Note
When a bill is unpaid on the bill due date, the loan becomes delinquent from the next day of the due date. Lenders can charge an additional interest on this delinquent amount.
Available Funds is the amount remaining with the investor. All principal recovered from borrower payments is added to the available funds.
Example to understand the issue
-
Let us create a simple loan contract with the following details and disburse it:
-
Priority = 1
-
Share = 100%
-
Contract Start Date = January 10, 2021
-
-
Let us create an investment order with AIC component on both loan and IO with interest bearing principal as delinquent amount.
-
Let us go to February 10, 2021, and run the IO Accrual and Interest Posting Jobs.
The system generates a bill.
Let us not clear the bill 1. This makes the loan delinquent.
-
Now let us go to March 10, 2021, and run the IO Accrual and Interest Posting Jobs.
The system generates a bill.
-
Let us clear bill 2.
An amount equal to the ILTID is added to the investor's Available Funds, which is Principal + Interest - Total Service Charge + AIC.
However, AIC is not getting included when the Available Funds in the Investor Account is updated. If AIC is not included, the investor's Available Funds is getting updated with the value as Principal + Interest - Total Service Charge.
Resolution
This issue is fixed now, and the AIC component is being considered while calculating the investor's Available Funds for investor payment.
The system is displaying an error message when the Investor Payout Job is run(Jira ID: PDRFF-2129/ND-7394)
Issue Description
When an Investment Order is sold in between the billing cycles, and the Investor Payout Job is run , the system is displaying the following error message:
"common.apex.runtime.impl.ExecutionException: Duplicate id in list: a8JDn000000HXmnMAG
Please find attached logs"
Example to understand the issue
-
Let us create an FAMZ loan contract with the following details and disburse it:
-
Loan Amount = $1,000,000
-
Rate = 10%
-
Terms = 6
-
Payment Frequency = Monthly
-
IPT Frequency = Billing Frequency
-
Enable Interest Posting for IO = True
-
Is Interest Posting = True
-
Contract Date = March 1, 2013
-
-
Let us add two investor accounts without any priority, and create an Investment Order on the existing contract with the following details and activate it.
-
Investment Amount = $100,000
-
Share = 100%
-
Certificate Rate = 10%
-
-
Let us go to April 1, 2013.
Bill-1 is generated.
-
Now let us create an LPT-1 of amount $833.33 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
-
Let us go to April 20, 2013, and run the IO Interest Accrual Job, and IO Interest Posting Job.
-
Let us now sell the entire share of investor1 to investor2.
The Investment Order 1 is marked sold and becomes inactive.
-
Let us go to May 1, 2013.
Bill-2 is generated.
-
Let us create an LPT-2 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job and Investor Payout Job.
The interest values must be updated .
However, the system is displaying the following error message:
"common.apex.runtime.impl.ExecutionException: Duplicate id in list: a8JDn000000HXmnMAG Please find attached logs"
Resolution
The issue is now fixed, and the Investor Payout Job is running successfully.
The Investment Order is not getting paid out and interest is not getting posted for the sold IO when the Investor Payout Job is run (Jira ID: PDRFF-2178/ND-7396)
Issue Description
After an Investment Order is sold, when the Investor Payout Job is run, interest is not getting posted for the sold IO and Investment Order is not getting paid out.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $100,000
-
Interest Rate = 10%
-
Term = 6
-
Interest Only Period = 4
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Contract Start Date = March 1, 2013
-
Interest Posting on Investment Order = True
-
Payment Frequency = Monthly
-
Pre Bill days=10
-
Sample fee set attached
-
-
Let us add two investor accounts, Investor-1 and Investor-2, without any priority, and create an Investment Order on the existing contract with the following details and activate it:
-
Investment Amount = $100,000
-
Share = 100%
-
Certificate Rate = 10%
-
-
Let us go to April 1, 2013.
Bill-1 gets generated.
-
Let us create an LPT-1 of amount $833.33 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor payout Job.
-
Let us go to April 20, 2013.
Interest Accrued = $527.78.
-
Run the IO Interest Accrual Job and IO Interest Posting Job.
-
Let us now sell the entire share of Investor-1 to Investor-2 with Transfer Income flag set to false and Add Income in Buying Price flag set to false.
After being sold Investment Order-1 must have the following values: Status = Sold, Enabled=False, Income to Be Collected=True, Last Interest Accrual Date = April 20, 2013, End Date= April 20, 2013, Accrued Interest = 0.00, Next Investor Interest Posting Date = December 31, 3000.
Whatever was Accrued Interest till selling date, that must get posted. Hence, ILTID record must be created for Interest Posting Transaction for amount = $527.78, Transaction Date = April 20, 2013.
The Investment Order-1 gets marked sold and becomes inactive.
Investment Order-2 (newly created) must have a Start Date = April 20, 2013, and Last Interest Accrual Date = April 20, 2013.
-
Let us go to May 1, 2013.
Bill-2 gets generated.
-
Let us create an LPT-2 of amount $833.33 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor payout Job.
The values must be updated as follows:
-
On running IO Interest Accrual Job: No accural must happen on Investment Order-1. On Investment Order-2, Accrued Interest must be = $305.56.
-
On running IO Interest Posting Job: IPT must be created on Investment Order-2 but no IPT records must be created for Investment Order-1 for May 1, 2013.
-
On running Investor payout Job: Investment Order-1 must get paid out. Interest Remaining on Investment Order-1 must be = $136.11 (Total Interest Accrued from March 1 to April 20)
-
Interest Amount Paid on IO must be = $136.11
-
Interest Balance must be = 0.
-
For Investment Order-2, Interest Remaining must be = $305.56, Interest Amount Paid = $305.56, Next Investor Interest Posting Date = June 1, 2013
-
ILT for posting must be created on Investment Order-2 for amount = $305.56.
However, the system is reporting the following behavior:
-
On running the Investor Payout Job, the system is displaying the following error message:
"common.apex.runtime.impl.ExecutionException: Duplicate id in list: a8JDn000000HXmnMAG Please find attached logs."
-
Interest is not getting posted for Investor-1 and there is still an Interest Accrued existing on the contract, hence the Investment Order-1 is not getting paid out.
-
Resolution
This issue is fixed as IPT is now getting created when the IO is sold so that Investor Payout Job pays the due accrued amount correctly and the payout is made correctly.
The system is displaying an error message while generating a payoff quote for existing loans after the Winter'22 upgrade (Jira ID: PDRFF-2258/ND-7398)
Issue Description
After the upgrade from Lithium to Winter'22 when user is generating Payoff Quote for existing loans the system is displaying the following error message:
Note
common.apex.runtime.impl.ExecutionException: Argument cannot be null.
This issue is occurring because the Interest field value on Arrears Paid (loan_IOA_Paid_c) is null and hence it is throwing an exception while generating the payoff quote.
Resolution
This issue is fixed. As part of fix, the null check is added whenever loan_IOA_Paid_c value is null on loan account.
Interest Posting Transaction created by an LPT is not getting linked with that LPT (Jira ID: PDRFF-2529/ND-7400)
Issue Description
When a payment is cleared by the LoanPaymentTxnClearingDynamicJob job, it must generate an Interest Posting Transaction and creates records for the related Interest Posting - Loan Payment (IPLP) if they are not already in the contract. However, when the job runs, it creates the IPLP record with no value getting displayed in the Interest Posting Transaction field of that record. This means that the IPT is not getting linked with that LPT, which ideally must be linked because it connects the LPT and the IPT objects.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Billing Frequency
-
-
Let us go to March 1, 2013. Create, approve and disburse the loan.
-
Let us go to next due date without running batch jobs.
-
Run the Billing job.
-
Without running the IPT job, create an LPT of the bill's amount.
-
The system creates an IPT itself and marks it paid- Bill-1.
-
Let us go to LPT > Interest Posting - Loan Payment (related list) > Interest Posting - Loan Payment Details page.
It is observed that the Interest Posting Transaction field, in the Interest Posting - Loan Payment Details page, displays no value. It must display the IPT ID that is linked to the LPT.
This issue is occurring because when the Payment Application Mode is Date, and when an LPT is created, the system is unable to create a link between IPT and IPLP.
Resolution
The issue is fixed as the code has been updated to add the link between IPT and IPLP resulting in system now being able to display the relevant IPT ID in the Interest Posting Transaction field by the LoanPaymentTxnClearingDynamicJob job.
Interest is getting updated incorrectly in Amortization Schedule when a loan is rescheduled (Jira ID: PDRFF-2281/ND-7402)
Issue Description
While rescheduling a non-delinquent loan, the interest amount of first month is getting added incorrectly to the interest component of next month. This results in an incorrect Amortization Schedule.
Example to Understand the Issue
Let us create a loan contract and verify the interest components in the Repayment Schedule.
-
Let us create a loan contract with the following values:
-
Loan Account = $10,000
-
Term = 10
-
TCM = Month And Days
-
Payment Frequency = Monthly
-
IPT Frequency = Monthly
-
Rate = 10%
-
Interest Type= Fixed
-
Maintain Delinquency = True
-
-
Move the Current System Date to March 1, 2013, approve and disburse the loan.
-
Move the Current System Date to April 1, 2013.
-
Go to the Reschedule page, keeping the pre-filled values unchanged, select Preview.
Since Maintain Delinquency is set to true while rescheduling, the interest posted till April 1, 2013 must not get added to second billing cycle. But the interest amount of first month is getting added to the interest component of second month after rescheduling.
Resolution
The issue is now fixed. The Amortization Schedule is now reflecting the correct interest amount.
Fees Remaining and Fees Capitalized are getting calculated with incorrect values (Jira ID: PDRFF-1941/ND-7510)
Issue Description
In a loan that has two capitalized charges included, when a backdated payment is made after the reversal of an LPT, the system is calculating a negative value for Fees Remaining and an incorrect value for Fees Capitalized.
Note
You can enable capitalization of a fee, whereby, the fee amount is added to the loan balance and interest is accrued on it, in situations of late or non payment of the fee. In the default payment spread, this interest is recovered before satisfying the other components of interest, fee and principal balance. However, you cannot add a capitalized fee to a non-interest bearing loan, such as amortization based loan or a line of credit.
Example to understand the issue
-
Let us create a loan contract with the following details and disburse it:
-
Is Interest Posting Transaction Enabled = True
-
Is Capitalization Enabled = True
-
Payment Frequency = Monthly
-
Contract Date = March 1, 2017
-
-
Let us add a fee set with the following fees:
-
Fee Name = Periodic fee
-
Fee Amount = $10
-
Include in Dues = True
-
Enable Fee Capitalization = True
-
Include in Schedules = True
-
Periodic Fee Amount Type = Per period amount
-
Frequency = Monthly
-
Time of Charge = Periodic
-
-
Fee Name = Other fee
-
Fee Amount = $5
-
Enable Fee Capitalization = True
-
Time of Charge = Other
-
-
-
Let us go to April 1, 2017.
The values must be updated as follows:
-
Bill-1 and IPT are generated.
-
Periodic Fee of amount $10 is generated.
-
-
Let us go to April 2, 2017, and create an LPT-1 with Transaction Date as April 2, 2017.
-
Now let us create an ad-hoc charge, Other fee, of amount $5.
-
Let us go to April 7, 2017, and reverse the LPT-1.
The values must be updated as follows:
-
Fees Remaining = $5
-
Fees Capitalized = $10
-
-
Now let us create a backdated LPT-2 with Transaction Date as April 2, 2017.
The values must be updated as follows:
-
Fee Remaining = $0
-
Fee Capitalized = $5
-
-
Now let us go to April 9, 2017 and create a backdated LPT-3 with Transaction Date as April 5, 2017.
The values must be updated as follows:
-
Fee Remaining = $0
-
Fee Capitalized = $5
However, the values are updated as follows:
-
Fee Remaining = -$5
-
Fee Capitalized = $10
This issue is occurring because the system is not marking the Charge Capitalized flag as true for the charge created after the first backdated LPT on April 8, 2017. When another backdated payment is made , the system is recapitalizing the charges and thus calculating incorrect fee values.
-
Resolution
This issue is fixed as the internal logic has been changed such that the system is now capitalizing the charges correctly. Thus the Fees Remaining and Fee Capitalized values are getting calculated correctly.
User is unable to attach files in notes and attachment for CL Loan object (Jira ID: PDRFF-2781/PD-1713/PDRFF-2581)
Issue Description
When a user is trying to attach files in notes and attachment for CL Contract, the system is not allowing to attach the files because the extension types for some files are exceeding the 255 characters permitted in the Allow only these file types field in CL Platform settings.
Resolution
This issue is fixed now. As part of fix, the extension type value is assigned as per the Salesforce standard which is of a smaller length.
The following table explains the extension types of various files:
On File Systems |
In salesforce |
---|---|
docx |
WORD_X |
doc |
WORD |
pptx |
POWER_POINT_X |
ppt |
POWER_POINT |
xlsx |
EXCEL_X |
xls |
EXCEL |
The system is generating a null pointer exception when trying to reverse a Principal Only payment (Jira ID: PDRFF-2580/ND-7285)
Issue Description
The system is displaying a null pointer exception while reversing a Principal Only payment.
Example to understand the issue
-
Approve and disburse the Loan.
-
Make a payment of $1,000.
Since we are making a payment before the Due Date and there is no interest due, the amount satisfies only the principal.
As the principal amount changes due to the preceding payment, the amortization schedule must get restructured when the job runs next and hence the current Reschedule Status updates to Pending.
-
Create a contract with Contract Date as November 29, 2023, with the following values:
-
Interest Calculation Method = Declining Balance
-
Repayment Procedure = Equal Monthly Installments
-
Excess Threshold % for Reschedule = 0.01
-
Reschedule Option On Excess Payment = Keep Same Payment Amount
-
Pre-Bill Days = 3
-
No of Terms = 12
-
Loan Amount = $10,500
-
Add the following Flexible Repayment Plan while creating the contract:
-
Payment Plan 1:
-
Payment Type 1 = Equal Monthly Installments
-
Payment Amount 1 = $200.00
-
Number Of Payments 1 = 1
-
Payment Start Date 1 = December 29, 2023
-
-
Payment Plan 2:
-
Payment Type 2 = Equal Monthly Installments
-
Payment Amount 2 = $500.00
-
Number Of Payments 2 = 10
-
Payment Start Date 2 = January 29, 2024
-
-
-
-
Now reverse the payment made in Step 3.
The system is throwing a null pointer exception as it encounters null values in the preceding DD and ED fields of the repayment snapshot.
-
Run the Reschedule Transaction Job for the contract.
System reschedules the contract and updates the Reschedule Status to Success.
The system creates an OLT with the values for Due Day and Effective Date as null.
Resolution
This issue is fixed as the system now checks if the preceding DD and ED fields contain a null value to be able to reverse the required payment successfully.
The system is calculating the Fee Amount Paid to the investors incorrectly (Jira ID: PDRFF-2560/ND-7417)
Issue Description
The Fee Amount Paid is getting distributed among the investors as per their share. The system is considering all the investors on the loan irrespective of their status. The system must consider only the active investors while distributing.
Fees Amount Paid must be distributed based on the investor percentage on the fee as well as investor share percentage on the loan as well. Let us consider four investors in a loan. Investor 1, Investor 2, Investor 3, Investor 4 and each investor has a 25% share in the loan.
Now, if Investor 1 and Investor 2 become inactive, then the $10,000 fee generated on the LPT must be distributed among the remaining two investors active investors only. As inactive investors must not be considered for the Fee Amount Paid calculations.
Since Investor 3 and Investor 4 have equal share on the Loan, the $10,000 fees gets equally divided among them, that is, Investor 3 is charged $5000 and Investor 4 is charged $5000. Instead, if the investor share for Investor 3 was 30% and share for investor 4 was 20% then the Fee Amount Paid must be $6000 and $4000 respectively.
Resolution
The issue is fixed. The system now distributes the Fee Amount Paid correctly among the active investors considering their share in the loan.
Calculation and application of payoff fees during a payoff quote and a payoff for pre-closure using the Pay-Off Fees as the Time of Charge in the prepayment penalty fee configuration (Jira ID: PDRFF-2665/ ND-7569)
Enhancement Description
With this patch release, Q2 Loan Servicing now provides you with the ability to charge pay off fees using a separate prepayment penalty configuration while making a payoff for pre-closure or while calculating a payof fee during generation of a payoff quote for pre-closure of a loan.
Earlier, the system provided you with the ability to charge fees for both pre-payment and pre-closure (payoff) in a single configuration where Time of Charge was Prepayment Penalty.
Now, the system has the ability to charge for the pre-payment and pre-closure (payoff) using separation configurations as follows:
-
Prepayment: These can be any unscheduled principal repayments where a fee is charged using the prepayment penalty fee configuration where Time of Charge is Prepayment Penalty.
-
Payoff for pre-closure: This is a complete payoff before the maturity of the contract where a fee is charged using the prepayment penalty fee configuration where Time of Charge is Pay-Off Fees.
To enable this enhancement, you must revert the changes made in Summer'22 (3.9001) by running the following script:
Note
This migration script reverses the pick list value migration of the Time of Charge field on the Fee object from "Prepayment Penalty" back to "Pay-Off Fees." Originally, during the Summer'22 release, "Pay-Off Fees" were consolidated into "Prepayment Penalty" due to system limitations. Now, with this patch release, the system supports both fee types, necessitating the rollback of the migrated data.
To migrate:
-
Open Developer Console.
-
Go to Query Editor.
-
Copy, paste and execute the following query and make a note of the count:
SELECT count(Id) FROM loan__Fee__c WHERE loan__Time_of_charge__c = 'Prepayment Penalty'
-
Go to Debug > Open Execute Anonymous Window.
-
Copy and paste the following code:
List<loan__Fee__c> ppFeeList = [ SELECT Id, Name, loan__Time_of_charge__c, loan__Prepayment_Penalty_Type__c FROM loan__Fee__c WHERE loan__Time_of_charge__c = 'Prepayment Penalty' LIMIT 10000 ]; if (!ppFeeList.isEmpty()) { System.debug(LoggingLevel.ERROR, 'Number of Fees to be updated: ' + ppFeeList.size()); for (loan__Fee__c ppFee : ppFeeList) { ppFee.loan__Time_of_charge__c = 'Pay-Off Fees'; } Update ppFeeList; }
-
Select Execute.
-
Go to Query Editor.
-
Copy, paste, and execute the following query and make a note of the count. If the count matches that in Step 3, then that means that the migration job has run successfully.
Interest Waived is not getting updated on the Interest Component of Investment Order while waiving off the Additional Interest (Jira ID: PDRFF-2670/ND-7641)
Issue Description
When additional interest is waived, and payout job is run the system is adding the waived additional interest amount to interest paid instead of interest waived incorrectly
Example of the system behavior after the fix
-
Create a Lending Product with the following values:
-
Interest Component Name = AIC-1
-
Interest Bearing Principal = Delinquent Amount
-
Interest Rate = 10%
-
Interest Posting Frequency = Billing Frequency
-
Is Capitalization Enabled = False
-
Advance Interest = False
-
-
Set the Current System Date to March 01, 2013, and create a loan contract with the following values, and then approve and disburse the loan:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms=10
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
Interest Posting Frequency = Billing Frequency
-
Enable Interest Posting for IO=true
-
Fee Capitalization = False
-
-
Add one investor to loan account with 100% share and activate it.
-
Add Interest Component to the Investment Order with similar values as AIC on loan account.
-
Move the Current System Date to next Due Date, May 1, 2013.
The system creates regular IPT and IPT for AIC.
-
Run Investor Accrual and Interest Posting job
-
On investor side, regular IPT with Loan Amount of $83.34 and IPT for AIC with Loan Amount of $17.44 are created for May 1, 2013.
-
Waive the Additional Interest of Amount = $10.
-
Run Investor Payout job
Interest Waived remains 0 on IC of Investment Order.
Go to Interest Component on Investor side and values are correctly updated as follows:
-
Interest Waived = $10
-
Interest Posted = $7.44 (after waiver)
-
-
Reverse the waiver OLT.
-
Run Investor Payout Reversal job.
The values are correctly updated as follows:
-
Interest Posted = $17.44
-
Interest Waived = $0
-
Resolution
This issue is now fixed as the internal logic is modified such that the Interest Waived field of Investment Order AIC is updated correctly in case of an additional interest waiver.
When the Investment Orders are completely sold off, the system is not updating the Remaining Investment Amount field to zero (Jira ID: PDRFF-2463/ND-7702)
Issue Description
Currently, when all the Investment Orders are sold, the system is failing to update the Remaining Investment Amount field to zero. For instance, if there is an investment of $50,000, and all of it are being sold, the Remaining Investment Amount field must reflect as zero. Instead, the Remaining Investment Amount field is displaying $50,000.
Resolution
This issue is fixed. Now, when all of the Investment Orders are sold off the Remaining Investment Amount field is getting correctly updated to zero.
While saving a contract, system is generating a CPU time error for payment date on daylight saving day (Jira ID: PDRFF-2654/PD-1746)
Issue Description
The system is not considering the change in calculation of Timezones due to the shift in daylight saving thus generating a CPU time out error.
Example to understand the issue
-
Create business hours with Saturday and Sunday holidays and set the Time Zone to (GMT+11:00) Australian Eastern Daylight Time (Australia/Melbourne).
-
Add holidays as April 4, 2024, and April 5, 2024.
April 6, 2024 and April 7, 2024 are weekend holiday as per the 2024 calendar.
-
Go to Company Information and change the Default Time Zone (GMT+01:00) Central European Standard Time (Europe/Prague).
-
Create a contract with the following values:
-
Start Date = January 25, 2024
-
Terms = 10
-
Interest Rate = 10%
-
Contract Payment Date = April 4, 2024
The system is generating a CPU time out issue.
-
Resolution
The issue is now fixed. The system is now saving the contract without generating any errors and the Amortization Schedule is starting from the correct date, which is April 8, 2024, as per the preceding example.
Charge capitalization for the early termination fee is leading to the system calculating the Fees Remaining and the Loan Balance incorrectly (Jira ID: PDRFF-2108/ND-7589)
Issue Description
When the Fee Capitalization is set to true for the early termination fee it is leading to negative amount in Fees Remaining and is displaying an amount in Loan Balance even when the contract is closed.
Example to understand the issue
-
Create a Lending Product with the following values:
-
Fee Set = Minimum Interest Fee
-
Fee Capitalization = True
-
-
Set the Current System Date to March 01, 2013, and create a loan contract with the following values, and then approve and disburse the loan:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Frequency = Billing Frequency
-
Minimum Interest Option = Minimum Interest Amount
-
Minimum Interest Amount = $1000
-
Loan Payofff Amount=$11,000
-
-
Create an LPT of amount = $10,900
-
Move the Current System Date to next day without Batch Job.
-
Run the InterestPostingJob.
Fee Remaining= $-900
Resolution
This issue is fixed. The system is now calculating the Fee Remaining and the Loan Balance correctly. For the preceding example the values are getting calculated as follows:
-
Today’s Payoff = $100.03
-
Fee Capitalized = $100
-
Loan Balance = $100
-
Fee Remaining = $0
The system is displaying a DML Exception for a bulk reschedule reversal transaction (Jira ID: PDRFF-2926/ND-7953)
Enhancement Description
The reverseRescheduleActionOnId method is modified to incorporate the bulk record.
reverseRescheduleActionOnId
This method is used to reverse the reschedule action on the loan contract.
Method signature
Note
global virtual void reverseRescheduleActionOnId( List < Id > rescheduleTxnList){
Method parameters
Input Parameters |
Output Parameters |
|||
---|---|---|---|---|
Name |
Type |
Description |
Type |
Description |
rescheduleTxnList |
List < Id > |
List of other transaction IDs. |
void |
Usage/How to Invoke
List<Id> rescheduleTxnList= new List<Id>{<<list of rescheduled other transacitons ids>>}; loan.LoanActionFactory lAFactory = new loan.LoanActionFactory(); loan.AbstractLoanActions loanActions = lAFactory.getLoanActionsAPI(); loanActions.reverseRescheduleActionOnId(rescheduleTxnList);
The system is not allowing to edit the fields on the Repayment Transaction Reversal Detail section (Jira ID: PDRFF-1596/ND-7974)
Issue Description
When the Edit button on the Repayment Transaction Reversal Detail section is clicked, the system is displaying the following error message:
Note
Error: SObject row was retrieved via SOQL without querying the requested field: loan_Repayment_Transaction_Adjustmentc.loanLoan_Payment_Transaction_c
The issue is observed when the content is viewed in Visualforce page in lightning theme.
Resolution
The issue is fixed now, and on clicking the Edit button, the system is not displaying any error message.
On reversing an adhoc payment LPT, the system is displaying an error (Jira ID: PDRFF-2921/ND-7975)
Issue Description
The system is displaying a Null reference error when attempting to reverse an adhoc payment LPT.
Following is an example of the issue:
-
Consider a contract with a Due Date of 9 February, 2024.
-
Make three payments simultaneously on 14 February, 2024.
The first payment successfully clears the Due bill and IPT.
However, the subsequent two payments were classified as adhoc and are allocated towards the principal.
-
Reverse the two adhoc payments.
The system is displaying the following error.
Note
Rolling back the batch. Message - Attempt to de-reference a null object
Resolution
The issue is fixed. Adhoc payment LPTs can now be reversed without any error.
Issue key |
Summary |
---|---|
PDRFF-2842 |
Interest waiver should not add the Additional Interest Component |
PDRFF-2798 |
Excess Payoff LPT not created in the contract after the Payoff when there is a Negative Adj Int Cap value |
PDRFF-2708 |
Consolidated Loan balance in LTS is not updating correctly post Backdated payment over IPT and LPT |
PDRFF-2707 |
Consolidated Loan balance in LTS is not updating correctly post Backdated payment over rate change |
PDRFF-2650 |
Loan status changing to Active - Bad standing after a internal transfer transaction is reversed |
PDRFF-2583 |
Not able to close the loan with Backdated Payoff after reversing the Latest LPT |
PDRFF-2565 |
System is showing wrong Payoff Amount in the Payoff Quote |
PDRFF-2563 |
Loan is not getting closed after Payoff |
PDRFF-2546 |
Balance Issue in LTS post adding the charge after payment reversal |
PDRFF-2538 |
Fees Remaining and Fee Capitalized are updated incorrectly on Charge Unwaive action |
PDRFF-2526 |
Adjusted Interest Issue when Backdated payment amount is done prior to LPT and IPT |
PDRFF-2516 |
Adjusted Interest is showing different value in LTS of IPT and Loan Contract |
PDRFF-2499 |
Interest Adjustments and loan balances incorrect after second backdated payment |
PDRFF-2477 |
Interest Adjustment 2 cents difference in Loan Contract |
PDRFF-2473 |
Interest Adjustments and loan balances incorrect after second backdated payment |
PDRFF-2469 |
Ability to close a loan without reversing an IPT with Deposits |
PDRFF-2403 |
Backdated LPT not working Correctly if Last Transaction before the backdated LPT is Interest Posting |
PDRFF-2385 |
Aggregate query rows errors while generating POQ |
PDRFF-2362 |
Consolidated Loan Balance not updating in Correct Order When LPT is made before existing Redraw Transaction |
PDRFF-2360 |
Backdated Payment Reversal showing wrong Adjusted interest and Balance |
PDRFF-2339 |
Error while processing payment reversal - Aggregate query has too many rows for direct assignment |
PDRFF-2333 |
Fees Remaining is updated even though all Fees are "Enable Capitalization" |
PDRFF-2330 |
Ability to close a loan without reversing an IPT |
PDRFF-2329 |
Adjusted interest rounding issue |
PDRFF-2328 |
Deposit interest accrued ignored when POQ is generated |
PDRFF-2299 |
[UPGRADE]Multiple Issue after Payment reversal when Interest adjustment feature is enable |
PDRFF-2278 |
Interest posting txn not created due to some backdated actions |
PDRFF-2214 |
Error when we add a new interest rate schedule and click on Validate button during Reschedule |
PDRFF-2210 |
Unable to close the loan |
PDRFF-2157 |
Floating Rate Revision Failing With " Aggregate query has too many rows for direct assignment, use FOR loop" |
PDRFF-2156 |
Floating Rate Revision Failing With " Aggregate query has too many rows for direct assignment, use FOR loop" |
PDRFF-2150 |
Bill, IPT, Schedules are wrongly created with Principle only payment |
PDRFF-2140 |
Not able to Reverse the Loan Payment |
PDRFF-2137 |
All the paid bills marked as unpaid while doing Loan Pay-off Reversal in Winter'22 |
PDRFF-2126 |
Flexible Repayment Plan Not getting Reversed after doing the Reschedule Reversal |
PDRFF-2124 |
Rate Change Record Reversal not reflected in Transaction Summary Report |
PDRFF-2105 |
Principal Remaining is not zero when Contact has been moved to Closed - Obligations met when interest adjustment feature is enabled |
PDRFF-2098 |
Interest calculation incorrect for backdated payment |
PDRFF-2092 |
Reversing a payment is causing duplicate charge to be created when Interest Adjustment feature is enabled in Winter'22 |
PDRFF-2079 |
Unable to post a backdated payment over existing transactions |
PDRFF-2075 |
Transaction date/Adjustment amount not present on Loan adjustment transactions in LTS |
PDRFF-2072 |
LPT over Fee - Balance on 3 LTS rows below are wrong |
PDRFF-2071 |
LPT over Additional Interest. Interest Calculation is different by Adjusted Interest Non-Capitalized |
PDRFF-2070 |
LPT over Rate Change - Balance on LTS row is incorrect |
PDRFF-1987 |
Interest Only period getting increased by one term in Flexible Repayment Plan While doing Reschedule |
PDRFF-1955 |
Deposit rate not in sync with current interest rate |
PDRFF-1927 |
Month skipped in amortization schedule |
PDRFF-636 |
No confirmation message in Payoff dialogue from Loan quick actions menu |
The waived charge is getting considered incorrectly in the bill and the Transaction Amount in the LPT is getting calculated incorrectly (JIRA ID: PDRFF-1823/ND-7967)
Issue Description
When a charge is waived off, the Transaction Amount in an LPT is getting calculated incorrectly.
This is because the waived charge is getting incorrectly considered in the bill. The waived charge should not satisfy the fee against the bill when the fee is not included in the bill.
Example to understand the issue
-
Let us create a loan contract with the following details and disburse it:
-
Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
Payment Frequency = Monthly
-
Add Fee Amount to bill = True
-
IPT Frequency = Monthly
-
Contract Date = March, 2013
-
Late Fee Calculation method = Fixed
-
Late Fees = $200
-
Include in Dues = True
-
-
Let us add an APS on the loan account with the following parameters:
-
Amount Type = Oldest unpaid bill amount
-
Debit Date = April 1, 2013
-
Frequency = Monthly
-
Payment Mode = ACH
-
-
Let us go to April 1, 2013.
The bill is generated, and a payment is made.
-
Let us now reverse the payment.
-
Let us add the charge.
The charge of amount $200 is created.
-
Now let us perform a 100% fee waiver for the $200 with the transaction date of April 1, 2013.
The values must be updated as follows:
-
The charge must be paid and waived.
-
The bill must be unpaid and should not have any amount in the paid amount since the charge is not included in the bill.
-
The charge payment record must not be included in the bill.
However, the charge is getting incorrectly considered in the bill amount and the LPT amount is getting incorrectly calculated.
-
Resolution
This issue is fixed, the charge is not getting considered in the bill and the Transaction Amount is getting calculated correctly.
The system is displaying an error when the user is trying to reverse an LPT for a parent record with more than 200 child records assigned directly to a list (Jira ID: PDRFF-3065/ND-7960)
Issue Description
The system is displaying the following errors when the user is trying to reverse an LPT for a parent record with more than 200 child records assigned directly to a list:
Note
-
Error processing payment reversal for contract - LAI-00009787 - Aggregate query has too many rows for direct assignment, use FOR loop
-
CL010100: Unexpected DML Exception Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Error processing payment reversal for contract - LAI-00009787 - Aggregate query has too many rows for direct assignment, use FOR loop: [] at line 20
Resolution
The issue is now fixed by modifying the logic and the system is not displaying an error when the user is trying to reverse an LPT for a parent record with more than 200 child records assigned directly to a list.
The bill is getting satisfied with a lesser payment amount when bill is paid during pre-bill days (Jira ID: PDRFF-1914/ND-7958)
Issue Description
In a loan with fee included, if a bill is paid during the pre-bill days, the bill is getting satisfied with a lesser payment amount.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Amount = $10,000
-
Rate =10%
-
Terms = 10
-
Pre Bill-Days = 5
-
Delinquency Grace Days = 15
-
Time Calculating Method = Month and Days
-
Contract Date = March 1, 2013
-
-
Let us add a fee component with the following parameters:
-
Fee Name = NSF Fee
-
Fee Calculation Method = Fixed
-
Fee Amount = $200
-
Include in Dues = True
-
Include in Schedules = False
-
-
Let us add another fee component with the following parameters:
-
Fee Name = Late Fee
-
Fee Calculation Method = Fixed
-
Fee Amount = $100
-
Include in Dues = True
-
Include in Schedules = False
-
-
Let us go to April 1, 2013.
Bill-1 is generated.
-
Let us create an LPT-1 of amount $1046.40.
-
Let us go to April 6, 2013, and reverse the LPT-1.
-
Let us add the NSF charge on the loan.
-
Now let us move the system date to April 17, 2013, and create an LPT-2 of amount $1046.40.
The values are updated as follows:
-
This amount should pay both the late fee and the NSF fee.
-
This amount satisfies Bill-1 partially however, the total bill remains unsatisfied.
-
-
Let us reverse the LPT-2 and move the system date to May 1, 2013.
Bill-2 will be generated of amount $1346.40 (this includes fees of $300).
-
Now let us make an LPT-3 of amount $1046.40 .
The values must be updated as follows:
-
The system must pay $300 to the NSF and Late fee.
-
The remaining amount goes toward the interest and Bill- 1 is marked as satisfied.
However, we notice that the LPT-3 satisfies the fee and Bill-1 completely, but LPT-2 is not satisfying Bill-1 . This is an inconsistent behavior.
-
Resolution
This issue is fixed now, and the bill is getting satisfied with the correct amount even when the payment is done before or after the bill due date.
The ExcessForAmzBasedLoansJob is considering the records of loan contracts with Closed - Written off status and is displaying an error for these contracts (Jira ID: PDRFF-2939/ND-7956)
Fixed Version
This issue has been fixed in the following version:
-
Q2 Loan Servicing Pheonix (2.7016.114)
Issue Description
ExcessForAmzBasedLoans job is failing and displaying the following error message, while creating a payments for Closed-Written-off contracts:
Note
Error Message:
This is a written off loan. You will have to select the Write Off Recovery Payment option
Resolution
The issue is now fixed and the loan contracts with the Closed -Written -off or Closed- Obligation Met statuses are not being considered for the execution of the ExcessForAmzBasedLoans job.
Note
If there is an excess amount present on the loan contract, the user must now manually create an LPT to apply the excess amount on the loan contract only then the contract status can be updated as Closed -Written off.
Paid to Investor flag is getting set to true incorrectly when an LPT is created (Jira ID: PDRFF-1851/ND-7952)
Issue Description
When LPTs are created for investor loan accounts, the Paid to Investor flag is being set to true incorrectly even though the LPT is not creating ILTID.
Example to understand the issue
-
Let us create an FAMZ contract with the following details and disburse it:
-
Loan Amount = $100,000
-
Pre Bill-Days = 10
-
Interest Only Period = 4
-
Contract Start Date = January 3, 2021
-
Payment Frequency = Monthly
-
IPT = True
-
IPT Frequency = Monthly
-
Term = 6 months
-
Rate = 5%
-
Enable IPT for IO = True
-
-
Let us create an Investment Order on the existing contract with the following details and activate it.
-
Investment Amount = $100,000
-
Certificate Rate = 5%
-
Share = 100%
-
Contract Date = January 3, 2021
-
-
Let us go to February 3, 2021, and run the Loan Payment Transaction Creation Dynamic Job.
The LPT is created.
-
Let us clear the LPT with the transaction date as February 3, 2021, which is the billing due date.
The bill gets satisfied.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job and Investor Payout Job.
The Investor payout amount is updated accordingly.
However, the Paid to Investor flag is set to true incorrectly even though the amount has not been paid to the investor.
Resolution
The issue is fixed now, by adding a condition that ensures that the Paid to Investor flag is not set to true if the amount is not paid to the investor.
The system is not displaying the correct interest in the Interest field, during interest waive off using the percentage field on the Waiver Action page (Jira ID: PDRFF-2813/ND-7937)
Issue Description
During the interest waive off, on selecting 100% as waive percentage, the system is incorrectly displaying waive amount as the total regular interest posting amount + total additional interest posting amount, instead of displaying only the total regular interest posting amount.
After completion of the waiver action activity using the percentage field on the Waiver Action page, the regular interest is getting waived off, but the system is still displaying the additional interest as the Excess on the loan.
Example to understand the issue
-
Create a loan contract on March 01, 2013, with the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Payment Frequency = Monthly
-
Interest Posting Frequency = Monthly
-
Time Counting Method = Month and Days
-
-
Add the following Additional Interest Component (AIC) details to the contract then approve and disburse the loan:
-
Interest Type = Line Interest
-
Interest Bearing Principal = Credit Limit
-
Time Counting Method = Month and Days
-
Interest Posting Frequency = Billing Frequency
-
Interest Rate = 5.0%
-
-
Move the current system date to April 10, 2013.
-
On the AIC, the values of the interest posted is $41.67, but on the Loan Details page interest posted is $83.33.
-
Go to Quick Menu > Waiver Action > Waiver Type select Interest Waiver
-
Waive Percentage = 100.00%
-
Transaction Date = April 10, 2013.
The Waiver Amount is auto populated.
-
-
System incorrectly displays Waive Amount = $125 ($83.33 (Loan Interest Posted) + $41.67 (AIC's Interest Posted))
On Interest Waiver page, the system must display only the Waive Amount as $83.33.
Resolution
This issue is now fixed, and the system is displaying only the total regular interest posting amount, after completion of the waiver action using the percentage field on the Waiver Action page.
The system is creating Excess LPTs even for the loans with Closed - Obligation met status Closed -Obligation met status (Jira ID: PDRFF-2784/ND-7936)
Issue Description
As the Excess for Amortization Based Loans job is not checking the status of contract, the system is creating Excess LPT every day after a loan payoff. Ideally, the system must not create excess LPTs for a closed contract.
Resolution
The issue is now fixed, and the system does not create Excess LPTs after the Loan is Closed -Obligation met status.
The system is not displaying the last zero after the decimal point (Jira ID: PDRFF-2432/ND-7647)
Issue Description
After an upgrade, the system is displaying the value in a different format than usual. Normally, the system displays two digits after the decimal point, for example, $77.10 or $77.00. However, it is currently only displaying one digit after the decimal point $77.1 or $77 and is ignoring the last zeros after the decimal point.
Resolution
This issue is now fixed. The system is now displaying the zeros after a decimal point.
The system is displaying an error when a loan is rescheduled (Jira ID: PDRFF-3058/ND-7874)
Issue Description
During a reschedule, the system is displaying the following error message:
Note
Attempt to de-reference a null object
Resolution
This issue is now fixed, and user can reschedule without any issue.
The system is not validating the reversal of a waived paid charge (Jira ID: PDRFF-3029/ND-7865)
Issue Description
When a paid charge is waived and then the reversal of paid charge is tried, the charge is not getting marked as unwaived and the system is not displaying a message.
When a reversal of a waived paid charge is tried, the system must not allow it and must display a validation message.
Resolution
This issue is fixed, and the system now displays the following message when you try to reverse the waiver of a paid charge:
"Paid charge waiver reversal is not allowed."
The system is displaying an error message on the Interest Rate Schedule page even if the Start Date is the same as the Disbursal Date (Jira ID: PDRFF-2875/ND-7588)
Issue Description
Previously, even when the Start Date on the Interest Rate Schedule matched the Disbursal Date, the system would display an error message on the Interest Rate Schedule page. This is because the system was incorrectly validating the Interest Rate Schedule’s Start Date by comparing it to the Expected Disbursal Date rather than the Accrual Start Date resulting in the following error message:
Note
Rate Schedule should be less than or equal to loan disbursal date.
Note
Because a rate schedule is only required once a loan is disbursed and the Accrual Start Date is updated, and accrual is only required from this Accrual Start Date onwards, the system must compare the Rate Schedule’s start date to this Accrual Start Date rather than the Expected Disbursal Date.
Resolution
This issue is now fixed. The Start Date of the rate schedule is now validated by comparing it to the Accrual Start Date rather than the Expected Disbursal Date. Thus the error message is only displayed if the Interest Rate Schedule Start Date is greater than or equal to the Accrual Start Date.
Following are the various scenarios to understand the system behavior before and after the fix:
Sr. no |
Expected Disbursal Date |
Accrual Start Date |
Rate Schedule Start Date |
Before the fix |
After the fix |
---|---|---|---|---|---|
1 |
March 01, 2013 |
March 03, 2013 |
March 01, 2013 |
The system displays no error |
The system displays no error |
2 |
March 01, 2013 |
March 03, 2013 |
March 03, 2013 |
The system displays an error |
The system displays no error |
3 |
March 01, 2013 |
March 03, 2013 |
March 05, 2013 |
The system displays an error |
The system displays an error |
With Enable Adjustment Entry set to true, on an LPT reversal, the system is updating the Interest Accrued and the Excess incorrectly (Jira ID: PDRFF-2770/ND-7573)
Issue Description
With Enable Adjustment Entry flag set to true, on an LPT reversal, the system is updating the Interest Accrued and the Excess incorrectly.
Example to understand the behavior after the fix
-
Create a loan contract with the following values on September 1, 2015:
-
Enable Adjustment Entry = True
-
Loan Amount = $10,000
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Quarterly
-
Interest Posting Transaction = Monthly
-
Rate = 10%
-
Payment Application Mode = Current Dues
-
Accrual Start Basis = Contract Date
-
Payment Frequency = Quarterly
-
Interest Type = Floating
Interest Rates
Start Date
End Date
5
September 01, 2015
November 30, 2015
5.5
January 12, 2015
February 29, 2016
6
March 01, 2016
May 31, 2016
6.5
June 06, 2016
NULL
-
-
Approve and disburse the loan.
-
Move the Current System Date to October 1, 2015.
-
Create an LPT-1 of $30.
Select the Spread Manually check box and add $30 towards Interest such that the amount paid towards Principal and Fee is $0.
-
Move the Current System Date to November 01, 2015.
-
Create LPT-2 of $100.
Select the Spread Manually check box and add $100 towards Interest such that the amount paid towards Principal and Fee is $0.
-
Reverse LPT-1.
The values for Interest Accrued and Excess are incorrect.
The values must be as follows:
-
Interest Accrued = $0.00
-
Interest Remaining = $30.00
-
Interest Paid = $54.72
-
Todays Payoff = $9,984.72
-
Principal Advance Remaining = $10,000
-
Loan Principal/Advance Paid = $0
-
Last Accrual Date = November 01, 2015
-
Excess = $45.28
-
Resolution
This issue is now fixed, and the logic is modified to support loans with Enable Adjustment Entry set to true for LPT.
If a regular LPT is reversed, Excess decreases. Conversely, if an Excess Type LPT or Refund LPT is reversed with Enable Adjustment Entry flag set to true, Excess increases because these LPTs are sources of input for Excess. In all other scenarios, in accordance with the original logic, the system will not update the Excess for an LPT reversal.
Issue related to waiver and payment reversal (Jira ID: PDRFF-2729/ND-7453)
Issue Description
Following issues related to waiver and payment reversal are observed:
-
After reversing payment transaction of charges, the system is creating new charges instead of making existing charges unpaid.
-
Upon selecting the Waiver action and then selecting Paid Charge Waiver as the Waiver Type in the Waiver page, the system displays all the charges, charges that are paid and charges for which the payment was reversed. To waive the correct charge, the user must remember the charge number; otherwise, the process may fail.
-
Upon selecting the Waiver action and then selecting Paid Charge Waiver as the Waiver Type in the Waiver page, if the Adjustment Type is selected as Excess for such a waiver, then the previous excess balance is getting replaced with the amount associated with the waived charge.
Example to understand this issue
-
Create a loan contract with the following details on March 1, 2013:
Parameter
Value
Loan Amount
$10,000
Terms
10
Time Counting Method
Month and Days
Is Interest Posting
true
Interest Posting Frequency
Monthly
Payment Frequency
Monthly
Late Fee Amount
100 (Fixed)
Fee Include In dues
false
Fee Include In Schedules
false
-
Disburse this loan.
-
Create a charge of amount $500.
-
Move Current System Date to March 10, 2013.
-
Create an LPT with Spread Manually = true where:
-
-
Principal = 0
-
Interest = 0
-
Fee = $600
-
Transaction Date = March 10, 2013
The system pays $500 toward the Fee and $100 goes to the Excess field.
-
-
Go to Loan Actions > Waiver Action and set the following values:
-
Waiver Type = Paid Charge Waiver
-
Adjustment Type = Excess
-
-
Select charge 1 and then select Save.
The issue is that after saving, instead of adding amount to the already present amount in Excess, the system overwrites the value of Excess and the value of Excess gets updated to $500.
The expected result must be as follows:
-
Excess = $600.
-
LPT must be created with Payment Mode = Excess, Transaction Amount = $500, Excess = $500
-
Fee Paid = $500, Total Amount Paid = $500
-
-
Resolution
These issues are fixed, and the system is working as expected.
The system is not considering the negative Interest Remaining while performing the backdated disbursement with Enable Adjustment Entry set to true (Jira ID: PDRFF-2768/ND-7635)
Issue Description
If the Interest Remaining is negative before the user does a backdated disbursement, the system ignores the negative Interest Remaining amount and treats it as zero when performing the backdated disbursement.
Example to understand the behavior after the fix
-
Create a loan contract with the following values on September 1, 2015:
-
Enable Adjustment Entry = true
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
Payment Frequency = Quarterly
-
Time Counting Method = Actual/360
-
Accrual Start Basis = Contract Date
-
Interest Rate Change Method = Change Payment Amount
-
Interest Type = Floating
-
Floating Rate Revision Frequency = Daily
-
Interest Posting = False
-
Funding in Tranches = True
-
Payment Application Mode = Current Dues
-
Interest Type = Floating
Interest Rates
Start Date
End Date
5
September 01, 2015
November 30, 2015
5.5
January 12, 2015
February 29, 2016
6
March 01, 2016
May 31, 2016
6.5
June 06, 2016
NULL
-
Payment Start Date = December 01, 2015
-
-
Approve the loan and disburse only $5,000.
-
Move the Current System Date to December 01, 2015.
Bill-1 is created.
Floating Rate changes from 5% to 5.5% automatically.
-
Move the Current System Date to January 01, 2016.
-
Create an LPT-1 of $86.87.
The complete amount is used to satisfy the Interest component only.
-
Create a backdated LPT of $1,000 and Transaction Date of December 20, 2015.
While creating the payment, select the Spread Manually checkbox and add $1000 toward Principal only.
This creates negative Interest Remaining on the contract.
-
Move the Current System Date to February 01, 2016.
-
Create a backdated loan disbursal of $5000 with a Transaction Date of January 15, 2016.
Before the fix, when performing a backdated disbursal, the system is not considering the negative value of Interest Remaining and is updating the Interest Remaining to zero incorrectly.
After the fix, the values are updated correctly as follows:
-
Interest Accrued = $23.38
-
Interest Remaining = $6.73
-
Today's Payoff = $9,030.11
-
Principal Advance Remaining = $9,000.00
-
Last Accrual Date = January 15, 2016
-
Resolution
The issue is now fixed by modifying the Enable Adjustment Entry logic to consider the negative Interest Remaining while performing the backdated disbursement.
Issue with the reversal of principal payments when Enable Adjustment Entry flag is set to true (Jira ID: PDRFF-2957/ND-7573)
Issue Description
For a loan contract where Enable Adjustment Entry flag is set to true, upon creating the following transactions in the following order on April 12, 2023, for a Transaction Date of April 10, 2023:
-
Backdated fee only payment
-
Backdated interest only payment
-
Backdated principal payment
and then reversing them in the following order on the next day, April 13, 2023:
-
Backdated fee payment reversal
-
Backdated interest payment reversal
-
Backdated principal payment reversal
it was observed that until the reversal of the backdated interest, the total interest due (balance interest) on the loan was correct. However, after reversing backdated principal payment, total interest due is incorrect.
This is because, after reversing the backdated principal payment, the Excess field is displaying an incorrect value resulting in the total payoff amount due on the contract getting reduced by the excess amount.
Resolution
This issue is fixed, and the system is working as expected when a principal payment is reversed in a loan where Enable Adjustment Entry flag is set to true.
Automatic interest adjustment (adjustment entry) for backdated rate change (Jira ID: PDRFF-2575/ND-7711)
Enhancement Description
Earlier, the system supported automatic interest adjustment for backdated transactions such as backdated payments, backdated payment reversals, and backdated interest waivers.
As part of this patch, the system supports automatic interest adjustment for backdated rate change as well.
This means that you can now perform a backdated rate change before an LAD.
This enhancement can be availed by making a backdated rate change via the RateChange page that can be accessed by going to Loan Quick Menu > Loan Actions > Rate Change.
If a contract has a floating rate attached to it, and when the system encounters the date of floating rate revision, FloatingRateInterestRevisionJob job runs automatically. If this job fails dues to any reason, then the floating rate revision does not take place. In such scenarios, on the next day, when this job runs as part of the SOD, the floating rate gets changed using automatic interest adjustment (adjustment entry).
(Note: When there is a floating rate in the contract, then the interest rate changed using the UI is not honored. To change the floating rate, you must add it in the floating rate schedule for the required date.)
Exception to this enhancement
This enhancement does not apply to a backdated rate change that is before an existing backdated rate change that has occurred due to the any of the following events that changed the LAD:
-
A rate change via the RateChange page
-
A rescheduling via the Rescheduling a Loan page
-
Running the FloatingRateInterestRevisionJob
-
Running the FloatingRateLoanResetJob
-
Running the ChangeInterestRateJob
For example, if today is the 22nd of June and you have made a payment today, which changes the LAD to today. Now if you make a backdated rate change for the 15th of June (backdated rate change means rate change before LAD), you cannot make another backdated rate change before the 15th; however, you can make a backdated rate change on the 16th or 17th. In this example, the system uses the prior rate until the 15th, after which it switches to the new rate. Also, the system recalculates the rate from the 15th, but the new schedules are generated as of today which is the LAD.
Note
A rate change in the system triggers a rescheduling of the loan only if the Interest Rate Change Method field of the loan contract is selected as one of the following:
-
Change Payment Amount
-
Keep Same Payment Amount
Automatic interest adjustment (adjustment entry) for backdated rate change reversal (Jira ID: PDRFF-3019/ND-7834)
Enhancement Description
Earlier, the system supported automatic interest adjustment for backdated transactions such as backdated payments, backdated payment reversals, and backdated interest waivers.
As part of this patch, the system supports automatic interest adjustment for backdated rate change reversals as well, as long as the reversal occurs as the final LAD event on the loan. However, if you want to reverse a rate change before any other LAD event on the loan, then you must do so by providing the previous interest rate on the intended back date.
Note
A rate change in the system triggers a rescheduling of the loan if the Interest Rate Change Method field of the loan contract is selected as one of the following:
-
Change Payment Amount
-
Keep Same Payment Amount
Automatic interest adjustment (adjustment entry) for backdated disbursement and backdated principal adjustment (Jira ID: PDRFF-2602/ND-7750)
Enhancement Description
Earlier, the system supported automatic interest adjustment (Adjustment Entry) for backdated transactions such as backdated payments, backdated payment reversals, and backdated interest waivers.
As part of this patch release, the system supports the automatic interest adjustment for backdated disbursements and backdated principal adjustments as well.
This means that you can now do a backdated disbursement or backdated principal adjustment before an LAD.
This enhancement can be availed by making a backdated disbursement or a backdated principal adjustment via the UI.
Upgrade step
While upgrading to December 2023 release from an older release, to use this enhancement, ensure that you disable the following Validation Rules for the Loan Disbursal Transaction object:
-
First_Payment_Date_Check
-
FiT_Last_Billing_Date_Check
-
FiT_Last_Disbursal_Date_Check
-
FiT_Last_Payment_Date_Check
For the detailed upgrade steps on how to disable these rules, contact our upgrade team.
Automatic interest adjustment (adjustment entry) for backdated disbursement reversal (Jira ID: PDRFF-3016/ND-7855)
Enhancement Description
Earlier, the system supported automatic interest adjustment (Adjustment Entry) for backdated transactions such as backdated payments, backdated payment reversals, and backdated interest waivers.
As part of this patch release, the system supports the automatic interest adjustment for backdated disbursement reversals as well.
What this means is that, earlier, before this enhancement, you could reverse the disbursal transaction only if the disbursal was the final LAD event in the contract. The system did not allow you to reverse a disbursal transaction that was done before any other LAD event. As part of this enhancement, the system allows you to reverse the disbursal transaction that occurred before any LAD event except the first disbursal done on the loan. You can reverse the first disbursal on the loan only if there is no other LAD event on the loan. You cannot reverse a disbursal if the Principal Remaining on the loan is smaller than the disbursal transaction the user wants to reverse. After a disbursement reversal, the system archives all the existing repayment schedules and generates a new one. Reversal of Principal Adjustment Add also behaves in the same way as disbursal reversal.
The system is displaying an error while generating a future dated payoff quote (Jira ID: PDRFF-2830/ND-7560)
Issue Description
The system is displaying the following error while generating a future dated payoff quote:
Note
Argument cannot be null.
Error is in expression '{!actionTo}' in component <apex:commandButton> in component loan:busybutton
Error is in expression '{!preview}' in component <apex:commandButton> in page loan:payoffquotenew: Class.loan.PayoffQuoteViewController.preview: line 122, column 1
An unexpected error has occurred. Your solution provider has been notified. (loan)
Example to understand the issue
-
Create a contract in Active - Good Standing status.
-
Go to Payoff Quotes > select New Payoff Quote.
-
Current System Date is the same as the Current Calendar Date and for Payoff Date select few days in future, for example, April 30, 2024, (Calendar Date in future).
-
Select Preview or Generate Quote.
The system is displaying the following error:
Note
Argument cannot be null.
Error is in expression '{!actionTo}' in component <apex:commandButton> in component loan:busybutton
Error is in expression '{!preview}' in component <apex:commandButton> in page loan:payoffquotenew: Class.loan.PayoffQuoteViewController.preview: line 122, column 1
An unexpected error has occurred. Your solution provider has been notified. (loan)
Resolution
The issue is now fixed and the system is not displaying any error while generating a future dated payoff quote.
Added Loan Amount Adjustment API (Jira ID: PDRFF-2982/ND-7707)
Enhancement Description
A new method called the adjustLoanAmount is added to AbstractLoanAction class.
adjustLoanAmount
This method is used for the for the adjustment of the loan amount.
Method signature
Note
global virtual Loan_Account__c adjustLoanAmount(Id loanId, Decimal loanAdjAmount, Date transactionDate, Date drawPeriodEndDate, String reference)
Method parameters
Input Parameters |
Output Parameters |
|||
---|---|---|---|---|
Name |
Type |
Description |
Type |
Description |
loanIds |
ID |
IDs of the loan or contract. |
void |
|
transactionDate |
Date |
This field is used to specify the date on which the transaction happens. |
||
loanAdjAmount |
Decimal |
This field indicates the total transaction amount. |
||
drawPeriodEndDate |
Date |
This field represents the draw period end date for an FIT loan. |
||
reference |
String |
Reference for transaction |
Usage/How to Invoke
loan.LoanActionFactory lAFactory = new loan.LoanActionFactory();
loan.AbstractLoanActions abstractLoanActions = lAFactory.getLoanActionsAPI();
labstractLoanActions.adjustLoanAmount(Id loanId,
Decimal loanAdjAmount,
Date transactionDate,
Date drawPeriodEndDate,
String reference)
On performing a backdated LPT reversal with interest posting not enabled, the system is not updating the Consolidated Loan Balance correctly (Jira ID: ND-7558)
Issue Description
On performing a payment reversal or a backdated LPT, the system is incorrectly updating the Consolidated Loan Balance incorrectly in the Loan Transaction Statement related to the payment.
Note
Consolidated Loan Balance is the same as the Loan Balance unless the loan contract has a deposit. When a contract has a Deposit account the Consolidated Loan Balance is the summation of the Loan Balance amount and Deposit amount.
Despite the interest posting being not enabled, which must only deduct the Principal portion upon payment, the system is incorrectly deducting the entire LPT amount from the previous loan balance and hence calculating incorrect new Consolidated Loan Balance.
Resolution
The issue is fixed. The system is now updating the Consolidated Loan Balance correctly on performing a backdated LPT reversal with interest posting not enabled.
With Adjustment Entry enabled, on reversing the Principal only LPT after reversing any other LPT, the system is calculating the Interest Remaining and the Payoff incorrectly (Jira ID: ND-7628)
Issue Description
With Adjustment Entry enabled, on reversing the Principal only LPT along with other LPT reversal, the system is updating the Loan Balance but is not calculating Interest Remaining based on the new Loan Balance thus calculating the Interest Remaining and payoff balance incorrectly.
Example to understand the behavior after the fix
-
Create a loan contract with the following values on March 01, 2013:
-
Adjustment Entry = True
-
Payment Frequency = Monthly
-
Is IPT Posting = False
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
Interest Calculation Method = Declining Balance
-
Time Counting Method = Month And Days
-
Payment Application Mode = Future Dues
-
Payment Frequency = Monthly Payment Application Order
-
Payment Start Date = April 01, 2013
-
Expected Disbursal Date = March 01, 2013
-
Create Periodic Fees in a Fee set with following values:
-
Fee Calculation Method = Fixed Amount 10
-
Enable Fee Capitalization = False
-
Include In Dues = True
-
Include In Schedules = False
-
-
-
-
-
Periodic Charge Start Basis = First Payment Date
-
Periodic Fee Amount Type = Per Period Amount
-
-
-
-
Create a Maintenance Fees in a Fee set with following values:
-
Fee Calculation Method = Fixed Amount 100
-
Enable Fee Capitalization = False
-
Include In Dues = True
-
Include In Schedules = False
-
Add Fee Amount To Bill = True
-
-
Add Fee Amount To Bill = True
-
-
Approve and disburse the loan.
-
Move the Current System Date to April 01, 2013.
Bill-1 and charge-1 are created.
-
Create an LPT-1 of $50.
Select the Spread Manually check box and add $50 towards Interest such that the amount paid towards Principal and Fee is $0.
-
Move the Current System Date to May 01, 2013.
Bill-2, charge-2 are created.
-
Create LPT-2 of $1000.
Select the Spread Manually check box and add $1000 towards Principal such that the amount paid towards Interest and Fee is $0.
-
Move the Current System Date to June 01, 2013.
Bill-3, charge-3 are created.
-
Create LPT-3 of $30.
Select the Spread Manually check box and add $30 towards Fee such that the amount paid towards Interest and Principal is $0.
-
Scenario 1: After reversing LPT-3, reverse LPT-2.
The values must be updated as follows:
-
Interest Remaining: $200
-
Today's Payoff: $10,230
-
-
Scenario 2: First reverse LPT-3, then LPT-1, finally reverse LPT-2.
The values must be updated as follows (These values were previously updated incorrectly by the system):
-
Interest Remaining: $250
-
Today's Payoff: $10,280
-
Resolution
The issue is now fixed. Now, on reversing the Principal only LPT after reversing any other LPT, the system is calculating the Interest Remaining and the Payoff Amount correctly.
The system is not considering the negative Interest Remaining while performing the backdated disbursement with Adjustment Entry enabled (Jira ID: PDRFF-2768/ND-7635)
Issue Description
If the Interest Remaining is negative before the user does a backdated disbursement, the system ignores the negative Interest Remaining amount and treats it as zero when performing the backdated disbursement.
Example to understand the behavior after the fix
-
Create a loan contract with the following values on September 1, 2015:
-
Adjustment Entry = True
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
Payment Frequency = Quarterly
-
Time Counting Method = Actual/360
-
Accrual Start Basis = Contract Date
-
Interest Rate Change Method = Change Payment Amount
-
Interest Type = Floating
-
Floating Rate Revision Frequency = Daily
-
Adjustment Entry = True
-
Interest Posting = False
-
Funding in Tranches = True
-
Payment Application Mode = Current Dues
-
Interest Type = Floating
Interest Rates
Start Date
End Date
5
September 01, 2015
November 30, 2015
5.5
January 12, 2015
February 29, 2016
6
March 01, 2016
May 31, 2016
6.5
June 06, 2016
NULL
-
Payment Start Date = December 01, 2015
-
-
Approve the loan and disburse only $5,000.
-
Move the Current System Date to December 01, 2015.
Bill-1 is created.
Floating Rate changes from 5% to 5.5% automatically.
-
Move the Current System Date to January 01, 2016.
-
Create an LPT-1 of $86.87.
The complete amount is used to satisfy the Interest component only.
-
Create a Backdated LPT of $1,000 and Transaction Date of December 20, 2015.
Select the Spread Manually check box and add $1000 towards Principal only.
This will create negative Interest Remaining on the contract.
-
Move the Current System Date to February 01, 2016.
-
Create backdated loan disbursal of $5000 with a Transaction Date of January 15, 2016.
Before the fix, when performing a backdated disbursal, the system is not considering the negative value of Interest Remaining and is updating the Interest Remaining to zero incorrectly.
The values are updated correctly as follows:
-
Interest Accrued = $23.38
-
Interest Remaining = $6.73
-
Today's Payoff = $9,030.11
-
Principal Advance Remaining = $9,000.00
-
Last Accrual Date = January 15, 2016
-
Resolution
The issue is now fixed by modifying the Adjustment Entry logic to consider the negative Interest Remaining while performing the backdated disbursement.
The system is displaying an error message on the Interest Rate Schedule page even if the Start Date is the same as the Disbursal Date (Jira ID: PDRFF-2875/ND-7588)
Issue Description
Even when the Start Date on the Interest Rate Schedule matches the Disbursal Date, the system is still displaying an error message on the Interest Rate Schedule page. This is because the system is incorrectly considering the Interest Rate Schedule’s Start Date as the Expected Disbursal Date and not as the Accrual Start Date and thus prompting the following error message.
Note
Rate Schedule should be less than or equal to loan disbursal date.
Resolution
This issue is now fixed. The system now considers the Accrual Start Date as the Start Date for the Interest Rate Schedule and not the Expected Disbursal Date. Thus, the error message is only displayed if the Interest Rate Schedule is greater than or equal to the Accrual Start Date.
Following are the various scenarios to understand the system behavior:
Sr. no |
Expected Disbursal Date |
Accrual Start Date |
Rate Schedule / Start Date |
Before the fix |
After the fix |
1 |
March 01, 2013 |
March 03, 2013 |
March 01, 2013 |
The system displays no error |
The system displays no error |
2 |
March 01, 2013 |
March 03, 2013 |
March 03, 2013 |
The system displays an error |
The system displays no error |
3 |
March 01, 2013 |
March 03, 2013 |
March 05, 2013 |
The system displays an error |
The system displays an error |
With Adjustment entry enabled, on an LPT reversal, the system is updating the Interest Accrued and the Excess incorrectly (Jira ID: PDRFF-2770/ND-7573)
Issue Description
With Adjustment entry enabled, on an LPT reversal, the system is updating the Interest Accrued and the Excess incorrectly.
Example to understand the behavior after the fix
-
Create a loan contract with the following values on September 1, 2015:
-
Adjustment Entry = True
-
Loan Amount = $10,000
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Quarterly
-
Interest Posting Transaction = Monthly
-
Rate = 10%
-
Payment Application Mode = Current Dues
-
Accrual Start Basis = Contract Date
-
Payment Frequency = Quarterly
-
Interest Type = Floating
Interest Rates
Start Date
End Date
5
September 01, 2015
November 30, 2015
5.5
January 12, 2015
February 29, 2016
6
March 01, 2016
May 31, 2016
6.5
June 06, 2016
NULL
-
-
Approve and disburse the loan.
-
Move the Current System Date to October 1, 2015.
-
Create an LPT-1 of $30.
Select the Spread Manually check box and add $30 towards Interest such that the amount paid towards Principal and Fee is $0.
-
Move the Current System Date to November 01, 2015.
-
Create LPT-2 of $100.
Select the Spread Manually check box and add $100 towards Interest such that the amount paid towards Principal and Fee is $0.
-
Reverse LPT-1.
The values must be as follows:
-
Interest Accrued = $0.00
-
Interest Remaining = $30.00
-
Interest Paid = $54.72
-
Today's Payoff = $9,984.72
-
Principal Advance Remaining = $10,000
-
Loan Principal/Advance Paid = $0
-
Last Accrual Date = November 01, 2015
-
Loan Excess = $45.28
-
Resolution
This issue is now fixed, and the logic is modified to support the Adjustment entry feature for LPT. If a regular LPT is reversed, Excess decreases. Conversely, if an Excess Type LPT or Refund LPT is reversed with Adjustment Entry enabled, Excess increases because these LPTs are sources of input for Excess. In all other scenarios, in accordance with the original logic, the system will not update the Excess for an LPT reversal.
The Investment Order is not getting paid out and interest is not getting posted for the sold IO when the Investor Payout Job is run (Jira ID: PDRFF-2178/ND-7396)
Issue Description
After an Investment Order is sold, when the Investor Payout Job is run, interest is not getting posted for the sold IO and Investment Order is not getting paid out.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $100,000
-
Interest Rate = 10%
-
Term = 6
-
Interest Only Period = 4
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Contract Start Date = March 1, 2013
-
Interest Posting on Investment Order = True
-
Payment Frequency = Monthly
-
Pre Bill days=10
-
Sample fee set attached
-
-
Let us add two investor accounts, Investor-1 and Investor-2, without any priority, and create an Investment Order on the existing contract with the following details and activate it:
-
Investment Amount = $100,000
-
Share = 100%
-
Certificate Rate = 10%
-
-
Let us go to April 1, 2013.
Bill-1 gets generated.
-
Let us create an LPT-1 of amount $833.33 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor payout Job.
-
Let us go to April 20, 2013.
Interest Accrued = $527.78.
-
Run the IO Interest Accrual Job and IO Interest Posting Job.
-
Let us now sell the entire share of Investor-1 to Investor-2 with Transfer Income flag set to false and Add Income in Buying Price flag set to false.
After being sold Investment Order-1 must have the following values: Status = Sold, Enabled=False, Income to Be Collected=True, Last Interest Accrual Date = April 20, 2013, End Date= April 20, 2013, Accrued Interest = 0.00, Next Investor Interest Posting Date = December 31, 3000.
Whatever was Accrued Interest till selling date, that must get posted. Hence, ILTID record must be created for Interest Posting Transaction for amount = $527.78, Transaction Date = April 20, 2013.
The Investment Order-1 gets marked sold and becomes inactive.
Investment Order-2 (newly created) must have a Start Date = April 20, 2013, and Last Interest Accrual Date = April 20, 2013.
-
Let us go to May 1, 2013.
Bill-2 gets generated.
-
Let us create an LPT-2 of amount $833.33 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor payout Job.
The values must be updated as follows:
-
On running IO Interest Accrual Job: No accural must happen on Investment Order-1. On Investment Order-2, Accrued Interest must be = $305.56.
-
On running IO Interest Posting Job: IPT must be created on Investment Order-2 but no IPT records must be created for Investment Order-1 for May 1, 2013.
-
On running Investor payout Job: Investment Order-1 must get paid out. Interest Remaining on Investment Order-1 must be = $136.11 (Total Interest Accrued from March 1 to April 20)
-
Interest Amount Paid on IO must be = $136.11
-
Interest Balance must be = 0.
-
For Investment Order-2, Interest Remaining must be = $305.56, Interest Amount Paid = $305.56, Next Investor Interest Posting Date = June 1, 2013
-
ILT for posting must be created on Investment Order-2 for amount = $305.56.
However, the system is reporting the following behavior:
-
On running the Investor Payout Job, the system is displaying the following error message:
Note
common.apex.runtime.impl.ExecutionException: Duplicate id in list: a8JDn000000HXmnMAG Please find attached logs.
-
Interest is not getting posted for Investor-1 and there is still an Interest Accrued existing on the contract, hence the Investment Order-1 is not getting paid out.
-
Resolution
This issue is fixed as IPT is now getting created when the IO is sold so that Investor Payout Job pays the due accrued amount correctly and the payout is made correctly.
The system is displaying an error message while trying to create a new dynamic query on the CL Contract object (Jira ID: PDRFF-2160/ PD-1704)
Issue Description
While trying to create a new dynamic query, on selecting the CL Contract object to query on, the system is displaying the following error message:.
Example 1.
Error Message
Visualforce ErrorMaximum view state size limit (170KB)exceeded.Actual view state size for this page was 171.938KB.
Note
This issue is only seen while trying to select the CL Contract object to query on. Selecting other objects is not resulting in any error messages.
This issue is occurring because on selecting the CL Contract object to query, the system is unable to display all the fields on the page as the number of fields is exceeding the limit that the page can accommodate.
Resolution
This issue is now fixed, and the system is allowing user to create dynamic query on the CL Contract object without any error messages.
User is unable to attach files in notes and attachment for CL Loan object (Jira ID: PDRFF-2781/ PD-1713)/Error when trying to upload a txt file in Salesforce (Jira ID: PDRFF-2581/PD-1713)
Issue Description
When a user is trying to attach files in notes and attachment for CL Contract, the system is not allowing to attach the files because the extension types for some files are exceeding the 255 characters permitted in the Allow only these file types field in CL Platform settings.
Resolution
This issue is fixed now. As part of fix, the extension type value is assigned as per the Salesforce standard which is of a smaller length.
The following table explains the extension types of various files:
On File Systems |
In salesforce |
---|---|
docx |
WORD_X |
doc |
WORD |
pptx |
POWER_POINT_X |
ppt |
POWER_POINT |
xlsx |
EXCEL_X |
xls |
EXCEL |
Running the Floating Rate Revision Job before the cutoff date of IO expiry in an Advance Interest IO loan is resulting in an exception (Jira ID: PDRFF-1107/PD-1715)
Issue Description
While running the Floating Rate Revision Job before the cutoff date of IO expiry in an Advance Interest, Interest Only (IO) loan, the system is throwing the following exception:
Note
CL010101: Unexpected Exception List index out of bounds: -1 at line 1880
Example
Let us look at the following example:
1. Create an Advance Interest IO loan with IO period of 5 months.
2. Let the Repayment Start Date for IO be January 20, 2021, and the cutoff date be May 20, 2022, after which the loan becomes non-IO (with Principal and Interest).
3. Do a rate change by running the Floating Rate Revision Job in May before or on the cutoff date of the IO expiry.
Floating Rate Revision Job fails with an exception and Amortizations Schedules do not get generated.
Resolution
This issue is fixed by fixing the internal logic in the code.
The system is displaying an Apex CPU time limit exceeded error while creating a loan with Compound Interest on a Lending Product set to True and with Compounding Frequency set to Semi-Monthly (Jira ID: PDRFF-2316/PD-1723)
Issue Description
The system is displaying an Apex CPU time limit exceeded error while creating a loan with Compound Interest on a Lending Product set to True and if Compounding Frequency set to Semi-Monthly.
Resolution
The issue is fixed. The system is now not displaying any error while creating a Loan contract with Compound Interest on a Lending Product set to True and Compounding Frequency set to Semi-Monthly.
The system is calculating the repayment schedule incorrectly for loans with zero payment flexible repayment plan (JIRA ID: PDRFF-1614/ ND-7300/PD-1707)
Issue Description
For loans that have zero payment flexible repayment plan and periodic fee added to them, the repayment schedule is getting calculated incorrectly .
Example to understand the issue
1. Let us create a loan with the following details:
-
Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
IPT Frequency = Monthly
-
IPT = True
-
Contract Date = May 30,2013
2. Let us add a fee set with the following details :
-
Fee Amount = $100
-
Include in Dues = True
-
Include in Schedules = True
-
Periodic Fee Amount Type = Per period amount
3. Let us add a flexible repayment plan with the following details:
-
Payment Type = EMI
-
Payment Amount = $0
-
Number of Payments = 3
-
Payment Start Date = June 30,2013
4. Let us approve and disburse the loan.
The values must be updated as follows:
-
AMZ schedules must be generated.
-
The first three schedules must be generated with zero Interest, zero Principal, zero due amount and Zero fees upto September 30, 2014.
-
Normal EMI schedules must get generated after September 30,2013 without skipping any schedule.
-
After the contract is created, the current payment amount must be updated to $0.
However, the zero amount EMI schedules are getting skipped for the first three schedules.
Resolution
This issue is fixed now, and the repayment schedule is getting calculated correctly.
The system is not managing the Excess payments correctly, resulting in incorrect charge updates and issues regarding the waivers and adjustments (Jira ID: PDRFF-2729/ND-7583/ND-7453)
Fixed Versions
The fix of this issue is available in the following version:
-
Q2 Loan Servicing December 2023 (4.4001.32)
-
Q2 Loan Servicing Spring'23 (4.2008.52)
Issue Description
When processing extra payments, the system must add the excess amount to the existing balance. However, for the waiving of the paid charges, the system is resetting the excess amounts to zero incorrectly, which is resulting in updates instead of additions to the existing balance.
Additionally:
-
Reversing payment transactions for charges results in the creation of new charges instead of marking existing charges as unpaid.
-
During the waiver action selection for Paid Charge waivers, all charges, including those that are actually paid and those for which payment was reversed, are displayed by the system.
-
Selecting the adjustment type Excess and waiving any paid charge replaces the previous excess balance with the amount associated with the waived charge.
Resolution
This issue is now fixed and the logic is modified such that the existing excess amount is added in the amount calculated after paid charge waiver excess amount.
The system is updating the Paid Off Date field for a contract with Closed-Obligations met status (Jira ID: PDRFF-1656/ND-7606)
Issue Description
If an LPT is made after the loan is paid off and the status of the contract is updated to Closed-Obligations met the system is incorrectly updating the Paid Off Date to Last Transaction Date instead of retaining the date on which the Loan was paid off.
For example, consider if the loan paid off on January 5, 2023, then the Paid Off Date is updated as January 5, 2023.
Loan Status is updated as Closed-Obligations Met.
Post a new Waiver LPT create and clear on January 8, 2023.
The Paid Off Date is changing from January 5, 2023, to January 8, 2023.
Resolution
This issue is now fixed. The system is not updating the Paid Off Date after the loan is paid off.
Rejected and reversed LPTs are being considered by Loan Payment Filegen job (Jira ID: PDRFF-2111/ND-7605)
Issue Description
While processing the data, the Loan Payment Filegen job is considering the Rejected LPTs and Reversed LPTs. Since the system is considering these LPTs it creates an incorrect output while processing the NACHA file.
Example to understand the behavior after the fix
Let us consider an example where LoanPaymentFilegenDynamicJob is not considering the reversed LPTs while processing the data.
-
Create a loan contract with the following values on March 1, 2013:
-
Loan Amount = $10,000
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Rate = 10%
-
Approve and disburse the loan.
-
Move the Current System Date to April 1, 2013, which is the Next Due Date.
-
Create an LPT of $1000 with the Payment Mode set to ACH.
-
Reverse this LPT.
-
Go to Servicing Configuration > RunDAG Jobs > select LoanPaymentFilegenDynamicJob and Record IDs = < Loan Account ID >. Run this job.
On Apex Jobs, the Total Batches is 0 for LoanPaymentFilegenDynamicJob.
Resolution
This issue is now fixed. Since there are no batches processed, this indicates that the job is not considering the reversed and rejected LPTs.
Deposit Amount is getting calculated incorrectly when loan has multiple deposits with child records (Jira ID: PDRFF-2446/ND-7133)
Issue Description
In a loan contract when there are multiple deposits and child deposits is created on different dates for various parent deposits the system is considering the cutoff date for the latest child deposit, neglecting other parent deposits and resulting in incorrect transaction amounts for new child deposit entries.
Example of the system behavior after the fix
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Let us go to March 1, 2013.
Create a loan with two deposit records with following values and then approve and disburse the loan:
-
Deposit 1: $1,500, Rate=10%, and Priority = 1
-
Deposit 2 : $0, Rate=10%, and Priority = 0
-
-
Let us move to March 8, 2013.
-
Let us make deposit transfer from Deposit 1 to Deposit 2 of $1,000.
-
Let us move to March 15, 2013.
-
Make a mid cycle payment of $100. It goes towards Deposit 1.
-
Now let us go to the next Due Date April 1, 2013 and allow LoanDepositPaymentCreationDynamicJob batch job to create the internal transfer.
The system is calculating the amount of Deposit 2 as negative.
Resolution
This issue is fixed. The latest child record of Deposit 2 calculates Deposit Amount of $553.6. The system is now querying the latest child deposit before the transaction date for each parent deposit, ensuring that accurate child deposit records are created.
The InterestPostingAmzDynamicJob is failing with an error message (Jira ID: PDRFF-2353/ND-7380)
Issue Description
In an FAMZ loan, when the InterestPostingAMZDynamicJob is run, the system displays the following error message:
Error Message
SObject row was retrieved via SOQL without querying the requested field: loan_Interest_Posting_Transactionc.loanExternal_Id_c
Objs = [a1a1v00000rCJ6NAAW, a1a1v00000rCNJBAA4, a1a1v00000rCNMAAA4, a1a1v00000rCU1aAAG, a1a1v00000rCUsRAAW, a1a1v00000rCV5..
Because of this, the Last Interest Posting Date and the Next Interest Posting Dates are not getting updated on the contract, and the LPTs are not getting cleared.
Resolution
This issue is not reproducible while testing in the Q2 local org. However, as part of the fix, the field mentioned in the preceding error message, which is the loan_Interest_Posting_Transaction_c.loan_External_Id_c field, has been added in the query now and the internal logic of the InterestPostingAmzDynamicJob has been modified so that it runs successfully.
The Minimum Interest Amount is getting added again to the Payoff Amount incorrectly when the system date changes to a future date (Jira ID: PDRFF-2275/ND-7366)
Issue Description
In a loan where a minimum loan interest is defined, if the borrower makes a payment in middle of the cycle such that the Principal Balance becomes zero and the Minimum Interest Amount is not paid off, the balance Minimum Interest charge is getting created and added to the payoff amount. This amount is getting added again to the Today's Payoff incorrectly when the system is moving to any future Date.
Example to understand the issue
-
Let us create a contract on March 1, 2013, with the following values and then approve and disburse it:
-
Amount = $10,000
-
Rate = 10%
-
Term = 1
-
Pay Frequency = Single-Payment
-
IPT Frequency = Monthly
-
TCM = Month and Days
-
Minimum Interest Option = Minimum Interest Period
-
Minimum Interest Period (in Days) = 180
-
-
In the Additional Parameters section, verify that the value of Minimum Interest Amount is displayed as $491.67.
-
Move the SOD to May 10, 2013.
Since the SOD has moved by two cycles (monthly) the system creates two IPTs.
For the period between May 1, 2013, and May 10, 2013, the system updates the different parameter values as follows:
-
Interest Accrued = $25
-
Today's Payoff = $10,491.67
-
-
Let us create an LPT of amount $10,291.67.
-
The system creates Minimum Interest Charge of amount $300 which has the following values:
-
Total Amount Due = $200
-
Amount Paid = 100
-
Today Payoff = $200
-
Loan Balance = $0
-
Principal Remaining = $0
-
-
Let us go to May 11, 2013.
The Loan Payoff must be $200. As the Loan Balance is $0 no interest must be accrued but the system is adding a Minimum Interest Amount of $300 to today's payoff.
-
Let us move to June 1, 2013 the next Due Date.
System does not post an IPT of $0 amount on June 1, 2013.
Resolution
The issue is fixed. The logic is now updated and the Minimum Interest charge is not getting added to the payoff again.
Paid to Investor flag is not getting set to true when an LPT is created to pay the Charge amount (Jira ID: PDRFF-2095/ND-7338)
Issue Description
When a Loan Payment Transaction ( LPT) is created manually to satisfy a charge, the Paid to Investor Flag is not getting set to true due to which the next month's Interest LPT is also not getting picked up by the Paid to Investor Job and hence the investor is not getting paid with the next month's interest paid.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Amount = $10,000
-
Rate =10%
-
Terms = 6
-
Interest Only Terms = 4
-
Payment Frequency = Monthly
-
Enable Interest Posting For IO = True
-
Contract Date = March 1, 2013
-
-
Let us create an Investment Order on the existing contract with the following details and activate it.
-
Certificate Rate = 10%
-
Share = 100%
-
-
Let us add a fee set with the following parameters:
-
Fee Name = NSF Fee
-
Fee Amount = $100
-
-
Let us go to March 2, 2013, and create an LPT-1 of amount $100 to satisfy only the Charge.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
Paid to Investor flag must be set to true.
However, the Paid to Investor flag is not getting set to true.
-
Let us go to April 1, 2013.
Bill-1 is generated.
-
Let us create an LPT-2 to pay the bill .
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
-
Let us go to April 2, 2013, and create an LPT-3 of amount $100 to pay the Principal.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
The values must be updated as follows:
-
Paid to Investor flag must be set to true.
-
ILT must be created for Payment on investor side.
However, the third payment is not paid toward the Investor. Also, the Paid to Investor flag is not getting set to true for fee only payment after LPT-1.
-
Resolution
This issue is now fixed, and the Paid to Investor flag is getting set to true .
Note
To make the fix work, the previous data must be rectified because Unit of Work is not enabled for Investor Payout Job, other wise the job will continue picking up bad data and will fail.
The system is displaying an error message when the Investor Payout Job is run(Jira ID: PDRFF-2129/ND-7394)
Issue Description
When an Investment Order is sold in between the billing cycles, and the Investor Payout Job is run , the system is displaying the following error message:
"common.apex.runtime.impl.ExecutionException: Duplicate id in list: a8JDn000000HXmnMAG
Please find attached logs"
Example to understand the issue
-
Let us create an FAMZ loan contract with the following details and disburse it:
-
Loan Amount = $1,000,000
-
Rate = 10%
-
Terms = 6
-
Payment Frequency = Monthly
-
IPT Frequency = Billing Frequency
-
Enable Interest Posting for IO = True
-
Is Interest Posting = True
-
Contract Date = March 1, 2013
-
-
Let us add two investor accounts without any priority, and create an Investment Order on the existing contract with the following details and activate it.
-
Investment Amount = $100,000
-
Share = 100%
-
Certificate Rate = 10%
-
-
Let us go to April 1, 2013.
Bill-1 is generated.
-
Now let us create an LPT-1 of amount $833.33 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job, and Investor Payout Job.
-
Let us go to April 20, 2013, and run the IO Interest Accrual Job, and IO Interest Posting Job.
-
Let us now sell the entire share of investor1 to investor2.
The Investment Order 1 is marked sold and becomes inactive.
-
Let us go to May 1, 2013.
Bill-2 is generated.
-
Let us create an LPT-2 to pay the bill.
-
Now let us run the IO Interest Accrual Job, IO Interest Posting Job and Investor Payout Job.
The interest values must be updated .
However, the system is displaying the following error message:
"common.apex.runtime.impl.ExecutionException: Duplicate id in list: a8JDn000000HXmnMAG Please find attached logs"
Resolution
The issue is now fixed, and the Investor Payout Job is running successfully.
The Additional Interest Component is not getting considered when Available Funds is updated during Investor Payout (Jira ID: PDRFF-2510/ND-7391)
Issue Description
When a payment including Additional Interest Component (AIC) is made in a loan that has Interest Bearing Principal (for calculating AIC) as Delinquent Amount, and when the Investor Payout Job is run, the system is considering the AIC in the calculations while creating Investor Loan Transaction (ILTID) for the investor, but it is not considering the AIC while updating the Available Funds in the Account of that investor.
Note
When a bill is unpaid on the bill due date, the loan becomes delinquent from the next day of the due date. Lenders can charge an additional interest on this delinquent amount.
Available Funds is the amount remaining with the investor. All principal recovered from borrower payments is added to the available funds.
Example to understand the issue
-
Let us create a simple loan contract with the following details and disburse it:
-
Priority = 1
-
Share = 100%
-
Contract Start Date = January 10, 2021
-
Let us create an investment order with AIC component on both loan and IO with interest bearing principal as delinquent amount.
-
Let us go to February 10, 2021, and run the IO Accrual and Interest Posting Jobs.
The system generates a bill.
Let us not clear the bill 1. This makes the loan delinquent.
-
Now let us go to March 10, 2021, and run the IO Accrual and Interest Posting Jobs.
The system generates a bill.
-
Let us clear bill 2.
An amount equal to the ILTID is added to the investor's Available Funds, which is Principal + Interest - Total Service Charge + AIC.
However, AIC is not getting included when the Available Funds in the Investor Account is updated. If AIC is not included, the investor's Available Funds is getting updated with the value as Principal + Interest - Total Service Charge.
Resolution
This issue is fixed now, and the AIC component is being considered while calculating the investor's Available Funds for investor payment.
Double clicking is creating double disbursals (Jira ID: PDRFF-1086/ND-7371)
Issue Description
When a user is double clicking the Submit button on a customized front-end portal, the system is creating two drawdown (disbursal) transactions resulting in the limit getting exceeded.
Note
The user is using Q2 Loan Servicing’s disbursal API to create the disbursal transactions.
Expectation
Double disbursals should not be created on double clicking the Submit button on the customized portal. Records should be locked when a disbursal transaction is getting created through the disbursal API, and the system should not allow the contract records to be updated again at the same point in time.
Resolution
This issue is fixed by ensuring that when the Submit button on the customized portal is double clicked, the disbursal transactions are not created twice. This is done by updating the code using the FOR UPDATE in all the queries in the disbursal action. Wherever the records are queried using the For Update, the system locks the record. So, if any other action wants to query the same record, it will have to wait until the record is unlocked, else, the system will give a record lock exception.
Note
-
As this issue was faced while using a customized portal, it is not reproducible in the Q2 Loan Servicing side and hence, could not be tested.
-
SELECT FOR UPDATE is a SQL command that's useful in the context of transactional workloads. It allows you to lock the rows returned by a SELECT query until the entire transaction that query is part of has been committed.
Interest Posting Transaction created by an LPT is not getting linked with that LPT (Jira ID: PDRFF-2529/ND-7400)
Issue Description
When a payment is cleared by the LoanPaymentTxnClearingDynamicJob job, it must generate an Interest Posting Transaction and creates records for the related Interest Posting - Loan Payment (IPLP) if they are not already in the contract. However, when the job runs, it creates the IPLP record with no value getting displayed in the Interest Posting Transaction field of that record. This means that the IPT is not getting linked with that LPT, which ideally must be linked because it connects the LPT and the IPT objects.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Billing Frequency
-
Let us go to March 1, 2013. Create, approve and disburse the loan.
-
Let us go to next due date without running batch jobs.
-
Run the Billing job.
-
Without running the IPT job, create an LPT of the bill's amount
-
The system creates an IPT itself and marks it paid- Bill-1.
-
Let us go to LPT > Interest Posting - Loan Payment (related list) > Interest Posting - Loan Payment Details page.
It is observed that the Interest Posting Transaction field, in the Interest Posting - Loan Payment Details page, displays no value. It must display the IPT ID that is linked to the LPT.
This issue is occurring because when the Payment Application Mode is Date, and when an LPT is created, the system is unable to create a link between IPT and IPLP.
Resolution
The issue is fixed as the code has been updated to add the link between IPT and IPLP resulting in system now being able to display the relevant IPT ID in the Interest Posting Transaction field by the LoanPaymentTxnClearingDynamicJob job.
Fees Remaining and Fees Capitalized are getting calculated with incorrect values (Jira ID: PDRFF-1941/ND-7314/ND-7510)
Issue Description
In a loan that has two capitalized charges included, when a backdated payment is made after the reversal of an LPT, the system is calculating a negative value for Fees Remaining and an incorrect value for Fees Capitalized.
Note
You can enable capitalization of a fee, whereby, the fee amount is added to the loan balance and interest is accrued on it, in situations of late or non payment of the fee. In the default payment spread, this interest is recovered before satisfying the other components of interest, fee and principal balance. However, you cannot add a capitalized fee to a non-interest bearing loan, such as amortization based loan or a line of credit.
Example to understand the issue
-
Let us create a loan contract with the following details and disburse it:
-
Is Interest Posting Transaction Enabled = True
-
Is Capitalization Enabled = True
-
Payment Frequency = Monthly
-
Contract Date = March 1, 2017
-
-
Let us add a fee set with the following fees:
-
Fee Name = Periodic fee
-
Fee Amount = $10
-
Include in Dues = True
-
Enable Fee Capitalization = True
-
Include in Schedules = True
-
Periodic Fee Amount Type = Per period amount
-
Frequency = Monthly
-
Time of Charge = Periodic
-
-
Fee Name = Other fee
-
Fee Amount = $5
-
Enable Fee Capitalization = True
-
Time of Charge = Other
-
-
-
Let us go to April 1, 2017.
The values must be updated as follows:
-
Bill-1 and IPT are generated.
-
Periodic Fee of amount $10 is generated.
-
-
Let us go to April 2, 2017, and create an LPT-1 with Transaction Date as April 2, 2017.
-
Now let us create an ad-hoc charge, Other fee, of amount $5.
-
Let us go to April 7, 2017, and reverse the LPT-1.
The values must be updated as follows:
-
Fees Remaining = $5
-
Fees Capitalized = $10
-
-
Now let us create a backdated LPT-2 with Transaction Date as April 2, 2017.
The values must be updated as follows:
-
Fee Remaining = $0
-
Fee Capitalized = $5
-
-
Now let us go to April 9, 2017 and create a backdated LPT-3 with Transaction Date as April 5, 2017.
The values must be updated as follows:
-
Fee Remaining = $0
-
Fee Capitalized = $5
However, the values are updated as follows:
-
Fee Remaining = -$5
-
Fee Capitalized = $10
This issue is occurring because the system is not marking the Charge Capitalized flag as true for the charge created after the first backdated LPT on April 8, 2017. When another backdated payment is made , the system is recapitalizing the charges and thus calculating incorrect fee values.
-
Resolution
This issue is fixed as the internal logic has been changed such that the system is now capitalizing the charges correctly. Thus the Fees Remaining and Fee Capitalized values are getting calculated correctly.
The Total Pre-Paid Fees is not getting added in the loan amount while a loan is converted from an application to a contract (Jira ID: PDRFF-2598/ND-7370)
Issue Description
While converting a loan application to a loan contract using the contract creation API , the pre-paid fees is not getting added in the loan amount. Because of this after disbursal, the pre-paid fees is not getting added to the disbursal amount .
Resolution
This issue is fixed now, and the pre-paid fees is getting added in the loan amount successfully.
Interest is getting updated incorrectly in Amortization Schedule when a loan is rescheduled (Jira ID: PDRFF-2281/ND-7402)
Issue Description
While rescheduling a non-delinquent loan, the interest amount of first month is getting added incorrectly to the interest component of next month. This results in an incorrect Amortization Schedule.
Example to Understand the Issue
Let us create a loan contract and verify the interest components in the Repayment Schedule.
-
Let us create a loan contract with the following values:
-
Loan Account = $10,000
-
Term = 10
-
TCM = Month And Days
-
Payment Frequency = Monthly
-
IPT Frequency = Monthly
-
Rate = 10%
-
Interest Type= Fixed
-
Maintain Delinquency = True
-
-
Move the Current System Date to March 1, 2013, approve and disburse the loan.
-
Move the Current System Date to April 1, 2013.
-
Go to the Reschedule page, keeping the pre-filled values unchanged, select Preview.
Since Maintain Delinquency is set to true while rescheduling, the interest posted till April 1, 2013 must not get added to second billing cycle. But the interest amount of first month is getting added to the interest component of second month after rescheduling.
Resolution
The issue is now fixed. The Amortization Schedule is now reflecting the correct interest amount.
The Next Due Generation Date is getting generated incorrectly when Payment Start Date and Second Payment Date is same (Jira ID: PDRFF-2078)
Issue Description
In a loan contract with payment frequency as Semi-Monthly-PD, when Payment Start Date and Second Payment Date is same, the Next Due Generation Date is getting generated incorrectly.
Suppose in a loan, the Payment Start Date is March 30, 2022, Second Payment Date is April 30, 2022. then the Next Due Generation Date must be May 30, 2022.
However, the due day of the First Payment Date and Second Payment Date being same, the system is generating the Next Due Generation Date as April 30, 2022.
Note
By default, we have a validation to pass the above values from UI.
However, customers can use the API to bypass the validation or remove the validation in production to input such combination of values.
Resolution
This issue is fixed now, and the Next Due Generation Date is getting generated correctly.
Investor Payout Dynamic Job and LPT reversal is failing with an error message (Jira ID: PDRFF-2420/ ND-7336)
Issue Description
When the Investor Payout Dynamic Job is run, some of the LPTs are not getting processed and the system is displaying the following error message:
Error Message
14:42:01.3 (942516029)|VARIABLE_ASSIGNMENT|[EXTERNAL]|this|"common.apex.runtime.impl.ExecutionException"|
0x3ff9a90b 14:42:01.3 (942544790)|VARIABLE_ASSIGNMENT|[EXTERNAL]|message|
"String to Datetime c (49 more) ..."
Then when the LPT is reversed, the system is displaying the following error message:
Error Message
CL010100: Unexpected DML Exception Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Error processing payment reversal for contract - LAI-00001879 - String to Datetime conversion logic for Locale no_NO is not available: [] at line 20
This issue is occurring because the two locale formats no_NO and ja_JP were not part of the system.
Resolution
The issue is fixed now, and the two locale formats have been added to the system.
Two Minimum Interest Charge are charged for a split off payment in same bank file (Jira ID: PDRFF-1806/ND-7359)
Issue Description
When the loan balance is less than the tolerance specified, the contract status should get updated as 'Active - Marked for closure'. Instead the system is generating another Minimum Interest Charge which is impacting the loan balance and overall payoff and the loan status is not updating to 'Active - Marked for closure'.
Example to Understand the Issue
-
Let us create a loan contract.
-
Let us setup a Minimum interest calculation for the contract.
-
Define an Minimum Interest Charge for this contract.
-
Let us define a payoff tolerance limit for the contract, in such a way that if the principle goes below the tolerance limit then the Minimum Interest Charge is created.
-
Move the system dates ahead for few days so the interest is accrued on loan.
-
Now create an LPT manually in such a way that only the principal/advance remaining on loan is cleared. The value in the Interest remaining field gets updated.
-
As the payment cleared the principal completely, Minimum Interest Charge is created. Hence the value in loan balance becomes (Sum of interest remaining and Fee remaining)
-
Manually waive off this charge, LPT record is created for waived off amount with payment type as 'Waived'.
For example, if the loan principal amount is $10,000 and tolerance is defined as $30 the loan status can be moved to Waived if the principal of amount $9,970 or above is paid.
-
The value in loan balance will be equal to 'Interest Remaining'.
-
Now create a payment manually in such a way that it brings down the loan balance below the tolerance limit.
The system is generating another Minimum Interest Charge and the loan status is not updated to 'Active - Marked for closure'.
Resolution
The issue is now fixed and the loan status is updated to 'Active - Marked for closure' when the loan balance is less than the tolerance specified.
The Current Reserve Amount balance is getting updated incorrectly on the Loan Transaction Summary after a bill is generated (Jira ID: PDRFF-2068/ND-6952)
Issue Description
When a payment is made with an amount higher than the due amount and the next bill generated, then the amount is getting added incorrectly to the Current Reserve Amount balance on the LTS of the bill.
Example to understand the issue
Let us say in a loan we have current due amount of $50 to be paid. We go ahead and make a payment of amount $100. Once this payment is done, the excess $50 gets added to the Current Reserve Amount balance.
On the next bill date, let's suppose the due amount is $100 and the LTS is created for the same. In this LTS, the Current Reserve Amount balance is already consisting of $50, which is incorrect.
The Current Reserve Amount in the LTS must be $0 since the $50 amount has partially paid the current bill.
Resolution
This issue is fixed now, and the Current Reserve Amount in LTS is getting updated correctly. After the fix, when a bill is paid from the Reserve Amount for Next Due, then the Current Reserve Amount in the Loan Transaction Summary has the latest value of Reserve Amount For Next Due after the bill is paid from Reserve.
The interest is not getting posted on the contract when a backdated LPT is reversed using ACH (JIRA ID: PDRFF-1763 /ND-7278)
Issue Description
In a loan contract where fees are capitalized, if the backdated LPTs are reversed using ACH and then the Interest Posting Job is run, the interest is not getting posted and due to this all the payments, that are made are satisfying the principal component only.
Example to understand the issue
-
Let us create an FAMZ contract with the following details and disburse it:
-
Let us add a Fee component with the following parameters:
-
Let us add an APS on the loan account with the following parameters:
-
Let us go to March 25, 2013 and run the Loan Payment Transaction Creation Dynamic Job.
The system creates an automated LPT-1 of $1,000.
-
Let us go to April 1, 2013. The system calculates the values as follows:
-
Let us go to April 3, 2013. Reverse the LPT-1 using ACH return such that NSF charge gets created after the LPT reversal.
The following scenarios should occur, and the value should be updated as follows:
-
IPT-1 should be marked reversed.
-
IPT-2 of $84.93 should be created on April 3, 2013.
-
The NSF Charge-1 of $25 should be created on April 3, 2013.
-
The next Interest Posting Date should be updated to May 1,2013.
-
System should create IPT-2 before NSF charge creation.
-
Last Accrual Date should be updated to April 3,2013 due to capitalized NSF charge creation.
However, the Interest is not getting posted on the contract and LPT reversal. Hence all the payments satisfy the principal component only.
The Interest posting is not getting created by the IPT Job because the IPT (April 1,2013) is occurring before the LAD (April 3,2013).
-
Resolution
This issue is fixed, when a backdated LPT is reversed using ACH and the Interest Posting Job is run, the interest is getting posted correctly on the contract.
The system is facing layout issues while viewing in the Lightning Experience after the Winter'22 upgrade (Jira ID: PDRFF-2779/ ND-7334)
Issue Description
The header with CL Contract and LAI-XXXXXXX details on the CL Contracts page is appearing twice while viewing the application in the Lightning Experience.
Resolution
This issue is fixed now, and the header on the CL Contracts page is appearing correctly.
The interest is getting posted incorrectly and the unpaid charges are getting included in the maturity bill incorrectly in an ARR-enabled loan (Jira ID: PDRFF-2074/ND-7352)
Issue Description
In an ARR-enabled loan with Include in Dues flag set to false, the interest is getting posted incorrectly and the unpaid charges are getting included in the maturity bill incorrectly.
Example to understand the issue
-
Let us create a lending product that is ARR-enabled.
-
Let us say that today is March 1, 2021, and we create a loan with ARR for 2 month and calculation type as Manual Interest Input, Interest Only Term as 1, approve, and disburse it.
-
Let us create a fee set with Include in Dues flag set to false.
-
Let us go to Loan Actions> Manual Billing > create Manual Billing to create the manual bill for next due date with the bill amount.
-
Let us go to the next IPT date, which is April 1, 2021.
The values must be updated as follows:
-
Bill-1 is generated and IPT-1 is created.
-
Unpaid fees is not included in the maturity bill.
-
The Interest Posted must match the manual bill amount.
-
-
Let us go ahead and pay the bill-1.
-
Create an ad-hoc charge on the loan.
-
Let us go to Loan Actions> Manual Billing > create Manual Billing to create the manual bill for next due date with the bill amount.
-
Now let us go to the next IPT date, which is May 1, 2021, which is the maturity date.
The values must be updated as follows:
-
Bill-2 is generated and IPT-2 is created.
-
Unpaid charge must not included in the maturity bill.
-
The Interest Posted after bill-2 must match the manual bill amount in the OLT.
However, the values are updated as follows:
-
Unpaid fees is getting included in bill-2 incorrectly even though Include in Dues flag is set to false.
-
The Interest Posted after bill-2 is not matching the manual bill amount in the OLT.
-
Resolution
This issue is fixed, unpaid charges are not getting included in the bill when Include in Dues flag is set to false and the interest is getting posted correctly on the maturity date.
System is not allowing to perform a Rate Change when the Principal Remaining is zero (Jira ID: PDRFF-2014/ND-7374)
Issue Description
In a loan contract where the Interest Type is Floating, after a payment is made before the Maturity Date such that the Principal/Advance Remaining becomes zero and there is still some Interest Accrued that is not yet posted, the system is not allowing to perform a Rate Change and is throwing an error message.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Deposit Offset Days = 0
-
Auto Change Deposit Rate = True
-
Payment Adjustment Mode = Deposits
-
Let us go to March 1, 2013. Let us create, approve, and disburse the loan.
-
Let us add a Rate Schedule row with following values:
-
Floating Rate Index = <FRI name>
-
Margin = 0
-
Interest Rate = 10%
-
Start Date = March 1, 2013
-
-
Let us go to April 10, 2013.
-
Let us create an LPT-1 of $10,000 which is equal to the Loan Balance.
The values are updated as follows:
-
Principal Remaining = 0
-
Loan Balance = 0
-
Interest Remaining = $25
-
Reserve Amount for Next Due = $10,000
-
-
Let us go to Loan Quick Menu > Loan Actions > Rate Change > add a new row to Rate Schedule with the following values:
-
Floating Rate Index = FRI rate = 20%
-
Start Date = April 10, 2013
-
-
Select Save.
-
Let us go to March 10, 2013.
-
Go to Loan Quick Menu > Action > Reschedule and set Repayment Start Date to June 1, 2013, preview, and select Save.
The system is not allowing to reschedule the loan.
Resolution
This issue is fixed. All Index Rate Changes are now updated and the values are as follows:
-
Loan Status = Active Good Standing
-
Last Transaction Type = Index Rate Change
-
OLT is getting created for Index Rate Change
-
Current Interest Rate = 20%
-
Current Payment Amount = $25.22 ( penny difference of .01 may occur)
-
New Repayment Schedule and Repayment Schedule Summary are getting generated for receiving the remaining interest of $25.21
The system is now allowing you to reschedule the loan successfully.
-
New RSS and RS are created and old ones are getting archived non-primary.
-
Next Due Generation Date is getting updated as June 1, 2013.
The system is displaying an error message if Transaction Date is selected before specifying the Fee Type on the Waiver window (Jira ID: PDRFF-2049/ ND-7351)
Issue Description
While trying to waive a charge on the Waiver window, if the Transaction Date is selected before specifying the Fee Type, the system is displaying the following error message:
Error Message
"CL016443: Fee Type cannot be null.
Error is in expression '{!updateTxnDate}' in page loan:waiver: Class.loan.FeeWaiveAction.setFeeNames: line 102, column 1
Class.loan.WaiverController.calculateChargeAmount: line 265, column 1
Class.loan.WaiverController.updateTxnDate: line 166, column 1"
Resolution
This issue is fixed. As part of fix, a null check validation is added on Fee type and the system now allows user to select the Transaction Date prior to the required Fee Type on the Waiver window without any error message.
When a contract is rescheduled, the system is displaying an exception (Jira ID: PDRFF-2052/ND-7340)
Issue Description
When a loan with Payment Frequency as Semi-Monthly PD, is rescheduled, and if the difference between first payment date and second due date, is less than five days, the system is displaying the following exception:
Note
Apex CPU time limit exceeded Error is in expression '{!actionTo}' in component <apex:commandButton> in component loan:busybutton Error is in expression '{!preview}' in component <apex:commandButton> in page loan:reschedulealoan: Class.clcommon.DateUtil.getNextCycleDateSemiMonthlyPayDay: line 108, column 1.
Note
For Semi-Monthly PD, the difference between the first and the second payment dates specified on the CL Contract page must be equal to or greater than four days and less than 31 days.
Example to Understand the Issue
-
Let us create a loan contract with the following values:
-
Loan Account = $10,000
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Semi - Monthly - PD
-
IPT Frequency = Monthly
-
Rate = 10%
-
Let us go to March 1, 2013 approve, and disburse the loan.
-
Payment Start Date = April 1, 2013
-
Second Due Date = April 10, 2013
-
Once the loan is active, go to Reschedule page and set the values as follows:
-
Repayment Start Date = April 1, 2013
-
Second Due Date =April 5, 2013
The system displays the following exception:
Note
Apex CPU time limit exceeded Error is in expression '{!actionTo}' in component <apex:commandButton> in component loan:busybutton Error is in expression '{!preview}' in component <apex:commandButton> in page loan:reschedulealoan: Class.clcommon.DateUtil.getNextCycleDateSemiMonthlyPayDay: line 108, column 1.
Resolution
This issue is fixed. Now the system is not displaying an Apex CPU time limit instead now displays the following error message:
Note
Minimum 5 days difference should be there between Payment start date and Second due date.
The Actual Next Installment Date is getting reverted after Index Rate Changes (Jira ID: PDRFF-2222/ND-7343)
Issue Description
In a loan contract that has an interest rate change occurring on the Next Due Generation Date, when the Billing Job runs, the system is updating the Actual Next Installment Date correctly, but after the Change Interest Rate job runs on the same day, the system is reverting the Actual Next Installment Date to the previous value. The system must not change the value of Actual Next Installment Date after the Change Interest Rate job runs.
Example to understand the behavior after the fix
-
Set the Current System Date to March 1, 2013, and crate a loan contact with the following values:
-
Interest Rate = 10%
-
Loan Amount = $10,000
-
Terms = 10
-
TCM = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Billing Frequency
-
Interest Type = Floating
-
Pre Bill Days = 1
-
Floating Rate Revision Frequency = Daily
-
Add Actual Next Installment Date to Loan Details layout if not added already
-
Add multiple Interest Rate Schedules with the following values:
-
FRI, Index Rate = 0, Margin = 0 Start from March 1, 2013
-
FRI, Index Rate = 0, Margin = 5 Start from March 31, 2013
-
-
Approve and disburse the loan
-
-
Move the Current System Date to the Next Due Generation Date that is, March 31, 2013.
-
Bill 1 is generated for April 1, 2013, and the Next Due Date is May 1, 2013.
Actual Next Installment Date is getting updated to May 1, 2013, correctly after the Billing Job is run, but it is reverting to April 1, 2013, after Change Interest Rate job is run.
Resolution
This issue is now fixed. The system is updating the Actual Next Installment Date correctly.
The amortization schedule is getting generated incorrectly when an Interest Only loan with flexible repayment plan is rescheduled (Jira ID: PDRFF-1927/ND-7378)
Issue Description
When an Interest Only loan with flexible repayment plan is rescheduled, the amortization schedule is getting generated incorrectly.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Contract Date = January 9, 2013
-
Is Capitalization Enabled = True
-
Payment Frequency = Monthly
-
Payment Start Date = February 9, 2013
-
-
Let us add a flexible repayment plan with the following details:
-
Interest Only Period = 6, Payment Start Date = February 9, 2013
-
Equal Monthly Installments = 4, Payment Start Date = August 9, 2013
-
-
Let us go to February 9, 2013.
Bill-1 is generated.
-
Let us go to February 20, 2013, and reschedule the loan .
The values must be updated as follows:
-
Loan is rescheduled.
-
Interest Only Term must be updated to 5.
-
The number of installments must be updated 9.
However, the amortization schedule for one of the Interest Only Term is getting skipped.
-
Resolution
This issue is fixed now, and the amortization schedule is getting generated correctly.
The Deposit Rate is getting updated incorrectly when a loan contract with interest type as floating is rescheduled (Jira ID: PDRFF-1955/ND-7362)
Issue Description
When a loan contract with interest type as floating is rescheduled, the Deposit Rate is getting updated incorrectly.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Interest Type = Floating
-
Index Rate Change = 10%
-
Payment Frequency = Monthly
-
Payment Application Mode = Deposit
-
Auto Change Deposit Rate = True
-
Contract Date = March 1, 2013
-
-
Let us create a Deposit account on the existing contract with the following details and activate it:
-
Loan Amount = $1,000
-
Deposit Rate = 10%
-
-
Let us go to March 5, 2013, and reschedule the loan with the following details:
-
Floating Rate Index = Current FRI on loan (This value is selected when the product is created)
-
Interest Rate = 8%
-
Repayment Start Date = March 5, 2013
The values must be updated as follows:
-
Loan is rescheduled.
-
The current Interest Rate on the loan must reduce from 10% to 8%.
-
The Deposit Rate on the loan must also get reduced from 10% to 8% .
However, the Deposit Rate is not getting updated automatically after the loan is rescheduled, even though the Auto Change Deposit Rate flag is set to true.
-
Resolution
This issue is fixed now, and the Deposit Rate is getting updated automatically after the loan is rescheduled.
The rescheduling of a loan contract after rate schedule addition is failing with an error message (Jira ID: PDRFF-2214/ND-7045/ND-7364)
Issue Description
When a new rate schedule is added by clicking Loan Quick Menu > Loan Actions > Rate Change and then clicking Validate, the rescheduling of a loan contract is failing with the following error message:
"SObject row was retrieved via SOQL without querying the requested field: loan_Loan_Productc.loanMax_Interest_Rate_c"
This is because while performing a reschedule, the fields mentioned in the preceding error message were not getting queried.
Resolution
This issue is fixed. As part of the fix, the fields mentioned in the preceding error message have been added in the query now and the loan contracts are getting rescheduled successfully.
The Fees Remaining field is getting updated incorrectly when a backdated LPT is reversed (Jira ID: PDRFF-1286)
Issue Description
While performing a backdated reversal of an LPT on a contract with a capitalized fee, instead of updating the Fees Capitalized field, the Fees Remaining field is getting updated with a non-zero value. The Fees Remaining must not get updated with a non-zero value.
When Fees Remaining is updated and Fees Capitalized is not, the Loan Balance is getting updated incorrectly, and as a result, the running balances in the statement are getting impacted.
Note
When a fee is capitalized, interest is charged on it and is added to the Loan Balance. Hence, the Fees Remaining field must have a value of zero.
Example
Let us look at an example to understand the issue by performing the following steps:
-
Create a Simple Lending Product with a Periodic Fee Set having fee with capitalization enabled.
-
Create a contract for the newly created product on March 1, 2022, and move the SOD to April 1, 2022. The Periodic Fee will be created, and it will be capitalized.
-
Now, move the SOD to April 30, 2022, and create an LPT which satisfies the Periodic Fee.
-
Again, if you move the SOD to May 1, 2022, another Periodic Fee is created, and it is capitalized.
-
Now, reverse the LPT created on April 30, 2022.
It is observed that instead of increasing the value of Fees Capitalized, the system is increasing the value in the Fees Remaining field.
Resolution
This issue is fixed as the internal logic has been updated such that, immediately after the payment reversal, the Interest Posting Job is run internally by the code so that the system does not have to wait for someone else to run this job. Due to this, now, the Fees Remaining field, Fees Capitalized fee, and all other fields are getting updated with correct values.
Note
The Interest Posting Job also runs at SOD as usual.
Floating Rate Revision job is failing with an error message (Jira ID: PDRFF-2157/ ND-7346)
Issue Description
When the Floating Rate Revision job is run to perform the floating rate change for a loan, it is
failing with the following error message:
Note
"Aggregate query has too many rows for direct assignment, use FOR loop"
Resolution
This issue is fixed now, and the Floating Rate Revision job is running successfully without any error messages.
The system is displaying an error message while generating a payoff quote for existing loans after the Winter'22 upgrade (Jira ID: PDRFF-2258/ND-7398)
Issue Description
After the upgrade from Lithium to Winter'22 when user is generating Payoff Quote for existing loans the system is displaying the following error message:
"common.apex.runtime.impl.ExecutionException: Argument cannot be null."
This issue is occurring because the Interest field value on Arrears Paid (loan_IOA_Paid_c) is null and hence it is throwing an exception while generating the payoff quote.
Resolution
This issue is fixed. As part of fix, the null check is added whenever loan_IOA_Paid_c value is null on loan account.
The system is not allowing to search the transaction details in the Loan Transaction Summary Detail section (Jira ID: PDRFF-2273/ND-7349)
Issue Description
When the Search button on the Loan Transaction Summary Detail section is clicked, the system displays the following error message:
Error Message
"Attempt to de-reference a null object"
Error is in expression '{!validateUserAccess}' in component <apex:page> in page loan:txnsummary: Class.loan.SecureUIAndInvocationController.validateUserAccess: line 8, column 1
An unexpected error has occurred. Your solution provider has been notified. (loan)"
Resolution
This issue is now fixed , and transaction details are getting reflected in the Loan Transaction Summary Detail section of the loan contracts.
Note
It is recommended to view the transaction details by performing the following steps:
Quick Menu>Account Statement> Loan Transaction Statement
The rescheduling of a loan contract after rate schedule addition is failing with an error message (Jira ID: PDRFF-2267/ND-7355)
Issue Description
When a new rate schedule is added by clicking Loan Quick Menu > Loan Actions > Rate Change and then clicking Validate, the rescheduling of a loan contract is failing with the following error message:
"SObject row was retrieved via SOQL without querying the requested field: loan_Loan_Productc.loanMax_Interest_Rate_c"
This is because while performing a reschedule, the fields mentioned in the preceding error message were not getting queried.
Resolution
This issue is fixed. As part of the fix, the fields mentioned in the preceding error message have been added in the query now and the loan contracts are getting rescheduled successfully.
The following interest adjustment issues related to backdated payment and payoff are fixed as part of this patch:
Issues |
Jira ID |
Jira Description |
---|---|---|
Interest adjustment issues related to backdated payment and backdated payment reversals |
The system is displaying an error message when a payment is reversed |
|
Consolidated loan Balance is not updating in the correct order when an LPT is made before an existing Redraw Transaction in an LTS |
||
Interest adjustment issues related to payoff |
The system is not displaying a confirmation message upon a successful payoff |
The system is displaying maximum view state limit exceeded error message (Jira ID: PDRFF-1710 / ND-7320)
Issue Description
While processing a file with more than 150 ACH records, the system is displaying the following error message:
“Maximum view state limit exceeded.”
Resolution
This issue is now fixed and files with more than 150 ACH records are getting processed successfully without any error messages.
The Deposit Amount in the child deposit account is getting calculated incorrectly when an LPT is reversed (Jira ID: PDRFF-2207/ND-7296)
Issue Description
When a Loan Payment Transaction in a loan with Payment Application Mode as Deposit is reversed, the system is calculating a negative value for deposit amount in the child deposit account.
In other words, there is an inconsistency seen between the values of the deposit amounts displayed in the child deposit account and the Current Deposit Amount of the parent deposit.
Note
Child deposit accounts are the deposit transactions created on the main deposit as highlighted in the following image:
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Contract Start Date = March 1, 2013
-
Payment Application Mode = Deposit
-
Auto change Deposit Rate = True
-
Payment Frequency = Monthly
-
-
Let us create a Deposit account on the existing contract with the following details and activate it:
-
Loan Amount = $0
-
Deposit Rate = 5%
-
Priority = 1
-
Deposit Offset Days = 0
-
-
Let us add an amount of $1,000 in the deposit account with Payment Application Mode as Deposit.
-
Let us go to March 15, 2013, and add an amount of $200 in the deposit account with Payment Application Mode as Deposit.
-
Let us go to March 17, 2013, and perform a Deposit Rate change through deposit adjustment.
-
Now let us go to March 31, 2013, and create an LPT of amount $200 with Payment Application Mode as Deposit.
The Deposit Amount value must be updated to $1,700.
-
Let us go ahead and reverse the LPT created on March 31, 2013.
The Deposit Amount must be updated to $1,500.
-
Now let us go to April 1, 2013. Since this is the second bill date, all internal jobs along with LoanDepositPaymentCreationJob is run.
The values must be updated as follows:
-
A new child deposit record must be created.
-
The deposit amount on the child deposit must be same as parent's current deposit amount.
However, the deposit amount of new child deposit is getting calculated as a negative amount.
Resolution
This issue is fixed now, and the deposit amount of the new child deposit is getting calculated correctly.
The Last Due Date is getting updated incorrectly as null after the bill is paid (Jira ID: PDRFF-2569/ND-7293)
Issue Description
When a loan is created (regular and deposit) the Last Due Date field value is getting deleted, due to which the bills are getting generated for higher values and there by causing issue with IPT’s and payments ultimately.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Terms = 10
-
Time Calculating Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Transaction = Monthly
-
Deposit Offset Days = 0
-
Auto Change Deposit Rate = True
-
Payment Adjustment Mode = Deposits
-
Let us move to March 1, 2013, and create loan as per given precondition and a deposit record:
-
Deposit Amount = $6,000 and Rate =10%.
-
Let us go to the Last Due Date April 1, 2013.
-
Let us reschedule the loan with Maintain Delinquency = True and set Interest Only Period = 2.
-
Preview and Save .
-
Let us move to the next Due Date May 1, 2013.
Now, the system updates the value of Last Due Date as NULL instead of May 1, 2013.
Resolution
This issue is fixed. Now, the system updates the Last Due Date as May 1, 2013 after the bill is paid.
User is unable to configure Contingency Status Code Rules (Jira ID: PDRFF-2136/ND-7287)
Issue description
User is employing the following steps to configure the Contingency Status Code rules, within the system:
-
Go to the Servicing Configuration section.
-
Accessing the Contingency Rules menu select Add Rules to initiate the rule creation process.
However, during this configuration attempt, they are unable to add rules and are receiving the following error message:
Attempt to de-reference a null object.
An unexpected error has occurred. Your solution provider has been notified. (clcommon)
Resolution
This issue is now fixed.
The system is generating multiple interest rate schedules and Index Rate change transactions when loan contracts are rescheduled with a future date (Jira ID: PDRFF-1976/PDRFF-1940/ND-6548)
Issue Description
When loan contracts are rescheduled with a future date, the following issues are occurring:
-
Multiple interest rate schedules are getting auto-created for the loan account.
-
Multiple Index Rate change transactions are getting auto-created .
As a result of the above mentioned issues, the Transaction Summaries are getting created for multiple Index Rate Transactions, which are reflected in the customer transaction statements.
Resolution
This issue is fixed now, and the contracts are getting rescheduled with a future date successfully without any issues.
The interest is not getting posted on the contract when a backdated LPT is reversed using ACH (Jira ID: PDRFF-2244/ND-7278)
Issue Description
In a loan contract where fees are capitalized, if the backdated LPTs are reversed using ACH and then the Periodic Charge Job is run, the interest is not getting posted.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Enable Fee Capitalization = True
-
Contract Start Date = March 1, 2013
-
Payment Frequency = Monthly
-
-
Let us add a Fee component with the following parameters:
-
Fee Name = Periodic Fee
-
Fee Amount = $40
-
Enable Fee Capitalization = True
-
Periodic Fee Amount Type = Per period amount
-
Include in Dues = True
-
Include in Schedule = True
-
Periodic Charge Start Basis = First Payment Date
-
-
Let us go to March 5, 2013, and create an LPT-1 of amount $1,000.
The values must be updated as follows:
-
Interest Remaining = $11.11
-
LAD = March 5, 2013
-
Loan Balance = $9000
-
-
Let us go to April 1, 2013.
The bill is generated and the values must be updated as follows:
-
Interest Posted = $76.11
-
Bill-1 = $1,086.40
-
Periodic Charge = $40
-
LAD = April 1, 2013
-
Loan Balance = $9,116.11
-
-
Let us not clear the bill.
-
Now let us go to April 30, 2013, and reverse the LPT-1 created on March 5, 2013.
After reversal, the LAD gets updated to March 5, 2013, which is lesser than the New Interest Posting Date (April 1, 2013).
The values must be updated as follows:
-
Interest Posted on April 1, 2013, gets reversed and a new IPT of amount $83.33 gets created.
-
Next Interest Posting Date is updated to May 1, 2013.
-
LAD = April 1, 2013.
-
New Loan Balance = $10000+$40+$83.33 = $10,123.33 (Loan Balance + Periodic Charge + Interest Posted)
-
Interest Accrued = ( Loan Balance*Rate*No of Days/360) (10123.33*10*29/360) = $81.55
-
Delinquent Amount = $1,086.40
-
Amount Due Till Current = $1,126.40
-
Payment Amount on bill must be updated from $1,000 to $0.
6. Let us go to May 1, 2013, which is the Periodic Charge creation date.
The values must be updated as follows:
-
Periodic Charge-2 gets created.
-
Fee Capitalized = $80
-
LAD = May 1, 2013.
-
Next Interest Posting Date must be updated to June 1, 2013.
-
Interest Accrued = ( Loan Balance*Rate*No of Days/360) (10123.33*10*30/360) = $84.36
-
Interest Capitalized = $83.33 + $84.36 = $167.69
-
Interest Posted = 167.69
-
Loan Balance = $10,247.69
-
Today's Payoff = 10,247.69
-
Amount Due Till Current = $1,166.40
However, after the LPT is reversed and the Periodic Charge Job is run, the interest is not getting posted on the contract.
This is because for the contract with capitalized periodic charge, the LAD is occurring before the next interest posting date.
Resolution
This issue is now fixed. As part of fix, if LAD is occurring before the next interest posting date, then the Periodic Charge Job of SOD batch triggers IPT Job internally so that the next interest posting date occurs before the LAD. This regenerates the pending IPTs, and the SOD batch's IPT Job generates the future IPTs for the next interest posting date without any issues.
The system is displaying a Too many query rows: 50001 error while running a LoanPaymentTxnClearingJob and after making a backdated payment (Jira ID: PDRFF-2863/ND-7530)
Fixed Versions
The fix of this issue is available in the following version:
-
Q2 Loan Servicing December 2023 (4.4001.15)
Issue Description
For a large quantity of data on loan contracts, bills, and IPTs, when the user is trying to make a backdated payment, the system is unable to clear the payments and is displaying the following error message.
Note
Too many query rows: 50001
Resolution
This issue is now fixed and the logic is modified to optimize the Query size to consider minimum number of records for the discarded bills.
Amortization Schedules are getting incorrectly generated with incorrect Due Dates when a loan has a Flexible Repayment Plan and Business Hours attached to it (Jira ID: PDRFF-2035/ND-7274/PD-1703)
Note
For this fix, if you install the latest Q2 Loan Servicing December patch (4.4001.7), then ensure that you install the latest CL Common December patch (4.4000.5) as well.
Issue Description
In a loan with a Flexible Repayment Plan and Business Hours, the system is generating schedules with incorrect Due Dates in the following scenarios:
-
When the Payment Start Date of a Flexible Repayment Plan falls on a holiday, the system shifts the Payment Start Date to a working day correctly. But the issue is that the system is also shifting the dues dates of the remaining terms of the Flexible Repayment Plan to that working day.
For example, let us say the Payment Start Date of a Flexible Repayment Plan is January 14 and January 14 is a weekend. So the Flexible Repayment Plan start date correctly gets shifted to January 16. This is a correct behavior. But the issue is that the system is also pushing all other repayments out to the 16th of every month instead of the 14th of each month. The expected behavior is that only the Payment Start Date of the Flexible Repayment Plan must change to the January 16th, the rest of the due dates must go back to the 14th of each month.
-
When the Due Day field has a value of 31, the system is behaving incorrectly as explained in the following example:
Let's say we have a Due Day of 31, and February month has 29 days. In this case, let us say the payment has to start from June and we need the due date at the last date of every month. But as June has only 30 days, we are able to only select June 30 as the Payment Start Date from the calendar because of which the due dates of the rest of the terms of the Flexible Repayment Plan also start at 30th even when the Due Day field has a value of 31.
-
The system is creating two schedules in the same month as explained in the following example:
Let us say we have specified a Due Day of 28, and we have created a Flexible Repayment Plan for due dates to fall on 22nd of the month for 5 terms where we have a total term as 12. Then the first five schedules are getting generated on the 22nd of every month but after the first five terms, the schedules are getting generated on the basis of date mentioned in Due Day. And as the Due Day is 28, one more schedule is getting generated in the last month of the 5 terms with the due date falling on 28th.
For example, let's say we have the first Payment Start Date of the Flexible Repayment Plan as June 6, 2023 and the last of the five terms is on October 22, 2023. As we have Due Day as 28, after the first five terms of the Flexible Repayment Plan, there is an another schedule getting generated on October 28, 2023. This makes October have two schedules. This is an incorrect behavior. The next schedule after October 22, 2023, must be September 28, 2023.
Resolution
To fix this issue, the internal logic has been modified and the system now behaves as follows in different scenarios:
-
When you create a new contract, the system automatically considers the value of the contract's Due Day field when generating Amortization Schedules.
-
Unless otherwise specified, the system sets the value of the New Due Day field to the value of the contract's Due Day field upon rescheduling.
-
Regular repayment schedules consider the value in the New Due Day field when rescheduling to generate amortization schedules.
-
While rescheduling, in the Flexible Repayment Plan, the first schedule adheres to the Due Date of the Payment Start Date, while the subsequent schedules follow the value in the New Due Day field. For example, say we have the Payment Start Date for Flexible Repayment Plan as February 28 for 5 terms and New Due Day as 30. Then the system considers the first Due Date as February 28, followed by March 30, April 30, and so on.
-
If you change the Repayment Start Date while rescheduling, make sure to also change the New Due Day field so that all EMIs are created on the New Due Day of the month. Otherwise, the system would generate schedules with due dates that correspond to the Due Day specified in the contract.
Note
Any existing contracts, if rescheduled, will follow the preceding new behaviors. For example, before this fix, if a Flexible Repayment Plan falls on the Payment Start Date, then after this fix, the existing Flexible Repayment Plan schedules would fall on the Due Day field value. (The first term of a Flexible Repayment Plan would still fall on the Payment Start Date.) See the Example to understand the new behavior after the fix.
Note
Additional Scenarios
-
For loan payment frequencies like Daily, Weekly, Bi-weekly, Semi-Monthly, and Semi-Monthly-PD, the system follows the existing behavior for Due Date adjustments.
-
When using the old API, rescheduleALoan, it is recommended to switch to the latest API that supports LoanRescheduleParameters to follow the new behavior.
-
Following is the old API: rescheduleALoan(loanId, transactionDate, repaymentStartDate, interestRate, interestOnlyPeriod, frequencyOfPayment, noOfInstallments). This API does not take Due Day as a parameter.
Instead, you must use the latest API that takes LoanRescheduleParameters as a parameter, and provide Due Day field value in LoanRescheduleParameters.
Following is the latest API: rescheduleALoan(LoanRescheduleParameters rescheduleParams). For more information on the APIs, see the Q2 Loan Servicing Global Methods guide.
While using the latest API, if you provide the changed Payment Start Date, then you must also provide the value for the Due Day parameter.
-
When Move Across Months is set to true and the Schedule Adjustment Method is set to After, and if you need the first EMI to be scheduled at the beginning of the month, while remaining EMIs to be scheduled at the end of the month, then in the Flexible Repayment Plan, you must use one term for the first schedule and add another row starting at the end of the month. The reverse applies when the Schedule Adjustment Method is set to Before.
Note
-
The Payment Start Date marks the beginning of the borrower's repayment schedule.
-
Due Day is a field that stores the day of the month on which the payment is due when the contract was originally created. This field was originally created to specify a value of 31 in it so that all due dates fall on the month end. For example, if Due Day is 31, then due date for the month of February will fall on 28th February if February has 28 days, and the due date for the month of January will fall on 31st of January, and the due date for the month of April will fall on 30th of April because April only has 30 days.
-
If nothing is entered in the Due Day field on the loan contract, the system automatically updates it with the Payment Start Date day. For example, if Payment Start Date is January 15, and nothing is specified in the Due Day field, then it will automatically take the value as 15 and consider all due dates of the schedules to fall on 15th of every month. Thus, the Due Date in the amortization schedules are calculated either looking at the Payment Start Date, the Due Day, or the New Due Day.
-
Additionally, to account for holidays, the system requires the inclusion of Business Hours in the product or contract. Hence, you must add the Business Hours while creating a lending product or a contract if you need to account for any holidays. This ensures that the due dates align with the working schedule and accounts for non-working days such as public holidays.
Example of the system behavior after the fix
Let us see an example of Repayment schedules in a loan with Flexible Repayment Plan and where Due Day = 31, the Due Date falls on a holiday, and Move Across Months = false.
-
Create a lending product with the following values:
-
Interest Rate = 10%
-
Terms = 12
-
TCM = Month and Days
-
Is Interest Posting Enabled = true
-
Interest Posting Frequency = Monthly
-
Payment Frequency = Monthly
-
Move Across Months = false
-
Schedule Adjustment Method = After
-
-
Add Business Hours with Saturday and Sunday as holidays.
-
Move SOD to January 31, 2015.
-
Create a loan contract with the preceding lending product with the following values:
-
Due Day = 31
-
Loan Amount = $10,000
-
Payment Start Date = 2/28/2015
-
-
Go to Loan Quick Menu > Loan Actions > Reschedule and add the following Flexible Repayment Plan:
-
Approve and disburse the contract.
-
Verify the Amortization Schedule. It is as follows:
As seen in the preceding image:
-
The first schedule Due Date is 2/27/2015, as February 28 is a holiday (Saturday) according to the business hours attached and as the Move Across Months = false and Schedule Adjustment Method = After, if a Due Date on the month end falls on a holiday, then it must shift to the previous working day.
-
The first three schedules have $1,000 as the Due Amount and the fourth schedule has $1,000 as the Due Principal as per the Flexible Repayment Plan attached.
-
The fourth schedule Due Date is 5/29/2015. This is because 5/31/2015 is a Sunday and as the Move Across Months = false and Schedule Adjustment Method = After, the Due Date gets shifted to 5/29/2015 as it cannot move across the next month.
-
Excess Payoff IPT is getting created when a payment that is more than the loan payoff amount is made and if the Adjust Deposit Amount in Payoff flag is set to false (Jira ID: PDRFF-2036/ND-7288)
Issue Description
In a loan with Adjust Deposit Amount in Payoff flag set to false, when a payment that is more than the loan payoff amount is made, the Excess Payoff IPT is getting created.
The expected behavior is that if Adjust Deposit Amount in Payoff flag is set to false and a payment that is more than the loan payoff amount is made, the Excess Payoff IPT must not get created and the amount must go to the deposit.
Example to understand the issue
-
Let us create a loan with the following details:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Term = 10
-
IPT Frequency = Billing Frequency
-
Time Counting Method = Month And Days
-
Contract Start Date = March 1, 2013
-
Adjust Deposit Amount In Payoff = False
-
Payment Frequency = Monthly
-
-
Let us add deposit of amount $100, approve, and disburse the contract.
-
Let us go to March 10, 2013, and create an LPT of amount greater than the loan payoff quote amount with Payment Application Mode as Deposit.
The payment is cleared, and the values must get updated as follows:
-
The LPT amount must be transferred to the deposit.
However, the values are updated as follows:
-
Excess Payoff IPT is getting created incorrectly.
-
Resolution
This issue is fixed . Now when a payment amount greater than the loan payoff amount is made and if the Adjust Deposit Amount In Payoff flag is set to false, then the amount goes to deposit correctly.
User is unable to create payments for future dues when Delinquency basis is set to Schedule Balance (Jira ID: PDRFF-2119/ND-7281)
Issue Description
User is unable to create payments with future dues when Delinquency Basis is set to Schedule Balance.
Example to understand the issue
-
Let us create a loan with the following details and disburse it:
-
Loan Amount = $10,000
-
Interest Rate = 10%
-
Loan Terms = 10
-
Interest Only Terms = 4
-
Time Counting Method = Month and Days
-
Payment Frequency = Monthly
-
IPT Frequency = Billing
-
Capitalization = False
-
FIT = True
-
Payment Application Mode = Deposit
-
Delinquency Basis = Schedule Balance
-
Adjust Deposit Amount In Payoff = True
-
-
Go to March 1, 2013, and create an LPT of amount $100 with Payment Application Mode set to Future Dues.
The system is displaying the following error message:
Error message:
Future Dues cannot be used if Delinquency basis is set to Schedule Balance.
Resolution
User is now able to create payments for future dues when Delinquency Basis is set to Schedule Balance.
Interest Only Period schedules are getting created with zero Due Interest and zero Due Amount (Jira ID: PDRFF-2448/PD-1705)
Issue Description
When a loan contract with an Interest Only Period is created, the system is generating interest only schedules with zero values for the interest due and total due amounts.
The system must generate interest only schedules with the required interest due and the total due amount.
Example to understand the issue
-
Let us say a contract is created on March 1, 2013, with the following values, and disburse it:
-
Loan Amount = $10,000
-
Terms=12
-
Interest Type = Fixed
-
Interest Rate = 10%
-
Payment Frequency = Monthly
-
Time Counting Method = Month and Days
-
Is Interest Posting =true
-
Interest Posting Frequency = Billing Frequency
-
Funding in Tranches = false
-
Interest Only Period = 3
-
Expected result: As the interest-only period has been provided, the first three schedules must have only Due Interest, and the due amount must only have the interest value.
Actual result: However, the interest and the due amount values for that period are getting updated incorrectly as zero.
Resolution
This issue is fixed now, and the interest and the due amount values in the schedules corresponding to the Interest Only Period are getting updated correctly.
The loan status is not getting updated to closed and the Excess Payoff IPT is not getting created when a loan payoff is done (Jira ID: PDRFF-1592 /ND-6580)
Issue Description
For the loans that have Interest Remaining more than the deposit amount , when a loan payoff is done, the loan status is not getting updated to closed and the Excess Payoff IPT is not getting created.
Example to understand the issue
1. Let us create a loan product with the following details :
-
Amount = $40,000
-
Rate =10%
-
Terms = 10
-
Time Calculating Method = Month and Days
-
Payment Frequency = Monthly
-
IPT = True
-
IPT Freq = Monthly
-
Adjust Deposit Amount In Payoff = True
-
Contract Date = March 1,2013
2. Let us add deposit of amount $100 , approve and disburse the contract.
3. Let us go to March 15, 2013 and reschedule the contract with Maintain Delinquency flag set to true.
4. Now let us create two charges manually of amount $50 and $150.
5. Let us generate a payoff quote.
6. Now let us create a payoff transaction with amount equal to payoff quote amount.
This should update the values as follows:
-
The loan status is updated to Active-Marked for Closure.
-
Excess payoff IPT of amount $1,666.25 is created.
-
Paid Amount on IPT = $1,566.25
However the Excess Payoff Amount is not getting created.
7. Let us run the Loan Closure Job.
This should update the values as follows:
-
The loan status should be updated to Closed-Obligations Met.
However, the loan status is still in Active-Good Standing.
Resolution
This issue is fixed now, and the Excess Payoff IPT is getting created and loan status is getting updated to closed.
S.No |
Change Date |
Description of Change |
---|---|---|
1. |
December 22, 2023 |
Published the release notes for the General Availability release. |
2. |
January 29, 2024 |
|
3. |
February 19, 2024 |
|
4. |
March 11, 2024 |
|
5. |
April 01, 2024 |
|
6. |
April 22, 2024 |
Enhancements made in the Q2 Loan Servicing 4.4001.46 |
7. |
May 13, 2024 |
|
8. |
June 03, 2024 |
|
9. |
June 24, 2024 |
|
10. |
July 15, 2024 |
|
11. |
August 26, 2024 |
|
12. |
September 16, 2024 |
|
13. |
October 07, 2024 |
|
14. |
October 10, 2024 |
Added PDRFF-3419/ND-8546 to Issues fixed in the Q2 Loan Servicing 4.4001.135 |
15. |
October 28, 2024 |
|
16. |
October 30, 2024 |
Added PDRFF-3331/ND-8421 to Issues fixed in the Q2 Loan Servicing 4.4001.139 |
17. |
November 18, 2024 |
Issues fixed in Q2 Loan Servicing Issues fixed in the 4.4001.157 patch |