This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 35bdbccd2 FINERACT-2065: Fix schedule handling with higher fixed
length value than Loan term
35bdbccd2 is described below
commit 35bdbccd2ef8b751187fab67037aa417347ee238
Author: Jose Alberto Hernandez <[email protected]>
AuthorDate: Wed Mar 27 23:26:49 2024 -0600
FINERACT-2065: Fix schedule handling with higher fixed length value than
Loan term
---
.../loanschedule/domain/LoanApplicationTerms.java | 17 +-
.../AbstractProgressiveLoanScheduleGenerator.java | 5 +-
.../domain/DefaultScheduledDateGenerator.java | 18 +-
.../domain/ScheduledDateGenerator.java | 3 +
...PaymentAllocationLoanRepaymentScheduleTest.java | 192 +++++++++++++++++++++
5 files changed, 225 insertions(+), 10 deletions(-)
diff --git
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
index e9d38c438..94d990250 100644
---
a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
+++
b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java
@@ -69,6 +69,7 @@ public final class LoanApplicationTerms {
private final Integer repaymentEvery;
private final PeriodFrequencyType repaymentPeriodFrequencyType;
+ private long variationDays = 0L;
private final Integer fixedLength;
private final Integer nthDay;
@@ -1845,16 +1846,16 @@ public final class LoanApplicationTerms {
}
switch (repaymentPeriodFrequencyType) {
case DAYS:
- maxDateForFixedLength = startDate.plusDays(fixedLength);
+ maxDateForFixedLength = startDate.plusDays(fixedLength +
variationDays);
break;
case WEEKS:
- maxDateForFixedLength = startDate.plusWeeks(fixedLength);
+ maxDateForFixedLength = startDate.plusWeeks(fixedLength +
variationDays);
break;
case MONTHS:
- maxDateForFixedLength = startDate.plusMonths(fixedLength);
+ maxDateForFixedLength = startDate.plusMonths(fixedLength +
variationDays);
break;
case YEARS:
- maxDateForFixedLength = startDate.plusYears(fixedLength);
+ maxDateForFixedLength = startDate.plusYears(fixedLength +
variationDays);
break;
case INVALID:
break;
@@ -1871,4 +1872,12 @@ public final class LoanApplicationTerms {
: getSubmittedOnDate();
}
+ public boolean isLastPeriod(final Integer periodNumber) {
+ return getNumberOfRepayments().equals(periodNumber);
+ }
+
+ public void updateVariationDays(final long daysToAdd) {
+ this.variationDays += daysToAdd;
+ }
+
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractProgressiveLoanScheduleGenerator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractProgressiveLoanScheduleGenerator.java
index 213fa29d6..1f0380e52 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractProgressiveLoanScheduleGenerator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/AbstractProgressiveLoanScheduleGenerator.java
@@ -91,8 +91,8 @@ public abstract class
AbstractProgressiveLoanScheduleGenerator implements LoanSc
boolean isNextRepaymentAvailable = true;
while (!scheduleParams.getOutstandingBalance().isZero()) {
- scheduleParams.setActualRepaymentDate(getScheduledDateGenerator()
-
.generateNextRepaymentDate(scheduleParams.getActualRepaymentDate(),
loanApplicationTerms, isFirstRepayment));
+
scheduleParams.setActualRepaymentDate(getScheduledDateGenerator().generateNextRepaymentDate(
+ scheduleParams.getActualRepaymentDate(),
loanApplicationTerms, isFirstRepayment, scheduleParams.getPeriodNumber()));
AdjustedDateDetailsDTO adjustedDateDetailsDTO =
getScheduledDateGenerator()
.adjustRepaymentDate(scheduleParams.getActualRepaymentDate(),
loanApplicationTerms, holidayDetailDTO);
scheduleParams.setActualRepaymentDate(adjustedDateDetailsDTO.getChangedActualRepaymentDate());
@@ -601,6 +601,7 @@ public abstract class
AbstractProgressiveLoanScheduleGenerator implements LoanSc
LoanTermVariationsData loanTermVariationsData =
loanApplicationTerms.getLoanTermVariations().nextDueDateVariation();
if (DateUtils.isEqual(modifiedScheduledDueDate,
loanTermVariationsData.getTermVariationApplicableFrom())) {
modifiedScheduledDueDate =
loanTermVariationsData.getDateValue();
+
loanApplicationTerms.updateVariationDays(DateUtils.getDifferenceInDays(scheduledDueDate,
modifiedScheduledDueDate));
if (!loanTermVariationsData.isSpecificToInstallment()) {
scheduleParams.setActualRepaymentDate(modifiedScheduledDueDate);
loanApplicationTerms.setNewScheduledDueDateStart(modifiedScheduledDueDate);
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java
index fbf889e7a..7d3685d7b 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGenerator.java
@@ -103,10 +103,20 @@ public class DefaultScheduledDateGenerator implements
ScheduledDateGenerator {
}
}
- final LocalDate maxDateForFixedLength =
loanApplicationTerms.calculateMaxDateForFixedLength();
- // Fixed Length validation
- if (maxDateForFixedLength != null &&
DateUtils.isAfter(dueRepaymentPeriodDate, maxDateForFixedLength)) {
- dueRepaymentPeriodDate = maxDateForFixedLength;
+ return dueRepaymentPeriodDate;
+ }
+
+ @Override
+ public LocalDate generateNextRepaymentDate(LocalDate lastRepaymentDate,
LoanApplicationTerms loanApplicationTerms,
+ final boolean isFirstRepayment, final Integer periodNumber) {
+ LocalDate dueRepaymentPeriodDate =
generateNextRepaymentDate(lastRepaymentDate, loanApplicationTerms,
isFirstRepayment);
+
+ // Fixed Length validation only for Last Installment
+ if (loanApplicationTerms.isLastPeriod(periodNumber)) {
+ final LocalDate maxDateForFixedLength =
loanApplicationTerms.calculateMaxDateForFixedLength();
+ if (maxDateForFixedLength != null &&
dueRepaymentPeriodDate.compareTo(maxDateForFixedLength) != 0) {
+ dueRepaymentPeriodDate = maxDateForFixedLength;
+ }
}
return dueRepaymentPeriodDate;
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java
index f2e6de21c..50edf46fa 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/ScheduledDateGenerator.java
@@ -34,6 +34,9 @@ public interface ScheduledDateGenerator {
LocalDate generateNextRepaymentDate(LocalDate lastRepaymentDate,
LoanApplicationTerms loanApplicationTerms, boolean isFirstRepayment);
+ LocalDate generateNextRepaymentDate(LocalDate lastRepaymentDate,
LoanApplicationTerms loanApplicationTerms, boolean isFirstRepayment,
+ Integer periodNumber);
+
AdjustedDateDetailsDTO adjustRepaymentDate(LocalDate
dueRepaymentPeriodDate, LoanApplicationTerms loanApplicationTerms,
HolidayDetailDTO holidayDetailDTO);
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
index 9cf4c6791..ecc47ee39 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java
@@ -3819,6 +3819,198 @@ public class
AdvancedPaymentAllocationLoanRepaymentScheduleTest extends BaseLoan
});
}
+ // UC133: Advanced payment allocation with higher Fixed Length for 50 days
than Loan Term for 45 days (3 repayments
+ // every 15 days)
+ // ADVANCED_PAYMENT_ALLOCATION_STRATEGY
+ // 1. Create a Loan product with Adv. Pment. Alloc. and No Interest
+ // 2. Submit Loan and approve
+ // 3. Disburse
+ // 4. Validate Repayment Schedule
+ @Test
+ public void uc133() {
+ final String operationDate = "22 November 2023";
+ runAt(operationDate, () -> {
+ final Integer fixedLength = 50; // 50 days
+ final Integer repaymentFrequencyType = RepaymentFrequencyType.DAYS;
+ final Integer numberOfRepayments = 3;
+
+ Long clientId =
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+
+ PostLoanProductsRequest product =
createOnePeriod30DaysLongNoInterestPeriodicAccrualProductWithAdvancedPaymentAllocation()
+
.numberOfRepayments(numberOfRepayments).repaymentEvery(15).repaymentFrequencyType(repaymentFrequencyType.longValue())
+ .fixedLength(fixedLength);
+ PostLoanProductsResponse loanProductResponse =
loanProductHelper.createLoanProduct(product);
+
+ PostLoansRequest applicationRequest = applyLoanRequest(clientId,
loanProductResponse.getResourceId(), "22 November 2023",
+ 1000.0, numberOfRepayments)
+
.transactionProcessingStrategyCode(LoanProductTestBuilder.ADVANCED_PAYMENT_ALLOCATION_STRATEGY);
+
+ PostLoansResponse loanResponse =
loanTransactionHelper.applyLoan(applicationRequest);
+
+ loanTransactionHelper.approveLoan(loanResponse.getLoanId(),
+ new
PostLoansLoanIdRequest().approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN)
+ .approvedOnDate("22 November 2023").locale("en"));
+
+ loanTransactionHelper.disburseLoan(loanResponse.getLoanId(),
+ new PostLoansLoanIdRequest().actualDisbursementDate("22
November 2023").dateFormat(DATETIME_PATTERN)
+
.transactionAmount(BigDecimal.valueOf(100.0)).locale("en"));
+
+ GetLoansLoanIdResponse loanDetails =
loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
+ LOG.info("Loan {} {}",
loanDetails.getTimeline().getActualDisbursementDate(),
loanDetails.getRepaymentSchedule().getPeriods()
+
.get(loanDetails.getRepaymentSchedule().getPeriods().size() - 1).getDueDate());
+ assertEquals(
+
Utils.getDifferenceInDays(loanDetails.getTimeline().getActualDisbursementDate(),
loanDetails.getRepaymentSchedule()
+
.getPeriods().get(loanDetails.getRepaymentSchedule().getPeriods().size() -
1).getDueDate()),
+ fixedLength.longValue());
+ assertEquals(loanDetails.getNumberOfRepayments(),
numberOfRepayments);
+ assertTrue(loanDetails.getStatus().getActive());
+ });
+ }
+
+ // UC134: Advanced payment allocation with Fixed Length for 119 days and
Loan Term for 120 days (4 repayments every
+ // 30
+ // days) and Reschedule
+ // ADVANCED_PAYMENT_ALLOCATION_STRATEGY
+ // 1. Create a Loan product with Adv. Pment. Alloc. and No Interest
+ // 2. Submit Loan and approve
+ // 3. Disburse
+ // 4. Validate Repayment Schedule
+ // 5. ReSchedule
+ @Test
+ public void uc134() {
+ final String operationDate = "1 January 2024";
+ runAt(operationDate, () -> {
+ final Integer fixedLength = 119; // 120 days
+ final Integer repaymentFrequencyType = RepaymentFrequencyType.DAYS;
+ final Integer numberOfRepayments = 4;
+
+ Long clientId =
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+ PostLoanProductsRequest product =
createOnePeriod30DaysLongNoInterestPeriodicAccrualProductWithAdvancedPaymentAllocation()
+
.numberOfRepayments(numberOfRepayments).repaymentEvery(30).fixedLength(fixedLength);
+ PostLoanProductsResponse loanProductResponse =
loanProductHelper.createLoanProduct(product);
+ PostLoansRequest applicationRequest = applyLoanRequest(clientId,
loanProductResponse.getResourceId(), operationDate, 1000.0,
+ numberOfRepayments);
+
+ applicationRequest =
applicationRequest.numberOfRepayments(numberOfRepayments).loanTermFrequency(120)
+
.transactionProcessingStrategyCode(LoanProductTestBuilder.ADVANCED_PAYMENT_ALLOCATION_STRATEGY).repaymentEvery(30);
+
+ PostLoansResponse loanResponse =
loanTransactionHelper.applyLoan(applicationRequest);
+
+ loanTransactionHelper.approveLoan(loanResponse.getLoanId(), new
PostLoansLoanIdRequest()
+
.approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN).approvedOnDate(operationDate).locale("en"));
+
+ loanTransactionHelper.disburseLoan(loanResponse.getLoanId(), new
PostLoansLoanIdRequest().actualDisbursementDate(operationDate)
+
.dateFormat(DATETIME_PATTERN).transactionAmount(BigDecimal.valueOf(1000.0)).locale("en"));
+
+ GetLoansLoanIdResponse loanDetails =
loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
+ validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0,
null);
+ validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2024, 1, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2024, 3, 1),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2024, 3, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2024, 4, 29),
250.0, 0.0, 250.0, 0.0, 0.0);
+ assertTrue(loanDetails.getStatus().getActive());
+ assertEquals(loanDetails.getNumberOfRepayments(),
numberOfRepayments);
+ assertEquals(
+
Utils.getDifferenceInDays(loanDetails.getTimeline().getActualDisbursementDate(),
loanDetails.getRepaymentSchedule()
+
.getPeriods().get(loanDetails.getRepaymentSchedule().getPeriods().size() -
1).getDueDate()),
+ fixedLength.longValue());
+
+ PostCreateRescheduleLoansResponse rescheduleLoansResponse =
loanRescheduleRequestHelper
+ .createLoanRescheduleRequest(new
PostCreateRescheduleLoansRequest().loanId(loanDetails.getId()).locale("en")
+
.dateFormat(DATETIME_PATTERN).rescheduleReasonId(1L).rescheduleFromDate("1
March 2024")
+ .adjustedDueDate("15 March
2024").submittedOnDate("16 January 2024"));
+
+
loanRescheduleRequestHelper.approveLoanRescheduleRequest(rescheduleLoansResponse.getResourceId(),
+ new PostUpdateRescheduleLoansRequest().approvedOnDate("16
January 2024").locale("en").dateFormat(DATETIME_PATTERN));
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
+ validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0,
null);
+ validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2024, 1, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2024, 3, 15),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2024, 4, 14),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2024, 5, 13),
250.0, 0.0, 250.0, 0.0, 0.0);
+ assertTrue(loanDetails.getStatus().getActive());
+ assertEquals(loanDetails.getNumberOfRepayments(),
numberOfRepayments);
+ assertEquals(
+
Utils.getDifferenceInDays(loanDetails.getTimeline().getActualDisbursementDate(),
loanDetails.getRepaymentSchedule()
+
.getPeriods().get(loanDetails.getRepaymentSchedule().getPeriods().size() -
1).getDueDate()),
+ fixedLength.longValue() + 14); // Days in Reschedule
+ assertTrue(loanDetails.getStatus().getActive());
+ });
+ }
+
+ // UC135: Advanced payment allocation with Fixed Length for 119 days and
Loan Term for 120 days (4 repayments every
+ // 30
+ // days) and Reschedule
+ // ADVANCED_PAYMENT_ALLOCATION_STRATEGY
+ // 1. Create a Loan product with Adv. Pment. Alloc. and No Interest
+ // 2. Submit Loan and approve
+ // 3. Disburse
+ // 4. Validate Repayment Schedule
+ // 5. ReSchedule Last installment
+ @Test
+ public void uc135() {
+ final String operationDate = "1 January 2024";
+ runAt(operationDate, () -> {
+ final Integer fixedLength = 119; // 120 days
+ final Integer repaymentFrequencyType = RepaymentFrequencyType.DAYS;
+ final Integer numberOfRepayments = 4;
+
+ Long clientId =
clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+ PostLoanProductsRequest product =
createOnePeriod30DaysLongNoInterestPeriodicAccrualProductWithAdvancedPaymentAllocation()
+
.numberOfRepayments(numberOfRepayments).repaymentEvery(30).fixedLength(fixedLength);
+ PostLoanProductsResponse loanProductResponse =
loanProductHelper.createLoanProduct(product);
+ PostLoansRequest applicationRequest = applyLoanRequest(clientId,
loanProductResponse.getResourceId(), operationDate, 1000.0,
+ numberOfRepayments);
+
+ applicationRequest =
applicationRequest.numberOfRepayments(numberOfRepayments).loanTermFrequency(120)
+
.transactionProcessingStrategyCode(LoanProductTestBuilder.ADVANCED_PAYMENT_ALLOCATION_STRATEGY).repaymentEvery(30);
+
+ PostLoansResponse loanResponse =
loanTransactionHelper.applyLoan(applicationRequest);
+
+ loanTransactionHelper.approveLoan(loanResponse.getLoanId(), new
PostLoansLoanIdRequest()
+
.approvedLoanAmount(BigDecimal.valueOf(1000)).dateFormat(DATETIME_PATTERN).approvedOnDate(operationDate).locale("en"));
+
+ loanTransactionHelper.disburseLoan(loanResponse.getLoanId(), new
PostLoansLoanIdRequest().actualDisbursementDate(operationDate)
+
.dateFormat(DATETIME_PATTERN).transactionAmount(BigDecimal.valueOf(1000.0)).locale("en"));
+
+ GetLoansLoanIdResponse loanDetails =
loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
+ validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0,
null);
+ validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2024, 1, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2024, 3, 1),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2024, 3, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2024, 4, 29),
250.0, 0.0, 250.0, 0.0, 0.0);
+ assertTrue(loanDetails.getStatus().getActive());
+ assertEquals(loanDetails.getNumberOfRepayments(),
numberOfRepayments);
+ assertEquals(
+
Utils.getDifferenceInDays(loanDetails.getTimeline().getActualDisbursementDate(),
loanDetails.getRepaymentSchedule()
+
.getPeriods().get(loanDetails.getRepaymentSchedule().getPeriods().size() -
1).getDueDate()),
+ fixedLength.longValue());
+
+ PostCreateRescheduleLoansResponse rescheduleLoansResponse =
loanRescheduleRequestHelper
+ .createLoanRescheduleRequest(new
PostCreateRescheduleLoansRequest().loanId(loanDetails.getId()).locale("en")
+
.dateFormat(DATETIME_PATTERN).rescheduleReasonId(1L).rescheduleFromDate("29
April 2024")
+ .adjustedDueDate("5 May 2024").submittedOnDate("16
January 2024"));
+
+
loanRescheduleRequestHelper.approveLoanRescheduleRequest(rescheduleLoansResponse.getResourceId(),
+ new PostUpdateRescheduleLoansRequest().approvedOnDate("16
January 2024").locale("en").dateFormat(DATETIME_PATTERN));
+
+ loanDetails =
loanTransactionHelper.getLoanDetails(loanResponse.getLoanId());
+ validateLoanSummaryBalances(loanDetails, 1000.0, 0.0, 1000.0, 0.0,
null);
+ validateRepaymentPeriod(loanDetails, 1, LocalDate.of(2024, 1, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 2, LocalDate.of(2024, 3, 1),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 3, LocalDate.of(2024, 3, 31),
250.0, 0.0, 250.0, 0.0, 0.0);
+ validateRepaymentPeriod(loanDetails, 4, LocalDate.of(2024, 5, 5),
250.0, 0.0, 250.0, 0.0, 0.0);
+ assertTrue(loanDetails.getStatus().getActive());
+ assertEquals(loanDetails.getNumberOfRepayments(),
numberOfRepayments);
+ assertEquals(
+
Utils.getDifferenceInDays(loanDetails.getTimeline().getActualDisbursementDate(),
loanDetails.getRepaymentSchedule()
+
.getPeriods().get(loanDetails.getRepaymentSchedule().getPeriods().size() -
1).getDueDate()),
+ fixedLength.longValue() + 6); // Days in Reschedule
+ assertTrue(loanDetails.getStatus().getActive());
+ });
+ }
+
private static List<PaymentAllocationOrder>
getPaymentAllocationOrder(PaymentAllocationType... paymentAllocationTypes) {
AtomicInteger integer = new AtomicInteger(1);
return Arrays.stream(paymentAllocationTypes).map(pat -> {