Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@sayhaed
Copy link
Contributor

@sayhaed sayhaed commented Jul 24, 2025

Description

Accruals added for savings accounts

-Generate the accruals job.
-Add the corresponding change to the savings account functionality.
-Transactions will be posted according to the product configuration.
-Accounting accounts that are positive point to the default values in the code, and negative accounts that are negative point to the new accounting account. If the accounting account is not configured, it will point to the default accounting accounts.

Ignore if these details are present on the associated Apache Fineract JIRA ticket.

Checklist

Please make sure these boxes are checked before submitting your pull request - thanks!

  • Write the commit message as per https://github.com/apache/fineract/#pull-requests
  • Acknowledge that we will not review PRs that are not passing the build ("green") - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
  • Create/update unit or integration tests for verifying the changes made.
  • Follow coding conventions at https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions.
  • Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
  • Submission is not a "code dump". (Large changes can be made "in repository" via a branch. Ask on the developer mailing list for guidance, if required.)

FYI our guidelines for code reviews are at https://cwiki.apache.org/confluence/display/FINERACT/Code+Review+Guide.

@sayhaed sayhaed force-pushed the accruals_changes branch from bbf1a12 to b38e757 Compare July 25, 2025 00:49
@adamsaghy
Copy link
Contributor

@sayhaed Please drop this generic "Savings Accounts Improvements" and start using clear, descriptive short description for the PRs which tells exactly what this PR is intended to do!

@sayhaed
Copy link
Contributor Author

sayhaed commented Jul 30, 2025

Hi @adamsaghy, thank you for the feedback.

Just to clarify, this PR is indeed related to the overall "Savings Accounts Improvements" initiative. The team decided to split the changes into multiple PRs to improve clarity and facilitate the review process, while keeping a consistent title to reflect that they all belong to the same scope.

@adamsaghy
Copy link
Contributor

Hi @adamsaghy, thank you for the feedback.

Just to clarify, this PR is indeed related to the overall "Savings Accounts Improvements" initiative. The team decided to split the changes into multiple PRs to improve clarity and facilitate the review process, while keeping a consistent title to reflect that they all belong to the same scope.

The Fineract story id just fine to connect them. The PR title should tell exactly what it is doing and "improvements" is too generic and useless. Kindly asking you to rename it!

@sayhaed sayhaed changed the title FINERACT-2312: Savings Accounts Improvements FINERACT-2312: Accruals added for savings accounts Jul 30, 2025
@sayhaed sayhaed force-pushed the accruals_changes branch from b38e757 to 86b0c35 Compare July 30, 2025 21:59
@sayhaed
Copy link
Contributor Author

sayhaed commented Jul 30, 2025

Thanks, @adamsaghy I’ve updated the PR title to make it more specific, as suggested.
Let me know if there’s anything else you'd like me to adjust.

@sayhaed sayhaed force-pushed the accruals_changes branch 2 times, most recently from e412073 to 02defa0 Compare August 1, 2025 19:39
return interest;
}

public BigDecimal calculateInterestOnBalanceForAcrualsSavings(final BigDecimal interestToCompound,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo in method calculateInterestOnBalanceForAcrualsSavings -> calculateInterestOnBalanceForAccrualsSavings

Also if this method is for calculating the interest accrual for overdraft balance, please rename this to describe that action...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the difference between calculateInterestOnBalance and calculateInterestOnBalanceForAccrualsSavings?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We remove that method

private final BigDecimal overdraftAmount;
private final boolean isAccountTransfer;
private final List<TaxPaymentDTO> taxPayments;
private final Boolean isOverdraftDown;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what this field is for?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we remove that field

}
}

private static final class SavingAccrualMapper implements RowMapper<SavingsAccrualData> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo in the class name: SavingAccrualMapper -> SavingsAccrualMapper?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed


private final String schemaSql;

SavingAccrualMapper() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use JPQL here instead of native queries?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@Override
public CommandProcessingResult addAccrualEntries(Long savingsAccountId) {
SavingsAccount savingsAccount = savingsAccountAssembler.assembleFrom(savingsAccountId, false);
final LocalDate tillDate = DateUtils.getBusinessLocalDate();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The two methods are 90% duplicate.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make sure to reuse and extract the common parts!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have removed that method and extracted the repeated functionality into a common one, as suggested.

@sayhaed sayhaed force-pushed the accruals_changes branch 4 times, most recently from 44d0ca5 to 4948021 Compare August 6, 2025 01:51
AccrualAccountsForSavings.INTEREST_ON_SAVINGS.getValue(), AccrualAccountsForSavings.INTEREST_PAYABLE.getValue(),
savingsProductId, paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal);
} else {
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this accrual based or cash based? if accrual based, please dont use "createCashBasedJournalEntriesAndReversalsForSaving" method.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we change that part

this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
AccrualAccountsForSavings.INTEREST_ON_SAVINGS.getValue(), AccrualAccountsForSavings.INTEREST_PAYABLE.getValue(),
savingsProductId, paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal);
} else {
Copy link
Contributor

@adamsaghy adamsaghy Aug 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The transaction amount cannot be zero or minus!!!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

final List<SavingsAccountTransaction> orderedAccrualTransactions = new ArrayList<>();

for (final SavingsAccountTransaction transaction : listOfTransactionsSorted) {
if (transaction.isAccrual()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are using this for accrual transactions and interval validations. If the period is different, it ensures that it is not posted.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you mind to rework this to use stream API?
Something like this:

    public List<SavingsAccountTransaction> retreiveOrderedAccrualTransactions() {
        return retrieveListOfTransactions().stream()
                .filter(SavingsAccountTransaction::isAccrual)
                .sorted(new SavingsAccountTransactionComparator())
                .collect(Collectors.toList());
    }

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its better for readability ;)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, i will change it, thnks for the advice :)

savings.id,
savings.accountNumber,
savings.accruedTillDate,
CASE WHEN apm.financialAccountType = 18 THEN TRUE ELSE FALSE END,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this hardcoded value?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The number 18 corresponds to the interest_receivables account type. It is used to prevent impacting products that were created before this accounting entry existed, ensuring that the workflow operates without issues.

AND ( savings.accruedTillDate <= :tillDate OR savings.accruedTillDate IS NULL )
ORDER BY savings.id
""")
List<SavingsAccrualData> findPeriodicAccrualData(@Param("tillDate") LocalDate tillDate, @Param("savingsId") Long savingsId,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the accountingRule is coming as parameter, the method name is not correct. Should we remove the "periodic" part?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, I have removed the 'periodic' part from the method name.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
<changeSet author="fineract" id="161">
<createTable tableName="m_savings_product_accrual_charge">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is this table for?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dont see any entity or logic which would use this...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This table has been removed.

@sayhaed sayhaed requested a review from adamsaghy August 14, 2025 16:34
minBalanceForInterestCalculation, isSavingsInterestPostingAtCurrentPeriodEnd, isUserPosting,
financialYearBeginningMonth);

postingPeriod.setOverdraftInterestRateAsFraction(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sure to use MathContext here!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks. I've added the MathContext

private static final Set<String> SAVINGS_PRODUCT_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(
SavingsApiConstants.localeParamName, SavingsApiConstants.monthDayFormatParamName, nameParamName, shortNameParamName,
descriptionParamName, currencyCodeParamName, digitsAfterDecimalParamName, inMultiplesOfParamName,
interestReceivableAccount, descriptionParamName, currencyCodeParamName, digitsAfterDecimalParamName, inMultiplesOfParamName,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dont just randomly insert interestReceivableAccount, make sure it is inserted where all the rest of incoming gl account fields are listed...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks for the suggestion. I moved INTEREST_RECEIVABLE to be grouped with the other GL account fields. The change is applied.

private TaxGroup taxGroup;

@Column(name = "accrued_till_date")
protected LocalDate accruedTillDate;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any reason for having it as protected? If no, make it private! ;)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've changed it, thanks


Long retrieveAccountIdByExternalId(ExternalId externalId);

Collection<SavingsAccrualData> retrievePeriodicAccrualData(LocalDate tillDate, SavingsAccount savings);
Copy link
Contributor

@adamsaghy adamsaghy Aug 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please either use List or Set... we dont want Collection... way too generic...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We change it to a list, thanks


private void awaitJob(Instant beforeExecuteTime, Supplier<Callable<Map<String, String>>> retrieveLastRunHistory) {
final Duration timeout = Duration.ofMinutes(2);
final Duration timeout = Duration.ofMinutes(5);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why to change this? There would be maximum 2-3 savings account where periodic accrual handling is configured... it should not even run for 10 secs... no need to change this!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed

Copy link
Contributor

@adamsaghy adamsaghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please review my comments!

@sayhaed
Copy link
Contributor Author

sayhaed commented Aug 15, 2025

Hi, i made the changes, can you help me to review again please ?
:)

@sayhaed sayhaed requested a review from adamsaghy August 15, 2025 17:26
Copy link
Contributor Author

@sayhaed sayhaed left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HI @adamsaghy, can you help us to review the changes please?

minBalanceForInterestCalculation, isSavingsInterestPostingAtCurrentPeriodEnd, isUserPosting,
financialYearBeginningMonth);

postingPeriod.setOverdraftInterestRateAsFraction(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks. I've added the MathContext

private static final Set<String> SAVINGS_PRODUCT_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(
SavingsApiConstants.localeParamName, SavingsApiConstants.monthDayFormatParamName, nameParamName, shortNameParamName,
descriptionParamName, currencyCodeParamName, digitsAfterDecimalParamName, inMultiplesOfParamName,
interestReceivableAccount, descriptionParamName, currencyCodeParamName, digitsAfterDecimalParamName, inMultiplesOfParamName,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks for the suggestion. I moved INTEREST_RECEIVABLE to be grouped with the other GL account fields. The change is applied.

private TaxGroup taxGroup;

@Column(name = "accrued_till_date")
protected LocalDate accruedTillDate;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've changed it, thanks


Long retrieveAccountIdByExternalId(ExternalId externalId);

Collection<SavingsAccrualData> retrievePeriodicAccrualData(LocalDate tillDate, SavingsAccount savings);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We change it to a list, thanks


private void awaitJob(Instant beforeExecuteTime, Supplier<Callable<Map<String, String>>> retrieveLastRunHistory) {
final Duration timeout = Duration.ofMinutes(2);
final Duration timeout = Duration.ofMinutes(5);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed

@sayhaed
Copy link
Contributor Author

sayhaed commented Aug 18, 2025

HI @adamsaghy, can you help us to review the changes please?

Copy link
Contributor

@adamsaghy adamsaghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but rely on #4876, that PR must be merged before this.

@sayhaed sayhaed force-pushed the accruals_changes branch 2 times, most recently from cf3fdf4 to a1fd289 Compare August 20, 2025 16:56
@IOhacker
Copy link
Contributor

Merged afer #4876

@IOhacker IOhacker merged commit b349cf6 into apache:develop Aug 20, 2025
48 of 49 checks passed
sayhaed pushed a commit to sayhaed/fineract that referenced this pull request Aug 21, 2025
This quality of life patch reduces static weaving log message priority,
reducing the default gradle build output by about 60 lines.

example gradle run with these messages:

    > Configure project :custom
    ℹ Skipping static weaving configuration for non-Java project: custom

    > Configure project :fineract-accounting
    Configuring EclipseLink static weaving for fineract-accounting

    > Configure project :fineract-branch
    Configuring EclipseLink static weaving for fineract-branch
    ...

* update release notice years in NOTICE_RELEASE and NOTICE_SOURCE
* step 5
  * simplify mention of tests: "Ensure all tests pass for this commit both in CI and locally"
  * recommend GPG signing annotated release tag
* step 8: improve svn commands
  * This way is simpler and more efficient, especially with a bunch of release candidate dirs in the staging area.
* step 10: mention need to test rc before +1 vote -- See:
  * https://www.apache.org/legal/release-policy.html#release-approval
  * https://www.apache.org/legal/release-policy.html#approving-a-release
* step 12: only PMC members can upload releases
* step 13: simplify & explain "finalize branch" instructions
  * Document what worked for me for 1.12.1.
  * I didn't need to create the extra `merge-$VERSION` branch and do the recursive merge.
* document how asciidoctor upgrade is blocked
  * see "official docs - deps stuck" thread on fineract dev mailing list
  * https://lists.apache.org/thread/7mmsj13spb11vgz0z38fhwgzwtq03brr
  * can't upgrade to 4.x because of one of these:
    * asciidoctor/asciidoctorj-pdf#25
    * jruby/jruby#5573
    * asciidoctor/asciidoctorj-pdf#16
* improve asciidoc config - opt for simplicity where the complexity adds nothing
  * compat-mode is off by default, no need for it here
  * default optimization should be fine
  * media should have been screen | print | prepress, just leave it as default instead
  * page size? I really don't think this is going to be printed much, just go with default
  * PDF version 1.8 is invalid, just use the default unless we someday have a good reason to pin this
  * reduce copyright years sources of truth
  * see also: https://docs.asciidoctor.org/pdf-converter/latest/asciidoc-attributes/
* remove unnecessary asciidoctorj 3.0.0 version string -- no need to pin this
* remove prompt character from Bash shell examples
  * it isn't properly syntax-highlighted and it looks confusing with line numbers (which we might want to add)
  * it isn't necessary
  * the prompt character ("%" in this case) is not typically included in shell code examples because it makes it harder to copy and paste shell code examples
  * $ is likely more common than % (at least on Debian/Ubuntu), but either way I'd say exclude it
* fix source code syntax labels - use "bash" only when it is actually Bash shell code
* persistence.adoc
  * fix broken enumerated list
    * resolves these warnings seen with, e.g.: `gradle --info doc`
    * `Jul 27, 2025 8:26:48 PM uri:classloader:/gems/asciidoctor-2.0.10/lib/asciidoctor/parser.rb parse_list_item`
    * `WARNING: chapters/architecture/persistence.adoc: line 104: list item index: expected 1, got 2`
    * `Jul 27, 2025 8:26:48 PM uri:classloader:/gems/asciidoctor-2.0.10/lib/asciidoctor/parser.rb parse_list`
    * `WARNING: chapters/architecture/persistence.adoc: line 110: list item index: expected 1, got 3`
  * fix wrapping (we use hardbreaks)
  * fix typo: `s/plane text/plain text/`
* switch to rouge syntax highlighter - it handles more source languages
* fix broken long shell code lines
* fix .avro file syntax highlighting (it's JSON)
* configuration-gpg.adoc
  * fix accidental block continuation
    * One little plus sign was making `= Email` appear verbatim in rendered output because it was interpreted as a list continuation.
    * See https://docs.asciidoctor.org/asciidoc/latest/lists/continuation/#list-continuation
  * recommend more secure keys
  * add a line continuation for an enumerated list
* architecture-overview.puml: remove this unused (likely a "Hello World") diagram
* release-schedule.puml: fix pluralization of days
  * purely aesthetic: doesn't affect chart rendering
* fix src/bin/binary tarball name typos
  * missed a few in e090da2
* fix release branch name
  * must match `release/{revnumber}`, per gitVersioning stanza in top level build.gradle
* harden.adoc: fix broken link to CISA
* fineract-doc/build.gradle
  * ensure HTML task has diagrams and images availble

FINERACT-2317: Add documentation for approved amount modification endpoints

Bump actions/cache from 4.2.3 to 4.2.4

Bumps [actions/cache](https://github.com/actions/cache) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@5a3ec84...0400d5f)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

FINERACT-2314: IP tracking (apache#4825)

Co-authored-by: Juan Pablo Alvarez Hernandez <work_jpa@hotmailcom>

FINERACT-2340: remove nonexistant project "fineract-api" (apache#4924)

FINERACT-2326: The journal entries should be ordered in explicit order

FINERACT-2338: Allow backdated interest change on progressive loans - documentation

FINERACT-2326: Improve null-safety

FINERACT-2338: Allow backdated interest change on progressive loans

- charge-off handling
- write-off handling
- closed loans
- external owner changes

FINERACT-2326: Tax component and group issue serialization

FINERACT-2326: Charges with Tax group Id ignored

FINERACT-2323: support the multiple legs for journal entries

FINERACT-2326: [DOC] Interest rate change documentation

FINERACT-2324: Remove getLoanTransactions from accounting

FINERACT-2326: Fix swagger generation

FINERACT-2343: Fix update currency api validation

FINERACT-2343: added e2e tests for business date and currency validation

FINERACT-2326: Improve command query param regexp to allow hyphens

FINERACT-2326: Fix swagger generation

FINERACT-2326: Fix swagger generation

Bump actions/checkout from 4.2.2 to 5.0.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@11bd719...08c6903)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

FINERACT-2326: Extract out external dependencies from Client and Group entity

FINERACT-2330: Buy-Down fees Accounting for non merchant product

FINERACT-2326: Missing user permission for Capitalized Income and Buydown fee

FINERACT-2181: Update dependency node to v22

FINERACT-2181: Update dependency com.puppycrawl.tools:checkstyle to v11

FINERACT-2326: Fix UserLoanPermissionTest

FINERACT-2326: Use Hibernate Validator

FINERACT-2232: DeferredIncomeApi as CapitalizedIncomeApi

FINERACT-2326: Introduce FineractProgressiveLoanBeanConfiguration to allow conditionally register beans in `fineract-progressive-loan` module

FINERACT-2326: Rework business date validation and dto handling

FINERACT-2233: Rework journal entry handling logic in Loan module

FINERACT-2279: Add contract termination documentation

FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID

FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID - E2E tests

FINERACT-2312: Adjustment to savings account products by adding a new accounting account interest receivables account. (apache#4876)

FINERACT-2312: Accruals added for savings accounts (apache#4885)

cambios para reverse

test
sayhaed added a commit to sayhaed/fineract that referenced this pull request Aug 21, 2025
adamsaghy pushed a commit to openMF/fineract that referenced this pull request Aug 21, 2025
Aman-Mittal pushed a commit to Aman-Mittal/fineract that referenced this pull request Aug 24, 2025
Aman-Mittal added a commit to Aman-Mittal/fineract that referenced this pull request Aug 24, 2025
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043679 +0530

parent 0f53f77
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043674 +0530

parent 0f53f77
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043668 +0530

parent 0f53f77
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043655 +0530

parent 0f53f77
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043650 +0530

parent 0f53f77
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043640 +0530

parent 0f53f77
author Aman-Mittal <[email protected]> 1755282444 +0530
committer Aman-Mittal <[email protected]> 1756043234 +0530

# This is a combination of 30 commits.
# This is the 1st commit message:

minor sonarqube fixes

apply java sptless changes

spotless apply

Bump actions/checkout from 4.2.2 to 5.0.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@11bd719...08c6903)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

FINERACT-2326: Extract out external dependencies from Client and Group entity

FINERACT-2330: Buy-Down fees Accounting for non merchant product

FINERACT-2326: Missing user permission for Capitalized Income and Buydown fee

# This is the commit message #2:

FINERACT-2181: Update dependency node to v22

# This is the commit message #3:

FINERACT-2181: Update dependency com.puppycrawl.tools:checkstyle to v11

# This is the commit message apache#4:

FINERACT-2326: Fix UserLoanPermissionTest

# This is the commit message apache#5:

FINERACT-2326: Use Hibernate Validator

# This is the commit message apache#6:

FINERACT-2232: DeferredIncomeApi as CapitalizedIncomeApi

# This is the commit message apache#7:

FINERACT-2326: Introduce FineractProgressiveLoanBeanConfiguration to allow conditionally register beans in `fineract-progressive-loan` module

# This is the commit message apache#8:

FINERACT-2326: Rework business date validation and dto handling

# This is the commit message apache#9:

FINERACT-2233: Rework journal entry handling logic in Loan module

# This is the commit message apache#10:

FINERACT-2279: Add contract termination documentation

# This is the commit message apache#11:

FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID

# This is the commit message apache#12:

FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID - E2E tests

Implemented Sonar Fixes

# This is the commit message apache#13:

FINERACT-2312: Adjustment to savings account products by adding a new accounting account interest receivables account. (apache#4876)

# This is the commit message apache#14:

FINERACT-2312: Accruals added for savings accounts (apache#4885)

# This is the commit message apache#15:

added e2e tests for validation of progressive Loan schedule handling - Reschedule installment (Extend repayment period)

# This is the commit message apache#16:

FINERACT-1981: Progressive Loan schedule handling - Reschedule installment (Extend repayment period)

# This is the commit message apache#17:

FINERACT-2330: Buy-Down fees adjustment Acct for non merchant product

# This is the commit message apache#18:

FINERACT-2330: added e2e tests for buy down fee for non-merchant

# This is the commit message apache#19:

FINERACT-2327: when Interest Refund was created manually, we should only return the newly created Interest Refund transaction identifiers in the result.

# This is the commit message apache#20:

FINERACT-2317: Fix updating the available disbursed amount to zero after loan approval

# This is the commit message apache#21:

FINERACT-2317: added e2e tests for update available disb amount validation with zero value

# This is the commit message apache#22:

FINERACT-2326: Backdated loan charge-off accrual fix

# This is the commit message apache#23:

FINERACT-1926: Add previous owner to ExternalAssetOwnerTransfer

# This is the commit message apache#24:

FINERACT-1926: added e2e tests for asset owner event changes with previous owner

# This is the commit message apache#25:

Bump actions/setup-java from 4.7.1 to 5.0.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.1 to 5.0.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](actions/setup-java@c5195ef...dded088)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
# This is the commit message apache#26:

FINERACT-2337 Fix docker publish for tags

# This is the commit message apache#27:

FINERACT-2349: final 1.12.1 release doc updates

Tidy up docs post-1.12.1 release, alongside updates to https://cwiki.apache.org/confluence/display/FINERACT/

# This is the commit message apache#28:

FINERACT-2326: Deregister static mocks

# This is the commit message apache#29:

Bump actions/checkout from 4.2.2 to 5.0.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@11bd719...08c6903)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
# This is the commit message apache#30:

FINERACT-2326: Extract out external dependencies from Client and Group entity

FINERACT-2326: Missing user permission for Capitalized Income and Buydown fee

FINERACT-2181: Update dependency node to v22

FINERACT-2181: Update dependency com.puppycrawl.tools:checkstyle to v11

FINERACT-2326: Fix UserLoanPermissionTest

FINERACT-2232: DeferredIncomeApi as CapitalizedIncomeApi

FINERACT-2326: Introduce FineractProgressiveLoanBeanConfiguration to allow conditionally register beans in `fineract-progressive-loan` module

FINERACT-2326: Rework business date validation and dto handling

FINERACT-2279: Add contract termination documentation

FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID - E2E tests

FINERACT-2312: Accruals added for savings accounts (apache#4885)

FINERACT-1981: Progressive Loan schedule handling - Reschedule installment (Extend repayment period)

FINERACT-2330: Buy-Down fees adjustment Acct for non merchant product

FINERACT-2330: added e2e tests for buy down fee for non-merchant

FINERACT-2327: when Interest Refund was created manually, we should only return the newly created Interest Refund transaction identifiers in the result.

FINERACT-2317: added e2e tests for update available disb amount validation with zero value

FINERACT-2326: Backdated loan charge-off accrual fix

FINERACT-1926: Add previous owner to ExternalAssetOwnerTransfer

FINERACT-1926: added e2e tests for asset owner event changes with previous owner

Bump actions/setup-java from 4.7.1 to 5.0.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.1 to 5.0.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](actions/setup-java@c5195ef...dded088)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

FINERACT-2337 Fix docker publish for tags

FINERACT-2349: final 1.12.1 release doc updates

Tidy up docs post-1.12.1 release, alongside updates to https://cwiki.apache.org/confluence/display/FINERACT/

FINERACT-2326: Deregister static mocks
Aman-Mittal added a commit to Aman-Mittal/fineract that referenced this pull request Aug 24, 2025
* Bump actions/checkout from 4.2.2 to 5.0.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@11bd719...08c6903)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

* FINERACT-2326: Extract out external dependencies from Client and Group entity

* FINERACT-2330: Buy-Down fees Accounting for non merchant product

* FINERACT-2326: Missing user permission for Capitalized Income and Buydown fee

* FINERACT-2181: Update dependency node to v22

* FINERACT-2181: Update dependency com.puppycrawl.tools:checkstyle to v11

* FINERACT-2326: Fix UserLoanPermissionTest

* FINERACT-2326: Use Hibernate Validator

* FINERACT-2232: DeferredIncomeApi as CapitalizedIncomeApi

* FINERACT-2326: Introduce FineractProgressiveLoanBeanConfiguration to allow conditionally register beans in `fineract-progressive-loan` module

* FINERACT-2326: Rework business date validation and dto handling

* FINERACT-2233: Rework journal entry handling logic in Loan module

* FINERACT-2279: Add contract termination documentation

* FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID

* FINERACT-1981: Reschedule loan with interest rate change from zero breaks repayment schedule and loan status to OVERPAID - E2E tests

* FINERACT-2312: Adjustment to savings account products by adding a new accounting account interest receivables account. (apache#4876)

* FINERACT-2312: Accruals added for savings accounts (apache#4885)

* added e2e tests for validation of progressive Loan schedule handling - Reschedule installment (Extend repayment period)

* FINERACT-1981: Progressive Loan schedule handling - Reschedule installment (Extend repayment period)

* FINERACT-2330: Buy-Down fees adjustment Acct for non merchant product

* FINERACT-2330: added e2e tests for buy down fee for non-merchant

* FINERACT-2327: when Interest Refund was created manually, we should only return the newly created Interest Refund transaction identifiers in the result.

* FINERACT-2317: Fix updating the available disbursed amount to zero after loan approval

* FINERACT-2317: added e2e tests for update available disb amount validation with zero value

* FINERACT-2326: Backdated loan charge-off accrual fix

* FINERACT-1926: Add previous owner to ExternalAssetOwnerTransfer

* FINERACT-1926: added e2e tests for asset owner event changes with previous owner

* Bump actions/setup-java from 4.7.1 to 5.0.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.1 to 5.0.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](actions/setup-java@c5195ef...dded088)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

* FINERACT-2337 Fix docker publish for tags

* FINERACT-2349: final 1.12.1 release doc updates

Tidy up docs post-1.12.1 release, alongside updates to https://cwiki.apache.org/confluence/display/FINERACT/

* FINERACT-2326: Deregister static mocks

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jose Alberto Hernandez <[email protected]>
Co-authored-by: Soma Sörös <[email protected]>
Co-authored-by: Mend Renovate <[email protected]>
Co-authored-by: mariiaKraievska <[email protected]>
Co-authored-by: Adam Saghy <[email protected]>
Co-authored-by: Oleksii Novikov <[email protected]>
Co-authored-by: Peter Kovacs <[email protected]>
Co-authored-by: 04Gomez <[email protected]>
Co-authored-by: Christopher Sayhaed Giron Vega <[email protected]>
Co-authored-by: Rustam Zeinalov <[email protected]>
Co-authored-by: MarianaDmytrivBinariks <[email protected]>
Co-authored-by: Attila Budai <[email protected]>
Co-authored-by: adam.magyari <[email protected]>
Co-authored-by: Arun K <[email protected]>
Co-authored-by: Adam Monsen <[email protected]>
Aman-Mittal pushed a commit to Aman-Mittal/fineract that referenced this pull request Aug 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants