diff --git a/.github/workflows/build-cucumber.yml b/.github/workflows/build-cucumber.yml
index 6a2a3fb..895131b 100644
--- a/.github/workflows/build-cucumber.yml
+++ b/.github/workflows/build-cucumber.yml
@@ -20,7 +20,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml
index d9cb378..3c4d5f8 100644
--- a/.github/workflows/build-docker.yml
+++ b/.github/workflows/build-docker.yml
@@ -30,7 +30,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-documentation.yml b/.github/workflows/build-documentation.yml
index ededb54..ee3668c 100644
--- a/.github/workflows/build-documentation.yml
+++ b/.github/workflows/build-documentation.yml
@@ -14,7 +14,7 @@
       DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-e2e-tests.yml b/.github/workflows/build-e2e-tests.yml
index dad1b1a..573d18b 100644
--- a/.github/workflows/build-e2e-tests.yml
+++ b/.github/workflows/build-e2e-tests.yml
@@ -39,7 +39,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-mariadb.yml b/.github/workflows/build-mariadb.yml
index 987c5ae..d668c5e 100644
--- a/.github/workflows/build-mariadb.yml
+++ b/.github/workflows/build-mariadb.yml
@@ -38,7 +38,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-mysql.yml b/.github/workflows/build-mysql.yml
index 9f0f076..ca6b5ca 100644
--- a/.github/workflows/build-mysql.yml
+++ b/.github/workflows/build-mysql.yml
@@ -38,7 +38,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-postgresql.yml b/.github/workflows/build-postgresql.yml
index 5828c42..0d86cc7 100644
--- a/.github/workflows/build-postgresql.yml
+++ b/.github/workflows/build-postgresql.yml
@@ -38,7 +38,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-progressive-loan.yml b/.github/workflows/build-progressive-loan.yml
index 55ae349..49965c5 100644
--- a/.github/workflows/build-progressive-loan.yml
+++ b/.github/workflows/build-progressive-loan.yml
@@ -20,7 +20,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/build-quality-checks.yml b/.github/workflows/build-quality-checks.yml
index c18db7b..35b21e9 100644
--- a/.github/workflows/build-quality-checks.yml
+++ b/.github/workflows/build-quality-checks.yml
@@ -20,7 +20,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
@@ -62,7 +62,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
@@ -104,7 +104,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
@@ -146,7 +146,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
@@ -188,7 +188,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/liquibase-only-postgresql.yml b/.github/workflows/liquibase-only-postgresql.yml
index 773a849..be9daaa 100644
--- a/.github/workflows/liquibase-only-postgresql.yml
+++ b/.github/workflows/liquibase-only-postgresql.yml
@@ -30,7 +30,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/publish-dockerhub.yml b/.github/workflows/publish-dockerhub.yml
index 3b93b32..4d0d212 100644
--- a/.github/workflows/publish-dockerhub.yml
+++ b/.github/workflows/publish-dockerhub.yml
@@ -27,7 +27,7 @@
       DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/regression-safety-db-changes.yml b/.github/workflows/regression-safety-db-changes.yml
index 094c2d5..3323e0d 100644
--- a/.github/workflows/regression-safety-db-changes.yml
+++ b/.github/workflows/regression-safety-db-changes.yml
@@ -109,7 +109,7 @@
           path: baseline
 
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           distribution: 'zulu'
           java-version: '21'
diff --git a/.github/workflows/run-integration-test-sequentially-postgresql.yml b/.github/workflows/run-integration-test-sequentially-postgresql.yml
index 67f6d03..bc65432 100644
--- a/.github/workflows/run-integration-test-sequentially-postgresql.yml
+++ b/.github/workflows/run-integration-test-sequentially-postgresql.yml
@@ -42,7 +42,7 @@
       DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/smoke-messaging.yml b/.github/workflows/smoke-messaging.yml
index 65cb73d..f75f657 100644
--- a/.github/workflows/smoke-messaging.yml
+++ b/.github/workflows/smoke-messaging.yml
@@ -30,7 +30,7 @@
 
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml
index 73658c3..a82ab8d 100644
--- a/.github/workflows/sonarqube.yml
+++ b/.github/workflows/sonarqube.yml
@@ -38,7 +38,7 @@
         JAVA_BINARIES: .
     steps:
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           java-version: '21'
           distribution: 'zulu'
diff --git a/.github/workflows/verify-api-backward-compatibility.yml b/.github/workflows/verify-api-backward-compatibility.yml
index d1e3a40..0c82f17 100644
--- a/.github/workflows/verify-api-backward-compatibility.yml
+++ b/.github/workflows/verify-api-backward-compatibility.yml
@@ -58,7 +58,7 @@
           git merge --no-commit --no-ff FETCH_HEAD
 
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           distribution: 'zulu'
           java-version: '21'
diff --git a/.github/workflows/verify-liquibase-backward-compatibility.yml b/.github/workflows/verify-liquibase-backward-compatibility.yml
index fa88c64..4ed2e33 100644
--- a/.github/workflows/verify-liquibase-backward-compatibility.yml
+++ b/.github/workflows/verify-liquibase-backward-compatibility.yml
@@ -46,7 +46,7 @@
           path: baseline
 
       - name: Set up JDK 21
-        uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
+        uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5
         with:
           distribution: 'zulu'
           java-version: '21'
diff --git a/.github/workflows/verify-liquibase-ddl-safety.yml b/.github/workflows/verify-liquibase-ddl-safety.yml
index cb7d428..9d3e8a3 100644
--- a/.github/workflows/verify-liquibase-ddl-safety.yml
+++ b/.github/workflows/verify-liquibase-ddl-safety.yml
@@ -36,7 +36,7 @@
           BASE_REF: ${{ github.event.pull_request.base.ref }}
         run: |
           MERGE_BASE=$(git merge-base "origin/$BASE_REF" HEAD)
-          CHANGES=$(git diff --name-only "$MERGE_BASE"..HEAD -- '**/db/changelog/**/*.xml' || true)
+          CHANGES=$(git diff --name-only "$MERGE_BASE"..HEAD -- '**/db/changelog/**/*.xml' '**/db/custom-changelog/**/*.xml' '**/db/custom-changelog/*.xml' || true)
           if [ -n "$CHANGES" ]; then
             echo "has_changes=true" >> "$GITHUB_OUTPUT"
             echo "$CHANGES"
@@ -102,9 +102,9 @@
           retention-days: 5
           compression-level: 9
 
-      - name: Fail if critical violations found (unless overridden)
+      - name: Fail if blocking violations found (unless overridden)
         if: steps.changes.outputs.has_changes == 'true' && steps.ddl-check.outcome == 'failure' && steps.override.outputs.override != 'true'
         run: |
-          echo "::error::Dangerous DDL changes detected on critical tables. See the report above for details."
+          echo "::error::Liquibase safety violations detected. See the report above for details."
           echo "::error::Add the 'ddl-safety-override' label to bypass this check if the change is intentional."
           exit 1
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 986e710..627bfd6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -10,6 +10,11 @@
 
 You don't need to be a committer to provide pull requests, but [Becoming a Committer](https://cwiki.apache.org/confluence/display/FINERACT/Becoming+a+Committer) explains the process of becoming one - just in case...
 
+## Non-code contributions
+
+We need a lot of help besides code changes. For example, we also welcome wiki edits! If you wish to make non-code contributions, please first get involved on the [developer mailing list](https://lists.apache.org/list.html?dev@fineract.apache.org) and in [chat](https://app.element.io/#/room/#apache-fineract-home:matrix.org). Around the time you [request wiki access](https://selfserve.apache.org/confluence-account.html), tell us something like:
+
+> Hello! I'm Adam from Seattle, USA and I'd like to help improve the FSIP-78 wiki page. I've submitted a request for wiki edit access.
 
 ## Developer How To's
 
diff --git a/README.md b/README.md
index e2e6eda..b8e5cdc 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@
 COMMUNITY
 =========
 
-If you are interested in contributing to this project, but perhaps don't quite know how and where to get started, please [join our developer mailing list](http://fineract.apache.org/#contribute), listen into our conversations, chime into threads, or just send us a "Hello!" introduction email; we're a friendly bunch, and look forward to hearing from you. A more informal alternative is the [Fineract Slack channel](https://app.slack.com/client/T0F5GHE8Y/C028634A61L) (thank you, Mifos, for supporting the Slack channel!).
+If you are interested in contributing to this project, but perhaps don't quite know how and where to get started, please [join our developer mailing list](http://fineract.apache.org/#contribute) and [chat server](https://app.element.io/#/room/#apache-fineract-home:matrix.org), listen into our conversations, chime into threads, or just send us a "Hello!" introduction message; we're a friendly bunch, and look forward to hearing from you.
 
 For the developer wiki, see [Contributor's Zone](https://cwiki.apache.org/confluence/display/FINERACT/Contributor%27s+Zone). Maybe [these how-to articles](https://cwiki.apache.org/confluence/display/FINERACT/How-to+articles) help you to get started.
 
diff --git a/STATIC_WEAVING.md b/STATIC_WEAVING.md
index ae8ba78..643e3de 100644
--- a/STATIC_WEAVING.md
+++ b/STATIC_WEAVING.md
@@ -8,23 +8,26 @@
 
 ## Configuration
 
-The static weaving is configured in `static-weaving.gradle` and applied to all Java projects that contain JPA entities.
+The static weaving is configured in `static-weaving.gradle` and applied to all Java projects that contain JPA managed classes.
 
 ## How It Works
 
 1. **Compilation**: Java source files are compiled to the standard classes directory (`build/classes/java/main`).
-2. **Weaving**: Weaving happens as last step of **compileJava** task, which outputs them to the standard classes directory (`build/classes/java/main`).
+2. **Persistence metadata generation**: The build scans the current module and its transitive project runtime dependencies for JPA entities, mapped superclasses, and converters. It generates `build/tmp/compileJava/static-weaving/META-INF/persistence.xml`.
+3. **Weaving**: Weaving happens as the last step of the **compileJava** task, which outputs enhanced classes to the standard classes directory (`build/classes/java/main`).
 
 ## Adding Static Weaving to a Module
 
 1. Add JPA entities to `src/main/java`
-2. Ensure there's a `persistence.xml` file in `src/main/resources/jpa/static-weaving/module/[module-name]/`
+2. Add project dependencies normally in Gradle
 3. The build will automatically detect and apply static weaving
 
+Do not add module-level static-weaving `persistence.xml` files under `src/main/resources/jpa/static-weaving`; the build generates the weaving metadata.
+
 ## Troubleshooting
 
 If you encounter issues with static weaving:
 
-1. Check that the `persistence.xml` file exists in the correct location
+1. Check the generated `build/tmp/compileJava/static-weaving/META-INF/persistence.xml`
 2. Verify that the output directories are being created correctly
 3. Check the build logs for any weaving-related errors
diff --git a/build.gradle b/build.gradle
index dd98c2f..fe69334 100644
--- a/build.gradle
+++ b/build.gradle
@@ -244,7 +244,7 @@
 
         groovyGradle {
             target '*.gradle', '**/*.gradle'
-            targetExclude '**/build/**', '/**/build.gradle' // TODO: temporary disabled on build.gradle until someone fix this issue: https://github.com/diffplug/spotless/issues/1807
+            targetExclude '**/build/**', '/**/build.gradle','**/static-weaving.gradle' // TODO: temporary disabled on build.gradle until someone fix this issue: https://github.com/diffplug/spotless/issues/1807
             greclipse()
             indentWithSpaces(4)
             endWithNewline()
diff --git a/fineract-accounting/src/main/resources/jpa/static-weaving/module/fineract-accounting/persistence.xml b/fineract-accounting/src/main/resources/jpa/static-weaving/module/fineract-accounting/persistence.xml
deleted file mode 100644
index abe1b93..0000000
--- a/fineract-accounting/src/main/resources/jpa/static-weaving/module/fineract-accounting/persistence.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static" />
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-branch/src/main/resources/jpa/static-weaving/module/fineract-branch/persistence.xml b/fineract-branch/src/main/resources/jpa/static-weaving/module/fineract-branch/persistence.xml
deleted file mode 100644
index 04267b0..0000000
--- a/fineract-branch/src/main/resources/jpa/static-weaving/module/fineract-branch/persistence.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-branch module: -->
-        <class>org.apache.fineract.organisation.teller.domain.Cashier</class>
-        <class>org.apache.fineract.organisation.teller.domain.CashierTransaction</class>
-        <class>org.apache.fineract.organisation.teller.domain.Teller</class>
-        <class>org.apache.fineract.organisation.teller.domain.TellerTransaction</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-charge/src/main/resources/jpa/static-weaving/module/fineract-charge/persistence.xml b/fineract-charge/src/main/resources/jpa/static-weaving/module/fineract-charge/persistence.xml
deleted file mode 100644
index 09eb577..0000000
--- a/fineract-charge/src/main/resources/jpa/static-weaving/module/fineract-charge/persistence.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-client-feign/build.gradle b/fineract-client-feign/build.gradle
index f466639..7c28cda 100644
--- a/fineract-client-feign/build.gradle
+++ b/fineract-client-feign/build.gradle
@@ -39,6 +39,7 @@
     verbose = false
     validateSpec = false
     skipValidateSpec = true
+    cleanupOutput = true
     inputSpec = file(swaggerFile)
     outputDir = file("$buildDir/generated/temp-java")
     templateDir = file("$projectDir/src/main/resources/templates/java")
@@ -48,6 +49,8 @@
     modelPackage = 'org.apache.fineract.client.models'
     generateModelTests = false
     generateApiTests = false
+    generateModelDocumentation = false
+    generateApiDocumentation = false
     ignoreFileOverride = file("$projectDir/.openapi-generator-ignore")
     configOptions = [
             dateLibrary                : 'java8',
diff --git a/fineract-client-feign/src/main/java/org/apache/fineract/client/feign/support/ApiResponseDecoder.java b/fineract-client-feign/src/main/java/org/apache/fineract/client/feign/support/ApiResponseDecoder.java
index 2d3a408..e8029b5 100644
--- a/fineract-client-feign/src/main/java/org/apache/fineract/client/feign/support/ApiResponseDecoder.java
+++ b/fineract-client-feign/src/main/java/org/apache/fineract/client/feign/support/ApiResponseDecoder.java
@@ -21,8 +21,10 @@
 import feign.Response;
 import feign.codec.Decoder;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.nio.charset.StandardCharsets;
 import org.apache.fineract.client.models.ApiResponse;
 
 /**
@@ -37,9 +39,12 @@
  * This decoder:
  * <ol>
  * <li>Detects if the return type is ApiResponse&lt;T&gt;</li>
- * <li>Extracts the inner type T and delegates body decoding to the underlying decoder</li>
+ * <li>Extracts the inner type T and decodes it</li>
  * <li>Wraps the decoded body with status code and headers into ApiResponse&lt;T&gt;</li>
  * </ol>
+ *
+ * Generated methods returning String represent raw response bodies in Fineract's OpenAPI output. They may contain JSON
+ * arrays or objects, so they must be read directly instead of being delegated to Jackson as JSON string literals.
  */
 public final class ApiResponseDecoder implements Decoder {
 
@@ -53,12 +58,38 @@
     public Object decode(Response response, Type type) throws IOException {
         if (isApiResponseType(type)) {
             Type innerType = getApiResponseInnerType(type);
-            Object body = delegate.decode(response, innerType);
+            Object body = decodeBody(response, innerType);
             return new ApiResponse<>(response.status(), response.headers(), body);
         }
+        return decodeBody(response, type);
+    }
+
+    private Object decodeBody(Response response, Type type) throws IOException {
+        if (type == String.class) {
+            return decodeStringBody(response);
+        }
         return delegate.decode(response, type);
     }
 
+    private Object decodeStringBody(Response response) throws IOException {
+        if (response.body() == null) {
+            return null;
+        }
+        String body;
+        try (InputStream inputStream = response.body().asInputStream()) {
+            body = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
+        }
+        if (isJsonStringLiteral(body)) {
+            return delegate.decode(response.toBuilder().body(body, StandardCharsets.UTF_8).build(), String.class);
+        }
+        return body;
+    }
+
+    private boolean isJsonStringLiteral(String body) {
+        String trimmedBody = body.trim();
+        return trimmedBody.length() >= 2 && trimmedBody.charAt(0) == '"' && trimmedBody.charAt(trimmedBody.length() - 1) == '"';
+    }
+
     private boolean isApiResponseType(Type type) {
         if (type instanceof ParameterizedType paramType) {
             Type rawType = paramType.getRawType();
diff --git a/fineract-client-feign/src/test/java/org/apache/fineract/client/feign/support/ApiResponseDecoderTest.java b/fineract-client-feign/src/test/java/org/apache/fineract/client/feign/support/ApiResponseDecoderTest.java
new file mode 100644
index 0000000..575a1b7
--- /dev/null
+++ b/fineract-client-feign/src/test/java/org/apache/fineract/client/feign/support/ApiResponseDecoderTest.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.client.feign.support;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import feign.Request;
+import feign.Response;
+import feign.jackson.JacksonDecoder;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import org.apache.fineract.client.feign.ObjectMapperFactory;
+import org.apache.fineract.client.models.ApiResponse;
+import org.junit.jupiter.api.Test;
+
+class ApiResponseDecoderTest {
+
+    private final ApiResponseDecoder decoder = new ApiResponseDecoder(new JacksonDecoder(ObjectMapperFactory.getShared()));
+
+    @Test
+    void decodeStringReturnsRawResponseBody() throws Exception {
+        final String body = "[{\"test_nr\":42}]";
+
+        final Object decoded = decoder.decode(response(body), String.class);
+
+        assertThat(decoded).isEqualTo(body);
+    }
+
+    @Test
+    void decodeStringReturnsDecodedJsonStringLiteral() throws Exception {
+        final Object decoded = decoder.decode(response("\"OK\""), String.class);
+
+        assertThat(decoded).isEqualTo("OK");
+    }
+
+    @Test
+    void decodeApiResponseStringReturnsRawResponseBody() throws Exception {
+        final String body = "[{\"test_nr\":42}]";
+
+        @SuppressWarnings("unchecked")
+        final ApiResponse<String> decoded = (ApiResponse<String>) decoder.decode(response(body), apiResponseStringType());
+
+        assertThat(decoded.getStatusCode()).isEqualTo(200);
+        assertThat(decoded.getData()).isEqualTo(body);
+    }
+
+    @Test
+    void decodeApiResponseStringReturnsDecodedJsonStringLiteral() throws Exception {
+        @SuppressWarnings("unchecked")
+        final ApiResponse<String> decoded = (ApiResponse<String>) decoder.decode(response("\"OK\""), apiResponseStringType());
+
+        assertThat(decoded.getStatusCode()).isEqualTo(200);
+        assertThat(decoded.getData()).isEqualTo("OK");
+    }
+
+    private Response response(final String body) {
+        final Request request = Request.create(Request.HttpMethod.GET, "/api/test", Collections.emptyMap(), null, StandardCharsets.UTF_8,
+                null);
+        return Response.builder().status(200).reason("OK").request(request).body(body, StandardCharsets.UTF_8).build();
+    }
+
+    private Type apiResponseStringType() {
+        return new ParameterizedType() {
+
+            @Override
+            public Type[] getActualTypeArguments() {
+                return new Type[] { String.class };
+            }
+
+            @Override
+            public Type getRawType() {
+                return ApiResponse.class;
+            }
+
+            @Override
+            public Type getOwnerType() {
+                return null;
+            }
+        };
+    }
+}
diff --git a/fineract-client/build.gradle b/fineract-client/build.gradle
index d7d4ec4..8917743 100644
--- a/fineract-client/build.gradle
+++ b/fineract-client/build.gradle
@@ -62,6 +62,7 @@
     verbose = false
     validateSpec = false
     skipValidateSpec = true
+    cleanupOutput = true
     inputSpec = file(swaggerFile)
     outputDir = file("$buildDir/generated/temp-java")
     templateDir = file("$projectDir/src/main/resources/templates/java")
@@ -79,6 +80,8 @@
     ]
     generateModelTests = false
     generateApiTests = false
+    generateModelDocumentation = false
+    generateApiDocumentation = false
     ignoreFileOverride = file("$projectDir/.openapi-generator-ignore")
     dependsOn(':fineract-provider:resolve')
 }
@@ -88,6 +91,7 @@
     verbose = false
     validateSpec = false
     skipValidateSpec = true
+    cleanupOutput = true
     inputSpec = file(swaggerFile)
     outputDir = file("$buildDir/generated/typescript")
     apiPackage = 'apache-fineract-client/services'
@@ -101,6 +105,7 @@
         npmRepository: "${npmRepository}"
     ]
     dependsOn(':fineract-provider:resolve')
+    mustRunAfter(buildJavaSdk)
 }
 
 task buildTypescriptFetchSdk(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
@@ -108,6 +113,7 @@
     verbose = false
     validateSpec = false
     skipValidateSpec = true
+    cleanupOutput = true
     inputSpec = file(swaggerFile)
     outputDir = file("$buildDir/generated/typescript-fetch")
     configOptions = [
@@ -118,6 +124,7 @@
         withInterfaces: 'true'
     ]
     dependsOn(':fineract-provider:resolve')
+    mustRunAfter(buildTypescriptAngularSdk)
 }
 
 task buildAsciidoc(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
@@ -125,6 +132,7 @@
     verbose = false
     validateSpec = false
     skipValidateSpec = true
+    cleanupOutput = true
     inputSpec = file(swaggerFile)
     outputDir = file("$buildDir/generated/asciidoc")
     apiPackage = 'org.apache.fineract.client.services'
@@ -145,6 +153,7 @@
         useMethodAndPath: 'true'
     ]
     dependsOn(':fineract-provider:resolve')
+    mustRunAfter(buildTypescriptAngularSdk)
 }
 
 // Configure source sets with proper output directories
diff --git a/fineract-client/src/main/java/org/apache/fineract/client/services/InternalWorkingCapitalLoansApi.java b/fineract-client/src/main/java/org/apache/fineract/client/services/InternalWorkingCapitalLoansApi.java
new file mode 100644
index 0000000..bbe7588
--- /dev/null
+++ b/fineract-client/src/main/java/org/apache/fineract/client/services/InternalWorkingCapitalLoansApi.java
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.client.services;
+
+import retrofit2.Call;
+import retrofit2.http.POST;
+import retrofit2.http.Path;
+import retrofit2.http.Query;
+
+/**
+ * Internal testing API for Working Capital Loans. These endpoints are only available when the TEST profile is active.
+ */
+public interface InternalWorkingCapitalLoansApi {
+
+    @POST("v1/internal/working-capital-loans/{loanId}/activate")
+    Call<Void> activateLoan(@Path("loanId") Long loanId, @Query("disbursementDate") String disbursementDate);
+
+    @POST("v1/internal/working-capital-loans/{loanId}/generate-next-delinquency-period")
+    Call<Void> generateNextDelinquencyPeriod(@Path("loanId") Long loanId, @Query("businessDate") String businessDate);
+}
diff --git a/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java b/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java
index 8e61622..61b6b0d 100644
--- a/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java
+++ b/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java
@@ -86,6 +86,7 @@
 import org.apache.fineract.client.services.InterestRateChartApi;
 import org.apache.fineract.client.services.InterestRateSlabAKAInterestBandsApi;
 import org.apache.fineract.client.services.InternalCobApi;
+import org.apache.fineract.client.services.InternalWorkingCapitalLoansApi;
 import org.apache.fineract.client.services.JournalEntriesApi;
 import org.apache.fineract.client.services.ListReportMailingJobHistoryApi;
 import org.apache.fineract.client.services.LoanAccountLockApi;
@@ -146,6 +147,21 @@
 import org.apache.fineract.client.services.TellerCashManagementApi;
 import org.apache.fineract.client.services.TemplatesApi;
 import org.apache.fineract.client.services.UsersApi;
+import org.apache.fineract.client.services.WorkingCapitalBreachApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanAccountLockApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanBreachActionsApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanBreachScheduleApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanChargesApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanCobCatchUpApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanDelinquencyActionsApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanDelinquencyRangeScheduleApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanInternalCobApiApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanNearBreachActionsApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanOriginatorsApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanProductsApi;
+import org.apache.fineract.client.services.WorkingCapitalLoanTransactionsApi;
+import org.apache.fineract.client.services.WorkingCapitalLoansApi;
+import org.apache.fineract.client.services.WorkingCapitalNearBreachApi;
 import org.apache.fineract.client.services.WorkingDaysApi;
 import org.apache.fineract.client.util.JSON.GsonCustomConverterFactory;
 import org.slf4j.Logger;
@@ -287,6 +303,23 @@
     public final InlineJobApi inlineJobApi;
     public final LoanBuyDownFeesApi loanBuyDownFeesApi;
 
+    public final WorkingCapitalLoanProductsApi workingCapitalLoanProducts;
+    public final WorkingCapitalLoanAccountLockApi workingCapitalLoanAccountLock;
+    public final WorkingCapitalLoanCobCatchUpApi workingCapitalLoanCobCatchUpApi;
+    public final WorkingCapitalLoanDelinquencyActionsApi workingCapitalLoanDelinquencyActions;
+    public final WorkingCapitalLoanDelinquencyRangeScheduleApi workingCapitalLoanDelinquencyRangeSchedule;
+    public final WorkingCapitalLoanBreachScheduleApi workingCapitalLoanBreachSchedule;
+    public final WorkingCapitalLoanBreachActionsApi workingCapitalLoanBreachActions;
+    public final InternalWorkingCapitalLoansApi internalWorkingCapitalLoans;
+    public final WorkingCapitalLoansApi workingCapitalLoans;
+    public final WorkingCapitalLoanChargesApi workingCapitalLoanCharges;
+    public final WorkingCapitalLoanTransactionsApi workingCapitalLoanTransactions;
+    public final WorkingCapitalLoanInternalCobApiApi workingCapitalLoanInternalCobApi;
+    public final WorkingCapitalBreachApi workingCapitalBreaches;
+    public final WorkingCapitalNearBreachApi workingCapitalNearBreaches;
+    public final WorkingCapitalLoanNearBreachActionsApi workingCapitalLoanNearBreachActions;
+    public final WorkingCapitalLoanOriginatorsApi workingCapitalLoanOriginators;
+
     private FineractClient(OkHttpClient okHttpClient, Retrofit retrofit) {
         this.okHttpClient = okHttpClient;
         this.retrofit = retrofit;
@@ -403,6 +436,22 @@
         progressiveLoanApi = retrofit.create(ProgressiveLoanApi.class);
         inlineJobApi = retrofit.create(InlineJobApi.class);
         loanBuyDownFeesApi = retrofit.create(LoanBuyDownFeesApi.class);
+        workingCapitalLoanProducts = retrofit.create(WorkingCapitalLoanProductsApi.class);
+        workingCapitalLoanAccountLock = retrofit.create(WorkingCapitalLoanAccountLockApi.class);
+        workingCapitalLoanCobCatchUpApi = retrofit.create(WorkingCapitalLoanCobCatchUpApi.class);
+        workingCapitalLoanDelinquencyActions = retrofit.create(WorkingCapitalLoanDelinquencyActionsApi.class);
+        workingCapitalLoanDelinquencyRangeSchedule = retrofit.create(WorkingCapitalLoanDelinquencyRangeScheduleApi.class);
+        workingCapitalLoanBreachSchedule = retrofit.create(WorkingCapitalLoanBreachScheduleApi.class);
+        workingCapitalLoanBreachActions = retrofit.create(WorkingCapitalLoanBreachActionsApi.class);
+        internalWorkingCapitalLoans = retrofit.create(InternalWorkingCapitalLoansApi.class);
+        workingCapitalLoans = retrofit.create(WorkingCapitalLoansApi.class);
+        workingCapitalLoanCharges = retrofit.create(WorkingCapitalLoanChargesApi.class);
+        workingCapitalLoanTransactions = retrofit.create(WorkingCapitalLoanTransactionsApi.class);
+        workingCapitalLoanInternalCobApi = retrofit.create(WorkingCapitalLoanInternalCobApiApi.class);
+        workingCapitalBreaches = retrofit.create(WorkingCapitalBreachApi.class);
+        workingCapitalNearBreaches = retrofit.create(WorkingCapitalNearBreachApi.class);
+        workingCapitalLoanNearBreachActions = retrofit.create(WorkingCapitalLoanNearBreachActionsApi.class);
+        workingCapitalLoanOriginators = retrofit.create(WorkingCapitalLoanOriginatorsApi.class);
     }
 
     public static Builder builder() {
diff --git a/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientApiTests.java b/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientApiTests.java
new file mode 100644
index 0000000..40ce4f3
--- /dev/null
+++ b/fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientApiTests.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.client.test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.apache.fineract.client.util.FineractClient;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class FineractClientApiTests {
+
+    private FineractClient client;
+
+    @BeforeEach
+    void setUp() {
+        client = FineractClient.builder().baseURL("http://test/").tenant("default").basicAuth("mifos", "password").build();
+    }
+
+    @Test
+    void workingCapitalApisAreAvailable() {
+        assertNotNull(client.workingCapitalLoanProducts);
+        assertNotNull(client.workingCapitalLoanAccountLock);
+        assertNotNull(client.workingCapitalLoanCobCatchUpApi);
+        assertNotNull(client.workingCapitalLoanDelinquencyActions);
+        assertNotNull(client.workingCapitalLoanDelinquencyRangeSchedule);
+        assertNotNull(client.workingCapitalLoanBreachSchedule);
+        assertNotNull(client.workingCapitalLoanBreachActions);
+        assertNotNull(client.internalWorkingCapitalLoans);
+        assertNotNull(client.workingCapitalLoans);
+        assertNotNull(client.workingCapitalLoanCharges);
+        assertNotNull(client.workingCapitalLoanTransactions);
+        assertNotNull(client.workingCapitalLoanInternalCobApi);
+        assertNotNull(client.workingCapitalBreaches);
+        assertNotNull(client.workingCapitalNearBreaches);
+        assertNotNull(client.workingCapitalLoanNearBreachActions);
+        assertNotNull(client.workingCapitalLoanOriginators);
+    }
+}
diff --git a/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml b/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml
deleted file mode 100644
index 076bdf7..0000000
--- a/fineract-cob/src/main/resources/jpa/static-weaving/module/fineract-cob/persistence.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-core/src/main/resources/jpa/static-weaving/module/fineract-core/persistence.xml b/fineract-core/src/main/resources/jpa/static-weaving/module/fineract-core/persistence.xml
deleted file mode 100644
index 36c4542..0000000
--- a/fineract-core/src/main/resources/jpa/static-weaving/module/fineract-core/persistence.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static" />
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentApiResource.java b/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentApiResource.java
index 2ce3f6f..0cfd08b 100644
--- a/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentApiResource.java
+++ b/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentApiResource.java
@@ -29,6 +29,8 @@
 import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE;
 
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.ws.rs.Consumes;
@@ -163,7 +165,7 @@
             - file
             - description
             """)
-    @ApiResponse(responseCode = "200", description = "Not Shown (multi-part form data)")
+    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = DocumentCreateResponse.class)))
     public DocumentCreateResponse createDocument(@PathParam(DOCUMENT_API_PARAM_ENTITY_TYPE) final String entityType,
             @PathParam(DOCUMENT_API_PARAM_ENTITY_ID) final Long entityId, @HeaderParam(CONTENT_LENGTH) final Long fileSize,
             @FormDataParam(DOCUMENT_API_PARAM_FILE) final InputStream is,
@@ -203,7 +205,7 @@
             - description: description of the document
             - file: the file to be uploaded
             """)
-    @ApiResponse(responseCode = "200", description = "Not Shown (multi-part form data)")
+    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = DocumentUpdateResponse.class)))
     public DocumentUpdateResponse updateDocument(@PathParam(DOCUMENT_API_PARAM_ENTITY_TYPE) final String entityType,
             @PathParam(DOCUMENT_API_PARAM_ENTITY_ID) final Long entityId, @PathParam(DOCUMENT_API_PARAM_DOCUMENT_ID) final Long documentId,
             @HeaderParam(CONTENT_LENGTH) final Long fileSize, @FormDataParam(DOCUMENT_API_PARAM_FILE) final InputStream is,
@@ -234,7 +236,7 @@
     @Path("{documentId}")
     @Operation(summary = "Remove a Document", description = """
             """)
-    @ApiResponse(responseCode = "200", description = "OK")
+    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = DocumentDeleteResponse.class)))
     public DocumentDeleteResponse deleteDocument(@PathParam(DOCUMENT_API_PARAM_ENTITY_TYPE) final String entityType,
             @PathParam(DOCUMENT_API_PARAM_ENTITY_ID) final Long entityId,
             @PathParam(DOCUMENT_API_PARAM_DOCUMENT_ID) final Long documentId) {
diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/factory/WorkingCapitalLoanRequestFactory.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/factory/WorkingCapitalLoanRequestFactory.java
index 83f99e0..2ce5ab2 100644
--- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/factory/WorkingCapitalLoanRequestFactory.java
+++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/factory/WorkingCapitalLoanRequestFactory.java
@@ -118,9 +118,11 @@
                 .locale(DEFAULT_LOCALE);//
     }
 
-    public PostWorkingCapitalLoansBreachActionRequest defaultWorkingCapitalLoansBreachActionRequest(String action) {
+    public PostWorkingCapitalLoansBreachActionRequest defaultWorkingCapitalLoansBreachActionRequest(final String action) {
         return new PostWorkingCapitalLoansBreachActionRequest()//
                 .action(action)//
+                .startDate(DATE_SUBMIT_STRING)//
+                .endDate(DATE_SUBMIT_STRING)//
                 .dateFormat(DATE_FORMAT)//
                 .locale(DEFAULT_LOCALE);//
     }
diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/datatable/DatatablesStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/datatable/DatatablesStepDef.java
index d5aad6c..771233c 100644
--- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/datatable/DatatablesStepDef.java
+++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/datatable/DatatablesStepDef.java
@@ -576,6 +576,9 @@
     }
 
     private List<Map<?, ?>> toRowList(final Object response) {
+        if (response instanceof String serialized) {
+            return deserializeRowList(serialized);
+        }
         if (response instanceof List<?> list) {
             final List<Map<?, ?>> rows = new ArrayList<>();
             for (final Object item : list) {
@@ -591,6 +594,17 @@
         return List.of();
     }
 
+    private List<Map<?, ?>> deserializeRowList(final String serialized) {
+        if (serialized.isBlank()) {
+            return List.of();
+        }
+        try {
+            return toRowList(OBJECT_MAPPER.readValue(serialized, Object.class));
+        } catch (final JsonProcessingException e) {
+            throw new IllegalStateException("Failed to deserialize datatable row response", e);
+        }
+    }
+
     private Long resolveEntityId(final DatatableEntityType entityType) {
         return switch (entityType) {
             case LOAN -> resolveLoanId();
diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalBreachActionStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalBreachActionStepDef.java
index 1dcda7b..5daa251 100644
--- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalBreachActionStepDef.java
+++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalBreachActionStepDef.java
@@ -44,14 +44,16 @@
 import org.apache.fineract.test.factory.WorkingCapitalLoanRequestFactory;
 import org.apache.fineract.test.stepdef.AbstractStepDef;
 import org.apache.fineract.test.support.TestContextKey;
+import org.junit.jupiter.api.Assertions;
 
 @Slf4j
 @RequiredArgsConstructor
 public class WorkingCapitalBreachActionStepDef extends AbstractStepDef {
 
     private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd MMMM yyyy");
+    private static final Long NON_EXISTENT_LOAN_ID = 999999999L;
 
-    private final FineractFeignClient fineractFeignClient;
+    private final FineractFeignClient fineractClient;
     private final WorkingCapitalLoanRequestFactory workingCapitalLoanRequestFactory;
 
     @When("Admin creates WC breach reschedule action with the following parameters:")
@@ -64,29 +66,29 @@
     @Then("Admin fails to create WC breach reschedule action with minimumPayment {int} {word} and frequency {int} {word} with error containing {string}")
     public void failToCreateRescheduleActionWithMessage(final int minimumPayment, final String minimumPaymentType, final int frequency,
             final String frequencyType, final String expectedMessage) {
-        final Long loanId = getLoanId();
+        final Long loanId = extractLoanId();
         final PostWorkingCapitalLoansBreachActionRequest request = buildRescheduleRequest(new BigDecimal(minimumPayment),
                 minimumPaymentType, frequency, frequencyType);
         final CallFailedRuntimeException exception = fail(
-                () -> fineractFeignClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+                () -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
         assertThat(exception.getStatus()).as("HTTP status code").isEqualTo(400);
         assertThat(exception.getDeveloperMessage()).as("Developer message").contains(expectedMessage);
     }
 
     @Then("Admin fails to create WC breach reschedule action with no parameters with error containing {string}")
     public void failToCreateEmptyRescheduleAction(final String expectedMessage) {
-        final Long loanId = getLoanId();
+        final Long loanId = extractLoanId();
         final PostWorkingCapitalLoansBreachActionRequest request = buildRescheduleRequest(Map.of());
 
         final CallFailedRuntimeException exception = fail(
-                () -> fineractFeignClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+                () -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
         assertThat(exception.getStatus()).as("HTTP status code").isEqualTo(400);
         assertThat(exception.getDeveloperMessage()).as("Developer message").contains(expectedMessage);
     }
 
     @Then("WC loan breach actions have the following data:")
     public void verifyBreachActionsHistory(final DataTable table) {
-        final Long loanId = getLoanId();
+        final Long loanId = extractLoanId();
         final List<WorkingCapitalLoanBreachActionData> actions = retrieveBreachActions(loanId);
         final List<Map<String, String>> expectedRows = table.asMaps();
         assertThat(actions).as("Breach actions count").hasSize(expectedRows.size());
@@ -98,19 +100,172 @@
         log.info("Successfully verified {} breach action(s) for loan {}", actions.size(), loanId);
     }
 
+    @Then("Retrieving breach actions for a non-existent Working Capital loan results in a 404 error")
+    public void retrieveBreachActionsForNonExistentLoanResultsInNotFound() {
+        final CallFailedRuntimeException exception = fail(
+                () -> fineractClient.workingCapitalLoanBreachActions().retrieveBreachActions(NON_EXISTENT_LOAN_ID));
+
+        assertThat(exception.getStatus()).as("HTTP status code should be 404").isEqualTo(404);
+
+        log.info("Verified breach actions retrieval failed with 404 for non-existent loan {}", NON_EXISTENT_LOAN_ID);
+    }
+
+    @When("Admin initiate a Working Capital loan breach pause with startDate {string} and endDate {string}")
+    public void initiateBreachPause(final String startDate, final String endDate) {
+        final Long loanId = extractLoanId();
+        final PostWorkingCapitalLoansBreachActionRequest request = buildBreachActionRequest("pause", startDate, endDate);
+        final PostWorkingCapitalLoansBreachActionResponse response = createBreachActionById(loanId, request);
+
+        log.debug("Breach pause initiated for loan {} with startDate: {}, endDate: {}, response: {}", loanId, startDate, endDate, response);
+    }
+
+    @When("Admin initiate a Working Capital loan breach pause by external ID with startDate {string} and endDate {string}")
+    public void initiateBreachPauseByExternalId(final String startDate, final String endDate) {
+        final String loanExternalId = extractLoanExternalId();
+        final PostWorkingCapitalLoansBreachActionRequest request = buildBreachActionRequest("pause", startDate, endDate);
+        final PostWorkingCapitalLoansBreachActionResponse response = createBreachActionByExternalId(loanExternalId, request);
+
+        log.debug("Breach pause initiated for loan externalId {} with startDate: {}, endDate: {}, response: {}", loanExternalId, startDate,
+                endDate, response);
+    }
+
+    @When("Admin initiate a Working Capital loan breach resume with startDate {string}")
+    public void initiateBreachResume(final String startDate) {
+        final Long loanId = extractLoanId();
+        final PostWorkingCapitalLoansBreachActionRequest request = buildResumeRequest(startDate);
+        final PostWorkingCapitalLoansBreachActionResponse response = createBreachActionById(loanId, request);
+
+        log.debug("Breach resume initiated for loan {} with startDate: {}, response: {}", loanId, startDate, response);
+    }
+
+    @When("Admin initiate a Working Capital loan breach resume by external ID with startDate {string}")
+    public void initiateBreachResumeByExternalId(final String startDate) {
+        final String loanExternalId = extractLoanExternalId();
+        final PostWorkingCapitalLoansBreachActionRequest request = buildResumeRequest(startDate);
+        final PostWorkingCapitalLoansBreachActionResponse response = createBreachActionByExternalId(loanExternalId, request);
+
+        log.debug("Breach resume initiated for loan externalId {} with startDate: {}, response: {}", loanExternalId, startDate, response);
+    }
+
+    @Then("Initiating a Working Capital loan breach resume with startDate {string} results an error with the following data:")
+    public void initiateBreachResumeResultsAnError(final String startDate, final DataTable table) {
+        final Long loanId = extractLoanId();
+
+        final PostWorkingCapitalLoansBreachActionRequest request = buildResumeRequest(startDate);
+
+        final CallFailedRuntimeException exception = fail(
+                () -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+
+        verifyBreachActionErrorWithTable(exception, table);
+
+        log.info("Verified breach resume initiation failed with expected error for loan {}", loanId);
+    }
+
+    @Then("Initiating a Working Capital loan breach pause with startDate {string} and endDate {string} results an error with the following data:")
+    public void initiateBreachPauseResultsAnError(final String startDate, final String endDate, final DataTable table) {
+        initiateBreachActionResultsAnError("pause", startDate, endDate, table);
+    }
+
+    @Then("Initiating a Working Capital loan breach action {string} with startDate {string} and endDate {string} results an error with the following data:")
+    public void initiateBreachActionResultsAnError(final String action, final String startDate, final String endDate,
+            final DataTable table) {
+        final Long loanId = extractLoanId();
+
+        final PostWorkingCapitalLoansBreachActionRequest request = buildBreachActionRequest(action, startDate, endDate);
+
+        final CallFailedRuntimeException exception = fail(
+                () -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+
+        verifyBreachActionErrorWithTable(exception, table);
+
+        log.info("Verified breach action initiation failed with expected error for loan {}", loanId);
+    }
+
+    @Then("Initiating a Working Capital loan breach action without {string} results an error with the following data:")
+    public void initiateBreachActionWithoutFieldResultsAnError(final String omittedField, final DataTable table) {
+        final Long loanId = extractLoanId();
+
+        final PostWorkingCapitalLoansBreachActionRequest request = workingCapitalLoanRequestFactory
+                .defaultWorkingCapitalLoansBreachActionRequest("pause");
+        switch (omittedField) {
+            case "action" -> request.action(null);
+            case "startDate" -> request.startDate(null);
+            case "endDate" -> request.endDate(null);
+            default -> throw new IllegalArgumentException("Unknown breach action field: " + omittedField);
+        }
+
+        final CallFailedRuntimeException exception = fail(
+                () -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+
+        verifyBreachActionErrorWithTable(exception, table);
+
+        log.info("Verified breach action initiation without '{}' failed with expected error for loan {}", omittedField, loanId);
+    }
+
+    @Then("Working Capital loan breach action has the following data:")
+    public void verifyBreachActions(final DataTable dataTable) {
+        final Long loanId = extractLoanId();
+        final List<WorkingCapitalLoanBreachActionData> actualActions = retrieveBreachActions(loanId);
+        verifyBreachActionsWithTable(actualActions, dataTable);
+    }
+
+    @Then("Working Capital loan breach action by external ID has the following data:")
+    public void verifyBreachActionsByExternalId(final DataTable dataTable) {
+        final String loanExternalId = extractLoanExternalId();
+        final List<WorkingCapitalLoanBreachActionData> actualActions = retrieveBreachActionsByExternalId(loanExternalId);
+        verifyBreachActionsWithTable(actualActions, dataTable);
+    }
+
     private void executeRescheduleAction(final PostWorkingCapitalLoansBreachActionRequest request) {
-        final Long loanId = getLoanId();
+        final Long loanId = extractLoanId();
         log.debug("Creating breach RESCHEDULE action for WC loan {}: {}", loanId, request);
 
         final PostWorkingCapitalLoansBreachActionResponse result = ok(
-                () -> fineractFeignClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+                () -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
         assertThat(result).isNotNull();
         assertThat(result.getResourceId()).isNotNull();
         log.info("Breach RESCHEDULE action created with id={}", result.getResourceId());
     }
 
-    private List<WorkingCapitalLoanBreachActionData> retrieveBreachActions(final Long loanId) {
-        return ok(() -> fineractFeignClient.workingCapitalLoanBreachActions().retrieveBreachActions(loanId));
+    private void verifyBreachActionsWithTable(final List<WorkingCapitalLoanBreachActionData> actualActions, final DataTable dataTable) {
+        assertThat(actualActions).as("Breach actions should not be empty").isNotEmpty();
+
+        final List<List<String>> rows = dataTable.asLists();
+        final List<String> headers = rows.getFirst();
+        final List<List<String>> expectedData = rows.subList(1, rows.size());
+
+        assertThat(actualActions).as("Breach actions size should match expected data").hasSize(expectedData.size());
+
+        for (int i = 0; i < expectedData.size(); i++) {
+            final List<String> expectedRow = expectedData.get(i);
+            final WorkingCapitalLoanBreachActionData actualAction = actualActions.get(i);
+
+            for (int j = 0; j < headers.size(); j++) {
+                final String header = headers.get(j);
+                final String expectedValue = expectedRow.get(j);
+                verifyBreachActionField(actualAction, header, expectedValue, i + 1);
+            }
+        }
+
+        log.info("Successfully verified {} breach action(s)", actualActions.size());
+    }
+
+    private void verifyBreachActionField(final WorkingCapitalLoanBreachActionData actual, final String fieldName,
+            final String expectedValue, final int rowNumber) {
+        Assertions.assertNotNull(actual.getAction());
+        switch (fieldName) {
+            case "action" -> assertThat(actual.getAction().name()).as("Action for row %d", rowNumber).isEqualTo(expectedValue);
+            case "startDate" ->
+                assertThat(actual.getStartDate()).as("Start date for row %d", rowNumber).isEqualTo(LocalDate.parse(expectedValue));
+            case "endDate" -> {
+                if (expectedValue == null || expectedValue.isBlank()) {
+                    assertThat(actual.getEndDate()).as("End date for row %d", rowNumber).isNull();
+                } else {
+                    assertThat(actual.getEndDate()).as("End date for row %d", rowNumber).isEqualTo(LocalDate.parse(expectedValue));
+                }
+            }
+            default -> throw new IllegalArgumentException("Unknown field name: " + fieldName);
+        }
     }
 
     private void verifyActionField(final WorkingCapitalLoanBreachActionData actual, final String field, final String expected,
@@ -138,12 +293,22 @@
         Optional.ofNullable(expected).filter(Predicate.not(String::isBlank)).ifPresentOrElse(whenPresent, whenAbsent);
     }
 
-    private Long getLoanId() {
+    private Long extractLoanId() {
         final PostWorkingCapitalLoansResponse loanResponse = testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
         assertThat(loanResponse).isNotNull();
         return loanResponse.getLoanId();
     }
 
+    private String extractLoanExternalId() {
+        final Long loanId = extractLoanId();
+        return ok(() -> fineractClient.workingCapitalLoans().retrieveWorkingCapitalLoanById(loanId)).getExternalId();
+    }
+
+    private PostWorkingCapitalLoansBreachActionRequest buildBreachActionRequest(final String action, final String startDate,
+            final String endDate) {
+        return workingCapitalLoanRequestFactory.defaultWorkingCapitalLoansBreachActionRequest(action).startDate(startDate).endDate(endDate);
+    }
+
     private PostWorkingCapitalLoansBreachActionRequest buildRescheduleRequest(final BigDecimal minimumPayment,
             final String minimumPaymentType, final int frequency, final String frequencyType) {
         return buildRescheduleRequest(Map.of("minimumPayment", minimumPayment.toPlainString(), "minimumPaymentType", minimumPaymentType,
@@ -159,4 +324,45 @@
         Optional.ofNullable(params.get("frequencyType")).ifPresent(request::setFrequencyType);
         return request;
     }
+
+    private PostWorkingCapitalLoansBreachActionRequest buildResumeRequest(final String startDate) {
+        return workingCapitalLoanRequestFactory.defaultWorkingCapitalLoansBreachActionRequest("resume").startDate(startDate).endDate(null);
+    }
+
+    private PostWorkingCapitalLoansBreachActionResponse createBreachActionById(final Long loanId,
+            final PostWorkingCapitalLoansBreachActionRequest request) {
+        return ok(() -> fineractClient.workingCapitalLoanBreachActions().createBreachAction(loanId, request));
+    }
+
+    private PostWorkingCapitalLoansBreachActionResponse createBreachActionByExternalId(final String loanExternalId,
+            final PostWorkingCapitalLoansBreachActionRequest request) {
+        return ok(() -> fineractClient.workingCapitalLoanBreachActions().createBreachActionByExternalId(loanExternalId, request));
+    }
+
+    private List<WorkingCapitalLoanBreachActionData> retrieveBreachActions(final Long loanId) {
+        final List<WorkingCapitalLoanBreachActionData> actions = ok(
+                () -> fineractClient.workingCapitalLoanBreachActions().retrieveBreachActions(loanId));
+        log.debug("Breach actions for loan {}: {}", loanId, actions);
+        return actions;
+    }
+
+    private List<WorkingCapitalLoanBreachActionData> retrieveBreachActionsByExternalId(final String loanExternalId) {
+        final List<WorkingCapitalLoanBreachActionData> actions = ok(
+                () -> fineractClient.workingCapitalLoanBreachActions().retrieveBreachActionsByExternalId(loanExternalId));
+        log.debug("Breach actions for loan externalId {}: {}", loanExternalId, actions);
+        return actions;
+    }
+
+    private void verifyBreachActionErrorWithTable(final CallFailedRuntimeException exception, final DataTable table) {
+        final List<List<String>> data = table.asLists();
+        final String expectedHttpCode = data.get(1).get(0);
+        final String expectedErrorMessage = data.get(1).get(1);
+
+        log.info("Checking for Http code: {} and error message: \"{}\"", expectedHttpCode, expectedErrorMessage);
+
+        assertThat(exception.getStatus()).as("HTTP status code should be " + expectedHttpCode)
+                .isEqualTo(Integer.parseInt(expectedHttpCode));
+        assertThat(exception.getMessage()).as("Should contain error message").contains(expectedErrorMessage);
+    }
+
 }
diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalLoanAccountStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalLoanAccountStepDef.java
index a4d7a86..3537e29 100644
--- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalLoanAccountStepDef.java
+++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalLoanAccountStepDef.java
@@ -120,6 +120,9 @@
     private static final String WC_CBR_TEMPLATE_RESPONSE = "wcCbrTemplateResponse";
     private static final String WC_CBR_JOURNAL_ENTRIES_BEFORE = "wcCbrJournalEntriesBefore";
     private static final String WC_CBR_JOURNAL_ENTRIES_AFTER = "wcCbrJournalEntriesAfter";
+    private static final String WC_LAST_TRANSACTION_TYPE = "wcLastTransactionType";
+    private static final String WC_LAST_TRANSACTION_DATE = "wcLastTransactionDate";
+    private static final String WC_LAST_TRANSACTION_AMOUNT = "wcLastTransactionAmount";
 
     private final FineractFeignClient fineractClient;
     private final WorkingCapitalLoanProductResolver workingCapitalLoanProductResolver;
@@ -2607,6 +2610,57 @@
         validateRepaymentResponse(response, transactionAmount, transactionDate, loanId);
     }
 
+    @Then("Customer makes {string} transaction on {string} with {double} transaction amount on Working Capital loan with the following payment details:")
+    public void makeWorkingCapitalLoanTransactionLikeWithPaymentDetails(final String transactionTypeInput, final String transactionDate,
+            final double transactionAmount, final DataTable table) {
+        final Long loanId = getCreatedLoanId();
+        final String command = TransactionType.valueOf(transactionTypeInput).getValue();
+        final PostWorkingCapitalLoanTransactionsPaymentDetailRequest paymentDetails = buildPaymentDetailsFromTable(table);
+        final PostWorkingCapitalLoanTransactionsRequest request = buildRepaymentRequest(transactionDate, transactionAmount, paymentDetails);
+        final PostWorkingCapitalLoanTransactionsResponse response = executeRepaymentLikeById(loanId, command, request);
+        validateRepaymentResponse(response, transactionAmount, transactionDate, loanId);
+    }
+
+    @Then("Working Capital loan transaction with type {string} has payment type {string}")
+    public void workingCapitalLoanTransactionHasPaymentType(final String transactionTypeInput, final String expectedPaymentTypeName) {
+        final String expectedTransactionType = TransactionType.valueOf(transactionTypeInput).getValue();
+        final String expectedTypeCode = "loanTransactionType." + expectedTransactionType;
+        final Long loanId = getCreatedLoanId();
+        final String lastTransactionType = testContext().get(WC_LAST_TRANSACTION_TYPE);
+        final String lastTransactionDate = testContext().get(WC_LAST_TRANSACTION_DATE);
+        final BigDecimal lastTransactionAmount = testContext().get(WC_LAST_TRANSACTION_AMOUNT);
+        Assertions.assertNotNull(lastTransactionType,
+                String.format("WC transaction type must be present before asserting payment type for %s", transactionTypeInput));
+        Assertions.assertNotNull(lastTransactionDate,
+                String.format("WC transaction date must be present before asserting payment type for %s", transactionTypeInput));
+        Assertions.assertNotNull(lastTransactionAmount,
+                String.format("WC transaction amount must be present before asserting payment type for %s", transactionTypeInput));
+        assertThat(lastTransactionType).as("last WC transaction type").isEqualTo(expectedTransactionType);
+
+        final List<GetWorkingCapitalLoanTransactionIdResponse> transactions = retrieveLoanTransactions(loanId).getContent();
+        Assertions.assertNotNull(transactions, "WC loan transactions list must not be null");
+        final List<GetWorkingCapitalLoanTransactionIdResponse> matchingTransactions = transactions.stream()
+                .filter(t -> !Boolean.TRUE.equals(t.getReversed()) && t.getType() != null && expectedTypeCode.equals(t.getType().getCode()))
+                .filter(t -> t.getTransactionDate() != null && lastTransactionDate.equals(DATE_FORMATTER.format(t.getTransactionDate())))
+                .filter(t -> t.getTransactionAmount() != null && t.getTransactionAmount().compareTo(lastTransactionAmount) == 0).toList();
+        assertThat(matchingTransactions)
+                .as("active %s WC transaction on %s with amount %s", transactionTypeInput, lastTransactionDate, lastTransactionAmount)
+                .hasSize(1);
+        final Long transactionId = matchingTransactions.getFirst().getId();
+        Assertions.assertNotNull(transactionId, String.format("transaction id must be present on %s transaction", transactionTypeInput));
+
+        final GetWorkingCapitalLoanTransactionIdResponse txn = ok(
+                () -> fineractClient.workingCapitalLoanTransactions().retrieveWorkingCapitalLoanTransactionById(loanId, transactionId));
+        Assertions.assertNotNull(txn.getType(), String.format("transaction type must be present on %s transaction", transactionTypeInput));
+        assertThat(txn.getType().getCode()).as("transaction type code").isEqualTo(expectedTypeCode);
+        Assertions.assertNotNull(txn.getPaymentDetailData(),
+                String.format("paymentDetailData must be present on %s transaction", transactionTypeInput));
+        Assertions.assertNotNull(txn.getPaymentDetailData().getPaymentType(),
+                String.format("paymentType must be present on %s transaction", transactionTypeInput));
+        assertThat(txn.getPaymentDetailData().getPaymentType().getName()).as("payment type name on %s transaction", transactionTypeInput)
+                .isEqualTo(expectedPaymentTypeName);
+    }
+
     private PostWorkingCapitalLoanTransactionsRequest buildCreditBalanceRefundRequest(final String transactionDate,
             final double transactionAmount, final PostWorkingCapitalLoanTransactionsPaymentDetailRequest paymentDetails) {
         final PostWorkingCapitalLoanTransactionsRequest request = workingCapitalProductRequestFactory
@@ -2626,6 +2680,7 @@
         final int before = countJournalEntriesForLoan(loanId);
         final PostWorkingCapitalLoanTransactionsResponse response = ok(() -> fineractClient.workingCapitalLoanTransactions()
                 .executeWorkingCapitalLoanTransactionById(loanId, "creditBalanceRefund", cbrRequest));
+        rememberLastWorkingCapitalTransaction("creditBalanceRefund", cbrRequest.getTransactionDate(), cbrRequest.getTransactionAmount());
         final int after = countJournalEntriesForLoan(loanId);
         testContext().set(WC_CBR_JOURNAL_ENTRIES_BEFORE, before);
         testContext().set(WC_CBR_JOURNAL_ENTRIES_AFTER, after);
@@ -2650,8 +2705,11 @@
         log.debug("Making {} for loan ID: {}, transactionDate: {}, transactionAmount: {}", transactionType, loanId,
                 repaymentRequest.getTransactionDate(), repaymentRequest.getTransactionAmount());
 
-        return ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionById(loanId, transactionType,
-                repaymentRequest));
+        final PostWorkingCapitalLoanTransactionsResponse response = ok(() -> fineractClient.workingCapitalLoanTransactions()
+                .executeWorkingCapitalLoanTransactionById(loanId, transactionType, repaymentRequest));
+        rememberLastWorkingCapitalTransaction(transactionType, repaymentRequest.getTransactionDate(),
+                repaymentRequest.getTransactionAmount());
+        return response;
     }
 
     private PostWorkingCapitalLoanTransactionsResponse executeRepaymentByExternalId(final String loanExternalId,
@@ -2659,8 +2717,17 @@
         log.debug("Making repayment for loan externalId: {}, transactionDate: {}, transactionAmount: {}", loanExternalId,
                 repaymentRequest.getTransactionDate(), repaymentRequest.getTransactionAmount());
 
-        return ok(() -> fineractClient.workingCapitalLoanTransactions().executeWorkingCapitalLoanTransactionByExternalId(loanExternalId,
-                "repayment", repaymentRequest));
+        final PostWorkingCapitalLoanTransactionsResponse response = ok(() -> fineractClient.workingCapitalLoanTransactions()
+                .executeWorkingCapitalLoanTransactionByExternalId(loanExternalId, "repayment", repaymentRequest));
+        rememberLastWorkingCapitalTransaction("repayment", repaymentRequest.getTransactionDate(), repaymentRequest.getTransactionAmount());
+        return response;
+    }
+
+    private void rememberLastWorkingCapitalTransaction(final String transactionType, final String transactionDate,
+            final BigDecimal transactionAmount) {
+        testContext().set(WC_LAST_TRANSACTION_TYPE, transactionType);
+        testContext().set(WC_LAST_TRANSACTION_DATE, transactionDate);
+        testContext().set(WC_LAST_TRANSACTION_AMOUNT, transactionAmount);
     }
 
     @Then("Working Capital loan amortization schedule has {int} periods, with the following data for periods:")
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part1.feature b/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part1.feature
index b62eb2a..ef305c7 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part1.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part1.feature
@@ -1811,3 +1811,250 @@
 
     When Loan Pay-off is made on "26 June 2025"
     Then Loan's all installments have obligations met
+
+  @TestRailId:C85341
+  Scenario: Verify remaining capitalized income is fully recognized on loan sale to external owner
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                      | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2026   | 200            | 0                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "200" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type   | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement       | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+    And Loan Transactions tab has a "CAPITALIZED_INCOME" transaction with date "01 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | ASSET     | 112601       | Loans Receivable            | 50.0  |        |
+      | LIABILITY | 145024       | Deferred Capitalized Income |       | 50.0   |
+    And Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 0.0              | 50.0                | 0.0             | 0.0                |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-02     | 1                  |
+    Then Asset externalization response has the correct Loan ID, transferExternalId
+    When Admin sets the business date to "03 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Fetching Asset externalization details by loan id gives numberOfElements: 2 with correct ownerExternalId and the following data:
+      | settlementDate | purchasePriceRatio | status  | effectiveFrom | effectiveTo | Transaction type |
+      | 2026-01-02     | 1                  | PENDING | 2026-01-01    | 2026-01-02  | SALE             |
+      | 2026-01-02     | 1                  | ACTIVE  | 2026-01-03    | 9999-12-31  | SALE             |
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 1.11   | 0.0       | 1.11     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 48.89  | 0.0       | 48.89    | 0.0  | 0.0       | 0.0          | false    |
+    And Loan Transactions tab has 2 a "CAPITALIZED_INCOME_AMORTIZATION" transactions with date "02 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | INCOME    | 404000       | Interest Income             |       | 1.11   |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 1.11  |        |
+      | INCOME    | 404000       | Interest Income             |       | 48.89  |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 48.89 |        |
+    And Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 50.0             | 0.0                 | 0.0             | 0.0                |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | buyback          | 2026-01-03     |                    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 50.0             | 0.0                 | 0.0             | 0.0                |
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 1.11   | 0.0       | 1.11     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 48.89  | 0.0       | 48.89    | 0.0  | 0.0       | 0.0          | false    |
+    When Loan Pay-off is made on "04 January 2026"
+    Then Loan's all installments have obligations met
+
+  @TestRailId:C85342
+  Scenario: Verify remaining buy down fee is fully recognized on loan sale to external owner
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                              | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | 01 January 2026   | 100            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "100" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    And Admin adds buy down fee with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-02     | 1                  |
+    Then Asset externalization response has the correct Loan ID, transferExternalId
+    When Admin sets the business date to "02 January 2026"
+    And Admin adds buy down fee with "AUTOPAY" payment type to the loan on "02 January 2026" with "20" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement     | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Buy Down Fee     | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee     | 20.0   | 0.0       | 20.0     | 0.0  | 0.0       | 0.0          | false    |
+    And Loan Transactions tab has a "BUY_DOWN_FEE" transaction with date "01 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | EXPENSE   | 450280       | Buy Down Expense            | 50.0  |        |
+      | LIABILITY | 145024       | Deferred Capitalized Income |       | 50.0   |
+    And Loan Transactions tab has a "BUY_DOWN_FEE" transaction with date "02 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | EXPENSE   | 450280       | Buy Down Expense            | 20.0  |        |
+      | LIABILITY | 145024       | Deferred Capitalized Income |       | 20.0   |
+    And Buy down fee contains the following data:
+      | Date            | Fee Amount | Amortized Amount | Not Yet Amortized Amount | Adjusted Amount | Charged Off Amount |
+      | 01 January 2026 | 50.0       | 0.0              | 50.0                     | 0.0             | 0.0                |
+      | 02 January 2026 | 20.0       | 0.0              | 20.0                     | 0.0             | 0.0                |
+    When Admin sets the business date to "03 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Fetching Asset externalization details by loan id gives numberOfElements: 2 with correct ownerExternalId and the following data:
+      | settlementDate | purchasePriceRatio | status  | effectiveFrom | effectiveTo | Transaction type |
+      | 2026-01-02     | 1                  | PENDING | 2026-01-01    | 2026-01-02  | SALE             |
+      | 2026-01-02     | 1                  | ACTIVE  | 2026-01-03    | 9999-12-31  | SALE             |
+    And Loan Transactions tab has the following data without accruals:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee              | 20.0   | 0.0       | 20.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee Amortization | 1.33   | 0.0       | 1.33     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee Amortization | 68.67  | 0.0       | 68.67    | 0.0  | 0.0       | 0.0          | false    |
+    And Loan Transactions tab has 2 a "BUY_DOWN_FEE_AMORTIZATION" transactions with date "02 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | INCOME    | 450281       | Income From Buy Down        |       | 1.33   |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 1.33  |        |
+      | INCOME    | 450281       | Income From Buy Down        |       | 68.67  |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 68.67 |        |
+    And Buy down fee contains the following data:
+      | Date            | Fee Amount | Amortized Amount | Not Yet Amortized Amount | Adjusted Amount | Charged Off Amount |
+      | 01 January 2026 | 50.0       | 50.0             | 0.0                      | 0.0             | 0.0                |
+      | 02 January 2026 | 20.0       | 20.0             | 0.0                      | 0.0             | 0.0                |
+    When Loan Pay-off is made on "03 January 2026" with transfer external owner
+    Then Loan's all installments have obligations met
+
+  @TestRailId:C85343
+  Scenario: Verify daily COB after loan sale does not create capitalized income amortization adjustment when deferred income is fully recognized
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                      | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2026   | 200            | 0                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "200" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-02     | 1                  |
+    When Admin sets the business date to "03 January 2026"
+    And Admin runs inline COB job for Loan
+    And Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 50.0             | 0.0                 | 0.0             | 0.0                |
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 1.11   | 0.0       | 1.11     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 48.89  | 0.0       | 48.89    | 0.0  | 0.0       | 0.0          | false    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 50.0             | 0.0                 | 0.0             | 0.0                |
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 1.11   | 0.0       | 1.11     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 48.89  | 0.0       | 48.89    | 0.0  | 0.0       | 0.0          | false    |
+    When Loan Pay-off is made on "04 January 2026" with transfer external owner
+    Then Loan's all installments have obligations met
+
+  @TestRailId:C85344
+  Scenario: Verify daily COB continues amortizing second capitalized income after first is fully recognized on loan sale
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                      | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2026   | 200            | 0                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "200" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-02     | 1                  |
+    When Admin sets the business date to "03 January 2026"
+    And Admin runs inline COB job for Loan
+    And Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 50.0             | 0.0                 | 0.0             | 0.0                |
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "03 January 2026" with "30" EUR transaction amount
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 50.0   | 50.0             | 0.0                 | 0.0             | 0.0                |
+      | 30.0   | 0.33             | 29.67               | 0.0             | 0.0                |
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 1.11   | 0.0       | 1.11     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 48.89  | 0.0       | 48.89    | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income              | 30.0   | 30.0      | 0.0      | 0.0  | 0.0       | 180.0        | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 0.34   | 0.0       | 0.34     | 0.0  | 0.0       | 0.0          | false    |
+    When Loan Pay-off is made on "04 January 2026" with transfer external owner
+    Then Loan's all installments have obligations met
+
+  @TestRailId:C85345
+  Scenario: Verify loan sale with reversed capitalized income and active second entry fully recognizes remaining deferred income without erroneous amortization adjustment
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                      | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2026   | 200            | 0                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "200" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "02 January 2026" with "30" EUR transaction amount
+    When Admin sets the business date to "03 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    |
+      | 02 January 2026  | Capitalized Income              | 30.0   | 30.0      | 0.0      | 0.0  | 0.0       | 180.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 1.45   | 0.0       | 1.45     | 0.0  | 0.0       | 0.0          | false    |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-03     | 1                  |
+    Then Asset externalization response has the correct Loan ID, transferExternalId
+    And Customer undo "1"th "Capitalized Income" transaction made on "01 January 2026"
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Fetching Asset externalization details by loan id gives numberOfElements: 2 with correct ownerExternalId and the following data:
+      | settlementDate | purchasePriceRatio | status  | effectiveFrom | effectiveTo | Transaction type |
+      | 2026-01-03     | 1                  | PENDING | 2026-01-03    | 2026-01-03  | SALE             |
+      | 2026-01-03     | 1                  | ACTIVE  | 2026-01-04    | 9999-12-31  | SALE             |
+    And Deferred Capitalized Income contains the following data:
+      | Amount | Amortized Amount | Unrecognized Amount | Adjusted Amount | Charged Off Amount |
+      | 30.0   | 30.0             | 0.0                 | 0.0             | 0.0                |
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                           | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                               | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    |
+      | 01 January 2026  | Capitalized Income                         | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | true     |
+      | 02 January 2026  | Capitalized Income                         | 30.0   | 30.0      | 0.0      | 0.0  | 0.0       | 130.0        | false    |
+      | 02 January 2026  | Capitalized Income Amortization            | 1.45   | 0.0       | 1.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization Adjustment | 0.78   | 0.0       | 0.78     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization            | 29.33  | 0.0       | 29.33    | 0.0  | 0.0       | 0.0          | false    |
+    And Loan Transactions tab has 1 a "CAPITALIZED_INCOME_AMORTIZATION" transactions with date "03 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | INCOME    | 404000       | Interest Income             |       | 29.33  |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 29.33 |        |
+    When Loan Pay-off is made on "04 January 2026" with transfer external owner
+    Then Loan's all installments have obligations met
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part2.feature b/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part2.feature
index 0c36607..00e332b 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part2.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/AssetExternalization-Part2.feature
@@ -494,3 +494,512 @@
       | buyback          | 2023-06-01     |                    |
     When Loan Pay-off is made on "25 May 2023" with previous transfer external owner
     Then Loan is closed with zero outstanding balance and it's all installments have obligations met
+
+  @TestRailId:C85346
+  Scenario: Verify owner-to-owner transfer completes via COB, Recognition of Fully Deferred Capitalized Income has correct journal entries
+    When Admin sets the business date to "1 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                      | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME | 01 January 2026   | 3000           | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "1 January 2026" with "3000" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "1 January 2026" with "1500" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    Then Loan Repayment schedule has 3 periods, with the following data for periods:
+      | Nr | Days | Date             | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due    | Paid | In advance | Late | Outstanding |
+      |    |      | 01 January 2026  |           | 1500.0          |               |          | 0.0  |           | 0.0    | 0.0  |            |      |             |
+      | 1  | 31   | 01 February 2026 |           | 1002.91         | 497.09        | 8.75     | 0.0  | 0.0       | 505.84 | 0.0  | 0.0        | 0.0  | 505.84      |
+      | 2  | 28   | 01 March 2026    |           | 502.92          | 499.99        | 5.85     | 0.0  | 0.0       | 505.84 | 0.0  | 0.0        | 0.0  | 505.84      |
+      | 3  | 31   | 01 April 2026    |           | 0.0             | 502.92        | 2.93     | 0.0  | 0.0       | 505.85 | 0.0  | 0.0        | 0.0  | 505.85      |
+
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "1 January 2026" with "900" EUR transaction amount
+    Then Loan Repayment schedule has 3 periods, with the following data for periods:
+      | Nr | Days | Date             | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due    | Paid | In advance | Late | Outstanding |
+      |    |      | 01 January 2026  |           | 1500.0          |               |          | 0.0  |           | 0.0    | 0.0  |            |      |             |
+      |    |      | 01 January 2026  |           | 900.0           |               |          | 0.0  |           | 0.0    | 0.0  |            |      |             |
+      | 1  | 31   | 01 February 2026 |           | 1604.65         | 795.35        | 14.0     | 0.0  | 0.0       | 809.35 | 0.0  | 0.0        | 0.0  | 809.35      |
+      | 2  | 28   | 01 March 2026    |           | 804.66          | 799.99        | 9.36     | 0.0  | 0.0       | 809.35 | 0.0  | 0.0        | 0.0  | 809.35      |
+      | 3  | 31   | 01 April 2026    |           | 0.0             | 804.66        | 4.69     | 0.0  | 0.0       | 809.35 | 0.0  | 0.0        | 0.0  | 809.35      |
+
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type   | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement       | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+    When Admin sets the business date to "2 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income              | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-15     | 1                  |
+
+    When Admin sets the business date to "15 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income              | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+
+    When Admin sets the business date to "16 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income              | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+
+    And Loan Transactions tab has a "CAPITALIZED_INCOME_AMORTIZATION" transaction with date "15 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | INCOME    | 404000       | Interest Income             |       | 750.0  |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 750.0 |        |
+      | INCOME    | 404000       | Interest Income             |       | 10.0   |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 10.0  |        |
+
+    When Admin sets the business date to "17 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income              | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 16 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | buyback          | 2026-01-20     |                    |
+
+    When Admin sets the business date to "21 January 2026"
+    When Admin runs inline COB job for Loan
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-02-01     | 1                  |
+    When Admin sets the business date to "2 February 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income              | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 16 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 17 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 18 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 19 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 20 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 21 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 22 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 23 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 24 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 25 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 26 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 27 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 28 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 29 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 30 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 31 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 01 February 2026 | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+    When Admin sets the business date to "22 February 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement                    | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Capitalized Income              | 900.0  | 900.0     | 0.0      | 0.0  | 0.0       | 2400.0       | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Capitalized Income Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 16 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 17 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 18 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 19 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 20 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 21 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 22 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 23 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 24 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 25 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 26 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 27 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 28 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 29 January 2026  | Accrual                         | 0.46   | 0.0       | 0.46     | 0.0  | 0.0       | 0.0          | false    |
+      | 30 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 31 January 2026  | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 01 February 2026 | Accrual                         | 0.45   | 0.0       | 0.45     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 03 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 04 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 05 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 06 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 07 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 08 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 09 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 10 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 11 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 12 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 13 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 14 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 15 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 16 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 17 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 18 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 19 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 20 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+      | 21 February 2026 | Accrual                         | 0.5    | 0.0       | 0.5      | 0.0  | 0.0       | 0.0          | false    |
+
+    When Loan Pay-off is made on "22 February 2026" with transfer external owner
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
+
+  @TestRailId:C85347
+  Scenario: Verify owner-to-owner transfer completes via COB, Recognition of Fully Deferred Buydown Fee has correct journal entries
+    When Admin sets the business date to "1 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a fully customized loan with the following data:
+      | LoanProduct                                              | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | 01 January 2024   | 3000           | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "1 January 2026" with "3000" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "1 January 2026" with "1500" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    Then Loan Repayment schedule has 3 periods, with the following data for periods:
+      | Nr | Days | Date             | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due    | Paid | In advance | Late | Outstanding |
+      |    |      | 01 January 2026  |           | 1500.0          |               |          | 0.0  |           | 0.0    | 0.0  |            |      |             |
+      | 1  | 31   | 01 February 2026 |           | 1002.91         | 497.09        | 8.75     | 0.0  | 0.0       | 505.84 | 0.0  | 0.0        | 0.0  | 505.84      |
+      | 2  | 28   | 01 March 2026    |           | 502.92          | 499.99        | 5.85     | 0.0  | 0.0       | 505.84 | 0.0  | 0.0        | 0.0  | 505.84      |
+      | 3  | 31   | 01 April 2026    |           | 0.0             | 502.92        | 2.93     | 0.0  | 0.0       | 505.85 | 0.0  | 0.0        | 0.0  | 505.85      |
+
+    When Admin adds buy down fee with "AUTOPAY" payment type to the loan on "01 January 2026" with "900" EUR transaction amount
+    Then Loan Repayment schedule has 3 periods, with the following data for periods:
+      | Nr | Days | Date             | Paid date | Balance of loan | Principal due | Interest | Fees | Penalties | Due    | Paid | In advance | Late | Outstanding |
+      |    |      | 01 January 2026  |           | 1500.0          |               |          | 0.0  |           | 0.0    | 0.0  |            |      |             |
+      | 1  | 31   | 01 February 2026 |           | 1002.91         | 497.09        | 8.75     | 0.0  | 0.0       | 505.84 | 0.0  | 0.0        | 0.0  | 505.84      |
+      | 2  | 28   | 01 March 2026    |           | 502.92          | 499.99        | 5.85     | 0.0  | 0.0       | 505.84 | 0.0  | 0.0        | 0.0  | 505.84      |
+      | 3  | 31   | 01 April 2026    |           | 0.0             | 502.92        | 2.93     | 0.0  | 0.0       | 505.85 | 0.0  | 0.0        | 0.0  | 505.85      |
+
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement     | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Buy Down Fee     | 900.0  | 0.0       | 900.0    | 0.0  | 0.0       | 0.0          | false    |
+    When Admin sets the business date to "2 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement              | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Buy Down Fee              | 900.0  | 0.0       | 900.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-15     | 1                  |
+
+    When Admin sets the business date to "15 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement              | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Buy Down Fee              | 900.0  | 0.0       | 900.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+
+    When Admin sets the business date to "16 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement              | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Buy Down Fee              | 900.0  | 0.0       | 900.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Buy Down Fee Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+
+    And Loan Transactions tab has a "BUY_DOWN_FEE_AMORTIZATION" transaction with date "15 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name                | Debit | Credit |
+      | INCOME    | 450281       | Income From Buy Down        |       | 750.0  |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 750.0 |        |
+      | INCOME    | 450281       | Income From Buy Down        |       | 10.0   |
+      | LIABILITY | 145024       | Deferred Capitalized Income | 10.0  |        |
+
+    When Admin sets the business date to "17 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement              | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Buy Down Fee              | 900.0  | 0.0       | 900.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Buy Down Fee Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 16 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | buyback          | 2026-01-20     |                    |
+
+    When Admin sets the business date to "21 January 2026"
+    When Admin runs inline COB job for Loan
+    When Admin makes asset externalization request by Loan ID with unique ownerExternalId, system-generated transferExternalId and the following data:
+      | Transaction type | settlementDate | purchasePriceRatio |
+      | sale             | 2026-01-25     | 1                  |
+    When Admin sets the business date to "26 January 2026"
+    When Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted |
+      | 01 January 2026  | Disbursement              | 1500.0 | 0.0       | 0.0      | 0.0  | 0.0       | 1500.0       | false    |
+      | 01 January 2026  | Buy Down Fee              | 900.0  | 0.0       | 900.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 02 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 04 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 05 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 06 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 07 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 08 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 09 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 10 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 11 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 12 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 13 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 14 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Buy Down Fee Amortization | 10.0   | 0.0       | 10.0     | 0.0  | 0.0       | 0.0          | false    |
+      | 15 January 2026  | Buy Down Fee Amortization | 750.0  | 0.0       | 750.0    | 0.0  | 0.0       | 0.0          | false    |
+      | 16 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 17 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 18 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 19 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 20 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 21 January 2026  | Accrual                   | 0.29   | 0.0       | 0.29     | 0.0  | 0.0       | 0.0          | false    |
+      | 22 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 23 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 24 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+      | 25 January 2026  | Accrual                   | 0.28   | 0.0       | 0.28     | 0.0  | 0.0       | 0.0          | false    |
+
+    When Loan Pay-off is made on "26 January 2026" with transfer external owner
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
\ No newline at end of file
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/LoanBuyDownFees.feature b/fineract-e2e-tests-runner/src/test/resources/features/LoanBuyDownFees.feature
index 61b3436..cec73c3 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/LoanBuyDownFees.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/LoanBuyDownFees.feature
@@ -4175,7 +4175,7 @@
       | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES_NON_MERCHANT |
       | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES_CLASSIFICATION_INCOME_MAP |
 
-
+  @TestRailId:C85357
   Scenario: Verify Buy Down Fee Amortization Works correctly after Buy Down Fee Adjustment Reversal buydown fee as fee
     ##Create and disburse a loan for 3-month period with buydown fees enabled (2026/03/11).
     When Admin sets the business date to "11 March 2026"
@@ -4258,6 +4258,7 @@
     When Admin sets the business date to "12 June 2026"
     Then Admin runs inline COB job for Loan
 
+  @TestRailId:C85358
   Scenario: Verify loan with Buy Down fees as FEE income type and full payment
     When Admin sets the business date to "01 January 2024"
     And Admin creates a client with random data
@@ -4318,6 +4319,7 @@
       | 01 January 2024 | 50.0       | 50.0             | 0.0                      | 0.0             | 0.0                |
     And LoanBuyDownFeeAmortizationTransactionCreatedBusinessEvent is created on "31 March 2024"
 
+  @TestRailId:C85359
   Scenario: Verify loan with Buy Down Fee adjustment as FEE income type and repayment transactions
     When Admin sets the business date to "01 January 2024"
     And Admin creates a client with random data
@@ -4420,3 +4422,161 @@
       | 01 April 2024    | Repayment                 | 33.73  | 33.34     | 0.39     | 0.0  | 0.0       | 33.52        | false    |
       | 01 April 2024    | Repayment                 | 33.91  | 33.52     | 0.39     | 0.0  | 0.0       | 0.0          | false    |
       | 01 April 2024    | Accrual                   | 0.01   | 0.0       | 0.01     | 0.0  | 0.0       | 0.0          | false    |
+
+  @TestRailId:C85355
+  Scenario: Verify Buy Down Fee amortization allocation mappings after loan re-open via repayment reversal
+    When Admin sets the business date to "1 January 2026"
+    And Admin creates a client with random data
+    When Admin creates a fully customized loan with the following data:
+      | LoanProduct                                              | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | 01 January 2026   | 250            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "1 January 2026" with "250" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "1 January 2026" with "100" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Admin adds buy down fee with "AUTOPAY" payment type to the loan on "1 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+    When Admin sets the business date to "03 January 2026"
+    When Loan Pay-off is made on "03 January 2026"
+    Then Loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Customer undo "1"th "Repayment" transaction made on "03 January 2026"
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Admin sets the business date to "05 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2026  | Accrual                   | 0.02   | 0.0       | 0.02     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+
+    When Loan Pay-off is made on "05 January 2026"
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
+
+  @TestRailId:C85356
+  Scenario: Verify Buy Down Fee amortization allocation mappings after loan re-open via payout refund reversal
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    When Admin creates a fully customized loan with the following data:
+      | LoanProduct                                              | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | 01 January 2026   | 250            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "250" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Admin adds buy down fee with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+    When Admin sets the business date to "03 January 2026"
+    And Customer makes "PAYOUT_REFUND" transaction with "AUTOPAY" payment type on "03 January 2026" with 100.04 EUR transaction amount and self-generated Idempotency key
+    Then Loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund             | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Customer undo "1"th "Payout Refund" transaction made on "03 January 2026"
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund             | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "4 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund             | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Admin sets the business date to "05 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund             | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2026  | Accrual                   | 0.02   | 0.0       | 0.02     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+
+    When Loan Pay-off is made on "05 January 2026"
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/LoanCapitalizedIncome-Part2.feature b/fineract-e2e-tests-runner/src/test/resources/features/LoanCapitalizedIncome-Part2.feature
index eaa0a71..083a375 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/LoanCapitalizedIncome-Part2.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/LoanCapitalizedIncome-Part2.feature
@@ -3750,3 +3750,152 @@
     When Loan Pay-off is made on "16 April 2024"
     Then Loan is closed with zero outstanding balance and it's all installments have obligations met
 
+  @TestRailId:C85353
+  Scenario: Verify Capitalized Income amortization allocation mappings after loan re-open via repayment reversal
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    When Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                                       | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | 01 January 2026   | 250            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "250" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+    When Admin sets the business date to "03 January 2026"
+    When Loan Pay-off is made on "03 January 2026"
+    Then Loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                       | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Customer undo "1"th "Repayment" transaction made on "03 January 2026"
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                       | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                       | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Admin sets the business date to "05 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                       | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2026  | Accrual                         | 0.02   | 0.0       | 0.02     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+
+    When Loan Pay-off is made on "05 January 2026"
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
+
+  @TestRailId:C85354
+  Scenario: Verify Capitalized Income amortization allocation mappings after loan re-open via payout refund reversal
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    When Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                                       | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | 01 January 2026   | 250            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "250" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+    When Admin sets the business date to "03 January 2026"
+    And Customer makes "PAYOUT_REFUND" transaction with "AUTOPAY" payment type on "03 January 2026" with 150.06 EUR transaction amount and self-generated Idempotency key
+    Then Loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Customer undo "1"th "Payout Refund" transaction made on "03 January 2026"
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Admin sets the business date to "05 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2026  | Accrual                         | 0.02   | 0.0       | 0.02     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+
+    When Loan Pay-off is made on "05 January 2026"
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/Reporting.feature b/fineract-e2e-tests-runner/src/test/resources/features/Reporting.feature
index 5e7a07f..95b0a6f 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/Reporting.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/Reporting.feature
@@ -720,3 +720,226 @@
       | 2023-05-26      | LP1          | 145023   | Suspense/Clearing account | self                       | -1000.0          | 0.0           | 0.0            | -1000.0       |                         |
       | 2023-05-26      | LP1          | 145023   | Suspense/Clearing account | owner_external_id          | 0.0              | 200.0         | 0.0            | 200.0         |                         |
 
+  @TestRailId:C85370
+  Scenario: Verify Transaction Summary Report with Buy Down Fee amortization allocation mappings after loan re-open via repayment reversal - UC1
+    When Admin sets the business date to "1 January 2026"
+    And Admin creates a new office
+    And Admin creates a client with random data in the last created office
+    When Admin creates a fully customized loan with the following data:
+      | LoanProduct                                              | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | 01 January 2026   | 250            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "1 January 2026" with "250" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "1 January 2026" with "100" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Admin adds buy down fee with "AUTOPAY" payment type to the loan on "1 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+    When Admin sets the business date to "03 January 2026"
+    When Loan Pay-off is made on "03 January 2026"
+    Then Loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Customer undo "1"th "Repayment" transaction made on "03 January 2026"
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Admin sets the business date to "05 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type          | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement              | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Buy Down Fee              | 50.0   | 0.0       | 50.0     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 01 January 2026  | Buy Down Fee Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Repayment                 | 100.04 | 100.0     | 0.04     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                   | 0.04   | 0.0       | 0.04     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Buy Down Fee Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2026  | Accrual                   | 0.02   | 0.0       | 0.02     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "BUY_DOWN_FEE" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    Then Transaction Summary Report for date "01 January 2026" has the following data:
+      | TransactionDate | Product                                                  | TransactionType_Name            | PaymentType_Name | chargetype | Reversed | Allocation_Type          | Chargeoff_ReasonCode | Transaction_Amount |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee                    | AUTOPAY          |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee                    | AUTOPAY          |            | 0        | Interest                 |                      | 50.0               |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee                    | AUTOPAY          |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee                    | AUTOPAY          |            | 0        | Principal                |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee                    | AUTOPAY          |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Interest                 |                      | 0.56               |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Principal                |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Disbursement                    | AUTOPAY          |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Disbursement                    | AUTOPAY          |            | 0        | Interest                 |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Disbursement                    | AUTOPAY          |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Disbursement                    | AUTOPAY          |            | 0        | Principal                |                      | 100.0              |
+      | 2026-01-01      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Disbursement                    | AUTOPAY          |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+    Then Transaction Summary Report for date "03 January 2026" has the following data:
+      | TransactionDate | Product                                                  | TransactionType_Name            | PaymentType_Name | chargetype | Reversed | Allocation_Type          | Chargeoff_ReasonCode | Transaction_Amount |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Apply Charges                   |                  |            | 0        | Interest                 |                      | 0.04               |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Interest                 |                      | 49.44              |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Principal                |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Buy Down Fee Amortization       |                  |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 0        | Interest                 |                      | -0.04              |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 0        | Principal                |                      | -100.0             |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 1        | Fees                     |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 1        | Interest                 |                      | 0.04               |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 1        | Penalty                  |                      | 0.0                |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 1        | Principal                |                      | 100.0              |
+      | 2026-01-03      | LP2_PROGRESSIVE_ADVANCED_PAYMENT_ALLOCATION_BUYDOWN_FEES | Repayment                       | AUTOPAY          |            | 1        | Unallocated Credit (UNC) |                      | 0.0                |
+    When Loan Pay-off is made on "05 January 2026"
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
+
+  @TestRailId:C85354
+  Scenario: Verify Transaction Summary Report with Capitalized Income amortization allocation mappings after loan re-open via payout refund reversal - UC2
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a new office
+    And Admin creates a client with random data in the last created office
+    When Admin creates a fully customized loan with the following data:
+      | LoanProduct                                                                                       | submitted on date | with Principal | ANNUAL interest rate % | interest type     | interest calculation period | amortization type  | loanTermFrequency | loanTermFrequencyType | repaymentEvery | repaymentFrequencyType | numberOfRepayments | graceOnPrincipalPayment | graceOnInterestPayment | interest free period | Payment strategy            |
+      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | 01 January 2026   | 250            | 7                      | DECLINING_BALANCE | DAILY                       | EQUAL_INSTALLMENTS | 3                 | MONTHS                | 1              | MONTHS                 | 3                  | 0                       | 0                      | 0                    | ADVANCED_PAYMENT_ALLOCATION |
+    And Admin successfully approves the loan on "01 January 2026" with "250" amount and expected disbursement date on "1 January 2026"
+    And Admin successfully disburse the loan on "01 January 2026" with "100" EUR transaction amount
+    Then Loan status will be "ACTIVE"
+    And Admin adds capitalized income with "AUTOPAY" payment type to the loan on "01 January 2026" with "50" EUR transaction amount
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Loan
+    Then Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+    When Admin sets the business date to "03 January 2026"
+    And Customer makes "PAYOUT_REFUND" transaction with "AUTOPAY" payment type on "03 January 2026" with 150.06 EUR transaction amount and self-generated Idempotency key
+    Then Loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Customer undo "1"th "Payout Refund" transaction made on "03 January 2026"
+    Then Loan status will be "ACTIVE"
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    When Admin sets the business date to "04 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    When Admin sets the business date to "05 January 2026"
+    And Admin runs inline COB job for Loan
+    And Loan Transactions tab has the following data:
+      | Transaction date | Transaction Type                | Amount | Principal | Interest | Fees | Penalties | Loan Balance | Reverted | Replayed |
+      | 01 January 2026  | Disbursement                    | 100.0  | 0.0       | 0.0      | 0.0  | 0.0       | 100.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income              | 50.0   | 50.0      | 0.0      | 0.0  | 0.0       | 150.0        | false    | false    |
+      | 01 January 2026  | Capitalized Income Amortization | 0.56   | 0.0       | 0.56     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Payout Refund                   | 150.06 | 150.0     | 0.06     | 0.0  | 0.0       | 0.0          | true     | false    |
+      | 03 January 2026  | Accrual                         | 0.06   | 0.0       | 0.06     | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 03 January 2026  | Capitalized Income Amortization | 49.44  | 0.0       | 49.44    | 0.0  | 0.0       | 0.0          | false    | false    |
+      | 04 January 2026  | Accrual                         | 0.02   | 0.0       | 0.02     | 0.0  | 0.0       | 0.0          | false    | false    |
+    And Loan Amortization Allocation Mapping for "CAPITALIZED_INCOME" transaction created on "01 January 2026" contains the following data:
+      | Date            | Type | Amount |
+      | 01 January 2026 | AM   | 0.56   |
+      | 03 January 2026 | AM   | 49.44  |
+    Then Transaction Summary Report for date "01 January 2026" has the following data:
+      | TransactionDate | Product                                                                                           | TransactionType_Name            | PaymentType_Name | chargetype | Reversed | Allocation_Type          | Chargeoff_ReasonCode | Transaction_Amount |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income              | AUTOPAY          |            | 0        | Fees                     |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income              | AUTOPAY          |            | 0        | Interest                 |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income              | AUTOPAY          |            | 0        | Penalty                  |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income              | AUTOPAY          |            | 0        | Principal                |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income              | AUTOPAY          |            | 0        | Unallocated Credit (UNC) |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Fees                     |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Interest                 |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Penalty                  |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Principal                |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Unallocated Credit (UNC) |                      |                    |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Disbursement                    | AUTOPAY          |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Disbursement                    | AUTOPAY          |            | 0        | Interest                 |                      | 0.0                |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Disbursement                    | AUTOPAY          |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Disbursement                    | AUTOPAY          |            | 0        | Principal                |                      | 100.0              |
+      | 2026-01-01      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Disbursement                    | AUTOPAY          |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+    Then Transaction Summary Report for date "03 January 2026" has the following data:
+      | TransactionDate | Product                                                                                           | TransactionType_Name            | PaymentType_Name | chargetype | Reversed | Allocation_Type          | Chargeoff_ReasonCode | Transaction_Amount |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Apply Charges                   |                  |            | 0        | Interest                 |                      | 0.06               |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Fees                     |                      |                    |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Interest                 |                      |                    |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Penalty                  |                      |                    |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Principal                |                      |                    |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Capitalized Income Amortization |                  |            | 0        | Unallocated Credit (UNC) |                      |                    |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 0        | Fees                     |                      | 0.0                |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 0        | Interest                 |                      | -0.06              |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 0        | Penalty                  |                      | 0.0                |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 0        | Principal                |                      | -150.0             |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 0        | Unallocated Credit (UNC) |                      | 0.0                |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 1        | Fees                     |                      | 0.0                |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 1        | Interest                 |                      | 0.06               |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 1        | Penalty                  |                      | 0.0                |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 1        | Principal                |                      | 150.0              |
+      | 2026-01-03      | LP2_ADV_PYMNT_INTEREST_DAILY_EMI_360_30_INTEREST_RECALC_DAILY_CAPITALIZED_INCOME_ADJ_CUSTOM_ALLOC | Payout Refund                   | AUTOPAY          |            | 1        | Unallocated Credit (UNC) |                      | 0.0                |
+    When Loan Pay-off is made on "05 January 2026"
+    Then Loan is closed with zero outstanding balance and it's all installments have obligations met
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalBreachPause.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalBreachPause.feature
new file mode 100644
index 0000000..039e5f7
--- /dev/null
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalBreachPause.feature
@@ -0,0 +1,939 @@
+@WorkingCapital
+@WorkingCapitalBreachPauseFeature
+Feature: Working Capital Breach Pause
+
+  @TestRailId:C85234
+  Scenario: Verify working capital loan breach pause - pause in current period extends breach schedule and does not affect delinquency schedule
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Working Capital loan delinquency range schedule has the following data:
+      | periodNumber | fromDate   | toDate     | expectedAmount | paidAmount | outstandingAmount | minPaymentCriteriaMet | delinquentAmount | delinquentDays |
+      | 1            | 2026-01-01 | 2026-01-30 | 270.0          | 0.0        | 270.0             | null                  | null             | null           |
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-15 | 2026-01-25 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-11 | 70           | 110.70           | 110.70            | null       | null   |
+    And Working Capital loan delinquency range schedule has the following data:
+      | periodNumber | fromDate   | toDate     | expectedAmount | paidAmount | outstandingAmount | minPaymentCriteriaMet | delinquentAmount | delinquentDays |
+      | 1            | 2026-01-01 | 2026-01-30 | 270.0          | 0.0        | 270.0             | null                  | null             | null           |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85235
+  Scenario: Verify working capital loan breach pause - backdated pause re-triggers evaluation of an already evaluated period
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "01 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-01 | 2026-04-30 | 61           | 110.70           | 110.70            | null       | null   |
+    When Admin initiate a Working Capital loan breach pause with startDate "20 February 2026" and endDate "02 March 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-02-20 | 2026-03-02 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-11 | 70           | 110.70           | 110.70            | null       | null   |
+      | 2            | 2026-03-12 | 2026-05-11 | 61           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "12 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-11 | 70           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-12 | 2026-05-11 | 61           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "12 March 2026"
+
+  @TestRailId:C85236
+  Scenario: Verify working capital loan breach pause - backdated pause keeps breach flag when extended period still ends in the past
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 April 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-01 | 2026-04-30 | 61           | 110.70           | 110.70            | null       | null   |
+    When Admin initiate a Working Capital loan breach pause with startDate "20 February 2026" and endDate "25 February 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-02-20 | 2026-02-25 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-06 | 65           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-07 | 2026-05-06 | 61           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 April 2026"
+
+  @TestRailId:C85237
+  Scenario: Verify working capital loan breach pause - multiple non-overlapping pauses are cumulative
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026"
+    And Admin initiate a Working Capital loan breach pause with startDate "01 February 2026" and endDate "06 February 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-15 | 2026-01-25 |
+      | PAUSE  | 2026-02-01 | 2026-02-06 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-17 | 76           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85238
+  Scenario: Verify working capital loan breach pause - overlapping pauses are rejected
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026"
+    Then Initiating a Working Capital loan breach pause with startDate "20 January 2026" and endDate "30 January 2026" results an error with the following data:
+      | httpCode | message                                                  |
+      | 400      | Failed data validation due to: overlapping.pause.periods |
+    And Initiating a Working Capital loan breach pause with startDate "10 January 2026" and endDate "30 January 2026" results an error with the following data:
+      | httpCode | message                                                  |
+      | 400      | Failed data validation due to: overlapping.pause.periods |
+    And Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-15 | 2026-01-25 |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85239
+  Scenario: Verify working capital loan breach pause - breach pause and delinquency pause are independent
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan delinquency pause with startDate "15 January 2026" and endDate "25 January 2026"
+    And Admin initiate a Working Capital loan breach pause with startDate "10 January 2026" and endDate "30 January 2026"
+    Then Working Capital loan delinquency range schedule has the following data:
+      | periodNumber | fromDate   | toDate     | expectedAmount | paidAmount | outstandingAmount | minPaymentCriteriaMet | delinquentAmount | delinquentDays |
+      | 1            | 2026-01-01 | 2026-02-10 | 270.0          | 0.0        | 270.0             | null                  | null             | null           |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-21 | 80           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85240
+  Scenario: Verify working capital loan breach pause - next period is generated from the extended period and recorded pauses apply to it
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026"
+    And Admin initiate a Working Capital loan breach pause with startDate "20 March 2026" and endDate "25 March 2026"
+    When Admin sets the business date to "12 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-11 | 70           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-12 | 2026-05-17 | 67           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "12 March 2026"
+
+  @TestRailId:C85241
+  Scenario: Verify working capital loan breach pause - future pause beyond the schedule end is preserved when a later backdated pause extends the period over its window
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "05 March 2026" and endDate "08 March 2026"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    When Admin initiate a Working Capital loan breach pause with startDate "01 February 2026" and endDate "10 February 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-03-05 | 2026-03-08 |
+      | PAUSE  | 2026-02-01 | 2026-02-10 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-14 | 73           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "15 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-14 | 73           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-15 | 2026-05-14 | 61           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 March 2026"
+
+  @TestRailId:C85242
+  Scenario: Verify working capital loan breach pause - pause created before the first COB run is applied to the initial period
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin initiate a Working Capital loan breach pause with startDate "05 January 2026" and endDate "15 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-05 | 2026-01-15 |
+    When Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-11 | 70           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "01 January 2026"
+
+  @TestRailId:C85243
+  Scenario: Verify working capital loan breach pause - validation errors
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach pause with startDate "25 January 2026" and endDate "15 January 2026" results an error with the following data:
+      | httpCode | message                                                      |
+      | 400      | Failed data validation due to: must.be.on.or.after.startDate |
+    And Initiating a Working Capital loan breach pause with startDate "25 December 2025" and endDate "05 January 2026" results an error with the following data:
+      | httpCode | message                                                                                  |
+      | 400      | The parameter `startDate` must be greater than or equal to the provided date: 2026-01-01 |
+    And Initiating a Working Capital loan breach action "invalid" with startDate "15 January 2026" and endDate "25 January 2026" results an error with the following data:
+      | httpCode | message                                                             |
+      | 400      | The parameter `action` must be one of [ pause, reschedule, resume ] |
+    And Initiating a Working Capital loan breach action without "action" results an error with the following data:
+      | httpCode | message                             |
+      | 400      | The parameter `action` is mandatory |
+    And Initiating a Working Capital loan breach action without "startDate" results an error with the following data:
+      | httpCode | message                                |
+      | 400      | The parameter `startDate` is mandatory |
+    And Initiating a Working Capital loan breach action without "endDate" results an error with the following data:
+      | httpCode | message                              |
+      | 400      | The parameter `endDate` is mandatory |
+    And Retrieving breach actions for a non-existent Working Capital loan results in a 404 error
+    Then Admin closes the Working Capital loan with a full repayment on "01 January 2026"
+
+  @TestRailId:C85244
+  Scenario: Verify working capital loan breach pause - pause is rejected for a loan without breach configuration
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | WCLP        | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026" results an error with the following data:
+      | httpCode | message                                                |
+      | 400      | Failed data validation due to: no.breach.configuration |
+    Then Admin closes the Working Capital loan with a full repayment on "01 January 2026"
+
+  @TestRailId:C85245
+  Scenario: Verify working capital loan breach pause - pause start date is validated against the grace-shifted breach schedule start
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a Working Capital Loan Product with custom breach config and overrides enabled:
+      | breachFrequency | breachFrequencyType | breachAmountCalculationType | breachAmount | breachGraceDays |
+      | 7               | DAYS                | PERCENTAGE                  | 9            | 3               |
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 1000     |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount and "1000" discount amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-04 | 2026-01-10 | 7            | 900.00           | 900.00            | null       | null   |
+    And Initiating a Working Capital loan breach pause with startDate "01 January 2026" and endDate "10 January 2026" results an error with the following data:
+      | httpCode | message                                                                                  |
+      | 400      | The parameter `startDate` must be greater than or equal to the provided date: 2026-01-04 |
+    When Admin initiate a Working Capital loan breach pause with startDate "04 January 2026" and endDate "08 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-04 | 2026-01-08 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-04 | 2026-01-15 | 12           | 900.00           | 900.00            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "01 January 2026"
+
+  @TestRailId:C85246
+  Scenario: Verify working capital loan breach pause - pause is rejected for a not yet active loan
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    Then Initiating a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026" results an error with the following data:
+      | httpCode | message                                           |
+      | 400      | Failed data validation due to: loan.is.not.active |
+
+  @TestRailId:C85247
+  Scenario: Verify working capital loan breach pause - backdated payment resets breach flag of an already breached period
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "01 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-01 | 2026-04-30 | 61           | 110.70           | 110.70            | null       | null   |
+    When Admin initiate a Working Capital loan breach pause with startDate "20 March 2026" and endDate "30 March 2026"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-01 | 2026-05-11 | 72           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "14 April 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin makes Internal Payment "150.0" on "2026-02-15"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 0.00              | null       | false  |
+      | 2            | 2026-03-01 | 2026-05-11 | 72           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "14 April 2026"
+
+  @TestRailId:C85248
+  Scenario: Verify working capital loan breach pause - touching pauses are rejected and contiguous pauses must not share a day
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "15 January 2026" and endDate "25 January 2026"
+    # start and end are inclusive, so a second pause sharing the boundary day (25 Jan) overlaps and is rejected
+    Then Initiating a Working Capital loan breach pause with startDate "25 January 2026" and endDate "05 February 2026" results an error with the following data:
+      | httpCode | message                                                  |
+      | 400      | Failed data validation due to: overlapping.pause.periods |
+    # a contiguous pause must start the day after the previous one ends, so the boundary day is not double-counted
+    When Admin initiate a Working Capital loan breach pause with startDate "26 January 2026" and endDate "05 February 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-15 | 2026-01-25 |
+      | PAUSE  | 2026-01-26 | 2026-02-05 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-22 | 81           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85249
+  Scenario: Verify working capital loan breach pause - a pre-existing payment is not re-bucketed when a later pause shifts the period boundary across its date
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "01 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "20 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    # the 50.00 paid on 05 Mar falls in period 2 (01 Mar - 30 Apr) at the time it is made
+    And Admin makes Internal Payment "50.0" on "2026-03-05"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-01 | 2026-04-30 | 61           | 110.70           | 60.70             | null       | null   |
+    # backdated pause inside period 1 pushes its end to 17 Mar, so period 1's window now covers 05 Mar,
+    # but the 50.00 paid that day stays credited to period 2
+    When Admin initiate a Working Capital loan breach pause with startDate "15 January 2026" and endDate "31 January 2026"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-17 | 76           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-18 | 2026-05-17 | 61           | 110.70           | 60.70             | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "20 March 2026"
+
+  @TestRailId:C85250
+  Scenario: Verify working capital loan breach pause - pause can be applied and retrieved by loan external id
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause by external ID with startDate "15 January 2026" and endDate "25 January 2026"
+    Then Working Capital loan breach action by external ID has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-15 | 2026-01-25 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-11 | 70           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85350
+  Scenario: Verify working capital loan breach pause - a single day pause with the same start and end date extends the schedule by one day
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "20 January 2026" and endDate "20 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-20 | 2026-01-20 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-01 | 60           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85351
+  Scenario: Verify working capital loan breach pause - a single day pause on the schedule start date extends the schedule by one day
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    # the pause covers exactly the schedule start date (inclusive), so it still extends the period by one day
+    When Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "01 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-01 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-01 | 60           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "01 January 2026"
+
+  @TestRailId:C85251
+  Scenario: Verify working capital loan breach pause - resume shortens the active pause and recalculates the breach schedule
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-10 |            |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-10 | 69           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85348
+  Scenario: Verify working capital loan breach pause - resume date remains included in the effective pause
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-10 |            |
+    # Resume date is still paused, so the effective pause is 01 Jan through 10 Jan inclusive.
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-10 | 69           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85349
+  Scenario: Verify working capital loan breach pause - a new pause can start after the effective resumed pause ends
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    # The first effective pause ends on 10 Jan, so 11 Jan is the first valid start date for another pause.
+    When Admin initiate a Working Capital loan breach pause with startDate "11 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-10 |            |
+      | PAUSE  | 2026-01-11 | 2026-01-16 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85252
+  Scenario: Verify working capital loan breach pause - resume is rejected when there is no active pause on the resume date
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "05 January 2026" and endDate "15 January 2026"
+    When Admin sets the business date to "20 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach resume with startDate "20 January 2026" results an error with the following data:
+      | httpCode | message                                                       |
+      | 400      | Failed data validation due to: resume.not.during.active.pause |
+    Then Admin closes the Working Capital loan with a full repayment on "20 January 2026"
+
+  @TestRailId:C85253
+  Scenario: Verify working capital loan breach pause - resume is rejected when the resume date is not the current business date
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "05 January 2026" and endDate "15 January 2026"
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach resume with startDate "11 January 2026" results an error with the following data:
+      | httpCode | message                                                      |
+      | 400      | Failed data validation due to: must.be.current.business.date |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85254
+  Scenario: Verify working capital loan breach pause - resume with an end date is rejected
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "05 January 2026" and endDate "15 January 2026"
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach action "resume" with startDate "10 January 2026" and endDate "20 January 2026" results an error with the following data:
+      | httpCode | message                                                        |
+      | 400      | Failed data validation due to: must.not.be.provided.for.resume |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85255
+  Scenario: Verify working capital loan breach pause - resume is rejected for a pause that was already resumed
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    Then Initiating a Working Capital loan breach resume with startDate "10 January 2026" results an error with the following data:
+      | httpCode | message                                                       |
+      | 400      | Failed data validation due to: resume.not.during.active.pause |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85256
+  Scenario: Verify working capital loan breach pause - resume shortens the pause so the period breaches earlier
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    When Admin sets the business date to "11 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-10 |            |
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-10 | 69           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-11 | 2026-05-10 | 61           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "11 March 2026"
+
+  @TestRailId:C85257
+  Scenario: Verify working capital loan breach pause - resume on the day before planned pause end shortens schedule by one day
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "15 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "15 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-15 |            |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-15 | 74           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "15 January 2026"
+
+  @TestRailId:C85258
+  Scenario: Verify working capital loan breach pause - resume by external ID
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause by external ID with startDate "01 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume by external ID with startDate "10 January 2026"
+    Then Working Capital loan breach action by external ID has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-10 |            |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-10 | 69           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85259
+  Scenario: Verify working capital loan breach pause - backdated resume is rejected
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach resume with startDate "09 January 2026" results an error with the following data:
+      | httpCode | message                                                      |
+      | 400      | Failed data validation due to: must.be.current.business.date |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85260
+  Scenario: Verify working capital loan breach pause - resume without an active pause is rejected
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Initiating a Working Capital loan breach resume with startDate "10 January 2026" results an error with the following data:
+      | httpCode | message                                                       |
+      | 400      | Failed data validation due to: resume.not.during.active.pause |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85261
+  Scenario: Verify working capital loan breach pause - resume keeps the PAUSE action dates unchanged and only shortens the breach schedule
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "28 January 2026"
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "28 January 2026" and endDate "20 February 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-28 | 2026-02-20 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-24 | 83           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "29 January 2026"
+    And Admin initiate a Working Capital loan breach resume with startDate "29 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-28 | 2026-02-20 |
+      | RESUME | 2026-01-29 |            |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-02 | 61           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "29 January 2026"
+
+  @TestRailId:C85262
+  Scenario: Verify working capital loan breach pause - COB-generated period after resume honours the shortened pause
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    When Admin sets the business date to "28 January 2026"
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "28 January 2026" and endDate "20 February 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-28 | 2026-02-20 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-24 | 83           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "29 January 2026"
+    And Admin initiate a Working Capital loan breach resume with startDate "29 January 2026"
+    When Admin sets the business date to "03 March 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-28 | 2026-02-20 |
+      | RESUME | 2026-01-29 |            |
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-02 | 61           | 110.70           | 110.70            | null       | true   |
+      | 2            | 2026-03-03 | 2026-05-02 | 61           | 110.70           | 110.70            | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "03 March 2026"
+
+  @TestRailId:C85263
+  Scenario: Verify working capital loan breach pause - resume does not affect delinquency range schedule
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    And Admin initiate a Working Capital loan breach pause with startDate "01 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-16 | 75           | 110.70           | 110.70            | null       | null   |
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action | startDate  | endDate    |
+      | PAUSE  | 2026-01-01 | 2026-01-16 |
+      | RESUME | 2026-01-10 |            |
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-10 | 69           | 110.70           | 110.70            | null       | null   |
+    And Working Capital loan delinquency range schedule has the following data:
+      | periodNumber | fromDate   | toDate     | expectedAmount | paidAmount | outstandingAmount | minPaymentCriteriaMet | delinquentAmount | delinquentDays |
+      | 1            | 2026-01-01 | 2026-01-30 | 270.0          | 0.0        | 270.0             | null                  | null             | null           |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
+
+  @TestRailId:C85352
+  Scenario: Verify working capital loan breach pause - resume after a reschedule keeps the rescheduled minimum payment and shortens the schedule
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a new Working Capital Loan Product with breachId and overrides enabled
+    And Admin creates a working capital loan using created product with the following data:
+      | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 110.70           | 110.70            | null       | null   |
+    When Admin creates WC breach reschedule action with the following parameters:
+      | minimumPayment | minimumPaymentType |
+      | 1              | PERCENTAGE         |
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-02-28 | 59           | 90               | 90                | null       | null   |
+    # the minimumPayment-only reschedule keeps the default 2-month frequency, so the period extends by the inclusive 12-day pause while the rescheduled minPayment (90) is preserved
+    When Admin initiate a Working Capital loan breach pause with startDate "05 January 2026" and endDate "16 January 2026"
+    Then Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-12 | 71           | 90               | 90                | null       | null   |
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Admin initiate a Working Capital loan breach resume with startDate "10 January 2026"
+    Then Working Capital loan breach action has the following data:
+      | action     | startDate  | endDate    |
+      | RESCHEDULE | 2026-01-01 |            |
+      | PAUSE      | 2026-01-05 | 2026-01-16 |
+      | RESUME     | 2026-01-10 |            |
+    # resume folds into the pause with an effective inclusive end of 10 Jan (the resume date is still a paused day), shortening the extension from 12 to 6 days
+    And Working Capital loan breach schedule has the following data:
+      | periodNumber | fromDate   | toDate     | numberOfDays | minPaymentAmount | outstandingAmount | nearBreach | breach |
+      | 1            | 2026-01-01 | 2026-03-06 | 65           | 90               | 90                | null       | null   |
+    Then Admin closes the Working Capital loan with a full repayment on "10 January 2026"
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAdjustment.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAdjustment.feature
index 26b9e36..a8bfa98 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAdjustment.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAdjustment.feature
@@ -207,14 +207,14 @@
       | 01 January 2026 | Disbursement              | 100.0             | 100.0            | 0.0               | 0.0                   | false    |
       | 01 January 2026 | Discount Fee              | 12.0              | 12.0             | 0.0               | 0.0                   | false    |
       | 02 January 2026 | Repayment                 | 112.0             | 112.0            | 0.0               | 0.0                   | false    |
-      | 02 January 2026 | Discount Fee Amortization | 12.19             |                  |                   |                       | false    |
+      | 02 January 2026 | Discount Fee Amortization | 12.0              |                  |                   |                       | false    |
     Then Add Discount fee adjustment with "12" amount and transaction date "02 January 2026" on Working Capital loan account failed due to not active loan
     And Working Capital Loan has transactions:
       | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
       | 01 January 2026 | Disbursement              | 100.0             | 100.0            | 0.0               | 0.0                   | false    |
       | 01 January 2026 | Discount Fee              | 12.0              | 12.0             | 0.0               | 0.0                   | false    |
       | 02 January 2026 | Repayment                 | 112.0             | 112.0            | 0.0               | 0.0                   | false    |
-      | 02 January 2026 | Discount Fee Amortization | 12.19             |                  |                   |                       | false    |
+      | 02 January 2026 | Discount Fee Amortization | 12.0              |                  |                   |                       | false    |
 
   @TestRailId:C83034
   Scenario: Verify Discount fee adjustment failed when loan is overpaid - UC11
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAmortizationRecalculation.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAmortizationRecalculation.feature
new file mode 100644
index 0000000..0b563aa
--- /dev/null
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalDiscountAmortizationRecalculation.feature
@@ -0,0 +1,437 @@
+@WorkingCapitalDiscountFeeAmortizationRecalculationFeature
+Feature: Working Capital Discount Fee Amortization Recalculation
+
+  @TestRailId:C85360
+  Scenario: Multiple COB runs accumulate discount fee amortization correctly - UC1
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    And Customer makes repayment on "03 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "04 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+      | 03 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 03 January 2026 | Discount Fee Amortization | 9.57              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 100.0              | 19.18          | 980.82           | 0.0               |
+    And Customer makes repayment on "04 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "05 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+      | 03 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 03 January 2026 | Discount Fee Amortization | 9.57              |                  |                   |                       | false    |
+      | 04 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Discount Fee Amortization | 9.52              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 150.0              | 28.7           | 971.3            | 0.0               |
+
+  @TestRailId:C85361
+  Scenario: Second COB run without new repayment does not produce a duplicate amortization transaction - UC2
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    When Admin sets the business date to "04 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+
+  @TestRailId:C85362
+  Scenario: Undo of discount fee adjustment recalculates realized income from net amortization transactions - UC3
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    When Admin sets the business date to "04 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Admin adds Discount fee adjustment with "500" amount on transaction date "04 January 2026" on Working Capital loan account for last discount
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9500.0    | 50.0               | 9.61           | 490.39           | 0.0               |
+    When Admin sets the business date to "05 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                                 | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement                         | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee                         | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                            | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization            | 9.61              |                  |                   |                       | false    |
+      | 04 January 2026 | Discount Fee Adjustment              | 500.0             | 500.0            | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Discount Fee Amortization Adjustment | 4.47              |                  |                   |                       | false    |
+    Then Working Capital Loan Transactions tab has a "DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT" transaction with date "04 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name              | Debit | Credit |
+      | INCOME    | 404000       | Interest Income           | 4.47  |        |
+      | LIABILITY | 240005       | Deferred Interest Revenue |       | 4.47   |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9500.0    | 50.0               | 5.14           | 494.86           | 0.0               |
+    When Admin undo the last Discount fee adjustment on Working Capital loan account
+    And Working Capital Loan has transactions:
+      | transactionDate | type                                 | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement                         | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee                         | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                            | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization            | 9.61              |                  |                   |                       | false    |
+      | 04 January 2026 | Discount Fee Adjustment              | 500.0             | 500.0            | 0.0               | 0.0                   | true     |
+      | 04 January 2026 | Discount Fee Amortization Adjustment | 4.47              |                  |                   |                       | true     |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+
+  @TestRailId:C85363
+  Scenario: Inline full discount recognition on loan close uses net amortization as base to compute remaining amount - UC4
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    When Admin sets the business date to "05 January 2026"
+    And Customer makes repayment on "05 January 2026" with 9950 transaction amount on Working Capital loan
+    Then Working Capital loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+      | 05 January 2026 | Repayment                 | 9950.0            | 9950.0           | 0.0               | 0.0                   | false    |
+      | 05 January 2026 | Discount Fee Amortization | 990.39            |                  |                   |                       | false    |
+    Then Working Capital Loan Transactions tab has a "DISCOUNT_FEE_AMORTIZATION" transaction with date "05 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name              | Debit  | Credit |
+      | INCOME    | 404000       | Interest Income           |        | 990.39 |
+      | LIABILITY | 240005       | Deferred Interest Revenue | 990.39 |        |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 10000.0            | 1000.0         | 0.0              | 0.0               |
+
+  @TestRailId:C85364
+  Scenario: Inline recognition on close produces amortization adjustment when discount was reduced below already-posted amount - UC4b
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    When Admin sets the business date to "04 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Admin adds Discount fee adjustment with "995" amount on transaction date "04 January 2026" on Working Capital loan account for last discount
+    And Customer makes repayment on "04 January 2026" with 8955 transaction amount on Working Capital loan
+    Then Working Capital loan status will be "CLOSED_OBLIGATIONS_MET"
+    And Working Capital Loan has transactions:
+      | transactionDate | type                                 | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement                         | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee                         | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                            | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization            | 9.61              |                  |                   |                       | false    |
+      | 04 January 2026 | Discount Fee Adjustment              | 995.0             | 995.0            | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Repayment                            | 8955.0            | 8955.0           | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Discount Fee Amortization Adjustment | 4.61              |                  |                   |                       | false    |
+    Then Working Capital Loan Transactions tab has a "DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT" transaction with date "04 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name              | Debit | Credit |
+      | INCOME    | 404000       | Interest Income           | 4.61  |        |
+      | LIABILITY | 240005       | Deferred Interest Revenue |       | 4.61   |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9005.0    | 9005.0             | 5.0            | 0.0              | 0.0               |
+
+  @TestRailId:C85365
+  Scenario: Second COB after amortization adjustment does not produce a duplicate transaction - UC5
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    When Admin sets the business date to "04 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Admin adds Discount fee adjustment with "500" amount on transaction date "04 January 2026" on Working Capital loan account for last discount
+    When Admin sets the business date to "05 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                                 | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement                         | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee                         | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                            | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization            | 9.61              |                  |                   |                       | false    |
+      | 04 January 2026 | Discount Fee Adjustment              | 500.0             | 500.0            | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Discount Fee Amortization Adjustment | 4.47              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9500.0    | 50.0               | 5.14           | 494.86           | 0.0               |
+    When Admin sets the business date to "06 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                                 | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement                         | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee                         | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                            | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization            | 9.61              |                  |                   |                       | false    |
+      | 04 January 2026 | Discount Fee Adjustment              | 500.0             | 500.0            | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Discount Fee Amortization Adjustment | 4.47              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9500.0    | 50.0               | 5.14           | 494.86           | 0.0               |
+
+  @TestRailId:C85366
+  Scenario: Catch-up of COB does not produce amortization transactions before transaction date - UC6
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    When Admin sets the business date to "02 January 2026"
+    And Customer makes repayment on "02 January 2026" with 50 transaction amount on Working Capital loan
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 9.61              |                  |                   |                       | false    |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 9.61           | 990.39           | 0.0               |
+    When Admin sets the business date to "04 January 2026"
+    And Admin adds Discount fee adjustment with "500" amount on transaction date "04 January 2026" on Working Capital loan account for last discount
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9500.0    | 50.0               | 9.61           | 490.39           | 0.0               |
+    When Admin sets the business date to "05 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working Capital Loan has transactions:
+      | transactionDate | type                                 | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement                         | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee                         | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                            | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization            | 9.61              |                  |                   |                       | false    |
+      | 04 January 2026 | Discount Fee Adjustment              | 500.0             | 500.0            | 0.0               | 0.0                   | false    |
+      | 04 January 2026 | Discount Fee Amortization Adjustment | 4.47              |                  |                   |                       | false    |
+    Then Working Capital Loan Transactions tab has a "DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT" transaction with date "04 January 2026" which has the following Journal entries:
+      | Type      | Account code | Account name              | Debit | Credit |
+      | INCOME    | 404000       | Interest Income           | 4.47  |        |
+      | LIABILITY | 240005       | Deferred Interest Revenue |       | 4.47   |
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9500.0    | 50.0               | 5.14           | 494.86           | 0.0               |
+
+  @TestRailId:C85367
+  Scenario: Verify discount fee amortization transaction on working capital loan after repayment overpays loan - UC7
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    Then Working capital loan approval was successful
+    And Working capital loan account has the correct data:
+      | product.name             | submittedOnDate | expectedDisbursementDate | status   | principal | approvedPrincipal | totalPaymentVolume | periodPaymentRate | discountApproved |
+      | WCLP_ADVANCED_ACCOUNTING | 2026-01-01      | 2026-01-01               | Approved | 0.0       | 9000.0            | 100000.0           | 18.0              | null             |
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    Then Working Capital loan status will be "ACTIVE"
+    And Verify Working Capital loan disbursement was successful
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    And Working capital loan account has the correct data:
+      | product.name             | submittedOnDate | expectedDisbursementDate | status | principal | approvedPrincipal | totalPaymentVolume | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 2026-01-01      | 2026-01-01               | Active | 10000.0   | 9000.0            | 100000.0           | 18.0              | 1000.0    |
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Customer makes repayment on "02 January 2026" with 10200.0 transaction amount on Working Capital loan
+    Then Working Capital loan status will be "OVERPAID"
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 10000.0            | 1000.0         | 0.0              | 200.0             |
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 10200.0           | 10000.0          | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 1000.0            |                  |                   |                       | false    |
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 10000.0            | 1000.0         | 0.0              | 200.0             |
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 10200.0           | 10000.0          | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Amortization | 1000.0            |                  |                   |                       | false    |
+
+  @TestRailId:C85368
+  Scenario: Verify none discount fee amortization nor discount fee adjustment amortization if discount fee adjustment pays off discount fee - UC8
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct              | submittedOnDate | expectedDisbursementDate | principalAmount | totalPayment | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 01 January 2026 | 01 January 2026          | 9000            | 100000       | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    Then Working capital loan approval was successful
+    And Working capital loan account has the correct data:
+      | product.name             | submittedOnDate | expectedDisbursementDate | status   | principal | approvedPrincipal | totalPaymentVolume | periodPaymentRate | discountApproved |
+      | WCLP_ADVANCED_ACCOUNTING | 2026-01-01      | 2026-01-01               | Approved | 0.0       | 9000.0            | 100000.0           | 18.0              | null             |
+    When Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    Then Working Capital loan status will be "ACTIVE"
+    And Verify Working Capital loan disbursement was successful
+    And Admin adds Discount fee with "1000" amount on Working Capital loan account for last disbursement
+    And Working capital loan account has the correct data:
+      | product.name             | submittedOnDate | expectedDisbursementDate | status | principal | approvedPrincipal | totalPaymentVolume | periodPaymentRate | discount |
+      | WCLP_ADVANCED_ACCOUNTING | 2026-01-01      | 2026-01-01               | Active | 10000.0   | 9000.0            | 100000.0           | 18.0              | 1000.0     |
+    When Admin sets the business date to "02 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Customer makes repayment on "02 January 2026" with 50.0 transaction amount on Working Capital loan
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 10000.0   | 50.0               | 0.0            | 1000.0           | 0.0               |
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+    And Admin adds Discount fee adjustment with "1000" amount on transaction date "02 January 2026" on Working Capital loan account for last discount
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9000.0    | 50.0               | 0.0            | 0.0              | 0.0               |
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Adjustment   | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+    When Admin sets the business date to "03 January 2026"
+    When Admin runs inline COB job for Working Capital Loan
+    And Working capital loan account has the correct data:
+      | principal | totalPaidPrincipal | realizedIncome | unrealizedIncome | overpaymentAmount |
+      | 9000.0    | 50.0               | 0.0            | 0.0              | 0.0               |
+    And Working Capital Loan has transactions:
+      | transactionDate | type                      | transactionAmount | principalPortion | feeChargesPortion | penaltyChargesPortion | reversed |
+      | 01 January 2026 | Disbursement              | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
+      | 01 January 2026 | Discount Fee              | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Repayment                 | 50.0              | 50.0             | 0.0               | 0.0                   | false    |
+      | 02 January 2026 | Discount Fee Adjustment   | 1000.0            | 1000.0           | 0.0               | 0.0                   | false    |
+
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanCreditBalanceRefund.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanCreditBalanceRefund.feature
index 2e6311e..90df8a7 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanCreditBalanceRefund.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanCreditBalanceRefund.feature
@@ -70,6 +70,7 @@
       | paymentType   | accountNumber | checkNumber | routingCode | receiptNumber | bankNumber |
       | CHECK_PAYMENT | 12345         | 321         | 456         | 789           | 654        |
     Then Working Capital loan status will be "OVERPAID"
+    And Working Capital loan transaction with type "CREDIT_BALANCE_REFUND" has payment type "CHECK_PAYMENT"
     And Customer makes credit balance refund on "03 January 2026" with 25.0 transaction amount on Working Capital loan
     Then Working Capital loan status will be "CLOSED_OBLIGATIONS_MET"
 
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanGoodwillCredit.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanGoodwillCredit.feature
index 02b5b45..5989fe8 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanGoodwillCredit.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanGoodwillCredit.feature
@@ -31,6 +31,23 @@
       | 01 January 2026 | Disbursement    | 9000.0            | 9000.0           | 0.0               | 0.0                   | false    |
       | 10 January 2026 | Goodwill Credit | 270.0             | 270.0            | 0.0               | 0.0                   | false    |
 
+  @TestRailId:C85369
+  Scenario: Verify working capital loan Goodwill Credit transaction - UC1b: Goodwill Credit with payment details exposes payment type on GET
+    When Admin sets the business date to "01 January 2026"
+    And Admin creates a client with random data
+    And Admin creates a working capital loan with the following data:
+      | LoanProduct | submittedOnDate | expectedDisbursementDate | principalAmount | totalPaymentVolume | periodPaymentRate | discount |
+      | WCLP        | 01 January 2026 | 01 January 2026          | 9000            | 100000             | 18                | 0        |
+    And Admin successfully approves the working capital loan on "01 January 2026" with "9000" amount and expected disbursement date on "01 January 2026"
+    And Admin successfully disburse the Working Capital loan on "01 January 2026" with "9000" EUR transaction amount
+    Then Working Capital loan status will be "ACTIVE"
+    When Admin sets the business date to "10 January 2026"
+    And Admin runs inline COB job for Working Capital Loan by loanId
+    And Customer makes "GOODWILL_CREDIT" transaction on "10 January 2026" with 270.0 transaction amount on Working Capital loan with the following payment details:
+      | paymentType | accountNumber | checkNumber | routingCode | receiptNumber | bankNumber |
+      | AUTOPAY     | acc123        | che456      | rou789      | rec012        | ban345     |
+    Then Working Capital loan transaction with type "GOODWILL_CREDIT" has payment type "AUTOPAY"
+
   @TestRailId:C80924
   Scenario: Verify working capital loan Goodwill Credit transaction - UC2: Goodwill Credit transaction with zero amount results an error (Negative)
     When Admin sets the business date to "01 January 2026"
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanRepayment.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanRepayment.feature
index 837701e..e8eb28a 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanRepayment.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalLoanRepayment.feature
@@ -4533,6 +4533,7 @@
     And Customer makes repayment on "10 January 2026" with 270.0 transaction amount on Working Capital loan with the following payment details:
       | paymentType | accountNumber | checkNumber | routingCode | receiptNumber | bankNumber |
       | AUTOPAY     | acc123        | che456      | rou789      | rec012        | ban345     |
+    And Working Capital loan transaction with type "REPAYMENT" has payment type "AUTOPAY"
     Then Working Capital loan delinquency range schedule has the following data:
       | periodNumber | fromDate   | toDate     | expectedAmount | paidAmount | outstandingAmount | minPaymentCriteriaMet | delinquentAmount | delinquentDays |
       | 1            | 2026-01-01 | 2026-01-30 | 270.0          | 270.0      | 0.0               | true                  | 0.0              | 0              |
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStep.java b/fineract-investor/src/main/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStep.java
index d9987ae..a0c275e 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStep.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStep.java
@@ -43,7 +43,10 @@
 import org.apache.fineract.investor.service.ExternalAssetOwnerTransferOutstandingInterestCalculation;
 import org.apache.fineract.investor.service.LoanTransferabilityService;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
+import org.apache.fineract.portfolio.loanaccount.service.LoanBuyDownFeeAmortizationProcessingService;
+import org.apache.fineract.portfolio.loanaccount.service.LoanCapitalizedIncomeAmortizationProcessingService;
 import org.apache.fineract.portfolio.loanaccount.service.LoanJournalEntryPoster;
+import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.data.domain.Sort;
 import org.springframework.lang.Nullable;
@@ -67,6 +70,8 @@
     private final LoanTransferabilityService loanTransferabilityService;
     private final DelayedSettlementAttributeService delayedSettlementAttributeService;
     private final ExternalAssetOwnerTransferOutstandingInterestCalculation externalAssetOwnerTransferOutstandingInterestCalculation;
+    private final LoanCapitalizedIncomeAmortizationProcessingService loanCapitalizedIncomeAmortizationProcessingService;
+    private final LoanBuyDownFeeAmortizationProcessingService loanBuyDownFeeAmortizationProcessingService;
 
     @Override
     public Loan execute(Loan loan) {
@@ -177,10 +182,24 @@
         ExternalAssetOwnerTransfer newTransfer = activatePendingEntry(settlementDate, externalAssetOwnerTransfer, activeStatus,
                 previousOwner);
 
+        recognizeRemainingDeferredIncomeOnLoanSale(loan, settlementDate);
         loanJournalEntryPoster.postJournalEntriesForExternalOwnerTransfer(loan, newTransfer, previousOwner);
         return newTransfer;
     }
 
+    private void recognizeRemainingDeferredIncomeOnLoanSale(final Loan loan, final LocalDate settlementDate) {
+        final LoanProductRelatedDetail loanProductRelatedDetail = loan.getLoanProductRelatedDetail();
+        if (loanProductRelatedDetail == null) {
+            return;
+        }
+        if (loanProductRelatedDetail.isEnableIncomeCapitalization()) {
+            loanCapitalizedIncomeAmortizationProcessingService.processCapitalizedIncomeAmortizationOnLoanSale(loan, settlementDate, true);
+        }
+        if (loanProductRelatedDetail.isEnableBuyDownFee()) {
+            loanBuyDownFeeAmortizationProcessingService.processBuyDownFeeAmortizationOnLoanSale(loan, settlementDate, true);
+        }
+    }
+
     private ExternalAssetOwner determinePreviousOwnerAndCleanupIfNeeded(final Loan loan, final LocalDate settlementDate,
             final ExternalAssetOwnerTransfer externalAssetOwnerTransfer) {
         if (!delayedSettlementAttributeService.isEnabled(loan.getLoanProduct().getId())
diff --git a/fineract-investor/src/main/resources/jpa/static-weaving/module/fineract-investor/persistence.xml b/fineract-investor/src/main/resources/jpa/static-weaving/module/fineract-investor/persistence.xml
deleted file mode 100644
index 1d99c5f..0000000
--- a/fineract-investor/src/main/resources/jpa/static-weaving/module/fineract-investor/persistence.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-investor module: -->
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwner</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerJournalEntryMapping</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerLoanProductAttributes</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransfer</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransferDetails</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransferJournalEntryMapping</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransferLoanMapping</class>
-        <class>org.apache.fineract.investor.domain.ExternalIdConverter</class>
-
-        <!--  fineract-loan module: -->
-        <class>org.apache.fineract.portfolio.collateral.domain.LoanCollateral</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.AccountingRuleTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.Loan</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanAmortizationAllocationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanApprovedAmountHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargeTaxDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanSubStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter</class>
-        <class>org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-investor/src/test/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStepTest.java b/fineract-investor/src/test/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStepTest.java
index 6df17dc..95a9fc4 100644
--- a/fineract-investor/src/test/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStepTest.java
+++ b/fineract-investor/src/test/java/org/apache/fineract/investor/cob/loan/LoanAccountOwnerTransferBusinessStepTest.java
@@ -62,6 +62,8 @@
 import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
 import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary;
+import org.apache.fineract.portfolio.loanaccount.service.LoanBuyDownFeeAmortizationProcessingService;
+import org.apache.fineract.portfolio.loanaccount.service.LoanCapitalizedIncomeAmortizationProcessingService;
 import org.apache.fineract.portfolio.loanaccount.service.LoanJournalEntryPoster;
 import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 import org.junit.jupiter.api.AfterAll;
@@ -111,6 +113,12 @@
     @Mock
     private ExternalAssetOwnerTransferOutstandingInterestCalculation externalAssetOwnerTransferOutstandingInterestCalculation;
 
+    @Mock
+    private LoanCapitalizedIncomeAmortizationProcessingService loanCapitalizedIncomeAmortizationProcessingService;
+
+    @Mock
+    private LoanBuyDownFeeAmortizationProcessingService loanBuyDownFeeAmortizationProcessingService;
+
     private LoanAccountOwnerTransferBusinessStep underTest;
 
     @BeforeAll
@@ -131,7 +139,8 @@
         ThreadLocalContextUtil.setBusinessDates(new HashMap<>(Map.of(BusinessDateType.BUSINESS_DATE, actualDate)));
         underTest = new LoanAccountOwnerTransferBusinessStep(externalAssetOwnerTransferRepository,
                 externalAssetOwnerTransferLoanMappingRepository, loanJournalEntryPoster, businessEventNotifierService,
-                loanTransferabilityService, delayedSettlementAttributeService, externalAssetOwnerTransferOutstandingInterestCalculation);
+                loanTransferabilityService, delayedSettlementAttributeService, externalAssetOwnerTransferOutstandingInterestCalculation,
+                loanCapitalizedIncomeAmortizationProcessingService, loanBuyDownFeeAmortizationProcessingService);
     }
 
     @AfterEach
diff --git a/fineract-loan-origination/src/main/resources/jpa/static-weaving/module/fineract-loan-origination/persistence.xml b/fineract-loan-origination/src/main/resources/jpa/static-weaving/module/fineract-loan-origination/persistence.xml
deleted file mode 100644
index 3a9fcb1..0000000
--- a/fineract-loan-origination/src/main/resources/jpa/static-weaving/module/fineract-loan-origination/persistence.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-loan module: -->
-        <class>org.apache.fineract.portfolio.collateral.domain.LoanCollateral</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.AccountingRuleTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.Loan</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanAmortizationAllocationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanApprovedAmountHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargeTaxDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanSubStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter</class>
-        <class>org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks</class>
-
-        <!--  fineract-loan-origination module: -->
-        <class>org.apache.fineract.portfolio.loanorigination.domain.LoanOriginator</class>
-        <class>org.apache.fineract.portfolio.loanorigination.domain.LoanOriginatorMapping</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/CreateGuarantorCommandHandler.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/CreateGuarantorCommandHandler.java
index a532507..28fa3a5 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/CreateGuarantorCommandHandler.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/CreateGuarantorCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.loanaccount.guarantor.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GUARANTOR", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateGuarantorCommandHandler implements NewCommandSourceHandler {
 
     private final GuarantorWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateGuarantorCommandHandler(final GuarantorWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/DeleteGuarantorCommandHandler.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/DeleteGuarantorCommandHandler.java
index 032efa5..43f99aa 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/DeleteGuarantorCommandHandler.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/DeleteGuarantorCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.loanaccount.guarantor.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GUARANTOR", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteGuarantorCommandHandler implements NewCommandSourceHandler {
 
     private final GuarantorWritePlatformService guarantorWritePlatformService;
 
-    @Autowired
-    public DeleteGuarantorCommandHandler(final GuarantorWritePlatformService guarantorWritePlatformService) {
-        this.guarantorWritePlatformService = guarantorWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/UpdateGuarantorCommandHandler.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/UpdateGuarantorCommandHandler.java
index 808eb66..d1d31e5 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/UpdateGuarantorCommandHandler.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/UpdateGuarantorCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.loanaccount.guarantor.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.loanaccount.guarantor.service.GuarantorWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GUARANTOR", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateGuarantorCommandHandler implements NewCommandSourceHandler {
 
     private final GuarantorWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateGuarantorCommandHandler(final GuarantorWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingService.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingService.java
index 9caee39..5631705 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingService.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingService.java
@@ -29,6 +29,8 @@
 
     void processBuyDownFeeAmortizationOnLoanClosure(@NonNull Loan loan, boolean addJournal);
 
+    void processBuyDownFeeAmortizationOnLoanSale(@NonNull Loan loan, @NonNull LocalDate transactionDate, boolean addJournal);
+
     void processBuyDownFeeAmortizationOnLoanChargeOff(@NonNull Loan loan, @NonNull LoanTransaction chargeOffTransaction);
 
     void processBuyDownFeeAmortizationOnLoanUndoChargeOff(@NonNull LoanTransaction loanTransaction);
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingService.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingService.java
index 84ac57a..4ba74b2 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingService.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingService.java
@@ -27,6 +27,8 @@
 
     void processCapitalizedIncomeAmortizationOnLoanClosure(@NonNull Loan loan, boolean addJournal);
 
+    void processCapitalizedIncomeAmortizationOnLoanSale(@NonNull Loan loan, @NonNull LocalDate transactionDate, boolean addJournal);
+
     void processCapitalizedIncomeAmortizationOnLoanChargeOff(@NonNull Loan loan, @NonNull LoanTransaction chargeOffTransaction);
 
     void processCapitalizedIncomeAmortizationOnLoanUndoChargeOff(@NonNull LoanTransaction loanTransaction);
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/handler/UpdateLoanProductCommandHandler.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/handler/UpdateLoanProductCommandHandler.java
index 3f7a39c..7548300 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/handler/UpdateLoanProductCommandHandler.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/handler/UpdateLoanProductCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.loanproduct.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.loanproduct.service.LoanProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "LOANPRODUCT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateLoanProductCommandHandler implements NewCommandSourceHandler {
 
     private final LoanProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateLoanProductCommandHandler(final LoanProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-loan/src/main/resources/jpa/static-weaving/module/fineract-loan/persistence.xml b/fineract-loan/src/main/resources/jpa/static-weaving/module/fineract-loan/persistence.xml
deleted file mode 100644
index 0a33b4a..0000000
--- a/fineract-loan/src/main/resources/jpa/static-weaving/module/fineract-loan/persistence.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-loan module: -->
-        <class>org.apache.fineract.portfolio.collateral.domain.LoanCollateral</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.AccountingRuleTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.Loan</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanAmortizationAllocationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanApprovedAmountHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargeTaxDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanSubStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelationTypeEnumConverter</class>
-        <class>org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-progressive-loan/src/main/resources/jpa/static-weaving/module/fineract-progressive-loan/persistence.xml b/fineract-progressive-loan/src/main/resources/jpa/static-weaving/module/fineract-progressive-loan/persistence.xml
deleted file mode 100644
index 83a38ad..0000000
--- a/fineract-progressive-loan/src/main/resources/jpa/static-weaving/module/fineract-progressive-loan/persistence.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-loan module: -->
-        <class>org.apache.fineract.portfolio.collateral.domain.LoanCollateral</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.AccountingRuleTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.Loan</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanAmortizationAllocationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanApprovedAmountHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargeTaxDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanSubStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter</class>
-        <class>org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks</class>
-
-        <!--  fineract-progressive-loan module: -->
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanBuyDownFeeBalance</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeBalance</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.ProgressiveLoanModel</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle
index fbe36b4..9043db3 100644
--- a/fineract-provider/build.gradle
+++ b/fineract-provider/build.gradle
@@ -89,6 +89,7 @@
     outputDir = file("${buildDir}/resources/main/static")
     openApiFile = file("${buildDir}/tmp/swagger/fineract-input.yaml")
     readerClass = 'org.apache.fineract.infrastructure.openapi.FineractOperationIdReader'
+    filterClass = 'org.apache.fineract.infrastructure.openapi.FineractOpenApiSpecFilter'
     sortOutput = true
     dependsOn(prepareInputYaml, classes)
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/CreateAdHocCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/CreateAdHocCommandHandler.java
index 1d7ec8a..814c3cc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/CreateAdHocCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/CreateAdHocCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.adhocquery.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.adhocquery.service.AdHocWritePlatformService;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ADHOC", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateAdHocCommandHandler implements NewCommandSourceHandler {
 
     private final AdHocWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateAdHocCommandHandler(final AdHocWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/DeleteAdHocCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/DeleteAdHocCommandHandler.java
index 161d4f3..bcaa9c7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/DeleteAdHocCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/DeleteAdHocCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.adhocquery.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.adhocquery.service.AdHocWritePlatformService;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ADHOC", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteAdHocCommandHandler implements NewCommandSourceHandler {
 
     private final AdHocWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteAdHocCommandHandler(final AdHocWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/UpdateAdHocCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/UpdateAdHocCommandHandler.java
index 841725d..5328be5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/UpdateAdHocCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/UpdateAdHocCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.adhocquery.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.adhocquery.service.AdHocWritePlatformService;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ADHOC", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateAdHocCommandHandler implements NewCommandSourceHandler {
 
     private final AdHocWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateAdHocCommandHandler(final AdHocWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/CreateAccountNumberFormatCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/CreateAccountNumberFormatCommandHandler.java
index a6731d8..8cd5971 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/CreateAccountNumberFormatCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/CreateAccountNumberFormatCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.accountnumberformat.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.accountnumberformat.service.AccountNumberFormatWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ACCOUNTNUMBERFORMAT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateAccountNumberFormatCommandHandler implements NewCommandSourceHandler {
 
     private final AccountNumberFormatWritePlatformService accountNumberFormatWritePlatformService;
 
-    @Autowired
-    public CreateAccountNumberFormatCommandHandler(final AccountNumberFormatWritePlatformService accountNumberFormatWritePlatformService) {
-        this.accountNumberFormatWritePlatformService = accountNumberFormatWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/DeleteAccountNumberFormatCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/DeleteAccountNumberFormatCommandHandler.java
index 8852952..f856de7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/DeleteAccountNumberFormatCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/DeleteAccountNumberFormatCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.accountnumberformat.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.accountnumberformat.service.AccountNumberFormatWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ACCOUNTNUMBERFORMAT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteAccountNumberFormatCommandHandler implements NewCommandSourceHandler {
 
     private final AccountNumberFormatWritePlatformService accountNumberFormatWritePlatformService;
 
-    @Autowired
-    public DeleteAccountNumberFormatCommandHandler(final AccountNumberFormatWritePlatformService accountNumberFormatWritePlatformService) {
-        this.accountNumberFormatWritePlatformService = accountNumberFormatWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/UpdateAccountNumberFormatCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/UpdateAccountNumberFormatCommandHandler.java
index 6fb394c..f1c2618 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/UpdateAccountNumberFormatCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/handler/UpdateAccountNumberFormatCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.accountnumberformat.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.accountnumberformat.service.AccountNumberFormatWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ACCOUNTNUMBERFORMAT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateAccountNumberFormatCommandHandler implements NewCommandSourceHandler {
 
     private final AccountNumberFormatWritePlatformService accountNumberFormatWritePlatformService;
 
-    @Autowired
-    public UpdateAccountNumberFormatCommandHandler(final AccountNumberFormatWritePlatformService accountNumberFormatWritePlatformService) {
-        this.accountNumberFormatWritePlatformService = accountNumberFormatWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ActivateEmailCampaignCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ActivateEmailCampaignCommandHandler.java
index d775ef1..adce857 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ActivateEmailCampaignCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ActivateEmailCampaignCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL_CAMPAIGN", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateEmailCampaignCommandHandler implements NewCommandSourceHandler {
 
-    private EmailCampaignWritePlatformService emailCampaignWritePlatformService;
-
-    @Autowired
-    public ActivateEmailCampaignCommandHandler(final EmailCampaignWritePlatformService emailCampaignWritePlatformService) {
-        this.emailCampaignWritePlatformService = emailCampaignWritePlatformService;
-    }
+    private final EmailCampaignWritePlatformService emailCampaignWritePlatformService;
 
     @Transactional
     @Override
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CloseEmailCampaignCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CloseEmailCampaignCommandHandler.java
index 0f25e94..9b9f877 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CloseEmailCampaignCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CloseEmailCampaignCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "EMAIL_CAMPAIGN", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseEmailCampaignCommandHandler implements NewCommandSourceHandler {
 
     private final EmailCampaignWritePlatformService emailCampaignWritePlatformService;
 
-    @Autowired
-    public CloseEmailCampaignCommandHandler(final EmailCampaignWritePlatformService emailCampaignWritePlatformService) {
-        this.emailCampaignWritePlatformService = emailCampaignWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
         return this.emailCampaignWritePlatformService.closeEmailCampaign(command.entityId(), command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCampaignCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCampaignCommandHandler.java
index c8fe5fd..5b22a0a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCampaignCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCampaignCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL_CAMPAIGN", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateEmailCampaignCommandHandler implements NewCommandSourceHandler {
 
-    private EmailCampaignWritePlatformService emailCampaignWritePlatformService;
-
-    @Autowired
-    public CreateEmailCampaignCommandHandler(final EmailCampaignWritePlatformService emailCampaignWritePlatformService) {
-        this.emailCampaignWritePlatformService = emailCampaignWritePlatformService;
-    }
+    private final EmailCampaignWritePlatformService emailCampaignWritePlatformService;
 
     @Transactional
     @Override
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCommandHandler.java
index 652572f..227de21 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/CreateEmailCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateEmailCommandHandler implements NewCommandSourceHandler {
 
     private final EmailWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateEmailCommandHandler(final EmailWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCampaignCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCampaignCommandHandler.java
index 5477a1f..ef96ec9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCampaignCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCampaignCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL_CAMPAIGN", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteEmailCampaignCommandHandler implements NewCommandSourceHandler {
 
     private final EmailCampaignWritePlatformService emailCampaignWritePlatformService;
 
-    @Autowired
-    public DeleteEmailCampaignCommandHandler(EmailCampaignWritePlatformService emailCampaignWritePlatformService) {
-        this.emailCampaignWritePlatformService = emailCampaignWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCommandHandler.java
index b97a5cc..fac0e11 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/DeleteEmailCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteEmailCommandHandler implements NewCommandSourceHandler {
 
     private final EmailWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteEmailCommandHandler(final EmailWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ReactivateEmailCampaignCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ReactivateEmailCampaignCommandHandler.java
index 6550702..f51ea3e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ReactivateEmailCampaignCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ReactivateEmailCampaignCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL_CAMPAIGN", action = "REACTIVATE")
+@RequiredArgsConstructor
 public class ReactivateEmailCampaignCommandHandler implements NewCommandSourceHandler {
 
     private final EmailCampaignWritePlatformService emailCampaignWritePlatformService;
 
-    @Autowired
-    public ReactivateEmailCampaignCommandHandler(EmailCampaignWritePlatformService emailCampaignWritePlatformService) {
-        this.emailCampaignWritePlatformService = emailCampaignWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailCampaignCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailCampaignCommandHandler.java
index 18afe41..1acdff3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailCampaignCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailCampaignCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailCampaignWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL_CAMPAIGN", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateEmailCampaignCommandHandler implements NewCommandSourceHandler {
 
     private final EmailCampaignWritePlatformService emailCampaignWritePlatformService;
 
-    @Autowired
-    public UpdateEmailCampaignCommandHandler(EmailCampaignWritePlatformService emailCampaignWritePlatformService) {
-        this.emailCampaignWritePlatformService = emailCampaignWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailConfigurationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailConfigurationCommandHandler.java
index 882fc03..9894145 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailConfigurationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/UpdateEmailConfigurationCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.campaigns.email.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.campaigns.email.service.EmailConfigurationWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EMAIL_CONFIGURATION", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateEmailConfigurationCommandHandler implements NewCommandSourceHandler {
 
     private final EmailConfigurationWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateEmailConfigurationCommandHandler(final EmailConfigurationWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeCommandHandler.java
index 8f783a7..1eda5a7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.codes.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.codes.service.CodeWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CODE", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateCodeCommandHandler implements NewCommandSourceHandler {
 
     private final CodeWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateCodeCommandHandler(final CodeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeValueCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeValueCommandHandler.java
index ab3f60a..12a3c32 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeValueCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/CreateCodeValueCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.codes.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.codes.service.CodeValueWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CODEVALUE", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateCodeValueCommandHandler implements NewCommandSourceHandler {
 
     private final CodeValueWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateCodeValueCommandHandler(final CodeValueWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeCommandHandler.java
index 7182314..fc1d200 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.codes.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.codes.service.CodeWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CODE", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteCodeCommandHandler implements NewCommandSourceHandler {
 
     private final CodeWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteCodeCommandHandler(final CodeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeValueCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeValueCommandHandler.java
index 910b761..28583bf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeValueCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/DeleteCodeValueCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.codes.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.codes.service.CodeValueWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CODEVALUE", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteCodeValueCommandHandler implements NewCommandSourceHandler {
 
     private final CodeValueWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteCodeValueCommandHandler(final CodeValueWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeCommandHandler.java
index def7a81..360e07a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.codes.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.codes.service.CodeWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CODE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCodeCommandHandler implements NewCommandSourceHandler {
 
     private final CodeWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateCodeCommandHandler(final CodeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeValueCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeValueCommandHandler.java
index 8ba6da8..d9038af 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeValueCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/handler/UpdateCodeValueCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.codes.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.codes.service.CodeValueWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CODEVALUE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCodeValueCommandHandler implements NewCommandSourceHandler {
 
     private final CodeValueWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateCodeValueCommandHandler(final CodeValueWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateExternalServiceConfigurationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateExternalServiceConfigurationCommandHandler.java
index a61d512..323923a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateExternalServiceConfigurationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateExternalServiceConfigurationCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.configuration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.configuration.service.ExternalServiceWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "EXTERNALSERVICES", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateExternalServiceConfigurationCommandHandler implements NewCommandSourceHandler {
 
     private final ExternalServiceWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateExternalServiceConfigurationCommandHandler(final ExternalServiceWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateGlobalConfigurationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateGlobalConfigurationCommandHandler.java
index 561508e..f802e12 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateGlobalConfigurationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/handler/UpdateGlobalConfigurationCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.configuration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.configuration.service.GlobalConfigurationWritePlatformService;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CONFIGURATION", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateGlobalConfigurationCommandHandler implements NewCommandSourceHandler {
 
     private final GlobalConfigurationWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateGlobalConfigurationCommandHandler(final GlobalConfigurationWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddCreditBureauConfigurationDataCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddCreditBureauConfigurationDataCommandHandler.java
index 7efafa1..23207be 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddCreditBureauConfigurationDataCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddCreditBureauConfigurationDataCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditBureauConfigurationWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CREDITBUREAU_CONFIGURATION", action = "CREATE")
+@RequiredArgsConstructor
 public class AddCreditBureauConfigurationDataCommandHandler implements NewCommandSourceHandler {
 
     private final CreditBureauConfigurationWritePlatformService writePlatformService;
 
-    @Autowired
-    public AddCreditBureauConfigurationDataCommandHandler(final CreditBureauConfigurationWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddOrganisationCreditBureauCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddOrganisationCreditBureauCommandHandler.java
index dbd953e..0b77aad 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddOrganisationCreditBureauCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/AddOrganisationCreditBureauCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.OrganisationCreditBureauWritePlatflormService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "ORGANISATIONCREDITBUREAU", action = "CREATE")
+@RequiredArgsConstructor
 public class AddOrganisationCreditBureauCommandHandler implements NewCommandSourceHandler {
 
     private final OrganisationCreditBureauWritePlatflormService writePlatformService;
 
-    @Autowired
-    public AddOrganisationCreditBureauCommandHandler(final OrganisationCreditBureauWritePlatflormService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/CreateCreditBureauLoanProductMappingCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/CreateCreditBureauLoanProductMappingCommandHandler.java
index bac7cb9..f31f740 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/CreateCreditBureauLoanProductMappingCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/CreateCreditBureauLoanProductMappingCommandHandler.java
@@ -18,26 +18,21 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditBureauLoanProductMappingWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "CREDITBUREAU_LOANPRODUCT_MAPPING", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateCreditBureauLoanProductMappingCommandHandler implements NewCommandSourceHandler {
 
     private final CreditBureauLoanProductMappingWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateCreditBureauLoanProductMappingCommandHandler(
-            final CreditBureauLoanProductMappingWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/DeleteCreditReportCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/DeleteCreditReportCommandHandler.java
index 7f552d2..905ea18 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/DeleteCreditReportCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/DeleteCreditReportCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditReportWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "CREDITREPORT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteCreditReportCommandHandler implements NewCommandSourceHandler {
 
     private final CreditReportWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteCreditReportCommandHandler(final CreditReportWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/GetCreditReportCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/GetCreditReportCommandHandler.java
index f117c66..11d97ac 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/GetCreditReportCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/GetCreditReportCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditReportWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CREDITREPORT", action = "GET")
+@RequiredArgsConstructor
 public class GetCreditReportCommandHandler implements NewCommandSourceHandler {
 
     private final CreditReportWritePlatformService writePlatformService;
 
-    @Autowired
-    public GetCreditReportCommandHandler(final CreditReportWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/SaveCreditReportCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/SaveCreditReportCommandHandler.java
index 69164fe..517bc67 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/SaveCreditReportCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/SaveCreditReportCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditReportWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "CREDITREPORT", action = "SAVE")
+@RequiredArgsConstructor
 public class SaveCreditReportCommandHandler implements NewCommandSourceHandler {
 
     private final CreditReportWritePlatformService writePlatformService;
 
-    @Autowired
-    public SaveCreditReportCommandHandler(final CreditReportWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauCommandHandler.java
index acefb83..01c92fe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.OrganisationCreditBureauWritePlatflormService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ORGANISATIONCREDITBUREAU", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCreditBureauCommandHandler implements NewCommandSourceHandler {
 
     private final OrganisationCreditBureauWritePlatflormService writePlatformService;
 
-    @Autowired
-    public UpdateCreditBureauCommandHandler(final OrganisationCreditBureauWritePlatflormService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauConfigurationDataCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauConfigurationDataCommandHandler.java
index 5db001c..61669b0 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauConfigurationDataCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauConfigurationDataCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditBureauConfigurationWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CREDITBUREAU_CONFIGURATION", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCreditBureauConfigurationDataCommandHandler implements NewCommandSourceHandler {
 
     private final CreditBureauConfigurationWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateCreditBureauConfigurationDataCommandHandler(final CreditBureauConfigurationWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauLoanProductMappingCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauLoanProductMappingCommandHandler.java
index b708ac2..a02705c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauLoanProductMappingCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/handler/UpdateCreditBureauLoanProductMappingCommandHandler.java
@@ -18,28 +18,22 @@
  */
 package org.apache.fineract.infrastructure.creditbureau.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.creditbureau.service.CreditBureauLoanProductMappingWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CREDITBUREAU_LOANPRODUCT_MAPPING", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCreditBureauLoanProductMappingCommandHandler implements NewCommandSourceHandler {
 
     private final CreditBureauLoanProductMappingWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateCreditBureauLoanProductMappingCommandHandler(
-            final CreditBureauLoanProductMappingWritePlatformService writePlatformService) {
-
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
index b6016dd..5410214 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java
@@ -287,7 +287,7 @@
             datatables/extra_family_details/1?order=`Date of Birth` desc
 
             datatables/extra_client_details/1?genericResultSet=true""")
-    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = Object.class)))
+    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = String.class)))
     public String getDatatable(@PathParam("datatable") @Parameter(description = "datatable") final String datatable,
             @PathParam("apptableId") @Parameter(description = "apptableId") final Long apptableId,
             @QueryParam("order") @Parameter(description = "order") final String order, @Context final UriInfo uriInfo) {
@@ -315,7 +315,7 @@
     @Operation(summary = "Retrieve Entry from Data Table (One to Many)", description = """
             Gets the entry (if it exists) for data tables that are one-to-many with the application table, by the \
             datatable entry id. Returns the stored row as a JSON object keyed by column name.""")
-    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = Object.class)))
+    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = String.class)))
     public String getDatatableManyEntry(@PathParam("datatable") final String datatable, @PathParam("apptableId") final Long apptableId,
             @PathParam("datatableId") final Long datatableId, @QueryParam("order") final String order,
             @DefaultValue("false") @QueryParam("genericResultSet") @Parameter(in = ParameterIn.QUERY, name = "genericResultSet", description = "Optional flag to format the response") final boolean genericResultSet,
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateEntityDatatableChecksCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateEntityDatatableChecksCommandHandler.java
index bde202a..19d47b5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateEntityDatatableChecksCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateEntityDatatableChecksCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.dataqueries.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.dataqueries.service.EntityDatatableChecksWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ENTITY_DATATABLE_CHECK", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateEntityDatatableChecksCommandHandler implements NewCommandSourceHandler {
 
     private final EntityDatatableChecksWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateEntityDatatableChecksCommandHandler(final EntityDatatableChecksWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateReportCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateReportCommandHandler.java
index b1a64d9..1fac36a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateReportCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/CreateReportCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.dataqueries.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.dataqueries.service.ReportWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "REPORT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateReportCommandHandler implements NewCommandSourceHandler {
 
     private final ReportWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateReportCommandHandler(final ReportWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteEntityDatatableChecksCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteEntityDatatableChecksCommandHandler.java
index 5d5c2f6..ee2149b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteEntityDatatableChecksCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteEntityDatatableChecksCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.dataqueries.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.dataqueries.service.EntityDatatableChecksWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ENTITY_DATATABLE_CHECK", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteEntityDatatableChecksCommandHandler implements NewCommandSourceHandler {
 
     private final EntityDatatableChecksWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteEntityDatatableChecksCommandHandler(final EntityDatatableChecksWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteReportCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteReportCommandHandler.java
index b393528..71d0ae6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteReportCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/DeleteReportCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.infrastructure.dataqueries.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
 import org.apache.fineract.infrastructure.dataqueries.service.ReportWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "REPORT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteReportCommandHandler implements NewCommandSourceHandler {
 
     private final ReportWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteReportCommandHandler(final ReportWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/UpdateReportCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/UpdateReportCommandHandler.java
index 6a873ef..7f3f9bf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/UpdateReportCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/handler/UpdateReportCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.dataqueries.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.dataqueries.service.ReportWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "REPORT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateReportCommandHandler implements NewCommandSourceHandler {
 
     private final ReportWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateReportCommandHandler(final ReportWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/CreateEntityToEntityMappingCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/CreateEntityToEntityMappingCommandHandler.java
index 91e06ee..7d23643 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/CreateEntityToEntityMappingCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/CreateEntityToEntityMappingCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.entityaccess.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessWriteService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ENTITYMAPPING", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateEntityToEntityMappingCommandHandler implements NewCommandSourceHandler {
 
     private final FineractEntityAccessWriteService fineractEntityAccessWriteService;
 
-    @Autowired
-    public CreateEntityToEntityMappingCommandHandler(final FineractEntityAccessWriteService fineractEntityAccessWriteService) {
-        this.fineractEntityAccessWriteService = fineractEntityAccessWriteService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/DeleteEntityToEntityMappingCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/DeleteEntityToEntityMappingCommandHandler.java
index 4fdcf0d..39a5e9b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/DeleteEntityToEntityMappingCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/DeleteEntityToEntityMappingCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.entityaccess.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessWriteService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ENTITYMAPPING", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteEntityToEntityMappingCommandHandler implements NewCommandSourceHandler {
 
     private final FineractEntityAccessWriteService fineractEntityAccessWriteService;
 
-    @Autowired
-    public DeleteEntityToEntityMappingCommandHandler(final FineractEntityAccessWriteService fineractEntityAccessWriteService) {
-        this.fineractEntityAccessWriteService = fineractEntityAccessWriteService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/UpdateEntityToEntityMappingCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/UpdateEntityToEntityMappingCommandHandler.java
index 8fd82d4..6bac06f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/UpdateEntityToEntityMappingCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/handler/UpdateEntityToEntityMappingCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.entityaccess.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessWriteService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ENTITYMAPPING", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateEntityToEntityMappingCommandHandler implements NewCommandSourceHandler {
 
     private final FineractEntityAccessWriteService fineractEntityAccessWriteService;
 
-    @Autowired
-    public UpdateEntityToEntityMappingCommandHandler(final FineractEntityAccessWriteService fineractEntityAccessWriteService) {
-        this.fineractEntityAccessWriteService = fineractEntityAccessWriteService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/handler/UpdateJobDetailCommandhandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/handler/UpdateJobDetailCommandhandler.java
index 9cc9af8..3adfd39 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/handler/UpdateJobDetailCommandhandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/handler/UpdateJobDetailCommandhandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.infrastructure.jobs.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.jobs.service.SchedularWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "SCHEDULER", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateJobDetailCommandhandler implements NewCommandSourceHandler {
 
     private final SchedularWritePlatformService schedularWritePlatformService;
 
-    @Autowired
-    public UpdateJobDetailCommandhandler(final SchedularWritePlatformService schedularWritePlatformService) {
-        this.schedularWritePlatformService = schedularWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.schedularWritePlatformService.updateJobDetail(command.entityId(), command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/openapi/FineractOpenApiSpecFilter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/openapi/FineractOpenApiSpecFilter.java
new file mode 100644
index 0000000..84545fd
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/openapi/FineractOpenApiSpecFilter.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.infrastructure.openapi;
+
+import io.swagger.v3.core.filter.AbstractSpecFilter;
+
+public final class FineractOpenApiSpecFilter extends AbstractSpecFilter {
+
+    @Override
+    public boolean isRemovingUnreferencedDefinitions() {
+        return true;
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/CreateReportMailingJobCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/CreateReportMailingJobCommandHandler.java
index d77af50..a2ad5d4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/CreateReportMailingJobCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/CreateReportMailingJobCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.infrastructure.reportmailingjob.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConstants;
 import org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ReportMailingJobConstants.REPORT_MAILING_JOB_ENTITY_NAME, action = "CREATE")
+@RequiredArgsConstructor
 public class CreateReportMailingJobCommandHandler implements NewCommandSourceHandler {
 
     private final ReportMailingJobWritePlatformService reportMailingJobWritePlatformService;
 
-    @Autowired
-    public CreateReportMailingJobCommandHandler(final ReportMailingJobWritePlatformService reportMailingJobWritePlatformService) {
-        this.reportMailingJobWritePlatformService = reportMailingJobWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/DeleteReportMailingJobCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/DeleteReportMailingJobCommandHandler.java
index 1ed8500..181e88a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/DeleteReportMailingJobCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/DeleteReportMailingJobCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.infrastructure.reportmailingjob.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConstants;
 import org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ReportMailingJobConstants.REPORT_MAILING_JOB_ENTITY_NAME, action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteReportMailingJobCommandHandler implements NewCommandSourceHandler {
 
     private final ReportMailingJobWritePlatformService reportMailingJobWritePlatformService;
 
-    @Autowired
-    public DeleteReportMailingJobCommandHandler(final ReportMailingJobWritePlatformService reportMailingJobWritePlatformService) {
-        this.reportMailingJobWritePlatformService = reportMailingJobWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/UpdateReportMailingJobCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/UpdateReportMailingJobCommandHandler.java
index 72e0353..cbdf405 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/UpdateReportMailingJobCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/handler/UpdateReportMailingJobCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.infrastructure.reportmailingjob.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.reportmailingjob.ReportMailingJobConstants;
 import org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ReportMailingJobConstants.REPORT_MAILING_JOB_ENTITY_NAME, action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateReportMailingJobCommandHandler implements NewCommandSourceHandler {
 
     private final ReportMailingJobWritePlatformService reportMailingJobWritePlatformService;
 
-    @Autowired
-    public UpdateReportMailingJobCommandHandler(final ReportMailingJobWritePlatformService reportMailingJobWritePlatformService) {
-        this.reportMailingJobWritePlatformService = reportMailingJobWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/CreateSmsCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/CreateSmsCommandHandler.java
index 978d003..305ada8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/CreateSmsCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/CreateSmsCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.sms.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.sms.service.SmsWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SMS", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateSmsCommandHandler implements NewCommandSourceHandler {
 
     private final SmsWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateSmsCommandHandler(final SmsWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/DeleteSmsCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/DeleteSmsCommandHandler.java
index de45dfa..4f1d332 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/DeleteSmsCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/DeleteSmsCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.sms.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.sms.service.SmsWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SMS", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteSmsCommandHandler implements NewCommandSourceHandler {
 
     private final SmsWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteSmsCommandHandler(final SmsWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/UpdateSmsCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/UpdateSmsCommandHandler.java
index 3ea77b7..d009dd9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/UpdateSmsCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/handler/UpdateSmsCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.infrastructure.sms.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.sms.service.SmsWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SMS", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateSmsCommandHandler implements NewCommandSourceHandler {
 
     private final SmsWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateSmsCommandHandler(final SmsWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/FullFilSurveyCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/FullFilSurveyCommandHandler.java
index 895e047..6bfefde 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/FullFilSurveyCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/FullFilSurveyCommandHandler.java
@@ -18,11 +18,11 @@
  */
 package org.apache.fineract.infrastructure.survey.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.survey.service.WriteSurveyService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -31,15 +31,11 @@
  */
 
 @Service
+@RequiredArgsConstructor
 public class FullFilSurveyCommandHandler implements NewCommandSourceHandler {
 
     private final WriteSurveyService writePlatformService;
 
-    @Autowired
-    public FullFilSurveyCommandHandler(final WriteSurveyService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/RegisterSurveyCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/RegisterSurveyCommandHandler.java
index 2dfcf92..6f16b13 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/RegisterSurveyCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/RegisterSurveyCommandHandler.java
@@ -18,11 +18,11 @@
  */
 package org.apache.fineract.infrastructure.survey.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.survey.service.WriteSurveyService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -31,15 +31,11 @@
  */
 
 @Service
+@RequiredArgsConstructor
 public class RegisterSurveyCommandHandler implements NewCommandSourceHandler {
 
     private final WriteSurveyService writePlatformService;
 
-    @Autowired
-    public RegisterSurveyCommandHandler(final WriteSurveyService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/UpdateLikelihoodCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/UpdateLikelihoodCommandHandler.java
index 8b4a5cd..efb3a24 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/UpdateLikelihoodCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/UpdateLikelihoodCommandHandler.java
@@ -18,12 +18,12 @@
  */
 package org.apache.fineract.infrastructure.survey.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.infrastructure.survey.service.WriteLikelihoodService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -33,15 +33,11 @@
 
 @Service
 @CommandType(entity = "LIKELIHOOD", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateLikelihoodCommandHandler implements NewCommandSourceHandler {
 
     private final WriteLikelihoodService writePlatformService;
 
-    @Autowired
-    public UpdateLikelihoodCommandHandler(final WriteLikelihoodService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CommitInteropTransferHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CommitInteropTransferHandler.java
index e6735f6..384c0be 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CommitInteropTransferHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CommitInteropTransferHandler.java
@@ -21,26 +21,22 @@
 import static org.apache.fineract.interoperation.util.InteropUtil.ACTION_TRANSFER_COMMIT;
 import static org.apache.fineract.interoperation.util.InteropUtil.ENTITY_NAME_TRANSFER;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_TRANSFER, action = ACTION_TRANSFER_COMMIT)
+@RequiredArgsConstructor
 public class CommitInteropTransferHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public CommitInteropTransferHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropIdentifierHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropIdentifierHandler.java
index 18217a2..533cdc6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropIdentifierHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropIdentifierHandler.java
@@ -23,27 +23,23 @@
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import java.util.List;
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.domain.InteropIdentifierType;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_IDENTIFIER, action = "CREATE")
+@RequiredArgsConstructor
 public class CreateInteropIdentifierHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public CreateInteropIdentifierHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropQuoteHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropQuoteHandler.java
index 443ed70..ed8d921 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropQuoteHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropQuoteHandler.java
@@ -20,26 +20,22 @@
 
 import static org.apache.fineract.interoperation.util.InteropUtil.ENTITY_NAME_QUOTE;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_QUOTE, action = "CREATE")
+@RequiredArgsConstructor
 public class CreateInteropQuoteHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public CreateInteropQuoteHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropRequestHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropRequestHandler.java
index c7224b6..ef52274 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropRequestHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/CreateInteropRequestHandler.java
@@ -20,26 +20,22 @@
 
 import static org.apache.fineract.interoperation.util.InteropUtil.ENTITY_NAME_REQUEST;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_REQUEST, action = "CREATE")
+@RequiredArgsConstructor
 public class CreateInteropRequestHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public CreateInteropRequestHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/DeleteInteropIdentifierHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/DeleteInteropIdentifierHandler.java
index c7ac4bc..ea978e9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/DeleteInteropIdentifierHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/DeleteInteropIdentifierHandler.java
@@ -23,27 +23,23 @@
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import java.util.List;
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.domain.InteropIdentifierType;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_IDENTIFIER, action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteInteropIdentifierHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public DeleteInteropIdentifierHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/PrepareInteropTransferHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/PrepareInteropTransferHandler.java
index 59de9dd..e575ddd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/PrepareInteropTransferHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/PrepareInteropTransferHandler.java
@@ -21,26 +21,22 @@
 import static org.apache.fineract.interoperation.util.InteropUtil.ACTION_TRANSFER_PREPARE;
 import static org.apache.fineract.interoperation.util.InteropUtil.ENTITY_NAME_TRANSFER;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_TRANSFER, action = ACTION_TRANSFER_PREPARE)
+@RequiredArgsConstructor
 public class PrepareInteropTransferHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public PrepareInteropTransferHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/ReleaseInteropTransferHandler.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/ReleaseInteropTransferHandler.java
index 4c1dad3..27203f1 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/ReleaseInteropTransferHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/handler/ReleaseInteropTransferHandler.java
@@ -21,26 +21,22 @@
 import static org.apache.fineract.interoperation.util.InteropUtil.ACTION_TRANSFER_RELEASE;
 import static org.apache.fineract.interoperation.util.InteropUtil.ENTITY_NAME_TRANSFER;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.interoperation.service.InteropService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ENTITY_NAME_TRANSFER, action = ACTION_TRANSFER_RELEASE)
+@RequiredArgsConstructor
 public class ReleaseInteropTransferHandler implements NewCommandSourceHandler {
 
     private final InteropService interopService;
 
-    @Autowired
-    public ReleaseInteropTransferHandler(InteropService interopService) {
-        this.interopService = interopService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/ActivateHolidayCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/ActivateHolidayCommandHandler.java
index 62df041..5afeadf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/ActivateHolidayCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/ActivateHolidayCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.holiday.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.holiday.service.HolidayWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "HOLIDAY", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateHolidayCommandHandler implements NewCommandSourceHandler {
 
     private final HolidayWritePlatformService holidayWritePlatformService;
 
-    @Autowired
-    public ActivateHolidayCommandHandler(final HolidayWritePlatformService holidayWritePlatformService) {
-        this.holidayWritePlatformService = holidayWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/CreateHolidayCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/CreateHolidayCommandHandler.java
index 02cc70b..66bd6b9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/CreateHolidayCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/CreateHolidayCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.holiday.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.holiday.service.HolidayWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "HOLIDAY", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateHolidayCommandHandler implements NewCommandSourceHandler {
 
     private final HolidayWritePlatformService holidayWritePlatformService;
 
-    @Autowired
-    public CreateHolidayCommandHandler(final HolidayWritePlatformService holidayWritePlatformService) {
-        this.holidayWritePlatformService = holidayWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/DeleteHolidayCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/DeleteHolidayCommandHandler.java
index 10a36a6..50a3b1c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/DeleteHolidayCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/DeleteHolidayCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.holiday.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.holiday.service.HolidayWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "HOLIDAY", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteHolidayCommandHandler implements NewCommandSourceHandler {
 
     private final HolidayWritePlatformService holidayWritePlatformService;
 
-    @Autowired
-    public DeleteHolidayCommandHandler(final HolidayWritePlatformService holidayWritePlatformService) {
-        this.holidayWritePlatformService = holidayWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/UpdateHolidayCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/UpdateHolidayCommandHandler.java
index 1149730..32414ac 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/UpdateHolidayCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/handler/UpdateHolidayCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.holiday.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.holiday.service.HolidayWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "HOLIDAY", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateHolidayCommandHandler implements NewCommandSourceHandler {
 
     private final HolidayWritePlatformService holidayWritePlatformService;
 
-    @Autowired
-    public UpdateHolidayCommandHandler(final HolidayWritePlatformService holidayWritePlatformService) {
-        this.holidayWritePlatformService = holidayWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeCommandHandler.java
index 2823039..2e1f164 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.office.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.office.service.OfficeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "OFFICE", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateOfficeCommandHandler implements NewCommandSourceHandler {
 
     private final OfficeWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateOfficeCommandHandler(final OfficeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeTransactionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeTransactionCommandHandler.java
index 8778202..98850cd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeTransactionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/CreateOfficeTransactionCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.office.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.office.service.OfficeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "OFFICETRANSACTION", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateOfficeTransactionCommandHandler implements NewCommandSourceHandler {
 
     private final OfficeWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateOfficeTransactionCommandHandler(final OfficeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/DeleteOfficeTransactionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/DeleteOfficeTransactionCommandHandler.java
index 4a2c553..8666f79 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/DeleteOfficeTransactionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/DeleteOfficeTransactionCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.office.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.office.service.OfficeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "OFFICETRANSACTION", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteOfficeTransactionCommandHandler implements NewCommandSourceHandler {
 
     private final OfficeWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteOfficeTransactionCommandHandler(final OfficeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/UpdateOfficeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/UpdateOfficeCommandHandler.java
index b505455..489c829 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/UpdateOfficeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/handler/UpdateOfficeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.organisation.office.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.office.service.OfficeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "OFFICE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateOfficeCommandHandler implements NewCommandSourceHandler {
 
     private final OfficeWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateOfficeCommandHandler(final OfficeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCategoryRequestCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCategoryRequestCommandHandler.java
index 4df2a01..ec2d9ac 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCategoryRequestCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCategoryRequestCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.organisation.provisioning.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PROVISIONCATEGORY", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateProvisioningCategoryRequestCommandHandler implements NewCommandSourceHandler {
 
     private final ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService;
 
-    @Autowired
-    public CreateProvisioningCategoryRequestCommandHandler(
-            ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService) {
-        this.provisioningCategoryWritePlatformService = provisioningCategoryWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCriteriaRequestCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCriteriaRequestCommandHandler.java
index 8ae8af2..92d42b6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCriteriaRequestCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCriteriaRequestCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.organisation.provisioning.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PROVISIONCRITERIA", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateProvisioningCriteriaRequestCommandHandler implements NewCommandSourceHandler {
 
     private final ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService;
 
-    @Autowired
-    public CreateProvisioningCriteriaRequestCommandHandler(
-            final ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService) {
-        this.provisioningCriteriaWritePlatformService = provisioningCriteriaWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCategoryRequestCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCategoryRequestCommandHandler.java
index 1fb41a5..2002500 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCategoryRequestCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCategoryRequestCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.organisation.provisioning.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PROVISIONCATEGORY", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteProvisioningCategoryRequestCommandHandler implements NewCommandSourceHandler {
 
     private final ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService;
 
-    @Autowired
-    public DeleteProvisioningCategoryRequestCommandHandler(
-            ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService) {
-        this.provisioningCategoryWritePlatformService = provisioningCategoryWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCriteriaRequestCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCriteriaRequestCommandHandler.java
index 9dfb476..bab93fe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCriteriaRequestCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/DeleteProvisioningCriteriaRequestCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.organisation.provisioning.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PROVISIONCRITERIA", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteProvisioningCriteriaRequestCommandHandler implements NewCommandSourceHandler {
 
     private final ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService;
 
-    @Autowired
-    public DeleteProvisioningCriteriaRequestCommandHandler(
-            final ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService) {
-        this.provisioningCriteriaWritePlatformService = provisioningCriteriaWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCategoryRequestCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCategoryRequestCommandHandler.java
index 325b22e..dc262a7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCategoryRequestCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCategoryRequestCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.organisation.provisioning.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PROVISIONCATEGORY", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateProvisioningCategoryRequestCommandHandler implements NewCommandSourceHandler {
 
     private final ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService;
 
-    @Autowired
-    public UpdateProvisioningCategoryRequestCommandHandler(
-            ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService) {
-        this.provisioningCategoryWritePlatformService = provisioningCategoryWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCriteriaRequestCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCriteriaRequestCommandHandler.java
index d62763e..fb44d99 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCriteriaRequestCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCriteriaRequestCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.organisation.provisioning.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PROVISIONCRITERIA", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateProvisioningCriteriaRequestCommandHandler implements NewCommandSourceHandler {
 
     private final ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService;
 
-    @Autowired
-    public UpdateProvisioningCriteriaRequestCommandHandler(
-            final ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService) {
-        this.provisioningCriteriaWritePlatformService = provisioningCriteriaWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java
index bd2c9dd..094173e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java
@@ -68,9 +68,10 @@
 
     @Override
     public CommandProcessingResult deleteProvisioningCateogry(JsonCommand command) {
-        this.fromApiJsonDeserializer.validateForCreate(command.json());
-        final ProvisioningCategory provisioningCategory = ProvisioningCategory.fromJson(command);
-        boolean isProvisioningCategoryInUse = isAnyLoanProductsAssociateWithThisProvisioningCategory(provisioningCategory.getId());
+        final Long categoryId = command.entityId();
+        final ProvisioningCategory provisioningCategory = this.provisioningCategoryRepository.findById(categoryId)
+                .orElseThrow(() -> new ProvisioningCategoryNotFoundException(categoryId));
+        boolean isProvisioningCategoryInUse = isAnyLoanProductsAssociateWithThisProvisioningCategory(categoryId);
         if (isProvisioningCategoryInUse) {
             throw new ProvisioningCategoryCannotBeDeletedException(
                     "error.msg.provisioningcategory.cannot.be.deleted.it.is.already.used.in.loanproduct",
@@ -78,7 +79,7 @@
         }
         this.provisioningCategoryRepository.delete(provisioningCategory);
         return new CommandProcessingResultBuilder() //
-                .withEntityId(provisioningCategory.getId()) //
+                .withEntityId(categoryId) //
                 .build();
     }
 
@@ -107,10 +108,20 @@
         }
     }
 
-    private boolean isAnyLoanProductsAssociateWithThisProvisioningCategory(final Long categoryID) {
-        final String sql = "select (CASE WHEN (exists (select 1 from m_loanproduct_provisioning_details lpd where lpd.category_id = ?)) = 1 THEN 'true' ELSE 'false' END)";
-        final String isLoansUsingCharge = this.jdbcTemplate.queryForObject(sql, String.class, new Object[] { categoryID });
-        return Boolean.valueOf(isLoansUsingCharge);
+    private boolean isAnyLoanProductsAssociateWithThisProvisioningCategory(final Long categoryId) {
+        // The category is in use when a provisioning criteria definition references it. The original code queried the
+        // non-existent m_loanproduct_provisioning_details table; the category_id column actually lives on
+        // m_provisioning_criteria_definition. EXISTS short-circuits at the first match instead of counting every row,
+        // and maps cleanly to Boolean across PostgreSQL (native bool) and MySQL/MariaDB (BIGINT 1/0).
+        final String sql = """
+                select exists (
+                    select 1
+                    from m_provisioning_criteria_definition
+                    where category_id = ?
+                )
+                """;
+        final Boolean exists = this.jdbcTemplate.queryForObject(sql, Boolean.class, categoryId);
+        return Boolean.TRUE.equals(exists);
     }
 
     /*
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/CreateStandingInstructionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/CreateStandingInstructionCommandHandler.java
index 2d57044..21b9344 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/CreateStandingInstructionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/CreateStandingInstructionCommandHandler.java
@@ -18,24 +18,20 @@
  */
 package org.apache.fineract.portfolio.account.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.account.service.StandingInstructionWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "STANDINGINSTRUCTION", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateStandingInstructionCommandHandler implements NewCommandSourceHandler {
 
-    private StandingInstructionWritePlatformService standingInstructionWritePlatformService;
-
-    @Autowired
-    public CreateStandingInstructionCommandHandler(StandingInstructionWritePlatformService standingInstructionWritePlatformService) {
-        this.standingInstructionWritePlatformService = standingInstructionWritePlatformService;
-    }
+    private final StandingInstructionWritePlatformService standingInstructionWritePlatformService;
 
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/DeleteStandingInstructionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/DeleteStandingInstructionCommandHandler.java
index 10c9210..7a4742b 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/DeleteStandingInstructionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/DeleteStandingInstructionCommandHandler.java
@@ -18,24 +18,20 @@
  */
 package org.apache.fineract.portfolio.account.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.account.service.StandingInstructionWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "STANDINGINSTRUCTION", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteStandingInstructionCommandHandler implements NewCommandSourceHandler {
 
-    private StandingInstructionWritePlatformService standingInstructionWritePlatformService;
-
-    @Autowired
-    public DeleteStandingInstructionCommandHandler(StandingInstructionWritePlatformService standingInstructionWritePlatformService) {
-        this.standingInstructionWritePlatformService = standingInstructionWritePlatformService;
-    }
+    private final StandingInstructionWritePlatformService standingInstructionWritePlatformService;
 
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/UpdateStandingInstructionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/UpdateStandingInstructionCommandHandler.java
index 5637fbc..c858428 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/UpdateStandingInstructionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/handler/UpdateStandingInstructionCommandHandler.java
@@ -18,24 +18,20 @@
  */
 package org.apache.fineract.portfolio.account.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.account.service.StandingInstructionWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "STANDINGINSTRUCTION", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateStandingInstructionCommandHandler implements NewCommandSourceHandler {
 
-    private StandingInstructionWritePlatformService standingInstructionWritePlatformService;
-
-    @Autowired
-    public UpdateStandingInstructionCommandHandler(StandingInstructionWritePlatformService standingInstructionWritePlatformService) {
-        this.standingInstructionWritePlatformService = standingInstructionWritePlatformService;
-    }
+    private final StandingInstructionWritePlatformService standingInstructionWritePlatformService;
 
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/CreateCalendarCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/CreateCalendarCommandHandler.java
index 10a074c..3e56946 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/CreateCalendarCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/CreateCalendarCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.calendar.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.calendar.service.CalendarWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CALENDAR", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateCalendarCommandHandler implements NewCommandSourceHandler {
 
     private final CalendarWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateCalendarCommandHandler(final CalendarWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/DeleteCalendarCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/DeleteCalendarCommandHandler.java
index 079ed6c..7377d7e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/DeleteCalendarCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/DeleteCalendarCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.calendar.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.calendar.service.CalendarWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CALENDAR", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteCalendarCommandHandler implements NewCommandSourceHandler {
 
     private final CalendarWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteCalendarCommandHandler(final CalendarWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/UpdateCalendarCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/UpdateCalendarCommandHandler.java
index 12c680b..7670dcf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/UpdateCalendarCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/UpdateCalendarCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.calendar.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.calendar.service.CalendarWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CALENDAR", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCalendarCommandHandler implements NewCommandSourceHandler {
 
     private final CalendarWritePlatformService calendarWritePlatformService;
 
-    @Autowired
-    public UpdateCalendarCommandHandler(final CalendarWritePlatformService calendarWritePlatformService) {
-        this.calendarWritePlatformService = calendarWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ActivateClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ActivateClientCommandHandler.java
index 8f71b76..d1f18a5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ActivateClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ActivateClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public ActivateClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientAddressCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientAddressCommandHandler.java
index b79012e..e534a80 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientAddressCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientAddressCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.address.service.AddressWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "ADDRESS", action = "CREATE")
+@RequiredArgsConstructor
 public class AddClientAddressCommandHandler implements NewCommandSourceHandler {
 
     private final AddressWritePlatformService writePlatformService;
 
-    @Autowired
-    public AddClientAddressCommandHandler(final AddressWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.addClientAddress(command.getClientId(), command.entityId(), command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientFamilyMemberCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientFamilyMemberCommandHandler.java
index 78a5cdf..2677e72 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientFamilyMemberCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AddClientFamilyMemberCommandHandler.java
@@ -19,25 +19,21 @@
 
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientFamilyMembersWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "FAMILYMEMBERS", action = "CREATE")
+@RequiredArgsConstructor
 public class AddClientFamilyMemberCommandHandler implements NewCommandSourceHandler {
 
     private final ClientFamilyMembersWritePlatformService clientFamilyMembersWritePlatformService;
 
-    @Autowired
-    public AddClientFamilyMemberCommandHandler(final ClientFamilyMembersWritePlatformService clientFamilyMembersWritePlatformService) {
-        this.clientFamilyMembersWritePlatformService = clientFamilyMembersWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AssignClientStaffCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AssignClientStaffCommandHandler.java
index 088abcf..25ad946 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AssignClientStaffCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/AssignClientStaffCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "ASSIGNSTAFF")
+@RequiredArgsConstructor
 public class AssignClientStaffCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public AssignClientStaffCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CloseClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CloseClientCommandHandler.java
index cb413c8..281b37c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CloseClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CloseClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public CloseClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientChargeCommandHandler.java
index 559d292..587501e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientChargeCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 import org.apache.fineract.portfolio.client.service.ClientChargeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ClientApiConstants.CLIENT_CHARGES_RESOURCE_NAME, action = ClientApiConstants.CLIENT_CHARGE_ACTION_CREATE)
+@RequiredArgsConstructor
 public class CreateClientChargeCommandHandler implements NewCommandSourceHandler {
 
     private final ClientChargeWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateClientChargeCommandHandler(final ClientChargeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientCommandHandler.java
index 6ef8271..7c8f519 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public CreateClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientIdentifierCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientIdentifierCommandHandler.java
index 39b457e..b3343bf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientIdentifierCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientIdentifierCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientIdentifierWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENTIDENTIFIER", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateClientIdentifierCommandHandler implements NewCommandSourceHandler {
 
     private final ClientIdentifierWritePlatformService clientIdentifierWritePlatformService;
 
-    @Autowired
-    public CreateClientIdentifierCommandHandler(final ClientIdentifierWritePlatformService clientIdentifierWritePlatformService) {
-        this.clientIdentifierWritePlatformService = clientIdentifierWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientChargeCommandHandler.java
index 64b7258..0552294 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientChargeCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 import org.apache.fineract.portfolio.client.service.ClientChargeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ClientApiConstants.CLIENT_CHARGES_RESOURCE_NAME, action = ClientApiConstants.CLIENT_CHARGE_ACTION_DELETE)
+@RequiredArgsConstructor
 public class DeleteClientChargeCommandHandler implements NewCommandSourceHandler {
 
     private final ClientChargeWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteClientChargeCommandHandler(final ClientChargeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientCommandHandler.java
index baedbe7..f835405 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public DeleteClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientFamilyMemberCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientFamilyMemberCommandHandler.java
index efef73f..2aaebe5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientFamilyMemberCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientFamilyMemberCommandHandler.java
@@ -19,25 +19,21 @@
 
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientFamilyMembersWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "FAMILYMEMBERS", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteClientFamilyMemberCommandHandler implements NewCommandSourceHandler {
 
     private final ClientFamilyMembersWritePlatformService clientFamilyMembersWritePlatformService;
 
-    @Autowired
-    public DeleteClientFamilyMemberCommandHandler(final ClientFamilyMembersWritePlatformService clientFamilyMembersWritePlatformService) {
-        this.clientFamilyMembersWritePlatformService = clientFamilyMembersWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientIdentifierCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientIdentifierCommandHandler.java
index b9b397d..e64c04f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientIdentifierCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/DeleteClientIdentifierCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientIdentifierWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENTIDENTIFIER", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteClientIdentifierCommandHandler implements NewCommandSourceHandler {
 
     private final ClientIdentifierWritePlatformService clientIdentifierWritePlatformService;
 
-    @Autowired
-    public DeleteClientIdentifierCommandHandler(final ClientIdentifierWritePlatformService clientIdentifierWritePlatformService) {
-        this.clientIdentifierWritePlatformService = clientIdentifierWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/PayClientChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/PayClientChargeCommandHandler.java
index 341d3ad..947b702 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/PayClientChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/PayClientChargeCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 import org.apache.fineract.portfolio.client.service.ClientChargeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ClientApiConstants.CLIENT_CHARGES_RESOURCE_NAME, action = ClientApiConstants.CLIENT_CHARGE_ACTION_PAY)
+@RequiredArgsConstructor
 public class PayClientChargeCommandHandler implements NewCommandSourceHandler {
 
     private final ClientChargeWritePlatformService writePlatformService;
 
-    @Autowired
-    public PayClientChargeCommandHandler(final ClientChargeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ReActivateClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ReActivateClientCommandHandler.java
index 774926e..99e9967 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ReActivateClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/ReActivateClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "REACTIVATE")
+@RequiredArgsConstructor
 public class ReActivateClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public ReActivateClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/RejectClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/RejectClientCommandHandler.java
index cce47a1..cc9226d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/RejectClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/RejectClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "REJECT")
+@RequiredArgsConstructor
 public class RejectClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public RejectClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UnassignClientStaffCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UnassignClientStaffCommandHandler.java
index 02aa30e..1b75a57 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UnassignClientStaffCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UnassignClientStaffCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "UNASSIGNSTAFF")
+@RequiredArgsConstructor
 public class UnassignClientStaffCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public UnassignClientStaffCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoClientTransactionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoClientTransactionCommandHandler.java
index 590ad00..12b505a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoClientTransactionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoClientTransactionCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 import org.apache.fineract.portfolio.client.service.ClientTransactionWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ClientApiConstants.CLIENT_RESOURCE_NAME, action = ClientApiConstants.CLIENT_TRANSACTION_ACTION_UNDO)
+@RequiredArgsConstructor
 public class UndoClientTransactionCommandHandler implements NewCommandSourceHandler {
 
     private final ClientTransactionWritePlatformService writePlatformService;
 
-    @Autowired
-    public UndoClientTransactionCommandHandler(final ClientTransactionWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoRejectClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoRejectClientCommandHandler.java
index 31a87a2..b412e99 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoRejectClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoRejectClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "UNDOREJECT")
+@RequiredArgsConstructor
 public class UndoRejectClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public UndoRejectClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoWithdrawalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoWithdrawalCommandHandler.java
index 875909b..8d2c3b5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoWithdrawalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UndoWithdrawalCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "UNDOWITHDRAWAL")
+@RequiredArgsConstructor
 public class UndoWithdrawalCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public UndoWithdrawalCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientAddressCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientAddressCommandHandler.java
index 3523bfe..8638419 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientAddressCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientAddressCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.address.service.AddressWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "ADDRESS", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateClientAddressCommandHandler implements NewCommandSourceHandler {
 
     private final AddressWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateClientAddressCommandHandler(final AddressWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         /*
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientCommandHandler.java
index 2809ea5..22ce0d7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public UpdateClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientFamilyMemberCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientFamilyMemberCommandHandler.java
index 4fbee47..5080400 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientFamilyMemberCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientFamilyMemberCommandHandler.java
@@ -19,25 +19,21 @@
 
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientFamilyMembersWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "FAMILYMEMBERS", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateClientFamilyMemberCommandHandler implements NewCommandSourceHandler {
 
     private final ClientFamilyMembersWritePlatformService clientFamilyMembersWritePlatformService;
 
-    @Autowired
-    public UpdateClientFamilyMemberCommandHandler(final ClientFamilyMembersWritePlatformService clientFamilyMembersWritePlatformService) {
-        this.clientFamilyMembersWritePlatformService = clientFamilyMembersWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientIdentifierCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientIdentifierCommandHandler.java
index 59b3490..92862d2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientIdentifierCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientIdentifierCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientIdentifierWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENTIDENTIFIER", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateClientIdentifierCommandHandler implements NewCommandSourceHandler {
 
     private final ClientIdentifierWritePlatformService clientIdentifierWritePlatformService;
 
-    @Autowired
-    public UpdateClientIdentifierCommandHandler(final ClientIdentifierWritePlatformService clientIdentifierWritePlatformService) {
-        this.clientIdentifierWritePlatformService = clientIdentifierWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientSavingsAccountCommandHandler.java
index 2ea830e..0982da6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/UpdateClientSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "UPDATESAVINGSACCOUNT")
+@RequiredArgsConstructor
 public class UpdateClientSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public UpdateClientSavingsAccountCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WaiveClientChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WaiveClientChargeCommandHandler.java
index 986c1b1..24610ca 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WaiveClientChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WaiveClientChargeCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 import org.apache.fineract.portfolio.client.service.ClientChargeWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = ClientApiConstants.CLIENT_CHARGES_RESOURCE_NAME, action = ClientApiConstants.CLIENT_CHARGE_ACTION_WAIVE)
+@RequiredArgsConstructor
 public class WaiveClientChargeCommandHandler implements NewCommandSourceHandler {
 
     private final ClientChargeWritePlatformService writePlatformService;
 
-    @Autowired
-    public WaiveClientChargeCommandHandler(final ClientChargeWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WithdrawClientCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WithdrawClientCommandHandler.java
index e3e2f9b..c432d34 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WithdrawClientCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/WithdrawClientCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.client.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.client.service.ClientWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "WITHDRAW")
+@RequiredArgsConstructor
 public class WithdrawClientCommandHandler implements NewCommandSourceHandler {
 
     private final ClientWritePlatformService clientWritePlatformService;
 
-    @Autowired
-    public WithdrawClientCommandHandler(final ClientWritePlatformService clientWritePlatformService) {
-        this.clientWritePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/CreateCollateralCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/CreateCollateralCommandHandler.java
index 663785c..87cda38 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/CreateCollateralCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/CreateCollateralCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.collateral.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collateral.service.CollateralWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "COLLATERAL", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateCollateralCommandHandler implements NewCommandSourceHandler {
 
     private final CollateralWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateCollateralCommandHandler(final CollateralWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/DeleteCollateralCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/DeleteCollateralCommandHandler.java
index b03b27a..9b73c17 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/DeleteCollateralCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/DeleteCollateralCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.collateral.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collateral.service.CollateralWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "COLLATERAL", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteCollateralCommandHandler implements NewCommandSourceHandler {
 
     private final CollateralWritePlatformService collateralWritePlatformService;
 
-    @Autowired
-    public DeleteCollateralCommandHandler(final CollateralWritePlatformService guarantorWritePlatformService) {
-        this.collateralWritePlatformService = guarantorWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/UpdateCollateralCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/UpdateCollateralCommandHandler.java
index a2b6b9d..b86d060 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/UpdateCollateralCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/handler/UpdateCollateralCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.collateral.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collateral.service.CollateralWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "COLLATERAL", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCollateralCommandHandler implements NewCommandSourceHandler {
 
     private final CollateralWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateCollateralCommandHandler(final CollateralWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/LoanCollateralManagementApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/LoanCollateralManagementApiResource.java
index 78aeb5e..e72ad27 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/LoanCollateralManagementApiResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/LoanCollateralManagementApiResource.java
@@ -33,7 +33,6 @@
 import java.util.function.Supplier;
 import lombok.RequiredArgsConstructor;
 import org.apache.fineract.command.core.CommandDispatcher;
-import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collateralmanagement.command.LoanCollateralDeleteCommand;
 import org.apache.fineract.portfolio.collateralmanagement.data.LoanCollateralDeleteRequest;
 import org.apache.fineract.portfolio.collateralmanagement.data.LoanCollateralDeleteResponse;
@@ -54,7 +53,7 @@
     @DELETE
     @Path("{id}")
     @Operation(description = "Delete Loan Collateral", summary = "Delete Loan Collateral")
-    @ApiResponse(responseCode = "default", content = @Content(schema = @Schema(implementation = CommandProcessingResult.class)))
+    @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = LoanCollateralDeleteResponse.class)))
     public LoanCollateralDeleteResponse deleteLoanCollateral(@PathParam("loanId") @Parameter(description = "loanId") final Long loanId,
             @PathParam("id") @Parameter(description = "loan collateral id") final Long id) {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/SaveIndividualCollectionSheetCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/SaveIndividualCollectionSheetCommandHandler.java
index 9437612..1a61307 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/SaveIndividualCollectionSheetCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/SaveIndividualCollectionSheetCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.collectionsheet.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "COLLECTIONSHEET", action = "SAVE")
+@RequiredArgsConstructor
 public class SaveIndividualCollectionSheetCommandHandler implements NewCommandSourceHandler {
 
     private final CollectionSheetWritePlatformService collectionSheetWritePlatformService;
 
-    @Autowired
-    public SaveIndividualCollectionSheetCommandHandler(final CollectionSheetWritePlatformService collectionSheetWritePlatformService) {
-        this.collectionSheetWritePlatformService = collectionSheetWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/UpdateCollectionSheetCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/UpdateCollectionSheetCommandHandler.java
index 171e804..ad6fc76 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/UpdateCollectionSheetCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/UpdateCollectionSheetCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.collectionsheet.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "COLLECTIONSHEET", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCollectionSheetCommandHandler implements NewCommandSourceHandler {
 
     private final CollectionSheetWritePlatformService collectionSheetWritePlatformService;
 
-    @Autowired
-    public UpdateCollectionSheetCommandHandler(final CollectionSheetWritePlatformService collectionSheetWritePlatformService) {
-        this.collectionSheetWritePlatformService = collectionSheetWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/CreateFundCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/CreateFundCommandHandler.java
index 1cfed4c..be53fcb 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/CreateFundCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/CreateFundCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.fund.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.fund.service.FundWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FUND", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateFundCommandHandler implements NewCommandSourceHandler {
 
     private final FundWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateFundCommandHandler(final FundWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/UpdateFundCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/UpdateFundCommandHandler.java
index 63313d2..d84d9c3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/UpdateFundCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/UpdateFundCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.fund.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.fund.service.FundWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FUND", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateFundCommandHandler implements NewCommandSourceHandler {
 
     private final FundWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateFundCommandHandler(final FundWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateCenterCommandHandler.java
index cb9dc51..21681a9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public ActivateCenterCommandHandler(final GroupingTypesWritePlatformService clientWritePlatformService) {
-        this.writePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateGroupCommandHandler.java
index 975a82a..20f2aa0 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/ActivateGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public ActivateGroupCommandHandler(final GroupingTypesWritePlatformService clientWritePlatformService) {
-        this.writePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignGroupStaffCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignGroupStaffCommandHandler.java
index 34da7b2..d98aa21 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignGroupStaffCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignGroupStaffCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "ASSIGNSTAFF")
+@RequiredArgsConstructor
 public class AssignGroupStaffCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public AssignGroupStaffCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignRoleCommandHandler.java
index 494854d..4e03454 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssignRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupRolesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "ASSIGNROLE")
+@RequiredArgsConstructor
 public class AssignRoleCommandHandler implements NewCommandSourceHandler {
 
     private final GroupRolesWritePlatformService groupRolesWritePlatformService;
 
-    @Autowired
-    public AssignRoleCommandHandler(final GroupRolesWritePlatformService groupRolesWritePlatformService) {
-        this.groupRolesWritePlatformService = groupRolesWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateClientsToGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateClientsToGroupCommandHandler.java
index fe633fb..f1429b2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateClientsToGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateClientsToGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "ASSOCIATECLIENTS")
+@RequiredArgsConstructor
 public class AssociateClientsToGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public AssociateClientsToGroupCommandHandler(final GroupingTypesWritePlatformService clientWritePlatformService) {
-        this.writePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateGroupsToCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateGroupsToCenterCommandHandler.java
index 29a6cb8..6bbcd50 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateGroupsToCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/AssociateGroupsToCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "ASSOCIATEGROUPS")
+@RequiredArgsConstructor
 public class AssociateGroupsToCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public AssociateGroupsToCenterCommandHandler(final GroupingTypesWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseCenterCommandHandler.java
index b222c11..7a83b28 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupingTypesWritePlatformService;
 
-    @Autowired
-    public CloseCenterCommandHandler(final GroupingTypesWritePlatformService groupingTypesWritePlatformService) {
-        this.groupingTypesWritePlatformService = groupingTypesWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseGroupCommandHandler.java
index ea12b3b..ad5885e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupingTypesWritePlatformService;
 
-    @Autowired
-    public CloseGroupCommandHandler(final GroupingTypesWritePlatformService groupingTypesWritePlatformService) {
-        this.groupingTypesWritePlatformService = groupingTypesWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateCenterCommandHandler.java
index e0c12b9..35de614 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public CreateCenterCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateGroupCommandHandler.java
index 9cc8400..62a8e5f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CreateGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public CreateGroupCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteCenterCommandHandler.java
index 4d250ab..e691536 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public DeleteCenterCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteGroupCommandHandler.java
index 1610021..4a30787 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DeleteGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public DeleteGroupCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateClientsFromGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateClientsFromGroupCommandHandler.java
index ce690bd..6a45d4b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateClientsFromGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateClientsFromGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "DISASSOCIATECLIENTS")
+@RequiredArgsConstructor
 public class DisassociateClientsFromGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public DisassociateClientsFromGroupCommandHandler(final GroupingTypesWritePlatformService clientWritePlatformService) {
-        this.writePlatformService = clientWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateGroupsFromCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateGroupsFromCenterCommandHandler.java
index 5ebeb83..fe57e51 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateGroupsFromCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/DisassociateGroupsFromCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "DISASSOCIATEGROUPS")
+@RequiredArgsConstructor
 public class DisassociateGroupsFromCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public DisassociateGroupsFromCenterCommandHandler(final GroupingTypesWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveCenterCollectionSheetCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveCenterCollectionSheetCommandHandler.java
index f134a8c..a68f947 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveCenterCollectionSheetCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveCenterCollectionSheetCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "SAVECOLLECTIONSHEET")
+@RequiredArgsConstructor
 public class SaveCenterCollectionSheetCommandHandler implements NewCommandSourceHandler {
 
     private final CollectionSheetWritePlatformService writePlatformService;
 
-    @Autowired
-    public SaveCenterCollectionSheetCommandHandler(final CollectionSheetWritePlatformService collectionSheetWritePlatformService) {
-        this.writePlatformService = collectionSheetWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveGroupCollectionSheetCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveGroupCollectionSheetCommandHandler.java
index 3eca030..18957fa 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveGroupCollectionSheetCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/SaveGroupCollectionSheetCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.collectionsheet.service.CollectionSheetWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "SAVECOLLECTIONSHEET")
+@RequiredArgsConstructor
 public class SaveGroupCollectionSheetCommandHandler implements NewCommandSourceHandler {
 
     private final CollectionSheetWritePlatformService writePlatformService;
 
-    @Autowired
-    public SaveGroupCollectionSheetCommandHandler(final CollectionSheetWritePlatformService collectionSheetWritePlatformService) {
-        this.writePlatformService = collectionSheetWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignGroupStaffCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignGroupStaffCommandHandler.java
index 547e26b..dd069d7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignGroupStaffCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignGroupStaffCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "UNASSIGNSTAFF")
+@RequiredArgsConstructor
 public class UnassignGroupStaffCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public UnassignGroupStaffCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignRoleCommandHandler.java
index 920f0db..a87cc5a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupRolesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "UNASSIGNROLE")
+@RequiredArgsConstructor
 public class UnassignRoleCommandHandler implements NewCommandSourceHandler {
 
     private final GroupRolesWritePlatformService groupRolesWritePlatformService;
 
-    @Autowired
-    public UnassignRoleCommandHandler(final GroupRolesWritePlatformService groupRolesWritePlatformService) {
-        this.groupRolesWritePlatformService = groupRolesWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignStaffFromCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignStaffFromCenterCommandHandler.java
index 4823dfb..e5d4225 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignStaffFromCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UnassignStaffFromCenterCommandHandler.java
@@ -18,24 +18,20 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
+@RequiredArgsConstructor
 public class UnassignStaffFromCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService writePlatformService;
 
-    @Autowired
-    public UnassignStaffFromCenterCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.writePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateCenterCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateCenterCommandHandler.java
index 3036e8e..26ee4d6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateCenterCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateCenterCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CENTER", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateCenterCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public UpdateCenterCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupCommandHandler.java
index fee0f90..ac2b1b9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateGroupCommandHandler implements NewCommandSourceHandler {
 
     private final GroupingTypesWritePlatformService groupWritePlatformService;
 
-    @Autowired
-    public UpdateGroupCommandHandler(final GroupingTypesWritePlatformService groupWritePlatformService) {
-        this.groupWritePlatformService = groupWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupRoleCommandHandler.java
index e109351..18f2874 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/UpdateGroupRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.group.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.group.service.GroupRolesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "UPDATEROLE")
+@RequiredArgsConstructor
 public class UpdateGroupRoleCommandHandler implements NewCommandSourceHandler {
 
     private final GroupRolesWritePlatformService groupRolesWritePlatformService;
 
-    @Autowired
-    public UpdateGroupRoleCommandHandler(final GroupRolesWritePlatformService groupRolesWritePlatformService) {
-        this.groupRolesWritePlatformService = groupRolesWritePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/transferfeechargeforloans/TransferFeeChargeForLoansTasklet.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/transferfeechargeforloans/TransferFeeChargeForLoansTasklet.java
index a9bf927..b0c3056 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/transferfeechargeforloans/TransferFeeChargeForLoansTasklet.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/transferfeechargeforloans/TransferFeeChargeForLoansTasklet.java
@@ -38,6 +38,7 @@
 import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType;
 import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService;
+import org.apache.fineract.portfolio.loanproduct.exception.LinkedAccountRequiredException;
 import org.springframework.batch.core.StepContribution;
 import org.springframework.batch.core.scope.context.ChunkContext;
 import org.springframework.batch.core.step.tasklet.Tasklet;
@@ -69,6 +70,13 @@
                                 portfolioAccountData = accountAssociationsReadPlatformService
                                         .retriveLoanLinkedAssociation(chargeData.getLoanId());
                             }
+                            if (portfolioAccountData == null) {
+                                errors.add(new LinkedAccountRequiredException("loan.transfer.fee.charge",
+                                        "Loan with id:" + chargeData.getLoanId()
+                                                + " has a charge payable by account transfer but no linked savings account",
+                                        chargeData.getLoanId()));
+                                break;
+                            }
                             final boolean isExceptionForBalanceCheck = false;
                             final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(DateUtils.getBusinessLocalDate(),
                                     installmentChargeData.getAmountOutstanding(), PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN,
@@ -82,6 +90,13 @@
                 } else if (chargeData.getDueDate() != null && !DateUtils.isDateInTheFuture(chargeData.getDueDate())) {
                     final PortfolioAccountData portfolioAccountData = accountAssociationsReadPlatformService
                             .retriveLoanLinkedAssociation(chargeData.getLoanId());
+                    if (portfolioAccountData == null) {
+                        errors.add(new LinkedAccountRequiredException("loan.transfer.fee.charge",
+                                "Loan with id:" + chargeData.getLoanId()
+                                        + " has a charge payable by account transfer but no linked savings account",
+                                chargeData.getLoanId()));
+                        continue;
+                    }
                     final boolean isExceptionForBalanceCheck = false;
                     final AccountTransferDTO accountTransferDTO = new AccountTransferDTO(DateUtils.getBusinessLocalDate(),
                             chargeData.getAmountOutstanding(), PortfolioAccountType.SAVINGS, PortfolioAccountType.LOAN,
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingServiceImpl.java
index 5fc4a09..07d410c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanBuyDownFeeAmortizationProcessingServiceImpl.java
@@ -72,6 +72,7 @@
         }
 
         final List<LoanAmortizationAllocationMapping> loanAmortizationAllocationMappings = new ArrayList<>();
+
         Money totalAmortization = Money.zero(loan.getCurrency());
         final BigDecimal totalAmortized = loanTransactionRepository.getAmortizedAmountBuyDownFee(loan);
         for (LoanBuyDownFeeBalance balance : balances) {
@@ -81,17 +82,16 @@
                 final List<LoanTransaction> adjustments = loanTransactionRepository.findAdjustments(balance.getLoanTransaction());
                 final Money amortizationTillDate = BuyDownFeeAmortizationUtil.calculateTotalAmortizationTillDate(balance, adjustments,
                         maturityDate, loan.getLoanProductRelatedDetail().getBuyDownFeeStrategy(), tillDatePlusOne, loan.getCurrency());
-                totalAmortization = totalAmortization.add(amortizationTillDate);
                 final BigDecimal alreadyAmortizedAmount = loanAmortizationAllocationService
                         .calculateAlreadyAmortizedAmount(balance.getLoanTransaction().getId(), loan.getId());
-                if (!adjustments.isEmpty()) {
-                    if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
-                        amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
-                        amortizationType = AmortizationType.AM_ADJ;
-                    } else {
-                        amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
-                        amortizationType = AmortizationType.AM;
-                    }
+                if (MathUtil.isZero(balance.getUnrecognizedAmount()) && adjustments.isEmpty()) {
+                    totalAmortization = totalAmortization.add(Money.of(loan.getCurrency(), alreadyAmortizedAmount));
+                    continue;
+                }
+                totalAmortization = totalAmortization.add(amortizationTillDate);
+                if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
+                    amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
+                    amortizationType = AmortizationType.AM_ADJ;
                 } else {
                     amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
                     amortizationType = AmortizationType.AM;
@@ -142,7 +142,18 @@
     @Override
     @Transactional
     public void processBuyDownFeeAmortizationOnLoanClosure(@NonNull final Loan loan, final boolean addJournal) {
-        final LocalDate transactionDate = getFinalBuyDownFeeAmortizationTransactionDate(loan);
+        processRemainingBuyDownFeeAmortization(loan, getFinalBuyDownFeeAmortizationTransactionDate(loan), addJournal);
+    }
+
+    @Override
+    @Transactional
+    public void processBuyDownFeeAmortizationOnLoanSale(@NonNull final Loan loan, @NonNull final LocalDate transactionDate,
+            final boolean addJournal) {
+        processRemainingBuyDownFeeAmortization(loan, transactionDate, addJournal);
+    }
+
+    private void processRemainingBuyDownFeeAmortization(@NonNull final Loan loan, @NonNull final LocalDate transactionDate,
+            final boolean addJournal) {
         final Optional<LoanTransaction> amortizationTransaction = createBuyDownFeeAmortizationTransaction(loan, transactionDate, false,
                 null);
         amortizationTransaction.ifPresent(loanTransaction -> {
@@ -154,7 +165,7 @@
                         .notifyPostBusinessEvent(new LoanBuyDownFeeAmortizationAdjustmentTransactionCreatedBusinessEvent(loanTransaction));
             }
             if (addJournal) {
-                journalEntryPoster.postJournalEntriesForLoanTransaction(amortizationTransaction.get(), false, false);
+                journalEntryPoster.postJournalEntriesForLoanTransaction(loanTransaction, false, false);
             }
         });
     }
@@ -225,14 +236,9 @@
                 totalAmortization = totalAmortization.add(amortizationTillDate.getAmount());
                 final BigDecimal alreadyAmortizedAmount = loanAmortizationAllocationService
                         .calculateAlreadyAmortizedAmount(balance.getLoanTransaction().getId(), loan.getId());
-                if (!adjustments.isEmpty()) {
-                    if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
-                        amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
-                        amortizationType = AmortizationType.AM_ADJ;
-                    } else {
-                        amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
-                        amortizationType = AmortizationType.AM;
-                    }
+                if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
+                    amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
+                    amortizationType = AmortizationType.AM_ADJ;
                 } else {
                     amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
                     amortizationType = AmortizationType.AM;
@@ -254,6 +260,8 @@
             }
         }
 
+        loanBuyDownFeeBalanceRepository.saveAll(balances);
+
         final BigDecimal totalUnrecognizedAmount = totalAmortization.subtract(totalAmortized);
         if (MathUtil.isZero(totalUnrecognizedAmount)) {
             return Optional.empty();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java
index a7377d9..2674b36 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanCapitalizedIncomeAmortizationProcessingServiceImpl.java
@@ -64,7 +64,18 @@
     @Override
     @Transactional
     public void processCapitalizedIncomeAmortizationOnLoanClosure(@NonNull final Loan loan, final boolean addJournal) {
-        final LocalDate transactionDate = getFinalCapitalizedIncomeAmortizationTransactionDate(loan);
+        processRemainingCapitalizedIncomeAmortization(loan, getFinalCapitalizedIncomeAmortizationTransactionDate(loan), addJournal);
+    }
+
+    @Override
+    @Transactional
+    public void processCapitalizedIncomeAmortizationOnLoanSale(@NonNull final Loan loan, @NonNull final LocalDate transactionDate,
+            final boolean addJournal) {
+        processRemainingCapitalizedIncomeAmortization(loan, transactionDate, addJournal);
+    }
+
+    private void processRemainingCapitalizedIncomeAmortization(@NonNull final Loan loan, @NonNull final LocalDate transactionDate,
+            final boolean addJournal) {
         final Optional<LoanTransaction> amortizationTransaction = createCapitalizedIncomeAmortizationTransaction(loan, transactionDate,
                 false, null);
         amortizationTransaction.ifPresent(loanTransaction -> {
@@ -76,7 +87,7 @@
                         new LoanCapitalizedIncomeAmortizationAdjustmentTransactionCreatedBusinessEvent(loanTransaction));
             }
             if (addJournal) {
-                journalEntryPoster.postJournalEntriesForLoanTransaction(amortizationTransaction.get(), false, false);
+                journalEntryPoster.postJournalEntriesForLoanTransaction(loanTransaction, false, false);
             }
         });
     }
@@ -130,14 +141,9 @@
                 totalAmortization = totalAmortization.add(amortizationTillDate.getAmount());
                 final BigDecimal alreadyAmortizedAmount = loanAmortizationAllocationService
                         .calculateAlreadyAmortizedAmount(balance.getLoanTransaction().getId(), loan.getId());
-                if (!adjustments.isEmpty()) {
-                    if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
-                        amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
-                        amortizationType = AmortizationType.AM_ADJ;
-                    } else {
-                        amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
-                        amortizationType = AmortizationType.AM;
-                    }
+                if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
+                    amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
+                    amortizationType = AmortizationType.AM_ADJ;
                 } else {
                     amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
                     amortizationType = AmortizationType.AM;
@@ -159,6 +165,8 @@
             }
         }
 
+        loanCapitalizedIncomeBalanceRepository.saveAll(balances);
+
         final BigDecimal totalUnrecognizedAmount = totalAmortization.subtract(totalAmortized);
         if (MathUtil.isZero(totalUnrecognizedAmount)) {
             return Optional.empty();
@@ -232,17 +240,16 @@
                 final Money amortizationTillDate = CapitalizedIncomeAmortizationUtil.calculateTotalAmortizationTillDate(balance,
                         adjustments, maturityDate, loan.getLoanProductRelatedDetail().getCapitalizedIncomeStrategy(), tillDatePlusOne,
                         loan.getCurrency());
-                totalAmortization = totalAmortization.add(amortizationTillDate);
                 final BigDecimal alreadyAmortizedAmount = loanAmortizationAllocationService
                         .calculateAlreadyAmortizedAmount(balance.getLoanTransaction().getId(), loan.getId());
-                if (!adjustments.isEmpty()) {
-                    if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
-                        amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
-                        amortizationType = AmortizationType.AM_ADJ;
-                    } else {
-                        amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
-                        amortizationType = AmortizationType.AM;
-                    }
+                if (MathUtil.isZero(balance.getUnrecognizedAmount()) && adjustments.isEmpty()) {
+                    totalAmortization = totalAmortization.add(Money.of(loan.getCurrency(), alreadyAmortizedAmount));
+                    continue;
+                }
+                totalAmortization = totalAmortization.add(amortizationTillDate);
+                if (alreadyAmortizedAmount.compareTo(amortizationTillDate.getAmount()) > 0) {
+                    amortizationAmount = alreadyAmortizedAmount.subtract(amortizationTillDate.getAmount());
+                    amortizationType = AmortizationType.AM_ADJ;
                 } else {
                     amortizationAmount = amortizationTillDate.getAmount().subtract(alreadyAmortizedAmount);
                     amortizationType = AmortizationType.AM;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index 8c40701..18e77d4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -433,6 +433,10 @@
                 if (isAccountTransfer && loan.shouldCreateStandingInstructionAtDisbursement()) {
                     final PortfolioAccountData linkedSavingsAccountData = this.accountAssociationsReadPlatformService
                             .retriveLoanLinkedAssociation(loanId);
+                    if (linkedSavingsAccountData == null) {
+                        throw new LinkedAccountRequiredException("loan.disburse.downpayment",
+                                "Loan with id:" + loanId + " requires a linked savings account for the down payment transfer", loanId);
+                    }
                     final SavingsAccount fromSavingsAccount = null;
                     final boolean isRegularTransaction = true;
                     final boolean isExceptionForBalanceCheck = false;
@@ -483,6 +487,10 @@
 
         for (final Map.Entry<Long, BigDecimal> entrySet : disBuLoanCharges.entrySet()) {
             final PortfolioAccountData savingAccountData = this.accountAssociationsReadPlatformService.retriveLoanLinkedAssociation(loanId);
+            if (savingAccountData == null) {
+                throw new LinkedAccountRequiredException("loan.disburse.charge",
+                        "Loan with id:" + loanId + " has a charge payable by account transfer but no linked savings account", loanId);
+            }
             final SavingsAccount fromSavingsAccount = null;
             final boolean isRegularTransaction = true;
             final boolean isExceptionForBalanceCheck = false;
@@ -830,6 +838,11 @@
             for (final Map.Entry<Long, BigDecimal> entrySet : disBuLoanCharges.entrySet()) {
                 final PortfolioAccountData savingAccountData = this.accountAssociationsReadPlatformService
                         .retriveLoanLinkedAssociation(loan.getId());
+                if (savingAccountData == null) {
+                    throw new LinkedAccountRequiredException("loan.disburse.charge",
+                            "Loan with id:" + loan.getId() + " has a charge payable by account transfer but no linked savings account",
+                            loan.getId());
+                }
                 final SavingsAccount fromSavingsAccount = null;
                 final boolean isRegularTransaction = true;
                 final boolean isExceptionForBalanceCheck = false;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/CreateRateCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/CreateRateCommandHandler.java
index 489955e..6c5f539 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/CreateRateCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/CreateRateCommandHandler.java
@@ -18,12 +18,12 @@
  */
 package org.apache.fineract.portfolio.rate.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.rate.service.RateWriteService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -31,15 +31,11 @@
  */
 @Service
 @CommandType(entity = "RATE", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateRateCommandHandler implements NewCommandSourceHandler {
 
     private final RateWriteService writePlatformService;
 
-    @Autowired
-    public CreateRateCommandHandler(final RateWriteService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.createRate(command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/UpdateRateCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/UpdateRateCommandHandler.java
index f1ed8e1..da9a756 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/UpdateRateCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/handler/UpdateRateCommandHandler.java
@@ -18,12 +18,12 @@
  */
 package org.apache.fineract.portfolio.rate.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.rate.service.RateWriteService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -32,15 +32,11 @@
  */
 @Service
 @CommandType(entity = "RATE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateRateCommandHandler implements NewCommandSourceHandler {
 
     private final RateWriteService writePlatformService;
 
-    @Autowired
-    public UpdateRateCommandHandler(final RateWriteService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/BouncePostDatedCheckHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/BouncePostDatedCheckHandler.java
index c2a7ede..d22cef8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/BouncePostDatedCheckHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/BouncePostDatedCheckHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service.RepaymentWithPostDatedChecksWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "REPAYMENT_WITH_POSTDATEDCHECKS", action = "BOUNCE")
+@RequiredArgsConstructor
 public class BouncePostDatedCheckHandler implements NewCommandSourceHandler {
 
     private final RepaymentWithPostDatedChecksWritePlatformService repaymentWithPostDatedChecksWritePlatformService;
 
-    @Autowired
-    public BouncePostDatedCheckHandler(
-            final RepaymentWithPostDatedChecksWritePlatformService repaymentWithPostDatedChecksWritePlatformService) {
-        this.repaymentWithPostDatedChecksWritePlatformService = repaymentWithPostDatedChecksWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/DeletePostDatedChecksHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/DeletePostDatedChecksHandler.java
index 25bc5d4..09f2463 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/DeletePostDatedChecksHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/DeletePostDatedChecksHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service.RepaymentWithPostDatedChecksWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "REPAYMENT_WITH_POSTDATEDCHECKS", action = "DELETE")
+@RequiredArgsConstructor
 public class DeletePostDatedChecksHandler implements NewCommandSourceHandler {
 
     private final RepaymentWithPostDatedChecksWritePlatformService repaymentWithPostDatedChecksWritePlatformService;
 
-    @Autowired
-    public DeletePostDatedChecksHandler(
-            final RepaymentWithPostDatedChecksWritePlatformService repaymentWithPostDatedChecksWritePlatformService) {
-        this.repaymentWithPostDatedChecksWritePlatformService = repaymentWithPostDatedChecksWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/EditPostDatedChecksHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/EditPostDatedChecksHandler.java
index ca05b0c..6b47712 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/EditPostDatedChecksHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/EditPostDatedChecksHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.service.RepaymentWithPostDatedChecksWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "REPAYMENT_WITH_POSTDATEDCHECKS", action = "UPDATE")
+@RequiredArgsConstructor
 public class EditPostDatedChecksHandler implements NewCommandSourceHandler {
 
     private final RepaymentWithPostDatedChecksWritePlatformService repaymentWithPostDatedChecksWritePlatformService;
 
-    @Autowired
-    public EditPostDatedChecksHandler(
-            final RepaymentWithPostDatedChecksWritePlatformService repaymentWithPostDatedChecksWritePlatformService) {
-        this.repaymentWithPostDatedChecksWritePlatformService = repaymentWithPostDatedChecksWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateFixedDepositAccountCommandHandler.java
index 437ad81..aa2b00c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateFixedDepositAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public ActivateFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateRecurringDepositAccountCommandHandler.java
index bab8074..2018c14 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateRecurringDepositAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public ActivateRecurringDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateSavingsAccountCommandHandler.java
index a7b9ba2..8021bb7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public ActivateSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/AddSavingsAccountChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/AddSavingsAccountChargeCommandHandler.java
index 6e4b3f9..9408484 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/AddSavingsAccountChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/AddSavingsAccountChargeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNTCHARGE", action = "CREATE")
+@RequiredArgsConstructor
 public class AddSavingsAccountChargeCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public AddSavingsAccountChargeCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java
index a73e445..b726b92 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "APPLYANNUALFEE")
+@RequiredArgsConstructor
 public class ApplyAnnualFeeSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     @SuppressWarnings("unused")
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public ApplyAnnualFeeSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockCreditsToSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockCreditsToSavingsAccountCommandHandler.java
index 7f623b4..ce3719f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockCreditsToSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockCreditsToSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "BLOCKCREDIT")
+@RequiredArgsConstructor
 public class BlockCreditsToSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public BlockCreditsToSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockDebitsFromSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockDebitsFromSavingsAccountCommandHandler.java
index 53cb80f..ffca7fd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockDebitsFromSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockDebitsFromSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "BLOCKDEBIT")
+@RequiredArgsConstructor
 public class BlockDebitsFromSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public BlockDebitsFromSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockSavingsAccountCommandHandler.java
index d2dec00..9914486 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "BLOCK")
+@RequiredArgsConstructor
 public class BlockSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public BlockSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestFixedDepositAccountCommandHandler.java
index 81215b7..7e0f44f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestFixedDepositAccountCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "CALCULATEINTEREST")
+@RequiredArgsConstructor
 public class CalculateInterestFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public CalculateInterestFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestRecurringDepositAccountCommandHandler.java
index 199df54..7ee47c5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestRecurringDepositAccountCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "CALCULATEINTEREST")
+@RequiredArgsConstructor
 public class CalculateInterestRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public CalculateInterestRecurringDepositAccountCommandHandler(
-            final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestSavingsAccountCommandHandler.java
index b057985..c8d7cea 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "CALCULATEINTEREST")
+@RequiredArgsConstructor
 public class CalculateInterestSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public CalculateInterestSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseFixedDepositAccountCommandHandler.java
index 8b105b5..de67253 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseFixedDepositAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public CloseFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseGSIMCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseGSIMCommandHandler.java
index 7e70c9a..d03b23a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseGSIMCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseGSIMCommandHandler.java
@@ -19,26 +19,22 @@
 
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseGSIMCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public CloseGSIMCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseRecurringDepositAccountCommandHandler.java
index c259d84..3b6b9a8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseRecurringDepositAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public CloseRecurringDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseSavingsAccountCommandHandler.java
index 6005147..dd1844b 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public CloseSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateFixedDepositProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateFixedDepositProductCommandHandler.java
index 5d2a588..b796da5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateFixedDepositProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateFixedDepositProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.FixedDepositProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITPRODUCT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateFixedDepositProductCommandHandler implements NewCommandSourceHandler {
 
     private final FixedDepositProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateFixedDepositProductCommandHandler(final FixedDepositProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.create(command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateRecurringDepositProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateRecurringDepositProductCommandHandler.java
index db60e07..5f40efc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateRecurringDepositProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateRecurringDepositProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.RecurringDepositProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITPRODUCT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateRecurringDepositProductCommandHandler implements NewCommandSourceHandler {
 
     private final RecurringDepositProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateRecurringDepositProductCommandHandler(final RecurringDepositProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.create(command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateSavingsProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateSavingsProductCommandHandler.java
index 8ba4dfe..b2789ee 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateSavingsProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CreateSavingsProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "SAVINGSPRODUCT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateSavingsProductCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateSavingsProductCommandHandler(final SavingsProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.create(command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteFixedDepositProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteFixedDepositProductCommandHandler.java
index 50594ec..49df021 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteFixedDepositProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteFixedDepositProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.FixedDepositProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITPRODUCT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteFixedDepositProductCommandHandler implements NewCommandSourceHandler {
 
     private final FixedDepositProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteFixedDepositProductCommandHandler(final FixedDepositProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.delete(command.entityId());
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteRecurringDepositProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteRecurringDepositProductCommandHandler.java
index b4d277c..8ccd90e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteRecurringDepositProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteRecurringDepositProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.RecurringDepositProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITPRODUCT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteRecurringDepositProductCommandHandler implements NewCommandSourceHandler {
 
     private final RecurringDepositProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteRecurringDepositProductCommandHandler(final RecurringDepositProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.delete(command.entityId());
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsAccountChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsAccountChargeCommandHandler.java
index af5941e..ba28582 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsAccountChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsAccountChargeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNTCHARGE", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteSavingsAccountChargeCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteSavingsAccountChargeCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsProductCommandHandler.java
index 113cb2a..b912ac7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "SAVINGSPRODUCT", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteSavingsProductCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsProductWritePlatformService savingProductWritePlatformService;
 
-    @Autowired
-    public DeleteSavingsProductCommandHandler(final SavingsProductWritePlatformService savingProductWritePlatformService) {
-        this.savingProductWritePlatformService = savingProductWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.savingProductWritePlatformService.delete(command.entityId());
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DepositSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DepositSavingsAccountCommandHandler.java
index e3f3aa3..fad0d8a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DepositSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DepositSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "DEPOSIT")
+@RequiredArgsConstructor
 public class DepositSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public DepositSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalCommandHandler.java
index 90bac20..277c66f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "APPROVE")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationApprovalCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationApprovalCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalUndoCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalUndoCommandHandler.java
index 3ed356e..294d3c4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalUndoCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationApprovalUndoCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "APPROVALUNDO")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationApprovalUndoCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationApprovalUndoCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationDeletionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationDeletionCommandHandler.java
index 078d95a..6172399 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationDeletionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationDeletionCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "DELETE")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationDeletionCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationDeletionCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationModificationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationModificationCommandHandler.java
index 9bfe88c..8e472fd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationModificationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationModificationCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "UPDATE")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationModificationCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationModificationCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationRejectedCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationRejectedCommandHandler.java
index d6917c4..8b48c14 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationRejectedCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationRejectedCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "REJECT")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationRejectedCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationRejectedCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationSubmittalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationSubmittalCommandHandler.java
index a9be193..139996b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationSubmittalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationSubmittalCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "CREATE")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationSubmittalCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationSubmittalCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationWithdrawnByApplicantCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationWithdrawnByApplicantCommandHandler.java
index 0555d88..4bdc82f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationWithdrawnByApplicantCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationWithdrawnByApplicantCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "WITHDRAW")
+@RequiredArgsConstructor
 public class FixedDepositAccountApplicationWithdrawnByApplicantCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountApplicationWithdrawnByApplicantCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountDepositCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountDepositCommandHandler.java
index 0fc699a..46992ff 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountDepositCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountDepositCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "DEPOSIT")
+@RequiredArgsConstructor
 public class FixedDepositAccountDepositCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositAccountDepositCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositTransactionAdjustmentCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositTransactionAdjustmentCommandHandler.java
index ecfce22..3a345ff 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositTransactionAdjustmentCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositTransactionAdjustmentCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "ADJUSTTRANSACTION")
+@RequiredArgsConstructor
 public class FixedDepositTransactionAdjustmentCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public FixedDepositTransactionAdjustmentCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ForceWithdrawalSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ForceWithdrawalSavingsAccountCommandHandler.java
index c0c96a3..de7c213 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ForceWithdrawalSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ForceWithdrawalSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "FORCE_WITHDRAWAL")
+@RequiredArgsConstructor
 public class ForceWithdrawalSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public ForceWithdrawalSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMAccountActivationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMAccountActivationCommandHandler.java
index d7e9bb3..1d76252 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMAccountActivationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMAccountActivationCommandHandler.java
@@ -19,26 +19,22 @@
 
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class GSIMAccountActivationCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public GSIMAccountActivationCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationApprovalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationApprovalCommandHandler.java
index 0efbd8d..dbfe166 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationApprovalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationApprovalCommandHandler.java
@@ -19,26 +19,22 @@
 
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "APPROVE")
+@RequiredArgsConstructor
 public class GSIMApplicationApprovalCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public GSIMApplicationApprovalCommandHandler(final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationModificationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationModificationCommandHandler.java
index 5ebc45a..52993b4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationModificationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationModificationCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "UPDATE")
+@RequiredArgsConstructor
 public class GSIMApplicationModificationCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public GSIMApplicationModificationCommandHandler(
-            final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationRejectionHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationRejectionHandler.java
index c84ce1a..0f46ee0 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationRejectionHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationRejectionHandler.java
@@ -19,26 +19,22 @@
 
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "REJECT")
+@RequiredArgsConstructor
 public class GSIMApplicationRejectionHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public GSIMApplicationRejectionHandler(final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationSubmittalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationSubmittalCommandHandler.java
index 9a65313..a433db1 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationSubmittalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMApplicationSubmittalCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "CREATE")
+@RequiredArgsConstructor
 public class GSIMApplicationSubmittalCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public GSIMApplicationSubmittalCommandHandler(final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMDepositCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMDepositCommandHandler.java
index b2bc494..f530588 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMDepositCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMDepositCommandHandler.java
@@ -19,26 +19,22 @@
 
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "DEPOSIT")
+@RequiredArgsConstructor
 public class GSIMDepositCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public GSIMDepositCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMUndoApprovalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMUndoApprovalCommandHandler.java
index 1a62fd4..9400463 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMUndoApprovalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMUndoApprovalCommandHandler.java
@@ -19,26 +19,22 @@
 
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GSIMACCOUNT", action = "APPROVALUNDO")
+@RequiredArgsConstructor
 public class GSIMUndoApprovalCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService writePlatformService;
 
-    @Autowired
-    public GSIMUndoApprovalCommandHandler(final SavingsApplicationProcessWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/HoldAmountSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/HoldAmountSavingsAccountCommandHandler.java
index c2291eb..a5c1628 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/HoldAmountSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/HoldAmountSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "HOLDAMOUNT")
+@RequiredArgsConstructor
 public class HoldAmountSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public HoldAmountSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/InactivateSavingsAccountChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/InactivateSavingsAccountChargeCommandHandler.java
index bd9fc9d..52db303 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/InactivateSavingsAccountChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/InactivateSavingsAccountChargeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNTCHARGE", action = "INACTIVATE")
+@RequiredArgsConstructor
 public class InactivateSavingsAccountChargeCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public InactivateSavingsAccountChargeCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PaySavingsAccountChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PaySavingsAccountChargeCommandHandler.java
index e0e2809..daf0ab67 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PaySavingsAccountChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PaySavingsAccountChargeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNTCHARGE", action = "PAY")
+@RequiredArgsConstructor
 public class PaySavingsAccountChargeCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public PaySavingsAccountChargeCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestFixedDepositAccountCommandHandler.java
index 507470f..64f5e83 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestFixedDepositAccountCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "POSTINTEREST")
+@RequiredArgsConstructor
 public class PostInterestFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public PostInterestFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestRecurringDepositAccountCommandHandler.java
index 3822733..e17e5ed 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestRecurringDepositAccountCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "POSTINTEREST")
+@RequiredArgsConstructor
 public class PostInterestRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public PostInterestRecurringDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestSavingsAccountCommandHandler.java
index 434c7d5..4bcd4e0 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostInterestSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "POSTINTEREST")
+@RequiredArgsConstructor
 public class PostInterestSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public PostInterestSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostSavingsAccountInterestAsOnDateCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostSavingsAccountInterestAsOnDateCommandHandler.java
index c74a245..c3540fc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostSavingsAccountInterestAsOnDateCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PostSavingsAccountInterestAsOnDateCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "POSTINTERESTASONDATE")
+@RequiredArgsConstructor
 public class PostSavingsAccountInterestAsOnDateCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public PostSavingsAccountInterestAsOnDateCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseFixedDepositAccountCommandHandler.java
index cb509a3..bf76d03 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseFixedDepositAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "PREMATURECLOSE")
+@RequiredArgsConstructor
 public class PrematureCloseFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public PrematureCloseFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseRecurringDepositAccountCommandHandler.java
index 15044fe..c6a0346 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/PrematureCloseRecurringDepositAccountCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "PREMATURECLOSE")
+@RequiredArgsConstructor
 public class PrematureCloseRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public PrematureCloseRecurringDepositAccountCommandHandler(
-            final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalCommandHandler.java
index 1d96193..6c33e3b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "APPROVE")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationApprovalCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationApprovalCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalUndoCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalUndoCommandHandler.java
index 44df952..f319c97 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalUndoCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationApprovalUndoCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "APPROVALUNDO")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationApprovalUndoCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationApprovalUndoCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationDeletionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationDeletionCommandHandler.java
index e40de70..91c63fe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationDeletionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationDeletionCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "DELETE")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationDeletionCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationDeletionCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationModificationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationModificationCommandHandler.java
index 24ffc25..62dd875 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationModificationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationModificationCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "UPDATE")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationModificationCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationModificationCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationRejectedCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationRejectedCommandHandler.java
index 4bdfa3c..f15cfa7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationRejectedCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationRejectedCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "REJECT")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationRejectedCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationRejectedCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationSubmittalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationSubmittalCommandHandler.java
index b3b19e6..b7f5df7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationSubmittalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationSubmittalCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "CREATE")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationSubmittalCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationSubmittalCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationWithdrawnByApplicantCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationWithdrawnByApplicantCommandHandler.java
index fa7f701..85f4d04 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationWithdrawnByApplicantCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountApplicationWithdrawnByApplicantCommandHandler.java
@@ -18,28 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "WITHDRAW")
+@RequiredArgsConstructor
 public class RecurringDepositAccountApplicationWithdrawnByApplicantCommandHandler implements NewCommandSourceHandler {
 
     private final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountApplicationWithdrawnByApplicantCommandHandler(
-            final DepositApplicationProcessWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountDepositCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountDepositCommandHandler.java
index 8b9cfc9..42d0095 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountDepositCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountDepositCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "DEPOSIT")
+@RequiredArgsConstructor
 public class RecurringDepositAccountDepositCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountDepositCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountUpdateDepositAmountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountUpdateDepositAmountCommandHandler.java
index b7155f1..081e736 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountUpdateDepositAmountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountUpdateDepositAmountCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "UPDATEDEPOSITAMOUNT")
+@RequiredArgsConstructor
 public class RecurringDepositAccountUpdateDepositAmountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositAccountUpdateDepositAmountCommandHandler(
-            final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositTransactionAdjustmentCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositTransactionAdjustmentCommandHandler.java
index a97ac08..e25fea5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositTransactionAdjustmentCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositTransactionAdjustmentCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "ADJUSTTRANSACTION")
+@RequiredArgsConstructor
 public class RecurringDepositTransactionAdjustmentCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public RecurringDepositTransactionAdjustmentCommandHandler(
-            final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReleaseAmountSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReleaseAmountSavingsAccountCommandHandler.java
index 022c7b3..0982728 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReleaseAmountSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReleaseAmountSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "RELEASEAMOUNT")
+@RequiredArgsConstructor
 public class ReleaseAmountSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public ReleaseAmountSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RemoveSavingsOfficerCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RemoveSavingsOfficerCommandHandler.java
index 7301ac7..5d7ee99 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RemoveSavingsOfficerCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RemoveSavingsOfficerCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "REMOVESAVINGSOFFICER")
+@RequiredArgsConstructor
 public class RemoveSavingsOfficerCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService savingsWritePlatformService;
 
-    @Autowired
-    public RemoveSavingsOfficerCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.savingsWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReverseTransactionSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReverseTransactionSavingsAccountCommandHandler.java
index ec09d98..c2b82be 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReverseTransactionSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ReverseTransactionSavingsAccountCommandHandler.java
@@ -18,12 +18,12 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -32,15 +32,11 @@
  */
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "REVERSETRANSACTION")
+@RequiredArgsConstructor
 public class ReverseTransactionSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public ReverseTransactionSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalCommandHandler.java
index 6e8db21..1fa00c4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "APPROVE")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationApprovalCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService writePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationApprovalCommandHandler(final SavingsApplicationProcessWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalUndoCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalUndoCommandHandler.java
index c638938..ca52879 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalUndoCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationApprovalUndoCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "APPROVALUNDO")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationApprovalUndoCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService writePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationApprovalUndoCommandHandler(final SavingsApplicationProcessWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationDeletionCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationDeletionCommandHandler.java
index 47bbf1b..149d547 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationDeletionCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationDeletionCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "DELETE")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationDeletionCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationDeletionCommandHandler(
-            final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationModificationCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationModificationCommandHandler.java
index 3ac279b..e8de084 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationModificationCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationModificationCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UPDATE")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationModificationCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationModificationCommandHandler(
-            final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationRejectedCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationRejectedCommandHandler.java
index 353cd72..ed4618f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationRejectedCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationRejectedCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "REJECT")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationRejectedCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService writePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationRejectedCommandHandler(final SavingsApplicationProcessWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationSubmittalCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationSubmittalCommandHandler.java
index 846dedd..f22bff7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationSubmittalCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationSubmittalCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "CREATE")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationSubmittalCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationSubmittalCommandHandler(
-            final SavingsApplicationProcessWritePlatformService savingAccountWritePlatformService) {
-        this.savingAccountWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationWithdrawnByApplicantCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationWithdrawnByApplicantCommandHandler.java
index 9c165f0..1f09c7c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationWithdrawnByApplicantCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationWithdrawnByApplicantCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsApplicationProcessWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "WITHDRAW")
+@RequiredArgsConstructor
 public class SavingsAccountApplicationWithdrawnByApplicantCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsApplicationProcessWritePlatformService writePlatformService;
 
-    @Autowired
-    public SavingsAccountApplicationWithdrawnByApplicantCommandHandler(
-            final SavingsApplicationProcessWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsTransactionAdjustmentCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsTransactionAdjustmentCommandHandler.java
index 5bc8ab4..14f6413 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsTransactionAdjustmentCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsTransactionAdjustmentCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "ADJUSTTRANSACTION")
+@RequiredArgsConstructor
 public class SavingsTransactionAdjustmentCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public SavingsTransactionAdjustmentCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockCreditsToSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockCreditsToSavingsAccountCommandHandler.java
index 0985cc5..97384b5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockCreditsToSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockCreditsToSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UNBLOCKCREDIT")
+@RequiredArgsConstructor
 public class UnblockCreditsToSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public UnblockCreditsToSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockDebitsFromSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockDebitsFromSavingsAccountCommandHandler.java
index 8f7b0fc..cc9a699 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockDebitsFromSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockDebitsFromSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UNBLOCKDEBIT")
+@RequiredArgsConstructor
 public class UnblockDebitsFromSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public UnblockDebitsFromSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockSavingsAccountCommandHandler.java
index 7db7496..f66d821 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UNBLOCK")
+@RequiredArgsConstructor
 public class UnblockSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public UnblockSavingsAccountCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.writePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionFixedDepositAccountCommandHandler.java
index 76f3b6a..c0f0004 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionFixedDepositAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "UNDOTRANSACTION")
+@RequiredArgsConstructor
 public class UndoTransactionFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public UndoTransactionFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionRecurringDepositAccountCommandHandler.java
index 76e054c..3a74d45 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionRecurringDepositAccountCommandHandler.java
@@ -18,27 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "UNDOTRANSACTION")
+@RequiredArgsConstructor
 public class UndoTransactionRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public UndoTransactionRecurringDepositAccountCommandHandler(
-            final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionSavingsAccountCommandHandler.java
index 084cbac..f8907c3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UNDOTRANSACTION")
+@RequiredArgsConstructor
 public class UndoTransactionSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public UndoTransactionSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateFixedDepositProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateFixedDepositProductCommandHandler.java
index b7be725..b2348f6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateFixedDepositProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateFixedDepositProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.FixedDepositProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITPRODUCT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateFixedDepositProductCommandHandler implements NewCommandSourceHandler {
 
     private final FixedDepositProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateFixedDepositProductCommandHandler(final FixedDepositProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.update(command.entityId(), command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateRecurringDepositProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateRecurringDepositProductCommandHandler.java
index 826a862..0037f0b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateRecurringDepositProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateRecurringDepositProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.RecurringDepositProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITPRODUCT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateRecurringDepositProductCommandHandler implements NewCommandSourceHandler {
 
     private final RecurringDepositProductWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateRecurringDepositProductCommandHandler(final RecurringDepositProductWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.writePlatformService.update(command.entityId(), command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsAccountChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsAccountChargeCommandHandler.java
index 5c43d70..9c18d1c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsAccountChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsAccountChargeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNTCHARGE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateSavingsAccountChargeCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateSavingsAccountChargeCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsOfficerCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsOfficerCommandHandler.java
index fe0a636..64d62b8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsOfficerCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsOfficerCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UPDATESAVINGSOFFICER")
+@RequiredArgsConstructor
 public class UpdateSavingsOfficerCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService savingsWritePlatformService;
 
-    @Autowired
-    public UpdateSavingsOfficerCommandHandler(final SavingsAccountWritePlatformService savingAccountWritePlatformService) {
-        this.savingsWritePlatformService = savingAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsProductCommandHandler.java
index a7cffd3..6497732 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateSavingsProductCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "SAVINGSPRODUCT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateSavingsProductCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsProductWritePlatformService savingProductWritePlatformService;
 
-    @Autowired
-    public UpdateSavingsProductCommandHandler(final SavingsProductWritePlatformService savingProductWritePlatformService) {
-        this.savingProductWritePlatformService = savingProductWritePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
         return this.savingProductWritePlatformService.update(command.entityId(), command);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateWithHoldTaxSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateWithHoldTaxSavingsAccountCommandHandler.java
index e8e1e6b..c8a06ec 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateWithHoldTaxSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UpdateWithHoldTaxSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "UPDATEWITHHOLDTAX")
+@RequiredArgsConstructor
 public class UpdateWithHoldTaxSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateWithHoldTaxSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WaiveSavingsAccountChargeCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WaiveSavingsAccountChargeCommandHandler.java
index e361ac7..163e089 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WaiveSavingsAccountChargeCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WaiveSavingsAccountChargeCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNTCHARGE", action = "WAIVE")
+@RequiredArgsConstructor
 public class WaiveSavingsAccountChargeCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public WaiveSavingsAccountChargeCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawSavingsAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawSavingsAccountCommandHandler.java
index cba0c1f..9819a78 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawSavingsAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawSavingsAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SAVINGSACCOUNT", action = "WITHDRAWAL")
+@RequiredArgsConstructor
 public class WithdrawSavingsAccountCommandHandler implements NewCommandSourceHandler {
 
     private final SavingsAccountWritePlatformService writePlatformService;
 
-    @Autowired
-    public WithdrawSavingsAccountCommandHandler(final SavingsAccountWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalFixedDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalFixedDepositAccountCommandHandler.java
index 1de3125..7e5b4cd 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalFixedDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalFixedDepositAccountCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FIXEDDEPOSITACCOUNT", action = "WITHDRAWAL")
+@RequiredArgsConstructor
 public class WithdrawalFixedDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public WithdrawalFixedDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalRecurringDepositAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalRecurringDepositAccountCommandHandler.java
index d904035..a43250e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalRecurringDepositAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/WithdrawalRecurringDepositAccountCommandHandler.java
@@ -18,27 +18,23 @@
  */
 package org.apache.fineract.portfolio.savings.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.savings.DepositAccountType;
 import org.apache.fineract.portfolio.savings.service.DepositAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "RECURRINGDEPOSITACCOUNT", action = "WITHDRAWAL")
+@RequiredArgsConstructor
 public class WithdrawalRecurringDepositAccountCommandHandler implements NewCommandSourceHandler {
 
     private final DepositAccountWritePlatformService depositAccountWritePlatformService;
 
-    @Autowired
-    public WithdrawalRecurringDepositAccountCommandHandler(final DepositAccountWritePlatformService depositAccountWritePlatformService) {
-        this.depositAccountWritePlatformService = depositAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
index 2b5108d..830998c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "ACTIVATE")
+@RequiredArgsConstructor
 public class ActivateShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public ActivateShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
index 5aa43fe..d2e516e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "APPLYADDITIONALSHARES")
+@RequiredArgsConstructor
 public class ApplyAddtionalSharesCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public ApplyAddtionalSharesCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
index bac0500..ab325a9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "APPROVEADDITIONALSHARES")
+@RequiredArgsConstructor
 public class ApproveAddtionalSharesCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public ApproveAddtionalSharesCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
index 658d862..ac69073 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "APPROVE")
+@RequiredArgsConstructor
 public class ApproveShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public ApproveShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
index a20689f..f6bdafc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "CLOSE")
+@RequiredArgsConstructor
 public class CloseShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public CloseShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
index 1640037..9fb0741 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public CreateShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
index 06f6f7a..b3054cf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "REDEEMSHARES")
+@RequiredArgsConstructor
 public class RedeemSharesCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public RedeemSharesCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
index 0a46bec..682bad5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "REJECTADDITIONALSHARES")
+@RequiredArgsConstructor
 public class RejectAddtionalSharesCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public RejectAddtionalSharesCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
index 4f45cdb..d3dbf51 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "REJECT")
+@RequiredArgsConstructor
 public class RejectShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public RejectShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
index 5cab49d..92833df 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "UNDOAPPROVAL")
+@RequiredArgsConstructor
 public class UndoApproveShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public UndoApproveShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
index 9a5e5b0..9d1e03c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareaccounts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREACCOUNT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateShareAccountCommandHandler implements NewCommandSourceHandler {
 
     private final ShareAccountWritePlatformService shareAccountWritePlatformService;
 
-    @Autowired
-    public UpdateShareAccountCommandHandler(final ShareAccountWritePlatformService shareAccountWritePlatformService) {
-        this.shareAccountWritePlatformService = shareAccountWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/ApproveShareProductDividendCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/ApproveShareProductDividendCommandHandler.java
index 4867670..67f24aa 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/ApproveShareProductDividendCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/ApproveShareProductDividendCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareproducts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareproducts.service.ShareProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREPRODUCT", action = "APPROVE_DIVIDEND")
+@RequiredArgsConstructor
 public class ApproveShareProductDividendCommandHandler implements NewCommandSourceHandler {
 
     private final ShareProductWritePlatformService shareProductWritePlatformService;
 
-    @Autowired
-    public ApproveShareProductDividendCommandHandler(final ShareProductWritePlatformService shareProductWritePlatformService) {
-        this.shareProductWritePlatformService = shareProductWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductCommandHandler.java
index 96c67d6..9bb2d8d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareproducts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareproducts.service.ShareProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREPRODUCT", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateShareProductCommandHandler implements NewCommandSourceHandler {
 
     private final ShareProductWritePlatformService shareProductWritePlatformService;
 
-    @Autowired
-    public CreateShareProductCommandHandler(final ShareProductWritePlatformService shareProductWritePlatformService) {
-        this.shareProductWritePlatformService = shareProductWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductDividendCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductDividendCommandHandler.java
index 7f2aa1b..4517f90 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductDividendCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/CreateShareProductDividendCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareproducts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareproducts.service.ShareProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREPRODUCT", action = "CREATE_DIVIDEND")
+@RequiredArgsConstructor
 public class CreateShareProductDividendCommandHandler implements NewCommandSourceHandler {
 
     private final ShareProductWritePlatformService shareProductWritePlatformService;
 
-    @Autowired
-    public CreateShareProductDividendCommandHandler(final ShareProductWritePlatformService shareProductWritePlatformService) {
-        this.shareProductWritePlatformService = shareProductWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/DeleteShareProductDividendCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/DeleteShareProductDividendCommandHandler.java
index e9f5b24..dba992a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/DeleteShareProductDividendCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/DeleteShareProductDividendCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareproducts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareproducts.service.ShareProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREPRODUCT", action = "DELETE_DIVIDEND")
+@RequiredArgsConstructor
 public class DeleteShareProductDividendCommandHandler implements NewCommandSourceHandler {
 
     private final ShareProductWritePlatformService shareProductWritePlatformService;
 
-    @Autowired
-    public DeleteShareProductDividendCommandHandler(final ShareProductWritePlatformService shareProductWritePlatformService) {
-        this.shareProductWritePlatformService = shareProductWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/UpdateShareProductCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/UpdateShareProductCommandHandler.java
index e336229..3b16408 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/UpdateShareProductCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/UpdateShareProductCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.shareproducts.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.shareproducts.service.ShareProductWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "SHAREPRODUCT", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateShareProductCommandHandler implements NewCommandSourceHandler {
 
     private final ShareProductWritePlatformService shareProductWritePlatformService;
 
-    @Autowired
-    public UpdateShareProductCommandHandler(final ShareProductWritePlatformService shareProductWritePlatformService) {
-        this.shareProductWritePlatformService = shareProductWritePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/AcceptClientTransferCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/AcceptClientTransferCommandHandler.java
index 4915674..6e06791 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/AcceptClientTransferCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/AcceptClientTransferCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.transfer.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.transfer.service.TransferWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "ACCEPTTRANSFER")
+@RequiredArgsConstructor
 public class AcceptClientTransferCommandHandler implements NewCommandSourceHandler {
 
     private final TransferWritePlatformService writePlatformService;
 
-    @Autowired
-    public AcceptClientTransferCommandHandler(final TransferWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeAndAcceptClientTransferCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeAndAcceptClientTransferCommandHandler.java
index cb02979..d0e3ffe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeAndAcceptClientTransferCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeAndAcceptClientTransferCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.transfer.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.transfer.service.TransferWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "PROPOSEANDACCEPTTRANSFER")
+@RequiredArgsConstructor
 public class ProposeAndAcceptClientTransferCommandHandler implements NewCommandSourceHandler {
 
     private final TransferWritePlatformService writePlatformService;
 
-    @Autowired
-    public ProposeAndAcceptClientTransferCommandHandler(final TransferWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeClientTransferCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeClientTransferCommandHandler.java
index f4e41f7..27aaf51 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeClientTransferCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeClientTransferCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.transfer.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.transfer.service.TransferWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "PROPOSETRANSFER")
+@RequiredArgsConstructor
 public class ProposeClientTransferCommandHandler implements NewCommandSourceHandler {
 
     private final TransferWritePlatformService writePlatformService;
 
-    @Autowired
-    public ProposeClientTransferCommandHandler(final TransferWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/RejectClientTransferCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/RejectClientTransferCommandHandler.java
index 495431a..84dd0ab 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/RejectClientTransferCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/RejectClientTransferCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.transfer.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.transfer.service.TransferWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "REJECTTRANSFER")
+@RequiredArgsConstructor
 public class RejectClientTransferCommandHandler implements NewCommandSourceHandler {
 
     private final TransferWritePlatformService writePlatformService;
 
-    @Autowired
-    public RejectClientTransferCommandHandler(final TransferWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/TransferClientsBetweenGroupsCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/TransferClientsBetweenGroupsCommandHandler.java
index 32de926..8dc63ca 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/TransferClientsBetweenGroupsCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/TransferClientsBetweenGroupsCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.transfer.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.transfer.service.TransferWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "GROUP", action = "TRANSFERCLIENTS")
+@RequiredArgsConstructor
 public class TransferClientsBetweenGroupsCommandHandler implements NewCommandSourceHandler {
 
     private final TransferWritePlatformService writePlatformService;
 
-    @Autowired
-    public TransferClientsBetweenGroupsCommandHandler(final TransferWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/WithdrawClientTransferCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/WithdrawClientTransferCommandHandler.java
index 87cf792..20ecc2e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/WithdrawClientTransferCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/WithdrawClientTransferCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.transfer.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.transfer.service.TransferWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "CLIENT", action = "WITHDRAWTRANSFER")
+@RequiredArgsConstructor
 public class WithdrawClientTransferCommandHandler implements NewCommandSourceHandler {
 
     private final TransferWritePlatformService writePlatformService;
 
-    @Autowired
-    public WithdrawClientTransferCommandHandler(final TransferWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/ChangeUserPasswordCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/ChangeUserPasswordCommandHandler.java
index ee4c8b1..09e9901 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/ChangeUserPasswordCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/ChangeUserPasswordCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.AppUserWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "USER", action = "CHANGEPWD")
+@RequiredArgsConstructor
 public class ChangeUserPasswordCommandHandler implements NewCommandSourceHandler {
 
     private final AppUserWritePlatformService writePlatformService;
 
-    @Autowired
-    public ChangeUserPasswordCommandHandler(final AppUserWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateRoleCommandHandler.java
index e8b8471..45ec9b1 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.RoleWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ROLE", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateRoleCommandHandler implements NewCommandSourceHandler {
 
     private final RoleWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateRoleCommandHandler(final RoleWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateUserCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateUserCommandHandler.java
index 80e515e..6317775 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateUserCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/CreateUserCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.AppUserWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "USER", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateUserCommandHandler implements NewCommandSourceHandler {
 
     private final AppUserWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateUserCommandHandler(final AppUserWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteRoleCommandHandler.java
index 9d90358..4e4822e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.RoleWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ROLE", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteRoleCommandHandler implements NewCommandSourceHandler {
 
     private final RoleWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteRoleCommandHandler(final RoleWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     @Transactional
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteUserCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteUserCommandHandler.java
index f2b825a..b7cf1fe 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteUserCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DeleteUserCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.AppUserWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "USER", action = "DELETE")
+@RequiredArgsConstructor
 public class DeleteUserCommandHandler implements NewCommandSourceHandler {
 
     private final AppUserWritePlatformService writePlatformService;
 
-    @Autowired
-    public DeleteUserCommandHandler(final AppUserWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DisableRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DisableRoleCommandHandler.java
index 3b72713..6442289 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DisableRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/DisableRoleCommandHandler.java
@@ -18,25 +18,21 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.RoleWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
 @CommandType(entity = "ROLE", action = "DISABLE")
+@RequiredArgsConstructor
 public class DisableRoleCommandHandler implements NewCommandSourceHandler {
 
     private final RoleWritePlatformService writePlatformService;
 
-    @Autowired
-    public DisableRoleCommandHandler(final RoleWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
         return this.writePlatformService.disableRole(command.entityId());
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/EnableRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/EnableRoleCommandHandler.java
index 25d2d22..538e009 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/EnableRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/EnableRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.RoleWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ROLE", action = "ENABLE")
+@RequiredArgsConstructor
 public class EnableRoleCommandHandler implements NewCommandSourceHandler {
 
     private final RoleWritePlatformService writePlatformService;
 
-    @Autowired
-    public EnableRoleCommandHandler(final RoleWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateMakerCheckerPermissionsCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateMakerCheckerPermissionsCommandHandler.java
index b13ba67..3c7d198 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateMakerCheckerPermissionsCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateMakerCheckerPermissionsCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.PermissionWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PERMISSION", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateMakerCheckerPermissionsCommandHandler implements NewCommandSourceHandler {
 
     private final PermissionWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateMakerCheckerPermissionsCommandHandler(final PermissionWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdatePasswordPreferencesCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdatePasswordPreferencesCommandHandler.java
index 9fb0c9b..807c83b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdatePasswordPreferencesCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdatePasswordPreferencesCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.PasswordPreferencesWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "PASSWORD_PREFERENCES", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdatePasswordPreferencesCommandHandler implements NewCommandSourceHandler {
 
     private final PasswordPreferencesWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdatePasswordPreferencesCommandHandler(final PasswordPreferencesWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRoleCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRoleCommandHandler.java
index 90dc046..5107e42 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRoleCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRoleCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.RoleWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ROLE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateRoleCommandHandler implements NewCommandSourceHandler {
 
     private final RoleWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateRoleCommandHandler(final RoleWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRolePermissionsCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRolePermissionsCommandHandler.java
index 85e05b9..db790cc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRolePermissionsCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateRolePermissionsCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.RoleWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "ROLE", action = "PERMISSIONS")
+@RequiredArgsConstructor
 public class UpdateRolePermissionsCommandHandler implements NewCommandSourceHandler {
 
     private final RoleWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateRolePermissionsCommandHandler(final RoleWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateUserCommandHandler.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateUserCommandHandler.java
index 75dc1c5..e70d0ca 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateUserCommandHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/handler/UpdateUserCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.useradministration.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.useradministration.service.AppUserWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "USER", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateUserCommandHandler implements NewCommandSourceHandler {
 
     private final AppUserWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateUserCommandHandler(final AppUserWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-provider/src/main/resources/jpa/static-weaving/module/fineract-provider/persistence.xml b/fineract-provider/src/main/resources/jpa/static-weaving/module/fineract-provider/persistence.xml
deleted file mode 100644
index b12436a..0000000
--- a/fineract-provider/src/main/resources/jpa/static-weaving/module/fineract-provider/persistence.xml
+++ /dev/null
@@ -1,340 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-branch module: -->
-        <class>org.apache.fineract.organisation.teller.domain.Cashier</class>
-        <class>org.apache.fineract.organisation.teller.domain.CashierTransaction</class>
-        <class>org.apache.fineract.organisation.teller.domain.Teller</class>
-        <class>org.apache.fineract.organisation.teller.domain.TellerTransaction</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-investor module: -->
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwner</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerJournalEntryMapping</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerLoanProductAttributes</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransfer</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransferDetails</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransferJournalEntryMapping</class>
-        <class>org.apache.fineract.investor.domain.ExternalAssetOwnerTransferLoanMapping</class>
-        <class>org.apache.fineract.investor.domain.ExternalIdConverter</class>
-
-        <!--  fineract-loan module: -->
-        <class>org.apache.fineract.portfolio.collateral.domain.LoanCollateral</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.AccountingRuleTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.Loan</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanAmortizationAllocationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanApprovedAmountHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargeTaxDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanSubStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelationTypeEnumConverter</class>
-        <class>org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks</class>
-
-        <!--  fineract-loan-origination module: -->
-        <class>org.apache.fineract.portfolio.loanorigination.domain.LoanOriginator</class>
-        <class>org.apache.fineract.portfolio.loanorigination.domain.LoanOriginatorMapping</class>
-
-        <!--  fineract-progressive-loan module: -->
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanBuyDownFeeBalance</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeBalance</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.ProgressiveLoanModel</class>
-
-        <!--  fineract-provider module: -->
-        <class>org.apache.fineract.accounting.provisioning.domain.LoanProductProvisioningEntry</class>
-        <class>org.apache.fineract.accounting.provisioning.domain.ProvisioningEntry</class>
-        <class>org.apache.fineract.adhocquery.domain.AdHoc</class>
-        <class>org.apache.fineract.cob.domain.LoanAccountLock</class>
-        <class>org.apache.fineract.infrastructure.bulkimport.domain.ImportDocument</class>
-        <class>org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaign</class>
-        <class>org.apache.fineract.infrastructure.campaigns.email.domain.EmailConfiguration</class>
-        <class>org.apache.fineract.infrastructure.campaigns.email.domain.EmailMessage</class>
-        <class>org.apache.fineract.infrastructure.campaigns.sms.domain.SmsCampaign</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.ExternalService</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.ExternalServicesProperties</class>
-        <class>org.apache.fineract.infrastructure.core.domain.ExternalIdConverter</class>
-        <class>org.apache.fineract.infrastructure.creditbureau.domain.CreditBureau</class>
-        <class>org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauConfiguration</class>
-        <class>org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauLoanProductMapping</class>
-        <class>org.apache.fineract.infrastructure.creditbureau.domain.CreditBureauToken</class>
-        <class>org.apache.fineract.infrastructure.creditbureau.domain.CreditReport</class>
-        <class>org.apache.fineract.infrastructure.creditbureau.domain.OrganisationCreditBureau</class>
-        <class>org.apache.fineract.infrastructure.dataqueries.domain.EntityDatatableChecks</class>
-        <class>org.apache.fineract.infrastructure.dataqueries.domain.RegisteredDatatable</class>
-        <class>org.apache.fineract.infrastructure.dataqueries.domain.Report</class>
-        <class>org.apache.fineract.infrastructure.dataqueries.domain.ReportParameter</class>
-        <class>org.apache.fineract.infrastructure.dataqueries.domain.ReportParameterUsage</class>
-        <class>org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccess</class>
-        <class>org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityRelation</class>
-        <class>org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityToEntityMapping</class>
-        <class>org.apache.fineract.infrastructure.hooks.domain.Hook</class>
-        <class>org.apache.fineract.infrastructure.hooks.domain.HookConfiguration</class>
-        <class>org.apache.fineract.infrastructure.hooks.domain.HookResource</class>
-        <class>org.apache.fineract.infrastructure.hooks.domain.HookTemplate</class>
-        <class>org.apache.fineract.infrastructure.hooks.domain.HookSchema</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.JobParameter</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.ScheduledJobDetail</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.ScheduledJobRunHistory</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.SchedulerDetail</class>
-        <class>org.apache.fineract.infrastructure.jobs.service.aggregationjob.domain.JournalEntryAggregationTracking
-        </class>
-        <class>org.apache.fineract.infrastructure.jobs.service.aggregationjob.domain.JournalEntrySummary</class>
-        <class>org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJob</class>
-        <class>org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobConfiguration</class>
-        <class>org.apache.fineract.infrastructure.reportmailingjob.domain.ReportMailingJobRunHistory</class>
-        <class>org.apache.fineract.infrastructure.sms.domain.SmsMessage</class>
-        <class>org.apache.fineract.infrastructure.survey.domain.Likelihood</class>
-        <class>org.apache.fineract.notification.domain.Notification</class>
-        <class>org.apache.fineract.notification.domain.NotificationMapper</class>
-        <class>org.apache.fineract.organisation.office.domain.OfficeTransaction</class>
-        <class>org.apache.fineract.organisation.provisioning.domain.LoanProductProvisionCriteria</class>
-        <class>org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory</class>
-        <class>org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteria</class>
-        <class>org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteriaDefinition</class>
-        <class>org.apache.fineract.portfolio.account.domain.AccountAssociations</class>
-        <class>org.apache.fineract.portfolio.account.domain.AccountTransferDetails</class>
-        <class>org.apache.fineract.portfolio.account.domain.AccountTransferStandingInstruction</class>
-        <class>org.apache.fineract.portfolio.account.domain.AccountTransferTransaction</class>
-        <class>org.apache.fineract.portfolio.address.domain.Address</class>
-        <class>org.apache.fineract.portfolio.address.domain.FieldConfiguration</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientAddress</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientCharge</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientFamilyMembers</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientNonPerson</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientTransaction</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientTransferDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.guarantor.domain.Guarantor</class>
-        <class>org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingTransaction</class>
-        <class>org.apache.fineract.portfolio.loanproduct.productmix.domain.ProductMix</class>
-        <class>org.apache.fineract.portfolio.meeting.domain.MeetingAttendance</class>
-        <class>org.apache.fineract.portfolio.meeting.domain.Meeting</class>
-        <class>org.apache.fineract.portfolio.note.domain.Note</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountRecurringDetail</class>
-        <class>org.apache.fineract.portfolio.savings.domain.FixedDepositAccount</class>
-        <class>org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount</class>
-        <class>org.apache.fineract.portfolio.savings.domain.RecurringDepositScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount</class>
-        <class>org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountCharge</class>
-        <class>org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendDetails</class>
-        <class>org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountTransaction</class>
-        <class>org.apache.fineract.portfolio.shareproducts.domain.ShareProduct</class>
-        <class>org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividendPayOutDetails</class>
-        <class>org.apache.fineract.portfolio.shareproducts.domain.ShareProductMarketPrice</class>
-        <class>org.apache.fineract.spm.domain.Component</class>
-        <class>org.apache.fineract.spm.domain.LookupTable</class>
-        <class>org.apache.fineract.spm.domain.Question</class>
-        <class>org.apache.fineract.spm.domain.Response</class>
-        <class>org.apache.fineract.spm.domain.Scorecard</class>
-        <class>org.apache.fineract.spm.domain.Survey</class>
-        <class>org.apache.fineract.template.domain.Template</class>
-        <class>org.apache.fineract.template.domain.TemplateMapper</class>
-        <class>org.apache.fineract.useradministration.domain.AppUserPreviousPassword</class>
-        <class>org.apache.fineract.useradministration.domain.PasswordValidationPolicy</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-savings module: -->
-        <class>org.apache.fineract.cob.savings.SavingsAccountLock</class>
-        <class>org.apache.fineract.interoperation.domain.InteropIdentifier</class>
-        <class>org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives</class>
-        <class>org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart</class>
-        <class>org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentive</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentives</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChart</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChartSlabs</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountTermAndPreClosure</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositProductRecurringDetail</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositProductTermAndPreClosure</class>
-        <class>org.apache.fineract.portfolio.savings.domain.FixedDepositProduct</class>
-        <class>org.apache.fineract.portfolio.savings.domain.GroupSavingsIndividualMonitoring</class>
-        <class>org.apache.fineract.portfolio.savings.domain.RecurringDepositProduct</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccount</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsProduct</class>
-
-        <!--  fineract-security module: -->
-        <class>org.apache.fineract.infrastructure.security.domain.TFAccessToken</class>
-        <class>org.apache.fineract.infrastructure.security.domain.TwoFactorConfiguration</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <!--  fineract-working-capital-loan module: -->
-        <class>org.apache.fineract.cob.domain.WorkingCapitalLoanAccountLock</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanBreachSchedule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDelinquencyRangeSchedule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDelinquencyRangeScheduleTagHistory</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanBalance</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanNote</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanbreach.domain.WorkingCapitalBreach</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.ProjectedAmortizationLoanModel</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransaction</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransactionAllocation</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanCharge</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloannearbreach.domain.WorkingCapitalNearBreach</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanPeriodPaymentRateChange</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProduct</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalPaymentAllocationTypeListConverter</class>
-
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-provider/src/test/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImplTest.java
new file mode 100644
index 0000000..254e925
--- /dev/null
+++ b/fineract-provider/src/test/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImplTest.java
@@ -0,0 +1,107 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.organisation.provisioning.service;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import java.util.Optional;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory;
+import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategoryRepository;
+import org.apache.fineract.organisation.provisioning.exception.ProvisioningCategoryCannotBeDeletedException;
+import org.apache.fineract.organisation.provisioning.exception.ProvisioningCategoryNotFoundException;
+import org.apache.fineract.organisation.provisioning.serialization.ProvisioningCategoryDefinitionJsonDeserializer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+@ExtendWith(MockitoExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
+public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImplTest {
+
+    @InjectMocks
+    private ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl underTest;
+
+    @Mock
+    private ProvisioningCategoryRepository provisioningCategoryRepository;
+
+    @Mock
+    private ProvisioningCategoryDefinitionJsonDeserializer fromApiJsonDeserializer;
+
+    @Mock
+    private JdbcTemplate jdbcTemplate;
+
+    @Mock
+    private JsonCommand command;
+
+    private static final Long CATEGORY_ID = 7L;
+
+    @Test
+    public void shouldDeleteCategoryWhenItIsNotUsedByAnyLoanProduct() {
+        final ProvisioningCategory category = Mockito.mock(ProvisioningCategory.class);
+        given(command.entityId()).willReturn(CATEGORY_ID);
+        given(provisioningCategoryRepository.findById(CATEGORY_ID)).willReturn(Optional.of(category));
+        // in-use check resolves to "false" -> not associated with any loan product
+        given(jdbcTemplate.queryForObject(anyString(), eq(Boolean.class), any(Object[].class))).willReturn(false);
+
+        final CommandProcessingResult result = underTest.deleteProvisioningCateogry(command);
+
+        assertEquals(CATEGORY_ID, result.getResourceId());
+        verify(provisioningCategoryRepository).delete(category);
+        // a DELETE has no body, so create-validation must never run on this path
+        verify(fromApiJsonDeserializer, never()).validateForCreate(anyString());
+    }
+
+    @Test
+    public void shouldThrowNotFoundWhenCategoryDoesNotExist() {
+        given(command.entityId()).willReturn(CATEGORY_ID);
+        given(provisioningCategoryRepository.findById(CATEGORY_ID)).willReturn(Optional.empty());
+
+        assertThrows(ProvisioningCategoryNotFoundException.class, () -> underTest.deleteProvisioningCateogry(command));
+
+        verify(provisioningCategoryRepository, never()).delete(any(ProvisioningCategory.class));
+    }
+
+    @Test
+    public void shouldThrowCannotBeDeletedWhenCategoryIsUsedByLoanProduct() {
+        final ProvisioningCategory category = Mockito.mock(ProvisioningCategory.class);
+        given(command.entityId()).willReturn(CATEGORY_ID);
+        given(provisioningCategoryRepository.findById(CATEGORY_ID)).willReturn(Optional.of(category));
+        // in-use check resolves to "true" -> still referenced by a loan product
+        given(jdbcTemplate.queryForObject(anyString(), eq(Boolean.class), any(Object[].class))).willReturn(true);
+
+        assertThrows(ProvisioningCategoryCannotBeDeletedException.class, () -> underTest.deleteProvisioningCateogry(command));
+
+        verify(provisioningCategoryRepository, never()).delete(any(ProvisioningCategory.class));
+    }
+}
diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImplTest.java
index 4866c2c..b0ec348 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImplTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImplTest.java
@@ -72,6 +72,7 @@
 import org.apache.fineract.portfolio.loanaccount.serialization.LoanTransactionValidator;
 import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail;
+import org.apache.fineract.portfolio.loanproduct.exception.LinkedAccountRequiredException;
 import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService;
 import org.apache.fineract.useradministration.domain.AppUser;
 import org.junit.jupiter.api.BeforeEach;
@@ -398,6 +399,89 @@
 
     @Test
     @MockitoSettings(strictness = Strictness.LENIENT)
+    public void disburseLoan_withAccountTransferDisbursementChargeButNoLinkedAccount_shouldThrowLinkedAccountRequired() {
+        setupMoneyHelper();
+
+        final LocalDate disbursementDate = DateUtils.parseLocalDate("2025-05-20");
+        final MonetaryCurrency currency = new MonetaryCurrency("KES", 2, null);
+
+        // Setup loan product
+        LoanProductRelatedDetail loanProductDetail = mock(LoanProductRelatedDetail.class);
+        LoanProduct loanProduct = mock(LoanProduct.class);
+        when(loanProduct.getLoanProductRelatedDetail()).thenReturn(loanProductDetail);
+        when(loanProduct.isMultiDisburseLoan()).thenReturn(false);
+        when(loanProduct.isDisallowExpectedDisbursements()).thenReturn(false);
+        when(loanProduct.getId()).thenReturn(1L);
+        when(loanProduct.isIncludeInBorrowerCycle()).thenReturn(false);
+
+        // A disbursement charge payable by ACCOUNT_TRANSFER — requires a linked savings account.
+        LoanCharge disbursementCharge = mock(LoanCharge.class);
+        when(disbursementCharge.isDueAtDisbursement()).thenReturn(true);
+        when(disbursementCharge.getChargePaymentMode()).thenReturn(ChargePaymentMode.ACCOUNT_TRANSFER);
+        when(disbursementCharge.isChargePending()).thenReturn(true);
+        when(disbursementCharge.amountOutstanding()).thenReturn(BigDecimal.valueOf(500));
+        when(disbursementCharge.getId()).thenReturn(100L);
+        when(disbursementCharge.isActive()).thenReturn(true);
+
+        // Setup repayment schedule installment
+        LoanRepaymentScheduleInstallment installment = mock(LoanRepaymentScheduleInstallment.class);
+        when(installment.getDueDate()).thenReturn(disbursementDate.plusMonths(1));
+
+        // Setup summary
+        LoanSummary summary = mock(LoanSummary.class);
+        when(summary.getTotalInterestCharged()).thenReturn(BigDecimal.ZERO);
+
+        // Setup loan as mock for full control over method return values
+        loan = mock(Loan.class);
+        when(loan.getId()).thenReturn(LOAN_ID);
+        when(loan.loanProduct()).thenReturn(loanProduct);
+        when(loan.getLoanProduct()).thenReturn(loanProduct);
+        when(loan.getLoanProductRelatedDetail()).thenReturn(loanProductDetail);
+        when(loan.getLoanRepaymentScheduleDetail()).thenReturn(loanProductDetail);
+        when(loan.getActiveCharges()).thenReturn(Set.of(disbursementCharge));
+        when(loan.getRepaymentScheduleInstallments()).thenReturn(List.of(installment));
+        when(loan.fetchRepaymentScheduleInstallment(1)).thenReturn(installment);
+        when(loan.isGroupLoan()).thenReturn(false);
+        when(loan.getClientId()).thenReturn(1L);
+        when(loan.getStatus()).thenReturn(LoanStatus.APPROVED);
+        when(loan.getLoanStatus()).thenReturn(LoanStatus.ACTIVE);
+        when(loan.isMultiDisburmentLoan()).thenReturn(false);
+        when(loan.isTopup()).thenReturn(false);
+        when(loan.getPrincipal()).thenReturn(Money.of(currency, BigDecimal.valueOf(20000)));
+        when(loan.getCurrency()).thenReturn(currency);
+        when(loan.getSummary()).thenReturn(summary);
+        when(loan.getNextPossibleRepaymentDateForRescheduling()).thenReturn(disbursementDate.plusMonths(1));
+        when(loan.deriveSumTotalOfChargesDueAtDisbursement()).thenReturn(BigDecimal.valueOf(500));
+        when(loan.shouldCreateStandingInstructionAtDisbursement()).thenReturn(false);
+        when(loan.getIsFloatingInterestRate()).thenReturn(false);
+        when(loan.getExternalId()).thenReturn(ExternalId.empty());
+
+        // Setup command
+        command = mock(JsonCommand.class);
+        when(command.localDateValueOfParameterNamed("actualDisbursementDate")).thenReturn(disbursementDate);
+        when(command.extractLocale()).thenReturn(Locale.ENGLISH);
+        when(command.dateFormat()).thenReturn("dd MMMM yyyy");
+
+        // Setup service mocks
+        when(loanAssembler.assembleFrom(LOAN_ID)).thenReturn(loan);
+        when(loanLifecycleStateMachine.dryTransition(any(), any())).thenReturn(LoanStatus.ACTIVE);
+        when(loanDisbursementService.adjustDisburseAmount(any(), any(), any())).thenReturn(Money.of(currency, BigDecimal.valueOf(20000)));
+        when(externalIdFactory.createFromCommand(any(), any())).thenReturn(ExternalId.empty());
+
+        // The loan has NO linked savings account — this is the bug scenario that used to NPE.
+        when(accountAssociationsReadPlatformService.retriveLoanLinkedAssociation(LOAN_ID)).thenReturn(null);
+        when(loanRepositoryWrapper.getClientOrJLGLoansDisbursedAfter(any(), anyLong())).thenReturn(List.of());
+        when(loanRepositoryWrapper.saveAndFlush(any(Loan.class))).thenReturn(loan);
+
+        // ACT + ASSERT: a clean domain-rule exception instead of a NullPointerException.
+        assertThrows(LinkedAccountRequiredException.class, () -> loanWritePlatformService.disburseLoan(LOAN_ID, command, true, false));
+
+        // No funds transfer is attempted when the linked account is missing.
+        verify(accountTransfersWritePlatformService, times(0)).transferFunds(any());
+    }
+
+    @Test
+    @MockitoSettings(strictness = Strictness.LENIENT)
     public void disburseLoan_withoutAccountTransferDisbursementCharge_shouldNotRefreshLoanSummaryExtraTime() {
         setupMoneyHelper();
 
diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java
index 92881ce..f4d664d 100644
--- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java
+++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/CreateFloatingRateCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.floatingrates.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.floatingrates.service.FloatingRateWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FLOATINGRATE", action = "CREATE")
+@RequiredArgsConstructor
 public class CreateFloatingRateCommandHandler implements NewCommandSourceHandler {
 
     private final FloatingRateWritePlatformService writePlatformService;
 
-    @Autowired
-    public CreateFloatingRateCommandHandler(final FloatingRateWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java
index c584613..ce4adfa 100644
--- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java
+++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java
@@ -18,26 +18,22 @@
  */
 package org.apache.fineract.portfolio.floatingrates.handler;
 
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
 import org.apache.fineract.portfolio.floatingrates.service.FloatingRateWritePlatformService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
 @CommandType(entity = "FLOATINGRATE", action = "UPDATE")
+@RequiredArgsConstructor
 public class UpdateFloatingRateCommandHandler implements NewCommandSourceHandler {
 
     private final FloatingRateWritePlatformService writePlatformService;
 
-    @Autowired
-    public UpdateFloatingRateCommandHandler(final FloatingRateWritePlatformService writePlatformService) {
-        this.writePlatformService = writePlatformService;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-rates/src/main/resources/jpa/static-weaving/module/fineract-rates/persistence.xml b/fineract-rates/src/main/resources/jpa/static-weaving/module/fineract-rates/persistence.xml
deleted file mode 100644
index 9c7259e..0000000
--- a/fineract-rates/src/main/resources/jpa/static-weaving/module/fineract-rates/persistence.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static" />
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-report/src/main/resources/jpa/static-weaving/module/fineract-report/persistence.xml b/fineract-report/src/main/resources/jpa/static-weaving/module/fineract-report/persistence.xml
deleted file mode 100644
index 36c4542..0000000
--- a/fineract-report/src/main/resources/jpa/static-weaving/module/fineract-report/persistence.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static" />
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-savings/src/main/resources/jpa/static-weaving/module/fineract-savings/persistence.xml b/fineract-savings/src/main/resources/jpa/static-weaving/module/fineract-savings/persistence.xml
deleted file mode 100644
index a85b20e..0000000
--- a/fineract-savings/src/main/resources/jpa/static-weaving/module/fineract-savings/persistence.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-savings module: -->
-        <class>org.apache.fineract.cob.savings.SavingsAccountLock</class>
-        <class>org.apache.fineract.interoperation.domain.InteropIdentifier</class>
-        <class>org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives</class>
-        <class>org.apache.fineract.portfolio.interestratechart.domain.InterestRateChart</class>
-        <class>org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartSlab</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentive</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestIncentives</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChart</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountInterestRateChartSlabs</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransaction</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositAccountTermAndPreClosure</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositProductRecurringDetail</class>
-        <class>org.apache.fineract.portfolio.savings.domain.DepositProductTermAndPreClosure</class>
-        <class>org.apache.fineract.portfolio.savings.domain.FixedDepositProduct</class>
-        <class>org.apache.fineract.portfolio.savings.domain.GroupSavingsIndividualMonitoring</class>
-        <class>org.apache.fineract.portfolio.savings.domain.RecurringDepositProduct</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccount</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsAccountTransactionTaxDetails</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.savings.domain.SavingsProduct</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/InvalidateTFAccessTokenCommandHandler.java b/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/InvalidateTFAccessTokenCommandHandler.java
index 7b365c5..6381fcd 100644
--- a/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/InvalidateTFAccessTokenCommandHandler.java
+++ b/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/InvalidateTFAccessTokenCommandHandler.java
@@ -26,6 +26,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
@@ -42,7 +43,6 @@
 import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.infrastructure.security.service.TwoFactorService;
 import org.apache.fineract.useradministration.domain.AppUser;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -50,20 +50,13 @@
 @Service
 @CommandType(entity = "TWOFACTOR_ACCESSTOKEN", action = "INVALIDATE")
 @ConditionalOnProperty("fineract.security.2fa.enabled")
+@RequiredArgsConstructor
 public class InvalidateTFAccessTokenCommandHandler implements NewCommandSourceHandler {
 
     private final TwoFactorService twoFactorService;
     private final PlatformSecurityContext securityContext;
     private final FromJsonHelper fromJsonHelper;
 
-    @Autowired
-    public InvalidateTFAccessTokenCommandHandler(TwoFactorService twoFactorService, PlatformSecurityContext securityContext,
-            FromJsonHelper fromJsonHelper) {
-        this.twoFactorService = twoFactorService;
-        this.securityContext = securityContext;
-        this.fromJsonHelper = fromJsonHelper;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(JsonCommand command) {
diff --git a/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/UpdateTwoFactorConfigCommandHandler.java b/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/UpdateTwoFactorConfigCommandHandler.java
index b9a4a32..b8a6491 100644
--- a/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/UpdateTwoFactorConfigCommandHandler.java
+++ b/fineract-security/src/main/java/org/apache/fineract/infrastructure/security/command/UpdateTwoFactorConfigCommandHandler.java
@@ -19,6 +19,7 @@
 package org.apache.fineract.infrastructure.security.command;
 
 import java.util.Map;
+import lombok.RequiredArgsConstructor;
 import org.apache.fineract.commands.annotation.CommandType;
 import org.apache.fineract.commands.handler.NewCommandSourceHandler;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
@@ -26,7 +27,6 @@
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
 import org.apache.fineract.infrastructure.security.data.TwoFactorConfigurationValidator;
 import org.apache.fineract.infrastructure.security.service.TwoFactorConfigurationService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,18 +34,12 @@
 @Service
 @CommandType(entity = "TWOFACTOR_CONFIGURATION", action = "UPDATE")
 @ConditionalOnProperty("fineract.security.2fa.enabled")
+@RequiredArgsConstructor
 public class UpdateTwoFactorConfigCommandHandler implements NewCommandSourceHandler {
 
     private final TwoFactorConfigurationService configurationService;
     private final TwoFactorConfigurationValidator dataValidator;
 
-    @Autowired
-    public UpdateTwoFactorConfigCommandHandler(TwoFactorConfigurationService configurationService,
-            TwoFactorConfigurationValidator dataValidator) {
-        this.configurationService = configurationService;
-        this.dataValidator = dataValidator;
-    }
-
     @Transactional
     @Override
     public CommandProcessingResult processCommand(final JsonCommand command) {
diff --git a/fineract-tax/src/main/resources/jpa/static-weaving/module/fineract-tax/persistence.xml b/fineract-tax/src/main/resources/jpa/static-weaving/module/fineract-tax/persistence.xml
deleted file mode 100644
index 5036432..0000000
--- a/fineract-tax/src/main/resources/jpa/static-weaving/module/fineract-tax/persistence.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResource.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResource.java
index 3fbc49d..f6738b4 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResource.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResource.java
@@ -66,7 +66,7 @@
     @Path("{loanId}/breach-actions")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
-    @Operation(summary = "Create Breach Action", description = "Creates a breach reschedule action for a Working Capital loan.")
+    @Operation(summary = "Create Breach Action", description = "Creates a breach action (pause, reschedule or resume) for a Working Capital loan. A resume shortens the currently active pause to the current business date.")
     @RequestBody(required = true, content = @Content(schema = @Schema(implementation = WorkingCapitalLoanBreachActionApiResourceSwagger.PostWorkingCapitalLoansBreachActionRequest.class)))
     @ApiResponses({
             @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = WorkingCapitalLoanBreachActionApiResourceSwagger.PostWorkingCapitalLoansBreachActionResponse.class))),
@@ -86,7 +86,7 @@
     @Path("external-id/{loanExternalId}/breach-actions")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
-    @Operation(operationId = "createBreachActionByExternalId", summary = "Create Breach Action by external id", description = "Creates a breach reschedule action for a Working Capital loan identified by external id.")
+    @Operation(operationId = "createBreachActionByExternalId", summary = "Create Breach Action by external id", description = "Creates a breach action (pause, reschedule or resume) for a Working Capital loan identified by external id.")
     @RequestBody(required = true, content = @Content(schema = @Schema(implementation = WorkingCapitalLoanBreachActionApiResourceSwagger.PostWorkingCapitalLoansBreachActionRequest.class)))
     @ApiResponses({
             @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = WorkingCapitalLoanBreachActionApiResourceSwagger.PostWorkingCapitalLoansBreachActionResponse.class))),
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResourceSwagger.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResourceSwagger.java
index 117ba5b..73b0aa3 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResourceSwagger.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanBreachActionApiResourceSwagger.java
@@ -30,8 +30,12 @@
 
         private PostWorkingCapitalLoansBreachActionRequest() {}
 
-        @Schema(example = "reschedule", description = "Breach action type: reschedule")
+        @Schema(example = "pause", description = "Breach action type: pause, reschedule or resume")
         public String action;
+        @Schema(example = "2026-03-05", description = "For pause: start date of the pause period. For resume: the resume date, which must be the current business date")
+        public String startDate;
+        @Schema(example = "2026-03-12", description = "End date of the pause period. Must be omitted for resume and reschedule actions")
+        public String endDate;
         @Schema(example = "33.33", description = "Minimum payment value (required together with minimumPaymentType)")
         public BigDecimal minimumPayment;
         @Schema(example = "PERCENTAGE", description = "Minimum payment type: PERCENTAGE, FLAT (required together with minimumPayment)")
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanTransactionsApiResourceSwagger.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanTransactionsApiResourceSwagger.java
index 8dff5a8..6132493 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanTransactionsApiResourceSwagger.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/api/WorkingCapitalLoanTransactionsApiResourceSwagger.java
@@ -103,6 +103,8 @@
 
         @Schema(example = "62")
         public Long id;
+        @Schema(description = "Payment type")
+        public PaymentTypeData paymentType;
         @Schema(example = "acc123")
         public String accountNumber;
         @Schema(example = "che123")
@@ -115,6 +117,27 @@
         public String bankNumber;
     }
 
+    @Schema(description = "Payment type data")
+    public static final class PaymentTypeData {
+
+        private PaymentTypeData() {}
+
+        @Schema(example = "1")
+        public Long id;
+        @Schema(example = "Money Transfer")
+        public String name;
+        @Schema(example = "Transfer via banking network")
+        public String description;
+        @Schema(example = "false")
+        public Boolean isCashPayment;
+        @Schema(example = "1")
+        public Long position;
+        @Schema(example = "PAYMENT_TYPE_CODE")
+        public String codeName;
+        @Schema(example = "false")
+        public Boolean isSystemDefined;
+    }
+
     @Schema(description = "Payment details for transaction request payload")
     public static final class PostWorkingCapitalLoanTransactionsPaymentDetailRequest {
 
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java
index b687867..25e61e2 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java
@@ -174,6 +174,27 @@
                 .map(p -> p.actualAmortizationAmount().getAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
     }
 
+    public BigDecimal totalActualAmortizationWithDiscount(final BigDecimal asOfDiscount) {
+        if (asOfDiscount == null || discountFeeAmount == null || asOfDiscount.compareTo(discountFeeAmount.getAmount()) == 0) {
+            return totalActualAmortization();
+        }
+        return withDiscount(asOfDiscount).totalActualAmortization();
+    }
+
+    private ProjectedAmortizationScheduleModel withDiscount(final BigDecimal asOfDiscount) {
+        final ProjectedAmortizationScheduleModel asOfModel = generate(asOfDiscount, netDisbursementAmount.getAmount(),
+                totalPaymentVolume.getAmount(), periodPaymentRate, npvDayCount, expectedDisbursementDate, mc, currency,
+                calculatedTillDate != null ? calculatedTillDate : expectedDisbursementDate);
+        for (final ActualPayment payment : actualPayments) {
+            asOfModel.applyPayment(payment.date(), payment.amount().getAmount());
+        }
+        if (calculatedTillDate != null) {
+            asOfModel.updateCalculatedTillDate(calculatedTillDate);
+            asOfModel.rebuildPayments();
+        }
+        return asOfModel;
+    }
+
     public int effectiveTotalTerm() {
         if (rateSegments == null || rateSegments.isEmpty()) {
             return originalPaymentNumber;
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/mapper/WorkingCapitalLoanTransactionMapper.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/mapper/WorkingCapitalLoanTransactionMapper.java
index 78f3bc2..2b67e03 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/mapper/WorkingCapitalLoanTransactionMapper.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/mapper/WorkingCapitalLoanTransactionMapper.java
@@ -27,6 +27,8 @@
 import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations;
 import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData;
 import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
+import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData;
+import org.apache.fineract.portfolio.paymenttype.domain.PaymentType;
 import org.apache.fineract.portfolio.workingcapitalloan.data.WorkingCapitalLoanTransactionData;
 import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan;
 import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransaction;
@@ -58,9 +60,20 @@
         if (paymentDetail == null) {
             return null;
         }
-        return PaymentDetailData.builder().id(paymentDetail.getId()).accountNumber(paymentDetail.getAccountNumber())
-                .checkNumber(paymentDetail.getCheckNumber()).routingCode(paymentDetail.getRoutingCode())
-                .receiptNumber(paymentDetail.getReceiptNumber()).bankNumber(paymentDetail.getBankNumber()).build();
+        return PaymentDetailData.builder().id(paymentDetail.getId()).paymentType(paymentTypeToData(paymentDetail.getPaymentType()))
+                .accountNumber(paymentDetail.getAccountNumber()).checkNumber(paymentDetail.getCheckNumber())
+                .routingCode(paymentDetail.getRoutingCode()).receiptNumber(paymentDetail.getReceiptNumber())
+                .bankNumber(paymentDetail.getBankNumber()).build();
+    }
+
+    @Named("paymentTypeToData")
+    default PaymentTypeData paymentTypeToData(final PaymentType paymentType) {
+        if (paymentType == null) {
+            return null;
+        }
+        return PaymentTypeData.builder().id(paymentType.getId()).name(paymentType.getName()).description(paymentType.getDescription())
+                .isCashPayment(paymentType.getIsCashPayment()).position(paymentType.getPosition()).codeName(paymentType.getCodeName())
+                .isSystemDefined(paymentType.getIsSystemDefined()).build();
     }
 
     @Named("codeValueToData")
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/repository/WorkingCapitalLoanTransactionRepository.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/repository/WorkingCapitalLoanTransactionRepository.java
index 2586eb6..3779a22 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/repository/WorkingCapitalLoanTransactionRepository.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/repository/WorkingCapitalLoanTransactionRepository.java
@@ -18,6 +18,8 @@
  */
 package org.apache.fineract.portfolio.workingcapitalloan.repository;
 
+import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Optional;
 import org.apache.fineract.infrastructure.core.domain.ExternalId;
@@ -45,6 +47,32 @@
     List<WorkingCapitalLoanTransaction> findActiveByTypeOrderByIdDesc(@Param("wcLoanId") Long wcLoanId,
             @Param("transactionType") LoanTransactionType transactionType);
 
+    /** Net amortized discount fee income from non-reversed transactions: sum(amortization) - sum(adjustment). */
+    // 'else 0' is required by EclipseLink's CASE grammar; EclipseLink also rejects unary negation in JPQL CASE, so the
+    // adjustment branch subtracts via (0 - amount) rather than -amount.
+    @Query("""
+            select coalesce(sum(case when t.transactionType = :amortizationType then t.transactionAmount
+                                     when t.transactionType = :adjustmentType then (0 - t.transactionAmount)
+                                     else 0 end), 0)
+            from WorkingCapitalLoanTransaction t
+            where t.wcLoan.id = :wcLoanId and t.reversed = false
+              and t.transactionType in (:amortizationType, :adjustmentType)
+            """)
+    BigDecimal sumNetAmortization(@Param("wcLoanId") Long wcLoanId, @Param("amortizationType") LoanTransactionType amortizationType,
+            @Param("adjustmentType") LoanTransactionType adjustmentType);
+
+    /**
+     * Total amount of non-reversed discount fee adjustments dated strictly after {@code date} (not yet effective then).
+     */
+    @Query("""
+            select coalesce(sum(t.transactionAmount), 0)
+            from WorkingCapitalLoanTransaction t
+            where t.wcLoan.id = :wcLoanId and t.reversed = false
+              and t.transactionType = :transactionType and t.transactionDate > :date
+            """)
+    BigDecimal sumDiscountFeeAdjustmentsAfter(@Param("wcLoanId") Long wcLoanId,
+            @Param("transactionType") LoanTransactionType transactionType, @Param("date") LocalDate date);
+
     Optional<WorkingCapitalLoanTransaction> findByWcLoan_IdAndExternalId(Long wcLoanId, ExternalId externalId);
 
     boolean existsByExternalId(ExternalId externalId);
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachActionWriteServiceImpl.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachActionWriteServiceImpl.java
index 8c3ebee..22c8d1f 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachActionWriteServiceImpl.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachActionWriteServiceImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.portfolio.workingcapitalloan.service;
 
+import java.util.List;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
@@ -49,13 +50,18 @@
         final WorkingCapitalLoan workingCapitalLoan = loanRepository.findById(workingCapitalLoanId)
                 .orElseThrow(() -> new WorkingCapitalLoanNotFoundException(workingCapitalLoanId));
 
-        final WorkingCapitalLoanBreachAction action = validator.validateAndParse(command, workingCapitalLoan);
+        final List<WorkingCapitalLoanBreachAction> existing = actionRepository.findByWorkingCapitalLoanIdOrderById(workingCapitalLoanId);
+
+        final WorkingCapitalLoanBreachAction action = validator.validateAndParse(command, workingCapitalLoan, existing);
         action.setWorkingCapitalLoan(workingCapitalLoan);
 
         final WorkingCapitalLoanBreachAction saved = actionRepository.saveAndFlush(action);
         log.debug("Created WC loan breach action {} for loan {}", action.getAction(), workingCapitalLoanId);
 
-        if (WorkingCapitalLoanBreachActionType.RESCHEDULE.equals(action.getAction())) {
+        if (WorkingCapitalLoanBreachActionType.PAUSE.equals(action.getAction())
+                || WorkingCapitalLoanBreachActionType.RESUME.equals(action.getAction())) {
+            breachScheduleService.recalculatePeriodsForPauses(workingCapitalLoan);
+        } else if (WorkingCapitalLoanBreachActionType.RESCHEDULE.equals(action.getAction())) {
             breachScheduleService.rescheduleMinimumPayment(workingCapitalLoan, action);
         }
 
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleService.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleService.java
index f304387..a5aa8a9 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleService.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleService.java
@@ -43,4 +43,6 @@
     void evaluateBreach(WorkingCapitalLoan loan, LocalDate businessDate);
 
     void rescheduleMinimumPayment(WorkingCapitalLoan loan, WorkingCapitalLoanBreachAction rescheduleAction);
+
+    void recalculatePeriodsForPauses(WorkingCapitalLoan loan);
 }
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleServiceImpl.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleServiceImpl.java
index 453f21f..d27b3db 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleServiceImpl.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanBreachScheduleServiceImpl.java
@@ -22,6 +22,7 @@
 import java.time.LocalDate;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
 import lombok.RequiredArgsConstructor;
@@ -78,6 +79,7 @@
         final BigDecimal minPaymentAmount = calculateMinPaymentAmount(loan, breach, latestReschedule.orElse(null));
 
         final WorkingCapitalLoanBreachSchedule period = createPeriod(loan, 1, fromDate, toDate, minPaymentAmount);
+        applyRecordedPauses(period, findEffectivePauses(loan.getId()));
         repository.saveAndFlush(period);
         log.debug("Generated initial breach schedule period for WC loan {}", loan.getId());
     }
@@ -104,6 +106,7 @@
         final Integer effectiveFrequency = resolveFrequency(latestReschedule.orElse(null), breach);
         final WorkingCapitalLoanPeriodFrequencyType effectiveFreqType = resolveFrequencyType(latestReschedule.orElse(null), breach);
         final BigDecimal minPaymentAmount = calculateMinPaymentAmount(loan, breach, latestReschedule.orElse(null));
+        final List<EffectivePause> effectivePauses = findEffectivePauses(loan.getId());
         final List<WorkingCapitalLoanBreachSchedule> newPeriods = new ArrayList<>();
 
         WorkingCapitalLoanBreachSchedule latestPeriod = latestPeriodOpt.get();
@@ -113,6 +116,7 @@
 
             final WorkingCapitalLoanBreachSchedule nextPeriod = createPeriod(loan, latestPeriod.getPeriodNumber() + 1, newFromDate,
                     newToDate, minPaymentAmount);
+            applyRecordedPauses(nextPeriod, effectivePauses);
             newPeriods.add(nextPeriod);
             latestPeriod = nextPeriod;
         }
@@ -149,7 +153,7 @@
         BigDecimal newPaidAmount = period.getPaidAmount().add(payAmount);
         period.setPaidAmount(newPaidAmount);
         period.setOutstandingAmount(period.getOutstandingAmount().subtract(payAmount).max(BigDecimal.ZERO));
-        if (period.getOutstandingAmount().compareTo(BigDecimal.ZERO) == 0 && period.getBreach() == null) {
+        if (period.getOutstandingAmount().compareTo(BigDecimal.ZERO) == 0) {
             period.setBreach(false);
         }
         repository.saveAndFlush(period);
@@ -227,6 +231,82 @@
                 rescheduleAction.getMinimumPayment(), rescheduleAction.getMinimumPaymentType(), newFrequency, newFreqType);
     }
 
+    @Override
+    public void recalculatePeriodsForPauses(final WorkingCapitalLoan loan) {
+        final Optional<WorkingCapitalBreach> breachOpt = getBreachConfig(loan);
+        if (breachOpt.isEmpty()) {
+            return;
+        }
+        final List<WorkingCapitalLoanBreachSchedule> periods = repository.findByLoanIdOrderByPeriodNumberAsc(loan.getId());
+        if (periods.isEmpty()) {
+            return;
+        }
+        final WorkingCapitalBreach breach = breachOpt.get();
+        final Optional<WorkingCapitalLoanBreachAction> latestReschedule = findLatestRescheduleAction(loan.getId());
+        final Integer effectiveFrequency = resolveFrequency(latestReschedule.orElse(null), breach);
+        final WorkingCapitalLoanPeriodFrequencyType effectiveFreqType = resolveFrequencyType(latestReschedule.orElse(null), breach);
+        final List<EffectivePause> effectivePauses = findEffectivePauses(loan.getId());
+        final LocalDate businessDate = DateUtils.getBusinessLocalDate();
+        LocalDate fromDate = periods.getFirst().getFromDate();
+        for (final WorkingCapitalLoanBreachSchedule period : periods) {
+            period.setFromDate(fromDate);
+            period.setToDate(calculateToDate(fromDate, effectiveFrequency, effectiveFreqType));
+            applyRecordedPauses(period, effectivePauses);
+            recomputeBreach(period, businessDate);
+            fromDate = period.getToDate().plusDays(1);
+        }
+        repository.saveAll(periods);
+        log.debug("Recalculated breach schedule periods for WC loan {} by replaying {} effective pauses", loan.getId(),
+                effectivePauses.size());
+    }
+
+    private void recomputeBreach(final WorkingCapitalLoanBreachSchedule period, final LocalDate businessDate) {
+        if (period.getOutstandingAmount().compareTo(BigDecimal.ZERO) == 0) {
+            period.setBreach(false);
+        } else if (businessDate.isAfter(period.getToDate())) {
+            period.setBreach(true);
+        } else {
+            period.setBreach(null);
+        }
+    }
+
+    private List<EffectivePause> findEffectivePauses(final Long loanId) {
+        final List<WorkingCapitalLoanBreachAction> actions = breachActionRepository.findByWorkingCapitalLoanIdOrderById(loanId);
+        final List<WorkingCapitalLoanBreachAction> resumes = actions.stream()
+                .filter(action -> WorkingCapitalLoanBreachActionType.RESUME.equals(action.getAction())).toList();
+        return actions.stream().filter(action -> WorkingCapitalLoanBreachActionType.PAUSE.equals(action.getAction()))
+                .sorted(Comparator.comparing(WorkingCapitalLoanBreachAction::getStartDate))
+                .map(pause -> new EffectivePause(pause.getStartDate(), effectivePauseEnd(pause, resumes))).toList();
+    }
+
+    private LocalDate effectivePauseEnd(final WorkingCapitalLoanBreachAction pause, final List<WorkingCapitalLoanBreachAction> resumes) {
+        // Resume shortens the pause to end on the resume date. Pause start and end dates are inclusive, so the resume
+        // date itself becomes the effective (inclusive) end and is still treated as a paused day.
+        return resumes.stream()
+                .filter(resume -> !pause.getStartDate().isAfter(resume.getStartDate())
+                        && !resume.getStartDate().isAfter(pause.getEndDate()))
+                .map(WorkingCapitalLoanBreachAction::getStartDate).min(Comparator.naturalOrder()).orElse(pause.getEndDate());
+    }
+
+    private void applyRecordedPauses(final WorkingCapitalLoanBreachSchedule period, final List<EffectivePause> pauses) {
+        for (final EffectivePause pause : pauses) {
+            final LocalDate pauseStart = pause.startDate();
+            final LocalDate pauseEnd = pause.endDate();
+            // Apply only if the pause overlaps this period's date range
+            if (!pauseEnd.isBefore(period.getFromDate()) && !pauseStart.isAfter(period.getToDate())) {
+                final long pauseDays = ChronoUnit.DAYS.between(pauseStart, pauseEnd) + 1;
+                period.setToDate(period.getToDate().plusDays(pauseDays));
+                if (period.getFromDate().isAfter(pauseStart)) {
+                    period.setFromDate(period.getFromDate().plusDays(pauseDays));
+                }
+            }
+        }
+        period.setNumberOfDays((int) ChronoUnit.DAYS.between(period.getFromDate(), period.getToDate()) + 1);
+    }
+
+    private record EffectivePause(LocalDate startDate, LocalDate endDate) {
+    }
+
     private WorkingCapitalLoanBreachSchedule createPeriod(final WorkingCapitalLoan loan, final int periodNumber, final LocalDate fromDate,
             final LocalDate toDate, final BigDecimal minPaymentAmount) {
         final int numberOfDays = (int) ChronoUnit.DAYS.between(fromDate, toDate) + 1;
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationService.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationService.java
index 3a73659..a270886 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationService.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationService.java
@@ -24,4 +24,11 @@
 public interface WorkingCapitalLoanDiscountFeeAmortizationService {
 
     void processDiscountFeeAmortization(WorkingCapitalLoan loan, LocalDate transactionDate);
+
+    /**
+     * Recomputes {@code realizedIncomeFromDiscountFee} on the loan balance from the database aggregate of non-reversed
+     * amortization transactions. Callers must flush any pending amortization transaction posts or reversals before
+     * invoking this method, otherwise the aggregate will not reflect them.
+     */
+    void recalculateRealizedIncome(WorkingCapitalLoan loan);
 }
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationServiceImpl.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationServiceImpl.java
index d8b99db..6dd8142 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationServiceImpl.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanDiscountFeeAmortizationServiceImpl.java
@@ -52,11 +52,21 @@
     @Override
     @Transactional
     public void processDiscountFeeAmortization(final WorkingCapitalLoan loan, final LocalDate transactionDate) {
-        final BigDecimal scheduleAmortization = calculateScheduleAmortization(loan);
-        final boolean loanOverpaid = loan.getLoanStatus().isOverpaid();
-        final BigDecimal alreadyPosted = loan.getBalance() != null ? loan.getBalance().getRealizedIncomeFromDiscountFee() : BigDecimal.ZERO;
+        // Evaluate the schedule target against the discount in force on the COB date being processed. During a COB
+        // fast-forward (catch-up over skipped days) this keeps a replayed day that precedes a discount fee adjustment
+        // from reacting to that not-yet-effective adjustment, so the resulting amortization adjustment is never dated
+        // before the discount adjustment that caused it.
+        final BigDecimal scheduleAmortization = calculateScheduleAmortization(loan, transactionDate);
+        // Fully paid (obligations met) or overpaid: recognize the whole discount immediately. The schedule carries an
+        // NPV residual that a lump-sum payoff never fully consumes, so close must recognize the full discount, not the
+        // schedule amount. Written-off / charge-off states follow a separate write-off accounting path and are excluded
+        // here.
+        final boolean fullyPaid = loan.getLoanStatus().isOverpaid() || loan.getLoanStatus().isClosedObligationsMet();
+        // Derive the already-amortized income from the (non-reversed) amortization transactions rather than the cached
+        // balance, so the recalculation stays correct after backdated payments, reversals or schedule config changes.
+        final BigDecimal alreadyPosted = queryNetAmortized(loan.getId());
 
-        if (MathUtil.isZero(scheduleAmortization) && !loanOverpaid && MathUtil.isZero(alreadyPosted)) {
+        if (MathUtil.isZero(scheduleAmortization) && !fullyPaid && MathUtil.isZero(alreadyPosted)) {
             log.debug("Skipping discount fee amortization for WC loan [{}] - no amortization on schedule", loan.getId());
             return;
         }
@@ -64,7 +74,7 @@
         final BigDecimal discount = loan.getLoanProductRelatedDetails() != null ? loan.getLoanProductRelatedDetails().getDiscount()
                 : BigDecimal.ZERO;
 
-        final BigDecimal amortizationAmount = loanOverpaid && MathUtil.isGreaterThanZero(discount) ? discount.subtract(alreadyPosted)
+        final BigDecimal amortizationAmount = fullyPaid && MathUtil.isGreaterThanZero(discount) ? discount.subtract(alreadyPosted)
                 : scheduleAmortization.subtract(alreadyPosted);
 
         if (MathUtil.isZero(amortizationAmount)) {
@@ -73,30 +83,58 @@
             return;
         }
 
-        final boolean isChargedOff = false;
+        // Charge-off accounting is out of scope here (see the full-discount note above), so amortization is always
+        // posted as not-charged-off.
         if (MathUtil.isGreaterThanZero(amortizationAmount)) {
             final WorkingCapitalLoanTransaction amortizationTxn = WorkingCapitalLoanTransaction.discountFeeAmortization(loan,
                     amortizationAmount, transactionDate, externalIdFactory.create());
             transactionRepository.saveAndFlush(amortizationTxn);
-            accountingProcessor.postJournalEntriesForDiscountFeeAmortization(loan, amortizationTxn, isChargedOff);
+            accountingProcessor.postJournalEntriesForDiscountFeeAmortization(loan, amortizationTxn, false);
         } else {
             final BigDecimal adjustmentAmount = amortizationAmount.negate();
             final WorkingCapitalLoanTransaction adjustmentTxn = WorkingCapitalLoanTransaction.discountFeeAmortizationAdjustment(loan,
                     adjustmentAmount, transactionDate, externalIdFactory.create());
             linkToTriggeringDiscountAdjustment(loan, adjustmentTxn);
             transactionRepository.saveAndFlush(adjustmentTxn);
-            accountingProcessor.postJournalEntriesForDiscountFeeAmortizationAdjustment(loan, adjustmentTxn, isChargedOff);
+            accountingProcessor.postJournalEntriesForDiscountFeeAmortizationAdjustment(loan, adjustmentTxn, false);
         }
 
-        loan.getBalance().setRealizedIncomeFromDiscountFee(alreadyPosted.add(amortizationAmount));
+        recalculateRealizedIncome(loan);
 
         log.debug("Posted discount fee amortization of {} for WC loan [{}]", amortizationAmount, loan.getId());
     }
 
-    private BigDecimal calculateScheduleAmortization(final WorkingCapitalLoan loan) {
+    @Override
+    @Transactional
+    public void recalculateRealizedIncome(final WorkingCapitalLoan loan) {
+        if (loan.getBalance() == null) {
+            return;
+        }
+        // Requires any amortization transaction posts/reversals to be flushed first, so the aggregate sees them.
+        loan.getBalance().setRealizedIncomeFromDiscountFee(queryNetAmortized(loan.getId()));
+    }
+
+    private BigDecimal queryNetAmortized(final Long loanId) {
+        return transactionRepository.sumNetAmortization(loanId, LoanTransactionType.DISCOUNT_FEE_AMORTIZATION,
+                LoanTransactionType.DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT);
+    }
+
+    private BigDecimal calculateScheduleAmortization(final WorkingCapitalLoan loan, final LocalDate cobDate) {
         final MathContext mc = MoneyHelper.getMathContext();
         return scheduleRepositoryWrapper.readModel(loan.getId(), mc, WorkingCapitalLoanCurrencyResolver.resolveCurrency(loan))
-                .map(ProjectedAmortizationScheduleModel::totalActualAmortization).orElse(BigDecimal.ZERO);
+                .map(model -> model.totalActualAmortizationWithDiscount(discountInForceOn(loan, model, cobDate))).orElse(BigDecimal.ZERO);
+    }
+
+    /**
+     * The total discount fee in force on {@code cobDate}. The model's discount is the latest (net of every adjustment);
+     * adding back the non-reversed discount fee adjustments dated after the COB date yields the discount that was
+     * effective on a replayed day, so a fast-forward does not evaluate amortization against a not-yet-effective change.
+     */
+    private BigDecimal discountInForceOn(final WorkingCapitalLoan loan, final ProjectedAmortizationScheduleModel model,
+            final LocalDate cobDate) {
+        final BigDecimal notYetEffective = transactionRepository.sumDiscountFeeAdjustmentsAfter(loan.getId(),
+                LoanTransactionType.DISCOUNT_FEE_ADJUSTMENT, cobDate);
+        return model.discountFeeAmount().getAmount().add(notYetEffective);
     }
 
     private void linkToTriggeringDiscountAdjustment(final WorkingCapitalLoan loan,
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java
index 58391e6..9dd7216 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanWritePlatformServiceImpl.java
@@ -1042,10 +1042,14 @@
                         || (txn.getTransactionDate().equals(newTxn.getTransactionDate()) && txn.getId().compareTo(newTxn.getId()) > 0));
     }
 
-    private void reverseTransaction(final WorkingCapitalLoanTransaction txn) {
+    private void markReversed(final WorkingCapitalLoanTransaction txn) {
         txn.setReversed(true);
         txn.setReversedOnDate(DateUtils.getBusinessLocalDate());
         txn.setReversalExternalId(ExternalId.generate());
+    }
+
+    private void reverseTransaction(final WorkingCapitalLoanTransaction txn) {
+        markReversed(txn);
         this.transactionRepository.save(txn);
         this.transactionRepository.flush();
     }
@@ -1065,17 +1069,22 @@
         }
         final WorkingCapitalLoanTransaction txn = activeDisbursements.getFirst();
 
-        transactions.forEach(this::reverseTransaction);
+        transactions.forEach(this::markReversed);
+        this.transactionRepository.saveAll(transactions);
+        this.transactionRepository.flush();
 
-        final Optional<WorkingCapitalLoanBalance> balanceOpt = this.balanceRepository.findByWcLoan_Id(loan.getId());
-        balanceOpt.ifPresent(b -> {
+        // Operate on loan.getBalance() directly: it is the single managed balance instance that
+        // recalculateRealizedIncome writes to, so all updates here apply to the same object that gets persisted.
+        final WorkingCapitalLoanBalance balance = loan.getBalance();
+        if (balance != null) {
             // Restore balance to pre-disbursement state.
-            b.setPrincipal(loan.getApprovedPrincipal() != null ? loan.getApprovedPrincipal() : loan.getProposedPrincipal());
-            b.setPrincipalPaid(BigDecimal.ZERO);
-            b.setRealizedIncomeFromDiscountFee(BigDecimal.ZERO);
-            b.setOverpaymentAmount(BigDecimal.ZERO);
-            this.balanceRepository.saveAndFlush(b);
-        });
+            balance.setPrincipal(loan.getApprovedPrincipal() != null ? loan.getApprovedPrincipal() : loan.getProposedPrincipal());
+            balance.setPrincipalPaid(BigDecimal.ZERO);
+            // All transactions were just reversed, so the single owner recomputes realized income to zero from them.
+            discountFeeAmortizationService.recalculateRealizedIncome(loan);
+            balance.setOverpaymentAmount(BigDecimal.ZERO);
+            this.balanceRepository.saveAndFlush(balance);
+        }
         return txn;
     }
 
@@ -1106,15 +1115,14 @@
 
     private void reverseDiscountFeeAmortizationAdjustments(final WorkingCapitalLoan loan,
             final WorkingCapitalLoanTransaction discountAdjustment) {
-        final WorkingCapitalLoanBalance balance = loan.getBalance();
         relationRepository.findAllByToTransactionAndFromTransactionReversedAndFromTransactionTransactionType(discountAdjustment, false,
                 LoanTransactionType.DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT).forEach(relation -> {
                     final WorkingCapitalLoanTransaction txn = relation.getFromTransaction();
                     reverseTransaction(txn);
                     accountingProcessor.postReversalJournalEntries(loan, txn);
-                    balance.setRealizedIncomeFromDiscountFee(
-                            MathUtil.nullToZero(balance.getRealizedIncomeFromDiscountFee()).add(txn.getTransactionAmount()));
                 });
+        // Realized income is recomputed from the (now-reversed) transactions by its single owner, not adjusted here.
+        discountFeeAmortizationService.recalculateRealizedIncome(loan);
     }
 
 }
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/validator/WorkingCapitalLoanBreachActionParseAndValidator.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/validator/WorkingCapitalLoanBreachActionParseAndValidator.java
index cae6970..5a65490 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/validator/WorkingCapitalLoanBreachActionParseAndValidator.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/validator/WorkingCapitalLoanBreachActionParseAndValidator.java
@@ -19,21 +19,28 @@
 package org.apache.fineract.portfolio.workingcapitalloan.validator;
 
 import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.ACTION;
+import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.DATE_FORMAT;
+import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.END_DATE;
 import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.FREQUENCY;
 import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.FREQUENCY_TYPE;
+import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.LOCALE;
 import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.MINIMUM_PAYMENT;
 import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.MINIMUM_PAYMENT_TYPE;
+import static org.apache.fineract.portfolio.workingcapitalloan.validator.WorkingCapitalLoanBreachActionParameters.START_DATE;
 
 import com.google.gson.JsonElement;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
 import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
+import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper;
 import org.apache.fineract.infrastructure.core.service.DateUtils;
 import org.apache.fineract.infrastructure.core.validator.ParseAndValidator;
 import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan;
@@ -43,55 +50,131 @@
 import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDisbursementDetails;
 import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanPeriodFrequencyType;
 import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanBreachScheduleRepository;
+import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanRepository;
 import org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalBreachAmountCalculationType;
+import org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProductRelatedDetails;
 import org.springframework.stereotype.Component;
 
 @RequiredArgsConstructor
 @Component
 public class WorkingCapitalLoanBreachActionParseAndValidator extends ParseAndValidator {
 
+    private static final String PAUSE_ACTION = "pause";
     private static final String RESCHEDULE_ACTION = "reschedule";
+    private static final String RESUME_ACTION = "resume";
 
     private final FromJsonHelper jsonHelper;
+    private final WorkingCapitalLoanRepository loanRepository;
     private final WorkingCapitalLoanBreachScheduleRepository breachScheduleRepository;
 
-    public WorkingCapitalLoanBreachAction validateAndParse(final JsonCommand command, final WorkingCapitalLoan workingCapitalLoan) {
+    public WorkingCapitalLoanBreachAction validateAndParse(final JsonCommand command, final WorkingCapitalLoan workingCapitalLoan,
+            final List<WorkingCapitalLoanBreachAction> existing) {
         final DataValidatorBuilder dataValidator = new DataValidatorBuilder(new ArrayList<>()).resource("workingCapitalLoanBreachAction");
-        final WorkingCapitalLoanBreachAction parsedAction = parseCommand(command, dataValidator);
-        validateLoanIsActive(workingCapitalLoan, dataValidator);
+        final JsonElement json = command.parsedJson();
 
-        if (WorkingCapitalLoanBreachActionType.RESCHEDULE.equals(parsedAction.getAction())) {
-            validateReschedule(parsedAction, workingCapitalLoan, dataValidator);
-        } else if (parsedAction.getAction() != null) {
-            dataValidator.reset().parameter(ACTION).value(parsedAction.getAction()).failWithCode("invalid.action");
+        final String actionString = jsonHelper.extractStringNamed(ACTION, json);
+        dataValidator.reset().parameter(ACTION).value(actionString).notBlank();
+        if (StringUtils.isNotBlank(actionString)) {
+            dataValidator.reset().parameter(ACTION).value(actionString).isOneOfTheseStringValues(PAUSE_ACTION, RESCHEDULE_ACTION,
+                    RESUME_ACTION);
         }
-
         throwExceptionIfValidationWarningsExist(dataValidator);
-        return parsedAction;
+
+        validateLoanIsActive(dataValidator, workingCapitalLoan);
+        validateBreachConfigurationExists(dataValidator, workingCapitalLoan);
+
+        if (RESCHEDULE_ACTION.equalsIgnoreCase(actionString)) {
+            return parseAndValidateReschedule(json, workingCapitalLoan, dataValidator);
+        }
+        if (RESUME_ACTION.equalsIgnoreCase(actionString)) {
+            return parseAndValidateResume(json, existing, dataValidator);
+        }
+        return parseAndValidatePause(json, workingCapitalLoan, existing, dataValidator);
     }
 
-    private WorkingCapitalLoanBreachAction parseCommand(final JsonCommand command, final DataValidatorBuilder dataValidator) {
-        final JsonElement json = command.parsedJson();
+    private WorkingCapitalLoanBreachAction parseAndValidatePause(final JsonElement json, final WorkingCapitalLoan workingCapitalLoan,
+            final List<WorkingCapitalLoanBreachAction> existing, final DataValidatorBuilder dataValidator) {
+        final LocalDate startDate = extractDate(json, START_DATE);
+        dataValidator.reset().parameter(START_DATE).value(startDate).notNull();
+
+        final LocalDate endDate = extractDate(json, END_DATE);
+        dataValidator.reset().parameter(END_DATE).value(endDate).notNull();
+
+        validateStartBeforeEnd(dataValidator, startDate, endDate);
+        validateNotBeforeScheduleStart(dataValidator, startDate, workingCapitalLoan);
+        validateNoOverlap(dataValidator, startDate, endDate, existing);
+
+        throwExceptionIfValidationWarningsExist(dataValidator);
+
         final WorkingCapitalLoanBreachAction action = new WorkingCapitalLoanBreachAction();
-        action.setAction(extractAction(json, dataValidator));
+        action.setAction(WorkingCapitalLoanBreachActionType.PAUSE);
+        action.setStartDate(startDate);
+        action.setEndDate(endDate);
+        return action;
+    }
+
+    private WorkingCapitalLoanBreachAction parseAndValidateReschedule(final JsonElement json, final WorkingCapitalLoan workingCapitalLoan,
+            final DataValidatorBuilder dataValidator) {
+        final WorkingCapitalLoanBreachAction action = new WorkingCapitalLoanBreachAction();
+        action.setAction(WorkingCapitalLoanBreachActionType.RESCHEDULE);
         action.setStartDate(DateUtils.getBusinessLocalDate());
         action.setMinimumPayment(extractBigDecimal(json, MINIMUM_PAYMENT));
         action.setMinimumPaymentType(extractMinimumPaymentType(json, dataValidator));
         action.setFrequency(extractInteger(json, FREQUENCY));
         action.setFrequencyType(extractFrequencyType(json, dataValidator));
+
+        validateReschedule(action, workingCapitalLoan, dataValidator);
+
+        throwExceptionIfValidationWarningsExist(dataValidator);
         return action;
     }
 
-    private WorkingCapitalLoanBreachActionType extractAction(final JsonElement json, final DataValidatorBuilder dataValidator) {
-        final String actionString = jsonHelper.extractStringNamed(ACTION, json);
-        dataValidator.reset().parameter(ACTION).value(actionString).notBlank();
-        if (StringUtils.isNotBlank(actionString)) {
-            dataValidator.reset().parameter(ACTION).value(actionString).isOneOfTheseStringValues(RESCHEDULE_ACTION);
+    private WorkingCapitalLoanBreachAction parseAndValidateResume(final JsonElement json,
+            final List<WorkingCapitalLoanBreachAction> existing, final DataValidatorBuilder dataValidator) {
+        final LocalDate resumeDate = extractDate(json, START_DATE);
+        dataValidator.reset().parameter(START_DATE).value(resumeDate).notNull();
+
+        final LocalDate endDate = extractDate(json, END_DATE);
+        if (endDate != null) {
+            dataValidator.reset().parameter(END_DATE).value(endDate).failWithCode("must.not.be.provided.for.resume");
         }
-        if (RESCHEDULE_ACTION.equalsIgnoreCase(actionString)) {
-            return WorkingCapitalLoanBreachActionType.RESCHEDULE;
+
+        final LocalDate businessDate = DateUtils.getBusinessLocalDate();
+        if (resumeDate != null && !resumeDate.isEqual(businessDate)) {
+            dataValidator.reset().parameter(START_DATE).value(resumeDate).failWithCode("must.be.current.business.date");
         }
-        return null;
+
+        if (resumeDate != null && findActivePause(resumeDate, existing).isEmpty()) {
+            dataValidator.reset().failWithCodeNoParameterAddedToErrorCode("resume.not.during.active.pause");
+        }
+
+        throwExceptionIfValidationWarningsExist(dataValidator);
+
+        final WorkingCapitalLoanBreachAction resume = new WorkingCapitalLoanBreachAction();
+        resume.setAction(WorkingCapitalLoanBreachActionType.RESUME);
+        resume.setStartDate(resumeDate);
+        return resume;
+    }
+
+    private Optional<WorkingCapitalLoanBreachAction> findActivePause(final LocalDate resumeDate,
+            final List<WorkingCapitalLoanBreachAction> existing) {
+        if (resumeDate == null) {
+            return Optional.empty();
+        }
+        return existing.stream().filter(action -> WorkingCapitalLoanBreachActionType.PAUSE.equals(action.getAction()))
+                .filter(pause -> !isAlreadyResumed(pause, existing))
+                .filter(pause -> !resumeDate.isBefore(pause.getStartDate()) && !resumeDate.isAfter(pause.getEndDate())).findFirst();
+    }
+
+    private boolean isAlreadyResumed(final WorkingCapitalLoanBreachAction pause, final List<WorkingCapitalLoanBreachAction> existing) {
+        return existing.stream().filter(action -> WorkingCapitalLoanBreachActionType.RESUME.equals(action.getAction())).anyMatch(
+                resume -> !pause.getStartDate().isAfter(resume.getStartDate()) && !resume.getStartDate().isAfter(pause.getEndDate()));
+    }
+
+    private LocalDate extractDate(final JsonElement json, final String paramName) {
+        final String dateFormat = jsonHelper.extractStringNamed(DATE_FORMAT, json);
+        final String locale = jsonHelper.extractStringNamed(LOCALE, json);
+        return jsonHelper.extractLocalDateNamed(paramName, json, dateFormat, JsonParserHelper.localeFromString(locale));
     }
 
     private BigDecimal extractBigDecimal(final JsonElement json, final String paramName) {
@@ -135,11 +218,70 @@
         }
     }
 
+    private void validateLoanIsActive(final DataValidatorBuilder dataValidator, final WorkingCapitalLoan workingCapitalLoan) {
+        if (!workingCapitalLoan.getLoanStatus().isActive()) {
+            dataValidator.reset().failWithCodeNoParameterAddedToErrorCode("loan.is.not.active");
+        }
+    }
+
+    private void validateBreachConfigurationExists(final DataValidatorBuilder dataValidator, final WorkingCapitalLoan workingCapitalLoan) {
+        final WorkingCapitalLoanProductRelatedDetails details = workingCapitalLoan.getLoanProductRelatedDetails();
+        if (details == null || details.getBreach() == null) {
+            dataValidator.reset().failWithCodeNoParameterAddedToErrorCode("no.breach.configuration");
+        }
+    }
+
+    private void validateStartBeforeEnd(final DataValidatorBuilder dataValidator, final LocalDate startDate, final LocalDate endDate) {
+        if (startDate != null && endDate != null && startDate.isAfter(endDate)) {
+            dataValidator.reset().parameter(END_DATE).value(endDate).failWithCode("must.be.on.or.after.startDate");
+        }
+    }
+
+    private void validateNotBeforeScheduleStart(final DataValidatorBuilder dataValidator, final LocalDate startDate,
+            final WorkingCapitalLoan workingCapitalLoan) {
+        loanRepository.findFirstActualDisbursementDate(workingCapitalLoan.getId())
+                .map(disbursementDate -> disbursementDate.plusDays(getBreachGraceDays(workingCapitalLoan)))
+                .ifPresent(scheduleStartDate -> dataValidator.reset().parameter(START_DATE).value(startDate)
+                        .validateDateAfterOrEqual(scheduleStartDate));
+    }
+
+    private int getBreachGraceDays(final WorkingCapitalLoan workingCapitalLoan) {
+        final WorkingCapitalLoanProductRelatedDetails details = workingCapitalLoan.getLoanProductRelatedDetails();
+        if (details == null || details.getBreachGraceDays() == null) {
+            return 0;
+        }
+        return details.getBreachGraceDays();
+    }
+
+    private void validateNoOverlap(final DataValidatorBuilder dataValidator, final LocalDate startDate, final LocalDate endDate,
+            final List<WorkingCapitalLoanBreachAction> existing) {
+        if (startDate == null || endDate == null) {
+            return;
+        }
+        final boolean overlaps = existing.stream().filter(action -> WorkingCapitalLoanBreachActionType.PAUSE.equals(action.getAction()))
+                .anyMatch(pause -> isOverlapping(startDate, endDate, pause.getStartDate(), effectivePauseEnd(pause, existing)));
+        if (overlaps) {
+            dataValidator.reset().failWithCodeNoParameterAddedToErrorCode("overlapping.pause.periods");
+        }
+    }
+
+    private LocalDate effectivePauseEnd(final WorkingCapitalLoanBreachAction pause, final List<WorkingCapitalLoanBreachAction> existing) {
+        // A resumed pause effectively ends on the (inclusive) resume date, so a later pause may start the next day
+        return existing.stream().filter(action -> WorkingCapitalLoanBreachActionType.RESUME.equals(action.getAction()))
+                .map(WorkingCapitalLoanBreachAction::getStartDate)
+                .filter(resumeDate -> !pause.getStartDate().isAfter(resumeDate) && !resumeDate.isAfter(pause.getEndDate()))
+                .min(LocalDate::compareTo).orElse(pause.getEndDate());
+    }
+
+    private boolean isOverlapping(final LocalDate startDate, final LocalDate endDate, final LocalDate otherStart,
+            final LocalDate otherEnd) {
+        return !startDate.isAfter(otherEnd) && !otherStart.isAfter(endDate);
+    }
+
     private void validateReschedule(final WorkingCapitalLoanBreachAction action, final WorkingCapitalLoan workingCapitalLoan,
             final DataValidatorBuilder dataValidator) {
         validateLoanIsDisbursed(workingCapitalLoan, dataValidator);
         validateScheduleExists(workingCapitalLoan, dataValidator);
-        validateBreachConfigured(workingCapitalLoan, dataValidator);
 
         final boolean hasPaymentGroup = action.getMinimumPayment() != null || action.getMinimumPaymentType() != null;
         final boolean hasFrequencyGroup = action.getFrequency() != null || action.getFrequencyType() != null;
@@ -155,12 +297,6 @@
         }
     }
 
-    private void validateLoanIsActive(final WorkingCapitalLoan workingCapitalLoan, final DataValidatorBuilder dataValidator) {
-        if (!workingCapitalLoan.getLoanStatus().isActive()) {
-            dataValidator.reset().failWithCodeNoParameterAddedToErrorCode("loan.is.not.active");
-        }
-    }
-
     private void validateLoanIsDisbursed(final WorkingCapitalLoan workingCapitalLoan, final DataValidatorBuilder dataValidator) {
         final boolean isDisbursed = workingCapitalLoan.getDisbursementDetails().stream()
                 .map(WorkingCapitalLoanDisbursementDetails::getActualDisbursementDate).anyMatch(Objects::nonNull);
@@ -177,13 +313,6 @@
         }
     }
 
-    private void validateBreachConfigured(final WorkingCapitalLoan workingCapitalLoan, final DataValidatorBuilder dataValidator) {
-        if (workingCapitalLoan.getLoanProductRelatedDetails() == null
-                || workingCapitalLoan.getLoanProductRelatedDetails().getBreach() == null) {
-            dataValidator.reset().failWithCodeNoParameterAddedToErrorCode("no.breach.configuration");
-        }
-    }
-
     private void validateMinimumPaymentGroupProvided(final WorkingCapitalLoanBreachAction action,
             final DataValidatorBuilder dataValidator) {
         if (action.getMinimumPayment() == null || action.getMinimumPayment().compareTo(BigDecimal.ZERO) <= 0) {
diff --git a/fineract-working-capital-loan/src/main/resources/jpa/static-weaving/module/fineract-working-capital-loan/persistence.xml b/fineract-working-capital-loan/src/main/resources/jpa/static-weaving/module/fineract-working-capital-loan/persistence.xml
deleted file mode 100644
index 4b4993d..0000000
--- a/fineract-working-capital-loan/src/main/resources/jpa/static-weaving/module/fineract-working-capital-loan/persistence.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership. The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License. You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied. See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-
-<persistence version="2.0"
-             xmlns="http://java.sun.com/xml/ns/persistence"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-
-    <!--  This file is only used for static weaving, nothing more.  -->
-    <!--  You can find the runtime configuration in the JPAConfig class  -->
-    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <!--  fineract-accounting module: -->
-        <class>org.apache.fineract.accounting.closure.domain.GLClosure</class>
-        <class>org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount</class>
-        <class>org.apache.fineract.accounting.glaccount.domain.TrialBalance</class>
-        <class>org.apache.fineract.accounting.journalentry.domain.JournalEntry</class>
-        <class>org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingRule</class>
-        <class>org.apache.fineract.accounting.rule.domain.AccountingTagRule</class>
-
-        <!--  fineract-charge module: -->
-        <class>org.apache.fineract.portfolio.charge.domain.Charge</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeCalculationTypeConverter</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargePaymentModeConverter</class>
-
-        <!--  fineract-cob module: -->
-        <class>org.apache.fineract.cob.domain.AccountLock</class>
-        <class>org.apache.fineract.cob.domain.BatchBusinessStep</class>
-
-        <!--  fineract-core module: -->
-        <class>org.apache.fineract.accounting.glaccount.domain.GLAccount</class>
-        <class>org.apache.fineract.commands.domain.CommandSource</class>
-        <class>org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat</class>
-        <class>org.apache.fineract.infrastructure.businessdate.domain.BusinessDate</class>
-        <class>org.apache.fineract.infrastructure.cache.domain.PlatformCache</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.Code</class>
-        <class>org.apache.fineract.infrastructure.codes.domain.CodeValue</class>
-        <class>org.apache.fineract.infrastructure.configuration.domain.GlobalConfigurationProperty</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom</class>
-        <class>org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEvent</class>
-        <class>org.apache.fineract.infrastructure.event.external.repository.domain.ExternalEventConfiguration</class>
-        <class>org.apache.fineract.infrastructure.jobs.domain.CustomJobParameter</class>
-        <class>org.apache.fineract.organisation.holiday.domain.Holiday</class>
-        <class>org.apache.fineract.organisation.monetary.domain.ApplicationCurrency</class>
-        <class>org.apache.fineract.organisation.monetary.domain.OrganisationCurrency</class>
-        <class>org.apache.fineract.organisation.office.domain.Office</class>
-        <class>org.apache.fineract.organisation.staff.domain.Staff</class>
-        <class>org.apache.fineract.organisation.workingdays.domain.WorkingDays</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.Calendar</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarHistory</class>
-        <class>org.apache.fineract.portfolio.calendar.domain.CalendarInstance</class>
-        <class>org.apache.fineract.portfolio.client.domain.Client</class>
-        <class>org.apache.fineract.portfolio.client.domain.ClientIdentifier</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyMinimumPaymentPeriodAndRule</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange</class>
-        <class>org.apache.fineract.portfolio.fund.domain.Fund</class>
-        <class>org.apache.fineract.portfolio.group.domain.Group</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupLevel</class>
-        <class>org.apache.fineract.portfolio.group.domain.GroupRole</class>
-        <class>org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail</class>
-        <class>org.apache.fineract.portfolio.paymenttype.domain.PaymentType</class>
-        <class>org.apache.fineract.portfolio.rate.domain.Rate</class>
-        <class>org.apache.fineract.useradministration.domain.AppUser</class>
-        <class>org.apache.fineract.useradministration.domain.Permission</class>
-        <class>org.apache.fineract.useradministration.domain.Role</class>
-        <class>org.apache.fineract.portfolio.charge.domain.ChargeTimeTypeConverter</class>
-
-        <!--  fineract-loan module: -->
-        <class>org.apache.fineract.portfolio.collateral.domain.LoanCollateral</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.ClientCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.collateralmanagement.domain.CollateralManagementDomain</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucketMappings</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyTagHistory</class>
-        <class>org.apache.fineract.portfolio.delinquency.domain.LoanInstallmentDelinquencyTag</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.AccountingRuleTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonitoringAccount</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.Loan</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanAmortizationAllocationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanApprovedAmountHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanChargeTaxDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalcualtionAdditionalDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOfficerAssignmentHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanOverdueInstallmentCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanRescheduleRequestToTermVariationMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusChangeHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanSubStatusConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTermVariations</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTopupDetails</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTrancheDisbursementCharge</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTypeConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
-        <class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.AllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductBorrowerCycleVariations</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductCreditAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductFloatingRates</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductGuaranteeDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductInterestRecalculationDetails</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.LoanProductVariableInstallmentConfig</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeListConverter</class>
-        <class>org.apache.fineract.portfolio.loanproduct.domain.SupportedInterestRefundTypesListConverter</class>
-        <class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelationTypeEnumConverter</class>
-        <class>org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDatedChecks</class>
-
-        <!--  fineract-rates module: -->
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRate</class>
-        <class>org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod</class>
-
-        <!--  fineract-tax module: -->
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponent</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxComponentHistory</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroup</class>
-        <class>org.apache.fineract.portfolio.tax.domain.TaxGroupMappings</class>
-
-        <!--  fineract-working-capital-loan module: -->
-        <class>org.apache.fineract.cob.domain.WorkingCapitalLoanAccountLock</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDelinquencyAction</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanBreachAction</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanBreachSchedule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDelinquencyRangeSchedule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDelinquencyRangeScheduleTagHistory</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanBalance</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDisbursementDetails</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanNote</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanbreach.domain.WorkingCapitalBreach</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.ProjectedAmortizationLoanModel</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransactionRelation</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransaction</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransactionAllocation</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanCharge</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloannearbreach.domain.WorkingCapitalNearBreach</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanPeriodPaymentRateChange</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProduct</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProductConfigurableAttributes</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalLoanProductPaymentAllocationRule</class>
-        <class>org.apache.fineract.portfolio.workingcapitalloanproduct.domain.WorkingCapitalPaymentAllocationTypeListConverter</class>
-
-
-        <exclude-unlisted-classes>false</exclude-unlisted-classes>
-        <properties>
-            <property name="eclipselink.weaving" value="static"/>
-            <property name="eclipselink.weaving.internal" value="false"/>
-        </properties>
-    </persistence-unit>
-</persistence>
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedLengthLoanProductIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedLengthLoanProductIntegrationTest.java
index 82bcf8b..036cd9e 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedLengthLoanProductIntegrationTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedLengthLoanProductIntegrationTest.java
@@ -21,72 +21,61 @@
 import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
 import org.apache.fineract.client.models.PostLoanProductsRequest;
-import org.apache.fineract.client.models.PostLoanProductsResponse;
 import org.apache.fineract.client.models.PostLoansRequest;
-import org.apache.fineract.client.models.PostLoansResponse;
 import org.apache.fineract.client.models.PutLoanProductsProductIdRequest;
 import org.apache.fineract.client.models.PutLoanProductsProductIdResponse;
-import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import org.apache.fineract.integrationtests.client.feign.helpers.FeignRawHttpHelper;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanTestData;
 import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
 import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.AdvancedPaymentScheduleTransactionProcessor;
-import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleProcessingType;
-import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-public class FixedLengthLoanProductIntegrationTest extends BaseLoanIntegrationTest {
+public class FixedLengthLoanProductIntegrationTest extends FeignLoanTestBase {
 
     @Test
     public void testCreateReadUpdateReadLoanProductWithFixedLength() {
-        // create with 4
         PostLoanProductsRequest loanProductsRequest = fixedLengthLoanProduct(4);
-        PostLoanProductsResponse loanProduct = loanProductHelper.createLoanProduct(loanProductsRequest);
-        Assertions.assertNotNull(loanProduct.getResourceId());
+        Long loanProductId = createLoanProduct(loanProductsRequest);
+        Assertions.assertNotNull(loanProductId);
 
-        // read
-        GetLoanProductsProductIdResponse getLoanProductsProductIdResponse = loanProductHelper
-                .retrieveLoanProductById(loanProduct.getResourceId());
+        GetLoanProductsProductIdResponse getLoanProductsProductIdResponse = retrieveLoanProduct(loanProductId);
         Assertions.assertEquals(4, getLoanProductsProductIdResponse.getFixedLength());
 
-        // update to 5
-        PutLoanProductsProductIdRequest updateRequest = new PutLoanProductsProductIdRequest().fixedLength(5).locale("en");
-        PutLoanProductsProductIdResponse putLoanProductsProductIdResponse = loanProductHelper
-                .updateLoanProductById(loanProduct.getResourceId(), updateRequest);
+        PutLoanProductsProductIdRequest updateRequest = new PutLoanProductsProductIdRequest().fixedLength(5).locale(LoanTestData.LOCALE);
+        PutLoanProductsProductIdResponse putLoanProductsProductIdResponse = updateLoanProduct(loanProductId, updateRequest);
         Assertions.assertNotNull(putLoanProductsProductIdResponse.getResourceId());
 
-        // read again
-        getLoanProductsProductIdResponse = loanProductHelper.retrieveLoanProductById(loanProduct.getResourceId());
+        getLoanProductsProductIdResponse = retrieveLoanProduct(loanProductId);
         Assertions.assertEquals(5, getLoanProductsProductIdResponse.getFixedLength());
 
-        // update to null
-        loanTransactionHelper.updateLoanProduct(putLoanProductsProductIdResponse.getResourceId(), """
+        FeignRawHttpHelper.put("/loanproducts/" + loanProductId, """
                 {
                     "fixedLength": null,
                     "locale": "en"
                 }
                 """);
 
-        // read again
-        getLoanProductsProductIdResponse = loanProductHelper.retrieveLoanProductById(loanProduct.getResourceId());
+        getLoanProductsProductIdResponse = retrieveLoanProduct(loanProductId);
         Assertions.assertNull(getLoanProductsProductIdResponse.getFixedLength());
     }
 
     @Test
     public void testLoanApplicationWithFixedLengthInheritedFromLoanProduct() {
         runAt("01 January 2023", () -> {
-            Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            Long clientId = createClient();
 
-            PostLoanProductsResponse loanProduct = loanProductHelper.createLoanProduct(fixedLengthLoanProduct(4));
-            Assertions.assertNotNull(loanProduct.getResourceId());
+            Long loanProductId = createLoanProduct(fixedLengthLoanProduct(4));
+            Assertions.assertNotNull(loanProductId);
 
-            PostLoansRequest applicationRequest = applyLoanRequest(clientId, loanProduct.getResourceId(), "01 January 2023", 1000.0, 4);
+            PostLoansRequest applicationRequest = applyLoanRequest(clientId, loanProductId, "01 January 2023", 1000.0, 4);
             applicationRequest = applicationRequest
                     .transactionProcessingStrategyCode(LoanProductTestBuilder.ADVANCED_PAYMENT_ALLOCATION_STRATEGY);
 
-            PostLoansResponse loanResponse = loanTransactionHelper.applyLoan(applicationRequest);
-            Long loanId = loanResponse.getLoanId();
+            Long loanId = applyForLoan(applicationRequest);
 
-            GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals(4, loanDetails.getFixedLength());
         });
     }
@@ -94,19 +83,18 @@
     @Test
     public void testLoanApplicationWithFixedLengthOverriddenByLoanApplication() {
         runAt("01 January 2023", () -> {
-            Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            Long clientId = createClient();
 
-            PostLoanProductsResponse loanProduct = loanProductHelper.createLoanProduct(fixedLengthLoanProduct(4));
-            Assertions.assertNotNull(loanProduct.getResourceId());
+            Long loanProductId = createLoanProduct(fixedLengthLoanProduct(4));
+            Assertions.assertNotNull(loanProductId);
 
-            PostLoansRequest applicationRequest = applyLoanRequest(clientId, loanProduct.getResourceId(), "01 January 2023", 1000.0, 4);
+            PostLoansRequest applicationRequest = applyLoanRequest(clientId, loanProductId, "01 January 2023", 1000.0, 4);
             applicationRequest = applicationRequest.fixedLength(5).repaymentEvery(1).repaymentFrequencyType(2).loanTermFrequencyType(2)
                     .loanTermFrequency(4).transactionProcessingStrategyCode(LoanProductTestBuilder.ADVANCED_PAYMENT_ALLOCATION_STRATEGY);
 
-            PostLoansResponse loanResponse = loanTransactionHelper.applyLoan(applicationRequest);
-            Long loanId = loanResponse.getLoanId();
+            Long loanId = applyForLoan(applicationRequest);
 
-            GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals(5, loanDetails.getFixedLength());
         });
     }
@@ -114,11 +102,10 @@
     private PostLoanProductsRequest fixedLengthLoanProduct(Integer fixedLength) {
         return createOnePeriod30DaysLongNoInterestPeriodicAccrualProductWithAdvancedPaymentAllocation() //
                 .numberOfRepayments(4).repaymentEvery(1) //
-                .repaymentFrequencyType(RepaymentFrequencyType.MONTHS.longValue()) //
-                .loanScheduleType(LoanScheduleType.PROGRESSIVE.toString()) //
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.MONTHS.longValue()) //
+                .loanScheduleType("PROGRESSIVE") //
                 .transactionProcessingStrategyCode(AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY) //
-                .loanScheduleProcessingType(LoanScheduleProcessingType.HORIZONTAL.name()) //
+                .loanScheduleProcessingType("HORIZONTAL") //
                 .interestRatePerPeriod(0.0).fixedLength(fixedLength);
     }
-
 }
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDueCalculationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDueCalculationTest.java
index bb1b928..b30fbd0 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDueCalculationTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDueCalculationTest.java
@@ -24,10 +24,9 @@
 import java.time.LocalDate;
 import java.util.stream.Stream;
 import org.apache.fineract.client.models.PostLoanProductsRequest;
-import org.apache.fineract.client.models.PostLoanProductsResponse;
 import org.apache.fineract.client.models.PostLoansRequest;
-import org.apache.fineract.client.models.PostLoansResponse;
-import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanTestData;
 import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.AdvancedPaymentScheduleTransactionProcessor;
 import org.apache.fineract.portfolio.loanproduct.domain.RepaymentStartDateType;
 import org.junit.jupiter.api.Named;
@@ -35,7 +34,7 @@
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
-public class LoanDueCalculationTest extends BaseLoanIntegrationTest {
+public class LoanDueCalculationTest extends FeignLoanTestBase {
 
     private static Stream<Arguments> processingStrategy() {
         return Stream.of(
@@ -51,37 +50,35 @@
     @MethodSource("processingStrategy")
     public void dueDateBasedOnFirstRepaymentDate(String repaymentProcessor) {
         runAt("2 February 2024", () -> {
-            // Client and Loan account creation
-            final Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            final Long clientId = createClient();
             PostLoanProductsRequest loanProductsRequest = create4Period1MonthLongWithoutInterestProduct(repaymentProcessor);
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductResponse.getResourceId(), "2024-01-31", 1000.0, 4,
-                    (postLoansRequest) -> {
-                        postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
-                                .loanTermFrequency(4).loanTermFrequencyType(2).dateFormat("yyyy-MM-dd")
-                                .repaymentsStartingFromDate(LocalDate.of(2024, 2, 29));
-                    });
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(loanRequest);
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductId, "2024-01-31", 1000.0, 4, (postLoansRequest) -> {
+                postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
+                        .loanTermFrequency(4).loanTermFrequencyType(2).dateFormat(LoanTestData.ISO_DATE_PATTERN)
+                        .repaymentsStartingFromDate(LocalDate.of(2024, 2, 29));
+            });
+            Long loanId = applyForLoan(loanRequest);
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "29 March 2024"), //
                     installment(250.0, false, "29 April 2024"), //
                     installment(250.0, false, "29 May 2024")) //
             ;
 
-            loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(), approveLoanRequest(1000.0, "31 January 2024"));
+            approveLoan(loanId, approveLoanRequest(1000.0, "31 January 2024"));
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "29 March 2024"), //
                     installment(250.0, false, "29 April 2024"), //
                     installment(250.0, false, "29 May 2024")) //
             ;
 
-            disburseLoan(postLoansResponse.getLoanId(), BigDecimal.valueOf(1000.00), "31 January 2024");
+            disburseLoan(loanId, BigDecimal.valueOf(1000.00), "31 January 2024");
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "29 March 2024"), //
                     installment(250.0, false, "29 April 2024"), //
@@ -100,37 +97,35 @@
     @MethodSource("processingStrategy")
     public void dueDateBasedOnExpectedDisbursementDate(String repaymentProcessor) {
         runAt("31 March 2024", () -> {
-            // Client and Loan account creation
-            final Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            final Long clientId = createClient();
             PostLoanProductsRequest loanProductsRequest = create4Period1MonthLongWithoutInterestProduct(repaymentProcessor)
                     .repaymentStartDateType(RepaymentStartDateType.DISBURSEMENT_DATE.getValue());
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductResponse.getResourceId(), "2024-01-30", 1000.0, 4,
-                    (postLoansRequest) -> {
-                        postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
-                                .loanTermFrequency(4).loanTermFrequencyType(2).dateFormat("yyyy-MM-dd");
-                    });
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(loanRequest);
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "30 January 2024"), //
+            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductId, "2024-01-30", 1000.0, 4, (postLoansRequest) -> {
+                postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
+                        .loanTermFrequency(4).loanTermFrequencyType(2).dateFormat(LoanTestData.ISO_DATE_PATTERN);
+            });
+            Long loanId = applyForLoan(loanRequest);
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "30 January 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "30 March 2024"), //
                     installment(250.0, false, "30 April 2024"), //
                     installment(250.0, false, "30 May 2024")) //
             ;
 
-            loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(), approveLoanRequest(1000.0, "30 January 2024"));
+            approveLoan(loanId, approveLoanRequest(1000.0, "30 January 2024"));
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "30 January 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "30 January 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "30 March 2024"), //
                     installment(250.0, false, "30 April 2024"), //
                     installment(250.0, false, "30 May 2024")) //
             ;
 
-            disburseLoan(postLoansResponse.getLoanId(), BigDecimal.valueOf(1000.00), "31 March 2024");
+            disburseLoan(loanId, BigDecimal.valueOf(1000.00), "31 March 2024");
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 March 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 March 2024"), //
                     installment(250.0, false, "30 April 2024"), //
                     installment(250.0, false, "31 May 2024"), //
                     installment(250.0, false, "30 June 2024"), //
@@ -148,19 +143,18 @@
     @MethodSource("processingStrategy")
     public void dueDateBasedOnSubmittedOnDate(String repaymentProcessor) {
         runAt("03 February 2024", () -> {
-            // Client and Loan account creation
-            final Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            final Long clientId = createClient();
             PostLoanProductsRequest loanProductsRequest = create4Period1MonthLongWithoutInterestProduct(repaymentProcessor)
                     .repaymentStartDateType(RepaymentStartDateType.SUBMITTED_ON_DATE.getValue());
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductResponse.getResourceId(), "2024-02-01", 1000.0, 4,
-                    (postLoansRequest) -> {
-                        postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
-                                .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31").dateFormat("yyyy-MM-dd");
-                    });
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(loanRequest);
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), //
+            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductId, "2024-02-01", 1000.0, 4, (postLoansRequest) -> {
+                postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
+                        .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31")
+                        .dateFormat(LoanTestData.ISO_DATE_PATTERN);
+            });
+            Long loanId = applyForLoan(loanRequest);
+            verifyRepaymentSchedule(loanId, //
                     installment(1000.0, null, "01 February 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "31 March 2024"), //
@@ -168,9 +162,9 @@
                     installment(250.0, false, "31 May 2024")) //
             ;
 
-            loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(), approveLoanRequest(1000.0, "31 January 2024"));
+            approveLoan(loanId, approveLoanRequest(1000.0, "31 January 2024"));
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), //
+            verifyRepaymentSchedule(loanId, //
                     installment(1000.0, null, "01 February 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "31 March 2024"), //
@@ -178,9 +172,9 @@
                     installment(250.0, false, "31 May 2024")) //
             ;
 
-            disburseLoan(postLoansResponse.getLoanId(), BigDecimal.valueOf(1000.00), "03 February 2024");
+            disburseLoan(loanId, BigDecimal.valueOf(1000.00), "03 February 2024");
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), //
+            verifyRepaymentSchedule(loanId, //
                     installment(1000.0, null, "03 February 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "31 March 2024"), //
@@ -198,38 +192,37 @@
     @MethodSource("processingStrategy")
     public void dueDateBasedOnSubmittedOnDateButThereShallBeMinimumDaysBetweenDisbursementAndFirstRepayment(String repaymentProcessor) {
         runAt("31 January 2024", () -> {
-            // Client and Loan account creation
-            final Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            final Long clientId = createClient();
             PostLoanProductsRequest loanProductsRequest = create4Period1MonthLongWithoutInterestProduct(repaymentProcessor)
                     .repaymentStartDateType(RepaymentStartDateType.SUBMITTED_ON_DATE.getValue())
                     .minimumDaysBetweenDisbursalAndFirstRepayment(10);
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductResponse.getResourceId(), "2024-02-26", 1000.0, 4,
-                    (postLoansRequest) -> {
-                        postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
-                                .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31").dateFormat("yyyy-MM-dd");
-                    });
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(loanRequest);
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "26 February 2024"), //
+            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductId, "2024-02-26", 1000.0, 4, (postLoansRequest) -> {
+                postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
+                        .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31")
+                        .dateFormat(LoanTestData.ISO_DATE_PATTERN);
+            });
+            Long loanId = applyForLoan(loanRequest);
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "26 February 2024"), //
                     installment(250.0, false, "07 March 2024"), //
                     installment(250.0, false, "07 April 2024"), //
                     installment(250.0, false, "07 May 2024"), //
                     installment(250.0, false, "07 June 2024")) //
             ;
 
-            loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(), approveLoanRequest(1000.0, "31 January 2024"));
+            approveLoan(loanId, approveLoanRequest(1000.0, "31 January 2024"));
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "26 February 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "26 February 2024"), //
                     installment(250.0, false, "07 March 2024"), //
                     installment(250.0, false, "07 April 2024"), //
                     installment(250.0, false, "07 May 2024"), //
                     installment(250.0, false, "07 June 2024")) //
             ;
 
-            disburseLoan(postLoansResponse.getLoanId(), BigDecimal.valueOf(1000.00), "31 January 2024");
+            disburseLoan(loanId, BigDecimal.valueOf(1000.00), "31 January 2024");
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "07 March 2024"), //
                     installment(250.0, false, "07 April 2024"), //
                     installment(250.0, false, "07 May 2024"), //
@@ -247,38 +240,37 @@
     public void dueDateBasedOnExpectedDisbursalDateButThereShallBeMinimumDaysBetweenDisbursementAndFirstRepayment(
             String repaymentProcessor) {
         runAt("31 January 2024", () -> {
-            // Client and Loan account creation
-            final Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            final Long clientId = createClient();
             PostLoanProductsRequest loanProductsRequest = create4Period1MonthLongWithoutInterestProduct(repaymentProcessor)
                     .repaymentStartDateType(RepaymentStartDateType.DISBURSEMENT_DATE.getValue())
                     .minimumDaysBetweenDisbursalAndFirstRepayment(36);
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductResponse.getResourceId(), "2024-01-31", 1000.0, 4,
-                    (postLoansRequest) -> {
-                        postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
-                                .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31").dateFormat("yyyy-MM-dd");
-                    });
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(loanRequest);
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductId, "2024-01-31", 1000.0, 4, (postLoansRequest) -> {
+                postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
+                        .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31")
+                        .dateFormat(LoanTestData.ISO_DATE_PATTERN);
+            });
+            Long loanId = applyForLoan(loanRequest);
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "07 March 2024"), //
                     installment(250.0, false, "07 April 2024"), //
                     installment(250.0, false, "07 May 2024"), //
                     installment(250.0, false, "07 June 2024")) //
             ;
 
-            loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(), approveLoanRequest(1000.0, "31 January 2024"));
+            approveLoan(loanId, approveLoanRequest(1000.0, "31 January 2024"));
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "07 March 2024"), //
                     installment(250.0, false, "07 April 2024"), //
                     installment(250.0, false, "07 May 2024"), //
                     installment(250.0, false, "07 June 2024")) //
             ;
 
-            disburseLoan(postLoansResponse.getLoanId(), BigDecimal.valueOf(1000.00), "31 January 2024");
+            disburseLoan(loanId, BigDecimal.valueOf(1000.00), "31 January 2024");
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), installment(1000.0, null, "31 January 2024"), //
+            verifyRepaymentSchedule(loanId, installment(1000.0, null, "31 January 2024"), //
                     installment(250.0, false, "07 March 2024"), //
                     installment(250.0, false, "07 April 2024"), //
                     installment(250.0, false, "07 May 2024"), //
@@ -297,19 +289,18 @@
     @MethodSource("processingStrategy")
     public void dueDateBasedOnSubmittedOnDateButChangingExpectedDisbursementAtApproval(String repaymentProcessor) {
         runAt("03 February 2024", () -> {
-            // Client and Loan account creation
-            final Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            final Long clientId = createClient();
             PostLoanProductsRequest loanProductsRequest = create4Period1MonthLongWithoutInterestProduct(repaymentProcessor)
                     .repaymentStartDateType(RepaymentStartDateType.SUBMITTED_ON_DATE.getValue());
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductResponse.getResourceId(), "2024-02-01", 1000.0, 4,
-                    (postLoansRequest) -> {
-                        postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
-                                .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31").dateFormat("yyyy-MM-dd");
-                    });
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(loanRequest);
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), //
+            PostLoansRequest loanRequest = applyLoanRequest(clientId, loanProductId, "2024-02-01", 1000.0, 4, (postLoansRequest) -> {
+                postLoansRequest.transactionProcessingStrategyCode(repaymentProcessor).repaymentEvery(1).repaymentFrequencyType(2)
+                        .loanTermFrequency(4).loanTermFrequencyType(2).submittedOnDate("2024-01-31")
+                        .dateFormat(LoanTestData.ISO_DATE_PATTERN);
+            });
+            Long loanId = applyForLoan(loanRequest);
+            verifyRepaymentSchedule(loanId, //
                     installment(1000.0, null, "01 February 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "31 March 2024"), //
@@ -317,10 +308,9 @@
                     installment(250.0, false, "31 May 2024")) //
             ;
 
-            loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(),
-                    approveLoanRequest(1000.0, "31 January 2024", "02 February 2024"));
+            approveLoan(loanId, approveLoanRequest(1000.0, "31 January 2024", "02 February 2024"));
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), //
+            verifyRepaymentSchedule(loanId, //
                     installment(1000.0, null, "02 February 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "31 March 2024"), //
@@ -328,9 +318,9 @@
                     installment(250.0, false, "31 May 2024")) //
             ;
 
-            disburseLoan(postLoansResponse.getLoanId(), BigDecimal.valueOf(1000.00), "03 February 2024");
+            disburseLoan(loanId, BigDecimal.valueOf(1000.00), "03 February 2024");
 
-            verifyRepaymentSchedule(postLoansResponse.getLoanId(), //
+            verifyRepaymentSchedule(loanId, //
                     installment(1000.0, null, "03 February 2024"), //
                     installment(250.0, false, "29 February 2024"), //
                     installment(250.0, false, "31 March 2024"), //
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanInterestRateFrequencyTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanInterestRateFrequencyTest.java
index 356b59e..090f39d 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanInterestRateFrequencyTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanInterestRateFrequencyTest.java
@@ -18,47 +18,43 @@
  */
 package org.apache.fineract.integrationtests;
 
+import static org.apache.fineract.integrationtests.client.feign.modules.LoanTestData.DATETIME_PATTERN;
 import static org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.fineract.client.models.AdvancedPaymentData;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
 import org.apache.fineract.client.models.PaymentAllocationOrder;
 import org.apache.fineract.client.models.PostLoanProductsRequest;
-import org.apache.fineract.client.models.PostLoanProductsResponse;
 import org.apache.fineract.client.models.PostLoansLoanIdResponse;
 import org.apache.fineract.client.models.PostLoansRequest;
-import org.apache.fineract.client.models.PostLoansResponse;
-import org.apache.fineract.integrationtests.common.ClientHelper;
-import org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanRequestBuilders;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanTestData;
 import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
 
 @Slf4j
-@ExtendWith({ LoanTestLifecycleExtension.class })
-public class LoanInterestRateFrequencyTest extends BaseLoanIntegrationTest {
+public class LoanInterestRateFrequencyTest extends FeignLoanTestBase {
 
     @Test
     public void testProgressiveInterestRateTypeWholeTerm() {
         runAt("15 April 2024", () -> {
-            // Create Client
-            Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+            Long clientId = createClient();
 
-            // Create Loan Product
             PostLoanProductsRequest loanProductsRequest = createLoanProductWithInterestCalculation();
-            PostLoanProductsResponse loanProductResponse = loanProductHelper.createLoanProduct(loanProductsRequest);
+            Long loanProductId = createLoanProduct(loanProductsRequest);
 
-            // Apply and Approve Loan
-            Long loanId = applyAndApproveLoanApplication(clientId, loanProductResponse.getResourceId(), "15 April 2024", 1000.0, 6);
+            Long loanId = applyAndApproveLoanApplication(clientId, loanProductId, "15 April 2024", 1000.0, 6);
 
-            // Disburse Loan
             disburseLoan(loanId, BigDecimal.valueOf(1000), "15 April 2024");
 
-            GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals(loanDetails.getInterestRateFrequencyType().getCode(),
                     "interestRateFrequency.periodFrequencyType.whole_term");
             Assertions.assertEquals(loanDetails.getAnnualInterestRate(), new BigDecimal("20.000000"));
@@ -71,23 +67,22 @@
         PostLoansRequest postLoansRequest = new PostLoansRequest().clientId(clientId).productId(productId)
                 .expectedDisbursementDate(disbursementDate).dateFormat(DATETIME_PATTERN) //
                 .transactionProcessingStrategyCode(ADVANCED_PAYMENT_ALLOCATION_STRATEGY) //
-                .locale("en") //
+                .locale(LoanTestData.LOCALE) //
                 .submittedOnDate(disbursementDate) //
-                .amortizationType(AmortizationType.EQUAL_INSTALLMENTS) //
+                .amortizationType(LoanTestData.AmortizationType.EQUAL_INSTALLMENTS) //
                 .interestRatePerPeriod(new BigDecimal(10.0)) //
-                .interestCalculationPeriodType(InterestCalculationPeriodType.SAME_AS_REPAYMENT_PERIOD) //
-                .interestType(InterestType.DECLINING_BALANCE) //
+                .interestCalculationPeriodType(LoanTestData.InterestCalculationPeriodType.SAME_AS_REPAYMENT_PERIOD) //
+                .interestType(LoanTestData.InterestType.DECLINING_BALANCE) //
                 .repaymentEvery(1) //
-                .repaymentFrequencyType(RepaymentFrequencyType.MONTHS) //
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.MONTHS) //
                 .numberOfRepayments(numberOfRepayments) //
                 .loanTermFrequency(numberOfRepayments) //
                 .loanTermFrequencyType(2) //
                 .maxOutstandingLoanBalance(BigDecimal.valueOf(amount)) //
                 .principal(BigDecimal.valueOf(amount)) //
                 .loanType("individual");
-        PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(postLoansRequest);
-        PostLoansLoanIdResponse approvedLoanResult = loanTransactionHelper.approveLoan(postLoansResponse.getResourceId(),
-                approveLoanRequest(amount, disbursementDate));
+        Long loanId = applyForLoan(postLoansRequest);
+        PostLoansLoanIdResponse approvedLoanResult = approveLoan(loanId, LoanRequestBuilders.approveLoan(amount, disbursementDate));
         return approvedLoanResult.getLoanId();
     }
 
@@ -98,18 +93,18 @@
                 .overAppliedCalculationType(null)//
                 .overAppliedNumber(null)//
                 .transactionProcessingStrategyCode(ADVANCED_PAYMENT_ALLOCATION_STRATEGY) //
-                .paymentAllocation(List.of(createDefaultPaymentAllocation(), createRepaymentPaymentAllocation())) //
+                .paymentAllocation(List.of(LoanRequestBuilders.defaultPaymentAllocation(), createRepaymentPaymentAllocation())) //
                 .loanScheduleType("PROGRESSIVE") //
                 .loanScheduleProcessingType("HORIZONTAL") //
                 .principal(1000.0)//
                 .numberOfRepayments(6)//
                 .repaymentEvery(1)//
-                .repaymentFrequencyType(RepaymentFrequencyType.MONTHS.longValue())//
-                .interestType(BaseLoanIntegrationTest.InterestType.DECLINING_BALANCE)//
-                .amortizationType(BaseLoanIntegrationTest.AmortizationType.EQUAL_INSTALLMENTS)//
-                .interestCalculationPeriodType(BaseLoanIntegrationTest.InterestCalculationPeriodType.SAME_AS_REPAYMENT_PERIOD)//
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.MONTHS.longValue())//
+                .interestType(LoanTestData.InterestType.DECLINING_BALANCE)//
+                .amortizationType(LoanTestData.AmortizationType.EQUAL_INSTALLMENTS)//
+                .interestCalculationPeriodType(LoanTestData.InterestCalculationPeriodType.SAME_AS_REPAYMENT_PERIOD)//
                 .interestRatePerPeriod(10.0) //
-                .interestRateFrequencyType(InterestRateFrequencyType.WHOLE_TERM)//
+                .interestRateFrequencyType(LoanTestData.InterestRateFrequencyType.WHOLE_TERM)//
                 .isInterestRecalculationEnabled(false);
     }
 
@@ -118,11 +113,14 @@
         advancedPaymentData.setTransactionType("REPAYMENT");
         advancedPaymentData.setFutureInstallmentAllocationRule("NEXT_INSTALLMENT");
 
-        List<PaymentAllocationOrder> paymentAllocationOrders = getPaymentAllocationOrder(PaymentAllocationType.PAST_DUE_PENALTY,
-                PaymentAllocationType.PAST_DUE_FEE, PaymentAllocationType.PAST_DUE_INTEREST, PaymentAllocationType.PAST_DUE_PRINCIPAL,
-                PaymentAllocationType.DUE_PENALTY, PaymentAllocationType.DUE_FEE, PaymentAllocationType.DUE_INTEREST,
-                PaymentAllocationType.DUE_PRINCIPAL, PaymentAllocationType.IN_ADVANCE_PENALTY, PaymentAllocationType.IN_ADVANCE_FEE,
-                PaymentAllocationType.IN_ADVANCE_PRINCIPAL, PaymentAllocationType.IN_ADVANCE_INTEREST);
+        AtomicInteger order = new AtomicInteger(1);
+        List<PaymentAllocationOrder> paymentAllocationOrders = Arrays
+                .stream(new PaymentAllocationType[] { PaymentAllocationType.PAST_DUE_PENALTY, PaymentAllocationType.PAST_DUE_FEE,
+                        PaymentAllocationType.PAST_DUE_INTEREST, PaymentAllocationType.PAST_DUE_PRINCIPAL,
+                        PaymentAllocationType.DUE_PENALTY, PaymentAllocationType.DUE_FEE, PaymentAllocationType.DUE_INTEREST,
+                        PaymentAllocationType.DUE_PRINCIPAL, PaymentAllocationType.IN_ADVANCE_PENALTY, PaymentAllocationType.IN_ADVANCE_FEE,
+                        PaymentAllocationType.IN_ADVANCE_PRINCIPAL, PaymentAllocationType.IN_ADVANCE_INTEREST })
+                .map(pat -> new PaymentAllocationOrder().paymentAllocationRule(pat.name()).order(order.getAndIncrement())).toList();
 
         advancedPaymentData.setPaymentAllocationOrder(paymentAllocationOrders);
         return advancedPaymentData;
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanPrepayAmountTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanPrepayAmountTest.java
index 3c81b5d..c86c56f 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanPrepayAmountTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanPrepayAmountTest.java
@@ -18,33 +18,39 @@
  */
 package org.apache.fineract.integrationtests;
 
+import static org.apache.fineract.integrationtests.client.feign.modules.LoanTestData.DATETIME_PATTERN;
+
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
-import java.util.List;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdTransactionsTemplateResponse;
-import org.apache.fineract.client.models.PostLoanProductsResponse;
-import org.apache.fineract.client.models.PostLoansResponse;
-import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanRequestBuilders;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 @Slf4j
-public class LoanPrepayAmountTest extends BaseLoanIntegrationTest {
+public class LoanPrepayAmountTest extends FeignLoanTestBase {
 
-    Long clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+    Long clientId;
     Long loanId;
 
+    @BeforeEach
+    public void setup() {
+        clientId = createClient();
+    }
+
     @Test
     public void testLoanPrepayAmountProgressive() {
         runAt("1 January 2024", () -> {
-            final PostLoanProductsResponse loanProductsResponse = loanProductHelper.createLoanProduct(create4IProgressive());
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(applyLP2ProgressiveLoanRequest(clientId,
-                    loanProductsResponse.getResourceId(), "01 January 2024", 1000.0, 9.99, 6, null));
-            loanId = postLoansResponse.getLoanId();
-            loanTransactionHelper.approveLoan(loanId, approveLoanRequest(1000.0, "01 January 2024"));
+            final Long loanProductId = createLoanProduct(create4IProgressive());
+            Long loanIdLocal = applyForLoan(
+                    applyLP2ProgressiveLoanRequest(clientId, loanProductId, "01 January 2024", 1000.0, 9.99, 6, null));
+            loanId = loanIdLocal;
+            approveLoan(loanId, LoanRequestBuilders.approveLoan(1000.0, "01 January 2024"));
             disburseLoan(loanId, BigDecimal.valueOf(250.0), "01 January 2024");
         });
         runAt("7 january 2024", () -> {
@@ -53,9 +59,8 @@
         });
         for (int i = 7; i <= 31; i++) {
             runAt(i + " January 2024", () -> {
-                GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
-                GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = loanTransactionHelper.getPrepaymentAmount(loanId, null,
-                        DATETIME_PATTERN);
+                GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
+                GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = getPrepaymentAmount(loanId, null, DATETIME_PATTERN);
                 Assertions.assertEquals(BigDecimal.valueOf(prepayAmountResponse.getInterestPortion()).stripTrailingZeros(),
                         loanDetails.getSummary().getTotalUnpaidPayableNotDueInterest().stripTrailingZeros());
             });
@@ -65,32 +70,32 @@
     @Test
     public void testLoanPrepayAmountProgressivePartialRepayment() {
         runAt("15 March 2025", () -> {
-            final PostLoanProductsResponse loanProductsResponse = loanProductHelper.createLoanProduct(
+            final Long loanProductId = createLoanProduct(
                     create4IProgressive().interestRatePerPeriod(35.99).numberOfRepayments(12).isInterestRecalculationEnabled(true));
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(applyLP2ProgressiveLoanRequest(clientId,
-                    loanProductsResponse.getResourceId(), "15 March 2025", 296.79, 35.99, 12, null));
-            loanId = postLoansResponse.getLoanId();
-            loanTransactionHelper.approveLoan(loanId, approveLoanRequest(296.79, "15 March 2025"));
+            Long loanIdLocal = applyForLoan(
+                    applyLP2ProgressiveLoanRequest(clientId, loanProductId, "15 March 2025", 296.79, 35.99, 12, null));
+            loanId = loanIdLocal;
+            approveLoan(loanId, LoanRequestBuilders.approveLoan(296.79, "15 March 2025"));
             disburseLoan(loanId, BigDecimal.valueOf(296.79), "15 March 2025");
         });
         runAt("16 March 2025", () -> {
-            loanTransactionHelper.makeLoanRepayment(loanId, "Repayment", "16 March 2025", 59.0);
-            GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            addRepaymentForLoan(loanId, 59.0, "16 March 2025");
+            GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals(BigDecimal.ZERO, loanDetails.getSummary().getTotalUnpaidPayableDueInterest().stripTrailingZeros());
             Assertions.assertEquals(BigDecimal.ZERO, loanDetails.getSummary().getTotalUnpaidPayableNotDueInterest().stripTrailingZeros());
-            GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = loanTransactionHelper.getPrepaymentAmount(loanId,
-                    "16 March 2025", DATETIME_PATTERN);
+            GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = getPrepaymentAmount(loanId, "16 March 2025",
+                    DATETIME_PATTERN);
             Assertions.assertEquals(BigDecimal.valueOf(prepayAmountResponse.getInterestPortion()).stripTrailingZeros(),
                     loanDetails.getSummary().getTotalUnpaidPayableNotDueInterest());
         });
         for (int i = 1; i < 4; i++) {
-            inlineLoanCOBHelper.executeInlineCOB(List.of(loanId));
+            executeInlineCOB(loanId);
             LocalDate date = LocalDate.of(2025, 3, 17).plusDays(i * 11);
             String formattedDate = DateTimeFormatter.ofPattern(DATETIME_PATTERN).format(date);
             runAt(formattedDate, () -> {
-                GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
-                GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = loanTransactionHelper.getPrepaymentAmount(loanId,
-                        formattedDate, DATETIME_PATTERN);
+                GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
+                GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = getPrepaymentAmount(loanId, formattedDate,
+                        DATETIME_PATTERN);
                 Assertions.assertEquals(loanDetails.getSummary().getTotalUnpaidPayableNotDueInterest().stripTrailingZeros(),
                         BigDecimal.valueOf(prepayAmountResponse.getInterestPortion()).stripTrailingZeros());
             });
@@ -100,22 +105,22 @@
     @Test
     public void testLoanPrepayAmountProgressivePartialRepaymentNoInterestRecalculation() {
         runAt("15 March 2025", () -> {
-            final PostLoanProductsResponse loanProductsResponse = loanProductHelper.createLoanProduct(
+            final Long loanProductId = createLoanProduct(
                     create4IProgressive().interestRatePerPeriod(35.99).numberOfRepayments(12).isInterestRecalculationEnabled(false));
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(applyLP2ProgressiveLoanRequest(clientId,
-                    loanProductsResponse.getResourceId(), "15 March 2025", 296.79, 35.99, 12, null));
-            loanId = postLoansResponse.getLoanId();
-            loanTransactionHelper.approveLoan(loanId, approveLoanRequest(296.79, "15 March 2025"));
+            Long loanIdLocal = applyForLoan(
+                    applyLP2ProgressiveLoanRequest(clientId, loanProductId, "15 March 2025", 296.79, 35.99, 12, null));
+            loanId = loanIdLocal;
+            approveLoan(loanId, LoanRequestBuilders.approveLoan(296.79, "15 March 2025"));
             disburseLoan(loanId, BigDecimal.valueOf(296.79), "15 March 2025");
-            inlineLoanCOBHelper.executeInlineCOB(List.of(loanId));
+            executeInlineCOB(loanId);
         });
         runAt("16 March 2025", () -> {
-            loanTransactionHelper.makeLoanRepayment(loanId, "Repayment", "16 March 2025", 59.0);
-            GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            addRepaymentForLoan(loanId, 59.0, "16 March 2025");
+            GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals(BigDecimal.ZERO, loanDetails.getSummary().getTotalUnpaidPayableDueInterest().stripTrailingZeros());
             Assertions.assertEquals(BigDecimal.ZERO, loanDetails.getSummary().getTotalUnpaidPayableNotDueInterest().stripTrailingZeros());
-            GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = loanTransactionHelper.getPrepaymentAmount(loanId,
-                    "16 March 2025", DATETIME_PATTERN);
+            GetLoansLoanIdTransactionsTemplateResponse prepayAmountResponse = getPrepaymentAmount(loanId, "16 March 2025",
+                    DATETIME_PATTERN);
             Assertions.assertEquals(BigDecimal.valueOf(44.43).stripTrailingZeros(),
                     BigDecimal.valueOf(prepayAmountResponse.getInterestPortion()).stripTrailingZeros());
         });
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithChargeOffBehaviourTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithChargeOffBehaviourTest.java
index 363a310..f3937c6 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithChargeOffBehaviourTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithChargeOffBehaviourTest.java
@@ -21,15 +21,14 @@
 import java.math.BigDecimal;
 import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
-import org.apache.fineract.client.models.PostLoanProductsResponse;
-import org.apache.fineract.client.models.PostLoansResponse;
 import org.apache.fineract.client.models.PutLoanProductsProductIdRequest;
-import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.apache.fineract.integrationtests.client.feign.FeignLoanTestBase;
+import org.apache.fineract.integrationtests.client.feign.modules.LoanRequestBuilders;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-public class LoanProductWithChargeOffBehaviourTest extends BaseLoanIntegrationTest {
+public class LoanProductWithChargeOffBehaviourTest extends FeignLoanTestBase {
 
     private Long clientId;
     private Long loanProductId;
@@ -41,13 +40,10 @@
     @BeforeEach
     public void beforeEach() {
         runAt("01 June 2024", () -> {
-            clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
-            final PostLoanProductsResponse loanProductsResponse = loanProductHelper.createLoanProduct(create4IProgressive());
-            loanProductId = loanProductsResponse.getResourceId();
-            PostLoansResponse postLoansResponse = loanTransactionHelper.applyLoan(
-                    applyLP2ProgressiveLoanRequest(clientId, loanProductsResponse.getResourceId(), "01 June 2024", 1000.0, 10.0, 4, null));
-            loanId = postLoansResponse.getLoanId();
-            loanTransactionHelper.approveLoan(loanId, approveLoanRequest(1000.0, "01 June 2024"));
+            clientId = createClient();
+            loanProductId = createLoanProduct(create4IProgressive());
+            loanId = applyForLoan(applyLP2ProgressiveLoanRequest(clientId, loanProductId, "01 June 2024", 1000.0, 10.0, 4, null));
+            approveLoan(loanId, LoanRequestBuilders.approveLoan(1000.0, "01 June 2024"));
             disburseLoan(loanId, BigDecimal.valueOf(250.0), "01 June 2024");
         });
     }
@@ -55,15 +51,14 @@
     @Test
     public void testSavedToLoanNotChangingWithProduct() {
         runAt("01 June 2024", () -> {
-            GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals("REGULAR", loanDetails.getChargeOffBehaviour().getId());
 
-            loanProductHelper.updateLoanProductById(loanProductId,
-                    new PutLoanProductsProductIdRequest().chargeOffBehaviour("ZERO_INTEREST"));
-            final GetLoanProductsProductIdResponse loanProduct = loanTransactionHelper.getLoanProduct(loanProductId.intValue());
+            updateLoanProduct(loanProductId, new PutLoanProductsProductIdRequest().chargeOffBehaviour("ZERO_INTEREST"));
+            final GetLoanProductsProductIdResponse loanProduct = retrieveLoanProduct(loanProductId);
             Assertions.assertEquals("ZERO_INTEREST", loanProduct.getChargeOffBehaviour().getId());
 
-            loanDetails = loanTransactionHelper.getLoanDetails(loanId);
+            loanDetails = getLoanDetails(loanId);
             Assertions.assertEquals("REGULAR", loanDetails.getChargeOffBehaviour().getId());
         });
     }
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanTransactionPaymentTypeTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanTransactionPaymentTypeTest.java
new file mode 100644
index 0000000..0355415
--- /dev/null
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanTransactionPaymentTypeTest.java
@@ -0,0 +1,276 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
+import org.apache.fineract.client.models.GetWorkingCapitalLoanTransactionIdResponse;
+import org.apache.fineract.client.models.GetWorkingCapitalLoanTransactionsResponse;
+import org.apache.fineract.client.models.PostWorkingCapitalLoansRequest;
+import org.apache.fineract.integrationtests.common.BusinessDateHelper;
+import org.apache.fineract.integrationtests.common.ClientHelper;
+import org.apache.fineract.integrationtests.common.workingcapitalloan.WorkingCapitalLoanApplicationTestBuilder;
+import org.apache.fineract.integrationtests.common.workingcapitalloan.WorkingCapitalLoanDisbursementTestBuilder;
+import org.apache.fineract.integrationtests.common.workingcapitalloan.WorkingCapitalLoanHelper;
+import org.apache.fineract.integrationtests.common.workingcapitalloanproduct.WorkingCapitalLoanProductHelper;
+import org.apache.fineract.integrationtests.common.workingcapitalloanproduct.WorkingCapitalLoanProductTestBuilder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
+
+public class WorkingCapitalLoanTransactionPaymentTypeTest {
+
+    private static final int PAYMENT_TYPE_ID = 1;
+    private static final int INVALID_PAYMENT_TYPE_ID = 999999;
+    private static final LocalDate DEFAULT_DATE = LocalDate.of(2026, 1, 1);
+
+    private final WorkingCapitalLoanHelper loanHelper = new WorkingCapitalLoanHelper();
+    private final WorkingCapitalLoanProductHelper productHelper = new WorkingCapitalLoanProductHelper();
+    private final List<Long> createdLoanIds = new ArrayList<>();
+    private final List<Long> createdProductIds = new ArrayList<>();
+    private final Long createdClientId = ClientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId();
+
+    @AfterEach
+    void cleanup() {
+        for (final Long loanId : createdLoanIds) {
+            if (loanId == null) {
+                continue;
+            }
+            try {
+                loanHelper.undoDisbursalById(loanId, WorkingCapitalLoanDisbursementTestBuilder.buildUndoDisburseRequest());
+            } catch (final CallFailedRuntimeException ignored) {
+                // best-effort cleanup
+            }
+            try {
+                loanHelper.undoApprovalById(loanId, WorkingCapitalLoanApplicationTestBuilder.buildUndoApproveRequest());
+            } catch (final CallFailedRuntimeException ignored) {
+                // best-effort cleanup
+            }
+            try {
+                loanHelper.deleteById(loanId);
+            } catch (final CallFailedRuntimeException ignored) {
+                // best-effort cleanup
+            }
+        }
+        createdLoanIds.clear();
+        for (final Long productId : createdProductIds) {
+            if (productId == null) {
+                continue;
+            }
+            try {
+                productHelper.deleteWorkingCapitalLoanProductById(productId);
+            } catch (final CallFailedRuntimeException ignored) {
+                // best-effort cleanup
+            }
+        }
+        createdProductIds.clear();
+    }
+
+    // -------------------------------------------------------------------------
+    // Repayment
+    // -------------------------------------------------------------------------
+
+    @Test
+    public void testRepaymentWithPaymentTypeIsStoredAndReturnedInList() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE), () -> loanHelper.makeRepaymentByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, PAYMENT_TYPE_ID, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse repayment = findRepayment(loanId);
+        assertNotNull(repayment.getPaymentDetailData(), "paymentDetailData must not be null after repayment with payment type");
+        assertNotNull(repayment.getPaymentDetailData().getPaymentType(), "paymentType must be populated");
+        assertEquals(Long.valueOf(PAYMENT_TYPE_ID), repayment.getPaymentDetailData().getPaymentType().getId());
+    }
+
+    @Test
+    public void testRepaymentWithPaymentTypeIsReturnedOnPointGet() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE), () -> loanHelper.makeRepaymentByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, PAYMENT_TYPE_ID, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse repaymentFromList = findRepayment(loanId);
+        final Long transactionId = repaymentFromList.getId();
+
+        final GetWorkingCapitalLoanTransactionIdResponse repaymentFromGet = loanHelper.retrieveTransactionByLoanIdAndTransactionId(loanId,
+                transactionId);
+
+        assertNotNull(repaymentFromGet.getPaymentDetailData(), "paymentDetailData must be present on point GET");
+        assertNotNull(repaymentFromGet.getPaymentDetailData().getPaymentType(), "paymentType must be present on point GET");
+        assertEquals(Long.valueOf(PAYMENT_TYPE_ID), repaymentFromGet.getPaymentDetailData().getPaymentType().getId());
+    }
+
+    @Test
+    public void testRepaymentWithoutPaymentTypeHasNullPaymentDetail() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE), () -> loanHelper.makeRepaymentByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, null, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse repayment = findRepayment(loanId);
+        assertNull(repayment.getPaymentDetailData(), "paymentDetailData must be null when no payment type was provided");
+    }
+
+    @Test
+    public void testRepaymentWithInvalidPaymentTypeIdFails() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+        final CallFailedRuntimeException[] holder = new CallFailedRuntimeException[1];
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE),
+                () -> holder[0] = loanHelper.runRepaymentByLoanIdExpectingFailure(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                        .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, INVALID_PAYMENT_TYPE_ID, null)));
+
+        assertEquals(404, holder[0].getStatus(), "Repayment with non-existent paymentTypeId should return HTTP 404");
+    }
+
+    // -------------------------------------------------------------------------
+    // Credit balance refund
+    // -------------------------------------------------------------------------
+
+    @Test
+    public void testCreditBalanceRefundWithPaymentTypeIsStoredAndReturned() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        // Overpay to create credit balance
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE), () -> loanHelper.makeRepaymentByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(5200), null, null, null, null)));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE),
+                () -> loanHelper.makeCreditBalanceRefundByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                        .buildCreditBalanceRefundRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, PAYMENT_TYPE_ID, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse refund = findCreditBalanceRefund(loanId);
+        assertNotNull(refund, "Credit balance refund transaction must exist");
+        assertNotNull(refund.getPaymentDetailData(), "paymentDetailData must be present on credit balance refund");
+        assertNotNull(refund.getPaymentDetailData().getPaymentType());
+        assertEquals(Long.valueOf(PAYMENT_TYPE_ID), refund.getPaymentDetailData().getPaymentType().getId());
+    }
+
+    @Test
+    public void testCreditBalanceRefundWithoutPaymentTypeHasNullPaymentDetail() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        // Overpay to create credit balance
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE), () -> loanHelper.makeRepaymentByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(5200), null, null, null, null)));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE),
+                () -> loanHelper.makeCreditBalanceRefundByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                        .buildCreditBalanceRefundRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, null, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse refund = findCreditBalanceRefund(loanId);
+        assertNotNull(refund, "Credit balance refund transaction must exist");
+        assertNull(refund.getPaymentDetailData(), "paymentDetailData must be null when no payment type was provided");
+    }
+
+    // -------------------------------------------------------------------------
+    // Goodwill credit
+    // -------------------------------------------------------------------------
+
+    @Test
+    public void testGoodwillCreditWithPaymentTypeIsStoredAndReturned() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE),
+                () -> loanHelper.makeGoodwillCreditByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                        .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, PAYMENT_TYPE_ID, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse txn = findGoodwillCredit(loanId);
+        assertNotNull(txn, "Goodwill credit transaction must exist");
+        assertNotNull(txn.getPaymentDetailData(), "paymentDetailData must be present on goodwill credit");
+        assertNotNull(txn.getPaymentDetailData().getPaymentType());
+        assertEquals(Long.valueOf(PAYMENT_TYPE_ID), txn.getPaymentDetailData().getPaymentType().getId());
+    }
+
+    @Test
+    public void testGoodwillCreditWithoutPaymentTypeHasNullPaymentDetail() {
+        final Long loanId = createDisbursedLoan(BigDecimal.valueOf(5000));
+
+        BusinessDateHelper.runAt(fmt(DEFAULT_DATE),
+                () -> loanHelper.makeGoodwillCreditByLoanId(loanId, WorkingCapitalLoanDisbursementTestBuilder
+                        .buildRepaymentRequest(DEFAULT_DATE, BigDecimal.valueOf(100), null, null, null, null)));
+
+        final GetWorkingCapitalLoanTransactionIdResponse txn = findGoodwillCredit(loanId);
+        assertNotNull(txn, "Goodwill credit transaction must exist");
+        assertNull(txn.getPaymentDetailData(), "paymentDetailData must be null when no payment type was provided");
+    }
+
+    // -------------------------------------------------------------------------
+    // Helpers
+    // -------------------------------------------------------------------------
+
+    private Long createDisbursedLoan(final BigDecimal principal) {
+        return createDisbursedLoan(principal, DEFAULT_DATE);
+    }
+
+    private Long createDisbursedLoan(final BigDecimal principal, final LocalDate disbursementDate) {
+        final Long productId = createProduct();
+        final PostWorkingCapitalLoansRequest submitRequest = new WorkingCapitalLoanApplicationTestBuilder().withClientId(createdClientId)
+                .withProductId(productId).withPrincipal(principal).withSubmittedOnDate(disbursementDate)
+                .withPeriodPaymentRate(WorkingCapitalLoanProductTestBuilder.DEFAULT_PERIOD_PAYMENT_RATE_PERCENT).buildSubmitRequest();
+        final Long loanId = loanHelper.submit(submitRequest);
+        createdLoanIds.add(loanId);
+        loanHelper.approveById(loanId, WorkingCapitalLoanApplicationTestBuilder.buildApproveRequest(disbursementDate, principal, null));
+        loanHelper.disburseById(loanId, WorkingCapitalLoanDisbursementTestBuilder.buildDisburseRequest(disbursementDate, principal));
+        return loanId;
+    }
+
+    private Long createProduct() {
+        final String name = "WCL-PaymentType-" + UUID.randomUUID().toString().substring(0, 8);
+        final String shortName = UUID.randomUUID().toString().replace("-", "").substring(0, 4);
+        final Long productId = productHelper
+                .createWorkingCapitalLoanProduct(new WorkingCapitalLoanProductTestBuilder().withName(name).withShortName(shortName).build())
+                .getResourceId();
+        createdProductIds.add(productId);
+        return productId;
+    }
+
+    private GetWorkingCapitalLoanTransactionIdResponse findRepayment(final Long loanId) {
+        return findTransactionByType(loanId, "loanTransactionType.repayment");
+    }
+
+    private GetWorkingCapitalLoanTransactionIdResponse findCreditBalanceRefund(final Long loanId) {
+        return findTransactionByType(loanId, "loanTransactionType.creditBalanceRefund");
+    }
+
+    private GetWorkingCapitalLoanTransactionIdResponse findGoodwillCredit(final Long loanId) {
+        return findTransactionByType(loanId, "loanTransactionType.goodwillCredit");
+    }
+
+    private GetWorkingCapitalLoanTransactionIdResponse findTransactionByType(final Long loanId, final String typeCode) {
+        final GetWorkingCapitalLoanTransactionsResponse response = loanHelper.retrieveTransactionsByLoanId(loanId);
+        assertNotNull(response.getContent(), "Transaction list must not be null");
+        return response.getContent().stream()
+                .filter(txn -> Boolean.FALSE.equals(txn.getReversed()) && txn.getType() != null && typeCode.equals(txn.getType().getCode()))
+                .findFirst().orElse(null);
+    }
+
+    private String fmt(final LocalDate date) {
+        return date.format(DateTimeFormatter.ofPattern("dd MMMM yyyy"));
+    }
+}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/FeignLoanTestBase.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/FeignLoanTestBase.java
index cee6b17..316c55e 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/FeignLoanTestBase.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/FeignLoanTestBase.java
@@ -18,11 +18,14 @@
  */
 package org.apache.fineract.integrationtests.client.feign;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import org.apache.fineract.client.feign.FineractFeignClient;
 import org.apache.fineract.client.models.DeleteLoansLoanIdChargesChargeIdResponse;
+import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdChargesChargeIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdStatus;
@@ -39,6 +42,8 @@
 import org.apache.fineract.client.models.PostLoansLoanIdTransactionsResponse;
 import org.apache.fineract.client.models.PostLoansRequest;
 import org.apache.fineract.client.models.PostUpdateRescheduleLoansRequest;
+import org.apache.fineract.client.models.PutLoanProductsProductIdRequest;
+import org.apache.fineract.client.models.PutLoanProductsProductIdResponse;
 import org.apache.fineract.integrationtests.client.FeignIntegrationTest;
 import org.apache.fineract.integrationtests.client.feign.helpers.FeignAccountHelper;
 import org.apache.fineract.integrationtests.client.feign.helpers.FeignBusinessDateHelper;
@@ -120,6 +125,14 @@
         return loanHelper.createLoanProduct(request);
     }
 
+    protected GetLoanProductsProductIdResponse retrieveLoanProduct(Long productId) {
+        return loanHelper.retrieveLoanProduct(productId);
+    }
+
+    protected PutLoanProductsProductIdResponse updateLoanProduct(Long productId, PutLoanProductsProductIdRequest request) {
+        return loanHelper.updateLoanProduct(productId, request);
+    }
+
     protected Long applyForLoan(PostLoansRequest request) {
         return loanHelper.applyForLoan(request);
     }
@@ -128,6 +141,14 @@
         return loanHelper.approveLoan(loanId, request);
     }
 
+    protected PostLoansLoanIdRequest approveLoanRequest(Double amount, String approvalDate) {
+        return LoanRequestBuilders.approveLoan(amount, approvalDate);
+    }
+
+    protected PostLoansLoanIdRequest approveLoanRequest(Double amount, String approvalDate, String expectedDisbursementDate) {
+        return LoanRequestBuilders.approveLoan(amount, approvalDate, expectedDisbursementDate);
+    }
+
     protected PostLoansLoanIdResponse disburseLoan(Long loanId, PostLoansLoanIdRequest request) {
         return loanHelper.disburseLoan(loanId, request);
     }
@@ -227,11 +248,15 @@
     }
 
     protected void runAt(String date, Runnable action) {
-        businessDateHelper.runAt(date, action);
+        businessDateHelper.runAt(date, detectDateFormat(date), action);
     }
 
     protected void updateBusinessDate(String type, String date) {
-        businessDateHelper.updateBusinessDate(type, date);
+        businessDateHelper.updateBusinessDate(type, date, detectDateFormat(date));
+    }
+
+    private static String detectDateFormat(String date) {
+        return date.matches("\\d{4}-\\d{2}-\\d{2}") ? LoanTestData.ISO_DATE_PATTERN : LoanTestData.DATETIME_PATTERN;
     }
 
     protected void validateRepaymentPeriod(GetLoansLoanIdResponse loanDetails, Integer index, LocalDate dueDate, double principalDue,
@@ -337,4 +362,233 @@
             Integer numberOfInstallments) {
         return LoanRequestBuilders.reAge(startDate, frequencyType, frequencyNumber, numberOfInstallments);
     }
+
+    protected LoanTestData.TransactionExt transaction(double amount, String type, String date, double outstandingPrincipal,
+            double principalPortion, double interestPortion, double feePortion, double penaltyPortion, double unrecognizedIncomePortion,
+            double overpaymentPortion) {
+        return new LoanTestData.TransactionExt(amount, type, date, outstandingPrincipal, principalPortion, interestPortion, feePortion,
+                penaltyPortion, unrecognizedIncomePortion, overpaymentPortion, false);
+    }
+
+    protected LoanTestData.TransactionExt transaction(double amount, String type, String date, double outstandingPrincipal,
+            double principalPortion, double interestPortion, double feePortion, double penaltyPortion, double unrecognizedIncomePortion,
+            double overpaymentPortion, boolean reversed) {
+        return new LoanTestData.TransactionExt(amount, type, date, outstandingPrincipal, principalPortion, interestPortion, feePortion,
+                penaltyPortion, unrecognizedIncomePortion, overpaymentPortion, reversed);
+    }
+
+    protected LoanTestData.Installment installment(double principalAmount, Boolean completed, String dueDate) {
+        return new LoanTestData.Installment(principalAmount, null, null, null, null, completed, dueDate, null, null);
+    }
+
+    protected LoanTestData.Installment installment(double principalAmount, double interestAmount, double totalOutstandingAmount,
+            Boolean completed, String dueDate) {
+        return new LoanTestData.Installment(principalAmount, interestAmount, null, null, totalOutstandingAmount, completed, dueDate, null,
+                null);
+    }
+
+    protected LoanTestData.Installment installment(double principalAmount, double interestAmount, double feeAmount,
+            double totalOutstandingAmount, Boolean completed, String dueDate) {
+        return new LoanTestData.Installment(principalAmount, interestAmount, feeAmount, null, totalOutstandingAmount, completed, dueDate,
+                null, null);
+    }
+
+    protected LoanTestData.Installment installment(double principalAmount, double interestAmount, double feeAmount, double penaltyAmount,
+            double totalOutstandingAmount, Boolean completed, String dueDate) {
+        return new LoanTestData.Installment(principalAmount, interestAmount, feeAmount, penaltyAmount, totalOutstandingAmount, completed,
+                dueDate, null, null);
+    }
+
+    protected LoanTestData.Installment installment(double principalAmount, double interestAmount, double feeAmount, double penaltyAmount,
+            LoanTestData.OutstandingAmounts outstandingAmounts, Boolean completed, String dueDate) {
+        return new LoanTestData.Installment(principalAmount, interestAmount, feeAmount, penaltyAmount, null, completed, dueDate,
+                outstandingAmounts, null);
+    }
+
+    protected LoanTestData.Installment installment(double principalAmount, double interestAmount, double feeAmount, double penaltyAmount,
+            double totalOutstanding, Boolean completed, String dueDate, double loanBalance) {
+        return new LoanTestData.Installment(principalAmount, interestAmount, feeAmount, penaltyAmount, totalOutstanding, completed, dueDate,
+                null, loanBalance);
+    }
+
+    protected LoanTestData.OutstandingAmounts outstanding(double principal, double interestOutstanding, double fee, double penalty,
+            double total) {
+        return new LoanTestData.OutstandingAmounts(principal, interestOutstanding, fee, penalty, total);
+    }
+
+    protected LoanTestData.TransactionExt reversedTransaction(double principalAmount, String type, String date) {
+        return new LoanTestData.TransactionExt(principalAmount, type, date, null, null, null, null, null, null, null, true);
+    }
+
+    protected LoanTestData.TransactionExt transaction(double amount, String type, String date) {
+        return new LoanTestData.TransactionExt(amount, type, date, null, null, null, null, null, null, null, false);
+    }
+
+    protected void verifyTransactions(Long loanId, LoanTestData.TransactionExt... transactions) {
+        GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
+        LoanTestValidators.verifyTransactions(loanDetails, transactions);
+    }
+
+    protected void verifyRepaymentSchedule(Long loanId, LoanTestData.Installment... installments) {
+        GetLoansLoanIdResponse loanDetails = getLoanDetails(loanId);
+        LoanTestValidators.verifyRepaymentSchedule(loanDetails, installments);
+    }
+
+    protected PostLoanProductsRequest createOnePeriod30DaysLongNoInterestPeriodicAccrualProductWithAdvancedPaymentAllocation() {
+        return createOnePeriod30DaysLongNoInterestPeriodicAccrualProduct()
+                .transactionProcessingStrategyCode("advanced-payment-allocation-strategy").loanScheduleType("PROGRESSIVE")
+                .loanScheduleProcessingType("HORIZONTAL").addPaymentAllocationItem(LoanRequestBuilders.defaultPaymentAllocation());
+    }
+
+    protected PostLoanProductsRequest createOnePeriod30DaysLongNoInterestPeriodicAccrualProduct() {
+        return createOnePeriod30DaysPeriodicAccrualProduct(0);
+    }
+
+    protected PostLoanProductsRequest createOnePeriod30DaysPeriodicAccrualProduct(double interestRatePerPeriod) {
+        return new PostLoanProductsRequest()
+                .name(org.apache.fineract.integrationtests.common.Utils.uniqueRandomStringGenerator("LOAN_PRODUCT_", 6))//
+                .shortName(org.apache.fineract.integrationtests.common.Utils.uniqueRandomStringGenerator("", 4))//
+                .description("Loan Product Description")//
+                .includeInBorrowerCycle(false)//
+                .currencyCode("USD")//
+                .digitsAfterDecimal(2)//
+                .inMultiplesOf(0)//
+                .installmentAmountInMultiplesOf(1)//
+                .useBorrowerCycle(false)//
+                .minPrincipal(100.0)//
+                .principal(1000.0)//
+                .maxPrincipal(100000.0)//
+                .minNumberOfRepayments(1)//
+                .numberOfRepayments(1)//
+                .maxNumberOfRepayments(30)//
+                .isLinkedToFloatingInterestRates(false)//
+                .minInterestRatePerPeriod(0.0)//
+                .interestRatePerPeriod(interestRatePerPeriod)//
+                .maxInterestRatePerPeriod(100.0)//
+                .interestRateFrequencyType(LoanTestData.InterestRateFrequencyType.MONTHS)//
+                .repaymentEvery(30)//
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.DAYS_L)//
+                .amortizationType(LoanTestData.AmortizationType.EQUAL_INSTALLMENTS)//
+                .interestType(LoanTestData.InterestType.DECLINING_BALANCE)//
+                .isEqualAmortization(false)//
+                .interestCalculationPeriodType(LoanTestData.InterestCalculationPeriodType.SAME_AS_REPAYMENT_PERIOD)//
+                .transactionProcessingStrategyCode("due-penalty-fee-interest-principal-in-advance-principal-penalty-fee-interest-strategy")//
+                .loanScheduleType("CUMULATIVE")//
+                .daysInYearType(LoanTestData.DaysInYearType.ACTUAL)//
+                .daysInMonthType(LoanTestData.DaysInMonthType.ACTUAL)//
+                .canDefineInstallmentAmount(true)//
+                .graceOnArrearsAgeing(3)//
+                .overdueDaysForNPA(179)//
+                .accountMovesOutOfNPAOnlyOnArrearsCompletion(false)//
+                .principalThresholdForLastInstallment(50)//
+                .allowVariableInstallments(false)//
+                .canUseForTopup(false)//
+                .isInterestRecalculationEnabled(false)//
+                .holdGuaranteeFunds(false)//
+                .multiDisburseLoan(true)//
+                .allowAttributeOverrides(new org.apache.fineract.client.models.AllowAttributeOverrides()//
+                        .amortizationType(true)//
+                        .interestType(true)//
+                        .transactionProcessingStrategyCode(true)//
+                        .interestCalculationPeriodType(true)//
+                        .inArrearsTolerance(true)//
+                        .repaymentEvery(true)//
+                        .graceOnPrincipalAndInterestPayment(true)//
+                        .graceOnArrearsAgeing(true))//
+                .allowPartialPeriodInterestCalculation(true)//
+                .maxTrancheCount(10)//
+                .outstandingLoanBalance(10000.0)//
+                .charges(java.util.Collections.emptyList())//
+                .accountingRule(1)//
+                .dateFormat(LoanTestData.DATETIME_PATTERN)//
+                .locale("en_GB")//
+                .disallowExpectedDisbursements(true)//
+                .allowApprovedDisbursedAmountsOverApplied(true)//
+                .overAppliedCalculationType("percentage")//
+                .overAppliedNumber(50);
+    }
+
+    protected PostLoanProductsRequest create4Period1MonthLongWithoutInterestProduct(String repaymentStrategy) {
+        PostLoanProductsRequest productRequest = createOnePeriod30DaysLongNoInterestPeriodicAccrualProduct().multiDisburseLoan(false)//
+                .disallowExpectedDisbursements(false)//
+                .allowApprovedDisbursedAmountsOverApplied(false)//
+                .overAppliedCalculationType(null)//
+                .overAppliedNumber(null)//
+                .principal(1000.0)//
+                .numberOfRepayments(4)//
+                .repaymentEvery(1)//
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.MONTHS.longValue())//
+                .transactionProcessingStrategyCode(repaymentStrategy);
+        if (org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.impl.AdvancedPaymentScheduleTransactionProcessor.ADVANCED_PAYMENT_ALLOCATION_STRATEGY
+                .equals(repaymentStrategy)) {
+            productRequest.loanScheduleType("PROGRESSIVE").loanScheduleProcessingType("HORIZONTAL")
+                    .addPaymentAllocationItem(LoanRequestBuilders.defaultPaymentAllocation());
+        } else {
+            productRequest.loanScheduleType("CUMULATIVE").loanScheduleProcessingType(null).paymentAllocation(null);
+        }
+        return productRequest;
+    }
+
+    protected PostLoansRequest applyLoanRequest(Long clientId, Long productId, String submittedOnDate, Double principal,
+            Integer numberOfRepayments) {
+        return LoanRequestBuilders.applyLoanRequest(clientId, productId, submittedOnDate, principal, numberOfRepayments);
+    }
+
+    protected PostLoansRequest applyLoanRequest(Long clientId, Long productId, String submittedOnDate, Double principal,
+            Integer numberOfRepayments, Consumer<PostLoansRequest> customizer) {
+        return LoanRequestBuilders.applyLoanRequest(clientId, productId, submittedOnDate, principal, numberOfRepayments, customizer);
+    }
+
+    protected PostLoansRequest applyLP2ProgressiveLoanRequest(Long clientId, Long loanProductId, String loanDisbursementDate, Double amount,
+            Double interestRate, Integer numberOfRepayments, java.util.function.Consumer<PostLoansRequest> customizer) {
+        return LoanRequestBuilders.applyLP2ProgressiveLoanRequest(clientId, loanProductId, loanDisbursementDate, amount, interestRate,
+                numberOfRepayments, customizer);
+    }
+
+    protected Long applyAndApproveLoan(Long clientId, Long productId, String date, Double amount) {
+        return applyAndApproveLoan(clientId, productId, date, amount, 1, null);
+    }
+
+    protected Long applyAndApproveLoan(Long clientId, Long productId, String date, Double amount, int numberOfRepayments) {
+        return applyAndApproveLoan(clientId, productId, date, amount, numberOfRepayments, null);
+    }
+
+    protected Long applyAndApproveLoan(Long clientId, Long productId, String date, Double amount, int numberOfRepayments,
+            Consumer<PostLoansRequest> customizer) {
+        PostLoansRequest request = LoanRequestBuilders.applyLoanRequest(clientId, productId, date, amount, numberOfRepayments, customizer);
+        Long loanId = applyForLoan(request);
+        approveLoan(loanId, LoanRequestBuilders.approveLoan(amount, date));
+        return loanId;
+    }
+
+    protected Long applyAndApproveProgressiveLoan(Long clientId, Long productId, String date, Double amount, Double interestRate,
+            int numberOfRepayments, Consumer<PostLoansRequest> customizer) {
+        PostLoansRequest request = LoanRequestBuilders.applyLP2ProgressiveLoanRequest(clientId, productId, date, amount, interestRate,
+                numberOfRepayments, customizer);
+        Long loanId = applyForLoan(request);
+        approveLoan(loanId, LoanRequestBuilders.approveLoan(amount, date));
+        return loanId;
+    }
+
+    protected void disburseLoan(Long loanId, BigDecimal amount, String date) {
+        disburseLoan(loanId, LoanRequestBuilders.disburseLoan(amount.doubleValue(), date));
+    }
+
+    protected Long addRepaymentForLoan(Long loanId, Double amount, String date) {
+        return addRepayment(loanId, LoanRequestBuilders.repayLoan(amount, date));
+    }
+
+    protected void validateLoanSummaryBalances(GetLoansLoanIdResponse loanDetails, Double totalOutstanding, Double totalRepayment,
+            Double principalOutstanding, Double principalPaid, Double totalOverpaid) {
+        org.junit.jupiter.api.Assertions.assertEquals(totalOutstanding,
+                org.apache.fineract.integrationtests.common.Utils.getDoubleValue(loanDetails.getSummary().getTotalOutstanding()));
+        org.junit.jupiter.api.Assertions.assertEquals(totalRepayment,
+                org.apache.fineract.integrationtests.common.Utils.getDoubleValue(loanDetails.getSummary().getTotalRepayment()));
+        org.junit.jupiter.api.Assertions.assertEquals(principalOutstanding,
+                org.apache.fineract.integrationtests.common.Utils.getDoubleValue(loanDetails.getSummary().getPrincipalOutstanding()));
+        org.junit.jupiter.api.Assertions.assertEquals(principalPaid,
+                org.apache.fineract.integrationtests.common.Utils.getDoubleValue(loanDetails.getSummary().getPrincipalPaid()));
+        org.junit.jupiter.api.Assertions.assertEquals(totalOverpaid,
+                org.apache.fineract.integrationtests.common.Utils.getDoubleValue(loanDetails.getTotalOverpaid()));
+    }
 }
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignBusinessDateHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignBusinessDateHelper.java
index 9e8e74e..2bee114 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignBusinessDateHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignBusinessDateHelper.java
@@ -43,19 +43,27 @@
     }
 
     public void updateBusinessDate(String type, String date) {
+        updateBusinessDate(type, date, LoanTestData.ISO_DATE_PATTERN);
+    }
+
+    public void updateBusinessDate(String type, String date, String dateFormat) {
         BusinessDateUpdateRequest request = new BusinessDateUpdateRequest()//
                 .type(BusinessDateUpdateRequest.TypeEnum.fromValue(type))//
                 .date(date)//
-                .dateFormat("yyyy-MM-dd")//
+                .dateFormat(dateFormat)//
                 .locale(LoanTestData.LOCALE);
 
         ok(() -> fineractClient.businessDateManagement().updateBusinessDate(request, Collections.emptyMap()));
     }
 
     public void runAt(String date, Runnable action) {
+        runAt(date, LoanTestData.ISO_DATE_PATTERN, action);
+    }
+
+    public void runAt(String date, String dateFormat, Runnable action) {
         try {
             configHelper.updateConfigurationByName(ENABLE_BUSINESS_DATE, true);
-            updateBusinessDate("BUSINESS_DATE", date);
+            updateBusinessDate("BUSINESS_DATE", date, dateFormat);
             action.run();
         } finally {
             configHelper.updateConfigurationByName(ENABLE_BUSINESS_DATE, false);
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignClientHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignClientHelper.java
index 5e50d1f..059c802 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignClientHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignClientHelper.java
@@ -57,7 +57,7 @@
     }
 
     public Long createClient() {
-        return createClient(Utils.dateFormatter.format(Utils.getLocalDateOfTenant()));
+        return createClient(org.apache.fineract.integrationtests.common.ClientHelper.DEFAULT_DATE);
     }
 
     public Long createClient(String activationDate) {
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignLoanHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignLoanHelper.java
index 6bbaa17..8ebfece 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignLoanHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignLoanHelper.java
@@ -28,6 +28,7 @@
 import org.apache.fineract.client.feign.util.CallFailedRuntimeException;
 import org.apache.fineract.client.models.CommandProcessingResult;
 import org.apache.fineract.client.models.DeleteLoansLoanIdChargesChargeIdResponse;
+import org.apache.fineract.client.models.GetLoanProductsProductIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdChargesChargeIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdChargesTemplateResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
@@ -49,6 +50,8 @@
 import org.apache.fineract.client.models.PostLoansResponse;
 import org.apache.fineract.client.models.PostUpdateRescheduleLoansRequest;
 import org.apache.fineract.client.models.PostUpdateRescheduleLoansResponse;
+import org.apache.fineract.client.models.PutLoanProductsProductIdRequest;
+import org.apache.fineract.client.models.PutLoanProductsProductIdResponse;
 import org.apache.fineract.client.models.PutLoansAvailableDisbursementAmountRequest;
 import org.apache.fineract.client.models.PutLoansAvailableDisbursementAmountResponse;
 import org.apache.fineract.client.models.PutLoansLoanIdChargesChargeIdRequest;
@@ -94,6 +97,14 @@
         return response.getResourceId();
     }
 
+    public GetLoanProductsProductIdResponse retrieveLoanProduct(Long productId) {
+        return ok(() -> fineractClient.loanProducts().retrieveOneLoanProduct(productId));
+    }
+
+    public PutLoanProductsProductIdResponse updateLoanProduct(Long productId, PutLoanProductsProductIdRequest request) {
+        return ok(() -> fineractClient.loanProducts().updateLoanProduct(productId, request));
+    }
+
     public Long applyForLoan(PostLoansRequest request) {
         PostLoansResponse response = ok(() -> fineractClient.loans().calculateLoanScheduleOrSubmitLoanApplication(request, (String) null));
         return response.getLoanId();
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignRawHttpHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignRawHttpHelper.java
new file mode 100644
index 0000000..91aa313
--- /dev/null
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/helpers/FeignRawHttpHelper.java
@@ -0,0 +1,108 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests.client.feign.helpers;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.util.Base64;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.apache.fineract.integrationtests.ConfigProperties;
+
+public final class FeignRawHttpHelper {
+
+    private static final String BASE_URL = ConfigProperties.Backend.PROTOCOL + "://" + ConfigProperties.Backend.HOST + ":"
+            + ConfigProperties.Backend.PORT + "/fineract-provider/api/v1";
+    private static final String AUTH_HEADER = "Basic " + Base64.getEncoder()
+            .encodeToString((ConfigProperties.Backend.USERNAME + ":" + ConfigProperties.Backend.PASSWORD).getBytes(StandardCharsets.UTF_8));
+    private static final String TENANT_ID = "default";
+
+    private FeignRawHttpHelper() {}
+
+    public static String put(String path, String jsonBody) {
+        return execute("PUT", path, jsonBody);
+    }
+
+    public static String post(String path, String jsonBody) {
+        return execute("POST", path, jsonBody);
+    }
+
+    private static String execute(String method, String path, String jsonBody) {
+        try {
+            URI uri = URI.create(BASE_URL + path);
+            HttpURLConnection conn = (HttpURLConnection) uri.toURL().openConnection();
+
+            if (conn instanceof HttpsURLConnection httpsConn) {
+                disableSslVerification(httpsConn);
+            }
+
+            conn.setRequestMethod(method);
+            conn.setRequestProperty("Content-Type", "application/json");
+            conn.setRequestProperty("Authorization", AUTH_HEADER);
+            conn.setRequestProperty("Fineract-Platform-TenantId", TENANT_ID);
+            conn.setDoOutput(true);
+
+            try (OutputStream os = conn.getOutputStream()) {
+                os.write(jsonBody.getBytes(StandardCharsets.UTF_8));
+            }
+
+            int status = conn.getResponseCode();
+            String response = new String((status >= 200 && status < 300 ? conn.getInputStream() : conn.getErrorStream()).readAllBytes(),
+                    StandardCharsets.UTF_8);
+
+            if (status < 200 || status >= 300) {
+                throw new RuntimeException("HTTP " + status + " " + method + " " + path + ": " + response);
+            }
+
+            return response;
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to execute " + method + " " + path, e);
+        }
+    }
+
+    private static void disableSslVerification(HttpsURLConnection conn) {
+        try {
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, new TrustManager[] { new X509TrustManager() {
+
+                @Override
+                public void checkClientTrusted(X509Certificate[] chain, String authType) {}
+
+                @Override
+                public void checkServerTrusted(X509Certificate[] chain, String authType) {}
+
+                @Override
+                public X509Certificate[] getAcceptedIssuers() {
+                    return new X509Certificate[0];
+                }
+            } }, new SecureRandom());
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier((hostname, session) -> true);
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to disable SSL verification", e);
+        }
+    }
+}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/FeignTestConstants.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/FeignTestConstants.java
index e1c9872..09d7b6c 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/FeignTestConstants.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/FeignTestConstants.java
@@ -21,6 +21,7 @@
 public final class FeignTestConstants {
 
     public static final String DATETIME_PATTERN = "dd MMMM yyyy";
+    public static final String ISO_DATE_PATTERN = "yyyy-MM-dd";
     public static final String LOCALE = "en";
 
     private FeignTestConstants() {}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanProductTemplates.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanProductTemplates.java
index b34ab56..9ce9669 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanProductTemplates.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanProductTemplates.java
@@ -219,7 +219,7 @@
                 .chargeOffExpenseAccountId(getExpenseAccountId("chargeOff"))//
                 .chargeOffFraudExpenseAccountId(getExpenseAccountId("chargeOffFraud"))//
                 .dateFormat(LoanTestData.DATETIME_PATTERN)//
-                .locale("en")//
+                .locale(LoanTestData.LOCALE)//
                 .enableAccrualActivityPosting(false)//
                 .multiDisburseLoan(false)//
                 .disallowExpectedDisbursements(false)//
@@ -261,4 +261,114 @@
             Function<PostLoanProductsRequest, PostLoanProductsRequest> customizer) {
         return customizer.apply(template);
     }
+
+    default PostLoanProductsRequest onePeriod30DaysPeriodicAccrual(double interestRatePerPeriod) {
+        return onePeriod30DaysNoInterest()//
+                .interestRatePerPeriod(interestRatePerPeriod);
+    }
+
+    default PostLoanProductsRequest onePeriod30DaysPeriodicAccrual() {
+        return onePeriod30DaysPeriodicAccrual(0.0);
+    }
+
+    default PostLoanProductsRequest onePeriod30DaysPeriodicAccrualWithAdvancedAllocation() {
+        return onePeriod30DaysPeriodicAccrual()//
+                .transactionProcessingStrategyCode(TransactionProcessingStrategyCode.ADVANCED_PAYMENT_ALLOCATION_STRATEGY)//
+                .loanScheduleType("PROGRESSIVE")//
+                .loanScheduleProcessingType("HORIZONTAL")//
+                .addPaymentAllocationItem(LoanRequestBuilders.defaultPaymentAllocation());
+    }
+
+    default PostLoanProductsRequest fourPeriod1MonthWithoutInterest(String repaymentStrategy) {
+        PostLoanProductsRequest request = onePeriod30DaysPeriodicAccrual()//
+                .multiDisburseLoan(false)//
+                .disallowExpectedDisbursements(false)//
+                .allowApprovedDisbursedAmountsOverApplied(false)//
+                .overAppliedCalculationType(null)//
+                .overAppliedNumber(null)//
+                .principal(1000.0)//
+                .numberOfRepayments(4)//
+                .repaymentEvery(1)//
+                .repaymentFrequencyType(RepaymentFrequencyType.MONTHS_L)//
+                .transactionProcessingStrategyCode(repaymentStrategy);
+        if (TransactionProcessingStrategyCode.ADVANCED_PAYMENT_ALLOCATION_STRATEGY.equals(repaymentStrategy)) {
+            request.loanScheduleType("PROGRESSIVE")//
+                    .loanScheduleProcessingType("HORIZONTAL")//
+                    .addPaymentAllocationItem(LoanRequestBuilders.defaultPaymentAllocation());
+        } else {
+            request.loanScheduleType("CUMULATIVE")//
+                    .loanScheduleProcessingType(null)//
+                    .paymentAllocation(null);
+        }
+        return request;
+    }
+
+    default PostLoanProductsRequest create4IProgressive() {
+        final Long delinquencyBucketId = org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper
+                .createDefaultBucket();
+        return new PostLoanProductsRequest().name(Utils.uniqueRandomStringGenerator("4I_PROGRESSIVE_", 6))//
+                .shortName(Utils.uniqueRandomStringGenerator("", 4))//
+                .description("4 installment product - progressive")//
+                .includeInBorrowerCycle(false)//
+                .useBorrowerCycle(false)//
+                .currencyCode("EUR")//
+                .digitsAfterDecimal(2)//
+                .principal(1000.0)//
+                .minPrincipal(100.0)//
+                .maxPrincipal(10000.0)//
+                .numberOfRepayments(4)//
+                .repaymentEvery(1)//
+                .repaymentFrequencyType(RepaymentFrequencyType.MONTHS_L)//
+                .interestRatePerPeriod(10D)//
+                .minInterestRatePerPeriod(0D)//
+                .maxInterestRatePerPeriod(120D)//
+                .interestRateFrequencyType(InterestRateFrequencyType.YEARS)//
+                .isLinkedToFloatingInterestRates(false)//
+                .allowVariableInstallments(false)//
+                .amortizationType(AmortizationType.EQUAL_INSTALLMENTS)//
+                .interestType(InterestType.DECLINING_BALANCE)//
+                .interestCalculationPeriodType(InterestCalculationPeriodType.DAILY)//
+                .allowPartialPeriodInterestCalculation(false)//
+                .transactionProcessingStrategyCode(TransactionProcessingStrategyCode.ADVANCED_PAYMENT_ALLOCATION_STRATEGY)//
+                .paymentAllocation(List.of(LoanRequestBuilders.defaultPaymentAllocation()))//
+                .creditAllocation(List.of())//
+                .overdueDaysForNPA(179)//
+                .daysInMonthType(DaysInMonthType.DAYS_30)//
+                .daysInYearType(DaysInYearType.DAYS_360)//
+                .isInterestRecalculationEnabled(true)//
+                .interestRecalculationCompoundingMethod(LoanTestData.InterestRecalculationCompoundingMethod.NONE)//
+                .rescheduleStrategyMethod(RescheduleStrategyMethod.ADJUST_LAST_UNPAID_PERIOD)//
+                .recalculationRestFrequencyType(LoanTestData.RecalculationRestFrequencyType.DAILY)//
+                .recalculationRestFrequencyInterval(1)//
+                .isArrearsBasedOnOriginalSchedule(false)//
+                .isCompoundingToBePostedAsTransaction(false)//
+                .preClosureInterestCalculationStrategy(1)//
+                .allowCompoundingOnEod(false)//
+                .canDefineInstallmentAmount(true)//
+                .repaymentStartDateType(1)//
+                .charges(List.of())//
+                .principalVariationsForBorrowerCycle(List.of())//
+                .interestRateVariationsForBorrowerCycle(List.of())//
+                .numberOfRepaymentVariationsForBorrowerCycle(List.of())//
+                .accountingRule(1)//
+                .canUseForTopup(false)//
+                .dateFormat(LoanTestData.DATETIME_PATTERN)//
+                .locale(LoanTestData.LOCALE)//
+                .multiDisburseLoan(true)//
+                .maxTrancheCount(10)//
+                .outstandingLoanBalance(10000.0)//
+                .disallowExpectedDisbursements(true)//
+                .allowApprovedDisbursedAmountsOverApplied(true)//
+                .overAppliedCalculationType("percentage")//
+                .overAppliedNumber(50)//
+                .principalThresholdForLastInstallment(50)//
+                .holdGuaranteeFunds(false)//
+                .accountMovesOutOfNPAOnlyOnArrearsCompletion(false)//
+                .isEqualAmortization(false)//
+                .delinquencyBucketId(delinquencyBucketId)//
+                .enableDownPayment(false)//
+                .enableInstallmentLevelDelinquency(false)//
+                .loanScheduleType("PROGRESSIVE")//
+                .loanScheduleProcessingType("HORIZONTAL");
+    }
 }
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanRequestBuilders.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanRequestBuilders.java
index f3cc4e4..ae9f9bf 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanRequestBuilders.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanRequestBuilders.java
@@ -21,6 +21,7 @@
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
 import java.util.stream.Stream;
 import org.apache.fineract.client.models.AdvancedPaymentData;
 import org.apache.fineract.client.models.PaymentAllocationOrder;
@@ -102,6 +103,11 @@
                 .dateFormat(LoanTestData.DATETIME_PATTERN);
     }
 
+    public static PostLoansLoanIdRequest approveLoan(Double approvedAmount, String approvedOnDate, String expectedDisbursementDate) {
+        return approveLoan(approvedAmount, approvedOnDate)//
+                .expectedDisbursementDate(expectedDisbursementDate);
+    }
+
     public static PostLoansLoanIdRequest disburseLoan(Double disbursedAmount, String disbursedOnDate) {
         return new PostLoansLoanIdRequest()//
                 .actualDisbursementDate(disbursedOnDate)//
@@ -318,4 +324,65 @@
         request.setLocale(LoanTestData.LOCALE);
         return request;
     }
+
+    public static PostLoansRequest applyLoanRequest(Long clientId, Long productId, String submittedOnDate, Double principal,
+            int numberOfRepayments, Consumer<PostLoansRequest> customizer) {
+        PostLoansRequest request = new PostLoansRequest()//
+                .clientId(clientId)//
+                .productId(productId)//
+                .expectedDisbursementDate(submittedOnDate)//
+                .dateFormat(LoanTestData.DATETIME_PATTERN)//
+                .transactionProcessingStrategyCode("due-penalty-interest-principal-fee-in-advance-penalty-interest-principal-fee-strategy")//
+                .locale(LoanTestData.LOCALE)//
+                .submittedOnDate(submittedOnDate)//
+                .amortizationType(LoanTestData.AmortizationType.EQUAL_INSTALLMENTS)//
+                .interestRatePerPeriod(BigDecimal.ZERO)//
+                .interestCalculationPeriodType(LoanTestData.InterestCalculationPeriodType.SAME_AS_REPAYMENT_PERIOD)//
+                .interestType(LoanTestData.InterestType.DECLINING_BALANCE)//
+                .repaymentEvery(30)//
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.DAYS)//
+                .numberOfRepayments(numberOfRepayments)//
+                .loanTermFrequency(numberOfRepayments * 30)//
+                .loanTermFrequencyType(LoanTestData.RepaymentFrequencyType.DAYS)//
+                .maxOutstandingLoanBalance(BigDecimal.valueOf(principal))//
+                .principal(BigDecimal.valueOf(principal))//
+                .loanType("individual")//
+                .graceOnArrearsAgeing(0);
+        if (customizer != null) {
+            customizer.accept(request);
+        }
+        return request;
+    }
+
+    public static PostLoansRequest applyLoanRequest(Long clientId, Long productId, String submittedOnDate, Double principal,
+            int numberOfRepayments) {
+        return applyLoanRequest(clientId, productId, submittedOnDate, principal, numberOfRepayments, null);
+    }
+
+    public static PostLoansRequest applyLP2ProgressiveLoanRequest(Long clientId, Long productId, String submittedOnDate, Double principal,
+            Double interestRate, int numberOfRepayments, Consumer<PostLoansRequest> customizer) {
+        PostLoansRequest request = new PostLoansRequest()//
+                .clientId(clientId)//
+                .transactionProcessingStrategyCode(LoanTestData.TransactionProcessingStrategyCode.ADVANCED_PAYMENT_ALLOCATION_STRATEGY)//
+                .productId(productId)//
+                .expectedDisbursementDate(submittedOnDate)//
+                .dateFormat(LoanTestData.DATETIME_PATTERN)//
+                .locale(LoanTestData.LOCALE)//
+                .submittedOnDate(submittedOnDate)//
+                .amortizationType(LoanTestData.AmortizationType.EQUAL_INSTALLMENTS)//
+                .interestRatePerPeriod(BigDecimal.valueOf(interestRate))//
+                .numberOfRepayments(numberOfRepayments)//
+                .principal(BigDecimal.valueOf(principal))//
+                .loanTermFrequency(numberOfRepayments)//
+                .repaymentEvery(1)//
+                .repaymentFrequencyType(LoanTestData.RepaymentFrequencyType.MONTHS)//
+                .loanTermFrequencyType(LoanTestData.RepaymentFrequencyType.MONTHS)//
+                .interestType(LoanTestData.InterestType.DECLINING_BALANCE)//
+                .interestCalculationPeriodType(LoanTestData.InterestCalculationPeriodType.DAILY)//
+                .loanType("individual");
+        if (customizer != null) {
+            customizer.accept(request);
+        }
+        return request;
+    }
 }
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestData.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestData.java
index 8a7cb8f..82b65ab 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestData.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestData.java
@@ -26,6 +26,7 @@
 public final class LoanTestData {
 
     public static final String DATETIME_PATTERN = FeignTestConstants.DATETIME_PATTERN;
+    public static final String ISO_DATE_PATTERN = FeignTestConstants.ISO_DATE_PATTERN;
     public static final String LOCALE = FeignTestConstants.LOCALE;
 
     private LoanTestData() {}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestValidators.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestValidators.java
index 211661b..6d3f864 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestValidators.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/modules/LoanTestValidators.java
@@ -20,22 +20,185 @@
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
 import java.util.function.Function;
 import org.apache.fineract.client.models.GetLoansLoanIdRepaymentPeriod;
 import org.apache.fineract.client.models.GetLoansLoanIdResponse;
 import org.apache.fineract.client.models.GetLoansLoanIdStatus;
+import org.apache.fineract.client.models.GetLoansLoanIdTransactions;
 import org.apache.fineract.integrationtests.common.Utils;
+import org.junit.jupiter.api.Assertions;
 
 public final class LoanTestValidators {
 
+    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(LoanTestData.DATETIME_PATTERN, Locale.ENGLISH);
+
     private LoanTestValidators() {}
 
+    public static void verifyTransactions(GetLoansLoanIdResponse loanDetails, LoanTestData.TransactionExt... transactions) {
+        if (transactions == null || transactions.length == 0) {
+            assertNull(loanDetails.getTransactions(), "No transaction is expected");
+            return;
+        }
+        assertNotNull(loanDetails.getTransactions());
+        assertEquals(transactions.length, loanDetails.getTransactions().size(), "Number of transactions");
+
+        Arrays.stream(transactions).forEach(tr -> {
+            List<GetLoansLoanIdTransactions> transactionsByDate = loanDetails.getTransactions().stream()
+                    .filter(item -> Objects.equals(item.getDate(), LocalDate.parse(tr.date, DATE_FORMATTER))).toList();
+
+            if (transactionsByDate.isEmpty()) {
+                Assertions.fail("No transactions found for date " + tr.date);
+                return;
+            }
+
+            boolean found = transactionsByDate.stream()
+                    .anyMatch(item -> Objects.equals(Utils.getDoubleValue(item.getAmount()), tr.amount)
+                            && Objects.equals(item.getType().getValue(), tr.type)
+                            && Objects.equals(Utils.getDoubleValue(item.getOutstandingLoanBalance()), tr.outstandingPrincipal)
+                            && Objects.equals(Utils.getDoubleValue(item.getPrincipalPortion()), tr.principalPortion)
+                            && Objects.equals(Utils.getDoubleValue(item.getInterestPortion()), tr.interestPortion)
+                            && Objects.equals(Utils.getDoubleValue(item.getFeeChargesPortion()), tr.feePortion)
+                            && Objects.equals(Utils.getDoubleValue(item.getPenaltyChargesPortion()), tr.penaltyPortion)
+                            && Objects.equals(Utils.getDoubleValue(item.getOverpaymentPortion()), tr.overpaymentPortion)
+                            && Objects.equals(Utils.getDoubleValue(item.getUnrecognizedIncomePortion()), tr.unrecognizedPortion));
+
+            if (!found) {
+                StringBuilder errorMessage = new StringBuilder();
+                errorMessage.append("Required transaction not found: ").append(tr);
+                errorMessage.append("\nTransactions found for date ").append(tr.date).append(":");
+                for (int i = 0; i < transactionsByDate.size(); i++) {
+                    GetLoansLoanIdTransactions item = transactionsByDate.get(i);
+                    errorMessage.append("\n  Transaction ").append(i + 1).append(": ");
+                    errorMessage.append("amount=").append(Utils.getDoubleValue(item.getAmount()));
+                    errorMessage.append(", type=").append(item.getType().getValue());
+                    errorMessage.append(", outstandingPrincipal=").append(Utils.getDoubleValue(item.getOutstandingLoanBalance()));
+                    errorMessage.append(", principalPortion=").append(Utils.getDoubleValue(item.getPrincipalPortion()));
+                    errorMessage.append(", interestPortion=").append(Utils.getDoubleValue(item.getInterestPortion()));
+                    errorMessage.append(", feePortion=").append(Utils.getDoubleValue(item.getFeeChargesPortion()));
+                    errorMessage.append(", penaltyPortion=").append(Utils.getDoubleValue(item.getPenaltyChargesPortion()));
+                    errorMessage.append(", unrecognizedPortion=").append(Utils.getDoubleValue(item.getUnrecognizedIncomePortion()));
+                    errorMessage.append(", overpaymentPortion=").append(Utils.getDoubleValue(item.getOverpaymentPortion()));
+                    errorMessage.append(", reversed=").append(item.getManuallyReversed() != null ? item.getManuallyReversed() : false);
+                }
+                Assertions.fail(errorMessage.toString());
+            }
+        });
+    }
+
+    public static void verifyRepaymentSchedule(GetLoansLoanIdResponse loanResponse, LoanTestData.Installment... installments) {
+        assertNotNull(loanResponse.getRepaymentSchedule());
+        assertNotNull(loanResponse.getRepaymentSchedule().getPeriods());
+        assertEquals(installments.length, loanResponse.getRepaymentSchedule().getPeriods().size(),
+                "Expected installments are not matching with the installments configured on the loan");
+
+        int installmentNumber = 0;
+        for (int i = 0; i < installments.length; i++) {
+            GetLoansLoanIdRepaymentPeriod period = loanResponse.getRepaymentSchedule().getPeriods().get(i);
+            Double principalDue = Utils.getDoubleValue(period.getPrincipalDue());
+            Double amount = installments[i].principalAmount;
+
+            if (installments[i].completed == null) {
+                assertEquals(amount, Utils.getDoubleValue(period.getPrincipalLoanBalanceOutstanding()),
+                        "%d. installment's principal due is different, expected: %.2f, actual: %.2f".formatted(i, amount,
+                                Utils.getDoubleValue(period.getPrincipalLoanBalanceOutstanding())));
+            } else {
+                assertEquals(amount, principalDue,
+                        "%d. installment's principal due is different, expected: %.2f, actual: %.2f".formatted(i, amount, principalDue));
+
+                Double interestAmount = installments[i].interestAmount;
+                Double interestDue = Utils.getDoubleValue(period.getInterestDue());
+                if (interestAmount != null) {
+                    assertEquals(interestAmount, interestDue, "%d. installment's interest due is different, expected: %.2f, actual: %.2f"
+                            .formatted(i, interestAmount, interestDue));
+                }
+
+                Double feeAmount = installments[i].feeAmount;
+                Double feeDue = Utils.getDoubleValue(period.getFeeChargesDue());
+                if (feeAmount != null) {
+                    assertEquals(feeAmount, feeDue,
+                            "%d. installment's fee charges due is different, expected: %.2f, actual: %.2f".formatted(i, feeAmount, feeDue));
+                }
+
+                Double penaltyAmount = installments[i].penaltyAmount;
+                Double penaltyDue = Utils.getDoubleValue(period.getPenaltyChargesDue());
+                if (penaltyAmount != null) {
+                    assertEquals(penaltyAmount, penaltyDue,
+                            "%d. installment's penalty charges due is different, expected: %.2f, actual: %.2f".formatted(i, penaltyAmount,
+                                    penaltyDue));
+                }
+
+                Double outstandingAmount = installments[i].totalOutstandingAmount;
+                Double totalOutstanding = Utils.getDoubleValue(period.getTotalOutstandingForPeriod());
+                if (outstandingAmount != null) {
+                    assertEquals(outstandingAmount, totalOutstanding,
+                            "%d. installment's total outstanding is different, expected: %.2f, actual: %.2f".formatted(i, outstandingAmount,
+                                    totalOutstanding));
+                }
+
+                Double outstandingPrincipalExpected = installments[i].outstandingAmounts != null
+                        ? installments[i].outstandingAmounts.principalOutstanding
+                        : null;
+                Double outstandingPrincipal = Utils.getDoubleValue(period.getPrincipalOutstanding());
+                if (outstandingPrincipalExpected != null) {
+                    assertEquals(outstandingPrincipalExpected, outstandingPrincipal,
+                            "%d. installment's outstanding principal is different, expected: %.2f, actual: %.2f".formatted(i,
+                                    outstandingPrincipalExpected, outstandingPrincipal));
+                }
+
+                Double outstandingFeeExpected = installments[i].outstandingAmounts != null
+                        ? installments[i].outstandingAmounts.feeOutstanding
+                        : null;
+                Double outstandingFee = Utils.getDoubleValue(period.getFeeChargesOutstanding());
+                if (outstandingFeeExpected != null) {
+                    assertEquals(outstandingFeeExpected, outstandingFee,
+                            "%d. installment's outstanding fee is different, expected: %.2f, actual: %.2f".formatted(i,
+                                    outstandingFeeExpected, outstandingFee));
+                }
+
+                Double outstandingPenaltyExpected = installments[i].outstandingAmounts != null
+                        ? installments[i].outstandingAmounts.penaltyOutstanding
+                        : null;
+                Double outstandingPenalty = Utils.getDoubleValue(period.getPenaltyChargesOutstanding());
+                if (outstandingPenaltyExpected != null) {
+                    assertEquals(outstandingPenaltyExpected, outstandingPenalty,
+                            "%d. installment's outstanding penalty is different, expected: %.2f, actual: %.2f".formatted(i,
+                                    outstandingPenaltyExpected, outstandingPenalty));
+                }
+
+                Double outstandingTotalExpected = installments[i].outstandingAmounts != null
+                        ? installments[i].outstandingAmounts.totalOutstanding
+                        : null;
+                Double outstandingTotal = Utils.getDoubleValue(period.getTotalOutstandingForPeriod());
+                if (outstandingTotalExpected != null) {
+                    assertEquals(outstandingTotalExpected, outstandingTotal,
+                            "%d. installment's total outstanding is different, expected: %.2f, actual: %.2f".formatted(i,
+                                    outstandingTotalExpected, outstandingTotal));
+                }
+
+                Double loanBalanceExpected = installments[i].loanBalance;
+                Double loanBalance = Utils.getDoubleValue(period.getPrincipalLoanBalanceOutstanding());
+                if (loanBalanceExpected != null) {
+                    assertEquals(loanBalanceExpected, loanBalance,
+                            "%d. installment's loan balance is different, expected: %.2f, actual: %.2f".formatted(i, loanBalanceExpected,
+                                    loanBalance));
+                }
+                installmentNumber++;
+                assertEquals(installmentNumber, period.getPeriod());
+            }
+            assertEquals(installments[i].completed, period.getComplete());
+            assertEquals(LocalDate.parse(installments[i].dueDate, DATE_FORMATTER), period.getDueDate());
+        }
+    }
+
     public static void validateRepaymentPeriod(GetLoansLoanIdResponse loanDetails, Integer index, LocalDate dueDate, double principalDue,
             double principalPaid, double principalOutstanding, double paidInAdvance, double paidLate) {
         GetLoansLoanIdRepaymentPeriod period = loanDetails.getRepaymentSchedule().getPeriods().stream()
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/tests/FeignWorkingCapitalLoanDiscountFeeAmortizationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/tests/FeignWorkingCapitalLoanDiscountFeeAmortizationTest.java
index 02dfb63..92959bb 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/tests/FeignWorkingCapitalLoanDiscountFeeAmortizationTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/client/feign/tests/FeignWorkingCapitalLoanDiscountFeeAmortizationTest.java
@@ -26,6 +26,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 import org.apache.fineract.client.models.GetJournalEntriesTransactionIdResponse;
 import org.apache.fineract.client.models.GetWorkingCapitalLoanTransactionIdResponse;
@@ -63,6 +64,7 @@
 public class FeignWorkingCapitalLoanDiscountFeeAmortizationTest extends FeignIntegrationTest {
 
     private static final String DISCOUNT_FEE_AMORTIZATION_CODE = "loanTransactionType.discountFeeAmortization";
+    private static final String DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT_CODE = "loanTransactionType.discountFeeAmortizationAdjustment";
 
     private FeignWorkingCapitalLoanHelper wcLoanHelper;
     private FeignClientHelper clientHelper;
@@ -442,9 +444,8 @@
                     DISCOUNT_FEE_AMORTIZATION_CODE);
             assertEquals(1, amortTxns.size(), "Amortization should be created inline on loan close without COB");
             final BigDecimal amortAmount = amortTxns.get(0).getTransactionAmount();
-            assertTrue(amortAmount.compareTo(BigDecimal.ZERO) > 0, "Amortization amount should be positive, was: " + amortAmount);
-            assertTrue(amortAmount.compareTo(discount) <= 0,
-                    "Amortization amount should not exceed discount — amort: " + amortAmount + ", discount: " + discount);
+            assertEquals(0, amortAmount.compareTo(discount),
+                    "Closing the loan must recognize the full discount — amort: " + amortAmount + ", discount: " + discount);
 
             // Verify journal entries
             final List<JournalEntryTransactionItem> entries = getJournalEntriesForWCTransaction(amortTxns.get(0).getId());
@@ -482,12 +483,78 @@
                     DISCOUNT_FEE_AMORTIZATION_CODE);
             assertEquals(1, amortTxns.size(), "Amortization should be created inline on loan overpay without COB");
             final BigDecimal amortAmount = amortTxns.get(0).getTransactionAmount();
-            assertTrue(amortAmount.compareTo(BigDecimal.ZERO) > 0, "Amortization amount should be positive, was: " + amortAmount);
-            assertTrue(amortAmount.compareTo(discount) <= 0,
-                    "Amortization amount should not exceed discount — amort: " + amortAmount + ", discount: " + discount);
+            assertEquals(0, amortAmount.compareTo(discount),
+                    "Overpaying the loan must recognize the full discount — amort: " + amortAmount + ", discount: " + discount);
         });
     }
 
+    // Test 9: a backdated repayment must keep net amortization consistent (recognition is time-capped), and overpay
+    // must recognize the full discount exactly.
+    @Test
+    @Order(9)
+    void testBackdatedRepaymentKeepsAmortizationConsistent() {
+        businessDateHelper.runAt("2026-09-01", () -> {
+            final Long testClientId = clientHelper.createClient("01 September 2026");
+            final Long productId = createCashBasedProductWithDiscount();
+            final BigDecimal principal = BigDecimal.valueOf(9000);
+            final BigDecimal discount = BigDecimal.valueOf(1000);
+
+            final Long loanId = submitLoanWithDiscount(testClientId, productId, principal, discount, "01 September 2026");
+            wcLoanHelper.approve(loanId,
+                    WorkingCapitalLoanRequestBuilders.approveWithDiscount("01 September 2026", principal, "01 September 2026", discount));
+            wcLoanHelper.disburse(loanId, WorkingCapitalLoanRequestBuilders.disburseWithDiscount("01 September 2026", principal, discount));
+
+            // Repayment on Sep 5, then COB → first partial amortization
+            businessDateHelper.updateBusinessDate("BUSINESS_DATE", "2026-09-05");
+            wcLoanHelper.makeRepayment(loanId, WorkingCapitalLoanRequestBuilders.repayment(BigDecimal.valueOf(3000), "05 September 2026"));
+            wcLoanHelper.executeInlineWCCOB(loanId);
+
+            final List<GetWorkingCapitalLoanTransactionIdResponse> afterFirst = filterByType(wcLoanHelper.getTransactions(loanId),
+                    DISCOUNT_FEE_AMORTIZATION_CODE);
+            assertEquals(1, afterFirst.size(), "Expected 1 amortization transaction after the first repayment");
+            final BigDecimal totalAfterFirst = sumAmounts(afterFirst);
+            assertTrue(totalAfterFirst.compareTo(BigDecimal.ZERO) > 0, "First amortization should be positive");
+
+            // Backdated repayment on Sep 2, then COB: net amortization must stay non-decreasing and bounded by the
+            // discount.
+            wcLoanHelper.makeRepayment(loanId, WorkingCapitalLoanRequestBuilders.repayment(BigDecimal.valueOf(2000), "02 September 2026"));
+            wcLoanHelper.executeInlineWCCOB(loanId);
+
+            final BigDecimal netAfterBackdated = netAmortization(loanId);
+            assertTrue(netAfterBackdated.compareTo(totalAfterFirst) >= 0,
+                    "Net amortization must not decrease after a backdated repayment — before: " + totalAfterFirst + ", after: "
+                            + netAfterBackdated);
+            assertTrue(netAfterBackdated.compareTo(discount) <= 0,
+                    "Net amortization must never exceed the discount — net: " + netAfterBackdated + ", discount: " + discount);
+
+            // Overpay (cumulative 11000 > principal + discount = 10000) → inline full recognition.
+            businessDateHelper.updateBusinessDate("BUSINESS_DATE", "2026-09-10");
+            wcLoanHelper.makeRepayment(loanId, WorkingCapitalLoanRequestBuilders.repayment(BigDecimal.valueOf(6000), "10 September 2026"));
+
+            final GetWorkingCapitalLoansLoanIdResponse loan = wcLoanHelper.getLoanDetails(loanId);
+            assertEquals("loanStatusType.overpaid", loan.getStatus().getCode(), "Loan should be overpaid after the final repayment");
+
+            final BigDecimal netAfterOverpay = netAmortization(loanId);
+            assertEquals(0, netAfterOverpay.compareTo(discount),
+                    "After overpay, net amortization (amortization - adjustment) must equal the discount exactly — net: " + netAfterOverpay
+                            + ", discount: " + discount);
+        });
+    }
+
+    /** Net recognized discount fee income from transactions: sum(amortization) - sum(amortization adjustment). */
+    private BigDecimal netAmortization(final Long loanId) {
+        final List<GetWorkingCapitalLoanTransactionIdResponse> txns = wcLoanHelper.getTransactions(loanId);
+        return sumAmounts(filterByType(txns, DISCOUNT_FEE_AMORTIZATION_CODE))
+                .subtract(sumAmounts(filterByType(txns, DISCOUNT_FEE_AMORTIZATION_ADJUSTMENT_CODE)));
+    }
+
+    private static BigDecimal sumAmounts(List<GetWorkingCapitalLoanTransactionIdResponse> transactions) {
+        return transactions.stream()
+                .map(txn -> Objects.requireNonNull(txn.getTransactionAmount(),
+                        () -> "transactionAmount must not be null for transaction " + txn.getId()))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
+
     private void assertJournalEntry(List<JournalEntryTransactionItem> entries, String expectedType, Account expectedAccount,
             BigDecimal expectedAmount) {
         final boolean found = entries.stream().anyMatch(entry -> {
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ProvisioningCategoryDeleteIntegrationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ProvisioningCategoryDeleteIntegrationTest.java
new file mode 100644
index 0000000..736af08
--- /dev/null
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ProvisioningCategoryDeleteIntegrationTest.java
@@ -0,0 +1,140 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.integrationtests.common;
+
+import com.google.gson.Gson;
+import io.restassured.builder.RequestSpecBuilder;
+import io.restassured.builder.ResponseSpecBuilder;
+import io.restassured.http.ContentType;
+import io.restassured.specification.RequestSpecification;
+import io.restassured.specification.ResponseSpecification;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.fineract.integrationtests.common.accounting.Account;
+import org.apache.fineract.integrationtests.common.accounting.AccountHelper;
+import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
+import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
+import org.apache.fineract.integrationtests.common.provisioning.ProvisioningHelper;
+import org.apache.fineract.integrationtests.common.provisioning.ProvisioningTransactionHelper;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Covers {@code DELETE /provisioningcategory/{id}} — see FINERACT-2653. The endpoint was broken in several ways
+ * (create-validation run on a body-less DELETE, a transient entity with a null id, and an in-use check querying a
+ * non-existent table); these tests exercise both the success and the in-use-rejected paths end to end.
+ */
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public class ProvisioningCategoryDeleteIntegrationTest {
+
+    private RequestSpecification requestSpec;
+    private ResponseSpecification responseSpec;
+    private AccountHelper accountHelper;
+    private LoanTransactionHelper loanTransactionHelper;
+
+    @BeforeEach
+    public void setup() {
+        Utils.initializeRESTAssured();
+        this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
+        this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
+        this.requestSpec.header("Fineract-Platform-TenantId", "default");
+        this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
+        this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec);
+        this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec);
+    }
+
+    @Test
+    public void testDeleteUnusedProvisioningCategorySucceeds() {
+        final ProvisioningTransactionHelper transactionHelper = new ProvisioningTransactionHelper(requestSpec, responseSpec);
+
+        final String categoryName = Utils.randomStringGenerator("PROV_CAT_", 6);
+        final Integer categoryId = transactionHelper.createProvisioningCategory("{\"categoryname\":\"" + categoryName + "\"}");
+        Assertions.assertNotNull(categoryId);
+
+        // An unused category must delete cleanly. Regression guard: the in-use check previously queried a
+        // non-existent table (m_loanproduct_provisioning_details) and failed on every database.
+        final Integer deletedId = transactionHelper.deleteProvisioningCategory(categoryId);
+        Assertions.assertEquals(categoryId, deletedId);
+
+        final ArrayList categories = transactionHelper.retrieveAllProvisioningCategories();
+        for (Object category : categories) {
+            Assertions.assertNotEquals(categoryId, ((Map) category).get("id"));
+        }
+    }
+
+    @Test
+    public void testDeleteProvisioningCategoryInUseIsRejected() {
+        final ProvisioningTransactionHelper transactionHelper = new ProvisioningTransactionHelper(requestSpec, responseSpec);
+
+        // A brand-new category, referenced from a criteria below — so the test never touches the seed categories.
+        final String categoryName = Utils.randomStringGenerator("PROV_CAT_", 6);
+        final Integer categoryId = transactionHelper.createProvisioningCategory("{\"categoryname\":\"" + categoryName + "\"}");
+        Assertions.assertNotNull(categoryId);
+
+        final Integer loanProductId = createLoanProduct();
+        Assertions.assertNotNull(loanProductId);
+        final ArrayList<Integer> loanProducts = new ArrayList<>();
+        loanProducts.add(loanProductId);
+        final Account liability = accountHelper.createLiabilityAccount();
+        final Account expense = accountHelper.createExpenseAccount();
+
+        // Reference only the fresh category under test, so the criteria is valid regardless of any pre-existing
+        // provisioning data on the tenant (and so the test stays isolated from the seed categories).
+        final ArrayList allCategories = transactionHelper.retrieveAllProvisioningCategories();
+        final ArrayList categoriesUnderTest = new ArrayList();
+        for (Object category : allCategories) {
+            if (categoryId.equals(((Map) category).get("id"))) {
+                categoriesUnderTest.add(category);
+            }
+        }
+        final Map requestCriteria = ProvisioningHelper.createProvisioingCriteriaJson(loanProducts, categoriesUnderTest, liability, expense);
+        final Integer criteriaId = transactionHelper.createProvisioningCriteria(new Gson().toJson(requestCriteria));
+        Assertions.assertNotNull(criteriaId);
+
+        // Delete must be rejected with the domain-rule violation (HTTP 403), NOT a SQL/table error.
+        final ResponseSpecification errorSpec = new ResponseSpecBuilder().expectStatusCode(403).build();
+        final ArrayList<HashMap> error = (ArrayList<HashMap>) transactionHelper.deleteProvisioningCategoryExpectingError(errorSpec,
+                categoryId);
+        Assertions.assertEquals("error.msg.provisioningcategory.cannot.be.deleted.it.is.already.used.in.loanproduct",
+                error.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE));
+
+        // Once the referencing criteria is removed, the category can be deleted.
+        transactionHelper.deleteProvisioningCriteria(criteriaId);
+        final Integer deletedId = transactionHelper.deleteProvisioningCategory(categoryId);
+        Assertions.assertEquals(categoryId, deletedId);
+    }
+
+    private Integer createLoanProduct() {
+        final String loanProductJSON = new LoanProductTestBuilder() //
+                .withPrincipal("100000.00") //
+                .withNumberOfRepayments("4") //
+                .withRepaymentAfterEvery("1") //
+                .withRepaymentTypeAsMonth() //
+                .withinterestRatePerPeriod("1") //
+                .withInterestRateFrequencyTypeAsMonths() //
+                .withAmortizationTypeAsEqualInstallments() //
+                .withInterestTypeAsDecliningBalance() //
+                .withTranches(false) //
+                .withAccountingRuleAsNone() //
+                .build(null);
+        return this.loanTransactionHelper.getLoanProductId(loanProductJSON);
+    }
+}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java
index 143a20a..fcbc0bf 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java
@@ -24,6 +24,7 @@
 import java.util.Map;
 import org.apache.fineract.client.models.PageProvisioningEntryData;
 import org.apache.fineract.client.util.Calls;
+import org.apache.fineract.integrationtests.common.CommonConstants;
 import org.apache.fineract.integrationtests.common.FineractClientHelper;
 import org.apache.fineract.integrationtests.common.Utils;
 
@@ -55,6 +56,21 @@
         return Utils.performServerGet(requestSpec, responseSpec, PROVISIONING_CATEGORY_URL, "");
     }
 
+    public Integer createProvisioningCategory(final String provisioningCategoryJson) {
+        return Utils.performServerPost(this.requestSpec, this.responseSpec, PROVISIONING_CATEGORY_URL, provisioningCategoryJson,
+                "resourceId");
+    }
+
+    public Integer deleteProvisioningCategory(final Integer categoryId) {
+        final String url = "/fineract-provider/api/v1/provisioningcategory/" + categoryId + "?" + Utils.TENANT_IDENTIFIER;
+        return Utils.performServerDelete(this.requestSpec, this.responseSpec, url, "resourceId");
+    }
+
+    public Object deleteProvisioningCategoryExpectingError(final ResponseSpecification errorResponseSpec, final Integer categoryId) {
+        final String url = "/fineract-provider/api/v1/provisioningcategory/" + categoryId + "?" + Utils.TENANT_IDENTIFIER;
+        return Utils.performServerDelete(this.requestSpec, errorResponseSpec, url, CommonConstants.RESPONSE_ERROR);
+    }
+
     // TODO: Rewrite to use fineract-client instead!
     // Example: org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper.disburseLoan(java.lang.Long,
     // org.apache.fineract.client.models.PostLoansLoanIdRequest)
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/workingcapitalloan/WorkingCapitalLoanHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/workingcapitalloan/WorkingCapitalLoanHelper.java
index d35ffb4..79a031b 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/workingcapitalloan/WorkingCapitalLoanHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/workingcapitalloan/WorkingCapitalLoanHelper.java
@@ -145,6 +145,10 @@
         FeignCalls.ok(() -> transactionsApi().executeWorkingCapitalLoanTransactionById(loanId, "creditBalanceRefund", request));
     }
 
+    public void makeGoodwillCreditByLoanId(final Long loanId, final PostWorkingCapitalLoanTransactionsRequest request) {
+        FeignCalls.ok(() -> transactionsApi().executeWorkingCapitalLoanTransactionById(loanId, "goodwillCredit", request));
+    }
+
     public CallFailedRuntimeException runCreditBalanceRefundByLoanIdExpectingFailure(final Long loanId,
             final PostWorkingCapitalLoanTransactionsRequest request) {
         return FeignCalls.fail(() -> transactionsApi().executeWorkingCapitalLoanTransactionById(loanId, "creditBalanceRefund", request));
diff --git a/scripts/check-liquibase-ddl-safety.sh b/scripts/check-liquibase-ddl-safety.sh
index 6422974..741ef38 100755
--- a/scripts/check-liquibase-ddl-safety.sh
+++ b/scripts/check-liquibase-ddl-safety.sh
@@ -21,7 +21,8 @@
 # check-liquibase-ddl-safety.sh
 #
 # Scans Liquibase XML changesets introduced in a PR for dangerous DDL
-# operations on critical tables. Designed for CI but also runs locally.
+# operations on critical tables and invalid DATETIME precision. Designed for
+# CI but also runs locally.
 #
 # Uses only bash builtins + grep/sed (no xmllint dependency).
 #
@@ -96,17 +97,20 @@
     CRITICAL_TABLES+=("$line")
 done < "$CRITICAL_TABLES_FILE"
 
-# Load dangerous operations into associative arrays
-declare -A OP_SEVERITY
-declare -A OP_RISK
+# Load dangerous operations into indexed arrays. Avoid associative arrays so
+# this script can also start on macOS' default Bash 3.
+OP_ELEMENTS=()
+OP_SEVERITIES=()
+OP_RISKS=()
 while IFS='|' read -r element severity risk; do
     element="${element%%#*}"
     element="$(echo "$element" | tr -d '[:space:]')"
     [[ -z "$element" ]] && continue
     severity="$(echo "$severity" | tr -d '[:space:]')"
     risk="$(echo "$risk" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
-    OP_SEVERITY["$element"]="$severity"
-    OP_RISK["$element"]="$risk"
+    OP_ELEMENTS+=("$element")
+    OP_SEVERITIES+=("$severity")
+    OP_RISKS+=("$risk")
 done < "$DANGEROUS_OPS_FILE"
 
 # ---- Find changed XML files ----
@@ -117,7 +121,7 @@
     MERGE_BASE=$(git -C "$REPO_ROOT" merge-base "$BASE_REF" "$HEAD_REF" 2>/dev/null || echo "$BASE_REF")
     while IFS= read -r f; do
         [[ -n "$f" ]] && CHANGED_FILES+=("$f")
-    done < <(git -C "$REPO_ROOT" diff --name-only --diff-filter=AM "$MERGE_BASE".."$HEAD_REF" -- '*.xml' | grep '/db/changelog/' || true)
+    done < <(git -C "$REPO_ROOT" diff --name-only --diff-filter=AM "$MERGE_BASE".."$HEAD_REF" -- '*.xml' | grep -E '/db/(changelog|custom-changelog)/' || true)
 fi
 
 if [[ ${#CHANGED_FILES[@]} -eq 0 ]]; then
@@ -182,6 +186,10 @@
 
 is_created_in_pr() {
     local table="$1"
+    if [[ ${#CREATED_TABLES[@]} -eq 0 ]]; then
+        return 1
+    fi
+
     for ct in "${CREATED_TABLES[@]}"; do
         if [[ "$table" == "$ct" ]]; then
             return 0
@@ -210,7 +218,9 @@
     fi
 
     local effective_severity="$severity"
-    if [[ "$severity" == "CRITICAL" ]] || [[ "$severity" == "HIGH" ]]; then
+    if [[ "$severity" == "BLOCKING" ]]; then
+        ((BLOCKING_COUNT++)) || true
+    elif [[ "$severity" == "CRITICAL" ]] || [[ "$severity" == "HIGH" ]]; then
         if is_critical_table "$table"; then
             effective_severity="CRITICAL"
             ((BLOCKING_COUNT++)) || true
@@ -230,6 +240,56 @@
     VIOLATIONS+=("${effective_severity}|${file}|${operation}|${table}${detail_str}|${risk}")
 }
 
+find_invalid_datetime_precision() {
+    local local_file="$1"
+    awk '
+    BEGIN {}
+    {
+        remaining = $0
+        while (match(remaining, /(type|columnDataType)[[:space:]]*=[[:space:]]*"[^"]*"/)) {
+            attr = substr(remaining, RSTART, RLENGTH)
+            value = attr
+            sub(/^[^"]*"/, "", value)
+            sub(/"$/, "", value)
+
+            normalized = toupper(value)
+            gsub(/[[:space:]]/, "", normalized)
+
+            if (normalized ~ /^DATETIME(\([0-9]+\))?$/ && normalized != "DATETIME(6)") {
+                print FNR "|" attr
+            }
+
+            remaining = substr(remaining, RSTART + RLENGTH)
+        }
+    }
+    ' "$local_file"
+}
+
+find_invalid_datetime_precision_in_sql_blocks() {
+    local local_file="$1"
+    awk '
+    BEGIN { in_sql = 0 }
+    /<sql([[:space:]>]|$)/ { in_sql = 1 }
+    in_sql {
+        remaining = $0
+        while (match(toupper(remaining), /(^|[^[:alnum:]_])DATETIME[[:space:]]*(\([[:space:]]*[0-9]+[[:space:]]*\))?([^[:alnum:]_]|$)/)) {
+            token = substr(remaining, RSTART, RLENGTH)
+            gsub(/^[^[:alnum:]_]+/, "", token)
+            gsub(/[^[:alnum:]_)]+$/, "", token)
+            normalized = toupper(token)
+            gsub(/[[:space:]]/, "", normalized)
+
+            if (normalized != "DATETIME(6)") {
+                print FNR "|" token
+            }
+
+            remaining = substr(remaining, RSTART + RLENGTH)
+        }
+    }
+    /<\/sql>/ { in_sql = 0 }
+    ' "$local_file"
+}
+
 # ---- Scan each changed file ----
 for file in "${CHANGED_FILES[@]}"; do
     local_file="$REPO_ROOT/$file"
@@ -248,8 +308,28 @@
     # Flatten multiline XML tags so attribute matching works across line breaks
     FLAT_CONTENT=$(flatten_xml_tags "$(cat "$local_file")")
 
+    # ---- Check DATETIME precision ----
+    # MySQL DATETIME defaults to precision 0. Use DATETIME(6) explicitly in
+    # Liquibase changelogs to preserve microsecond precision.
+    while IFS='|' read -r line match; do
+        [[ -z "$line" ]] && continue
+        add_violation "BLOCKING" "$file" "datetime-precision" "n/a" \
+            "Use DATETIME(6) instead of DATETIME; MySQL DATETIME defaults to precision 0" \
+            "line: $line, match: $match"
+    done < <(find_invalid_datetime_precision "$local_file")
+
+    while IFS='|' read -r line match; do
+        [[ -z "$line" ]] && continue
+        add_violation "BLOCKING" "$file" "raw-SQL-datetime-precision" "n/a" \
+            "Use DATETIME(6) instead of DATETIME in raw SQL blocks; MySQL DATETIME defaults to precision 0" \
+            "line: $line, match: $match"
+    done < <(find_invalid_datetime_precision_in_sql_blocks "$local_file")
+
     # ---- Check simple dangerous operations ----
-    for op in "${!OP_SEVERITY[@]}"; do
+    for op_index in "${!OP_ELEMENTS[@]}"; do
+        op="${OP_ELEMENTS[$op_index]}"
+        op_severity="${OP_SEVERITIES[$op_index]}"
+        op_risk="${OP_RISKS[$op_index]}"
         # Find all occurrences of <operation ... tableName="xxx" ...> or <operation ... tableName="xxx"/>
         while IFS= read -r table; do
             [[ -z "$table" ]] && continue
@@ -280,7 +360,7 @@
                     ;;
             esac
 
-            add_violation "${OP_SEVERITY[$op]}" "$file" "$op" "$table" "${OP_RISK[$op]}" "$detail"
+            add_violation "$op_severity" "$file" "$op" "$table" "$op_risk" "$detail"
         done < <(echo "$FLAT_CONTENT" | grep -oP "<${op}[^>]*tableName=\"\K[^\"]*" 2>/dev/null | sort -u || true)
     done
 
@@ -328,12 +408,12 @@
 TOTAL_VIOLATIONS=${#VIOLATIONS[@]}
 
 if [[ $TOTAL_VIOLATIONS -eq 0 ]]; then
-    echo "No dangerous DDL changes detected."
+    echo "No Liquibase safety violations detected."
     if [[ -n "$OUTPUT_DIR" ]]; then
         cat > "$OUTPUT_DIR/report.md" << 'MDEOF'
 ## Liquibase DDL Safety Check - PASSED
 
-No dangerous DDL changes detected in this PR's Liquibase migrations.
+No Liquibase safety violations detected in this PR's Liquibase migrations.
 All migrations are safe for rolling deployments.
 MDEOF
         echo '{"violations":[],"summary":{"total":0,"critical":0,"warnings":0}}' > "$OUTPUT_DIR/report.json"
@@ -345,8 +425,8 @@
 MD_REPORT=""
 if [[ $BLOCKING_COUNT -gt 0 ]]; then
     MD_REPORT+="## Liquibase DDL Safety Check - BLOCKED"$'\n\n'
-    MD_REPORT+="**${BLOCKING_COUNT} blocking violation(s) found** on critical tables."$'\n'
-    MD_REPORT+="These changes are dangerous for rolling deployments and must be reviewed."$'\n\n'
+    MD_REPORT+="**${BLOCKING_COUNT} blocking violation(s) found**."$'\n'
+    MD_REPORT+="These changes violate Liquibase migration safety rules and must be reviewed."$'\n\n'
 else
     MD_REPORT+="## Liquibase DDL Safety Check - WARNINGS"$'\n\n'
     MD_REPORT+="**${WARNING_COUNT} warning(s) found** (non-blocking)."$'\n\n'
@@ -399,6 +479,7 @@
     MD_REPORT+="- **Instead of DROP COLUMN**: Mark as deprecated, remove in a future release after all instances are updated"$'\n'
     MD_REPORT+="- **Instead of RENAME COLUMN**: Add new column, backfill, update code, drop old column in a later release"$'\n'
     MD_REPORT+="- **Instead of ADD NOT NULL**: Add as nullable first, backfill defaults, add constraint in a later release"$'\n'
+    MD_REPORT+="- **Instead of DATETIME**: Use \`DATETIME(6)\` to preserve MySQL microsecond precision"$'\n'
 fi
 
 # Print to console
@@ -418,7 +499,7 @@
 # Exit code
 if [[ $BLOCKING_COUNT -gt 0 ]]; then
     echo ""
-    echo "FAILED: $BLOCKING_COUNT blocking violation(s) on critical tables."
+    echo "FAILED: $BLOCKING_COUNT blocking violation(s)."
     exit 1
 else
     echo ""
diff --git a/static-weaving.gradle b/static-weaving.gradle
index a084ab6..01c7b1b 100644
--- a/static-weaving.gradle
+++ b/static-weaving.gradle
@@ -16,51 +16,174 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-// In static-weaving.gradle
+import org.gradle.api.artifacts.component.ProjectComponentIdentifier
 
-// Wait until after project evaluation to ensure all plugins are applied
+private static List<String> findJpaManagedClasses(Project moduleProject) {
+    File sourceRoot = moduleProject.file('src/main/java')
+    if (!sourceRoot.exists()) {
+        return []
+    }
+
+    moduleProject.fileTree(sourceRoot) {
+        include '**/*.java'
+    }.findAll { File javaSource ->
+        isJpaManagedClass(javaSource.text)
+    }.collect { File javaSource ->
+        toFullyQualifiedClassName(javaSource)
+    }.findAll {
+        it != null
+    }.unique().sort()
+}
+
+private static boolean isJpaManagedClass(String source) {
+    def hasManagedAnnotation = (source =~ /(?m)^\s*@((jakarta|javax)\.persistence\.)?(Entity|MappedSuperclass|Converter)\b/).find()
+    def isConcreteAttributeConverter = (source =~ /(?s)\bimplements\b.*?\bAttributeConverter\s*</).find()
+            && !(source =~ /(?m)^\s*(public\s+|protected\s+|private\s+)?abstract\s+class\s+/).find()
+    hasManagedAnnotation || isConcreteAttributeConverter
+}
+
+private static String toFullyQualifiedClassName(File javaSource) {
+    def packageMatcher = javaSource.text =~ /(?m)^\s*package\s+([^;]+);/
+    if (!packageMatcher.find()) {
+        return null
+    }
+    "${packageMatcher.group(1)}.${javaSource.name - '.java'}"
+}
+
+private static List<Project> runtimeProjectDependencies(Project moduleProject) {
+    def runtimeClasspath = moduleProject.configurations.findByName('runtimeClasspath')
+    if (runtimeClasspath == null || !runtimeClasspath.canBeResolved) {
+        return []
+    }
+
+    runtimeClasspath.incoming.resolutionResult.allComponents.collect { component ->
+        component.id
+    }.findAll { componentId ->
+        componentId instanceof ProjectComponentIdentifier && componentId.projectPath != moduleProject.path
+    }.collect { componentId ->
+        moduleProject.rootProject.project(componentId.projectPath)
+    }.unique().sort { left, right ->
+        left.path <=> right.path
+    }
+}
+
+private static Map<Project, List<String>> managedClassesByProject(Project moduleProject) {
+    (runtimeProjectDependencies(moduleProject) + moduleProject).collectEntries { Project candidateProject ->
+        def managedClasses = findJpaManagedClasses(candidateProject)
+        managedClasses.isEmpty() ? [:] : [(candidateProject): managedClasses]
+    }
+}
+
+private static void writePersistenceXml(File outputFile, Map<Project, List<String>> classesByProject) {
+    outputFile.parentFile.mkdirs()
+    outputFile.text = """<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements. See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership. The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License. You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied. See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+
+
+<persistence version="2.0"
+             xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+
+    <!--  This file is generated by static-weaving.gradle and is only used for static weaving.  -->
+    <!--  You can find the runtime configuration in the JPAConfig class.  -->
+    <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL">
+        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+${classesByProject.collect { Project moduleProject, List<String> managedClasses ->
+        """
+        <!--  ${moduleProject.name} module: -->
+${managedClasses.collect { managedClass ->
+            "        <class>${managedClass}</class>"
+        }.join('\n')}"""
+    }.join('\n')}
+
+        <exclude-unlisted-classes>false</exclude-unlisted-classes>
+        <properties>
+            <property name="eclipselink.weaving" value="static"/>
+            <property name="eclipselink.weaving.internal" value="false"/>
+        </properties>
+    </persistence-unit>
+</persistence>
+"""
+}
+
+// Wait until after project evaluation to ensure all plugins and dependencies are applied.
 project.afterEvaluate {
-    // Only configure if this is a Java project
     if (!project.plugins.hasPlugin('java')) {
-        logger.info("ℹ Skipping static weaving configuration for non-Java project: ${project.name}")
+        logger.info("Skipping static weaving configuration for non-Java project: ${project.name}")
         return
     }
 
-    // Check if the module contains JPA entities
-    def persistenceXmlFile = file("src/main/resources/jpa/static-weaving/module/${project.name}/persistence.xml")
-    def hasJpaEntities = persistenceXmlFile.exists()
+    def ownManagedClasses = findJpaManagedClasses(project)
+    if (ownManagedClasses.isEmpty()) {
+        logger.info("No JPA managed classes found in ${project.name}, skipping static weaving configuration")
+        return
+    }
 
-    if (hasJpaEntities) {
-        logger.info("Configuring EclipseLink static weaving for ${project.name}")
+    logger.info("Configuring EclipseLink static weaving for ${project.name}")
 
-        compileJava.doLast {
-            def source = sourceSets.main.java.classesDirectory.get()
+    def generatedPersistenceXml = layout.buildDirectory.file('tmp/compileJava/static-weaving/META-INF/persistence.xml')
+    def generateStaticWeavingPersistenceXml = tasks.register('generateStaticWeavingPersistenceXml') {
+        description = 'Generates the EclipseLink static weaving persistence.xml from project JPA classes'
+        group = 'build'
 
-            File weavingRoot = new File(temporaryDir, "static-weaving")
-            File metaInf = new File(weavingRoot, "META-INF")
-            metaInf.mkdirs()
+        inputs.files(project.sourceSets.main.java.srcDirs).withPropertyName('javaSourceRoots')
+        outputs.file(generatedPersistenceXml).withPropertyName('persistenceXml')
+        outputs.upToDateWhen { false }
 
-            copy {
-                from persistenceXmlFile.toPath()
-                into metaInf.toPath()
-                duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+        doLast {
+            def classesByProject = managedClassesByProject(project)
+            def classCount = classesByProject.values().sum { List<String> managedClasses -> managedClasses.size() } ?: 0
+            writePersistenceXml(generatedPersistenceXml.get().asFile, classesByProject)
+            logger.lifecycle("Generated EclipseLink static weaving persistence.xml for ${project.path} with ${classCount} managed classes from ${classesByProject.size()} modules")
+        }
+    }
+
+    tasks.named('compileJava') {
+        dependsOn(generateStaticWeavingPersistenceXml)
+
+        doLast {
+            File persistenceXml = generatedPersistenceXml.get().asFile
+            if (!persistenceXml.exists()) {
+                logger.info("No generated persistence.xml found for ${project.name}, skipping static weaving")
+                return
             }
 
-            javaexec {
+            File source = destinationDirectory.get().asFile
+            File weavingRoot = persistenceXml.parentFile.parentFile
+
+            project.javaexec {
                 description = 'Performs EclipseLink static weaving of entity classes'
-                mainClass.set("org.eclipse.persistence.tools.weaving.jpa.StaticWeave")
+                mainClass.set('org.eclipse.persistence.tools.weaving.jpa.StaticWeave')
                 classpath = project.sourceSets.main.runtimeClasspath
                 args = [
-                    "-persistenceinfo",
+                    '-persistenceinfo',
                     weavingRoot.absolutePath,
-                    source,
-                    source
+                    source.absolutePath,
+                    source.absolutePath
                 ]
             }
         }
-
-        logger.info("✓ EclipseLink static weaving configured for ${project.name}")
-    } else {
-        logger.info("ℹ No JPA entities found in ${project.name}, skipping static weaving configuration")
     }
+
+    logger.info("EclipseLink static weaving configured for ${project.name}")
 }
