April 2024 Release Notes
1. Preface
This is a living document, and its contents may be updated often. Any changes to the contents of this document are listed in the Change record section. Make sure that you have the latest version for use.
The contents of this document are applicable to all the customers who have installed the April 2024 release version (4.5000) of Q2 Loan Servicing and Q2 Marketplace for the first time or have upgraded from an earlier version. You can access the release notes of the previous releases from the Q2 Customer Portal or from Q2 Lending Help Center.
1.1 Purpose of this document
This document provides information on the following for the April 2024 release on Q2 Loan Servicing:
1.2 Intended audience
The audience of this document includes business users, implementers, and system administrators.
1.3 Prerequisites for use
This document assumes a basic knowledge of the product concepts, the product release, and the Salesforce platform.
1.4 List of abbreviations
There are no new abbreviations added or modified in the Q2 Loan Servicing and Q2 Marketplace April 2024 release.
2. Installation information
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 Q2 Loan Servicing and Q2 Marketplace.
3. Upgrade considerations
For information on the upgrade steps, see release-related steps in the Q2 Product Upgrade Guide.
4. New features and enhancements
This section briefly describes the new features and enhancements added in this release.
For a detailed description of the new features and enhancements, see the following guides published over the Q2 Customer Portal:
Q2 Loan Servicing User Guide for Simple Loans
Q2 Loan Servicing User Guide for Amortized Loans
Q2 Loan Servicing User Guide for Line of Credit Loans
Q2 Loan Servicing User Guide for Master Facility
Q2 Loan Servicing Administration Guide
4.1 Accrual of Fees - Effective Interest method (Jira ID: ND-7405)
Feature Description
Till now, Q2 Loan Servicing offered the ability to accrue fees based on two methods; Straight Line and Income Based.
With the April 2024 release, a third method of fee accrual has been introduced, due to which the lender can now do the fee accrual on the basis of Annualized Effective Interest rate. This method is required for accounting purpose in addition to the Straight Line method and Income Based method.
As per this method, the system creates the fee accrual transactions at the end of the month based on the selected time counting method. The fee accrual transactions are created based on the annualized effective interest rate provided by the users.
4.2 Broker Commission - Phase 2 (Jira ID: ND-7386)
Feature Description
Broker commission feature is enhanced with the following capabilities in the April 2024 release:
Here is the list of the enhancements:
Calculation of trail broker commission, depending on if the payoff is happening on the due date or in the mid of the cycle
Update of the Next Commission Date upon a rescheduling
-
The OLT reversal functionality for trail commission. Whenever an OLT reversal happens for the following events the previous and next commission posting dates on the contract are updated from the OLT Loan-snapshot
Reschedule
Charge Waiver
Interest Waiver
Additional Interest Waiver
Rate Change
This feature now supports Broker commission calculation for the backdated payment for more than one cycle. Every time a backdated payment happens before the previous installment date of the loan, the Next Commission Posting Date and the Previous Commission Posting Date is changed as per the payment cycle and when the job runs again, the transactions are adjusted.
4.3 Automated Consolidated Payments (Jira ID: ND-2971)
Feature Description
This feature allows FIs to bundle the loan payment transactions (LPTs) of child loans under a given master facility, based on several factors:
All these LPTs across the child loans must have the same payment due date
All these LPTs should have the same bank account for debit
All LPTs must belong to a single master facility
All LPTs should have one payment mode
Benefits of the feature:
Borrower's account is debited only once on the due day, for the consolidated amount of all the LPTs satisfying the above four criteria
If Borrower's bank account is deficient in money on the due date, then only one consolidated cash receipt will be reversed, and hence borrower is charged dishonor fee only once
5. Fixed issues
The following table lists the issues fixed in this release:
Issue ID | Description |
---|---|
Schedules are incorrect when repayment plan has Principal Only without the payment amount for 11 terms using the FinCalc version 3. | |
ND-7035 | Next interest posting date is not updating on the Investment Order while creating it through API. |
ND-7239 | If the system fails to reapply one event, then other events that are marked for reapplying and have the transaction date after the failed event's date will be reapplied. |
PD-1699 | The system is displaying an error message when Step-up schedule is provided. |
6. Known issues
This section briefly describes the known issues with this release.
Issue ID | Description |
---|---|
ND-7800 | Payment equivalent to payoff is not satisfying the first bill for the loan contracts with Payment Mode set to Deposit. |
ND-7799 | Schedules are getting generated for holidays in the month of October. |
ND-7764 | For the loan contracts with a Flexible Repayment Plan having ten terms of Interest-only period, and Funding in Tranches enabled, the last billing cycle is reflecting incorrect Interest Posting Due Amount. |
ND-7759 | After the payoff reversal transaction, the Next accrual Date on the Prepaid Fee UI is getting updated incorrectly. |
ND-7604 | Additional interest component is getting posted on holidays as well. |
ND-7449 | The loan payoff transaction is not following the behavior configured in the spread, and is not paying the interest posted prior to the principal remaining. |
ND-7828 | Even after a loan payoff is made, the loan contract is not getting closed; the state is not getting changed to Closed-Obligation met. |
ND-7827 | The system is throwing a validation message while a user tries to change the minimum and maximum interest rate on the product. |
ND-7835 | The system is calculating an incorrect value for the total payoff amount due to an incorrect computation of the total unpaid additional interest. |
7. New and modified objects
This section briefly describes the object added or modified in this release.
For a complete list of the Q2 Loan Servicing and Q2 Marketplace objects, see the Q2 Loan Servicing and Q2 Marketplace Data Dictionary over theQ2 Customer Portal and the Q2 Lending Help Center.
7.1 New objects
This section briefly describes the object added in this release.
7.1.1 Consolidated Retry Configuration (loan__Consolidated_Retry_Configuration__c)
This object, added for the Automated Consolidated Payment feature, is used to store NSF (Non Sufficient Funds)-related details for a master facility contract.
Optional Fields
The following table describes the details of the optional fields of the Consolidated Retry Configuration object:
Optional Fields | |||
---|---|---|---|
Field Label | Field API Name | Description | Data Type |
Apply NSF on Attempt | loan__Apply_NSF_on_Attempt__c | This field provides an option for you to select the attempt number(s) on which NSF is to be charged. | Picklist (Multi-Select) |
Number of Retry Attempts | loan__Number_of_Retry_Attempts__c | This field stores the number of retrial attempts to be made for a consolidated payment. | Number |
Retry | loan__Retry__c |
If the value of this picklist is Enabled, then the system will retry a rejected or a reversed consolidated payment as per the retry configuration. The values of this picklist are:
|
Picklist |
Retry Attempt Interval (in days) | loan__Retry_Attempt_Interval__c | This field indicates the number of days between two retry attempts. The numbers of days between two retry attempts begin after the rejection date. For example, if the retry was rejected on January 2 and the value of this field is 5, then the system will retry the consolidated payment 5 days after January 2. | Number |
Return Codes for Retry | loan__Return_Codes_for_Retry__c | This field indicates the return codes to be selected for which the system must retry the consolidated payment |
Picklist (Multi-Select) |
System Generated Fields | |||
---|---|---|---|
Field Label | Field API Name | Description | Data Type |
Consolidated Retry Configuration | Name | This field stores the unique name of the consolidated retry configuration. | Text(80) |
Created By | CreatedBy | This field stores the user who has created the consolidated retry configuration record. | Lookup(User) |
Last Modified By | LastModifiedBy | This field stores the user who has modified or updated the consolidated retry configuration record. | Lookup(User) |
Owner | Owner | This field stores the user who is the owner of the consolidated retry configuration record. | Lookup(User,Group) |
7.2 Modified objects
This section briefly describes the objects modified in this release.
7.2.1 Fee (loan__Fee__c)
This object stores fee information.
The following table describes the modified field of this object. This field is optional:
Field API Name | Description | Type |
---|---|---|
Accrual_Method__c |
This field defines the calculation method for charge accrual of a newly Created Charge. It is populated depending upon corresponding value provided in Fee. This field is modified by adding a new picklist value named Effective Rate of Interest. Hence the values of this field are:
|
Picklist |
7.2.2 Forecast Stream Config (loan__Accrual_Stream_Config__c)
This object stores the configuration to generate the forecast streams.
The following table describes the modified field of this object. This field is optional:
Field API Name | Description | Type |
---|---|---|
Accrual_Method__c |
This field defines the calculation method for charge accrual of a newly Created Charge. It is populated depending upon corresponding value provided in fee definition. This field is modified by adding a new picklist value named Effective Rate of Interest. Hence the values of this field are:
|
PickList |
7.2.3 Pre-Paid Fee (loan__Contract_Pre_Paid_Fee__c)
This is the junction object between the Fee object and CL Contract object. It is a custom object with two master-detail relationships. Using a custom junction object, you can model a many-to-many relationship between two objects.
The following table describes the modified field of this object. This field is optional:
Field API Name | Description | Type |
---|---|---|
Accrual_Method__c |
This field defines the calculation method for charge accrual of a newly Created Charge. It is populated depending upon corresponding value provided in fee definition. This field is modified by adding a new picklist value named Effective Rate of Interest. Hence the values of this field are:
|
PickList |
7.2.4 Account (Account)
Account object is a standard object from Salesforce. It represents the Borrower.
The following table describes the new fields added to this object.
Field API Name | Description | Type |
---|---|---|
clcommon__Commission_Plan__c | This field refers to the added default commission plan at the account level. | Lookup |
clcommon__Broker__c | Select the checkbox to classify this record is a broken account | Checkbox |
7.2.5 CL Contract (loan__Loan_Account__c)
This object stores the loan contract details.
The following table describes the new fields of this object:
Field API Name | Description | Type |
---|---|---|
loan_Annualized_Effective_Interest_Rate__c |
This parameter is used to calculate the fee accrual to be done for given month period. Default Value : 0.00 The value of this field can be from 0.00% to 19% This field is applicable for all types of loan accounts. |
percent (13, 5) |
loan__Master_Loan_Job_Thread_Count__c | This field stores the job thread count number of the master facility loan. | Number(16, 2) |
7.2.6 Enable Loan Features (Enable_Loan_Features__c)
This object is used to enable the availability of certain features in CL Loan.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Automatic_Consolidated_Payment__c | If true, indicates that the automated consolidated payment is enabled for a master facility. | Checkbox |
7.2.7 Cash Receipt (clcommon__Cash_Receipt__c)
This object stores the cash receipt records for capturing the cash received from the borrower.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Master_Loan__c | This field stores the master facility contract ID for which the cash receipt is created. | Lookup(Loan_Account_c) |
loan__Latest_Event_Number__c | This field stores the latest event number of the payments in this cash receipt. | Number |
loan__Next_Retry_On__c | This field stores the date on which this transaction is to be retried. | Date |
loan__Retried__c | If this field is selected, it means that the transaction has been retried. | Checkbox |
loan__Retry_Attempt_Number__c | This indicates the number of times this cash receipt was retried. | Number |
loan__Retry_Attempt_For__c | This field indicates the original cash receipt for which this cash receipt is a retry attempt. | Lookup |
Bank_Account | This field stores the bank details to be used for the consolidated payment. | Lookup |
7.2.8 Loan Parameters (loan__Loan_Parameters__c)
This object stores the information on the various parameters of the loan contract.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Events_Count__c | This field keeps track of the count of total number of events that occurred on the contract. | Number |
loan__Consolidated_Retry_Configuration__c | This is a lookup field that is used to store the NSF-related (Non Sufficient Funds) information at the master facility contract level. | Lookup(Consolidated Retry Configuration) |
7.2.9 Loan Payment Transaction (loan__Loan_Payment_Transaction__c)
This object is used to store payment transactions on contracts. When a payment is created and cleared it affects various balances on the contract such as principal, interest accrued, interest remaining, fees, and so on. Payments also satisfy bills that are generated on the contract.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Event_Number__c | This field stores the order number for the order in which the payments are cleared. | Number |
7.2.10 Other Loan Transaction (loan__Other_Transaction__c)
This object stores the details of the other loan transactions.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Event_Number__c | This field stores the order number of the OLT that got generated. | Number |
7.2.11 Loan Disbursal Transaction (loan__Loan_Disbursal_Transaction__c)
This object stores the details of the disbursal transaction occurred when the loan is disbursed.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Event_Number__c | This field stores the order number of the disbursement transaction that was generated. | Number |
7.2.12 Interest Posting Transaction (loan__Interest_Posting_Transaction__c)
This object stores the details of the Interest Posting Transaction.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Event_Number__c | This field stores the order number of the interest posting transaction that got generated. | Number |
7.2.13 Charge (loan__Charge__c)
This object stores the details of the charge applied on the loan.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
loan__Event_Number__c | This field stores the order number of the generated interest posting transaction. | Number |
7.2.14 Product Pre-Paid Fee (Product_Pre_Paid_Fees__c)
This is the junction object between the Fee object and CL Contract object. It is a custom object with two master-detail relationships. Using a custom junction object, you can model a many-to-many relationship between two objects.
The following table describes the new fields added to this object:
Field API Name | Description | Type |
---|---|---|
Accrual_Method__c |
This field defines the calculation method for charge accrual of a newly created charge. It is populated depending upon corresponding value provided in fee definition. This field is modified by adding a new picklist value named Effective Rate of Interest. Hence the values of this field are:
|
PickList |
8. New and modified REST APIs
This section describes the new and modified REST APIs of this release.
For a complete list of the Q2 Loan Servicing and Q2 Marketplace REST APIs, see Q2 Loan Servicing and Q2 Marketplace REST APIs Guide over theQ2 Customer Portal and the Q2 Lending Help Center.
8.1 New REST APIs
8.1.1 Reversing Loan Disbursal Transactions (v1/loanAccounts/disbursement/reversal)
This REST API is used to reverse disbursements. It reverses Loan Disbursal Transactions (loan__Loan_Disbursal_Transaction__c) on the Loan Account object and commits them to the database.
For more details on this REST API, see the Reversing Loan Disbursal Transactions section of the Q2 Loan Servicing REST APIs Guide over theQ2 Customer Portal and the Q2 Lending Help Center.
8.2 Modified REST APIs
There are no REST APIs modified in this release.
9. New and modified global methods
This section briefly describes the global methods added or modified in this release.
For a complete list of the Q2 Loan Servicing and Q2 Marketplace global methods, see Q2 Loan Servicing and Q2 Marketplace Global Methods Guide over theQ2 Customer Portal and the Q2 Lending Help Center.
9.1 New global methods
This section briefly describes the global methods added in this release.
9.1.1 AbstractLoanActions class
This class consists of many methods that are used to perform certain actions on the loan.
The following table describes the global method added to this class in this release:
Global Method Name | Description |
---|---|
reverseLoanDisbursements | This method can be used to reverse the loan disbursements of the loan contracts. |
9.1.2 LoanContractManagementSystem class
This class is used to manage some of the functions of cash receipts.
The following table describes the global method added to this class in this release:
Global Method Name | Description |
---|---|
bulkReversePaymentsForCashReceipts(cashReceipt2Payments, returnCodemap) | This is a newly added global method that can be used to reverse the LPTs corresponding to the Cash Receipts. |
9.1.3 CashReceiptService class
This class provides global methods to perform cash receipt-related operations and applications.
The following table describes the global method added to this class in this release:
Global Method Name | Description |
---|---|
bulkReverseAndCancelCashReceipt(cashReceiptIds, returnCodeMap) | This is a newly added global method that can be used to reverse and cancel the Cash Receipt so that the reversed amount can not be used anymore. |
9.1.4 ConsolidatedPaymentfilegenJob class
This class is newly added in this release and is used as a job to help in generating the ACH files for a consolidated payments.
The following table lists and describes the global methods of this class:
ConsolidatedPaymentfilegenJob() | This is the default constructor of the class. |
getRuntimeQuery() | This method is internally used to get runtime query. |
doInitialize() | This method is internally used to initialize. |
doStart(Database.BatchableContext bc) | This method is internally used to start the batchable context. |
doExecute(Database.BatchableContext bc, List<sObject> scope) | This method is internally used to execute the batchable context for the scope. |
doFinish(Database.BatchableContext bc) | This method is internally used to complete the batchable context. |
9.2 Modified global methods
There are no global methods modified in this release.
10. Post 4.5000 release
Follow this section for the details on the issues fixed in the patches on the April 2024 release of the following packages:
Q2 Loan
Q2 Marketplace
CL Common
10.1 Issues fixed in Q2 Loan Servicing 4.5000.11 and Clcommon 4.5001.2 patch
10.1.1 The system is not updating the Transaction type (Cr/Dr) field on the Loan Transaction Summary and on the OLT for a refund transaction (Jira ID: PDRFF-3445/ND-8487)
Issue Description
The system is not updating the Transaction type (Cr/Dr) field on the Loan Transaction Summary and on the OLT for a refund transaction.
Example to understand the issue
-
Create a loan contract with the following values:
Time Counting Method = Month and days
Is Interest Posting = True
Interest Posting Frequency = Monthly
Loan Amount = $10,000
Interest Rate = 5%
Term = 12
Move the current system date to March 01, 2013.
Approve and disburse the loan.
Move the current system date to the first bill date that is April 01, 2013.
Make a payoff more than the payoff amount [extra amount goes to the excess field].
-
Perform Manage Excess Amount action and set the Refund to Borrower as True.
The system is not updating the Transaction type (Cr/Dr) field on the Loan Transaction Summary and on the OLT for a refund transaction.
Resolution
The issue is now fixed and the system is correctly updating the Transaction type (Cr/Dr) field on the Loan Transaction Summary and on the OLT for a refund transaction.
10.1.2 The system is updating the Transaction type (Cr/Dr) field as Debit on the Loan Transaction Summary for all the transactions (Jira ID: PDRFF-3446/ND-8510)
Issue Description
The system is updating the Transaction type (Cr/Dr) field as Debit on the Loan Transaction Summary for all the transaction, irrespective of whether the Transaction type is Credit or Debit.
Example to understand the issue after the fix
-
Create a loan contract with the following values:
Time Counting Method = Month and days
Is Interest Posting = True
Interest Posting Frequency = Monthly
Loan Amount = $10,000
Interest Rate = 5%
Term = 12
Move the current system date to March 01, 2013.
Approve and disburse the loan.
Move the current system date to the first bill date that is April 01, 2013.
-
Go to Loan Action > Loan Transaction Statement and check the Transaction type (Cr/Dr) field for the IPT transaction.
The type of the Transaction type (Cr/Dr) must be Credit.
Go to the IPT record (of OLT) and in the related list, check the Loan Transaction Summaries. Here too the system must reflect the Transaction type as Credit.
Resolution
The issue is now fixed and the system is now correctly updating the Transaction type (Cr/Dr) field as Credit or Debit on the Loan Transaction Summary and on the OLT for a refund transaction.
10.1.3 The system is not generating Loan Transaction Summary for Additional Interest - Excess Payoff type of transaction (Jira ID: PDRFF-3430/ND-8488)
Issue Description
If a payoff LPT transaction is created to payoff the loan on a non-billing date, the system calculates the regular interest and the additional interest components for the loan, but does not post them on a non-billing date. Then on the payoff date, the system generates the Interest Posting Excess-Payoff and Additional Interest Excess-Payoff and these components are paid off by the payoff amount.
The system is generating a Loan Transaction Summary for Interest Posting Excess-Payoff transaction but not for Additional Interest Excess-Payoff transaction.
Resolution
The issue is now fixed and the system is generating a Loan Transaction Summary both for the Additional Interest Excess-Payoff transaction and the Interest Posting Excess-Payoff transaction.
10.2 Fixed issue ported to Cl common April 2024 4.5001.2 patch
10.2.1 The system is not updating the Current Term, Payment Term (Term), and the Current Maturity Date fields, when the loan is rescheduled and the Maturity Date on the contract is updated (Jira ID: PDRFF-3008/PD-1773)
Issue Description
The issue is with the Financial Calculator, where after we reschedule the loan and the Maturity Date is updated, the system is not updating the Current Term, Payment Term (Term), and the Current Maturity Date fields on the contract. The Amortization Schedule is also not getting generated.
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
Payment Frequency = Monthly
Interest Posting Frequency = Monthly
Time Counting Method = Month and Days
Fincalc Version = 4.00
Create a contract in the Partial Application status.
-
Then manually update the Maturity Date and the Current Maturity Date on the Contract. (Suppose the Maturity Date and Current Maturity Date are January 01, 2014, and the Term is 10.)
Now , we want to change the Maturity Date and Current Maturity Date to April 01, 2013 (without modifying the Payment Term field).
-
Then select the Regenerate Schedule button.
The expected result is as follows:
Newly generated Amortization Schedule must have the last installment on April 01, 2013.
Current Terms must be updated to 12.
Resolution
The system is now updating the Current Term, Payment Term (Term), and the Current Maturity Date fields correctly. The system is generating the Amortization Schedule too.
10.3 Enhancement made in the 4.5000.5 patch
10.3.1 Last Accrual Date unaffected by certain child loan transactions without Additional Interest Component (Jira ID: ND-7795)
Enhancement Description
If a parent Master Facility loan does not contain an Additional Interest Component, the system will not update the LAD of the parent Master Facility loan when the following events occur in the child loan:
Disbursement
Principal adjustment
Payment for a revolving parent loan
When any of the preceding actions occur in the child loans, the amount on which the additional interest is calculated on the parent Master Facility loan is likewise updated, and therefore the additional interest changes on the parent loan, resulting in a change in the parent loan's LAD.
Now suppose the AIC was not included in the parent loan. In that situation, any of the preceding actions taken in the child loans have no affect on the additional interest on the parent loan, and so the parent loan's LAD remains unchanged. It will only affect the LAD of the child loan where the action took place.
This ensures that one child loan transaction does not restrict other child loan reversals. This means that when you reverse any of the preceding actions on a child loan, the system does not need to check the transactions of the other child loans when AIC is not present in parent loan. The transactions on the other child loans would ordinarily be taken into account when the parent loan has an AIC because a transaction cannot be created before the LAD.
However, if any actions other than those indicated in the preceding list are taken, the system will update the LAD on the parent loan as well, regardless of whether parent loan has an AIC.
For example, if an AIC is present in the parent loan, the LAD would change according to the additional interest posted. If a child loan disbursement occurs after this LAD, the LAD on the parent loan will be adjusted to reflect this. To reverse a principal adjustment made before this LAD in another child loan, you must first reverse the most recent transaction that resulted the LAD change, which is disbursement. If AIC is not included in the parent loan, the LAD would not change when the child loan is disbursed and you can reverse a transaction that had occurred before this disbursement without reversing it first.
11. Change record
S.No | Change Date | Description of Change |
---|---|---|
1. | April 19, 2024 |
Published the release notes for the April 2024 (4.5000) General Availability release. |
2. | August 05, 2024 | Enhancements made in Q2 Loan Servicing 4.5000.5 patch |
3. | August 26, 2024 | Fixed issue ported to clcommon April 2024 4.5001.2 patch |
4. | October 07, 2024 | Issues fixed in Q2 Loan Servicing 4.5000.11 and Clcommon 4.5001.2 patch |