This is a living document, and its contents may be updated often. Make sure that you have the latest version for use.
This document provides information about the new and enhanced functionality in , Loan Servicing and MarketplaceGeneral Availability (GA) release. You can access the release notes of the previous releases from the Q2 Customer Portal.
The contents of this document are applicable to all the customers who have installed the Q2 Loan Servicing and Q2 Marketplace Winter 2022 version for the first time or have upgraded from an earlier version.
This document provides information on the following for the Winter 2022 version (4.1012.171) release:
The audience of this document includes business users, implementers, and system administrators.
These release notes may be updated after the first release. Any changes to the contents of these release notes are listed in the Change Record section.
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 Loan Servicing and Marketplace.
For information on the upgrade steps, see release-related steps in the Q2 Product Upgrade Guide.
To view the batch jobs performance statistics for Loan Servicing and Marketplace without customizations under test conditions, see the Q2 Performance Benchmarking Guide.
This section briefly describes the new features and enhancements added in the Winter 2022 version (4.1012.171) release of Loan Servicing and Marketplace.
Note
For a detailed description of the new features and enhancements, see the following guides published over the Q2 Customer Portal:
-
Loan Servicing and Marketplace User Guide
-
Loan Servicing and Marketplace Administration Guide
Feature Description
As part of the Winter '22 release, Q2 Loan Servicing will be able to support Alternative Reference Rates (ARR) wherein the system will be able to call an external calculator through an API and store the Interest Amount and Interest Rate in the system. To enable this, a new rate type has been introduced in the rate type field for Alternative Reference Rates. There is also a separate object to configure Alternative Reference Rate-related parameters. Alternative Reference Rate-type calculations are only supported in Interest Only loans.
Note
For more information on the enhancements made to this feature after the Winter'22 GA release, see the Post GA Release > En hancements made in the Winter'22 patch release section of these release notes.
Feature Description
The system has been enhanced to support Disbursement during Pre-Bill days. If a disbursement is made during the Pre-Bill Days period, the system will not recalculate the bill that has already been generated. All recalculations will be done from the next due generation date only. This ensures that the borrower does not get charged a higher amount than notified.
Feature Description
Currently, the system does not allow for backdated payments to be made if subsequent transactions have occurred after the value date of the payment. From the Winter'22 release, this will be allowed in most cases. When a backdated transaction occurs, the system will automatically calculate the adjusted interest and adjust it against the next interest posting transaction. This feature can be enabled by enabling the following two flags on the CL Contract and the Lending Product objects:
-
Enable Adjustment
-
Entries Create Summaries
Feature Description
Future-dated payoff quotes will now support the ability to calculate a payoff quote taking into account the following configured future events:
-
Interest rate change as configured on Rate Schedules.
-
Payment amount changes as configured on the Flexible Payment Plan.
-
Prepayment penalty configuration.
Note
For more information on the enhancements made to this feature after the Winter'22 GA release, see the Post GA Release > Enhancement made in the Winter'22 patch release section of these release notes.
Feature Description
The accounting job (DataMapperJob) has been made DAG enabled. This means that it can now be scheduled as part of the DAG schedule to run once all relevant jobs are completed. This also enables the accounting job to be configured as part of the external batch orchestrator.
Feature Description
The Financial Calculator is now enhanced to calculate the P&I amount in a non-iterative manner. To enable the new calculator on Q2 Loan Servicing, the Financial Calculator version needs to be updated to 4.0.
Feature Description
The Holiday Treatment Setup has been enhanced to include Rate Schedules as an additional feature to apply holiday treatment to. When this option is selected, then the Start Dates provided as part of the Rate Schedule will automatically move forward or backward if the dates fall on a holiday. This option can be utilized to ensure that the Rate Schedule dates are kept in sync with the Amortization Schedule Due Dates.
Feature Description
The prepayment penalty feature has been enhanced to calculate the prepayment penalty during the input file and direct debit processing. In the previous release, the calculation of the prepayment penalty was only supported if the loan payment transaction was made from the Q2 Loan Servicing UI.
Note
There are no issues fixed in the Winter'22 release of Loan Servicing and Marketplace.
This section briefly describes known issues known in the Winter 2022 version (4.1012.171) release of Loan Servicing and Marketplace.
Issue ID |
Description |
Workaround |
---|---|---|
ND- 6022 |
The prepayment penalty amount is getting incorrectly calculated when the fee amount is calculated as a percentage of the principal balance and when the Pay Future Dues Timely flag is true. |
These issues are planned to be fixed as part of the patch releases after the Winter'22 General Availability release. NoteFor more information on the fixes made for the known issues after the Winter'22 GA release, see the Post GA Release section of this release notes. |
ND- 6042 |
When the DataMapperDynamicJob is run for 300k records, the external batch is throwing a null pointer exception. |
|
ND- 6049 |
When interest posting for an Investment Order is enabled in an FAMZ loan, the system is not validating it. The system must not allow the enabling of the interest posting for an Investment Order in an FAMZ loan and must display a validation message. |
|
ND- 5861 |
Reversal of a loan rescheduling is not working for an FAMZ Single- Payment loan and is displaying an error. |
|
ND- 5883 |
The IPT for the last schedule of payment is not getting generated due to the Heap Size error occurring when the InterestPostingDynamicJob is run. |
|
ND- 6038 |
The system is throwing an exception on doing a backdated loan Payoff beyond LAD for a loan where the Interest Type is Alternative Reference Rate. |
|
ND- 6037 |
The Alternative Reference Rate type of interest is not calculated correctly when a backdated LPT is created beyond two or more IPTs. |
|
ND- 6004 |
The Total Payoff Amount on the Payoff Quote, where the Pay Future Dues Timely flag is set to true, is incorrect when the Late Fee and Periodic Fee are added to the contract. |
|
ND- 6006 |
The late charge is getting considered in the Payoff Quote when the Pay Future Dues Timely flag is set to false even if the bill has been paid for that cycle. |
|
ND- 6058 |
On creating a backdated loan payoff, the loan balance is getting calculated as a negative value and the Adjusted Interest Capitalized field is not getting updated to zero after the loan closure. |
This section briefly describes the new and modified objects in the release of .
Note
For more details on the added and modified objects, see Data Dictionaries Guide.
The following table describes the objects added in the release of .
Object Name |
Field Name |
Description |
---|---|---|
Reference Rate Index |
Name |
This is a system-generated alphanumeric unique ID of each Reference Rate Index added to the lending product. |
Look Back Days |
This field indicates the number of working days to look back to get the interest rate to be applied for today. |
|
Rounding Precision |
This field indicates the number of decimal places to which the Interest Rate should be rounded up. |
|
All In Rates |
Loan Account |
This field indicates the loan contract on which the rate is applicable. |
From Date |
This field indicates the date from which the rate is applicable. |
|
To Date |
This field indicates the date until which the rate is applicable. |
|
All In Rate |
This field indicates the rate applicable in the period. |
|
Discarded |
This field is a checkbox and determines whether or not the rates that were captured as part of the original transactions after the reversal of transactions are discarded. The default state of this checkbox is cleared. NoteDuring the reversal of transactions, the rates captured as part of the original transactions need to be marked as discarded. |
|
Interest Posting Transaction |
This field indicates the ID of the Interest Posting Transaction (IPT), for which the All In Rate is captured during the creation of that transaction. |
|
Loan Disbursal Transaction |
This field indicates the ID of the Loan Disbursal Transaction (LDT) for which the All In Rate is captured during the creation of a disbursal transaction. |
|
Loan Payment Transaction |
This field indicates the ID of the Loan Payment Transaction (LPT) for which the All In Rate is captured. |
|
Other Loan Transaction |
This field indicates the ID of the transaction for which the All In Rate is captured during its creation. |
|
Bill |
This field indicates the ID of the Bill for which the All In Rate is captured during bill creation. |
|
Job |
Input Parameters |
This field indicates the parameters mapped in a dynamic job that will be accessible in any dynamic job in the form of JSON. |
The following table describes the objects modified in the release of .
Modified Object |
Added/Modified Field |
Field Description |
---|---|---|
CL Contract |
Reference Rate Index |
This newly added field is a lookup field to the Reference Rate Index corresponding to the Alternative Reference Rate selected as the Interest Type in the lending product. |
Adjusted Interest Capitalized |
The label name of this field has been changed from Adjusted Interest to Adjusted Interest Capitalized as it stores only the capitalized part of the interest adjustment. |
|
Adjusted Interest Non- Capitalized |
This newly added field stores the non-capitalized part of the interest adjustment similar to the Interest Remaining. This amount is considered at the time of the next interest posting. |
|
Interest Type |
This field has been modified by adding a new picklist value named Alternative Reference Rate. |
|
Lending Product |
Reference Rate Index |
This newly added field is a lookup field to the Reference Rate Index corresponding to the Alternative Reference Rate selected as the Interest Type in the lending product. |
Interest Type |
This field has been modified by adding a new picklist value named Alternative Reference Rate. |
|
Charge |
Discarded |
This newly added field is a flag that indicates whether or not the Charge is discarded or invalid. |
Loan Payment Transaction |
This newly added field indicates the Loan Payment Transaction that resulted in the creation of the Prepayment Penalty Charge. |
|
Loan Parameters |
ARR Calculation Type |
This newly added field indicates the way in which the ARR is calculated. The picklist values or the options are:
|
Other Loan Transaction |
Interest Adjusted Amt |
This newly added field indicates the adjusted interest amount during the manual billing. |
This section briefly describes the new and modified APIs in the Winter 2022 version (4.1012.171) release of Loan Servicing and Marketplace.
Note
For more details on the added or modified APIs, see Loan Servicing and Marketplace REST APIs Guide.
There are no new APIs added in the Winter 2022 version (4.1012.171) release of Loan Servicing and Marketplace.
This section briefly describes the global methods that are added or modified in the Winter 2022 version (4.1012.171) release of Loan Servicing and Marketplace.
Note
For more details on the added and modified global methods, see Loan Servicing and Marketplace Global Methods Guide.
The following table describes the global methods added in the Winter 2022 version (4.1012.171) release of Loan Servicing and Marketplace.
Class Name |
Class Description |
Global Method Name |
Global Method Description |
---|---|---|---|
DataMapperDynamic Job |
This new class is added with its global methods to query all the transactions according to the Mapping Headers and create the accounting entries. |
doInitialize() |
This method returns nothing. |
getRuntimeQuery() |
This method queries the Mapping Header and returns the source criteria as a query. |
||
getRuntimeQueryForPipelinedExecution (records) |
This method returns null as the pipeline execution is not done for this job. |
||
doStart (batchableContext) |
This method does not return anything. |
||
doExecute (batchableContext, scope) |
This method queries the current header. copies records from the source object to the target object. Then for each record in scope, it creates a mapping record for each Mapping Group, and for each group, it creates a mapping record by mapping each field present in source field mapping. For each field present in the mapping, it sets a value to the target object and validates the field mappings. |
||
doFinish (batchableContext) |
This method returns nothing. |
||
ARRCalculatorAdaptor |
This new class is added with its global methods in the Winter'22 release as an adaptor class to be accessed internally by the Integration Framework. |
preProcessRequest (relatedObjectIds, filledInRequestMap) |
This method is used to replace the dynamic request mapping with the third- party API variable names. |
generateRequestBody (filledInRequestMap) |
This method is used to create a request body for the integration request, in the form of an XML or a JSON. It takes a filled-in request map of String and Object from the Integration Framework and returns an integration request. It is required to be overridden by the Integration Framework. |
||
preProcessResponse (integrationResponse) |
This method is used to modify the keys from the response map specific to the third party into product-expected values. This is similar to the preProcessRequest method, but the difference is that here the third-party API variable names are replaced by the product-readable labels. |
||
createResponse (httpResponse) |
This method is used to create a response from the one sent by the third-party system. The response coming from a third party is in a different format. This method converts and creates the response in a product-readable format such as JSON. |
||
LoanDisbursalAction API |
This class has been modified to add a global method. |
clearDisbursmentTransaction () |
This newly added method is used to clear Loan Disbursement Transactions. |
AbstractLoanActions |
This class has been modified to add a global method. |
createLoanPaymentTransactions() |
This method is added in the WInter'22 patch (4.1012.25) release. It is used for payment creation or clearing. |
AbstractLoanActions |
This class has been modified to add a global method. |
createBill() |
This method is added in the Winter'22 patch (4.1012.25)) release. It is used to create a bill manually to create a manual OLT for Manual Interest Input type of ARR Calculation Type. |
reverseManualBill() |
This method is added in the Winter'22 patch (4.1012.25)) release. It is used to reverse the manually created OLT that was created to create a manual bill for the Manual Interest Input type of ARR Calculation Type. |
Follow this section for the details on the issues fixed in the patches on the Winter 2022 version release.
EndOfDayDynamic job is failing, and the system is displaying an error message (Jira ID: PDRFF-3412/ND-8486)
Issue Description
EndOfDayDynamic job is failing and the system is displaying the following error message:
Note
UNABLE_TO_LOCK_ROW
Whenever the system displays the above error message, EndOfDayDynamic job is getting executed partially. This means that the system is not updateing the current branch's Current System Date. Thus, if any transactions are created, they are displaying an incorrect Transaction Date.
Resolution
The issue is now resolved by updating the logic such that once the record is locked, no other job can update the same record at the time.
The conflicting job must wait until the lock on the record is released and then perform the required operation. This will avoid conflicts between the concurrently running jobs and the system will not display an error message.
Backdated charges allowed before the IPT LAD (Jira ID: PDRFF-3342/ND-8513)
Issue Description
When a charge is applied on a date of the past that is before the IPT LAD, it affects the Adjusted Interest Capitalized, resulting in incorrect balances and interest calculations.
To resolve this, when a backdated charge is created for a date before the IPT LAD, the system must be able to adjust the interest and arrive at the correct interest values by applying the adjustment entry logic.
Note
This enhancement is only for LAD action that is IPT and not any other LAD event.
Resolution
This issue is fixed because the system has now been enhanced to allow for the creation of backdated charges for dates prior to the IPT LAD, ensuring that the interests are accurately adjusted using the adjustment entry logic, and therefore the balances and interest amounts are computed correctly.
Rescheduling of advance interest loans with adjustment entry enabled is resulting in additional IPT and bill for the rescheduled date (Jira ID: PDRFF-3339/ND-8323)
Issue Description
During the Interest Only (IO) period, rescheduling an advance interest loan on the basis of Loan Balance, with interest posting enabled, without maintaining delinquency results in an additional IPT and bill when adjustment entry is enabled. All unpaid interest as of that date is combined and an IPT is generated with that combined value. Also, when such a loan is rescheduled, a new amortization schedule gets generated for the discarded interest amount, but the next due generation date remains the same, resulting in two bills being generated when the next due date arrives, one for the rescheduled date and one for the actual due date.
Resolution
This issue is fixed. The rescheduling of advance interest loans do not result in additional IPT and bill when adjustment entry is enabled. The system behavior for rescheduling of advance interest, adjustment entry-enabled loans without maintaining delinquency has been modified as follows.
Existing behavior in the following scenario with Maintain Delinquency set to false:
-
For arrears, non capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Loan Balance and for arrears non capitalized adjustment entry enabled loans that are rescheduled on the basis of Principal Remaining (Reschedule Balance) loans:
The system discards all existing IPTs and the next cycle IPT is generated with the consolidated amount of all discarded IPT. All the existing bills are marked as non primary and the system generates the next bill as per the Repayment Schedule. Interest Posted becomes zero and all the interest goes to the Interest Remaining.
New behavior in the following scenarios for rescheduling of adjustment-entry-enabled loans with Maintain Delinquency set to false:
-
For advance interest or arrears, capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Loan Balance (Reschedule Balance):
The system discards all existing IPT and the next cycle IPT is generated as per new Interest Rate. All the existing bills are marked as non primary and the system generates the next bill as per the Repayment Schedule. Interest Posted becomes zero and the Principal Remaining of the contract gets increased
-
For advance interest or arrears, capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Principal Remaining (Reschedule Balance), for advance interest, non capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Loan Balance (Reschedule Balance), and for advance interest, non capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Principal Remaining (Reschedule Balance):
All existing IPTs are not discarded and next cycle IPT is generated as per the new Interest Rate. All the existing bill are marked as non primary and next bill is generated as per the Repayment Schedule. Interest Posted amount remains intact.
-
For advance interest, capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Loan Balance (Reschedule Balance) in IO period:
All existing IPTs are discarded and next cycle IPT is generated as per the new Interest Rate. All the existing bills are marked as non primary and the next bill is generated as per the Repayment Schedule. Interest Posted becomes zero and Principal Remaining of the contract increases.
-
For advance interest or arrears, capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Principal Remaining (Reschedule Balance), for advance interest, non capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Loan Balance (Reschedule Balance), and for advance interest, non capitalized, adjustment-entry-enabled loans that are rescheduled on the basis of Principal Remaining (Reschedule Balance) in IO period:
All existing IPTs are not discarded and next cycle IPT is generated as per the new Interest Rate. All the existing bills are marked as non primary and the system generates the next bill with the consolidated amount of all the unpaid IPTs. Interest Posted amount remains intact.
The system is incorrectly not marking the Principal only IPTs as Paid even after the IPT is paid off (Jira ID: PDRFF-2484/ND-8206)
Issue Description
For IPT's that have a $0 Interest Posted and a non-zero Principal Posted, the system is not marking the Paid flag as True even after the IPT is paid off.
The loan can have zero interest posted for the following two reasons:
-
If the loan has interest rate of zero associated to it.
-
If the deposit amount on the loan has the same or higher interest rate than the loan amount.
Example to Understand the issue
-
Create a loan contract with the following values:
-
PAM = Deposit
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
TCM = Month and Days
-
IPT Frequency = Monthly
-
Payment Frequency = Monthly
-
-
Move the current system date to March 01, 2013.
-
Create a loan account with following Deposit row:
-
Deposit Amount D1 = $20,000
-
Rate = 10%
-
Priority = 1
-
Set the Deposit Amount in Payoff to False.
-
-
Move the current system date to April 01, 2013. The values are updated as follows:
-
Deposit Interest Posted = $166.67
-
Interest Posted = $0
-
Principal Posted = $0
-
Next Interest Posted Date = May 01, 2013
-
Last Interest Posted Date = April 01, 2013
IPT-1 is created with the following values:
-
Interest Posted = $0
-
Principal Posted = $0
-
Paid = False
-
-
Create an LPT of billing amount.
-
Verify IPT's Paid flag.
The system is not updating the IPT's Paid flag to False (incorrect). Hence no IPLP transaction is created on IPT.
Resolution
The issue is now resolved and the system is correctly marking the Principal only IPTs as Paid after the IPT is paid off.
On attempting to reverse an LPT on a loan contract with an AIC component, the system is displaying an error message (Jira ID: PDRFF-2889/ND-8512)
Issue Description
On attempting to reverse an LPT on a loan contract with an Additional Interest Component, which has either a regular IPT or an AIC IPT associated with it, either one of IPTs must have an Interest Paid value of $0, the system displays the following error message:
Note
Error processing payment reversal for contract - LAI-00000041 - Attempt to de-reference a null object
CL010100: Unexpected DML Exception Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Error processing payment reversal for contract - LAI-00000041 - Attempt to de-reference a null object: [] at line 20
Resolution
The issue is now fixed and the system is not displaying an any error message on attempting to reverse an LPT on a loan contract with an Additional Interest Component.
During an Investment Order sale, the system is displaying an error massage even tho the Buying Price is less than the available funds (Jira ID: PDRFF-3245/MD-506)
Issue Description
During an Investment Order sale, the system is displaying the following error message even tho the Buying Price is less than the available funds:
Note
Investor can not invest more than Available Funds
The system must allow the purchase of the Investment Order if the Buying price is less than the available funds irrespective of whether the original investment amount is more or less than the available funds.
Resolution
The issue is now fixed and the system is not displaying and error message when the Buying Price is less than the available funds. Although, the system will display the following error message when the Buying Price is more than the available funds or the investment amount is more than the available funds:
Note
Investor does not have sufficient funds to buy shares
The system is displaying an error message while uploading the BPAY file (Jira ID: PDRFF-2889/MD-503/ND-8115)
Issue Description
While trying to upload a BPAY bank file on the Q2 Loan Servicing application, the upload is failing as the system is displaying the following error message:
"Apex heap size too large."
Root Cause
This issue was occurring because of a scenario wherein a lot of payments were getting processed through a BPAY file, leading to a high amount of bulk data being retrieved and loaded into the heap. Additionally, the system was not marking AIC IPTs (Additional Interest Component) (Interest Posting Transactions) with a zero amount as paid, resulting in a high volume of unnecessary data being pulled. Also, deposit records were consuming more heap space due to a higher number of child deposits. Marketplace global variables were also using high memory.
Resolution
This issue has been fixed.
As part of the fix, the logic has been updated such that the system now marks the AIC IPTs with a zero amount as paid.
Also, the code has been cleaned up and data has been optimized as follows:
-
Marketplace code cleanup: The code in the Marketplace package is now optimized to release memory space.
-
Deposit record optimization: The deposit detail records are now structured to fetch only necessary fields and filter out unnecessary records.
Adjusted Interest Capitalized value is going exceptionally high after doing multiple backdated payments in one go using the BPAY file (Jira ID: PDRFF-2990/PDRFF-2975/MD-486)
When multiple backdated payments are made on the same transaction date in one go using the BPAY file upload for a loan contract with the Enable Adjustment Entry flag set to true, the system calculates an inaccurate and large amount for the Adjusted Interest Capitalized amount. This has an impact on both the transaction summary and the balances.
This is because adjustment entry logic cannot handle multiple adjustments for the same contract in a single execution context.
ExampleLet us look at an example to understand the issue by performing the following steps:
Let us say a contract is created with the following terms and conditions:
-
Is Interest Posting Enabled = true
-
Is Capitalization Enabled = true
-
Enable Adjustment Entry = true
-
Terms = 20
-
Time Counting Method = Actual days (366)
-
Loan Amount = $10,000
-
Rate = 10%
-
Payment Application Mode = Deposits
-
Deposit Amount = $0
-
Adjust Deposit Amount in Payoff = 0
-
Auto Adjust Deposit Rate = true
-
Current System Date = March 1, 2013
Perform the following steps:
-
Create a loan, approve it, and disburse.
-
Move the current system date to April 1, 2013.
IPT-1 and Bill-1 get created.
-
Create LPT-1 to pay the Bill-1 bill amount.
-
Move the current system date to May 1, 2013.
IPT-2 and Bill-2 get created.
-
Create LPT-2 to pay the Bill-2 bill amount.
-
Make two backdated payments of $400 and $100 on April 25, 2013, using BPAY file upload.
Adjusted Interest Capitalized = -0.82.
-
Make three backdated payments of $600, $200, and $200 on April 25, 2013, using BPAY file upload.
The following are the expected and actual results.
Expected Results:
-
Principal Remaining = $9,073.26
-
Loan Balance = $9,070.80
-
Adjusted Interest Capitalized = -2.47
-
Adjusted Interest Non Capitalized = 0
Actual Results:
-
Principal Remaining = $9,073.26
-
Loan Balance = $9,008.07
-
Adjusted Interest Capitalized = -65.19
-
Adjusted Interest Non Capitalized = 0
This issue is fixed. The fix has been made from the BPAY file upload perspective. The BPAY file upload functionality reads records from the input file and divides them into batches based on the batch size specified in the Bank Statement Configuration custom setting. Each batch is processed separately, and the fix ensures that no payments from the same contract are included in the same batch.
This fix will also impact the API for bulk transactions, which also uses the same logic to divide records into batches. The details of this API are as follows:
API for bulk transactionsIBankStatementAPI bsAPI = BankStatementAPIFactory.getBankStatementAPI(List<BTransaction> bTransactions, boolean checkBankAccount); bsAPI.processBTransaction();
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-3303/ND-8302)
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.
Balance on Loan Transaction Summary is incorrect due to backdated payment reversal of more than one payment on the same date when adjustment entry is enabled (Jira ID: PDRFF-3323/ND-8279) (beh change)
Issue Description
When a backdated reversal (backdated LPT reversal) is performed on two payments that are made on the same date, the adjusted interest transaction is not generated by the system and hence the Balance on the Loan Transaction Summary (LTS) is not the calculated correctly.
Example to understand the issue: Make a backdated payment of $1
Let us understand the issue with the help of an example as follows:
Let us say a loan is created with adjustment entry enabled. (Enable Adjustment Entry = true and Create Summaries = true)
On June 25, 2024, let us say the following occurs:
-
Interest is posted as IPT1. LTS gets created for this IPT as LTS1.
-
There is a bulk payment LPT1 that clears the interest and principal components and the remaining goes to deposit. LTS2 gets created for this.
-
There is one more payment on the same day LPT2 that goes to deposits completely. LTS3 gets created for this.
-
Two charges are created on same day. Thus, LTS4 and LTS5 get created for this.
-
Then a deposit to loan transfer LPT3 (Internal transfer) occurs on the same day that clears the two charges. LTS6 gets created.
On June 27, 2024, let us:
-
Reverse the preceding deposit to loan transfer (LPT3). Due to this the charges become unpaid. LTS gets created for the reversal transaction as LTS7.
-
Reverse the payment (LPT2). LTS gets created for reversal transaction as LTS8
The issue is that the system is calculating an incorrect balance on the LTS and an incorrect value of adjusted interest.
It is observed that after the reversal of LPT3, while LTS8 has right balance on it, the reversal action goes and updates the loan balance on LTS4, LTS6 and LTS7 bumping it to a higher value of exactly the same amount as the payment (LPT2) that is reversed.
Root cause
This issue occurs because when LTS is created for the LPT reversal, it is getting created before the unpaid capitalized charge is added back to the loan balance.
LTS for LPT reversal must be created after the unpaid capitalized charge is added back to the loan balance.
Note
If adjustment entry is enabled, a backdated reversal will trigger the adjustment entry logic resulting in calculation of adjusted interest amount.
Resolution
This issue is fixed. LTS for LPT reversal is now created after the unpaid capitalized charge is added back to the loan balance. Hence, the balance on LTS is now calculated correctly. As part of this fix, if the adjusted amount is zero, the system does not create the Other Loan Transaction (OLT) and LTS for the LTP reversal.
After loan closure, excess amount paid is going to Deposit instead of Excess (Jira ID: PDRFF-3294/ND-8060)
Issue Description
When a payoff is made with an amount greater than the system-calculated payoff amount or a deposit to loan transfer of a very large value is made for a loan contract that has the Payment Application Mode set to deposit and the contract has moved to Closed Obligations Met, the system is moving the excess amount to Deposit instead of Excess even after the loan is closed. Additionally, when there is a negative Adjusted Interest Capitalized value due to a backdated payment, a payoff is made of an amount greater than the system-calculated payoff (or a payment of amount greater than the system-calculated payoff is made that goes to deposit, followed by an internal transfer from deposit to loan,) the system is moving the negative Adjusted Interest Capitalized value to Excess instead of moving the excess amount that is more than the payoff amount to Excess.
Expected Behavior
When a contract moves to Closed Obligations Met, the excess amount must move entirely to Excess field on contract instead of going to deposits. Deposit to loan transfer of a very large value must also move excess to Excess field. If the loan is not closed or not marked for closure, then the excess amount must go to Deposit when the loan is deposit-enabled.
Resolution
This issue is fixed. As part of the fix, any excess amount paid will not be applied towards Deposit in the following scenarios:
-
Loan is Closed-Obligations Met
-
Loan is in Active-Marked For Closure due to payoff payment
Additionally, the Excess will not get updated with the negative Adjusted Interest Capitalized value when there is a negative Adjusted Interest Capitalized value and a payoff is made of an amount greater than the system-calculated payoff (or a payment of amount greater than the system-calculated payoff is made that goes to deposit, followed by an internal transfer from deposit to loan.)
The value of deposit balance on LTS is incorrect for backdated payments or reversals (Jira ID: PDRFF-3216/ND-8174/ND-8343)
Issue Description
When a backdated transaction is posted in a loan where adjustment entry is enabled, there is way to refer to the Actual Deposit Balance on LTS (Loan Transaction Summary or Loan Transaction Statement) after a transaction.
LTS consists of the following two fields:
-
Deposit Amount
-
Actual Deposit Amount
These two fields represent the deposit balance before the transaction. So, a formula field was created to add or subtract the actual transaction amount from LPT or OLT, which works in majority of the cases except for backdated payments or reversals. As a result, there must be a reference to Deposit or a field containing the value of the current Deposit balance after the transaction, including a rate change transaction. This is required to show accurate Offset balance when it is backdated.
Root cause
The Actual Deposit Amount field captures the current value of deposit amount aggregated across all deposits.
The Deposit Amount field captures the running balance of deposit amount aggregated across all deposits.
Consolidated Loan Balance derives its value by taking into account the value of this Deposit Amount field.
Following are the two issues faced in backdated deposit adjustments:
-
Transaction date on LTS is current date instead of backdated date.
-
Consolidated loan balance is as of current instead of backdated date.
Resolution
This issue is fixed by introducing an upgrade script as follows.
Upgrade script
An upgrade script is written to populate values on LTS object fields, namely Actual Deposit Amount and Deposit Amount, to update them with values as per the new behavior as part of this fix.
Caution
Failure to run the script can cause these fields to be updated incorrectly for future transactions as the system is dependent on previous LTS records to update current ones.
Key points on the upgrade script
-
If you have deposits for any loan and if transaction summary is enabled in your org, then you must run this script. Otherwise, you may skip this.
-
This script runs for each contract that is either not closed or cancelled.
-
It can be run to update all LTS or it can be run to update LTS from a certain date onwards. This is to help with batch job performance and reduce upgrade downtime.
-
This script is DAG-enabled, which means that all its features are automatically supported.
Deployment Steps
Perform the following steps:
-
Deploy the following files:
-
Job file: https://github.com/cloudlending/neon-1/blob/v_4.1012_Winter22_Patch_Branch/UnmanagedCustomerScripts/UpgradeScripts/LTSDepositAmountCorrectionJob.cls
-
Test file: https://github.com/cloudlending/neon-1/blob/v_4.1012_Winter22_Patch_Branch/UnmanagedCustomerScripts/UpgradeScripts/TestLTSDepositAmountCorrectionJob.cls
-
-
Create DAG schedule and add the following job: LTSDepositAmountCorrectionJob. Enable parallelization for faster upgrade.
Note
For more information on DAG, go to DAG Configuration section of the Q2 Loan Servicing User Guide for Simple Loans.
-
Provide start date to Input Parameters section in the DAG configuration as follows:
-
{"startDate":"dt1Str"}
where dt1Str is in the local format of the user running this job.
Note
-
The start date must be the date of valid LTS creation such as date after migration.
-
For testing purposes, if you have not provided anything in Input Parameters, you may put in dummy values like {"test":"test"}.
-
-
Recommendation
Test this script in a sandbox with latest refresh without providing a start date by running it as explained in the preceding steps. If it goes well, then the script is ready for production. Else, you may provide the start date like a year back or a date after migration and test the script. Transactions post the start date will be updated.
Algorithm used
The script works by calculating initial deposit amount from LTS > Actual Deposit Amount (which previously stored snapshot value of deposit) where LTS is the very first record in list. Subsequently, LTS are updated by considering previous LTS values and current LTS contribution towards deposits.
Deposit Amount is updated to running balances on deposits.
Actual Deposit Amount is updated to actual deposit amount that are not reversed.
Error Logging
Following error messages are logged in Batch Process Log (loan namespace) object:
-
Failed to update LTS for contract {contract Name}. Final Deposit Amount and Actual Deposit Amount on LTS are not matching. - Logged when final LTS updated fields aren't equal to each other.
-
Failed to update LTS for contract {contract Name}. Final Deposit Amount on LTS is not matching with the current deposit amount. - Logged when final deposit amount computed isn't matching with the current deposit amount on the contract.
-
Failed to update LTS for contract {contract Name}. {Error message} - Logged in case of other exceptions.
Error Mitigation
First, consolidate all errors logged and take appropriate actions on such contracts. Once they are resolved, you may run this script for each contract by passing contract ID or bunch of contract IDs (a DAG feature).
Deposit rate change is not getting reversed on reversal of contract index rate change (Jira ID: PDRFF-3290/ND-8454) (Jira ID: PDRFF-3290/ND-8454)
Issue Description
When an index rate change occurs on contracts with Payment Application Mode as Deposit, the deposit rate also gets updated; however, when the index rate change OLT is reversed, an index rate change reversal OLT is generated, but the respective child deposit on the Deposit account for rate change is not marked as reversed, which impacts the value of interest accrual on deposits.
Example to understand the issue
Let us understand the issue with the help of an example as explained in the following steps:
-
Let us say there is a contract with Payment Application Mode as Deposit, Auto Change Deposit Rate set to true, and Interest Type as Floating.
-
On the date when the next floating rate revision is to occur, an index rate change OLT and deposit adjustment OLT are generated and both contract and deposit rate are updated.
-
Now, if you go on the index rate change OLT and perform reversal using Reverse Rate Change button, an index rate change reversal OLT is generated, but the child deposit on Deposit account for rate change is not marked as reversed.
Resolution
This issue is fixed. Parent ID on the related deposit index rate change OLT is updated when the index rate change is done.Now when the index rate change is reversed, the respective child deposit record is also getting reversed.
After the backdated payments, the adjusted interest value is computed incorrectly and differs from the expected value by a few cents (Jira ID: PDRFF-3118/PDRFF-3130/ND-7994)
Issue Description
After doing a backdated payment, the system is calculating the value of the Adjusted Interest Capitalized field incorrectly. A similar issue is observed when multiple backdated payments are done in one go using BPAY wherein the system is calculating the value of Adjusted Interest Non-Capitalized field incorrectly.
The difference in the expected and the existing values of these fields is a few cents, and this difference is due to the incorrect usage and calculation of the accrued interest and rounding error in the calculations after a backdated payment.
Example 1 to understand the issue: Make a backdated payment of $1
Let us understand the issue with the help of an example as explained in the following steps:
-
Create a contract in a leap year with the following details:
-
Application Date = March 10, 2020
-
Rate = 7.83
-
Time Counting Method = Actual/366
-
Loan Amount = $10,888
-
Deposit = $0
-
-
Move the date to April 10 and make a payment of $2,999.
-
Then move the date to May 10 and make a payment to satisfy the bill.
-
Make a backdated payment of $1 for May 9.
The deposit amount is increased by $1. This is the correct behavior.
It is observed that the system is calculating adjusted interest incorrectly as follows:
-
Adjusted Interest Capitalized = $0.01
The expected value must be as follows:
-
Adjusted Interest Capitalized = $0.00
Example 2 to understand the issue: Make multiple backdated payments at once using BPAY
Let us understand the issue with the help of an example as explained in the following steps:
-
Create a contract in a leap year with the following details:
-
Contract Date = March 1, 2013
-
Rate = 10
-
Time Counting Method = Actual/366
-
Loan Amount = $10,000
-
-
Move the date to April 1, 2013.
This updates the values as follows:
-
Interest Capitalization and Interest Posted = $84.93, Principal Remaining = $10,000, Loan Balance = $10,084.93.
-
-
Then move the date to April 3, 2013.
This updates the values as follows:
-
Interest Capitalization and Interest Posted = $84.93, Principal Remaining = $10,000, Loan Balance = $10,084.93, Interest Accrued = $5.53.
-
-
Now create three backdated payments at once using BPAY file with the following details:
Amount
Transaction Date
$100
March 4, 2013
$100
February 25, 2013
$100
March 4, 2013
It is observed that the system is calculating the adjusted interest improperly, with a few cents deviation from the expected numbers.
The expected values are:
-
Adjusted Interest Capitalized = -0.19
-
Adjusted Interest Non-Capitalized = -0.05
Root Cause of the issue
The root cause of the issue are summarized in the following points:
-
Current rounding error is getting used for backdated interest calculations.
-
Current rounding error is getting added twice or thrice depending on number of transactions in between.
-
Adjusted Interest Capitalized and Adjusted Interest Non-Capitalized rounding errors are not captured for the after next time's calculations.
Let us look at the following example to understand this better.
Example 3 to understand the cause of the issue
Let us say, that on March 1, Interest Posting Transaction (IPT) is generated by the system of an amount of $100 and the Interest Remaining (IR) is $0. Let us say that the Interest Rounding Error (IRE) at this time is -0.00256. On March 15, say there is a LAD changing event, such as a rate change. Then say the IR gets updated to $50 (this is the rounded value) and hence, the new IRE value gets updated to 0.00125. On March 20, say there is another rate change resulting in IR getting updated to $53 and IRE to -0.00147. This is depicted in the following table:
Date |
Transaction Type |
Amount |
Accrued |
IR |
IRE |
Adjusted Interest Capitalized (Rounded) |
Adjusted Interest Non-Capitalized (Rounded) |
---|---|---|---|---|---|---|---|
March 1 |
IPT |
$100 |
0 |
-0.00256 |
|||
March 15 |
Rate Change |
50 |
0.00125 |
||||
March 20 |
Rate Change |
53 |
-0.00147 |
Note
All the values in the preceding table are used only to understand the issue well.
IRE
Here, IRE is calculated in the following steps:
-
Compute the accrued value of interest remaining.
-
Consider the current IRE.
-
Compute the sum of the accrued value and the current IRE.
-
Then round off this sum.
-
Compute the new IRE by calculating the difference of the rounded sum and the actual (unrounded) sum.
For more information on IRE, go to Rounding Off section of the Q2 Loan Servicing User Guide for Simple Loans.
Now let us say today is March 20 and a backdated payment is made on March 18. Let us say that $1 is accrued till March 18 and $1.5 is accrued from March 18 to March 20. The system then considers the IRE as of today (March 20) for the internal calculations. By using the IRE as of today, the system is calculating incorrect adjusted interest values. This is explained in the following table that includes the backdated payment:
Date |
Transaction Type |
Amount |
Accrued |
IR |
IRE |
Adjusted Interest Capitalized (Rounded) |
Adjusted Interest Non-Capitalized (Rounded) |
---|---|---|---|---|---|---|---|
March 1 |
IPT |
$100 |
0 |
-0.00256 |
|||
March 15 |
Rate Change |
50 |
0.00125 |
||||
March 18 |
Payment |
$1 + ( -0.00147) = 0.998853 |
(some negative value due to payment) |
||||
March 20 |
Rate Change |
$1.5 + ( -0.00147) = 1.498853 |
-0.00147 |
||||
As seen in the preceding table, we observe the following issues:
-
The system uses the IRE as of March 20 (as indicated in bold) for its calculations instead of the IRE of the previous IPT date, March 1.
-
The same IRE as of Match 20, -0.00147, is getting added twice to the accrued interest, first on March 18 and then on March 20.
Note
All of the values in the preceding example are just utilized to gain a thorough understanding of the problem.
Resolution
This issue is fixed.
As part of the fix, looking at the preceding Example 3, the IR today on March 20 will be calculated as follows:
computed interest(IR) + IRE as of the IPT date = 50.1 + (-0.00256) = 50.09744 = New computed IR
Where 50.1 is the accrued interest from March 1 to March 20. Hence, the IRE is added only once.
This new computed IR is then compared with the IR on the contract which is 53.
Then the Adjusted Interest Non-Capitalized = 50.09744 - 53 = -2.90256 = -2.9 (rounded value).
As Adjusted Interest Non-Capitalized = -2.90256, it is rounded to -2.9.
Hence, the new IRE = -2.9 - (-2.90256) = -0.00256.
Thus, the system does the following:
-
Consider the IRE as of the IPT date.
-
Compute interest from the previous IPT date to the LAD.
-
Add the IRE of step 1 to this computed interest.
-
Compare this computed interest with the IR on the contract to calculate the Adjusted Interest Non-Capitalized.
-
Calculate the new IRE by subtracting the calculated Adjusted Interest Non-Capitalized in step 4 from the rounded value of Adjusted Interest Non-Capitalized in step 4.
Thus, as part of the fix, the logic is updated such that the system uses the correct IRE which is the IRE as of the previous IPT date and the interest will be calculated from the last posting date to the current LAD. Thus resulting in the correct values of the Adjusted Interest Capitalized and the Adjusted Interest Non-Capitalized fields in the case of backdated payments. The current IRE on the contract will then be updated to a new value derived after rounding the adjusted interest (Adjusted Interest Capitalized or the Adjusted Interest Non-Capitalized) amount.
InvestmentOrderInterestPostingDynamicJob is failing and the system is displaying an error message (Jira ID: PDRFF-3093/ND-8161)
Issue Description
When the batch size is set to five or more, the InvestmentOrderInterestPostingDynamicJob is failing and the system is displaying the following error message:
Note
Apex heap size too large: 19455134".
Resolution
The issue is now fixed by modifying the logic and the InvestmentOrderInterestPostingDynamicJob is not failing.
Note
The start query in the InvestmentOrderInterestPostingDynamicJob is updated. Now, the start query will fetch the loan__lnvestor_Loan__c instead of loan__Loan_Account__c records.
If the user is using a custom query, please ensure that the query is updated accordingly to allow the InvestmentOrderInterestPostingDynamicJob run properly.
A regular payment of amount greater than the funded amount moves the excess to Excess rather than to Deposit (Jira ID: PDRFF-3122/ND-7980) -tested in 4.1012.187
In a simple loan with Payment Application Mode set to Deposit, after satisfying dues or before a due date, when there is no payment due, if a regular payment of amount that exceeds the funded amount is made, the system moves only the amount equal to the funded amount to Deposit. The rest is moved to Excess. The system must not move the rest to Excess. The rest must also go to the Deposit. The complete amount that is more than the funded amount must go to Deposit.
Even in the case when a regular payment of more than the payoff amount is made and if it satisfies all the balances resulting in closure, then the excess must go to Deposit.
ResolutionThis issue is fixed. The internal logic has now been updated such that if Payment Application Mode is set to Deposit, the excess amount will also move to Deposit rather than Excess. And if the payment satisfies the bills resulting in closure, then the excess in this case will also move to Deposit.
The following issues are also fixed as part of Q2 Loan Servicing 4.1012.206 patch:
Issue key |
Summary |
---|---|
PDRFF-3277 |
Interest Deposit Saving amount (Back Dated Reversal and Payments) - Blocker for Offset |
PDRFF- 3294 |
Payment amount greater than funded amount will go to excess |
PDRFF- 3216 |
Deposit Balance on LTS is incorrect for backdated payment / reversal |
The system is calculating the Fee Amount Paid to the investors incorrectly (Jira ID: PDRFF-3263/ND-8197)
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.
The system is calculating the value of the current bill incorrectly, when a backdated payment or payment towards the older bills is made in Pre-Bill Days period for a loan contract that has an AIC with Add Interest to Bill set to true (Jira ID: PDRFF-2559/ND-7758)
Issue Description
The system is calculating the value of the current bill incorrectly, when a backdated payment or payment towards the older bills is made in pre - billed days period for a loan contract that is delinquent and has an additional interest that is calculated on either the Delinquent Amount, Available Amount For Funding, or Custom, with Add Interest to Bill set to True.
Example to understand the issue after the fix
-
Create a loan with the following values:
-
Interest Posting Enabled = True
-
Add an Additional Interest Component with the following values:
-
Add Interest to Bill = True
-
Interest Bearing Principal = Delinquent Amount
-
-
Loan Amount = $20,000
-
Payment Term = 12
-
Pre-Bill Days = 12
-
Interest Rate = 10%
-
-
Approve and Disburse the loan.
-
Move the current system date to the Due Date and the system generates Bill-1.
-
Move the date to updated due generation date value; Bill-2 is generated and contract will become delinquent. This bill will have AIC accrued for the full cycle instead of interest accrued till the due generation date (due to pre-bill days being set)
-
Move the date to next due generation date value, Bill-3 is generated.
-
Move the date to next due generation date value, Bill-4 is generated.
-
Create an LPT between Due Dates of Bill-1 and Bill-2 for the transaction amount of $2,648.48.
-
Bill-2, Bill-3, and Bill-4 bill are regenerated with correct values.
Resolution
The issue is now fixed. Now, when the Interest Bearing Principal field is set to Delinquent Amount, Available Amount For Funding, or Custom, the Bill generated is set to non-primary and the system generates a new Bill correctly and the interest amount billed in the AIC is updated back to previous value.
Note
This solution will only work when the bill is created after the patch is updated in the org.
Payment equivalent to payoff having deposits is closing the loan instead of increasing the deposit amount (Jira ID: ND-8118) -- tested in 4.1012.200
When a normal LPT of amount equal to or greater than payoff is made in a loan with Payment Application Mode set to Deposit and Adjust Deposit in Payoff flag set to false, the system is satisfying the bill and then closing the loan.
For example, suppose you make a payment on a date other than the due date that is greater than the bill amount and greater than or equal to the payoff amount, the bill will be satisfied, and the loan will be closed.
Expected behavior: The behaviour of an actual payoff through the Payoff page and a regular payment of a very large amount will not be treated the same. A real payoff must close the loan and move the extra amount to deposits. A regular payment of a large amount must satisfy bills, move the extra amount to Deposit, and not close the loan.
Resolution
This issue is fixed. When the flag, Adjust Deposit in Payoff, is set to false, for the normal LPT, even if the transaction amount equals to the Payoff amount, the system will not close the loan, and the extra amount will go to deposit. Only when the payoff is done or the required amount has been transferred internally will the loan close.
The system is displaying an error message during investor payout for contracts with 1000 plus active investors (Jira ID: PDRFF-3156/ND-8037)
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
Unwaiving a charge incorrectly updates Fees Remaining and Fees Capitalized (Jira ID: PDRFF-2538/ND-7090) -tested in 3.5054.200
When a capitalized fee is charged, the Fees Capitalized field value is changed. However, when such a fee is waived, the Fees Capitalized field value is reduced by the amount of the waived charge. When this waiver is reversed, the Fees Capitalized field value must be updated again. However, when the waiver is reversed, the Fees Capitalized and Fees Remaining field values are incorrectly altered.
This is because when you do a charge waive reversal in interest-posting-enabled loans, the charge waived amount is not going to Fees Capitalized. It must go to Fees Capitalized field.
ExampleLet us look at an example to understand the issue by performing the following steps:
-
Create a simple loan with a fee set up, approve, and fund the loan.
-
Configure all the fees by setting the Enable Fee Capitalization flag to true.
-
Generate the first bill and make a payment.
-
Create two charges manually, such as the NSF Fee and the Account Management Fee.
-
Waive charge 1 and check Fees Remaining and Fee Capitalized fields. They get updated correctly.
-
Waive charge 2 and check Fees Remaining and Fee Capitalized fields. They get updated correctly too.
-
Unwaive charge 2 and check Fees Remaining and Fee Capitalized fields. The values get updated incorrectly.
-
Unwaive charge 1 and check Fees Remaining and Fee Capitalized fields. The values get updated incorrectly.
-
Now waive both charges and check the fields. The values get updated incorrectly.
This issue is fixed. Fees Remaining and Fees Capitalized field values are now getting updated correctly when a waived charge is unwaived.
Interest Remaining is not updating correctly in an Advance Interest enabled loan with Interest Only period in case of two LAD events (Jira ID: PDRFF-2769/ND-7517) - tested in
In an Advance Interest enabled loan with the Interest Only period, the Interest Remaining (IR) does not update correctly when there are two LAD events. When a contract contains some IR and the Last Accrual Date (LAD) changes before the next Interest Posting Transaction (IPT) date, IR is getting updated with the value of the Interest Accrued (IA) field, which should not occur. IR must get updated by adding the IA to the existing IR.
ExampleLet us look at an example to understand the issue by performing the following steps:
-
Create a contract with the Advance Interest flag set to true on January 13, 2023, and disburse it.
-
Generate the IPT and Loan Payment Transaction (LPT) on February 13 so that IA and IR values are updated to zero.
-
Generate the IPT and LPT on March 13 so that IA and IR values are updated to zero.
-
Move the date to March 24 and do the index rate change so that LAD changes and the IR gets updated to a positive value and the IA value is updated to zero.
-
Again, move the date to March 29 and do the index rate change so that the LAD changes and verify the IR. The IR must get updated by adding the IA of five days (March 24 to March 29) to the existing IR value.
The following is observed:
-
Expected: IR = existing IR + 5 days interest accrued
-
Actual: IR = 5 days interest accrued
-
This issue is fixed indirectly as part of another patch applied. The Interest Remaining is now updating correctly in an Advance Interest enabled loan with Interest Only period when there are two LAD events.
The Next Due Date for an Advance Interest loan contract with Interest Only period skips a month, and rescheduling a loan displays an error message (Jira ID: PDRFF-2995/PD-1749) -tested in 4.1013.21
The following two issues were observed:
-
When there is a 31-day gap or more between the last and next due dates for an Advance Interest loan contract with an Interest Only (IO) period, the Next Due Date skips a month.
-
In a loan contract with Payment Application Mode as Deposits and with a few Interest Only Periods in which the last Interest Only Period is Advance Interest and rescheduling is done before this final Interest Only Period, the system is displaying the following error:
Error Message
"Unexpected Exception: List index out of bounds -1 at line 2085"
These issues are fixed. As part of the fix, the following action is taken:
-
For the issue of the due date skipping a month, the internal logic is modified to calculate the number of cycles passed to the Repayment Plan so that the due date does not skip a month.
-
For the error message displaying while rescheduling, the internal logic of rescheduling or the code is updated by adding a check for index below zero so that the system fetches the reschedule plans correctly.
When Enable Adjustment Entry is set to true and when uploading a BPAY file to create bulk backdated LPTs, no LPTs are getting created, and the following error message is seen in the backend: "Cannot Create Adjustment Entry. Please Reverse the Last transaction".
The issue was caused by an incorrect cutoff date in a bulk query for many contracts in adjustments.
ExampleLet us look at an example to understand the issue by performing the following steps:
Let us say a contract is created with the following terms and conditions:
-
Is Interest Posting Enabled = true
-
Enable Adjustment Entry = true
Perform the following steps:
-
Create Contract-1 on January 9 and Contract-2 on January 10.
-
On February 9 on Contract-1, an IPT is present for February 9. Make a payment for that.
-
On February 10 on Contract-2, an IPT is present for February 10. Make a payment on both contracts.
-
Then make backdated payments for both contracts for February 9 using BPAY file upload.
These payments and backdated payments are depicted in the following table:
It is observed that no LPTs are getting created, and the following error message is seen in the backend: "Cannot Create Adjustment Entry. Please Reverse the Last transaction."
ResolutionThis issue is fixed. The cutoff date for bulk contracts has been corrected. Now the bulk backdated LPT through the BPAY file upload is getting processed successfully.
The following issues are also fixed as part of Q2 Loan Servicing 4.1012.193 patch:
Issue key |
Summary |
---|---|
PDRFF-3191 |
Deposit Interest Posted is incorrect when an internal transfer happens |
PDRFF-3173 |
Adjusted Interest Capitalized value is coming wrong when there is a backdated payment created before the IPT of the previous cycle |
PDRFF-3165 |
LoanDepositPaymentCreationDynamicJob not picking the valid loans and failing with System.NullPointerException |
PDRFF-3161 |
Interest adjustment created due to LPT reversal is increasing the bill due amount and interest posted |
PDRFF-3077 |
Interest adjustment created due to LPT reversal is increasing the interest posted |
PDRFF-3030 |
LoanDepositPaymentCreationDynamicJob failing with "Apex Heap Size Too Large" error |
PDRFF-3013 |
Adjusted Interest Capitalized Negative portion satisfying the payment and causing the balance issues in LTS |
PDRFF-3001 |
Last Accrual Date changed backdated during the system jobs execution |
PDRFF-2972 |
Consolidated Loan Balance in the LTS is coming wrong when there are 2 backdated charges and current dated charge created at same time |
PDRFF-2928 |
Balances in the LTS are incorrect after the payment reversal |
PDRFF-2901 |
Consolidated Loan Balance is coming wrong after the Loan Payoff & after running the Loan Closure Job |
PDRFF-2886 |
Interest Period Value in Transaction Description Of Reschedule OLT Is Inconsistent Post Conversion From IO Period To P&I Loans |
PDRFF-2854 |
Loan status is still showing as "Active - Marked for Closure'' after running the Loan Closure Job |
PDRFF-2853 |
LTS Balance Not updated correctly after the backdated Payment is made after two LPT created on same time |
PDRFF-2842 |
Interest waiver should not add the Additional Interest Component |
PDRFF-2819 |
Error while processing the Credit Verification |
PDRFF-2798 |
Excess Payoff LPT not created in the contract after the Payoff when there is a Negative Adj Int Cap value |
PDRFF-2711 |
LTS Balance is not updating correctly in Excess Payoff IPT |
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-2640 |
Reschedule done on PR with IO period is generating wrong EMI |
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-2564 |
Balance in LTS of IPT is not updating correctly when 2 backdated payment is done on same cycle |
PDRFF-2563 |
Loan is not getting closed after Payoff |
PDRFF-2546 |
Balance Issue in LTS post adding the charge after payment reversal |
PDRFF-2545 |
Interest getting accrued in Active – Marked for Closure Loan status |
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-2495 |
Duplicate row created When Interest rate schedule is added on current system date through quick menu action |
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-2434 |
Backdated payment over existing payment in Case of Advance Interest Loan |
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-2330 |
Ability to close a loan without reversing an IPT |
PDRFF-2329 |
Adjusted interest rounding issue |
PDRFF-2210 |
Platinum - 7.2 - Unable to close the loan |
PDRFF-2150 |
Bill, IPT, Schedules are wrongly created with Principle only payment |
PDRFF-2144 |
Bill due amount is not matching along with Interest Posting |
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-2079 |
Unable to post a backdated payment over existing transactions |
PDRFF-2071 |
LPT over Additional Interest. Interest Calculation is different by Adjusted Interest Non-Capitalized |
PDRFF-2037 |
Error when processing Equifax response in Winter'22 |
PDRFF-1993 |
Invalid Decimal error while clicking on Reschedule button |
PDRFF-1987 |
Interest Only period getting increased by one term in Flexible Repayment Plan While doing Reschedule |
PDRFF-913 |
Advance IO loans reschedule with Loan balance resulting in higher bill amount. |
PDRFF-911 |
LPT satisfying over and above principal amount of the bill |
The system is updating the value of Today's Payoff on the loan incorrectly when the payment amount is below the Payoff Tolerance amount (Jira ID: PDRFF-3115/ND-7996)
Issue Description
For a loan contract with Protect Enabled set to True and Protect Type set to Full, the system is updating the value of Today's Payoff on the loan incorrectly.
Example to understand the behavior after the fix
-
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
-
Capitalization = True
-
Protect Enabled =True
-
Protect Type = Full
-
Protect Fee Percent = 10%
-
Protect waiver Type = Principal and Interest
-
Minimum Interest Option = Amount
-
Minimum Interest Amount =$200
-
Payoff Tolerance Amount =$30
Add a fee with the following values:
-
Time of Charge = Minimum Interest
-
Fee Calculation Method = Fixed
-
Capitalization = False
-
Include in dues = False
-
Include in Schedule = False
-
Add a fee set and link the fee to it
-
-
Approve and disburse the loan.
-
Today's Payoff = $10,200
-
-
Create an LPT for transaction amount of $10175, such that the loan balance transaction amount is less than the Payoff Tolerance Amount. The values are updated as follows:
-
The system creates a Minimum Interest Charge.
-
The loan status is Active -Mark for closure.
-
$10,000 of the LPT is used to pay the principal amount, $175 is used to pay the Minimum Interest Charge, there is a Balance of $25 on the LPT.
-
Fee Remaining =$25
-
Before the fix: The system displayed the value of Today's Payoff incorrectly as $0.
-
After the fix: The system is displaying the value of Today's Payoff correctly as $25.
-
-
Reverse the above LPT.
-
Loan status is undated as Active - Good Standing.
-
Charge will remain as the system does not discard charge on LPT reversal.
-
-
Recreate an LPT of amount $10,175.
-
The system is displaying the value of Today's Payoff correctly as $25.
-
$10,000 of the LPT is used to pay the principal amount, $175 is used to pay the Minimum Interest Charge, there is a Balance of $25 on the LPT.
-
Fee Remaining =$25
-
Resolution
The issue is now fixed and the system is correctly updating the value of Today's Payoff on the loan.
The system is displaying a DML Exception for a bulk reschedule reversal transaction (Jira ID: PDRFF-2926/ND-7611)
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 updating the Loan Transaction Summary of bills correctly (Jira ID: PDRFF-2830/ND-7560)
Issue Description
After posting an LPT or reversing an LPT, the system is calculating the Current Loan Balance and the Consolidated Loan Balance values on the Loan Transaction Summary of the bills incorrectly.
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 then the Consolidated Loan Balance is the summation of the Loan Balance amount and the Deposit amount.
Example to understand the behavior after the fix
-
Create a loan contract on March 01, 2013, with the following values:
-
Loan Amount = $10,000
-
Rate = 10%
-
Terms = 10
-
Time Counting Method = Month And Days
-
Payment Frequency = Monthly
-
Interest Posting Frequency = Billing Frequency
-
Capitalization = True
-
Adjustment Entry = False
-
Create Summaries = True
-
-
Approve and disburse the loan.
-
Move the Current System Date to April 01, 2013.
Bill-1 is generated of the amount $1046.4, with IPT-1of $83.33.
-
Move the Current System Date to May 01, 2013.
Bill-2 is generated of the amount $1,046.4, with IPT-1of $84.03.
-
Create a backdate LPT of the amount $1,000 with the Transaction Date of March 01, 2013.
IPT-1 and IPT-2 are reversed.
The Payment amount on Bill-1 is updated to $1,000.
-
Move the Current System Date to the next day, May 02, 2013.
The system generates new IPTs for April 01, 2013, and May 01, 2013, for an amount of $75 and $75.63 each.
-
Reverse LPT-1.
-
For Loan Transaction Summaries of Bill-1 the values are updated as follows:
-
Current Loan Balance = $10,000
-
Consolidated Loan Balance = $10,000
-
-
IPTs of April 01, 2013, and May 01, 2013, are reversed hence are not updated on the (LTS) section of the bill.
-
Since April 01, 2013, IPT is reversed, for LTS record of Bill-2 the values are updated as follows:
-
Current Loan Balance = $10,000 (This value was incorrectly updated by the system before the fix)
-
Consolidated Loan Balance = $10,000 (This value was incorrectly updated by the system before the fix)
-
-
Resolution
The system is now updating the Current Loan Balance and the Consolidated Loan Balance on the Loan Transaction Summary section of the bills correctly.
The interest is not getting posted on the contract when a backdated LPT is reversed using ACH (Jira ID: PDRFF-2958/ND-6792)
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.
Last Accrual Date is getting updated incorrectly to the IPT date (Jira ID: PDRFF-3001 / ND-7691)
Issue Description
If a payment is reversed in a loan that has adjustment entry enabled in it, then during the execution of the IPT job, the Last Accrual Date (LAD) gets updated incorrectly to the Interest Posting Transaction (IPT) date.
Example to Understand the Issue
To understand the issue, perform the following steps:
-
Create a contract, and disburse it.
-
Generate a bill, IPT, and payment.
-
Generate a payment on March 15.
-
Let us say that the bill and IPT are generated on March 25.
-
On March 27, make a payment.
This changes the LAD to March 27.
-
Reverse the payment of March 15 on the current date, which is March 27.
-
Run the IPT job for this contract.
-
Now check the LAD of the contract.
It is observed that the LAD date goes back to the IPT date of March 25.
Resolution
This issue is fixed. The LAD now does not get updated to an incorrect date after a payment reversal.
The conditions for IPT reposting seems to differ between backdated LPT reversal and backdated LPT (Jira ID: PDRFF-2958 / ND-7696)
Issue Description
It is observed that there is a difference between the conditions checked before reposting IPTs for backdated LPT reversal and backdated payments as follows:
-
For backdated LPT reversal, the system determines whether the contract contains a capitalized charge or if the contract's fee set includes a capitalized NSF fee. If either requirement is met, IPTs are reposted immediately.
-
For backdated payment, the system just checks to see if the contract has a capitalized charge, and if so, IPTs are reposted. (This scenario may cause problems if a loan is manually rescheduled before an IPT is reposted. If a backdated LPT is posted, the IPTs are reversed, and the next IPT date becomes backdated, and if a manual reschedule is performed on the contract, the reversed IPTs are not reposted, interest remaining changes, and the next IPT date is set to its future value. So the reversed IPTs are skipped entirely.
The system actually behaves in the following way:
-
When a backdated LPT is created, the IPT is also reversed and a fresh IPT is not generated immediately within the same transaction. Instead, a new IPT is generated either when another transaction is created (for example, another LPT or rescheduled) or during the SOD-EOD Job.
-
We've introduced certain restrictions on recreating IPTs during backdated LPT reversal to support bulk LPT operations efficiently. Without these restrictions, processing a large number of LPTs could hit governor limits. Hence, in ND-6151, we imposed limitations on IPT creation during backdated transactions.
-
To optimally handle bulk LPT operations, specific constraints are implemented on regenerating IPTs during backdated LPT reversal. Without these constraints, processing a high number of LPTs may exceed governor limits. As a result, limits were set on IPT creation during backdated transactions.
The reason is while creating and reversing backdated LPTs, IPT are reversed, however the system expects IPT to be generated the following day in the IPT job while the start of the day (SOD) job runs.
Resolution
This issue is fixed.
As a result of the resolve, the system now behaves as follows:
-
While running the periodic charge job, if the fee is capitalized, the IPT is generated on a date that is less than the SOD date. If IPT is due on SOD, the IPT is generated in the IPT job.
-
If a manual reschedule is performed, the system runs the IPT job until the SOD date while previewing.
Adjusted Interest Capitalized negative value is satisfying the payment resulting in the balance issues in LTS (Jira ID: PDRFF-3013 / ND-7708)
Issue Description
If a backdated payment and a payment reversal is made in such a way that the Adjusted Interest Capitalized value is negative, then when a payment is made, it satisfies the negative adjusted interest resulting in the balance issues in the Loan Transaction Summary (LTS).
Example to Understand the Issue
To understand the issue, perform the following steps:
-
Create a contract and disburse it.
-
Generate a bill, Interest Posting Transaction (IPT), and a payment.
-
Make a backdated payment and a payment reversal due to which both Adjusted Interest Capitalized value is negative and Adjusted Interest Non-Capitalized value is positive.
-
Now, make a payment.
It is observed that the payment satisfies the negative value of the Adjusted Interest Capitalized value in that LPT, which results in the balance issues in the LTS.
The expected behavior is that the payment must satisfy only when the Adjusted Interest Capitalized value is a positive value.
Resolution
This issue is fixed as the logic is updated such that interest adjusted value is considered as part of the payment LPT only when there is a positive interest adjustment on the loan.
The system is not displaying the Minimum Interest Amount on the Payoff Quote (Jira ID: PDRFF-2942/ND-6949)
Issue Description
Currently, the Interest Remaining on the Payoff Quote is inclusive of the Interest Accrued amount and Minimum Interest amount. The system must have a different field to display only the Minimum Interest amount.
Resolution
The issue is fixed by adding the Interest Accrued amount in the Accrued Interest field and Minimum Interest in Minimum Interest field.
Issues fixed in patches between versions Q2 Loan Servicing 4.1012.170 to Q2 Loan Servicing 4.1012.174
Interest Waived field is not getting updated on the Interest Component of Investment Order while waiving off the Additional Interest (Jira ID: PDRFF-2670/ND-7536)
Issue Description
When an additional interest component is waived and the InvestorPayoutJob is run, the system is adding the waived additional interest amount to the Interest Paid field instead of the Interest Waived field.
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 (IC) to the Investment Order with similar values as IC on loan account.
-
Move the Current System Date to next Due Date, May 1, 2013.
The system creates regular Interest Posting Transaction (IPT) and an IPT for IC.
-
Run InvestmentOrderInterestAccrualJob and InvestorPayoutJob.
-
On the investor side, regular IPT with Interest Posted amount of $83.34 and IPT for IC with Interest Posted amount of $17.44 are created for May 1, 2013.
-
Waive the Additional Interest of amount = $10.
-
Run the InvestorPayoutJob.
The actual issue is that the Interest Waived is not getting updated on the investor side.
After the fix, it is seen that when you go to Interest Component on the investor side, the values are correctly updated as follows:
-
Interest Waived = $10
-
Interest Posted = $7.44 (after waiver)
-
-
Reverse the waiver by reversing the waiver OLT (Other Loan Transaction).
-
Run the InvestorPayoutJob.
After the fix, 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 IC is getting updated correctly in case of an additional interest waiver.
Rate Change is failing with an error message (Jira ID: PDRFF-2669/ND-7497)
Issue Description
While performing a rate change, the system is displaying the following error message and is failing to change the rate:
Error message:
Interest rate change failedAggregate query has too many rows for direct assignment, use FOR loop
Example to understand the issue
-
Create a loan with term as 360 and frequency as Monthly.
-
Go to Loan Quick Menu > Loan Actions > Rate Change, and perform multiple rate changes on loan for different dates.
-
Set up more than 10 Automated Payment Setups on Loan with the following details: (Type: One time, Debit Date: any date for each month, Transaction Amount: equal to or less than the current payment amount on loan)
-
Again go to Loan Quick Menu > Loan Actions > Rate Change, and add another schedule by providing the start date as the current system date.
-
Select Validate.
The system displays the following message: Schedule is valid!
-
Now select Save.
Upon saving, it is seen that the rate change is failing with the following error message:
Error message:
Interest rate change failedAggregate query has too many rows for direct assignment, use FOR loop
Resolution
This issue is fixed as the internal code is updated and the system is not displaying any error messages while performing a rate change and the rate is changed successfully.
MarkFieldsAccessibleJob is giving permissions to custom objects as well (Jira ID: PDRFF-2503/ND-7056)
Issue Description
After running the MarkFieldsAccessibleJob, it is observed that in addition to providing permissions to the managed (product) objects of the Q2 Loan Servicing packages, the job is also providing permissions to the custom objects, which is incorrect. The job must not provide permissions to custom objects or fields.
Example to understand the issue
Let us understand this issue with an example by performing the following steps:
-
Create a custom object by going to (Setup) > Setup > Object Manager > Create > Custom Object.
-
Create a custom profile or select any of the existing profiles by going to (Setup) > Setup > Quick Find > Profiles > New Profile.
-
In that profile, scroll down to the Custom Object Permissions and ensure that no permissions have been given to the preceding, newly created custom object.
-
Run the MarkFieldsAccessibleJob.
It is observed that this job runs for all the custom objects. Once all the instances are completed, as seen on the Apex Jobs page, on checking the permissions given to the preceding custom object created, it is seen that the job gives read, write, and edit permissions to the newly created custom object too. The job must not do that.
Resolution
This issue is fixed as the internal logic has now been updated to only give permissions to the managed objects and not the custom objects whenever the MarkFieldsAccessibleJob is run.
The system is updating the Transaction Amount incorrectly after displaying an error message (Jira ID: PDRFF-2676/ND-7269)
Issue Description
While creating an LPT, if you enter a value for the Transaction Amount with a comma and with number of 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 correctly, but it then removes the decimal point from the value altogether displaying a whole number.
Note
Error message
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
Error message:
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 up to 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 with number of digits after the decimal point that are greater than the defined number in the org, the system is displaying an error message and then updating the value in the Transaction Amount field correctly.
LoanPaymentTransactionCreationJob is failing with an error message (Jira ID: PDRFF-2966/ND-7663)
Issue Description
While running the LoanPaymentTransactionCreationJob for a batch size of 20, it is failing with the following error message:
Note
Error message
Too many query rows: 50001
Resolution
This issue is fixed. Now, while running the LoanPaymentTransactionCreationJob even for a batch size of 200, the system is not displaying any error messages and the job is running successfully.
Deposit Amount is getting calculated incorrectly when loan has multiple deposits with child records (Jira ID: PDRFF-3000/ND-7673)
Issue Description
The issue is seen in a loan contract with Payment Application Mode as Deposit and with multiple deposits and child deposits for different parent deposit created on different dates.
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
-
-
Let us go to March 1, 2013.
Create a loan with two deposit records with the 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 move to March 15, 2013.
-
Let us make deposit transfer from Deposit 1 to Deposit 2 of $1,000.
-
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.
-
Make a mid cycle payment of $100. It goes towards Deposit 1.
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 queries the latest child deposit before the transaction date for each parent deposit. This is to consider minimum deposits with respect to transaction date for each parent deposit. Hence, ensuring that accurate child deposit records are created.
The Deposit Amount in the child deposit account is getting calculated incorrectly when an LPT is reversed (Jira ID: PDRFF-3000/ND-7674)
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.
No confirmation email received after a successful execution of the DAGs (Jira ID: PDRFF-2951/PD-1737)
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.
Interest Waived field is not getting updated on the Interest Component of Investment Order while waiving off the Additional Interest (Jira ID: PDRFF-2670/ND-7536)
Issue Description
When an additional interest component is waived and the InvestorPayoutJob is run, the system is adding the waived additional interest amount to the Interest Paid field instead of the Interest Waived field.
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 (IC) to the Investment Order with similar values as IC on loan account.
-
Move the Current System Date to next Due Date, May 1, 2013.
The system creates regular Interest Posting Transaction (IPT) and an IPT for IC.
-
Run InvestmentOrderInterestAccrualJob and InvestorPayoutJob.
-
On the investor side, regular IPT with Interest Posted amount of $83.34 and IPT for IC with Interest Posted amount of $17.44 are created for May 1, 2013.
-
Waive the Additional Interest of amount = $10.
-
Run the InvestorPayoutJob.
The actual issue is that the Interest Waived is not getting updated on the investor side.
After the fix, it is seen that when you go to Interest Component on the investor side, the values are correctly updated as follows:
-
Interest Waived = $10
-
Interest Posted = $7.44 (after waiver)
-
-
Reverse the waiver by reversing the waiver OLT (Other Loan Transaction).
-
Run the InvestorPayoutJob.
After the fix, 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 IC is getting updated correctly in case of an additional interest waiver.
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-7179)
Fixed Versions
The fix of this issue is available in the following version:
-
Q2 Loan Servicing Winter'22 (4.1012.160)
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
While saving a contract, system is generating a CPU time error for payment date on daylight saving day (Jira ID: PDRFF-2654/PD-1695)
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.
On selecting the Reset button on the Interest Rate Schedule, the system is displaying a null pointer exception error (Jira ID: PDRFF-2457/ND-7152)
Issue Description
Selecting the Reset button for a newly added rate schedule on the Interest Rate Schedule section, without saving, triggers a null pointer exception error. The system must clear the entered values for the rate schedule instead of displaying any errors.
Resolution
The issue is now fixed. For an unsaved newly added rate schedule on the Interest Rate Schedule section, the system clears the entry without displaying an error.
Fees Remaining is getting updated when a payment is reversed even though all the fees have the Enable Fee Capitalization flag set to true (Jira ID: PDRFF-2333/ND-7100) -tested in 3.5054.200
In a loan that has fees with the Enable Fee Capitalization flag set to true, when a payment that has satisfied the fee is reversed, instead of updating the Fees Capitalized field, the system is updating the Fees Remaining field with a non-zero value and is marking the capitalized charge as uncapitalized. The Fees Remaining must not get updated with a non-zero value.
When the Fees Remaining field gets updated while the Fees Capitalized field does not, the Loan Balance field is getting incorrectly updated, impacting the running balances in the Transaction Statements.
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.
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.
ResolutionThis issue is fixed as the internal logic has been updated to run the Interest Posting Job internally as soon as the payment is reversed. This eliminates the need to wait for the job to be run at its scheduled time. As a result, the Fees Remaining field, Fees Capitalized fee, and all other fields are now getting updated with correct values.
Note
The Interest Posting Job also runs at SOD as usual.
The scenarios where the system is updating the value of the Fees Remaining field incorrectly are as follows:
-
Reversal of a payment that satisfied a fee as described in the following steps:
-
When uploading the ACH Return File, an NFS fee is created and the Fees Capitalized field is getting correctly updated.
-
An LPT is subsequently generated, the NSF Fee is paid, and the Fees Capitalized field value is appropriately lowered.
-
The LPT is then reversed. Due to the reversal, instead of increasing the Fees Capitalized field value, the system is increasing the value of Fees Remaining field.
-
-
Periodic Fee getting charged as follows:
-
When a periodic fee is charged or created during the EOD process, instead of increasing the Fees Capitalized field value, the system is increasing the value of the Fees Remaining field.
-
-
Loan rescheduling as follows:
-
During rescheduling of the loan, if the Fees Capitalized field value is greater than zero, then after rescheduling, the system is reducing the value of the Fees Capitalized field to zero and is increasing the value of the Fees Remaining field.
-
The following interest adjustment issues related to backdated payment and payoff are fixed as part of the Q2 Loan Servicing 4.1012.149 patch:
Issues |
Jira ID |
Jira Description |
---|---|---|
Interest adjustment issues related to backdated payment and backdated payment reversals |
PDRFF-2299 |
The Adjusted Interest Capitalized value is not getting satisfied when a payment is made after LPT reversal |
PDRFF-2339 |
The system is displaying an error message when a payment is reversed |
|
PDRFF-2434 |
Backdated payment for an Advance Interest loan is not working |
|
PDRFF-2360 |
Backdated payment reversal is displaying an incorrect Adjusted Interest Amount and Balance in the Loan Transaction Summary (LTS) |
|
PDRFF-2362 |
Consolidated loan Balance is not updating in the correct order when an LPT is made before an existing Redraw Transaction in an LTS |
|
PDRFF-2330 |
There is no way to close a loan without reversing an IPT |
|
PDRFF-2473 |
Interest adjustments and loan balances are incorrect after a second backdated payment |
|
PDRFF-2546 |
Balance is not updating correctly in LTS after a capitalized charge is added after a backdated payment reversal |
|
PDRFF-2526 |
Adjusted Interest is incorrect when backdated payment is made prior to LPT and IPT |
|
PDRFF-2610 |
System is showing incorrect Adjusted Interest value for two backdated payments in the same cycle |
|
PDRFF-2650 |
Loan status is changing to Active - Bad Standing after an internal transfer transaction is reversed |
|
PDRFF-2092 |
Duplicate charge is getting created when a backdated LPT is reversed |
|
PDRFF-2299 |
The Adjusted Interest Capitalized value is not getting satisfied when a payment is made after LPT reversal |
|
PDRFF-2070 |
The Balance in LTS is getting incorrectly updated when an LPT is created |
|
PDRFF-2072 |
The Balance in LTS is getting incorrectly updated when an LPT is created |
|
ND-6590 |
The system is running the IPT job for Backdated LPT creation and reversal even when there is no capitalized charge and NSF fee setup |
|
ND-6983 |
There are no validations for stopping reversals of OLTs prior to LAD |
|
ND-7032 |
There is no validation for loans with advance interest and adjustment entry enabled when a backdated payment is made |
|
ND-7121 |
Adjusted Interest Non-Capitalized value is updating incorrectly after doing a payment reversal |
|
ND-7138 |
Unable to do a backdated payoff when Additional Interest LPTs are present |
|
ND-7185 |
Adjusted Interest Non-Capitalized is updating incorrectly after doing a backdated payment reversal |
|
ND-6761 |
The Balance on the LTS is getting updated incorrectly after a payment is reversed. |
|
Interest adjustment issues related to payoff |
PDRFF-2385 |
The system is displaying an error message while generating a future dated payoff quote |
PDRFF-2105 |
Principal Remaining is not zero when the loan contract has been moved to Closed - Obligations Met when interest adjustment feature is enabled |
|
PDRFF-2210 |
Unable to close the loan |
|
PDRFF-2563 |
Loan is not getting closed after payoff |
|
PDRFF-2469 |
There is no way to close a loan without reversing an IPT with Deposits |
|
PDRFF-2583 |
Not able to close the loan with backdated payoff after reversing the latest LPT |
|
PDRFF-2565 |
The system is displaying an incorrect Payoff Amount in the Payoff Quote |
|
PDRFF-2587 |
Multiple issues while creating a future dated payoff quote in a loan with interest adjustment enabled |
|
PDRFF-636 |
The system is not displaying a confirmation message upon a successful payoff |
|
PDRFF-2328/ND-6931 |
The interest on the Deposit Amount is not getting included in the payoff quote |
|
PDRFF-2385/ND-6932 |
The system is displaying an error message while generating a future dated payoff quote |
|
ND-7159 |
Adjusted Interest Capitalized and Adjusted Interest Non-Capitalized are not being reflected in the current dated payoff quote |
|
ND-7005 |
The loan status is not updating to Active-Marked for Closure when there is a payoff made in an adjustment entry enabled loan with deposits |
The following issues are also fixed as part of Q2 Loan Servicing 4.1012.149 patch
Serial Number |
Jira ID |
Jira Description |
---|---|---|
1. |
PDRFF-2495 |
There is a duplicate row created when an interest rate schedule is added on the current system date through Loan Quick Menu |
2. |
PDRFF-2538 |
Fees Remaining and Fees Capitalized are updated incorrectly when a charge waiving action is reversed |
3. |
PDRFF-2335 |
Rescheduling a loan with or without maintaining delinquency is not behaving correctly when interest adjustment is enabled |
The Deposit Rate is getting updated incorrectly when a loan contract with interest type as floating is rescheduled (Jira ID: PDRFF-1955/ND-6710)
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.
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.
6. The amortization schedule is getting generated incorrectly when an Interest Only loan with flexible repayment plan is rescheduled (Jira ID: PDRFF-1927/ND-6813)
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.
7. Maximum view state error message seen while previewing the rescheduling of a loan (Jira ID: PDRFF-1584/ ND-6110)
Issue Description
While previewing the rescheduling of a loan by clicking the Preview button, the system is displaying the following error message:
“Maximum view state size limit (170 KB) exceeded. Actual view state size for this page was...”
This is because the rescheduling results in a lot of records on the Reschedule page that do not fit within the page size.
Resolution
This issue is now fixed. To resolve this issue, the logic has been updated in the system to only display a limited number of records that the page can accommodate. The rest of the records that are not displayed are displayed on the pages after this. In other words, pagination has been now included in the system for the Amortization Schedule and the Repayment Schedule Summary to display 50 records on each page. This ensures that the records are displayed and distributed over multiple pages such that a page displays 50 records.
Additionally, following four buttons are also added to each page:
-
First Page
-
Next Page
-
Previous Page
-
Last Page
If the system is on the first page, and if the records are more than 50, then only the following buttons are visible on the page:
-
Next Page
-
Last Page
If the system is on the last page, then only the following buttons are visible on the page:
-
First Page
-
Previous Page
If the records are less than 50, then all the four buttons are not visible on the page.
The system is not displaying a confirmation message upon a successful payoff (Jira ID: PDRFF-636/ND-7099)
Fixed Version
This issue has been fixed in the following version:
-
Q2 Loan Servicing Winter'22 (4.1012.136)
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 last bill transaction summary is not getting displayed in the Loan Transaction summary (Jira ID: PDRFF-2314/ND-7216)
Fixed Version
This issue has been fixed in the following version:
-
Q2 Loan Servicing Winter'22 (4.1012.136)
Issue Description
When there is a last but one bill that is unpaid and the loan has reached its maturity, the system is generating the last bill at the maturity date, but it is not generating the transaction summary for the last bill, and hence the last bill transaction summary is not appearing in the Loan Transaction summary.
Resolution
This issue is now fixed. The system is now generating the transaction summary of the last bill and hence the transaction details of the last bill are now visible in the Loan Transaction Summary.
System is not allowing to perform a Rate Change when the Principal Remaining is zero (Jira ID: PDRFF-2014/ND-7030)
Fixed Version
This issue has been fixed in the following versions:
-
Q2 Loan Servicing Winter'22 (4.1012.116)
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 Additional Interest Component is not getting considered when Available Funds is updated during Investor Payout (Jira ID: PDRFF-2510/ND-7080)
Fixed Version
This issue has been fixed in the following version:
-
Q2 Loan Servicing Winter'22 (4.1012.116)
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 not allowing users to create a Backdated Dated Disbursal transaction prior to the Interest Posting transaction date (Jira ID: PDRFF-1946/ND-6547)
Fixed Versions
The fix of this issue is available in the following version:
-
Q2 Loan Servicing Winter'22 (4.1012.98)
Issue Description
-
System is not allowing user to create a backdated dated disbursal transaction prior to the interest posting transaction date. The system validates it with one of the following error messages:
-
CL013424: Disbursal Transaction Date cannot be before the Last Billing Date.
-
CL013425: Disbursal Transaction Date cannot be before the Last Interest Accrual Date. (This error is displayed when billing cycle is not in sync with Interest posting Transaction frequency)
-
-
System is not allowing users to reverse a disbursal transaction prior to the Interest posting transaction date.
Example to Understand the Issue
Let us go to Setup > Go to Custom settings > Org Parameters > and ensure that the Daily Interest Accrual Time is set to EOD.
-
Let us go to May 1, 2013, and create a simple loan of amount $10,000 with following values approve and disburse a partial loan of $5000:
-
Payment Application Mode = Future Dues
-
IPT = True
-
FIT = True
-
Loan Amount = $10,000
-
Interest Rate = 10
-
Term = 1
-
Payment Start Date = April 1, 2013
-
Payment Frequency = Single Payment
-
IPT Frequency = Monthly
-
-
Let us go to April 1, 2013, and disburse loan of amount $5,000 again for transaction date of May 20, 2013. The system displays the following error:
CL013424: Disbursal Transaction Date cannot be before the Last Billing Date.
Resolution
-
System allows user to create a backdated dated disbursal transaction prior to the Interest Posting Transaction date. The repayment schedule, Interest Posting Transaction Amount, Bill Amount, and accruals are adjusted based on this transaction.
-
System allows user to reverse a disbursal transaction prior to the Interest posting transaction date. The repayment schedule, Interest Posting Transaction Amount, Bill Amount, and accruals are adjusted based on this reversal.
-
The system regenerates the Interest Posting Transaction if the user creates a Disbursal Transaction after Interest Posting Transaction Date.
Two Minimum Interest Charge are charged for a split off payment in same bank file (Jira ID: PDRFF-1806/ND-7013)
Fixed Versions
The fix of this issue is available in the following version:
-
Q2 Loan Servicing Winter'22 (4.1012.98)
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 system is displaying an error message when a loan contract is rescheduled after the Winter’22 upgrade (Jira ID: PDRFF-1993 / ND-6526)
Issue Description
When a loan contract is rescheduled after the upgrade from Lithium (3.5054.150) to Winter'22 (4.1012.41), the system is displaying the following error message:
Note
"Invalid decimal: An unexpected error has occurred. Your solution provider has been notified.(loan)"
Also, while performing a rate change for the above loan contracts, the system is displaying the following error message:
Note
"Aggregate Query has too many rows" & "CL010101: Unexpected Exception Invalid decimal: at line 4829"
Resolution
This issue is now fixed. The loan contracts are getting rescheduled, and rate change is performed successfully for those contracts without any error messages.
The system is displaying an error message while running the FloatingRateInterestRevisionDynamicJob after the Winter’22 upgrade (Jira ID: PDRFF-1969/ ND-6517)
Issue Description
After the upgrade from Lithium (3.3030.121) to Winter'22 (4.1012.25), when the FloatingRateInterestRevisionDynamicJob is run to perform the global Rate change for a loan, the system is displaying the following error message:
Note
"Message: Aggregate query has too many rows for direct assignment, use FOR loop Cause: null Stack: External entry point Class.loan.BulkRescheduleAction.<init>: line 167, column 1 Class.loan.BulkInterestRateChangeAction.validate: line 1349, column 1 Class.loan.BulkInterestRateChangeAction.doExecute: line 443, column 1 Class.loan.DBAction.execute: line 18, column 1 Class.loan.FloatingRateInterestRevisionHandler.process: line 573, column 1Class.loan.FloatingRateInterestRevisionDynamicJob.doExecute: line 42, column 1 Class.clcommon.DynamicJob.execute: line 231, column 1 Line number: -1 Type name: System.QueryException Stacktrace -"
Resolution
This issue is fixed now, and the FloatingRateInterestRevisionDynamicJob is running successfully without any error messages.
This section explains the known issues that are fixed as part of the Winter'22 patch (4.1012.25) release.
Note
For details of all the issues fixed in the previous releases of Q2 Loan Servicing, see the Q2 Loan Servicing Patch Release Notes.
The system is calculating incorrect interest and bills in an ARR-enabled loan if a backdated LPT is created before two or more IPTs (JIRA ID: ND-6037)
Issue Description
In an ARR-enabled loan, when a backdated payment is made for a date before two or more IPTs (before two or more cycles), the system is not calculating the newly generated IPTs and the Bills correctly.
Example to understand the issue
Let us perform the following steps:
-
Let us create a lending product that is ARR-enabled.
-
Let us say that today is March 1, 2021, and we create a loan, approve, and disburse.
-
Then let us go to the next IPT date, which is April 1, 2021. The system will generate, say, Bill-1 and IPT-1 in the system.
-
Now let us go to the next IPT date, which is May 1, 2021. The system will generate, say, Bill-2 and IPT-2 in the system.
-
Then let us go to May 10, 2021, and create a backdated LPT-1 of $10,000 for the Transaction Date of March 25, 2021. The following results are observed:
-
IPT-1 and IPT-2 are reversed.
-
Interest Remaining is updated with a value calculated until the current LAD date. LPT-1 does not pay any IPT.
-
Bill-1 & BIll-2 must not remain primary.
-
-
Now let us go to May 11, 2021, so that the SOD jobs are executed. The following results are observed:
-
New IPTs (IPT3 and IPT4) are created in place of IPT-1 & IPT-2 for the due date of April 1, 2021, and May 1, 2021, respectively.
-
The interest in IPT-3 is correctly calculated as follows:
-
(Interest from March 1, 2021, to March 25, 2021) + (Interest from March 25, 2021, to April 1, 2021).
-
This is because the Principal Remaining had changed on March 25, 2021, due to the backdated payment.
-
-
The interest in IPT-4 is incorrectly getting calculated from March 25, 2021, to April 1, 2021. The system must calculate the interest in IPT-4 from April 1, 2021, to May 1, 2021.
-
Bills, Bill-3 and Bill-4, are generated for the Due Dates of April 1, 2021, and May 1, 2021, respectively. But the bill amount in Bill-4 is incorrect due to an incorrect interest in IPT-4.
-
Resolution
This issue is fixed as the internal logic has been updated to reflect correct IPTs and Bills even if the backdated payment is made more than one cycle earlier.
Interest on Investment Order is not getting paid out even if the Interest Posting for Investment Order flag is set to true (Jira ID: ND-6049)
Issue Description
In an FAMZ contract that has the Interest posting for the Investment Order flag set to true, the interest accrued on the investment as mentioned in the Investment Order is not getting paid out to the investors. The payouts to the investors are made through the Investment Payout job.
Example
Let us try to understand this issue with the help of an example.
-
Create an FAMZ contract with the following details and disburse it:
-
Loan Amount = $10,000
-
Contract Date = March 1, 2020
-
Payment Frequency = Monthly
-
Term = 60 months
-
Interest Rate = 10%.
-
Interest Posting on Investment Order = True
-
-
Let us create an Investment Order on the existing contract with the following details and activate it.
-
Investment Amount = $5,000
-
Contract Date = March 1, 2020
-
Payment Frequency = Monthly
-
-
Let us go to April 1, 2020, and run the Investment Order Interest Accrual Job.
The system generates a bill.
-
Let us pay the bill and run the Investment Order Interest Accrual Job.
The system calculates the following:
-
Principal Amount Paid = $481.54
-
Investment Order Balance = $4,518.16
-
Interest Remaining = $41.66
-
-
As part of the Investor Payout, the principal and interest should get paid out, however, the interest as mentioned in the Investment Order is not getting paid even when the Investment Order flag is set to true.
Note
This issue occurs only when Interest Posting for Investment Order flag is set to true.
Resolution
The issue is fixed by adding a validation that prevents the users from setting the Interest Posting for Investment Order flag in the FAMZ loan contracts to True. So, now, if the users try to set this flag to true, the system displays the following error message:
“Enable Interest Posting for IO is not allowed for this product type.”
As a resolution to this issue, the interest mentioned in the Investment Order is getting paid out after the Investor Payout Job is successfully run.
Issue Description
When the Interest Posting Dynamic Job is run for the single payment loans that have the interest posting frequency set to the billing frequency, the system displays the following error message:
Note
First error: Apex heap size too large.
Resolution
This issue is now fixed, and the Interest Posting Dynamic Job is running successfully without any error messages.
Issue Description
For an FAMZ single payment loan, if the Maintain Delinquency flag is set to false, the reversal of the rescheduled loan is failing with the following error message:
“CL019443: DML Exception in Bulk Reschedule Reversal Transaction. Duplicate id in list: a813t000000gZ5JAUU.”
Example
Let us try to understand this issue with the help of an example.
-
Create an FAMZ contract with the following details and disburse it:
-
Amount = $10,000
-
Term = 12 months
-
Interest Rate = 10%.
-
Interest Posting Frequency = Single Payment
-
Interest Calculation Method = Declining Balance
-
Payment Frequency = Single Payment
-
Payment Start Date = March 1, 2020
-
Disbursal Date = March 1, 2019
-
Payment Application Mode = Future Dues
-
Interest Type = Fixed
-
-
Change the system date to March 1, 2020 without running any batch Jobs and only run the 2 DAG Jobs which are Billing Amz Dynamic Job and Interest Posting Amz Dynamic Job.
-
Reschedule the loan with the following parameters:
-
Repayment Start Date = July 1, 2020
-
Number of Installments =1
-
Reschedule Balance = Principal Remaining
-
Maintain Delinquency = False.
-
-
Then reverse the rescheduled transaction.
The reversal of a rescheduled FAMZ single payment loan should work without any exception however, it is not working if the Maintain Delinquency is set to False.
Resolution
While performing a reschedule reversal certain Interest Posting Transactions are discarded, these discarded Interest Posting Transactions are again considered for delinquency due to which same Interest Posting Transaction is added twice, causing duplicate Id exception.
This issue is now fixed by adding a conditional check to not consider the discarded Interest Posting Transactions. The Reschedule Reversal is working fine even when Maintain Delinquency is set as False.
Issue Description
When a bill is paid for a cycle and the Pay Future Dues Timely flag is set to false, the system is creating incorrect late charges in the payoff quote. Late charge is getting created for the last bill which has already been paid.
Example
Let us try to understand this issue with the help of an example.
-
Create a contract with the following details and disburse it:
-
Amount = $10,000
-
Term= 10 months
-
Interest Rate= 5%.
-
Interest Posting Frequency = Billing frequency
-
Interest Posting enabled = True
-
Interest Type = Fixed Payment
-
Frequency = Monthly
-
Disbursal Date = March 20, 2013
-
Pay Future Dues Timely = False
-
Late Fees = $30
-
Late Fee Calculation method = Fixed
-
Prepayment Penalty = Fixed
-
-
Now let us go to April 20, 2013.
The system generates a bill and the value is as follows:
-
Amount Due = $1,026.06
-
-
Now let us create a payment of $1,026.06 with the Transaction Date as April 20, 2013 and clear it.
-
Now let us go to June 20, 2013.
-
Let us generate a payoff quote on June 20, 2013 and the payoff quote generated will have the values as follows:
-
Unpaid Late Charge: $30
-
Interest Accrued =$0
-
Total Payoff Amount = $9,623.76
-
Interest paid till Payoff Date = $41.67
-
Interest posted = $75.16
-
Prepayment Penalty = $500
But the system is showing as follows:
-
Payoff Amount = $9,653.76
-
Unpaid Late Charge = $60
The system is considering the late charges for April 20, 2013, even though the payment was made on time.
-
Note
The issue is occurring since the Pay Future Dues Timely flag was set to false.
Resolution
The issue is fixed now. The late charge is not getting calculated for the bill which is paid on time.
Loan balance and Adjusted Interest Capitalized are getting generated with incorrect values during a backdated loan payoff (Jira ID: ND-6058)
Issue Description
On doing a backdated loan payoff, after the loan closure, the loan Balance field value is getting calculated in negative and also the Adjusted Interest Capitalized field is not getting updated to zero.
Example
Let us try to understand this issue with the help of an example.
-
Create a loan with the following details and disburse it:
-
Amount = $10,000
-
Contract Date = March 1, 2020
-
Payment Frequency = Monthly
-
Interest Rate = 10%
-
Term = 10 months
-
Capitalization= True
-
Interest Posting Frequency = Billing Frequency
-
-
Now let us go to April 1, 2020.
The system generates a bill and creates an Interest Posting Transaction.
-
Let us create a Loan Payment Transaction on April 3, 2020, and clear the bill.
-
Now let us go to May 1, 2020.
The system will generate the bill and the Interest Posting Transaction will get created again.
-
Let us create a backdated Loan Payment Transaction on May 1, 2020.
The system recalculates the Payoff Amount for the transaction date May 1, 2020.
-
Now let us go to April 10. 2020. Let us overwrite the Transaction Amount and update the value to $11,000.
-
Let us save the Loan Payment Transaction.
-
The loan status should be updated to Closed – Obligations Met.
-
The Adjusted Interest Capitalized should be non-zero as the loan is closed and the loan balance should be positive after the backdated payment.
-
But the loan balance is getting calculated as a negative value and the Adjusted Interest Capitalized field is not getting updated to zero after the loan closure.
-
Resolution
The issue is fixed now. When a backdated Payoff is done and the loan is closed, Adjusted Interest Capitalized value is added to the excess and the loan balance is getting updated correctly.
Issue Description
The Prepayment Penalty amount is getting incorrectly calculated when the fee amount is calculated as a percentage of the Principal Balance and when the Pay Future Dues Timely flag is set to true.
Example
Let us try to understand this issue with the help of an example.
-
Create a loan with the following details and disburse it:
-
Amount = $10,000
-
Contract Date = March 20, 2020
-
Payment Frequency = Monthly
-
Interest Rate = 5%
-
Term = 10 months
-
Prepayment Penalty Fee = $5
-
Time of charge = Prepayment Penalty
-
Fee Calculation method = Amount calculated as a percentage of the Principal Balance
-
Pay Future Dues Timely Flag = True
-
Interest Posting Frequency = Billing Frequency
-
Interest Posting enabled = True.
-
-
Now let us go to April 20, 2020.
The system will generate the bill.
-
Let us generate a payoff quote on April 19, 2020.
This should update the values as follows:
-
Payoff Amount = $7,468.37
-
Interest Accrued = $28.54
-
Interest paid till payoff date = $154.73
-
Prepayment Penalty = $354.28
-
Principal Balance = $7,085.55
But the system is updating the values incorrectly as follows:
-
Payoff Amount = $7,614.09
-
Interest Accrued = $28.54
-
Interest paid till payoff date = $154.73
-
Prepayment Penalty = $500
-
Principal Balance = $7,085.55
The Prepayment Penalty amount is getting incorrectly calculated.
-
Resolution
The issue is fixed now. The prepayment penalty amount is getting calculated correctly when the fee amount is calculated as a percentage of the principal balance and when the Pay Future Dues Timely flag is set to true.
The system is displaying an error message while running the Data Mapper Dynamic Job (Jira ID: ND-6042)
Issue Description
When the Data Mapper Dynamic Job is run for 300k records, it is failing with the following null pointer exception: “Attempt to de-reference a null object.”
Resolution
When the external batch for Data Mapper Dynamic Job was null, it was throwing the null pointer exception. As a solution to it, the null check was added.
The issue is fixed now and the Data Mapper Dynamic Job is running successfully.
The system is displaying an error message while creating the LPTs for loans created before the Winter'22 upgrade (Jira ID: PDRFF-1915 / PDRFF- 1828 / ND-6370)
Issue Description
When a loan payment transaction is done for loan accounts created before the upgrade from Lithium (3.3030.121) to Winter'22(4.1012.25), the system is displaying the following error message:
"Rolling back the batch. Message - Argument cannot be null. CL010100: Unexpected DML Exception Insert failed. First exception on row 0; first error: FIELD_CUSTOM_ VALIDATION_EXCEPTION, Rolling back the batch. Message - Argument cannot be null".
However, LPTs are getting created for loan accounts created after the upgrade without any issues.
Resolution
The issue is fixed now, and the LPTs are getting created without any issues.
There is a new field called loan_Adjusted_Interest_c introduced in the Summer'22 release. Due to this field, the system is displaying the 'Argument cannot be null' error while creating LPTs as this value is Null for all loan contracts before the upgrade.
As a fix, the field loan_Adjusted_Interest_c is updated to '0' instead of Null for all the loan contracts before the upgrade.
The system is displaying an error message when a loan contract is rescheduled after the winter’22 upgrade (Jira ID: PDRFF-1831 / ND-6371)
Issue Description
When an existing loan contract is rescheduled after the upgrade from Lithium (3.3005) to Winter'22 (4.1014.10), the system is displaying the following null point error message:
Note
" Argument cannot be null."
Resolution
The issue is fixed now, and the loan contracts are getting rescheduled without any issues.
There is a new field called Due Additional Interest for existing loan_Repayment_ Schedule_c under the loan contract introduced in the Platinum release. Due to this field, the system is displaying the 'Argument cannot be null' error while rescheduling, as this value is Null for all loan contracts after the upgrade.
As a fix, the field Due Additional Interest is getting updated to '0' instead of Null for all the loan contracts after the upgrade.
Issue Description
When the Periodic Charge Dynamic Job is run for loans, the system is displaying the following error message:
Note
"First error: Apex heap size too large: 13535833"
Resolution
The issue is fixed now, and the Periodic Charge Dynamic Job is running successfully without any error messages.
Backdated LPT before Index Rate Change is updating Interest fields incorrectly (Jira ID: PDRFF- 1810 / ND-6208)
Issue Description
The Interest Accrued and the Interest Remaining fields are getting updated incorrectly after manually clearing the backdated payment because of the Index Rate Change OLT, that exists after the LPT creation Date.
Example to understand the issue
-
Create a Lending Product with the following configuration:
-
Type = Simple Product
-
Is Interest Posting Transaction Enabled = True
-
Interest Type = Floating
-
-
Create a contract for the newly created product and move the date forward a few days, resulting in the accrual of those days.
-
Select the Payment Frequency as Monthly.
-
Select the Contract Creation Date as June 12, 2022.
-
Select the next Index Rate Change action date as July 5, 2022.
-
Now, move the system date to July 5, 2022.
-
Notice that the value of the Interest Rate field is changed now.
-
The last transaction details are updated, and the Interest Accrued field value is moved to the Interest Remaining field.
-
-
On the same day, make a backdated payment with the Transaction Date as July 4, 2022.
As a result, the value in the Interest Remaining field remains the same, but a day’s interest is accrued at the new rate and is updated in the Interest Accrued field.
Resolution
This issue is fixed as a validation has been added to block any backdated payments before the Index Rate change.
Issue Description
When a future dated payoff quote is generated after the current maturity date, the future IPTs are not getting considered in the payoff quote.
Example to understand the issue
-
Let us create a simple loan contract with the following details and disburse it:
-
Payment Frequency = Monthly
-
Amount = $10,000
-
Rate = 10%
-
Terms = 2
-
Accrual Type = Accrual To Date
-
Holiday Treatment Setup Applied on = Interest Capitalization Posting
-
Capitalization Enabled = False
-
Interest Posting Frequency = Billing Frequency
-
Contract Start Date = March 1, 2013
-
-
Let us go to June 1, 2013 and create a future dated payoff quote with payoff date July 1, 2013.
The payoff quote values will be updated as follows:
-
Total Payoff Amount = $10,333.33
-
Interest Posted = $333.33
-
Interest Accrued = $0.00
However, the values are updated as follows:
-
Total Payoff Amount = $10,333.33
-
Interest Posted = $250
-
Interest Accrued = $83.33
-
The Interest Posted value is getting updated incorrectly.
Resolution
This issue is now fixed, and the interest values are getting updated in the future dated payoff quote.
Addition of a new API for creation and clearing of payments in Q2 Loan Servicing and Q2 Marketplace applications (JIRA ID: ND-6067/MD-477)
Enhancement Description
Earlier, Q2 Loan Servicing and Q2 Marketplace did not have an API for payment creation and clearing. Now, with the Winter’22 patch release, you can use the following API for payment creation and clearing in Q2 Loan Servicing and Q2 Marketplace applications:
createLoanPaymentTransactions()
Note
This API is created in the Q2 Loan Servicing package.
When a payment is created, and if the Loan Payment flag in the Transaction Approval Configuration is set to True, then the payment will not be cleared unless it is approved. Hence, this API can be used for the creation and the clearing of the payment.
Note
For more details on this API, see the Global Abstract Classes > AbstractLoanActions > createLoanPaymentTransactions section of the Q2 Loan Servicing Global Methods guide.
Within the Q2 Loan Servicing application, this API can be used directly for any payment creation and clearing.
Within Q2 Marketplace, this API is internally called by the system when you are creating a payment through the Upload Bank Statement UI in the Q2 Marketplace application. However, for the Upload Bank Statement with the API to work successfully, ensure that you manually install the following Winter’22 patch version of Q2 Loan Servicing: 4.1012.25. This is because this API is created in the Q2 Loan Servicing package and not in the Q2 Marketplace package.
Q2 Marketplace Winter'22 patch (4.1003.2)
Enhancement Description
Before the Winter'22 patch release, Q2 Loan Servicing was enhanced to give you the ability to select external interest rates. This was done by internally calling an external calculator.
With the Winter'22 patch release, Q2 Loan Servicing gives you the option to specify an external interest amount manually. You can do this with the help of a UI or an API.
With the help of the UI, to be able to manually specify an interest amount in the system, you have to create a manual OLT where you have to specify a bill amount. This bill amount would then be considered as the Interest Remaining amount for an Interest Only loan
in an ARR-enabled loan contract. To create a manual OLT, you have to select the Manual Billing option from the Loan Actions of the L oan Quick Menu.
You can also use the following API to create a manual bill to specify an interest amount: createBill(). You can reverse a manual bill with the help of the following API: reverseManualBill()
Note
For more information on these APIs, see the Global Abstract Classes > AbstractLoanActions > createBill and reverseManualBill sections of the Q2 Loan Servicing Global Methods guide.
For more information on the ARR feature and the enhancements made in it, see the Contract Management > Interest Calculation > Alternative Reference Rates section of the Q2 Loan Servicing User Guide for Simple Loans guide.
Enhancement for Payoff Quote: Now the future-dated payoff quote computation is also considering late charges (JIRA ID: ND-5827)
Enhancement Description
Earlier, the future-dated payoff quotes were able to calculate a payoff quote considering the following future events:
-
Interest Rate change as configured on Rate Schedules.
-
Payment amount changes as configured on the Flexible Payment Plan.
-
Prepayment Penalty configuration.
After the Winter’22 patch release, the future dated payoff quote will now include the late charges too.
Addition of a new API for creation and clearing of payments in Q2 Loan Servicing and Q2 Marketplace applications (JIRA ID: ND-6067/MD-477)
Enhancement Description
Earlier, Q2 Loan Servicing and Q2 Marketplace did not have an API for payment creation and clearing. Now, with the Winter’22 patch release, you can use the following API for payment creation and clearing in Q2 Loan Servicing and Q2 Marketplace applications:
-
createLoanPaymentTransactions()
Note
This API is created in the Q2 Loan Servicing package.
When a payment is created, and if the Loan Payment flag in the Transaction Approval Configuration is set to True, then the payment will not be cleared unless it is approved. Hence, this API can be used for the creation and the clearing of the payment.
Note
For more details on this API, see the Global Abstract Classes > AbstractLoanActions section of the Q2 Loan Servicing Global Methods guide.
Within the Q2 Loan Servicing application, this API can be used directly for any payment creation and clearing.
Within Q2 Marketplace, this API is internally called by the system when you are creating a payment through the Upload Bank Statement UI in the Q2 Marketplace application. However, for the Upload Bank Statement with the API to work successfully, ensure that you manually install the following Winter’22 patch version of Q2 Loan Servicing: 4.1012.13. This is because this API is created in the Q2 Loan Servicing package and not in the Q2 Marketplace package.
Enhancement Description
Before the Winter'22 patch release, Q2 Loan Servicing was enhanced to give you the ability to select external interest rates. This was done by internally calling the external calculator.
With the Winter'22 patch release, Q2 Loan Servicing gives you the option to specify an external interest amount manually. You can do this with the help of a UI or an API.
With the help of the UI, to be able to manually specify an interest amount in the system, you have to create a manual OLT where you have to specify a bill amount. This bill amount would then be considered as the Interest Posted amount for an Interest Only (IO) loan in an ARR-enabled loan contract.
To create a manual OLT, you have to select the Manual Billing option from the Loan Actions of the Loan Quick Menu.
You can also use the following API to create a manual bill to specify an interest amount: createBill().
You can reverse a manual bill with the help of the following API: reverseManualBill()
Note
For more information on these APIs, see the Global Abstract Classes >AbstractLoanActions of the Q2 Loan Servicing Global Methods guide.
Enhancement Description
Earlier future dated payoff quotes were able to calculate a payoff quote considering the following future events:
-
Interest Rate change as configured on Rate Schedules.
-
Payment amount changes as configured on the Flexible Payment Plan.
-
Prepayment Penalty configuration.
After the Winter’22 patch release, the future dated payoff quote will now include the late charges too.
The system is calculating incorrect interest in an ARR-enabled loan if a backdated LPT is created before two or more IPTs (JIRA ID: ND-6037)
Issue Description
In an ARR-enabled loan, when a backdated payment is made for a date before two or more IPTs (before two or more cycles), the system is not calculating the newly generated IPTs and the Bills correctly.
Example to understand the issue
Let us perform the following steps:
-
Let us create a lending product that is ARR-enabled.
-
Let us say that today is March 1, 2021, and we create a loan, approve, and disburse.
-
Then let us go to the next IPT date, which is April 1, 2021. The system will generate, say, Bill-1 and IPT-1 in the system.
-
Now let us go to the next IPT date, which is May 1, 2021. The system will generate, say, Bill-2 and IPT-2 in the system.
-
The let us go to May 10, 2021, and create a backdated LPT-1 of $10,000 for the
Transaction Date March 25, 2021.
The following results are observed:
-
IPT-1 and IPT-2 are reversed.
-
Interest Remaining is updated with a value calculated until the current LAD date.
-
LPT-1 does not pay any IPT.
-
Bill-1 & BIll-2 must not remain primary.
-
-
Now let us go to May 11, 2021, so that the SOD jobs are executed.
The following results are observed:
-
New IPTs (IPT3 and IPT4) are created in place of IPT-1 & IPT-2 for the due date of April 1, 2021, and May 1, 2021, respectively.
-
The interest in IPT-3 is correctly calculated as follows: § (Interest from March 1, 2021, to March 25, 2021) + (Interest from March 25, 2021, to April 1, 2021). This is because the Principal Remaining had changed on March 25, 2021, due to the backdated payment.
-
The interest in IPT-4 is incorrectly getting calculated from March 25, 2021, to April 1, 2021. The system must calculate the interest in IPT-4 from April 1, 2021, to May 1, 2021.
-
Bills, Bill-3 and Bill-4 are generated for the Due Dates of April 1, 2021, and May 1, 2021, respectively.
-
But the bill amount in Bill-4 is incorrect due to an incorrect interest in IPT-4.
Resolution
This issue is fixed as the internal logic has been updated to reflect correct IPTs and Bills even if the backdated payment is made more than one cycles earlier.
Interest on Investment Order is not getting paid out even if the Interest Posting for Investment Order flag is set to true (Jira ID: ND-6049)
Issue Description
In an FAMZ contract that has the Interest posting for Investment Order flag set to true, the interest accrued on the investment as mentioned in the Investment Order is not getting paid out to the investors. The payouts to the investors are made through the Investment Payout job.
Example
Let us try to understand this issue with the help of an example.
-
Create an FAMZ contract with the following details and disburse it:
-
Loan Amount = $10,000
-
Contract Date = March 1, 2020
-
Payment Frequency = Monthly
-
Term = 60 months
-
Interest Rate = 10%.
-
Interest Posting on Investment Order = True
-
-
Let us create an Investment Order on the existing contract with the following details and activate it.
-
Investment Amount = $5,000
-
Contract Date = March 1, 2020
-
Payment Frequency = Monthly
-
-
Let us go to April 1, 2020, and run the Investment Order Interest Accrual Job.
The system generates a bill.
-
Let us pay the bill and run the Investment Order Interest Accrual Job.
The system calculates the following:
-
Principal Amount Paid = $481.54
-
Investment Order Balance = $4,518.16
-
Interest Remaining = $41.66
-
As part of the Investor Payout, the principal and interest should get paid out, however the interest as mentioned in the Investment Order is not getting paid even when the Investment Order flag is set to true.
Note
This issue occurs only when Interest Posting for Investment Order flag is set to true.
Resolution
The issue is fixed by adding a validation that prevents the users from setting the Interest Posting for Investment Order flag in the FAMZ loan contracts to True. So, now, if the users try to set this flag to true, the system displays the following error message: “Enable Interest Posting for IO is not allowed for this product type.”
As a resolution to this issue, the interest mentioned in the Investment Order is getting paid out after the Investor Payout Job is successfully run.
Issue Description
When the Interest Posting Dynamic Job is run for the single payment loans that have the interest posting frequency set to the billing frequency, the system displays the following error message: ” First error: Apex heap size too large.”
Resolution
This issue is now fixed, and the Interest Posting Dynamic Job is running successfully without any error messages.
Issue Description
For an FAMZ single payment loan, if the Maintain Delinquency flag is set to false, the reversal of the rescheduled loan is failing with the following error message: “CL019443: DML Exception in Bulk Reschedule Reversal Transaction. Duplicate id in list: a813t000000gZ5JAUU.”
Example
Let us try to understand this issue with the help of an example.
-
Create an FAMZ contract with the following details and disburse it:
-
Amount = $10,000
-
Term = 12 months
-
Interest Rate = 10%.
-
Interest Posting Frequency = Single Payment
-
Interest Calculation Method = Declining Balance
-
Payment Frequency = Single Payment
-
Payment Start Date = March 1, 2020
-
Disbursal Date = March 1, 2019
-
Payment Application Mode = Future Dues
-
Interest Type = Fixed
-
-
Change the system date to March 1, 2020 without running any batch Jobs and only run the 2 DAG Jobs which are Billing Amz Dynamic Job and Interest Posting Amz Dynamic Job.
-
Reschedule the loan with following parameters:
-
Repayment Start Date = July 1, 2020
-
Number of Installments =1
-
Reschedule Balance = Principal Remaining.
-
Maintain Delinquency = False.
-
-
Then reverse the reschedule transaction.
The reversal of a rescheduled FAMZ single payment loan should work without any exception however, it is not working if the Maintain Delinquency is set to False.
Resolution
While performing a reschedule reversal certain Interest Posting Transactions are discarded, these discarded Interest Posting Transactions are again considered for delinquency due to which same Interest Posting Transaction is added twice, causing duplicate Id exception.
This issue is now fixed by adding a conditional check to not consider the discarded Interest Posting Transactions. The Reschedule Reversal is working fine even when Maintain Delinquency is set as False.
Issue Description
When a bill is paid for a cycle and the Pay Future Dues Timely flag is set to false, the system is creating incorrect late charges in the payoff quote. Late charge is getting created for the last bill which has already been paid.
Example
Let us try to understand this issue with the help of an example.
-
Create a contract with the following details and disburse it:
-
Amount = $10,000
-
Term= 10 months
-
Interest Rate= 5%.
-
Interest Posting Frequency= Billing frequency
-
Interest Posting enabled= True
-
Interest Type = Fixed
-
Payment Frequency = Monthly
-
Disbursal Date = March 20, 2013
-
Pay Future Dues Timely = False
-
Late Fees = $30
-
Late Fee Calculation method = Fixed
-
Prepayment Penalty = Fixed
-
-
Now let us go to April 20, 2013.
The system generates a bill and the value is as follows:
-
Amount Due = $1,026.06
-
-
Now let us create a payment of $1,026.06 with the Transaction Date as April 20, 2013 and clear it.
-
Now let us go to June 20, 2013. Let us generate a payoff quote on June 20,2013 and the payoff quote generated will have the values as follows:
-
Total Payoff Amount = $9,623.76
-
Unpaid Late Charge: $30
-
Interest Accrued =$0
-
Interest paid till Payoff Date = $41.67
-
Interest posted = $75.16
-
Prepayment Penalty = $500
But the system is showing as follows:
-
Payoff Amount = $9,653.76
-
Unpaid Late Charge = $60
The system is considering the late charges for April 20, 2013, even though the payment was made on time.
-
Note
The issue is occurring since the Pay Future Dues Timely flag was set to false.
Resolution
The issue is fixed now. The late charge is not getting calculated for the bill which is paid on time.
Loan balance and Adjusted Interest Capitalized are getting generated with incorrect values during a backdated loan payoff (Jira ID: ND-6058)
Issue Description
On doing a backdated loan payoff, after the loan closure, the loan Balance field value is getting calculated in negative and also the Adjusted Interest Capitalized field is not getting updated to zero.
Example
Let us try to understand this issue with the help of an example.
-
Create a loan with the following details and disburse it:
-
Amount = $10,000
-
Contract Date= March 1, 2020
-
Payment Frequency= Monthly
-
Interest Rate= 10%
-
Term= 10 months
-
Capitalization= True
-
Interest Posting Frequency= Billing Frequency
-
-
Now let us go to April 1, 2020. The system generates a bill and creates an Interest Posting Transaction.
-
Let us create a Loan Payment Transaction on April 3, 2020, and clear the bill.
-
Now let us go to May 1, 2020.
The system will generate the bill and the Interest Posting Transaction will get created again.
-
Let us create a backdated Loan Payment Transaction on May 1, 2020.
The system recalculates the Payoff Amount for the transaction date May 1, 2020.
-
Now let us go to April 10. 2020. Let us overwrite the Transaction Amount and update the value to $11,000.
-
Let us save the Loan Payment Transaction.
The loan status should be updated to Closed – Obligations Met. The Adjusted Interest Capitalized should be non-zero as the loan is closed and the loan balance should be positive after the backdated payment.
But the loan balance is getting calculated as a negative value and the Adjusted Interest Capitalized field is not getting updated to zero after the loan closure.
Resolution
The issue is fixed now. When a backdated Payoff is done and the loan is closed, Adjusted Interest Capitalized value is added to the excess and loan balance is getting updated correctly.
Issue Description
The Prepayment Penalty amount is getting incorrectly calculated when the fee amount is calculated as a percentage of the Principal Balance and when the Pay Future Dues Timely flag is set to true.
Example
Let us try to understand this issue with the help of an example.
-
Create a loan with the following details and disburse it:
-
Amount = $10,000
-
Contract Date = March 20, 2020
-
Payment Frequency = Monthly
-
Interest Rate = 5%
-
Term = 10 months
-
Prepayment Penalty Fee = $5
-
Time of charge = Prepayment Penalty
-
Fee Calculation method = Amount calculated as a percentage of the Principal Balance
-
Pay Future Dues Timely Flag = True
-
Interest Posting Frequency = Billing Frequency
-
Interest Posting enabled = True.
-
-
Now let us go to April 20, 2020.
The system will generate the bill.
-
Let us generate a payoff quote on April 19, 2020.
This should update the values as follows:
-
Payoff Amount = $7,468.37
-
Interest Accrued = $28.54
-
Interest paid till payoff date = $154.73
-
Prepayment Penalty = $354.28
-
Principal Balance = $7,085.55
-
-
But the system is updating the values incorrectly as follows:
-
Payoff Amount = $7,614.09
-
Interest Accrued = $28.54
-
Interest paid till payoff date = $154.73
-
Prepayment Penalty = $500
-
Principal Balance = $7,085.55
The Prepayment Penalty amount is getting wrongly calculated.
-
Resolution
The issue is fixed now. The prepayment penalty amount is getting calculated correctly when the fee amount is calculated as a percentage of the principal balance and when the Pay Future Dues Timely flag is set to true.
The system is displaying an error message while running the Data Mapper Dynamic Job (Jira ID: ND- 6042)
Issue Description
When the Data Mapper Dynamic Job is run for 300k records, it is failing with the following null pointer exception:
Note
“Attempt to de-reference a null object.”
Resolution
When the external batch for Data Mapper Dynamic Job was null, it was throwing the null pointer exception.
As a solution to it, the null check was added. The issue is fixed now and the Data Mapper Dynamic Job is running successfully.
Change Date |
Description of Change |
---|---|
December 2022 |
Published release notes for General Availability release. |
February 13, 2023 |
|
April 24, 2023 |
|
May 15, 2023 |
|
June 5, 2023 |
|
October 30, 2023 |
|
November 20, 2023 |
|
January 08, 2024 |
|
January 29, 2024 |
|
January 29, 2024 |
|
February 19, 2024 |
|
March 11, 2024 |
|
April 1, 2024 |
Published the release notes for: |
April 22, 2024 |
|
April 24, 2024 |
Published the release notes for: |
May 13, 2024 |
|
June 24, 2024 |
|
July 15, 2024 |
|
August 05, 2024 |
|
August 26, 2024 |
|
September 16, 2024 |
Published the release notes for:
|
September 24, 2024 |
|
October 07, 2024 |
Added PDRFF-3339/ND-8323 and PDRFF-2484/ND-8206 to Issues fixed in Q2 Loan Servicing 4.1012.218 |
October 28, 2024 |
|
October 30, 2024 |
Added PDRFF-3412/ND-8486 to Issues fixed in Q2 Loan Servicing 4.1012.221 |
November 18, 2024 |
Updated descriptions for Jira ID PDRFF-2990/PDRFF-2975/MD-486 in Issues fixed in Q2 Loan Servicing 4.1012.193 |