diff --git a/build.gradle b/build.gradle
index f944ef766..cbf5f3b05 100644
--- a/build.gradle
+++ b/build.gradle
@@ -33,6 +33,7 @@ buildscript {
'fineract-branch',
'fineract-document',
'fineract-investor',
+ 'fineract-charge',
'fineract-rates',
'fineract-loan',
'fineract-savings',
@@ -54,6 +55,7 @@ buildscript {
'fineract-accounting',
'fineract-provider',
'fineract-investor',
+ 'fineract-charge',
'fineract-rates',
'fineract-loan',
'fineract-savings',
diff --git a/fineract-accounting/dependencies.gradle b/fineract-accounting/dependencies.gradle
index 5d95adec8..ba2bfda66 100644
--- a/fineract-accounting/dependencies.gradle
+++ b/fineract-accounting/dependencies.gradle
@@ -25,6 +25,7 @@ dependencies {
// implementation dependencies are directly used (compiled against) in src/main (and src/test)
//
implementation(project(path: ':fineract-core'))
+ implementation(project(path: ':fineract-charge'))
implementation('org.apache.avro:avro')
implementation(
project(path: ':fineract-avro-schemas')
diff --git a/fineract-accounting/src/main/resources/jpa/accounting/persistence.xml b/fineract-accounting/src/main/resources/jpa/accounting/persistence.xml
index c919eb5ea..3e2aa1743 100644
--- a/fineract-accounting/src/main/resources/jpa/accounting/persistence.xml
+++ b/fineract-accounting/src/main/resources/jpa/accounting/persistence.xml
@@ -35,13 +35,14 @@
org.apache.fineract.infrastructure.codes.domain.CodeValue
org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom
org.apache.fineract.organisation.office.domain.Office
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxComponent
org.apache.fineract.portfolio.tax.domain.TaxComponentHistory
org.apache.fineract.portfolio.tax.domain.TaxGroup
org.apache.fineract.portfolio.tax.domain.TaxGroupMappings
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-branch/src/main/resources/jpa/branch/persistence.xml b/fineract-branch/src/main/resources/jpa/branch/persistence.xml
index bf32dc798..ef4086d55 100644
--- a/fineract-branch/src/main/resources/jpa/branch/persistence.xml
+++ b/fineract-branch/src/main/resources/jpa/branch/persistence.xml
@@ -29,7 +29,6 @@
org.eclipse.persistence.jpa.PersistenceProvider
-
org.apache.fineract.accounting.glaccount.domain.GLAccount
org.apache.fineract.accounting.journalentry.domain.JournalEntry
org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom
@@ -53,7 +52,6 @@
org.apache.fineract.portfolio.fund.domain.Fund
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket
org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxGroup
@@ -69,6 +67,8 @@
org.apache.fineract.useradministration.domain.Role
org.apache.fineract.useradministration.domain.Permission
org.apache.fineract.useradministration.domain.AppUserClientMapping
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-charge/build.gradle b/fineract-charge/build.gradle
new file mode 100644
index 000000000..636fc048a
--- /dev/null
+++ b/fineract-charge/build.gradle
@@ -0,0 +1,106 @@
+/**
+ * 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.
+ */
+description = 'Fineract Charge'
+
+apply plugin: 'java'
+apply plugin: 'eclipse'
+
+compileJava.doLast {
+ def mainSS = sourceSets.main
+ def source = mainSS.java.classesDirectory.get()
+ copy {
+ from file("src/main/resources/jpa/charge/persistence.xml")
+ into "${source}/META-INF/"
+ }
+ javaexec {
+ description = 'Performs EclipseLink static weaving of entity classes'
+ def target = source
+ main 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave'
+ args '-persistenceinfo', source, source, target
+ classpath sourceSets.main.runtimeClasspath
+ }
+ delete {
+ delete "${source}/META-INF/persistence.xml"
+ }
+}
+
+// Configuration for Swagger documentation generation task
+// https://github.com/swagger-api/swagger-core/tree/master/modules/swagger-gradle-plugin
+import org.apache.tools.ant.filters.ReplaceTokens
+
+
+
+configurations {
+ providedRuntime // needed for Spring Boot executable WAR
+ providedCompile
+ compile() {
+ exclude module: 'hibernate-entitymanager'
+ exclude module: 'hibernate-validator'
+ exclude module: 'activation'
+ exclude module: 'bcmail-jdk14'
+ exclude module: 'bcprov-jdk14'
+ exclude module: 'bctsp-jdk14'
+ exclude module: 'c3p0'
+ exclude module: 'stax-api'
+ exclude module: 'jaxb-api'
+ exclude module: 'jaxb-impl'
+ exclude module: 'jboss-logging'
+ exclude module: 'itext-rtf'
+ exclude module: 'classworlds'
+ }
+ runtime
+}
+
+apply from: 'dependencies.gradle'
+
+// Configuration for the modernizer plugin
+// https://github.com/andygoossens/gradle-modernizer-plugin
+modernizer {
+ ignoreClassNamePatterns = [
+ '.*AbstractPersistableCustom',
+ '.*EntityTables',
+ '.*domain.*'
+ ]
+}
+
+// If we are running Gradle within Eclipse to enhance classes with OpenJPA,
+// set the classes directory to point to Eclipse's default build directory
+if (project.hasProperty('env') && project.getProperty('env') == 'eclipse') {
+ sourceSets.main.java.outputDir = new File(rootProject.projectDir, "fineract-charge/bin/main")
+}
+
+eclipse {
+ project {
+ buildCommand([ LaunchConfigHandle: "/.externalToolBuilders/OpenJPA Enhance Builder.launch" ], 'org.eclipse.ui.externaltools.ExternalToolBuilder')
+ }
+}
+
+/* http://stackoverflow.com/questions/19653311/jpa-repository-works-in-idea-and-production-but-not-in-gradle */
+sourceSets.main.output.resourcesDir = sourceSets.main.java.classesDirectory
+sourceSets.test.output.resourcesDir = sourceSets.test.java.classesDirectory
+
+if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) {
+ sourceSets {
+ test {
+ java {
+ exclude '**/core/boot/tests/**'
+ }
+ }
+ }
+}
diff --git a/fineract-charge/dependencies.gradle b/fineract-charge/dependencies.gradle
new file mode 100644
index 000000000..bd2a15867
--- /dev/null
+++ b/fineract-charge/dependencies.gradle
@@ -0,0 +1,74 @@
+/**
+ * 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.
+ */
+
+dependencies {
+ // Never use "compile" scope, but make all dependencies either 'implementation', 'runtimeOnly' or 'testCompile'.
+ // Note that we never use 'api', because Fineract at least currently is a simple monolithic application ("WAR"), not a library.
+ // We also (normally should have) no need to ever use 'compileOnly'.
+
+ // implementation dependencies are directly used (compiled against) in src/main (and src/test)
+ //
+ implementation(project(path: ':fineract-core'))
+
+ implementation(
+ 'org.springframework.boot:spring-boot-starter-web',
+ 'org.springframework.boot:spring-boot-starter-security',
+ 'jakarta.ws.rs:jakarta.ws.rs-api',
+ 'org.glassfish.jersey.media:jersey-media-multipart',
+
+ 'com.google.guava:guava',
+ 'com.google.code.gson:gson',
+
+ 'org.apache.commons:commons-lang3',
+
+ 'com.jayway.jsonpath:json-path',
+
+ 'com.github.spotbugs:spotbugs-annotations',
+ 'io.swagger.core.v3:swagger-annotations-jakarta',
+
+ 'com.squareup.retrofit2:converter-gson',
+
+ 'org.springdoc:springdoc-openapi-starter-webmvc-ui',
+ 'org.mapstruct:mapstruct',
+
+ 'io.github.resilience4j:resilience4j-spring-boot3',
+ 'org.apache.httpcomponents:httpcore',
+ )
+ compileOnly 'org.projectlombok:lombok'
+ annotationProcessor 'org.projectlombok:lombok'
+ annotationProcessor 'org.mapstruct:mapstruct-processor'
+ implementation ('org.springframework.boot:spring-boot-starter-data-jpa') {
+ exclude group: 'org.hibernate'
+ }
+ implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') {
+ exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence'
+ }
+ // testCompile dependencies are ONLY used in src/test, not src/main.
+ // Do NOT repeat dependencies which are ALREADY in implementation or runtimeOnly!
+ //
+ testImplementation( 'io.github.classgraph:classgraph' )
+ testImplementation ('org.springframework.boot:spring-boot-starter-test') {
+ exclude group: 'com.jayway.jsonpath', module: 'json-path'
+ exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
+ exclude group: 'jakarta.activation'
+ exclude group: 'javax.activation'
+ exclude group: 'org.skyscreamer'
+ }
+ testImplementation ('org.mockito:mockito-inline')
+}
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiConstants.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiConstants.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiConstants.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiConstants.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResourceSwagger.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResourceSwagger.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResourceSwagger.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResourceSwagger.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeAppliesTo.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeAppliesTo.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeAppliesTo.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeAppliesTo.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeCalculationType.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeCalculationType.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeCalculationType.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeCalculationType.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargePaymentMode.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargePaymentMode.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargePaymentMode.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargePaymentMode.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepository.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepository.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepository.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepository.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepositoryWrapper.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepositoryWrapper.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepositoryWrapper.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/ChargeRepositoryWrapper.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeAppliedToException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeAppliedToException.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeAppliedToException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeAppliedToException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeDeletedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeDeletedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeDeletedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeDeletedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeUpdatedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeUpdatedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeUpdatedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeCannotBeUpdatedException.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeDueAtDisbursementCannotBePenaltyException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeDueAtDisbursementCannotBePenaltyException.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeDueAtDisbursementCannotBePenaltyException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeDueAtDisbursementCannotBePenaltyException.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeIsNotActiveException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeIsNotActiveException.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeIsNotActiveException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeIsNotActiveException.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeMustBePenaltyException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeMustBePenaltyException.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeMustBePenaltyException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeMustBePenaltyException.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeNotFoundException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeNotFoundException.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeNotFoundException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ChargeNotFoundException.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeAddedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeAddedException.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeAddedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeAddedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeDeletedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeDeletedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeDeletedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeDeletedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBePayedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBePayedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBePayedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBePayedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeUpdatedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeUpdatedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeUpdatedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeUpdatedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeWaivedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeWaivedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeWaivedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeCannotBeWaivedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeNotFoundException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeNotFoundException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeNotFoundException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeNotFoundException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeWaiveCannotBeReversedException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeWaiveCannotBeReversedException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeWaiveCannotBeReversedException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/LoanChargeWaiveCannotBeReversedException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/ShareAccountChargeWithoutMandatoryFieldException.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ShareAccountChargeWithoutMandatoryFieldException.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/exception/ShareAccountChargeWithoutMandatoryFieldException.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/exception/ShareAccountChargeWithoutMandatoryFieldException.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/handler/CreateChargeDefinitionCommandHandler.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/handler/CreateChargeDefinitionCommandHandler.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/handler/CreateChargeDefinitionCommandHandler.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/handler/CreateChargeDefinitionCommandHandler.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/handler/DeleteChargeDefinitionCommandHandler.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/handler/DeleteChargeDefinitionCommandHandler.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/handler/DeleteChargeDefinitionCommandHandler.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/handler/DeleteChargeDefinitionCommandHandler.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/handler/UpdateChargeDefinitionCommandHandler.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/handler/UpdateChargeDefinitionCommandHandler.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/handler/UpdateChargeDefinitionCommandHandler.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/handler/UpdateChargeDefinitionCommandHandler.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/serialization/ChargeDefinitionCommandFromApiJsonDeserializer.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformService.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformService.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformService.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformService.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformServiceImpl.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformServiceImpl.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformServiceImpl.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeDropdownReadPlatformServiceImpl.java
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeEnumerations.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeEnumerations.java
similarity index 100%
rename from fineract-core/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeEnumerations.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeEnumerations.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformService.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformService.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformService.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformService.java
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformService.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformService.java
similarity index 100%
rename from fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformService.java
rename to fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformService.java
diff --git a/fineract-charge/src/main/resources/jpa/charge/db/changelog/tenant/module/charge/module-changelog-master.xml b/fineract-charge/src/main/resources/jpa/charge/db/changelog/tenant/module/charge/module-changelog-master.xml
new file mode 100644
index 000000000..570460d3f
--- /dev/null
+++ b/fineract-charge/src/main/resources/jpa/charge/db/changelog/tenant/module/charge/module-changelog-master.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/fineract-charge/src/main/resources/jpa/charge/persistence.xml b/fineract-charge/src/main/resources/jpa/charge/persistence.xml
new file mode 100644
index 000000000..d3ba0d405
--- /dev/null
+++ b/fineract-charge/src/main/resources/jpa/charge/persistence.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+ org.eclipse.persistence.jpa.PersistenceProvider
+
+ org.apache.fineract.accounting.glaccount.domain.GLAccount
+ org.apache.fineract.accounting.journalentry.domain.JournalEntry
+ org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom
+ org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom
+ org.apache.fineract.infrastructure.codes.domain.Code
+ org.apache.fineract.infrastructure.codes.domain.CodeValue
+ org.apache.fineract.infrastructure.documentmanagement.domain.Image
+ org.apache.fineract.organisation.staff.domain.Staff
+ org.apache.fineract.organisation.office.domain.Office
+ org.apache.fineract.organisation.office.domain.OrganisationCurrency
+ org.apache.fineract.organisation.monetary.domain.ApplicationCurrency
+ org.apache.fineract.organisation.holiday.domain.Holiday
+ org.apache.fineract.organisation.workingdays.domain.WorkingDays
+ org.apache.fineract.portfolio.group.domain.Group
+ org.apache.fineract.portfolio.group.domain.GroupLevel
+ org.apache.fineract.portfolio.group.domain.StaffAssignmentHistory
+ org.apache.fineract.portfolio.group.domain.GroupRole
+ org.apache.fineract.portfolio.client.domain.Client
+ org.apache.fineract.portfolio.client.domain.ClientIdentifier
+ org.apache.fineract.portfolio.rate.domain.Rate
+ org.apache.fineract.portfolio.fund.domain.Fund
+ org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket
+ org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange
+ org.apache.fineract.portfolio.paymenttype.domain.PaymentType
+ org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
+ org.apache.fineract.portfolio.tax.domain.TaxGroup
+ org.apache.fineract.portfolio.tax.domain.TaxGroupMappings
+ org.apache.fineract.portfolio.tax.domain.TaxComponent
+ org.apache.fineract.portfolio.tax.domain.TaxComponentHistory
+ org.apache.fineract.portfolio.floatingrates.domain.FloatingRate
+ org.apache.fineract.portfolio.floatingrates.domain.FloatingRatePeriod
+ org.apache.fineract.portfolio.calendar.domain.Calendar
+ org.apache.fineract.portfolio.calendar.domain.CalendarHistory
+ org.apache.fineract.portfolio.calendar.domain.CalendarInstance
+ org.apache.fineract.useradministration.domain.AppUser
+ org.apache.fineract.useradministration.domain.Role
+ org.apache.fineract.useradministration.domain.Permission
+ org.apache.fineract.useradministration.domain.AppUserClientMapping
+ false
+
+
+
+
+
diff --git a/fineract-document/src/main/resources/jpa/document/persistence.xml b/fineract-document/src/main/resources/jpa/document/persistence.xml
index 7849844df..0c3e741c3 100644
--- a/fineract-document/src/main/resources/jpa/document/persistence.xml
+++ b/fineract-document/src/main/resources/jpa/document/persistence.xml
@@ -50,7 +50,6 @@
org.apache.fineract.portfolio.client.domain.Client
org.apache.fineract.portfolio.client.domain.ClientIdentifier
org.apache.fineract.portfolio.fund.domain.Fund
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxGroup
@@ -64,6 +63,8 @@
org.apache.fineract.useradministration.domain.Role
org.apache.fineract.useradministration.domain.Permission
org.apache.fineract.useradministration.domain.AppUserClientMapping
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-investor/dependencies.gradle b/fineract-investor/dependencies.gradle
index 12ec14af7..c39bee864 100644
--- a/fineract-investor/dependencies.gradle
+++ b/fineract-investor/dependencies.gradle
@@ -26,6 +26,7 @@ dependencies {
//
implementation(project(path: ':fineract-core'))
implementation(project(path: ':fineract-accounting'))
+ implementation(project(path: ':fineract-charge'))
implementation(project(path: ':fineract-loan'))
implementation('org.apache.avro:avro')
implementation(
diff --git a/fineract-loan/dependencies.gradle b/fineract-loan/dependencies.gradle
index 5cf7cdd1c..dac3f7aa1 100644
--- a/fineract-loan/dependencies.gradle
+++ b/fineract-loan/dependencies.gradle
@@ -26,6 +26,7 @@ dependencies {
//
implementation(project(path: ':fineract-core'))
implementation(project(path: ':fineract-accounting'))
+ implementation(project(path: ':fineract-charge'))
implementation(project(path: ':fineract-rates'))
implementation(
diff --git a/fineract-loan/src/main/resources/jpa/loan/persistence.xml b/fineract-loan/src/main/resources/jpa/loan/persistence.xml
index bf32dc798..b76d09e1a 100644
--- a/fineract-loan/src/main/resources/jpa/loan/persistence.xml
+++ b/fineract-loan/src/main/resources/jpa/loan/persistence.xml
@@ -53,7 +53,6 @@
org.apache.fineract.portfolio.fund.domain.Fund
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket
org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxGroup
@@ -69,6 +68,8 @@
org.apache.fineract.useradministration.domain.Role
org.apache.fineract.useradministration.domain.Permission
org.apache.fineract.useradministration.domain.AppUserClientMapping
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle
index 6e64f5abf..b9cb294b7 100644
--- a/fineract-provider/dependencies.gradle
+++ b/fineract-provider/dependencies.gradle
@@ -28,6 +28,7 @@ dependencies {
implementation(project(path: ':fineract-accounting'))
implementation(project(path: ':fineract-investor'))
implementation(project(path: ':fineract-rates'))
+ implementation(project(path: ':fineract-charge'))
implementation(project(path: ':fineract-loan'))
implementation(project(path: ':fineract-savings'))
implementation(project(path: ':fineract-branch'))
diff --git a/fineract-provider/src/main/resources/jpa/persistence.xml b/fineract-provider/src/main/resources/jpa/persistence.xml
index 0d7a3654e..56ae3946c 100644
--- a/fineract-provider/src/main/resources/jpa/persistence.xml
+++ b/fineract-provider/src/main/resources/jpa/persistence.xml
@@ -53,7 +53,6 @@
org.apache.fineract.portfolio.fund.domain.Fund
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket
org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxGroup
@@ -143,6 +142,8 @@
org.apache.fineract.accounting.rule.domain.AccountingTagRule
org.apache.fineract.infrastructure.documentmanagement.domain.Document
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-rates/src/main/resources/jpa/rates/persistence.xml b/fineract-rates/src/main/resources/jpa/rates/persistence.xml
index bf32dc798..b76d09e1a 100644
--- a/fineract-rates/src/main/resources/jpa/rates/persistence.xml
+++ b/fineract-rates/src/main/resources/jpa/rates/persistence.xml
@@ -53,7 +53,6 @@
org.apache.fineract.portfolio.fund.domain.Fund
org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket
org.apache.fineract.portfolio.delinquency.domain.DelinquencyRange
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxGroup
@@ -69,6 +68,8 @@
org.apache.fineract.useradministration.domain.Role
org.apache.fineract.useradministration.domain.Permission
org.apache.fineract.useradministration.domain.AppUserClientMapping
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-savings/dependencies.gradle b/fineract-savings/dependencies.gradle
index 5cf7cdd1c..dac3f7aa1 100644
--- a/fineract-savings/dependencies.gradle
+++ b/fineract-savings/dependencies.gradle
@@ -26,6 +26,7 @@ dependencies {
//
implementation(project(path: ':fineract-core'))
implementation(project(path: ':fineract-accounting'))
+ implementation(project(path: ':fineract-charge'))
implementation(project(path: ':fineract-rates'))
implementation(
diff --git a/fineract-savings/src/main/resources/jpa/savings/persistence.xml b/fineract-savings/src/main/resources/jpa/savings/persistence.xml
index 7849844df..0c3e741c3 100644
--- a/fineract-savings/src/main/resources/jpa/savings/persistence.xml
+++ b/fineract-savings/src/main/resources/jpa/savings/persistence.xml
@@ -50,7 +50,6 @@
org.apache.fineract.portfolio.client.domain.Client
org.apache.fineract.portfolio.client.domain.ClientIdentifier
org.apache.fineract.portfolio.fund.domain.Fund
- org.apache.fineract.portfolio.charge.domain.Charge
org.apache.fineract.portfolio.paymenttype.domain.PaymentType
org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail
org.apache.fineract.portfolio.tax.domain.TaxGroup
@@ -64,6 +63,8 @@
org.apache.fineract.useradministration.domain.Role
org.apache.fineract.useradministration.domain.Permission
org.apache.fineract.useradministration.domain.AppUserClientMapping
+
+ org.apache.fineract.portfolio.charge.domain.Charge
false
diff --git a/fineract-war/build.gradle b/fineract-war/build.gradle
index 0553f56b1..ebee98cfd 100644
--- a/fineract-war/build.gradle
+++ b/fineract-war/build.gradle
@@ -53,6 +53,7 @@ dependencies {
implementation project(':fineract-investor')
implementation project(':fineract-branch')
implementation project(':fineract-document')
+ implementation project(':fineract-charge')
implementation project(':fineract-rates')
implementation project(':fineract-loan')
implementation project(':fineract-savings')
diff --git a/integration-tests/dependencies.gradle b/integration-tests/dependencies.gradle
index f4d2e41eb..bc1aca3f7 100644
--- a/integration-tests/dependencies.gradle
+++ b/integration-tests/dependencies.gradle
@@ -25,6 +25,7 @@ dependencies {
project(path: ':fineract-core', configuration: 'runtimeElements'),
project(path: ':fineract-accounting', configuration: 'runtimeElements'),
project(path: ':fineract-investor', configuration: 'runtimeElements'),
+ project(path: ':fineract-charge', configuration: 'runtimeElements'),
project(path: ':fineract-rates', configuration: 'runtimeElements'),
project(path: ':fineract-loan', configuration: 'runtimeElements'),
project(path: ':fineract-savings', configuration: 'runtimeElements'),
diff --git a/settings.gradle b/settings.gradle
index c37631e13..54b501199 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -55,6 +55,7 @@ include ':fineract-branch'
include ':fineract-document'
include ':fineract-investor'
include ':fineract-rates'
+include ':fineract-charge'
include ':fineract-loan'
include ':fineract-savings'
include ':fineract-war'