You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by al...@apache.org on 2022/02/19 21:55:42 UTC

[fineract] branch develop updated: FINERACT-1498: Switching from Flyway to Liqubase migrations

This is an automated email from the ASF dual-hosted git repository.

aleks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 45bed0a  FINERACT-1498: Switching from Flyway to Liqubase migrations
45bed0a is described below

commit 45bed0a05adf73c7bcad60b45080527961dd2a9e
Author: Arnold Galovics <ga...@gmail.com>
AuthorDate: Wed Feb 9 21:33:01 2022 +0100

    FINERACT-1498: Switching from Flyway to Liqubase migrations
---
 README.md                                          |     4 +-
 build.gradle                                       |     9 +-
 fineract-provider/build.gradle                     |    13 +
 fineract-provider/dependencies.gradle              |     2 +-
 .../boot/AbstractApplicationConfiguration.java     |     9 +-
 .../core/service/RoutingDataSource.java            |     2 +-
 .../core/service/TenantDatabaseUpgradeService.java |   169 -
 .../database/DatabaseIndependentQueryService.java  |    63 +
 .../service/database/DatabaseQueryService.java     |    28 +
 .../core/service/database/DatabaseType.java        |    23 +
 .../service/database/DatabaseTypeResolver.java     |    70 +
 .../core/service/database/MySQLQueryService.java   |    47 +
 .../DatabaseAwareMigrationContextProvider.java     |    48 +
 .../service/migration/ExtendedSpringLiquibase.java |    36 +
 .../migration/ExtendedSpringLiquibaseBuilder.java  |   125 +
 .../migration/ExtendedSpringLiquibaseFactory.java  |    50 +
 .../migration/SchemaUpgradeNeededException.java    |    26 +
 .../service/migration/TenantDataSourceFactory.java |    65 +
 .../migration/TenantDatabaseStateVerifier.java     |    83 +
 .../migration/TenantDatabaseUpgradeService.java    |   146 +
 ...pUserWritePlatformServiceJpaRepositoryImpl.java |     6 +
 .../src/main/resources/application.properties      |    14 +
 .../resources/db/changelog/db.changelog-master.xml |    31 +
 .../tenant-store/changelog-tenant-store.xml        |    27 +
 .../initial-switch-changelog-tenant-store.xml      |    29 +
 .../tenant-store/parts/0001_initial_schema.xml     |   122 +
 .../tenant-store/parts/0002_initial_data.xml       |  2538 +++
 .../db/changelog/tenant/changelog-tenant.xml       |    27 +
 .../tenant/initial-switch-changelog-tenant.xml     |    29 +
 .../changelog/tenant/parts/0001_initial_schema.xml |  9447 +++++++++++
 .../changelog/tenant/parts/0002_initial_data.xml   | 16791 +++++++++++++++++++
 .../src/main/resources/logback-spring.xml          |     3 +-
 ...TestsWithoutDatabaseAndNoJobsConfiguration.java |    25 +-
 .../TenantDatabaseUpgradeServiceTest.java          |   219 +
 34 files changed, 30137 insertions(+), 189 deletions(-)

diff --git a/README.md b/README.md
index 767629f..153bf25 100644
--- a/README.md
+++ b/README.md
@@ -309,11 +309,11 @@ License
 This project is licensed under Apache License Version 2.0. See <https://github.com/apache/incubator-fineract/blob/develop/LICENSE.md> for reference.
 
 The Connector/J JDBC Driver client library from MariaDB.org, which is licensed under the LGPL,
-is used in development when running integration tests that use the Flyway library.  That JDBC
+is used in development when running integration tests that use the Liquibase library.  That JDBC
 driver is however not included in and distributed with the Fineract product and is not
 required to use the product.
 If you are developer and object to using the LGPL licensed Connector/J JDBC driver,
-simply do not run the integration tests that use the Flyway library and/or use another JDBC driver.
+simply do not run the integration tests that use the Liquibase library and/or use another JDBC driver.
 As discussed in [LEGAL-462](https://issues.apache.org/jira/browse/LEGAL-462), this project therefore
 complies with the [Apache Software Foundation third-party license policy](https://www.apache.org/legal/resolved.html).
 
diff --git a/build.gradle b/build.gradle
index 72488ea..0ded477 100644
--- a/build.gradle
+++ b/build.gradle
@@ -46,6 +46,7 @@ buildscript {
     dependencies {
         classpath 'com.bmuschko:gradle-cargo-plugin:2.8.0'
         classpath 'org.apache.openjpa:openjpa:3.2.0' // when upgrading, also change OpenJPA version repeated in fineract-provider/build.gradle!
+        classpath('com.google.cloud.tools:jib-layer-filter-extension-gradle:0.1.0')
     }
 }
 
@@ -182,12 +183,8 @@ allprojects  {
             dependency "com.google.code.findbugs:jsr305:3.0.2"
             dependency "commons-codec:commons-codec:1.15"
 
-            dependency ('org.flywaydb:flyway-core:8.1.0') {
-                // https://issues.apache.org/jira/browse/FINERACT-1172
-                // https://github.com/apache/fineract/pull/1355
-                // https://github.com/flyway/flyway/issues/2957
-                // exclude conflicting non-<optional> dependencies from https://github.com/flyway/flyway/blob/master/flyway-core/pom.xml
-                exclude 'software.amazon.awssdk:s3'
+            dependency ('org.liquibase:liquibase-core:4.5.0') {
+                exclude 'javax.xml.bind:jaxb-api'
             }
 
             dependency ('org.dom4j:dom4j:2.1.3') {
diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle
index 6808759..56bf75b 100644
--- a/fineract-provider/build.gradle
+++ b/fineract-provider/build.gradle
@@ -326,6 +326,19 @@ jib {
             }
         }
     }
+
+    pluginExtensions {
+        pluginExtension {
+            implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension'
+            configuration {
+                filters {
+                    filter {
+                        glob = '/app/resources/**'
+                    }
+                }
+            }
+        }
+    }
 }
 
 tasks.jibDockerBuild.dependsOn = ["bootJar"]
diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle
index 393562f..8151f01 100644
--- a/fineract-provider/dependencies.gradle
+++ b/fineract-provider/dependencies.gradle
@@ -54,7 +54,7 @@ dependencies {
             'org.apache.poi:poi-ooxml-schemas',
             'org.apache.tika:tika-core',
 
-            'org.flywaydb:flyway-core',
+            'org.liquibase:liquibase-core',
 
             'com.github.librepdf:openpdf',
             'com.github.spullara.mustache.java:compiler',
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
index 26e032a..0c0b6c4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/AbstractApplicationConfiguration.java
@@ -20,11 +20,12 @@ package org.apache.fineract.infrastructure.core.boot;
 
 import org.apache.fineract.infrastructure.core.config.FineractProperties;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
 import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
+import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
+import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
 import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.ComponentScan;
@@ -38,11 +39,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @Configuration
 @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
-        DataSourceTransactionManagerAutoConfiguration.class, FlywayAutoConfiguration.class, GsonAutoConfiguration.class,
-        JdbcTemplateAutoConfiguration.class })
+        DataSourceTransactionManagerAutoConfiguration.class, GsonAutoConfiguration.class, JdbcTemplateAutoConfiguration.class,
+        LiquibaseAutoConfiguration.class })
 @EnableTransactionManagement
 @EnableWebSecurity
-@EnableConfigurationProperties({ FineractProperties.class })
+@EnableConfigurationProperties({ FineractProperties.class, LiquibaseProperties.class })
 @ComponentScan(basePackages = "org.apache.fineract.**")
 public abstract class AbstractApplicationConfiguration {
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/RoutingDataSource.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/RoutingDataSource.java
index 0a63c77..6058cc5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/RoutingDataSource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/RoutingDataSource.java
@@ -46,7 +46,7 @@ public class RoutingDataSource extends AbstractDataSource {
         return determineTargetDataSource().getConnection();
     }
 
-    private DataSource determineTargetDataSource() {
+    public DataSource determineTargetDataSource() {
         return this.dataSourceServiceFactory.determineDataSourceService().retrieveDataSource();
     }
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java
deleted file mode 100644
index 264f9e1..0000000
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/TenantDatabaseUpgradeService.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * 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.core.service;
-
-import static org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toJdbcUrl;
-import static org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toProtocol;
-
-import com.zaxxer.hikari.HikariConfig;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.PostConstruct;
-import javax.sql.DataSource;
-import org.apache.fineract.infrastructure.core.config.FineractProperties;
-import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
-import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection;
-import org.apache.fineract.infrastructure.security.service.TenantDetailsService;
-import org.flywaydb.core.Flyway;
-import org.flywaydb.core.api.FlywayException;
-import org.flywaydb.core.internal.jdbc.DriverDataSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.support.rowset.SqlRowSet;
-import org.springframework.stereotype.Service;
-
-/**
- * A service that picks up on tenants that are configured to auto-update their specific schema on application startup.
- */
-@Service
-public class TenantDatabaseUpgradeService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TenantDatabaseUpgradeService.class);
-
-    private final HikariConfig hikariConfig;
-    private final TenantDetailsService tenantDetailsService;
-    protected final DataSource tenantDataSource;
-    protected final FineractProperties fineractProperties;
-
-    @Autowired
-    public TenantDatabaseUpgradeService(final HikariConfig hikariConfig, final TenantDetailsService detailsService,
-            @Qualifier("hikariTenantDataSource") final DataSource dataSource, final FineractProperties fineractProperties) {
-        this.hikariConfig = hikariConfig;
-        this.tenantDetailsService = detailsService;
-        this.tenantDataSource = dataSource;
-        this.fineractProperties = fineractProperties;
-    }
-
-    @PostConstruct
-    public void upgradeAllTenants() {
-        upgradeTenantDB();
-        final List<FineractPlatformTenant> tenants = this.tenantDetailsService.findAllTenants();
-        for (final FineractPlatformTenant tenant : tenants) {
-            final FineractPlatformTenantConnection connection = tenant.getConnection();
-            if (connection.isAutoUpdateEnabled()) {
-
-                String protocol = toProtocol(this.tenantDataSource);
-                String jdbcUrl = toJdbcUrl(protocol, connection.getSchemaServer(), connection.getSchemaServerPort(),
-                        connection.getSchemaName(), connection.getSchemaConnectionParameters());
-                DriverDataSource source = new DriverDataSource(Thread.currentThread().getContextClassLoader(),
-                        hikariConfig.getDriverClassName(), jdbcUrl, connection.getSchemaUsername(), connection.getSchemaPassword());
-
-                final Flyway flyway = Flyway.configure().dataSource(source).locations("sql/migrations/core_db").outOfOrder(true)
-                        .placeholderReplacement(false).configuration(Map.of("flyway.table", "schema_version")) // FINERACT-979
-                        .load();
-
-                // Should be removed later when all instances are stabilized
-                // :FINERACT-1008
-                repairFlywayVersionSkip(flyway.getConfiguration().getDataSource());
-
-                try {
-                    flyway.repair();
-                    flyway.migrate();
-                } catch (FlywayException e) {
-                    String betterMessage = e.getMessage() + "; for Tenant DB URL: " + jdbcUrl + ", username: "
-                            + connection.getSchemaUsername();
-                    throw new FlywayException(betterMessage, e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Initializes, and if required upgrades (using Flyway) the Tenant DB itself.
-     */
-    private void upgradeTenantDB() {
-        LOG.info("Upgrade tenant DB: {}:{}", fineractProperties.getTenant().getHost(), fineractProperties.getTenant().getPort());
-        LOG.info("- fineract.tenant.username: {}", fineractProperties.getTenant().getUsername());
-        LOG.info("- fineract.tenant.password: ****");
-        LOG.info("- fineract.tenant.parameters: {}", fineractProperties.getTenant().getParameters());
-        LOG.info("- fineract.tenant.timezone: {}", fineractProperties.getTenant().getTimezone());
-        LOG.info("- fineract.tenant.description: {}", fineractProperties.getTenant().getDescription());
-        LOG.info("- fineract.tenant.identifier: {}", fineractProperties.getTenant().getIdentifier());
-        LOG.info("- fineract.tenant.name: {}", fineractProperties.getTenant().getName());
-
-        final Flyway flyway = Flyway.configure().dataSource(tenantDataSource).locations("sql/migrations/list_db").outOfOrder(true)
-                // FINERACT-773
-                .placeholders(Map.of("fineract.tenant.host", fineractProperties.getTenant().getHost(), "fineract.tenant.port",
-                        fineractProperties.getTenant().getPort().toString(), "fineract.tenant.username",
-                        fineractProperties.getTenant().getUsername(), "fineract.tenant.password",
-                        fineractProperties.getTenant().getPassword(), "fineract.tenant.parameters",
-                        fineractProperties.getTenant().getParameters(), "fineract.tenant.timezone",
-                        fineractProperties.getTenant().getTimezone(), "fineract.tenant.description",
-                        fineractProperties.getTenant().getDescription(), "fineract.tenant.identifier",
-                        fineractProperties.getTenant().getIdentifier(), "fineract.tenant.name", fineractProperties.getTenant().getName()))
-                .configuration(Map.of("flyway.table", "schema_version")) // FINERACT-979
-                .load();
-
-        // Should be removed later when all instances are stabilized
-        // :FINERACT-1008
-        repairFlywayVersionSkip(flyway.getConfiguration().getDataSource());
-
-        flyway.repair();
-        flyway.migrate();
-    }
-
-    private void repairFlywayVersionSkip(DataSource source) {
-        JdbcTemplate template = new JdbcTemplate(source);
-        LOG.info("repairFlywayVersionSkip: Check whether the version table is in old format ");
-        SqlRowSet ts = template.queryForRowSet("SHOW TABLES LIKE 'schema_version';");
-        if (ts.next()) {
-            SqlRowSet rs = template.queryForRowSet("SHOW  COLUMNS FROM `schema_version` LIKE 'version_rank';");
-            if (rs.next()) {
-                LOG.info("repairFlywayVersionSkip: The schema_version table is in old format, executing repair ");
-                template.execute("CREATE TABLE `schema_version_history` (  `version_rank` int(11) NOT NULL, "
-                        + " `installed_rank` int(11) NOT NULL,  `version` varchar(50) NOT NULL,  `description` varchar(200) NOT NULL,  "
-                        + "`type` varchar(20) NOT NULL,  `script` varchar(1000) NOT NULL,  `checksum` int(11) DEFAULT NULL, "
-                        + " `installed_by` varchar(100) NOT NULL,  `installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, "
-                        + " `execution_time` int(11) NOT NULL,  `success` tinyint(1) NOT NULL,  PRIMARY KEY (`version`), "
-                        + " KEY `schema_version_vr_idx` (`version_rank`),  KEY `schema_version_ir_idx` (`installed_rank`), "
-                        + " KEY `schema_version_s_idx` (`success`));");
-                template.execute("INSERT INTO schema_version_history select * from schema_version;");
-                template.execute("DROP TABLE schema_version;");
-                template.execute("CREATE TABLE `schema_version` ( `installed_rank` int(11) NOT NULL, "
-                        + "  `version` varchar(50) DEFAULT NULL,   `description` varchar(200) NOT NULL,   `type` varchar(20) NOT NULL,  "
-                        + " `script` varchar(1000) NOT NULL,   `checksum` int(11) DEFAULT NULL,   `installed_by` varchar(100) NOT NULL,  "
-                        + " `installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,   `execution_time` int(11) NOT NULL, "
-                        + "  `success` tinyint(1) NOT NULL,   PRIMARY KEY (`installed_rank`),   KEY `flyway_schema_history_s_idx` (`success`) );");
-                template.execute("INSERT INTO schema_version (installed_rank, version, description, type, script, checksum, "
-                        + "installed_by, installed_on, execution_time, success) SELECT installed_rank, version, description, type, "
-                        + "script, checksum, installed_by, installed_on, execution_time, success FROM schema_version_history;");
-                template.execute("DROP TABLE schema_version_history;");
-
-                LOG.info("repairFlywayVersionSkip: The schema_version repair completed.");
-            } else {
-                LOG.info("repairFlywayVersionSkip: The schema_version table format is new, aborting repair");
-            }
-        } else {
-            LOG.info("repairFlywayVersionSkip: The schema_version table does not exist, aborting repair");
-        }
-    }
-}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java
new file mode 100644
index 0000000..d472521
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseIndependentQueryService.java
@@ -0,0 +1,63 @@
+/**
+ * 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.core.service.database;
+
+import static org.apache.commons.collections4.CollectionUtils.isNotEmpty;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import javax.sql.DataSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DatabaseIndependentQueryService implements DatabaseQueryService {
+
+    private final Collection<DatabaseQueryService> queryServices;
+
+    @Autowired
+    public DatabaseIndependentQueryService(Collection<DatabaseQueryService> queryServices) {
+        this.queryServices = queryServices;
+    }
+
+    private DatabaseQueryService choose(DataSource dataSource) {
+        try {
+            DatabaseQueryService result = null;
+            if (isNotEmpty(queryServices)) {
+                result = queryServices.stream().filter(qs -> qs.isSupported(dataSource)).findAny().orElse(null);
+            }
+            if (result == null) {
+                throw new IllegalStateException("DataSource not supported: " + dataSource.getConnection().getMetaData().getURL());
+            }
+            return result;
+        } catch (SQLException e) {
+            throw new RuntimeException("Error while trying to choose the proper query service", e);
+        }
+    }
+
+    @Override
+    public boolean isSupported(DataSource dataSource) {
+        return true;
+    }
+
+    @Override
+    public boolean isTablePresent(DataSource dataSource, String tableName) {
+        return choose(dataSource).isTablePresent(dataSource, tableName);
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java
new file mode 100644
index 0000000..38fc65f
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseQueryService.java
@@ -0,0 +1,28 @@
+/**
+ * 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.core.service.database;
+
+import javax.sql.DataSource;
+
+public interface DatabaseQueryService {
+
+    boolean isSupported(DataSource dataSource);
+
+    boolean isTablePresent(DataSource dataSource, String tableName);
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseType.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseType.java
new file mode 100644
index 0000000..feaea7d
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseType.java
@@ -0,0 +1,23 @@
+/**
+ * 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.core.service.database;
+
+public enum DatabaseType {
+    MYSQL
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseTypeResolver.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseTypeResolver.java
new file mode 100644
index 0000000..bcfab30
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/DatabaseTypeResolver.java
@@ -0,0 +1,70 @@
+/**
+ * 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.core.service.database;
+
+import static org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toProtocol;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.sql.DataSource;
+import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DatabaseTypeResolver {
+
+    private final Map<String, DatabaseType> protocolMapping = Map.of("jdbc:mariadb", DatabaseType.MYSQL, "jdbc:mysql", DatabaseType.MYSQL);
+
+    private final Map<DataSource, DatabaseType> dataSourceCache = new ConcurrentHashMap<>();
+
+    private final RoutingDataSource routingDataSource;
+
+    @Autowired
+    public DatabaseTypeResolver(RoutingDataSource routingDataSource) {
+        this.routingDataSource = routingDataSource;
+    }
+
+    public boolean isMySQL() {
+        return isMySQL(routingDataSource);
+    }
+
+    public boolean isMySQL(DataSource dataSource) {
+        return DatabaseType.MYSQL.equals(databaseType(dataSource));
+    }
+
+    public DatabaseType databaseType() {
+        return databaseType(routingDataSource);
+    }
+
+    public DatabaseType databaseType(DataSource dataSource) {
+        DataSource unwrappedDataSource = dataSource;
+        if (dataSource instanceof RoutingDataSource) {
+            unwrappedDataSource = ((RoutingDataSource) dataSource).determineTargetDataSource();
+        }
+        return dataSourceCache.computeIfAbsent(unwrappedDataSource, (ds) -> {
+            String protocol = toProtocol(ds);
+            DatabaseType databaseType = protocolMapping.get(protocol);
+            if (databaseType == null) {
+                throw new IllegalArgumentException("The DataSource is not supported");
+            }
+            return databaseType;
+        });
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java
new file mode 100644
index 0000000..4896a5b
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/database/MySQLQueryService.java
@@ -0,0 +1,47 @@
+/**
+ * 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.core.service.database;
+
+import static java.lang.String.format;
+import static org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toProtocol;
+
+import java.util.Set;
+import javax.sql.DataSource;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.rowset.SqlRowSet;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MySQLQueryService implements DatabaseQueryService {
+
+    private final Set<String> supportedProtocols = Set.of("jdbc:mariadb", "jdbc:mysql");
+
+    @Override
+    public boolean isSupported(DataSource dataSource) {
+        String protocol = toProtocol(dataSource);
+        return supportedProtocols.contains(protocol.toLowerCase());
+    }
+
+    @Override
+    public boolean isTablePresent(DataSource dataSource, String tableName) {
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+        SqlRowSet rs = jdbcTemplate.queryForRowSet(format("SHOW TABLES LIKE '%s'", tableName));
+        return rs.next();
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/DatabaseAwareMigrationContextProvider.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/DatabaseAwareMigrationContextProvider.java
new file mode 100644
index 0000000..2f27b08
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/DatabaseAwareMigrationContextProvider.java
@@ -0,0 +1,48 @@
+/**
+ * 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.core.service.migration;
+
+import java.util.Map;
+import javax.sql.DataSource;
+import org.apache.fineract.infrastructure.core.service.database.DatabaseType;
+import org.apache.fineract.infrastructure.core.service.database.DatabaseTypeResolver;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DatabaseAwareMigrationContextProvider {
+
+    private final Map<DatabaseType, String> contextMapping = Map.of(DatabaseType.MYSQL, "mysql");
+
+    private final DatabaseTypeResolver databaseTypeResolver;
+
+    @Autowired
+    public DatabaseAwareMigrationContextProvider(DatabaseTypeResolver databaseTypeResolver) {
+        this.databaseTypeResolver = databaseTypeResolver;
+    }
+
+    public String provide(DataSource dataSource) {
+        DatabaseType databaseType = databaseTypeResolver.databaseType(dataSource);
+        String context = contextMapping.get(databaseType);
+        if (context == null) {
+            throw new IllegalStateException("Database is not supported");
+        }
+        return context;
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibase.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibase.java
new file mode 100644
index 0000000..c923029
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibase.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.infrastructure.core.service.migration;
+
+import java.sql.SQLException;
+import liquibase.Liquibase;
+import liquibase.exception.DatabaseException;
+import liquibase.exception.LiquibaseException;
+import liquibase.integration.spring.SpringLiquibase;
+
+public class ExtendedSpringLiquibase extends SpringLiquibase {
+
+    public void changeLogSync() throws LiquibaseException {
+        try (Liquibase liquibase = createLiquibase(getDataSource().getConnection())) {
+            liquibase.changeLogSync(getContexts());
+        } catch (SQLException e) {
+            throw new DatabaseException(e);
+        }
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java
new file mode 100644
index 0000000..484fe94
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java
@@ -0,0 +1,125 @@
+/**
+ * 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.core.service.migration;
+
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
+
+import com.google.common.base.Joiner;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.sql.DataSource;
+import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
+import org.springframework.core.io.ResourceLoader;
+
+public class ExtendedSpringLiquibaseBuilder {
+
+    private final Set<String> contexts = new HashSet<>();
+    private final Map<String, String> changeLogParameters = new HashMap<>();
+    private final boolean clearCheckSums;
+    private final String liquibaseSchema;
+    private final String liquibaseTableSpace;
+    private final String databaseChangeLogTable;
+    private final String databaseChangeLogLockTable;
+    private final boolean shouldRun;
+    private final String labels;
+    private final File rollbackFile;
+    private final boolean testRollbackOnUpdate;
+    private final String tag;
+    private String changeLog;
+    private ResourceLoader resourceLoader;
+    private String defaultSchema;
+    private boolean dropFirst;
+    private DataSource dataSource;
+
+    public ExtendedSpringLiquibaseBuilder(LiquibaseProperties liquibaseProperties) {
+        this.defaultSchema = liquibaseProperties.getDefaultSchema();
+        this.dropFirst = liquibaseProperties.isDropFirst();
+        if (liquibaseProperties.getParameters() != null) {
+            this.changeLogParameters.putAll(liquibaseProperties.getParameters());
+        }
+        this.changeLog = liquibaseProperties.getChangeLog();
+        if (isNotBlank(liquibaseProperties.getContexts())) {
+            this.contexts.add(liquibaseProperties.getContexts());
+        }
+        this.clearCheckSums = liquibaseProperties.isClearChecksums();
+        this.liquibaseSchema = liquibaseProperties.getLiquibaseSchema();
+        this.liquibaseTableSpace = liquibaseProperties.getLiquibaseTablespace();
+        this.databaseChangeLogTable = liquibaseProperties.getDatabaseChangeLogTable();
+        this.databaseChangeLogLockTable = liquibaseProperties.getDatabaseChangeLogLockTable();
+        this.shouldRun = liquibaseProperties.isEnabled();
+        this.labels = liquibaseProperties.getLabels();
+        this.rollbackFile = liquibaseProperties.getRollbackFile();
+        this.testRollbackOnUpdate = liquibaseProperties.isTestRollbackOnUpdate();
+        this.tag = liquibaseProperties.getTag();
+    }
+
+    public ExtendedSpringLiquibaseBuilder withDataSource(DataSource dataSource) {
+        this.dataSource = dataSource;
+        return this;
+    }
+
+    public ExtendedSpringLiquibaseBuilder withContext(String context) {
+        if (isNotBlank(context)) {
+            this.contexts.add(context);
+        }
+        return this;
+    }
+
+    public ExtendedSpringLiquibaseBuilder withContexts(String... contexts) {
+        return withContexts(Arrays.asList(contexts));
+    }
+
+    public ExtendedSpringLiquibaseBuilder withContexts(Collection<String> contexts) {
+        this.contexts.addAll(contexts);
+        return this;
+    }
+
+    public ExtendedSpringLiquibaseBuilder withResourceLoader(ResourceLoader resourceLoader) {
+        this.resourceLoader = resourceLoader;
+        return this;
+    }
+
+    public ExtendedSpringLiquibase build() {
+        ExtendedSpringLiquibase result = new ExtendedSpringLiquibase();
+        String liquibaseContexts = Joiner.on(",").join(contexts);
+        result.setContexts(liquibaseContexts);
+        result.setDataSource(dataSource);
+        result.setChangeLog(changeLog);
+        result.setResourceLoader(resourceLoader);
+        result.setDefaultSchema(defaultSchema);
+        result.setDropFirst(dropFirst);
+        result.setChangeLogParameters(changeLogParameters);
+        result.setClearCheckSums(clearCheckSums);
+        result.setLiquibaseSchema(liquibaseSchema);
+        result.setLiquibaseTablespace(liquibaseTableSpace);
+        result.setDatabaseChangeLogTable(databaseChangeLogTable);
+        result.setDatabaseChangeLogLockTable(databaseChangeLogLockTable);
+        result.setShouldRun(shouldRun);
+        result.setLabels(labels);
+        result.setRollbackFile(rollbackFile);
+        result.setTestRollbackOnUpdate(testRollbackOnUpdate);
+        result.setTag(tag);
+        return result;
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseFactory.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseFactory.java
new file mode 100644
index 0000000..4c40e35
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseFactory.java
@@ -0,0 +1,50 @@
+/**
+ * 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.core.service.migration;
+
+import javax.sql.DataSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
+import org.springframework.core.env.Environment;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ExtendedSpringLiquibaseFactory {
+
+    private final LiquibaseProperties liquibaseProperties;
+    private final ResourceLoader resourceLoader;
+    private final Environment environment;
+    private final DatabaseAwareMigrationContextProvider databaseAwareMigrationContextProvider;
+
+    @Autowired
+    public ExtendedSpringLiquibaseFactory(LiquibaseProperties liquibaseProperties, ResourceLoader resourceLoader, Environment environment,
+            DatabaseAwareMigrationContextProvider databaseAwareMigrationContextProvider) {
+        this.liquibaseProperties = liquibaseProperties;
+        this.resourceLoader = resourceLoader;
+        this.environment = environment;
+        this.databaseAwareMigrationContextProvider = databaseAwareMigrationContextProvider;
+    }
+
+    public ExtendedSpringLiquibase create(DataSource dataSource, String... contexts) {
+        String databaseContext = databaseAwareMigrationContextProvider.provide(dataSource);
+        return new ExtendedSpringLiquibaseBuilder(liquibaseProperties).withDataSource(dataSource).withResourceLoader(resourceLoader)
+                .withContexts(contexts).withContexts(environment.getActiveProfiles()).withContext(databaseContext).build();
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/SchemaUpgradeNeededException.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/SchemaUpgradeNeededException.java
new file mode 100644
index 0000000..df1708f
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/SchemaUpgradeNeededException.java
@@ -0,0 +1,26 @@
+/**
+ * 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.core.service.migration;
+
+public class SchemaUpgradeNeededException extends RuntimeException {
+
+    public SchemaUpgradeNeededException(String message) {
+        super(message);
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDataSourceFactory.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDataSourceFactory.java
new file mode 100644
index 0000000..11c3f6a
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDataSourceFactory.java
@@ -0,0 +1,65 @@
+/**
+ * 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.core.service.migration;
+
+import static org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toJdbcUrl;
+import static org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toProtocol;
+
+import com.zaxxer.hikari.HikariDataSource;
+import javax.sql.DataSource;
+import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
+import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TenantDataSourceFactory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TenantDataSourceFactory.class);
+
+    private final HikariDataSource tenantDataSource;
+
+    @Autowired
+    public TenantDataSourceFactory(@Qualifier("hikariTenantDataSource") HikariDataSource tenantDataSource) {
+        this.tenantDataSource = tenantDataSource;
+    }
+
+    public DataSource create(FineractPlatformTenant tenant) {
+        HikariDataSource dataSource = new HikariDataSource();
+        dataSource.setDriverClassName(tenantDataSource.getDriverClassName());
+        dataSource.setDataSourceProperties(tenantDataSource.getDataSourceProperties());
+        dataSource.setMinimumIdle(tenantDataSource.getMinimumIdle());
+        dataSource.setMaximumPoolSize(tenantDataSource.getMaximumPoolSize());
+        dataSource.setIdleTimeout(tenantDataSource.getIdleTimeout());
+        dataSource.setConnectionTestQuery(tenantDataSource.getConnectionTestQuery());
+
+        FineractPlatformTenantConnection tenantConnection = tenant.getConnection();
+        dataSource.setUsername(tenantConnection.getSchemaUsername());
+        dataSource.setPassword(tenantConnection.getSchemaPassword());
+        String protocol = toProtocol(tenantDataSource);
+        String tenantJdbcUrl = toJdbcUrl(protocol, tenantConnection.getSchemaServer(), tenantConnection.getSchemaServerPort(),
+                tenantConnection.getSchemaName(), tenantConnection.getSchemaConnectionParameters());
+        LOG.debug("JDBC URL for tenant {} is {}", tenant.getTenantIdentifier(), tenantJdbcUrl);
+        dataSource.setJdbcUrl(tenantJdbcUrl);
+        return dataSource;
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java
new file mode 100644
index 0000000..63e7e76
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseStateVerifier.java
@@ -0,0 +1,83 @@
+/**
+ * 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.core.service.migration;
+
+import java.util.Map;
+import java.util.Objects;
+import javax.sql.DataSource;
+import org.apache.fineract.infrastructure.core.service.database.DatabaseIndependentQueryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TenantDatabaseStateVerifier {
+
+    private static final int TENANT_STORE_LATEST_FLYWAY_VERSION = 6;
+    private static final String TENANT_STORE_LATEST_FLYWAY_SCRIPT_NAME = "V6__add_unique_tenant_identifier.sql";
+    private static final int TENANT_STORE_LATEST_FLYWAY_SCRIPT_CHECKSUM = -43094919;
+    private static final int TENANT_LATEST_FLYWAY_VERSION = 392;
+    private static final String TENANT_LATEST_FLYWAY_SCRIPT_NAME = "V392__interest_recovery_conf_for_rescedule.sql";
+    private static final int TENANT_LATEST_FLYWAY_SCRIPT_CHECKSUM = 1102395052;
+
+    private final LiquibaseProperties liquibaseProperties;
+    private final DatabaseIndependentQueryService dbQueryService;
+
+    @Autowired
+    public TenantDatabaseStateVerifier(LiquibaseProperties liquibaseProperties, DatabaseIndependentQueryService dbQueryService) {
+        this.liquibaseProperties = liquibaseProperties;
+        this.dbQueryService = dbQueryService;
+    }
+
+    public boolean isFirstLiquibaseMigration(DataSource dataSource) {
+        boolean databaseChangelogTableExists = dbQueryService.isTablePresent(dataSource, "DATABASECHANGELOG");
+        return !databaseChangelogTableExists;
+    }
+
+    public boolean isFlywayPresent(DataSource dataSource) {
+        return dbQueryService.isTablePresent(dataSource, "schema_version");
+    }
+
+    public boolean isLiquibaseDisabled() {
+        return !liquibaseProperties.isEnabled();
+    }
+
+    public boolean isTenantStoreOnLatestUpgradableVersion(DataSource dataSource) {
+        return isOnLatestFlywayVersion(TENANT_STORE_LATEST_FLYWAY_VERSION, TENANT_STORE_LATEST_FLYWAY_SCRIPT_NAME,
+                TENANT_STORE_LATEST_FLYWAY_SCRIPT_CHECKSUM, dataSource);
+    }
+
+    public boolean isTenantOnLatestUpgradableVersion(DataSource dataSource) {
+        return isOnLatestFlywayVersion(TENANT_LATEST_FLYWAY_VERSION, TENANT_LATEST_FLYWAY_SCRIPT_NAME, TENANT_LATEST_FLYWAY_SCRIPT_CHECKSUM,
+                dataSource);
+    }
+
+    private boolean isOnLatestFlywayVersion(int version, String scriptName, int checksum, DataSource dataSource) {
+        Map<String, Object> paramMap = Map.of("latestFlywayVersion", version, "latestFlywayScriptName", scriptName,
+                "latestFlywayScriptChecksum", checksum);
+
+        NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
+        Integer result = jdbcTemplate.queryForObject(
+                "SELECT COUNT(script) FROM schema_version " + "WHERE version = :latestFlywayVersion "
+                        + "AND script = :latestFlywayScriptName " + "AND checksum = :latestFlywayScriptChecksum " + "AND success = 1",
+                paramMap, Integer.class);
+        return Objects.equals(result, 1);
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java
new file mode 100644
index 0000000..7086259
--- /dev/null
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/TenantDatabaseUpgradeService.java
@@ -0,0 +1,146 @@
+/**
+ * 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.core.service.migration;
+
+import static org.apache.commons.collections4.CollectionUtils.isNotEmpty;
+
+import com.zaxxer.hikari.HikariDataSource;
+import java.util.List;
+import java.util.function.Function;
+import javax.sql.DataSource;
+import liquibase.exception.LiquibaseException;
+import liquibase.integration.spring.SpringLiquibase;
+import org.apache.fineract.infrastructure.core.config.FineractProperties;
+import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
+import org.apache.fineract.infrastructure.security.service.TenantDetailsService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+/**
+ * A service that picks up on tenants that are configured to auto-update their specific schema on application startup.
+ */
+@Service
+public class TenantDatabaseUpgradeService implements InitializingBean {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TenantDatabaseUpgradeService.class);
+    private static final String TENANT_STORE_DB_CONTEXT = "tenant_store_db";
+    private static final String INITIAL_SWITCH_CONTEXT = "initial_switch";
+    private static final String TENANT_DB_CONTEXT = "tenant_db";
+
+    private final TenantDetailsService tenantDetailsService;
+    private final HikariDataSource tenantDataSource;
+    private final FineractProperties fineractProperties;
+    private final TenantDatabaseStateVerifier databaseStateVerifier;
+    private final ExtendedSpringLiquibaseFactory liquibaseFactory;
+    private final TenantDataSourceFactory tenantDataSourceFactory;
+
+    @Autowired
+    public TenantDatabaseUpgradeService(final TenantDetailsService detailsService,
+            @Qualifier("hikariTenantDataSource") final HikariDataSource tenantDataSource, final FineractProperties fineractProperties,
+            TenantDatabaseStateVerifier databaseStateVerifier, ExtendedSpringLiquibaseFactory liquibaseFactory,
+            TenantDataSourceFactory tenantDataSourceFactory) {
+        this.tenantDetailsService = detailsService;
+        this.tenantDataSource = tenantDataSource;
+        this.fineractProperties = fineractProperties;
+        this.databaseStateVerifier = databaseStateVerifier;
+        this.liquibaseFactory = liquibaseFactory;
+        this.tenantDataSourceFactory = tenantDataSourceFactory;
+    }
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        if (databaseStateVerifier.isLiquibaseDisabled()) {
+            LOG.warn("Liquibase is disabled. Not upgrading any database.");
+            return;
+        }
+        try {
+            upgradeTenantStore();
+            upgradeIndividualTenants();
+        } catch (LiquibaseException e) {
+            throw new RuntimeException("Error while migrating the schema", e);
+        }
+    }
+
+    private void upgradeTenantStore() throws LiquibaseException {
+        LOG.warn("Upgrading tenant store DB at {}:{}", fineractProperties.getTenant().getHost(), fineractProperties.getTenant().getPort());
+        logTenantStoreDetails();
+        if (databaseStateVerifier.isFirstLiquibaseMigration(tenantDataSource)) {
+            ExtendedSpringLiquibase liquibase = liquibaseFactory.create(tenantDataSource, TENANT_STORE_DB_CONTEXT, INITIAL_SWITCH_CONTEXT);
+            applyInitialLiquibase(tenantDataSource, liquibase, "tenant store",
+                    (ds) -> !databaseStateVerifier.isTenantStoreOnLatestUpgradableVersion(ds));
+        }
+        SpringLiquibase liquibase = liquibaseFactory.create(tenantDataSource, TENANT_STORE_DB_CONTEXT);
+        liquibase.afterPropertiesSet();
+        LOG.warn("Tenant store upgrade finished");
+    }
+
+    private void logTenantStoreDetails() {
+        LOG.info("- fineract.tenant.username: {}", fineractProperties.getTenant().getUsername());
+        LOG.info("- fineract.tenant.password: ****");
+        LOG.info("- fineract.tenant.parameters: {}", fineractProperties.getTenant().getParameters());
+        LOG.info("- fineract.tenant.timezone: {}", fineractProperties.getTenant().getTimezone());
+        LOG.info("- fineract.tenant.description: {}", fineractProperties.getTenant().getDescription());
+        LOG.info("- fineract.tenant.identifier: {}", fineractProperties.getTenant().getIdentifier());
+        LOG.info("- fineract.tenant.name: {}", fineractProperties.getTenant().getName());
+    }
+
+    private void upgradeIndividualTenants() throws LiquibaseException {
+        LOG.warn("Upgrading all tenants");
+        List<FineractPlatformTenant> tenants = tenantDetailsService.findAllTenants();
+        if (isNotEmpty(tenants)) {
+            for (FineractPlatformTenant tenant : tenants) {
+                upgradeIndividualTenant(tenant);
+            }
+        }
+        LOG.warn("Tenant upgrades have finished");
+    }
+
+    private void upgradeIndividualTenant(FineractPlatformTenant tenant) throws LiquibaseException {
+        LOG.info("Upgrade for tenant {} has started", tenant.getTenantIdentifier());
+        DataSource tenantDataSource = tenantDataSourceFactory.create(tenant);
+        if (databaseStateVerifier.isFirstLiquibaseMigration(tenantDataSource)) {
+            ExtendedSpringLiquibase liquibase = liquibaseFactory.create(tenantDataSource, TENANT_DB_CONTEXT, INITIAL_SWITCH_CONTEXT);
+            applyInitialLiquibase(tenantDataSource, liquibase, tenant.getTenantIdentifier(),
+                    (ds) -> !databaseStateVerifier.isTenantOnLatestUpgradableVersion(ds));
+        }
+        SpringLiquibase tenantLiquibase = liquibaseFactory.create(tenantDataSource, TENANT_DB_CONTEXT);
+        tenantLiquibase.afterPropertiesSet();
+        LOG.info("Upgrade for tenant {} has finished", tenant.getTenantIdentifier());
+    }
+
+    private void applyInitialLiquibase(DataSource dataSource, ExtendedSpringLiquibase liquibase, String id,
+            Function<DataSource, Boolean> isUpgradableFn) throws LiquibaseException {
+        if (databaseStateVerifier.isFlywayPresent(dataSource)) {
+            if (isUpgradableFn.apply(dataSource)) {
+                LOG.warn("Cannot proceed with upgrading database {}", id);
+                LOG.warn("It seems the database doesn't have the latest schema changes applied until the 1.6 release");
+                throw new SchemaUpgradeNeededException("Make sure to upgrade to Fineract 1.6 first and then to a newer version");
+            }
+            LOG.warn("This is the first Liquibase migration for {}. We'll sync the changelog for you and then apply everything else", id);
+            liquibase.changeLogSync();
+            LOG.warn("Liquibase changelog sync is complete");
+        } else {
+            liquibase.afterPropertiesSet();
+        }
+    }
+}
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java
index 253d601..4826795 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java
@@ -314,6 +314,9 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit
      */
     private PlatformDataIntegrityException handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause,
             final Exception dve) {
+        // TODO: this needs to be fixed. The error condition should be independent from the underlying message and
+        // naming
+        // of the constraint
         if (realCause.getMessage().contains("'username_org'")) {
             final String username = command.stringValueOfParameterNamed("username");
             final StringBuilder defaultMessageBuilder = new StringBuilder("User with username ").append(username)
@@ -322,6 +325,9 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit
                     username);
         }
 
+        // TODO: this needs to be fixed. The error condition should be independent from the underlying message and
+        // naming
+        // of the constraint
         if (realCause.getMessage().contains("'unique_self_client'")) {
             return new PlatformDataIntegrityException("error.msg.user.self.service.user.already.exist",
                     "Self Service User Id is already created. Go to Admin->Users to edit or delete the self-service user.");
diff --git a/fineract-provider/src/main/resources/application.properties b/fineract-provider/src/main/resources/application.properties
index 92b6f4e..7940a79 100644
--- a/fineract-provider/src/main/resources/application.properties
+++ b/fineract-provider/src/main/resources/application.properties
@@ -74,3 +74,17 @@ spring.datasource.hikari.dataSourceProperties['maintainTimeStats']=${FINERACT_HI
 # TODO FINERACT-890: <prop key="logger">com.mysql.cj.log.Slf4JLogger</prop>
 spring.datasource.hikari.dataSourceProperties['logSlowQueries']=${FINERACT_HIKARI_DS_PROPERTIES_LOG_SLOW_QUERIES:true}
 spring.datasource.hikari.dataSourceProperties['dumpQueriesOnException']=${FINERACT_HIKARI_DS_PROPERTIES_DUMP_QUERIES_IN_EXCEPTION:true}
+
+# Liquibase configuration
+spring.liquibase.enabled=true
+spring.liquibase.changeLog=classpath:/db/changelog/db.changelog-master.xml
+
+spring.liquibase.parameters.fineract.tenant.identifier=${fineract.tenant.identifier}
+spring.liquibase.parameters.fineract.tenant.description=${fineract.tenant.description}
+spring.liquibase.parameters.fineract.tenant.timezone=${fineract.tenant.timezone}
+spring.liquibase.parameters.fineract.tenant.schema-name=${fineract.tenant.name}
+spring.liquibase.parameters.fineract.tenant.host=${fineract.tenant.host}
+spring.liquibase.parameters.fineract.tenant.port=${fineract.tenant.port}
+spring.liquibase.parameters.fineract.tenant.username=${fineract.tenant.username}
+spring.liquibase.parameters.fineract.tenant.password=${fineract.tenant.password}
+spring.liquibase.parameters.fineract.tenant.parameters=${fineract.tenant.parameters}
diff --git a/fineract-provider/src/main/resources/db/changelog/db.changelog-master.xml b/fineract-provider/src/main/resources/db/changelog/db.changelog-master.xml
new file mode 100644
index 0000000..7e5cd0f
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/db.changelog-master.xml
@@ -0,0 +1,31 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <property name="current_date" value="CURDATE()" context="mysql"/>
+    <property name="current_datetime" value="NOW()"/>
+    <include file="tenant-store/initial-switch-changelog-tenant-store.xml" relativeToChangelogFile="true" context="tenant_store_db AND initial_switch"/>
+    <include file="tenant-store/changelog-tenant-store.xml" relativeToChangelogFile="true" context="tenant_store_db AND !initial_switch"/>
+    <include file="tenant/initial-switch-changelog-tenant.xml" relativeToChangelogFile="true" context="tenant_db AND initial_switch"/>
+    <include file="tenant/changelog-tenant.xml" relativeToChangelogFile="true" context="tenant_db AND !initial_switch"/>
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant-store/changelog-tenant-store.xml b/fineract-provider/src/main/resources/db/changelog/tenant-store/changelog-tenant-store.xml
new file mode 100644
index 0000000..05449fa
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant-store/changelog-tenant-store.xml
@@ -0,0 +1,27 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <!-- An example how to include upcoming changes -->
+    <!-- <include file="parts/0003_upcoming_change.xml" relativeToChangelogFile="true"/> -->
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant-store/initial-switch-changelog-tenant-store.xml b/fineract-provider/src/main/resources/db/changelog/tenant-store/initial-switch-changelog-tenant-store.xml
new file mode 100644
index 0000000..130f980
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant-store/initial-switch-changelog-tenant-store.xml
@@ -0,0 +1,29 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <include file="parts/0001_initial_schema.xml" relativeToChangelogFile="true" context="initial_switch"/>
+    <include file="parts/0002_initial_data.xml" relativeToChangelogFile="true" context="initial_switch"/>
+    <!-- The first 2 changelog files are ran with the initial_switch context to handle the Flyway -> Liquibase migration -->
+    <!-- The rest of the changelogs will not need this context set -->
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant-store/parts/0001_initial_schema.xml b/fineract-provider/src/main/resources/db/changelog/tenant-store/parts/0001_initial_schema.xml
new file mode 100644
index 0000000..fb512c0
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant-store/parts/0001_initial_schema.xml
@@ -0,0 +1,122 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="fineract" id="1">
+        <createTable tableName="tenant_server_connections">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValue="localhost" name="schema_server" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="schema_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValue="3306" name="schema_server_port" type="VARCHAR(10)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValue="root" name="schema_username" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValue="mysql" name="schema_password" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="auto_update" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="5" name="pool_initial_size" type="INT"/>
+            <column defaultValueNumeric="30000" name="pool_validation_interval" type="INT"/>
+            <column defaultValueNumeric="1" name="pool_remove_abandoned" type="TINYINT"/>
+            <column defaultValueNumeric="60" name="pool_remove_abandoned_timeout" type="INT"/>
+            <column defaultValueNumeric="1" name="pool_log_abandoned" type="TINYINT"/>
+            <column defaultValueNumeric="50" name="pool_abandon_when_percentage_full" type="INT"/>
+            <column defaultValueNumeric="1" name="pool_test_on_borrow" type="TINYINT"/>
+            <column defaultValueNumeric="40" name="pool_max_active" type="INT"/>
+            <column defaultValueNumeric="20" name="pool_min_idle" type="INT"/>
+            <column defaultValueNumeric="10" name="pool_max_idle" type="INT"/>
+            <column defaultValueNumeric="60" name="pool_suspect_timeout" type="INT"/>
+            <column defaultValueNumeric="34000" name="pool_time_between_eviction_runs_millis" type="INT"/>
+            <column defaultValueNumeric="60000" name="pool_min_evictable_idle_time_millis" type="INT"/>
+            <column defaultValueNumeric="0" name="deadlock_max_retries" type="INT"/>
+            <column defaultValueNumeric="1" name="deadlock_max_retry_interval" type="INT"/>
+            <column name="schema_connection_parameters" type="TEXT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="2">
+        <createTable tableName="tenants">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="identifier" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="timezone_id" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="country_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="joined_date" type="date"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column name="oltp_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="report_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="3">
+        <createTable tableName="timezones">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="country_code" type="VARCHAR(2)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="timezonename" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="comments" type="VARCHAR(150)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="4">
+        <createIndex indexName="fk_oltp_id" tableName="tenants">
+            <column name="oltp_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="5">
+        <createIndex indexName="fk_report_id" tableName="tenants">
+            <column name="report_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="6">
+        <addForeignKeyConstraint baseColumnNames="oltp_id" baseTableName="tenants" constraintName="fk_oltp_id" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="id" referencedTableName="tenant_server_connections" validate="true"/>
+    </changeSet>
+    <changeSet author="fineract" id="7">
+        <addForeignKeyConstraint baseColumnNames="report_id" baseTableName="tenants" constraintName="fk_report_id" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="id" referencedTableName="tenant_server_connections" validate="true"/>
+    </changeSet>
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant-store/parts/0002_initial_data.xml b/fineract-provider/src/main/resources/db/changelog/tenant-store/parts/0002_initial_data.xml
new file mode 100644
index 0000000..7586eb5
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant-store/parts/0002_initial_data.xml
@@ -0,0 +1,2538 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="fineract" id="1">
+        <insert tableName="tenant_server_connections">
+            <column name="id" valueNumeric="1"/>
+            <column name="schema_server" value="${fineract.tenant.host}"/>
+            <column name="schema_name" value="${fineract.tenant.schema-name}"/>
+            <column name="schema_server_port" value="${fineract.tenant.port}"/>
+            <column name="schema_username" value="${fineract.tenant.username}"/>
+            <column name="schema_password" value="${fineract.tenant.password}"/>
+            <column name="schema_connection_parameters" value="${fineract.tenant.parameters}"/>
+        </insert>
+    </changeSet>
+    <changeSet author="fineract" id="2">
+        <insert tableName="tenants">
+            <column name="id" valueNumeric="1"/>
+            <column name="identifier" value="${fineract.tenant.identifier}"/>
+            <column name="name" value="${fineract.tenant.description}"/>
+            <column name="timezone_id" value="${fineract.tenant.timezone}"/>
+            <column name="oltp_id" valueNumeric="1"/>
+            <column name="report_id" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+    <changeSet author="fineract" id="3">
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="1"/>
+            <column name="country_code" value="AD"/>
+            <column name="timezonename" value="Europe/Andorra"/>
+            <column name="comments"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="2"/>
+            <column name="country_code" value="AE"/>
+            <column name="timezonename" value="Asia/Dubai"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="3"/>
+            <column name="country_code" value="AF"/>
+            <column name="timezonename" value="Asia/Kabul"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="4"/>
+            <column name="country_code" value="AG"/>
+            <column name="timezonename" value="America/Antigua"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="5"/>
+            <column name="country_code" value="AI"/>
+            <column name="timezonename" value="America/Anguilla"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="6"/>
+            <column name="country_code" value="AL"/>
+            <column name="timezonename" value="Europe/Tirane"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="7"/>
+            <column name="country_code" value="AM"/>
+            <column name="timezonename" value="Asia/Yerevan"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="8"/>
+            <column name="country_code" value="AO"/>
+            <column name="timezonename" value="Africa/Luanda"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="9"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/McMurdo"/>
+            <column name="comments" value="McMurdo Station, Ross Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="10"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/South_Pole"/>
+            <column name="comments" value="Amundsen-Scott Station, South Pole"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="11"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Rothera"/>
+            <column name="comments" value="Rothera Station, Adelaide Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="12"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Palmer"/>
+            <column name="comments" value="Palmer Station, Anvers Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="13"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Mawson"/>
+            <column name="comments" value="Mawson Station, Holme Bay"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="14"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Davis"/>
+            <column name="comments" value="Davis Station, Vestfold Hills"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="15"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Casey"/>
+            <column name="comments" value="Casey Station, Bailey Peninsula"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="16"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Vostok"/>
+            <column name="comments" value="Vostok Station, Lake Vostok"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="17"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/DumontDUrville"/>
+            <column name="comments" value="Dumont-dUrville Station, Terre Adelie"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="18"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Syowa"/>
+            <column name="comments" value="Syowa Station, E Ongul I"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="19"/>
+            <column name="country_code" value="AQ"/>
+            <column name="timezonename" value="Antarctica/Macquarie"/>
+            <column name="comments" value="Macquarie Island Station, Macquarie Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="20"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Buenos_Aires"/>
+            <column name="comments" value="Buenos Aires (BA, CF)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="21"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Cordoba"/>
+            <column name="comments" value="most locations (CB, CC, CN, ER, FM, MN, SE, SF)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="22"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Salta"/>
+            <column name="comments" value="(SA, LP, NQ, RN)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="23"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Jujuy"/>
+            <column name="comments" value="Jujuy (JY)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="24"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Tucuman"/>
+            <column name="comments" value="Tucuman (TM)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="25"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Catamarca"/>
+            <column name="comments" value="Catamarca (CT), Chubut (CH)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="26"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/La_Rioja"/>
+            <column name="comments" value="La Rioja (LR)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="27"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/San_Juan"/>
+            <column name="comments" value="San Juan (SJ)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="28"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Mendoza"/>
+            <column name="comments" value="Mendoza (MZ)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="29"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/San_Luis"/>
+            <column name="comments" value="San Luis (SL)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="30"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Rio_Gallegos"/>
+            <column name="comments" value="Santa Cruz (SC)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="31"/>
+            <column name="country_code" value="AR"/>
+            <column name="timezonename" value="America/Argentina/Ushuaia"/>
+            <column name="comments" value="Tierra del Fuego (TF)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="32"/>
+            <column name="country_code" value="AS"/>
+            <column name="timezonename" value="Pacific/Pago_Pago"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="33"/>
+            <column name="country_code" value="AT"/>
+            <column name="timezonename" value="Europe/Vienna"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="34"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Lord_Howe"/>
+            <column name="comments" value="Lord Howe Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="35"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Hobart"/>
+            <column name="comments" value="Tasmania - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="36"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Currie"/>
+            <column name="comments" value="Tasmania - King Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="37"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Melbourne"/>
+            <column name="comments" value="Victoria"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="38"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Sydney"/>
+            <column name="comments" value="New South Wales - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="39"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Broken_Hill"/>
+            <column name="comments" value="New South Wales - Yancowinna"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="40"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Brisbane"/>
+            <column name="comments" value="Queensland - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="41"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Lindeman"/>
+            <column name="comments" value="Queensland - Holiday Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="42"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Adelaide"/>
+            <column name="comments" value="South Australia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="43"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Darwin"/>
+            <column name="comments" value="Northern Territory"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="44"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Perth"/>
+            <column name="comments" value="Western Australia - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="45"/>
+            <column name="country_code" value="AU"/>
+            <column name="timezonename" value="Australia/Eucla"/>
+            <column name="comments" value="Western Australia - Eucla area"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="46"/>
+            <column name="country_code" value="AW"/>
+            <column name="timezonename" value="America/Aruba"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="47"/>
+            <column name="country_code" value="AX"/>
+            <column name="timezonename" value="Europe/Mariehamn"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="48"/>
+            <column name="country_code" value="AZ"/>
+            <column name="timezonename" value="Asia/Baku"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="49"/>
+            <column name="country_code" value="BA"/>
+            <column name="timezonename" value="Europe/Sarajevo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="50"/>
+            <column name="country_code" value="BB"/>
+            <column name="timezonename" value="America/Barbados"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="51"/>
+            <column name="country_code" value="BD"/>
+            <column name="timezonename" value="Asia/Dhaka"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="52"/>
+            <column name="country_code" value="BE"/>
+            <column name="timezonename" value="Europe/Brussels"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="53"/>
+            <column name="country_code" value="BF"/>
+            <column name="timezonename" value="Africa/Ouagadougou"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="54"/>
+            <column name="country_code" value="BG"/>
+            <column name="timezonename" value="Europe/Sofia"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="55"/>
+            <column name="country_code" value="BH"/>
+            <column name="timezonename" value="Asia/Bahrain"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="56"/>
+            <column name="country_code" value="BI"/>
+            <column name="timezonename" value="Africa/Bujumbura"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="57"/>
+            <column name="country_code" value="BJ"/>
+            <column name="timezonename" value="Africa/Porto-Novo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="58"/>
+            <column name="country_code" value="BL"/>
+            <column name="timezonename" value="America/St_Barthelemy"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="59"/>
+            <column name="country_code" value="BM"/>
+            <column name="timezonename" value="Atlantic/Bermuda"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="60"/>
+            <column name="country_code" value="BN"/>
+            <column name="timezonename" value="Asia/Brunei"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="61"/>
+            <column name="country_code" value="BO"/>
+            <column name="timezonename" value="America/La_Paz"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="62"/>
+            <column name="country_code" value="BQ"/>
+            <column name="timezonename" value="America/Kralendijk"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="63"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Noronha"/>
+            <column name="comments" value="Atlantic islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="64"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Belem"/>
+            <column name="comments" value="Amapa, E Para"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="65"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Fortaleza"/>
+            <column name="comments" value="NE Brazil (MA, PI, CE, RN, PB)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="66"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Recife"/>
+            <column name="comments" value="Pernambuco"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="67"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Araguaina"/>
+            <column name="comments" value="Tocantins"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="68"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Maceio"/>
+            <column name="comments" value="Alagoas, Sergipe"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="69"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Bahia"/>
+            <column name="comments" value="Bahia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="70"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Sao_Paulo"/>
+            <column name="comments" value="S &amp; SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="71"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Campo_Grande"/>
+            <column name="comments" value="Mato Grosso do Sul"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="72"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Cuiaba"/>
+            <column name="comments" value="Mato Grosso"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="73"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Santarem"/>
+            <column name="comments" value="W Para"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="74"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Porto_Velho"/>
+            <column name="comments" value="Rondonia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="75"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Boa_Vista"/>
+            <column name="comments" value="Roraima"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="76"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Manaus"/>
+            <column name="comments" value="E Amazonas"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="77"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Eirunepe"/>
+            <column name="comments" value="W Amazonas"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="78"/>
+            <column name="country_code" value="BR"/>
+            <column name="timezonename" value="America/Rio_Branco"/>
+            <column name="comments" value="Acre"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="79"/>
+            <column name="country_code" value="BS"/>
+            <column name="timezonename" value="America/Nassau"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="80"/>
+            <column name="country_code" value="BT"/>
+            <column name="timezonename" value="Asia/Thimphu"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="81"/>
+            <column name="country_code" value="BW"/>
+            <column name="timezonename" value="Africa/Gaborone"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="82"/>
+            <column name="country_code" value="BY"/>
+            <column name="timezonename" value="Europe/Minsk"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="83"/>
+            <column name="country_code" value="BZ"/>
+            <column name="timezonename" value="America/Belize"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="84"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/St_Johns"/>
+            <column name="comments" value="Newfoundland Time, including SE Labrador"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="85"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Halifax"/>
+            <column name="comments" value="Atlantic Time - Nova Scotia (most places), PEI"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="86"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Glace_Bay"/>
+            <column name="comments" value="Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="87"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Moncton"/>
+            <column name="comments" value="Atlantic Time - New Brunswick"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="88"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Goose_Bay"/>
+            <column name="comments" value="Atlantic Time - Labrador - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="89"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Blanc-Sablon"/>
+            <column name="comments" value="Atlantic Standard Time - Quebec - Lower North Shore"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="90"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Montreal"/>
+            <column name="comments" value="Eastern Time - Quebec - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="91"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Toronto"/>
+            <column name="comments" value="Eastern Time - Ontario - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="92"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Nipigon"/>
+            <column name="comments" value="Eastern Time - Ontario &amp; Quebec - places that did not observe DST 1967-1973"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="93"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Thunder_Bay"/>
+            <column name="comments" value="Eastern Time - Thunder Bay, Ontario"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="94"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Iqaluit"/>
+            <column name="comments" value="Eastern Time - east Nunavut - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="95"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Pangnirtung"/>
+            <column name="comments" value="Eastern Time - Pangnirtung, Nunavut"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="96"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Resolute"/>
+            <column name="comments" value="Central Standard Time - Resolute, Nunavut"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="97"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Atikokan"/>
+            <column name="comments" value="Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="98"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Rankin_Inlet"/>
+            <column name="comments" value="Central Time - central Nunavut"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="99"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Winnipeg"/>
+            <column name="comments" value="Central Time - Manitoba &amp; west Ontario"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="100"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Rainy_River"/>
+            <column name="comments" value="Central Time - Rainy River &amp; Fort Frances, Ontario"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="101"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Regina"/>
+            <column name="comments" value="Central Standard Time - Saskatchewan - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="102"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Swift_Current"/>
+            <column name="comments" value="Central Standard Time - Saskatchewan - midwest"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="103"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Edmonton"/>
+            <column name="comments" value="Mountain Time - Alberta, east British Columbia &amp; west Saskatchewan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="104"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Cambridge_Bay"/>
+            <column name="comments" value="Mountain Time - west Nunavut"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="105"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Yellowknife"/>
+            <column name="comments" value="Mountain Time - central Northwest Territories"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="106"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Inuvik"/>
+            <column name="comments" value="Mountain Time - west Northwest Territories"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="107"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Creston"/>
+            <column name="comments" value="Mountain Standard Time - Creston, British Columbia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="108"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Dawson_Creek"/>
+            <column name="comments" value="Mountain Standard Time - Dawson Creek &amp; Fort Saint John, British Columbia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="109"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Vancouver"/>
+            <column name="comments" value="Pacific Time - west British Columbia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="110"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Whitehorse"/>
+            <column name="comments" value="Pacific Time - south Yukon"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="111"/>
+            <column name="country_code" value="CA"/>
+            <column name="timezonename" value="America/Dawson"/>
+            <column name="comments" value="Pacific Time - north Yukon"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="112"/>
+            <column name="country_code" value="CC"/>
+            <column name="timezonename" value="Indian/Cocos"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="113"/>
+            <column name="country_code" value="CD"/>
+            <column name="timezonename" value="Africa/Kinshasa"/>
+            <column name="comments" value="west Dem. Rep. of Congo"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="114"/>
+            <column name="country_code" value="CD"/>
+            <column name="timezonename" value="Africa/Lubumbashi"/>
+            <column name="comments" value="east Dem. Rep. of Congo"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="115"/>
+            <column name="country_code" value="CF"/>
+            <column name="timezonename" value="Africa/Bangui"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="116"/>
+            <column name="country_code" value="CG"/>
+            <column name="timezonename" value="Africa/Brazzaville"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="117"/>
+            <column name="country_code" value="CH"/>
+            <column name="timezonename" value="Europe/Zurich"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="118"/>
+            <column name="country_code" value="CI"/>
+            <column name="timezonename" value="Africa/Abidjan"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="119"/>
+            <column name="country_code" value="CK"/>
+            <column name="timezonename" value="Pacific/Rarotonga"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="120"/>
+            <column name="country_code" value="CL"/>
+            <column name="timezonename" value="America/Santiago"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="121"/>
+            <column name="country_code" value="CL"/>
+            <column name="timezonename" value="Pacific/Easter"/>
+            <column name="comments" value="Easter Island &amp; Sala y Gomez"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="122"/>
+            <column name="country_code" value="CM"/>
+            <column name="timezonename" value="Africa/Douala"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="123"/>
+            <column name="country_code" value="CN"/>
+            <column name="timezonename" value="Asia/Shanghai"/>
+            <column name="comments" value="east China - Beijing, Guangdong, Shanghai, etc."/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="124"/>
+            <column name="country_code" value="CN"/>
+            <column name="timezonename" value="Asia/Harbin"/>
+            <column name="comments" value="Heilongjiang (except Mohe), Jilin"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="125"/>
+            <column name="country_code" value="CN"/>
+            <column name="timezonename" value="Asia/Chongqing"/>
+            <column name="comments" value="central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc."/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="126"/>
+            <column name="country_code" value="CN"/>
+            <column name="timezonename" value="Asia/Urumqi"/>
+            <column name="comments" value="most of Tibet &amp; Xinjiang"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="127"/>
+            <column name="country_code" value="CN"/>
+            <column name="timezonename" value="Asia/Kashgar"/>
+            <column name="comments" value="west Tibet &amp; Xinjiang"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="128"/>
+            <column name="country_code" value="CO"/>
+            <column name="timezonename" value="America/Bogota"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="129"/>
+            <column name="country_code" value="CR"/>
+            <column name="timezonename" value="America/Costa_Rica"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="130"/>
+            <column name="country_code" value="CU"/>
+            <column name="timezonename" value="America/Havana"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="131"/>
+            <column name="country_code" value="CV"/>
+            <column name="timezonename" value="Atlantic/Cape_Verde"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="132"/>
+            <column name="country_code" value="CW"/>
+            <column name="timezonename" value="America/Curacao"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="133"/>
+            <column name="country_code" value="CX"/>
+            <column name="timezonename" value="Indian/Christmas"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="134"/>
+            <column name="country_code" value="CY"/>
+            <column name="timezonename" value="Asia/Nicosia"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="135"/>
+            <column name="country_code" value="CZ"/>
+            <column name="timezonename" value="Europe/Prague"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="136"/>
+            <column name="country_code" value="DE"/>
+            <column name="timezonename" value="Europe/Berlin"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="137"/>
+            <column name="country_code" value="DJ"/>
+            <column name="timezonename" value="Africa/Djibouti"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="138"/>
+            <column name="country_code" value="DK"/>
+            <column name="timezonename" value="Europe/Copenhagen"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="139"/>
+            <column name="country_code" value="DM"/>
+            <column name="timezonename" value="America/Dominica"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="140"/>
+            <column name="country_code" value="DO"/>
+            <column name="timezonename" value="America/Santo_Domingo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="141"/>
+            <column name="country_code" value="DZ"/>
+            <column name="timezonename" value="Africa/Algiers"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="142"/>
+            <column name="country_code" value="EC"/>
+            <column name="timezonename" value="America/Guayaquil"/>
+            <column name="comments" value="mainland"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="143"/>
+            <column name="country_code" value="EC"/>
+            <column name="timezonename" value="Pacific/Galapagos"/>
+            <column name="comments" value="Galapagos Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="144"/>
+            <column name="country_code" value="EE"/>
+            <column name="timezonename" value="Europe/Tallinn"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="145"/>
+            <column name="country_code" value="EG"/>
+            <column name="timezonename" value="Africa/Cairo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="146"/>
+            <column name="country_code" value="EH"/>
+            <column name="timezonename" value="Africa/El_Aaiun"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="147"/>
+            <column name="country_code" value="ER"/>
+            <column name="timezonename" value="Africa/Asmara"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="148"/>
+            <column name="country_code" value="ES"/>
+            <column name="timezonename" value="Europe/Madrid"/>
+            <column name="comments" value="mainland"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="149"/>
+            <column name="country_code" value="ES"/>
+            <column name="timezonename" value="Africa/Ceuta"/>
+            <column name="comments" value="Ceuta &amp; Melilla"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="150"/>
+            <column name="country_code" value="ES"/>
+            <column name="timezonename" value="Atlantic/Canary"/>
+            <column name="comments" value="Canary Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="151"/>
+            <column name="country_code" value="ET"/>
+            <column name="timezonename" value="Africa/Addis_Ababa"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="152"/>
+            <column name="country_code" value="FI"/>
+            <column name="timezonename" value="Europe/Helsinki"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="153"/>
+            <column name="country_code" value="FJ"/>
+            <column name="timezonename" value="Pacific/Fiji"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="154"/>
+            <column name="country_code" value="FK"/>
+            <column name="timezonename" value="Atlantic/Stanley"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="155"/>
+            <column name="country_code" value="FM"/>
+            <column name="timezonename" value="Pacific/Chuuk"/>
+            <column name="comments" value="Chuuk (Truk) and Yap"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="156"/>
+            <column name="country_code" value="FM"/>
+            <column name="timezonename" value="Pacific/Pohnpei"/>
+            <column name="comments" value="Pohnpei (Ponape)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="157"/>
+            <column name="country_code" value="FM"/>
+            <column name="timezonename" value="Pacific/Kosrae"/>
+            <column name="comments" value="Kosrae"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="158"/>
+            <column name="country_code" value="FO"/>
+            <column name="timezonename" value="Atlantic/Faroe"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="159"/>
+            <column name="country_code" value="FR"/>
+            <column name="timezonename" value="Europe/Paris"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="160"/>
+            <column name="country_code" value="GA"/>
+            <column name="timezonename" value="Africa/Libreville"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="161"/>
+            <column name="country_code" value="GB"/>
+            <column name="timezonename" value="Europe/London"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="162"/>
+            <column name="country_code" value="GD"/>
+            <column name="timezonename" value="America/Grenada"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="163"/>
+            <column name="country_code" value="GE"/>
+            <column name="timezonename" value="Asia/Tbilisi"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="164"/>
+            <column name="country_code" value="GF"/>
+            <column name="timezonename" value="America/Cayenne"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="165"/>
+            <column name="country_code" value="GG"/>
+            <column name="timezonename" value="Europe/Guernsey"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="166"/>
+            <column name="country_code" value="GH"/>
+            <column name="timezonename" value="Africa/Accra"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="167"/>
+            <column name="country_code" value="GI"/>
+            <column name="timezonename" value="Europe/Gibraltar"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="168"/>
+            <column name="country_code" value="GL"/>
+            <column name="timezonename" value="America/Godthab"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="169"/>
+            <column name="country_code" value="GL"/>
+            <column name="timezonename" value="America/Danmarkshavn"/>
+            <column name="comments" value="east coast, north of Scoresbysund"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="170"/>
+            <column name="country_code" value="GL"/>
+            <column name="timezonename" value="America/Scoresbysund"/>
+            <column name="comments" value="Scoresbysund / Ittoqqortoormiit"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="171"/>
+            <column name="country_code" value="GL"/>
+            <column name="timezonename" value="America/Thule"/>
+            <column name="comments" value="Thule / Pituffik"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="172"/>
+            <column name="country_code" value="GM"/>
+            <column name="timezonename" value="Africa/Banjul"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="173"/>
+            <column name="country_code" value="GN"/>
+            <column name="timezonename" value="Africa/Conakry"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="174"/>
+            <column name="country_code" value="GP"/>
+            <column name="timezonename" value="America/Guadeloupe"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="175"/>
+            <column name="country_code" value="GQ"/>
+            <column name="timezonename" value="Africa/Malabo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="176"/>
+            <column name="country_code" value="GR"/>
+            <column name="timezonename" value="Europe/Athens"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="177"/>
+            <column name="country_code" value="GS"/>
+            <column name="timezonename" value="Atlantic/South_Georgia"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="178"/>
+            <column name="country_code" value="GT"/>
+            <column name="timezonename" value="America/Guatemala"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="179"/>
+            <column name="country_code" value="GU"/>
+            <column name="timezonename" value="Pacific/Guam"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="180"/>
+            <column name="country_code" value="GW"/>
+            <column name="timezonename" value="Africa/Bissau"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="181"/>
+            <column name="country_code" value="GY"/>
+            <column name="timezonename" value="America/Guyana"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="182"/>
+            <column name="country_code" value="HK"/>
+            <column name="timezonename" value="Asia/Hong_Kong"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="183"/>
+            <column name="country_code" value="HN"/>
+            <column name="timezonename" value="America/Tegucigalpa"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="184"/>
+            <column name="country_code" value="HR"/>
+            <column name="timezonename" value="Europe/Zagreb"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="185"/>
+            <column name="country_code" value="HT"/>
+            <column name="timezonename" value="America/Port-au-Prince"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="186"/>
+            <column name="country_code" value="HU"/>
+            <column name="timezonename" value="Europe/Budapest"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="187"/>
+            <column name="country_code" value="ID"/>
+            <column name="timezonename" value="Asia/Jakarta"/>
+            <column name="comments" value="Java &amp; Sumatra"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="188"/>
+            <column name="country_code" value="ID"/>
+            <column name="timezonename" value="Asia/Pontianak"/>
+            <column name="comments" value="west &amp; central Borneo"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="189"/>
+            <column name="country_code" value="ID"/>
+            <column name="timezonename" value="Asia/Makassar"/>
+            <column name="comments" value="east &amp; south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="190"/>
+            <column name="country_code" value="ID"/>
+            <column name="timezonename" value="Asia/Jayapura"/>
+            <column name="comments" value="west New Guinea (Irian Jaya) &amp; Malukus (Moluccas)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="191"/>
+            <column name="country_code" value="IE"/>
+            <column name="timezonename" value="Europe/Dublin"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="192"/>
+            <column name="country_code" value="IL"/>
+            <column name="timezonename" value="Asia/Jerusalem"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="193"/>
+            <column name="country_code" value="IM"/>
+            <column name="timezonename" value="Europe/Isle_of_Man"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="194"/>
+            <column name="country_code" value="IN"/>
+            <column name="timezonename" value="Asia/Kolkata"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="195"/>
+            <column name="country_code" value="IO"/>
+            <column name="timezonename" value="Indian/Chagos"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="196"/>
+            <column name="country_code" value="IQ"/>
+            <column name="timezonename" value="Asia/Baghdad"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="197"/>
+            <column name="country_code" value="IR"/>
+            <column name="timezonename" value="Asia/Tehran"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="198"/>
+            <column name="country_code" value="IS"/>
+            <column name="timezonename" value="Atlantic/Reykjavik"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="199"/>
+            <column name="country_code" value="IT"/>
+            <column name="timezonename" value="Europe/Rome"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="200"/>
+            <column name="country_code" value="JE"/>
+            <column name="timezonename" value="Europe/Jersey"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="201"/>
+            <column name="country_code" value="JM"/>
+            <column name="timezonename" value="America/Jamaica"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="202"/>
+            <column name="country_code" value="JO"/>
+            <column name="timezonename" value="Asia/Amman"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="203"/>
+            <column name="country_code" value="JP"/>
+            <column name="timezonename" value="Asia/Tokyo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="204"/>
+            <column name="country_code" value="KE"/>
+            <column name="timezonename" value="Africa/Nairobi"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="205"/>
+            <column name="country_code" value="KG"/>
+            <column name="timezonename" value="Asia/Bishkek"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="206"/>
+            <column name="country_code" value="KH"/>
+            <column name="timezonename" value="Asia/Phnom_Penh"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="207"/>
+            <column name="country_code" value="KI"/>
+            <column name="timezonename" value="Pacific/Tarawa"/>
+            <column name="comments" value="Gilbert Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="208"/>
+            <column name="country_code" value="KI"/>
+            <column name="timezonename" value="Pacific/Enderbury"/>
+            <column name="comments" value="Phoenix Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="209"/>
+            <column name="country_code" value="KI"/>
+            <column name="timezonename" value="Pacific/Kiritimati"/>
+            <column name="comments" value="Line Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="210"/>
+            <column name="country_code" value="KM"/>
+            <column name="timezonename" value="Indian/Comoro"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="211"/>
+            <column name="country_code" value="KN"/>
+            <column name="timezonename" value="America/St_Kitts"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="212"/>
+            <column name="country_code" value="KP"/>
+            <column name="timezonename" value="Asia/Pyongyang"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="213"/>
+            <column name="country_code" value="KR"/>
+            <column name="timezonename" value="Asia/Seoul"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="214"/>
+            <column name="country_code" value="KW"/>
+            <column name="timezonename" value="Asia/Kuwait"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="215"/>
+            <column name="country_code" value="KY"/>
+            <column name="timezonename" value="America/Cayman"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="216"/>
+            <column name="country_code" value="KZ"/>
+            <column name="timezonename" value="Asia/Almaty"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="217"/>
+            <column name="country_code" value="KZ"/>
+            <column name="timezonename" value="Asia/Qyzylorda"/>
+            <column name="comments" value="Qyzylorda (Kyzylorda, Kzyl-Orda)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="218"/>
+            <column name="country_code" value="KZ"/>
+            <column name="timezonename" value="Asia/Aqtobe"/>
+            <column name="comments" value="Aqtobe (Aktobe)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="219"/>
+            <column name="country_code" value="KZ"/>
+            <column name="timezonename" value="Asia/Aqtau"/>
+            <column name="comments" value="Atyrau (Atirau, Guryev), Mangghystau (Mankistau)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="220"/>
+            <column name="country_code" value="KZ"/>
+            <column name="timezonename" value="Asia/Oral"/>
+            <column name="comments" value="West Kazakhstan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="221"/>
+            <column name="country_code" value="LA"/>
+            <column name="timezonename" value="Asia/Vientiane"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="222"/>
+            <column name="country_code" value="LB"/>
+            <column name="timezonename" value="Asia/Beirut"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="223"/>
+            <column name="country_code" value="LC"/>
+            <column name="timezonename" value="America/St_Lucia"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="224"/>
+            <column name="country_code" value="LI"/>
+            <column name="timezonename" value="Europe/Vaduz"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="225"/>
+            <column name="country_code" value="LK"/>
+            <column name="timezonename" value="Asia/Colombo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="226"/>
+            <column name="country_code" value="LR"/>
+            <column name="timezonename" value="Africa/Monrovia"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="227"/>
+            <column name="country_code" value="LS"/>
+            <column name="timezonename" value="Africa/Maseru"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="228"/>
+            <column name="country_code" value="LT"/>
+            <column name="timezonename" value="Europe/Vilnius"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="229"/>
+            <column name="country_code" value="LU"/>
+            <column name="timezonename" value="Europe/Luxembourg"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="230"/>
+            <column name="country_code" value="LV"/>
+            <column name="timezonename" value="Europe/Riga"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="231"/>
+            <column name="country_code" value="LY"/>
+            <column name="timezonename" value="Africa/Tripoli"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="232"/>
+            <column name="country_code" value="MA"/>
+            <column name="timezonename" value="Africa/Casablanca"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="233"/>
+            <column name="country_code" value="MC"/>
+            <column name="timezonename" value="Europe/Monaco"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="234"/>
+            <column name="country_code" value="MD"/>
+            <column name="timezonename" value="Europe/Chisinau"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="235"/>
+            <column name="country_code" value="ME"/>
+            <column name="timezonename" value="Europe/Podgorica"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="236"/>
+            <column name="country_code" value="MF"/>
+            <column name="timezonename" value="America/Marigot"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="237"/>
+            <column name="country_code" value="MG"/>
+            <column name="timezonename" value="Indian/Antananarivo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="238"/>
+            <column name="country_code" value="MH"/>
+            <column name="timezonename" value="Pacific/Majuro"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="239"/>
+            <column name="country_code" value="MH"/>
+            <column name="timezonename" value="Pacific/Kwajalein"/>
+            <column name="comments" value="Kwajalein"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="240"/>
+            <column name="country_code" value="MK"/>
+            <column name="timezonename" value="Europe/Skopje"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="241"/>
+            <column name="country_code" value="ML"/>
+            <column name="timezonename" value="Africa/Bamako"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="242"/>
+            <column name="country_code" value="MM"/>
+            <column name="timezonename" value="Asia/Rangoon"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="243"/>
+            <column name="country_code" value="MN"/>
+            <column name="timezonename" value="Asia/Ulaanbaatar"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="244"/>
+            <column name="country_code" value="MN"/>
+            <column name="timezonename" value="Asia/Hovd"/>
+            <column name="comments" value="Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="245"/>
+            <column name="country_code" value="MN"/>
+            <column name="timezonename" value="Asia/Choibalsan"/>
+            <column name="comments" value="Dornod, Sukhbaatar"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="246"/>
+            <column name="country_code" value="MO"/>
+            <column name="timezonename" value="Asia/Macau"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="247"/>
+            <column name="country_code" value="MP"/>
+            <column name="timezonename" value="Pacific/Saipan"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="248"/>
+            <column name="country_code" value="MQ"/>
+            <column name="timezonename" value="America/Martinique"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="249"/>
+            <column name="country_code" value="MR"/>
+            <column name="timezonename" value="Africa/Nouakchott"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="250"/>
+            <column name="country_code" value="MS"/>
+            <column name="timezonename" value="America/Montserrat"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="251"/>
+            <column name="country_code" value="MT"/>
+            <column name="timezonename" value="Europe/Malta"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="252"/>
+            <column name="country_code" value="MU"/>
+            <column name="timezonename" value="Indian/Mauritius"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="253"/>
+            <column name="country_code" value="MV"/>
+            <column name="timezonename" value="Indian/Maldives"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="254"/>
+            <column name="country_code" value="MW"/>
+            <column name="timezonename" value="Africa/Blantyre"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="255"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Mexico_City"/>
+            <column name="comments" value="Central Time - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="256"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Cancun"/>
+            <column name="comments" value="Central Time - Quintana Roo"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="257"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Merida"/>
+            <column name="comments" value="Central Time - Campeche, Yucatan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="258"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Monterrey"/>
+            <column name="comments" value="Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="259"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Matamoros"/>
+            <column name="comments" value="US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="260"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Mazatlan"/>
+            <column name="comments" value="Mountain Time - S Baja, Nayarit, Sinaloa"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="261"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Chihuahua"/>
+            <column name="comments" value="Mexican Mountain Time - Chihuahua away from US border"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="262"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Ojinaga"/>
+            <column name="comments" value="US Mountain Time - Chihuahua near US border"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="263"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Hermosillo"/>
+            <column name="comments" value="Mountain Standard Time - Sonora"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="264"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Tijuana"/>
+            <column name="comments" value="US Pacific Time - Baja California near US border"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="265"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Santa_Isabel"/>
+            <column name="comments" value="Mexican Pacific Time - Baja California away from US border"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="266"/>
+            <column name="country_code" value="MX"/>
+            <column name="timezonename" value="America/Bahia_Banderas"/>
+            <column name="comments" value="Mexican Central Time - Bahia de Banderas"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="267"/>
+            <column name="country_code" value="MY"/>
+            <column name="timezonename" value="Asia/Kuala_Lumpur"/>
+            <column name="comments" value="peninsular Malaysia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="268"/>
+            <column name="country_code" value="MY"/>
+            <column name="timezonename" value="Asia/Kuching"/>
+            <column name="comments" value="Sabah &amp; Sarawak"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="269"/>
+            <column name="country_code" value="MZ"/>
+            <column name="timezonename" value="Africa/Maputo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="270"/>
+            <column name="country_code" value="NA"/>
+            <column name="timezonename" value="Africa/Windhoek"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="271"/>
+            <column name="country_code" value="NC"/>
+            <column name="timezonename" value="Pacific/Noumea"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="272"/>
+            <column name="country_code" value="NE"/>
+            <column name="timezonename" value="Africa/Niamey"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="273"/>
+            <column name="country_code" value="NF"/>
+            <column name="timezonename" value="Pacific/Norfolk"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="274"/>
+            <column name="country_code" value="NG"/>
+            <column name="timezonename" value="Africa/Lagos"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="275"/>
+            <column name="country_code" value="NI"/>
+            <column name="timezonename" value="America/Managua"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="276"/>
+            <column name="country_code" value="NL"/>
+            <column name="timezonename" value="Europe/Amsterdam"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="277"/>
+            <column name="country_code" value="NO"/>
+            <column name="timezonename" value="Europe/Oslo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="278"/>
+            <column name="country_code" value="NP"/>
+            <column name="timezonename" value="Asia/Kathmandu"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="279"/>
+            <column name="country_code" value="NR"/>
+            <column name="timezonename" value="Pacific/Nauru"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="280"/>
+            <column name="country_code" value="NU"/>
+            <column name="timezonename" value="Pacific/Niue"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="281"/>
+            <column name="country_code" value="NZ"/>
+            <column name="timezonename" value="Pacific/Auckland"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="282"/>
+            <column name="country_code" value="NZ"/>
+            <column name="timezonename" value="Pacific/Chatham"/>
+            <column name="comments" value="Chatham Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="283"/>
+            <column name="country_code" value="OM"/>
+            <column name="timezonename" value="Asia/Muscat"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="284"/>
+            <column name="country_code" value="PA"/>
+            <column name="timezonename" value="America/Panama"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="285"/>
+            <column name="country_code" value="PE"/>
+            <column name="timezonename" value="America/Lima"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="286"/>
+            <column name="country_code" value="PF"/>
+            <column name="timezonename" value="Pacific/Tahiti"/>
+            <column name="comments" value="Society Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="287"/>
+            <column name="country_code" value="PF"/>
+            <column name="timezonename" value="Pacific/Marquesas"/>
+            <column name="comments" value="Marquesas Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="288"/>
+            <column name="country_code" value="PF"/>
+            <column name="timezonename" value="Pacific/Gambier"/>
+            <column name="comments" value="Gambier Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="289"/>
+            <column name="country_code" value="PG"/>
+            <column name="timezonename" value="Pacific/Port_Moresby"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="290"/>
+            <column name="country_code" value="PH"/>
+            <column name="timezonename" value="Asia/Manila"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="291"/>
+            <column name="country_code" value="PK"/>
+            <column name="timezonename" value="Asia/Karachi"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="292"/>
+            <column name="country_code" value="PL"/>
+            <column name="timezonename" value="Europe/Warsaw"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="293"/>
+            <column name="country_code" value="PM"/>
+            <column name="timezonename" value="America/Miquelon"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="294"/>
+            <column name="country_code" value="PN"/>
+            <column name="timezonename" value="Pacific/Pitcairn"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="295"/>
+            <column name="country_code" value="PR"/>
+            <column name="timezonename" value="America/Puerto_Rico"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="296"/>
+            <column name="country_code" value="PS"/>
+            <column name="timezonename" value="Asia/Gaza"/>
+            <column name="comments" value="Gaza Strip"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="297"/>
+            <column name="country_code" value="PS"/>
+            <column name="timezonename" value="Asia/Hebron"/>
+            <column name="comments" value="West Bank"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="298"/>
+            <column name="country_code" value="PT"/>
+            <column name="timezonename" value="Europe/Lisbon"/>
+            <column name="comments" value="mainland"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="299"/>
+            <column name="country_code" value="PT"/>
+            <column name="timezonename" value="Atlantic/Madeira"/>
+            <column name="comments" value="Madeira Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="300"/>
+            <column name="country_code" value="PT"/>
+            <column name="timezonename" value="Atlantic/Azores"/>
+            <column name="comments" value="Azores"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="301"/>
+            <column name="country_code" value="PW"/>
+            <column name="timezonename" value="Pacific/Palau"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="302"/>
+            <column name="country_code" value="PY"/>
+            <column name="timezonename" value="America/Asuncion"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="303"/>
+            <column name="country_code" value="QA"/>
+            <column name="timezonename" value="Asia/Qatar"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="304"/>
+            <column name="country_code" value="RE"/>
+            <column name="timezonename" value="Indian/Reunion"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="305"/>
+            <column name="country_code" value="RO"/>
+            <column name="timezonename" value="Europe/Bucharest"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="306"/>
+            <column name="country_code" value="RS"/>
+            <column name="timezonename" value="Europe/Belgrade"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="307"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Europe/Kaliningrad"/>
+            <column name="comments" value="Moscow-01 - Kaliningrad"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="308"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Europe/Moscow"/>
+            <column name="comments" value="Moscow+00 - west Russia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="309"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Europe/Volgograd"/>
+            <column name="comments" value="Moscow+00 - Caspian Sea"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="310"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Europe/Samara"/>
+            <column name="comments" value="Moscow+00 - Samara, Udmurtia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="311"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Yekaterinburg"/>
+            <column name="comments" value="Moscow+02 - Urals"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="312"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Omsk"/>
+            <column name="comments" value="Moscow+03 - west Siberia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="313"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Novosibirsk"/>
+            <column name="comments" value="Moscow+03 - Novosibirsk"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="314"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Novokuznetsk"/>
+            <column name="comments" value="Moscow+03 - Novokuznetsk"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="315"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Krasnoyarsk"/>
+            <column name="comments" value="Moscow+04 - Yenisei River"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="316"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Irkutsk"/>
+            <column name="comments" value="Moscow+05 - Lake Baikal"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="317"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Yakutsk"/>
+            <column name="comments" value="Moscow+06 - Lena River"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="318"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Vladivostok"/>
+            <column name="comments" value="Moscow+07 - Amur River"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="319"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Sakhalin"/>
+            <column name="comments" value="Moscow+07 - Sakhalin Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="320"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Magadan"/>
+            <column name="comments" value="Moscow+08 - Magadan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="321"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Kamchatka"/>
+            <column name="comments" value="Moscow+08 - Kamchatka"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="322"/>
+            <column name="country_code" value="RU"/>
+            <column name="timezonename" value="Asia/Anadyr"/>
+            <column name="comments" value="Moscow+08 - Bering Sea"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="323"/>
+            <column name="country_code" value="RW"/>
+            <column name="timezonename" value="Africa/Kigali"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="324"/>
+            <column name="country_code" value="SA"/>
+            <column name="timezonename" value="Asia/Riyadh"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="325"/>
+            <column name="country_code" value="SB"/>
+            <column name="timezonename" value="Pacific/Guadalcanal"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="326"/>
+            <column name="country_code" value="SC"/>
+            <column name="timezonename" value="Indian/Mahe"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="327"/>
+            <column name="country_code" value="SD"/>
+            <column name="timezonename" value="Africa/Khartoum"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="328"/>
+            <column name="country_code" value="SE"/>
+            <column name="timezonename" value="Europe/Stockholm"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="329"/>
+            <column name="country_code" value="SG"/>
+            <column name="timezonename" value="Asia/Singapore"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="330"/>
+            <column name="country_code" value="SH"/>
+            <column name="timezonename" value="Atlantic/St_Helena"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="331"/>
+            <column name="country_code" value="SI"/>
+            <column name="timezonename" value="Europe/Ljubljana"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="332"/>
+            <column name="country_code" value="SJ"/>
+            <column name="timezonename" value="Arctic/Longyearbyen"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="333"/>
+            <column name="country_code" value="SK"/>
+            <column name="timezonename" value="Europe/Bratislava"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="334"/>
+            <column name="country_code" value="SL"/>
+            <column name="timezonename" value="Africa/Freetown"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="335"/>
+            <column name="country_code" value="SM"/>
+            <column name="timezonename" value="Europe/San_Marino"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="336"/>
+            <column name="country_code" value="SN"/>
+            <column name="timezonename" value="Africa/Dakar"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="337"/>
+            <column name="country_code" value="SO"/>
+            <column name="timezonename" value="Africa/Mogadishu"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="338"/>
+            <column name="country_code" value="SR"/>
+            <column name="timezonename" value="America/Paramaribo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="339"/>
+            <column name="country_code" value="SS"/>
+            <column name="timezonename" value="Africa/Juba"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="340"/>
+            <column name="country_code" value="ST"/>
+            <column name="timezonename" value="Africa/Sao_Tome"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="341"/>
+            <column name="country_code" value="SV"/>
+            <column name="timezonename" value="America/El_Salvador"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="342"/>
+            <column name="country_code" value="SX"/>
+            <column name="timezonename" value="America/Lower_Princes"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="343"/>
+            <column name="country_code" value="SY"/>
+            <column name="timezonename" value="Asia/Damascus"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="344"/>
+            <column name="country_code" value="SZ"/>
+            <column name="timezonename" value="Africa/Mbabane"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="345"/>
+            <column name="country_code" value="TC"/>
+            <column name="timezonename" value="America/Grand_Turk"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="346"/>
+            <column name="country_code" value="TD"/>
+            <column name="timezonename" value="Africa/Ndjamena"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="347"/>
+            <column name="country_code" value="TF"/>
+            <column name="timezonename" value="Indian/Kerguelen"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="348"/>
+            <column name="country_code" value="TG"/>
+            <column name="timezonename" value="Africa/Lome"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="349"/>
+            <column name="country_code" value="TH"/>
+            <column name="timezonename" value="Asia/Bangkok"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="350"/>
+            <column name="country_code" value="TJ"/>
+            <column name="timezonename" value="Asia/Dushanbe"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="351"/>
+            <column name="country_code" value="TK"/>
+            <column name="timezonename" value="Pacific/Fakaofo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="352"/>
+            <column name="country_code" value="TL"/>
+            <column name="timezonename" value="Asia/Dili"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="353"/>
+            <column name="country_code" value="TM"/>
+            <column name="timezonename" value="Asia/Ashgabat"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="354"/>
+            <column name="country_code" value="TN"/>
+            <column name="timezonename" value="Africa/Tunis"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="355"/>
+            <column name="country_code" value="TO"/>
+            <column name="timezonename" value="Pacific/Tongatapu"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="356"/>
+            <column name="country_code" value="TR"/>
+            <column name="timezonename" value="Europe/Istanbul"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="357"/>
+            <column name="country_code" value="TT"/>
+            <column name="timezonename" value="America/Port_of_Spain"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="358"/>
+            <column name="country_code" value="TV"/>
+            <column name="timezonename" value="Pacific/Funafuti"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="359"/>
+            <column name="country_code" value="TW"/>
+            <column name="timezonename" value="Asia/Taipei"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="360"/>
+            <column name="country_code" value="TZ"/>
+            <column name="timezonename" value="Africa/Dar_es_Salaam"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="361"/>
+            <column name="country_code" value="UA"/>
+            <column name="timezonename" value="Europe/Kiev"/>
+            <column name="comments" value="most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="362"/>
+            <column name="country_code" value="UA"/>
+            <column name="timezonename" value="Europe/Uzhgorod"/>
+            <column name="comments" value="Ruthenia"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="363"/>
+            <column name="country_code" value="UA"/>
+            <column name="timezonename" value="Europe/Zaporozhye"/>
+            <column name="comments" value="Zaporozhye, E Lugansk / Zaporizhia, E Luhansk"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="364"/>
+            <column name="country_code" value="UA"/>
+            <column name="timezonename" value="Europe/Simferopol"/>
+            <column name="comments" value="central Crimea"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="365"/>
+            <column name="country_code" value="UG"/>
+            <column name="timezonename" value="Africa/Kampala"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="366"/>
+            <column name="country_code" value="UM"/>
+            <column name="timezonename" value="Pacific/Johnston"/>
+            <column name="comments" value="Johnston Atoll"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="367"/>
+            <column name="country_code" value="UM"/>
+            <column name="timezonename" value="Pacific/Midway"/>
+            <column name="comments" value="Midway Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="368"/>
+            <column name="country_code" value="UM"/>
+            <column name="timezonename" value="Pacific/Wake"/>
+            <column name="comments" value="Wake Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="369"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/New_York"/>
+            <column name="comments" value="Eastern Time"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="370"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Detroit"/>
+            <column name="comments" value="Eastern Time - Michigan - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="371"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Kentucky/Louisville"/>
+            <column name="comments" value="Eastern Time - Kentucky - Louisville area"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="372"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Kentucky/Monticello"/>
+            <column name="comments" value="Eastern Time - Kentucky - Wayne County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="373"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Indianapolis"/>
+            <column name="comments" value="Eastern Time - Indiana - most locations"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="374"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Vincennes"/>
+            <column name="comments" value="Eastern Time - Indiana - Daviess, Dubois, Knox &amp; Martin Counties"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="375"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Winamac"/>
+            <column name="comments" value="Eastern Time - Indiana - Pulaski County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="376"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Marengo"/>
+            <column name="comments" value="Eastern Time - Indiana - Crawford County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="377"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Petersburg"/>
+            <column name="comments" value="Eastern Time - Indiana - Pike County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="378"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Vevay"/>
+            <column name="comments" value="Eastern Time - Indiana - Switzerland County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="379"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Chicago"/>
+            <column name="comments" value="Central Time"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="380"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Tell_City"/>
+            <column name="comments" value="Central Time - Indiana - Perry County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="381"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Indiana/Knox"/>
+            <column name="comments" value="Central Time - Indiana - Starke County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="382"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Menominee"/>
+            <column name="comments" value="Central Time - Michigan - Dickinson, Gogebic, Iron &amp; Menominee Counties"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="383"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/North_Dakota/Center"/>
+            <column name="comments" value="Central Time - North Dakota - Oliver County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="384"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/North_Dakota/New_Salem"/>
+            <column name="comments" value="Central Time - North Dakota - Morton County (except Mandan area)"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="385"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/North_Dakota/Beulah"/>
+            <column name="comments" value="Central Time - North Dakota - Mercer County"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="386"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Denver"/>
+            <column name="comments" value="Mountain Time"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="387"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Boise"/>
+            <column name="comments" value="Mountain Time - south Idaho &amp; east Oregon"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="388"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Shiprock"/>
+            <column name="comments" value="Mountain Time - Navajo"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="389"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Phoenix"/>
+            <column name="comments" value="Mountain Standard Time - Arizona"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="390"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Los_Angeles"/>
+            <column name="comments" value="Pacific Time"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="391"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Anchorage"/>
+            <column name="comments" value="Alaska Time"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="392"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Juneau"/>
+            <column name="comments" value="Alaska Time - Alaska panhandle"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="393"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Sitka"/>
+            <column name="comments" value="Alaska Time - southeast Alaska panhandle"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="394"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Yakutat"/>
+            <column name="comments" value="Alaska Time - Alaska panhandle neck"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="395"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Nome"/>
+            <column name="comments" value="Alaska Time - west Alaska"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="396"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Adak"/>
+            <column name="comments" value="Aleutian Islands"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="397"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="America/Metlakatla"/>
+            <column name="comments" value="Metlakatla Time - Annette Island"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="398"/>
+            <column name="country_code" value="US"/>
+            <column name="timezonename" value="Pacific/Honolulu"/>
+            <column name="comments" value="Hawaii"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="399"/>
+            <column name="country_code" value="UY"/>
+            <column name="timezonename" value="America/Montevideo"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="400"/>
+            <column name="country_code" value="UZ"/>
+            <column name="timezonename" value="Asia/Samarkand"/>
+            <column name="comments" value="west Uzbekistan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="401"/>
+            <column name="country_code" value="UZ"/>
+            <column name="timezonename" value="Asia/Tashkent"/>
+            <column name="comments" value="east Uzbekistan"/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="402"/>
+            <column name="country_code" value="VA"/>
+            <column name="timezonename" value="Europe/Vatican"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="403"/>
+            <column name="country_code" value="VC"/>
+            <column name="timezonename" value="America/St_Vincent"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="404"/>
+            <column name="country_code" value="VE"/>
+            <column name="timezonename" value="America/Caracas"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="405"/>
+            <column name="country_code" value="VG"/>
+            <column name="timezonename" value="America/Tortola"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="406"/>
+            <column name="country_code" value="VI"/>
+            <column name="timezonename" value="America/St_Thomas"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="407"/>
+            <column name="country_code" value="VN"/>
+            <column name="timezonename" value="Asia/Ho_Chi_Minh"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="408"/>
+            <column name="country_code" value="VU"/>
+            <column name="timezonename" value="Pacific/Efate"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="409"/>
+            <column name="country_code" value="WF"/>
+            <column name="timezonename" value="Pacific/Wallis"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="410"/>
+            <column name="country_code" value="WS"/>
+            <column name="timezonename" value="Pacific/Apia"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="411"/>
+            <column name="country_code" value="YE"/>
+            <column name="timezonename" value="Asia/Aden"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="412"/>
+            <column name="country_code" value="YT"/>
+            <column name="timezonename" value="Indian/Mayotte"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="413"/>
+            <column name="country_code" value="ZA"/>
+            <column name="timezonename" value="Africa/Johannesburg"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="414"/>
+            <column name="country_code" value="ZM"/>
+            <column name="timezonename" value="Africa/Lusaka"/>
+            <column name="comments" value=""/>
+        </insert>
+        <insert tableName="timezones">
+            <column name="id" valueNumeric="415"/>
+            <column name="country_code" value="ZW"/>
+            <column name="timezonename" value="Africa/Harare"/>
+            <column name="comments" value=""/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
new file mode 100644
index 0000000..05449fa
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/changelog-tenant.xml
@@ -0,0 +1,27 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <!-- An example how to include upcoming changes -->
+    <!-- <include file="parts/0003_upcoming_change.xml" relativeToChangelogFile="true"/> -->
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/initial-switch-changelog-tenant.xml b/fineract-provider/src/main/resources/db/changelog/tenant/initial-switch-changelog-tenant.xml
new file mode 100644
index 0000000..130f980
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/initial-switch-changelog-tenant.xml
@@ -0,0 +1,29 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <include file="parts/0001_initial_schema.xml" relativeToChangelogFile="true" context="initial_switch"/>
+    <include file="parts/0002_initial_data.xml" relativeToChangelogFile="true" context="initial_switch"/>
+    <!-- The first 2 changelog files are ran with the initial_switch context to handle the Flyway -> Liquibase migration -->
+    <!-- The rest of the changelogs will not need this context set -->
+</databaseChangeLog>
diff --git a/fineract-provider/src/main/resources/db/changelog/tenant/parts/0001_initial_schema.xml b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0001_initial_schema.xml
new file mode 100644
index 0000000..97c9608
--- /dev/null
+++ b/fineract-provider/src/main/resources/db/changelog/tenant/parts/0001_initial_schema.xml
@@ -0,0 +1,9447 @@
+<?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.
+
+-->
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
+    <changeSet author="fineract" id="1">
+        <createTable tableName="acc_accounting_rule">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="office_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="debit_account_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="allow_multiple_debits" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="credit_account_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="allow_multiple_credits" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(500)"/>
+            <column defaultValueBoolean="false" name="system_defined" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="2">
+        <createTable tableName="acc_gl_account">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(200)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="parent_id" type="BIGINT"/>
+            <column name="hierarchy" type="VARCHAR(50)"/>
+            <column name="gl_code" type="VARCHAR(45)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="disabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="manual_journal_entries_allowed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="2" name="account_usage" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="classification_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="tag_id" type="INT"/>
+            <column name="description" type="VARCHAR(500)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="3">
+        <createTable tableName="acc_gl_closure">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="closing_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_deleted" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column name="comments" type="VARCHAR(500)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="4">
+        <createTable tableName="acc_gl_financial_activity_account">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="gl_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="financial_activity_type" type="SMALLINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="5">
+        <createTable tableName="acc_gl_journal_entry">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="reversal_id" type="BIGINT"/>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_id" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="savings_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="client_transaction_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="ref_num" type="VARCHAR(100)"/>
+            <column defaultValueBoolean="false" name="manual_entry" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entry_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(500)"/>
+            <column defaultValueComputed="NULL" name="entity_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="entity_id" type="BIGINT"/>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_running_balance_calculated" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="office_running_balance" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="organization_running_balance" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="payment_details_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="share_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="transaction_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="6">
+        <createTable tableName="acc_product_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="gl_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="product_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="product_type" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="payment_type" type="INT"/>
+            <column defaultValueComputed="NULL" name="charge_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="financial_account_type" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="7">
+        <createTable tableName="acc_rule_tags">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="acc_rule_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="tag_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="acc_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="8">
+        <createTable tableName="c_account_number_format">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_type_enum" type="SMALLINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="prefix_type_enum" type="SMALLINT"/>
+            <column name="prefix_character" type="VARCHAR(50)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="9">
+        <createTable tableName="c_cache">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="1" name="cache_type_enum" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="10">
+        <createTable tableName="c_configuration">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="value" type="INT"/>
+            <column defaultValueComputed="NULL" name="date_value" type="date"/>
+            <column name="string_value" type="VARCHAR(100)"/>
+            <column defaultValueBoolean="false" name="enabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_trap_door" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(300)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="11">
+        <createTable tableName="c_external_service">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="12">
+        <createTable tableName="c_external_service_properties">
+            <column name="name" type="VARCHAR(150)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="value" type="VARCHAR(250)"/>
+            <column name="external_service_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="13">
+        <createTable tableName="client_device_registration">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="updatedon_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="registration_id" type="VARCHAR(255)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="14">
+        <createTable tableName="glim_accounts">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="group_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_number" type="VARCHAR(50)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="principal_amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="child_accounts_count" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="accepting_child" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="loan_status_id" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="application_id" type="DECIMAL(10)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="15">
+        <createTable tableName="gsim_accounts">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="group_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_number" type="VARCHAR(50)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="parent_deposit" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="child_accounts_count" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="accepting_child" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="savings_status_id" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="application_id" type="DECIMAL(10)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="16">
+        <createTable tableName="interop_identifier">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="type" type="VARCHAR(32)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_value" type="VARCHAR(128)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="sub_value_or_type" type="VARCHAR(128)"/>
+            <column name="created_by" type="VARCHAR(32)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="current_timestamp()" name="created_on" type="timestamp">
+                <constraints nullable="false"/>
+            </column>
+            <column name="modified_by" type="VARCHAR(32)"/>
+            <column defaultValueComputed="NULL" name="modified_on" type="timestamp"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="17">
+        <createTable tableName="job">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="display_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="cron_expression" type="VARCHAR(20)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="create_time" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="5" name="task_priority" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="group_name" type="VARCHAR(50)"/>
+            <column defaultValueComputed="NULL" name="previous_run_start_time" type="datetime"/>
+            <column defaultValueComputed="NULL" name="next_run_time" type="datetime"/>
+            <column name="job_key" type="VARCHAR(500)"/>
+            <column name="initializing_errorlog" type="TEXT"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="currently_running" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="updates_allowed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="scheduler_group" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_misfired" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="node_id" type="INT"/>
+            <column defaultValueBoolean="true" name="is_mismatched_job" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="18">
+        <createTable tableName="job_parameters">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="job_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="parameter_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="parameter_value" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="19">
+        <createTable tableName="job_run_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="job_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="version" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="start_time" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="end_time" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status" type="VARCHAR(10)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="error_message" type="TEXT"/>
+            <column name="trigger_type" type="VARCHAR(25)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="error_log" type="TEXT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="20">
+        <createTable tableName="m_account_transfer_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="from_office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="to_office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="from_client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="to_client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="from_savings_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="to_savings_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="from_loan_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="to_loan_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="transfer_type" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="21">
+        <createTable tableName="m_account_transfer_standing_instructions">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(250)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="account_transfer_details_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="priority" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="instruction_type" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount" type="DECIMAL(19, 6)"/>
+            <column name="valid_from" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="valid_till" type="date"/>
+            <column name="recurrence_type" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="recurrence_frequency" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="recurrence_interval" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="recurrence_on_day" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="recurrence_on_month" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="last_run_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="22">
+        <createTable tableName="m_account_transfer_standing_instructions_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="standing_instruction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status" type="VARCHAR(20)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="execution_time" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="error_log" type="VARCHAR(500)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="23">
+        <createTable tableName="m_account_transfer_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_transfer_details_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="from_savings_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="from_loan_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="to_savings_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="to_loan_transaction_id" type="BIGINT"/>
+            <column name="is_reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(200)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="24">
+        <createTable tableName="m_address">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="street" type="VARCHAR(100)"/>
+            <column name="address_line_1" type="VARCHAR(100)"/>
+            <column name="address_line_2" type="VARCHAR(100)"/>
+            <column name="address_line_3" type="VARCHAR(100)"/>
+            <column name="town_village" type="VARCHAR(100)"/>
+            <column name="city" type="VARCHAR(100)"/>
+            <column name="county_district" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="state_province_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="country_id" type="INT"/>
+            <column name="postal_code" type="VARCHAR(10)"/>
+            <column defaultValueNumeric="0E-8" name="latitude" type="DECIMAL(10, 8)"/>
+            <column defaultValueNumeric="0E-8" name="longitude" type="DECIMAL(10, 8)"/>
+            <column name="created_by" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="created_on" type="date"/>
+            <column name="updated_by" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="updated_on" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="25">
+        <createTable tableName="m_adhoc">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)"/>
+            <column name="query" type="VARCHAR(2000)"/>
+            <column name="table_name" type="VARCHAR(100)"/>
+            <column name="table_fields" type="VARCHAR(1000)"/>
+            <column name="email" type="VARCHAR(500)"/>
+            <column defaultValueBoolean="false" name="IsActive" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="report_run_frequency_code" type="INT"/>
+            <column defaultValueComputed="NULL" name="report_run_every" type="INT"/>
+            <column defaultValueComputed="NULL" name="last_run" type="timestamp"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="26">
+        <createTable tableName="m_appuser">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_deleted" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="office_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="staff_id" type="BIGINT"/>
+            <column name="username" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="firstname" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastname" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="password" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="firsttime_login_remaining" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="nonexpired" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="nonlocked" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="nonexpired_credentials" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="enabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueDate="1970-01-01" name="last_time_password_updated" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="password_never_expires"
+                    remarks="define if the password, should be check for validity period or not" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_self_service_user" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="cannot_change_password" type="boolean"/>
+        </createTable>
+        <addUniqueConstraint columnNames="username" constraintName="username_org" tableName="m_appuser"/>
+    </changeSet>
+    <changeSet author="fineract" id="27">
+        <createTable tableName="m_appuser_previous_password">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="user_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="password" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="removal_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="28">
+        <createTable tableName="m_appuser_role">
+            <column name="appuser_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="role_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="29">
+        <createTable tableName="m_calendar">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="title" type="VARCHAR(70)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(100)"/>
+            <column name="location" type="VARCHAR(50)"/>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueComputed="NULL" name="duration" type="SMALLINT"/>
+            <column name="calendar_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="repeating" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="recurrence" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="remind_by_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="first_reminder" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="second_reminder" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="meeting_time" type="time"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="30">
+        <createTable tableName="m_calendar_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="calendar_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="title" type="VARCHAR(70)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(100)"/>
+            <column name="location" type="VARCHAR(50)"/>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueComputed="NULL" name="duration" type="SMALLINT"/>
+            <column name="calendar_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="repeating" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="recurrence" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="remind_by_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="first_reminder" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="second_reminder" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="31">
+        <createTable tableName="m_calendar_instance">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="calendar_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="32">
+        <createTable tableName="m_cashier_transactions">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="cashier_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="txn_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="txn_amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="txn_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_type" type="VARCHAR(50)"/>
+            <column defaultValueComputed="NULL" name="entity_id" type="BIGINT"/>
+            <column name="txn_note" type="VARCHAR(200)"/>
+            <column name="currency_code" type="VARCHAR(3)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="33">
+        <createTable tableName="m_cashiers">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="staff_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="teller_id" type="BIGINT"/>
+            <column name="description" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="start_date" type="date"/>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column name="start_time" type="VARCHAR(10)"/>
+            <column name="end_time" type="VARCHAR(10)"/>
+            <column defaultValueComputed="NULL" name="full_day" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="34">
+        <createTable tableName="m_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_applies_to_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_time_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_calculation_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="charge_payment_mode_enum" type="SMALLINT"/>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="fee_on_day" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="fee_interval" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="fee_on_month" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="is_penalty" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_deleted" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_cap" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_cap" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_frequency" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="is_free_withdrawal" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="free_withdrawal_charge_frequency" type="INT"/>
+            <column defaultValueNumeric="0" name="restart_frequency" type="INT"/>
+            <column defaultValueNumeric="0" name="restart_frequency_enum" type="INT"/>
+            <column defaultValueBoolean="false" name="is_payment_type" type="boolean"/>
+            <column defaultValueComputed="NULL" name="payment_type_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="income_or_liability_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="tax_group_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="35">
+        <createTable tableName="m_client">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_no" type="VARCHAR(20)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueNumeric="300" name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="sub_status" type="INT"/>
+            <column defaultValueComputed="NULL" name="activation_date" type="date"/>
+            <column defaultValueComputed="NULL" name="office_joining_date" type="date"/>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="transfer_to_office_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="staff_id" type="BIGINT"/>
+            <column name="firstname" type="VARCHAR(50)"/>
+            <column name="middlename" type="VARCHAR(50)"/>
+            <column name="lastname" type="VARCHAR(50)"/>
+            <column name="fullname" type="VARCHAR(100)"/>
+            <column name="display_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="mobile_no" type="VARCHAR(50)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_staff" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="gender_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="date_of_birth" type="date"/>
+            <column defaultValueComputed="NULL" name="image_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="closure_reason_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="closedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="updated_by" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="updated_on" type="date"/>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="submittedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="activatedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="closedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="default_savings_product" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="default_savings_account" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="client_type_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="client_classification_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="reject_reason_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="rejectedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="rejectedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="withdraw_reason_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="withdrawn_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="withdraw_on_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="reactivated_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="reactivated_on_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="legal_form_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="reopened_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="reopened_by_userid" type="BIGINT"/>
+            <column name="email_address" type="VARCHAR(150)"/>
+            <column defaultValueComputed="NULL" name="proposed_transfer_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="36">
+        <createTable tableName="m_client_address">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="address_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="address_type_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="37">
+        <createTable tableName="m_client_attendance">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="meeting_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="attendance_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="38">
+        <createTable tableName="m_client_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="is_penalty" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_time_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="charge_due_date" type="date"/>
+            <column name="charge_calculation_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_paid_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column name="amount_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="is_paid_derived" type="boolean"/>
+            <column defaultValueComputed="NULL" name="waived" type="boolean"/>
+            <column defaultValueComputed="NULL" name="is_active" type="boolean"/>
+            <column defaultValueComputed="NULL" name="inactivated_on_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="39">
+        <createTable tableName="m_client_charge_paid_by">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_transaction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="client_charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="40">
+        <createTable tableName="m_client_collateral_management">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="quantity" type="DECIMAL(20, 5)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="collateral_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="41">
+        <createTable tableName="m_client_identifier">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="document_type_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="document_key" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="300" name="status" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="active" type="INT"/>
+            <column name="description" type="VARCHAR(500)"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="42">
+        <createTable tableName="m_client_non_person">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="constitution_cv_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="incorp_no" type="VARCHAR(50)"/>
+            <column defaultValueComputed="NULL" name="incorp_validity_till" type="datetime"/>
+            <column defaultValueComputed="NULL" name="main_business_line_cv_id" type="INT"/>
+            <column name="remarks" type="VARCHAR(150)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="43">
+        <createTable tableName="m_client_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="payment_detail_id" type="BIGINT"/>
+            <column name="is_reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="external_id" type="VARCHAR(50)">
+                <constraints unique="true"/>
+            </column>
+            <column name="transaction_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="appuser_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="44">
+        <createTable tableName="m_client_transfer_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="from_office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="to_office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="proposed_transfer_date" type="date"/>
+            <column name="transfer_type" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="submitted_on" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="submitted_by" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="45">
+        <createTable tableName="m_code">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code_name" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_system_defined" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="46">
+        <createTable tableName="m_code_value">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="code_value" type="VARCHAR(100)"/>
+            <column name="code_description" type="VARCHAR(500)"/>
+            <column defaultValueNumeric="0" name="order_position" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="code_score" type="INT"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_mandatory" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="47">
+        <createTable tableName="m_collateral_management">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="quality" type="VARCHAR(40)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="base_price" type="DECIMAL(20, 5)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="unit_type" type="VARCHAR(10)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="pct_to_base" type="DECIMAL(20, 5)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="48">
+        <createTable tableName="m_creditbureau">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="product" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="country" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="implementationKey" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="49">
+        <createTable tableName="m_creditbureau_configuration">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="configkey" type="VARCHAR(50)"/>
+            <column name="value" type="LONGTEXT"/>
+            <column defaultValueComputed="NULL" name="organisation_creditbureau_id" type="BIGINT"/>
+            <column name="description" type="VARCHAR(50)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="50">
+        <createTable tableName="m_creditbureau_loanproduct_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="organisation_creditbureau_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="is_creditcheck_mandatory" type="boolean"/>
+            <column defaultValueComputed="NULL" name="skip_creditcheck_in_failure" type="boolean"/>
+            <column defaultValueComputed="NULL" name="stale_period" type="INT"/>
+            <column defaultValueComputed="NULL" name="isActive" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="51">
+        <createTable tableName="m_creditbureau_token">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="username" type="VARCHAR(128)"/>
+            <column name="token" type="MEDIUMTEXT"/>
+            <column name="tokenType" type="VARCHAR(128)"/>
+            <column name="expiresIn" type="VARCHAR(128)"/>
+            <column name="issued" type="VARCHAR(128)"/>
+            <column defaultValueComputed="NULL" name="expiryDate" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="52">
+        <createTable tableName="m_creditreport">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="creditBureauId" type="BIGINT"/>
+            <column name="nationalId" type="VARCHAR(128)"/>
+            <column defaultValueComputed="NULL" name="creditReports" type="BLOB"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="53">
+        <createTable tableName="m_currency">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code" type="VARCHAR(3)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="decimal_places" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="display_symbol" type="VARCHAR(10)"/>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="internationalized_name_code" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="54">
+        <createTable tableName="m_deposit_account_on_hold_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="55">
+        <createTable tableName="m_deposit_account_recurring_detail">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="mandatory_recommended_deposit_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="false" name="is_mandatory" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="allow_withdrawal" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="adjust_advance_towards_future_payments" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_calendar_inherited" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="total_overdue_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="no_of_overdue_installments" type="INT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="56">
+        <createTable tableName="m_deposit_account_term_and_preclosure">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_deposit_term" type="INT"/>
+            <column defaultValueComputed="NULL" name="max_deposit_term" type="INT"/>
+            <column defaultValueComputed="NULL" name="min_deposit_term_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="max_deposit_term_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="in_multiples_of_deposit_term" type="INT"/>
+            <column defaultValueComputed="NULL" name="in_multiples_of_deposit_term_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="pre_closure_penal_applicable" type="boolean"/>
+            <column defaultValueComputed="NULL" name="pre_closure_penal_interest" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="pre_closure_penal_interest_on_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="deposit_period" type="INT"/>
+            <column defaultValueComputed="NULL" name="deposit_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="deposit_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="maturity_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="maturity_date" type="date"/>
+            <column defaultValueComputed="NULL" name="on_account_closure_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="expected_firstdepositon_date" type="date"/>
+            <column defaultValueBoolean="false" name="transfer_interest_to_linked_account" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="transfer_to_savings_account_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="57">
+        <createTable tableName="m_deposit_product_interest_rate_chart">
+            <column name="deposit_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_rate_chart_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="58">
+        <createTable tableName="m_deposit_product_recurring_detail">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="savings_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_mandatory" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="allow_withdrawal" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="adjust_advance_towards_future_payments" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="59">
+        <createTable tableName="m_deposit_product_term_and_preclosure">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="savings_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_deposit_term" type="INT"/>
+            <column defaultValueComputed="NULL" name="max_deposit_term" type="INT"/>
+            <column defaultValueComputed="NULL" name="min_deposit_term_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="max_deposit_term_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="in_multiples_of_deposit_term" type="INT"/>
+            <column defaultValueComputed="NULL" name="in_multiples_of_deposit_term_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="pre_closure_penal_applicable" type="boolean"/>
+            <column defaultValueComputed="NULL" name="pre_closure_penal_interest" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="pre_closure_penal_interest_on_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="min_deposit_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_deposit_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="deposit_amount" type="DECIMAL(19, 6)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="60">
+        <createTable tableName="m_document">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="parent_entity_type" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="parent_entity_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="name" type="VARCHAR(250)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="file_name" type="VARCHAR(250)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="size" type="INT"/>
+            <column name="type" type="VARCHAR(500)"/>
+            <column name="description" type="VARCHAR(1000)"/>
+            <column defaultValue="0" name="location" type="VARCHAR(500)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="storage_type_enum" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="61">
+        <createTable tableName="m_entity_datatable_check">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="application_table_name" type="VARCHAR(200)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="x_registered_table_name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="system_defined" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="product_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="62">
+        <createTable tableName="m_entity_relation">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="from_entity_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="to_entity_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="code_name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="63">
+        <createTable tableName="m_entity_to_entity_access">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="entity_type" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="access_type_code_value_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="second_entity_type" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="second_entity_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="64">
+        <createTable tableName="m_entity_to_entity_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="rel_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="from_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="to_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="start_date" type="date"/>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="65">
+        <createTable tableName="m_family_members">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="firstname" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="middlename" type="VARCHAR(50)"/>
+            <column name="lastname" type="VARCHAR(50)"/>
+            <column name="qualification" type="VARCHAR(50)"/>
+            <column name="relationship_cv_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="marital_status_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="gender_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="date_of_birth" type="date"/>
+            <column defaultValueComputed="NULL" name="age" type="INT"/>
+            <column defaultValueComputed="NULL" name="profession_cv_id" type="INT"/>
+            <column name="mobile_number" type="VARCHAR(50)"/>
+            <column defaultValueComputed="NULL" name="is_dependent" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="66">
+        <createTable tableName="m_field_configuration">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="entity" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="subentity" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="field" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="is_enabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="is_mandatory" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="validation_regex" type="VARCHAR(50)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="67">
+        <createTable tableName="m_floating_rates">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(200)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_base_lending_rate" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="68">
+        <createTable tableName="m_floating_rates_periods">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="floating_rates_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="from_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_differential_to_base_lending_rate" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="69">
+        <createTable tableName="m_fund">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(255)">
+                <constraints unique="true"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="70">
+        <createTable tableName="m_group">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueNumeric="300" name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="activation_date" type="date"/>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="staff_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="parent_id" type="BIGINT"/>
+            <column name="level_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="display_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="hierarchy" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="closure_reason_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="closedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="activatedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="submittedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="closedon_userid" type="BIGINT"/>
+            <column name="account_no" type="VARCHAR(20)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="71">
+        <createTable tableName="m_group_client">
+            <column name="group_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="72">
+        <createTable tableName="m_group_level">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="parent_id" type="INT"/>
+            <column name="super_parent" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="level_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="recursable" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="can_have_clients" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="73">
+        <createTable tableName="m_group_roles">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="role_cv_id" type="INT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="74">
+        <createTable tableName="m_guarantor">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="client_reln_cv_id" type="INT"/>
+            <column name="type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="entity_id" type="BIGINT"/>
+            <column name="firstname" type="VARCHAR(50)"/>
+            <column name="lastname" type="VARCHAR(50)"/>
+            <column defaultValueComputed="NULL" name="dob" type="date"/>
+            <column name="address_line_1" type="VARCHAR(500)"/>
+            <column name="address_line_2" type="VARCHAR(500)"/>
+            <column name="city" type="VARCHAR(50)"/>
+            <column name="state" type="VARCHAR(50)"/>
+            <column name="country" type="VARCHAR(50)"/>
+            <column name="zip" type="VARCHAR(20)"/>
+            <column name="house_phone_number" type="VARCHAR(20)"/>
+            <column name="mobile_number" type="VARCHAR(20)"/>
+            <column name="comment" type="VARCHAR(500)"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="75">
+        <createTable tableName="m_guarantor_funding_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="guarantor_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_associations_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_released_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_remaining_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_transfered_derived" type="DECIMAL(19, 6)"/>
+            <column name="status_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="76">
+        <createTable tableName="m_guarantor_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="guarantor_fund_detail_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_transaction_id" type="BIGINT"/>
+            <column name="deposit_on_hold_transaction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="77">
+        <createTable tableName="m_holiday">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="from_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="to_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="repayments_rescheduled_to" type="datetime"/>
+            <column defaultValueNumeric="100" name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="processed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(100)"/>
+            <column defaultValueNumeric="2" name="rescheduling_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="78">
+        <createTable tableName="m_holiday_office">
+            <column name="holiday_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="79">
+        <createTable tableName="m_hook">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="template_id" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="name" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="ugd_template_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="80">
+        <createTable tableName="m_hook_configuration">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="hook_id" type="BIGINT"/>
+            <column name="field_type" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="field_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="field_value" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="81">
+        <createTable tableName="m_hook_registered_events">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="hook_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_name" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="action_name" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="82">
+        <createTable tableName="m_hook_schema">
+            <column autoIncrement="true" name="id" type="SMALLINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="hook_template_id" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="field_type" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="field_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="placeholder" type="VARCHAR(100)"/>
+            <column defaultValueBoolean="false" name="optional" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="83">
+        <createTable tableName="m_hook_templates">
+            <column autoIncrement="true" name="id" type="SMALLINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="84">
+        <createTable tableName="m_image">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="location" type="VARCHAR(500)"/>
+            <column defaultValueComputed="NULL" name="storage_type_enum" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="85">
+        <createTable tableName="m_import_document">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="document_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="import_time" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_time" type="datetime"/>
+            <column name="entity_type" type="TINYINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="completed" type="boolean"/>
+            <column defaultValueNumeric="0" name="total_records" type="BIGINT"/>
+            <column defaultValueNumeric="0" name="success_count" type="BIGINT"/>
+            <column defaultValueNumeric="0" name="failure_count" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="86">
+        <createTable tableName="m_interest_incentives">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="interest_rate_slab_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entiry_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="attribute_name" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="condition_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="attribute_value" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="incentive_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="87">
+        <createTable tableName="m_interest_rate_chart">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)"/>
+            <column name="description" type="VARCHAR(200)"/>
+            <column name="from_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueBoolean="false" name="is_primary_grouping_by_amount" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="88">
+        <createTable tableName="m_interest_rate_slab">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="interest_rate_chart_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(200)"/>
+            <column defaultValueComputed="NULL" name="period_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="from_period" type="INT"/>
+            <column defaultValueComputed="NULL" name="to_period" type="INT"/>
+            <column defaultValueComputed="NULL" name="amount_range_from" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_range_to" type="DECIMAL(19, 6)"/>
+            <column name="annual_interest_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="89">
+        <createTable tableName="m_loan">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_no" type="VARCHAR(20)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="glim_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="product_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="fund_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="loan_officer_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="loanpurpose_cv_id" type="INT"/>
+            <column name="loan_status_id" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="principal_amount_proposed" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="principal_amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="approved_principal" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="net_disbursal_amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="arrearstolerance_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="false" name="is_floating_interest_rate" type="boolean"/>
+            <column defaultValueNumeric="0.000000" name="interest_rate_differential" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="nominal_interest_rate_per_period" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="annual_nominal_interest_rate" type="DECIMAL(19, 6)"/>
+            <column name="interest_method_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="interest_calculated_in_period_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="allow_partial_period_interest_calcualtion" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="term_frequency" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="2" name="term_period_frequency_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="repay_every" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="repayment_period_frequency_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="number_of_repayments" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="grace_on_principal_periods" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="recurring_moratorium_principal_periods" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="grace_on_interest_periods" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="grace_interest_free_periods" type="SMALLINT"/>
+            <column name="amortization_method_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="submittedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="approvedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="approvedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="expected_disbursedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="expected_firstrepaymenton_date" type="date"/>
+            <column defaultValueComputed="NULL" name="interest_calculated_from_date" type="date"/>
+            <column defaultValueComputed="NULL" name="disbursedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="disbursedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="expected_maturedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="maturedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="closedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="closedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="total_charges_due_at_disbursement_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="principal_disbursed_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="principal_repaid_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="principal_writtenoff_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="principal_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_charged_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_repaid_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_waived_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_writtenoff_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_charged_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_repaid_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_waived_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_writtenoff_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_charged_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_repaid_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_waived_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_writtenoff_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_expected_repayment_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_repayment_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_expected_costofloan_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_costofloan_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_waived_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_writtenoff_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="total_overpaid_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="rejectedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="rejectedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="rescheduledon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="rescheduledon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="withdrawnon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="withdrawnon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="writtenoffon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="loan_transaction_strategy_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="sync_disbursement_with_meeting" type="boolean"/>
+            <column defaultValueComputed="NULL" name="loan_counter" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="loan_product_counter" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="fixed_emi_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_outstanding_loan_balance" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="grace_on_arrears_ageing" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="is_npa" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="total_recovered_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="accrued_till" type="date"/>
+            <column defaultValueComputed="NULL" name="interest_recalcualated_on" type="date"/>
+            <column defaultValueNumeric="1" name="days_in_month_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="days_in_year_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="interest_recalculation_enabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="guarantee_amount_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="create_standing_instruction_at_disbursement" type="boolean"/>
+            <column defaultValueNumeric="1" name="version" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="writeoff_reason_cv_id" type="INT"/>
+            <column defaultValueComputed="NULL" name="loan_sub_status_id" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="is_topup" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_equal_amortization" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="fixed_principal_percentage_per_installment" type="DECIMAL(5, 2)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="90">
+        <createTable tableName="m_loan_arrears_aging">
+            <column autoIncrement="true" name="loan_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="principal_overdue_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_overdue_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_overdue_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_overdue_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_overdue_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="overdue_since_date_derived" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="91">
+        <createTable tableName="m_loan_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_penalty" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_time_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="due_for_collection_as_of_date" type="date"/>
+            <column name="charge_calculation_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="charge_payment_mode_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="calculation_percentage" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="calculation_on_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="charge_amount_or_percentage" type="DECIMAL(19, 6)"/>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_paid_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="amount_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_paid_derived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="waived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_cap" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_cap" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="92">
+        <createTable tableName="m_loan_charge_paid_by">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_transaction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="installment_number" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="93">
+        <createTable tableName="m_loan_collateral">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="type_cv_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="value" type="DECIMAL(19, 6)"/>
+            <column name="description" type="VARCHAR(500)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="94">
+        <createTable tableName="m_loan_collateral_management">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="quantity" type="DECIMAL(20, 5)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="client_collateral_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="is_released" type="boolean"/>
+            <column defaultValueComputed="NULL" name="transaction_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="95">
+        <createTable tableName="m_loan_disbursement_detail">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="expected_disburse_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="disbursedon_date" type="datetime"/>
+            <column name="principal" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="net_disbursal_amount" type="DECIMAL(19, 6)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="96">
+        <createTable tableName="m_loan_installment_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_schedule_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="due_date" type="date"/>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_paid_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="amount_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_paid_derived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="waived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_through_charge_payment" type="DECIMAL(19, 6)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="97">
+        <createTable tableName="m_loan_interest_recalculation_additional_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_repayment_schedule_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="effective_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="98">
+        <createTable tableName="m_loan_officer_assignment_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_officer_id" type="BIGINT"/>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="99">
+        <createTable tableName="m_loan_overdue_installment_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_schedule_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="frequency_number" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="100">
+        <createTable tableName="m_loan_paid_in_advance">
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="principal_in_advance_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_in_advance_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="fee_charges_in_advance_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="penalty_charges_in_advance_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="total_in_advance_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="101">
+        <createTable tableName="m_loan_rate">
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="rate_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="102">
+        <createTable tableName="m_loan_recalculation_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="compound_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="reschedule_strategy_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="rest_frequency_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="rest_frequency_interval" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="compounding_frequency_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_interval" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="rest_frequency_nth_day_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="rest_frequency_on_day" type="INT"/>
+            <column defaultValueComputed="NULL" name="rest_frequency_weekday_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_nth_day_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_on_day" type="INT"/>
+            <column defaultValueBoolean="false" name="is_compounding_to_be_posted_as_transaction" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="compounding_frequency_weekday_enum" type="INT"/>
+            <column defaultValueBoolean="false" name="allow_compounding_on_eod" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="103">
+        <createTable tableName="m_loan_repayment_schedule">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="fromdate" type="date"/>
+            <column name="duedate" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="installment" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="principal_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="principal_completed_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="principal_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_completed_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="accrual_interest_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="reschedule_interest_portion" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_completed_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="accrual_fee_charges_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_completed_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="accrual_penalty_charges_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_paid_in_advance_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_paid_late_derived" type="DECIMAL(19, 6)"/>
+            <column name="completed_derived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="obligations_met_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="recalculated_interest_component" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="104">
+        <createTable tableName="m_loan_repayment_schedule_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_reschedule_request_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="fromdate" type="date"/>
+            <column name="duedate" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="installment" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="principal_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column name="version" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="105">
+        <createTable tableName="m_loan_reschedule_request">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="reschedule_from_installment" remarks="Rescheduling will start from this installment"
+                    type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="reschedule_from_date"
+                    remarks="Rescheduling will start from the installment with due date similar to this date."
+                    type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="recalculate_interest"
+                    remarks="If set to 1, interest will be recalculated starting from the reschedule period."
+                    type="boolean"/>
+            <column defaultValueComputed="NULL" name="reschedule_reason_cv_id"
+                    remarks="ID of code value of reason for rescheduling" type="INT"/>
+            <column name="reschedule_reason_comment" remarks="Text provided in addition to the reason code value"
+                    type="VARCHAR(500)"/>
+            <column name="submitted_on_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="submitted_by_user_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="approved_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="approved_by_user_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="rejected_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="rejected_by_user_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="106">
+        <createTable tableName="m_loan_reschedule_request_term_variations_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_reschedule_request_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_term_variations_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="107">
+        <createTable tableName="m_loan_term_variations">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="term_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="applicable_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="decimal_value" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="date_value" type="date"/>
+            <column defaultValueBoolean="false" name="is_specific_to_installment" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="applied_on_loan_status" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="parent_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="108">
+        <createTable tableName="m_loan_topup">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="closure_loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="account_transfer_details_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="topup_amount" type="DECIMAL(19, 6)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="109">
+        <createTable tableName="m_loan_tranche_charges">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="110">
+        <createTable tableName="m_loan_tranche_disbursement_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="disbursement_detail_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="111">
+        <createTable tableName="m_loan_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="payment_detail_id" type="BIGINT"/>
+            <column name="is_reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column name="transaction_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="principal_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="overpayment_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="unrecognized_income_portion" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="outstanding_loan_balance_derived" type="DECIMAL(19, 6)"/>
+            <column name="submitted_on_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="manually_adjusted_or_reversed" type="boolean"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="appuser_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="112">
+        <createTable tableName="m_loan_transaction_repayment_schedule_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_transaction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="loan_repayment_schedule_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="principal_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="fee_charges_portion_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="penalty_charges_portion_derived" type="DECIMAL(19, 6)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="113">
+        <createTable tableName="m_loanproduct_provisioning_entry">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="history_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="criteria_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="category_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="overdue_in_days" type="BIGINT"/>
+            <column defaultValueNumeric="0.000000" name="reseve_amount" type="DECIMAL(20, 6)"/>
+            <column defaultValueComputed="NULL" name="liability_account" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="expense_account" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="114">
+        <createTable tableName="m_loanproduct_provisioning_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="criteria_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="115">
+        <createTable tableName="m_mandatory_savings_schedule">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="fromdate" type="date"/>
+            <column name="duedate" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="installment" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="deposit_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="deposit_amount_completed_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_paid_in_advance_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_paid_late_derived" type="DECIMAL(19, 6)"/>
+            <column name="completed_derived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="obligations_met_on_date" type="date"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="116">
+        <createTable tableName="m_meeting">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="calendar_instance_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="meeting_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="117">
+        <createTable tableName="m_note">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="loan_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="loan_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="savings_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="savings_account_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="share_account_id" type="BIGINT"/>
+            <column name="note_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="note" type="VARCHAR(1000)"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="118">
+        <createTable tableName="m_office">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="parent_id" type="BIGINT"/>
+            <column name="hierarchy" type="VARCHAR(100)"/>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="opening_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="119">
+        <createTable tableName="m_office_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="from_office_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="to_office_id" type="BIGINT"/>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(100)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="120">
+        <createTable tableName="m_organisation_creditbureau">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="alias" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="creditbureau_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="isActive" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="121">
+        <createTable tableName="m_organisation_currency">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="decimal_places" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="display_symbol" type="VARCHAR(10)"/>
+            <column name="internationalized_name_code" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="122">
+        <createTable tableName="m_password_validation_policy">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="regex" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="key" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="123">
+        <createTable tableName="m_payment_detail">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="payment_type_id" type="INT"/>
+            <column name="account_number" type="VARCHAR(100)"/>
+            <column name="check_number" type="VARCHAR(100)"/>
+            <column name="receipt_number" type="VARCHAR(100)"/>
+            <column name="bank_number" type="VARCHAR(100)"/>
+            <column name="routing_code" type="VARCHAR(100)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="124">
+        <createTable tableName="m_payment_type">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="value" type="VARCHAR(100)"/>
+            <column name="description" type="VARCHAR(500)"/>
+            <column defaultValueBoolean="false" name="is_cash_payment" type="boolean"/>
+            <column defaultValueNumeric="0" name="order_position" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="125">
+        <createTable tableName="m_permission">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="grouping" type="VARCHAR(45)"/>
+            <column name="code" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="entity_name" type="VARCHAR(100)"/>
+            <column name="action_name" type="VARCHAR(100)"/>
+            <column defaultValueBoolean="true" name="can_maker_checker" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="126">
+        <createTable tableName="m_pocket">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="app_user_id" type="BIGINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="127">
+        <createTable tableName="m_pocket_accounts_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="pocket_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_number" type="VARCHAR(20)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="128">
+        <createTable tableName="m_portfolio_account_associations">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="savings_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="linked_loan_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="linked_savings_account_id" type="BIGINT"/>
+            <column defaultValueNumeric="1" name="association_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="129">
+        <createTable tableName="m_portfolio_command_source">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="action_name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="office_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="loan_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="savings_account_id" type="BIGINT"/>
+            <column name="api_get_url" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="resource_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="subresource_id" type="BIGINT"/>
+            <column name="command_as_json" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="maker_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="made_on_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="checker_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="checked_on_date" type="datetime"/>
+            <column name="processing_result_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="product_id" type="BIGINT"/>
+            <column name="transaction_id" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="creditbureau_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="organisation_creditbureau_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="130">
+        <createTable tableName="m_product_loan">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="short_name" type="VARCHAR(4)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="principal_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="min_principal_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_principal_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="arrearstolerance_amount" type="DECIMAL(19, 6)"/>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="description" type="VARCHAR(500)"/>
+            <column defaultValueComputed="NULL" name="fund_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="is_linked_to_floating_interest_rates" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="allow_variabe_installments" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="nominal_interest_rate_per_period" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="min_nominal_interest_rate_per_period" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_nominal_interest_rate_per_period" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="annual_nominal_interest_rate" type="DECIMAL(19, 6)"/>
+            <column name="interest_method_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="interest_calculated_in_period_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="allow_partial_period_interest_calcualtion" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="repay_every" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="repayment_period_frequency_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="number_of_repayments" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_number_of_repayments" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="max_number_of_repayments" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="grace_on_principal_periods" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="recurring_moratorium_principal_periods" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="grace_on_interest_periods" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="grace_interest_free_periods" type="SMALLINT"/>
+            <column name="amortization_method_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="accounting_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_transaction_strategy_id" type="BIGINT"/>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="include_in_borrower_cycle" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="use_borrower_cycle" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="start_date" type="date"/>
+            <column defaultValueComputed="NULL" name="close_date" type="date"/>
+            <column defaultValueBoolean="false" name="allow_multiple_disbursals" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="max_disbursals" type="INT"/>
+            <column defaultValueComputed="NULL" name="max_outstanding_loan_balance" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="grace_on_arrears_ageing" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="overdue_days_for_npa" type="SMALLINT"/>
+            <column defaultValueNumeric="1" name="days_in_month_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="days_in_year_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="interest_recalculation_enabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_days_between_disbursal_and_first_repayment" type="INT"/>
+            <column defaultValueBoolean="false" name="hold_guarantee_funds" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="50.00" name="principal_threshold_for_last_installment" type="DECIMAL(5, 2)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="account_moves_out_of_npa_only_on_arrears_completion" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="can_define_fixed_emi_amount" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="instalment_amount_in_multiples_of" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="false" name="can_use_for_topup" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="sync_expected_with_disbursement_date" type="boolean"/>
+            <column defaultValueBoolean="false" name="is_equal_amortization" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="fixed_principal_percentage_per_installment" type="DECIMAL(5, 2)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="131">
+        <createTable tableName="m_product_loan_charge">
+            <column name="product_loan_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="132">
+        <createTable tableName="m_product_loan_configurable_attributes">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="amortization_method_enum" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="interest_method_enum" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="loan_transaction_strategy_id" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="interest_calculated_in_period_enum" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="arrearstolerance_amount" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="repay_every" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="moratorium" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="grace_on_arrears_ageing" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="133">
+        <createTable tableName="m_product_loan_floating_rates">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="floating_rates_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="interest_rate_differential" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="min_differential_lending_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="default_differential_lending_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="max_differential_lending_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_floating_interest_rate_calculation_allowed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="134">
+        <createTable tableName="m_product_loan_guarantee_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="mandatory_guarantee" type="DECIMAL(19, 5)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="minimum_guarantee_from_own_funds" type="DECIMAL(19, 5)"/>
+            <column defaultValueComputed="NULL" name="minimum_guarantee_from_guarantor_funds" type="DECIMAL(19, 5)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="135">
+        <createTable tableName="m_product_loan_rate">
+            <column name="product_loan_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="rate_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="136">
+        <createTable tableName="m_product_loan_recalculation_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="compound_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="reschedule_strategy_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="rest_frequency_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="rest_frequency_interval" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="arrears_based_on_original_schedule" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="pre_close_interest_calculation_strategy" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="compounding_frequency_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_interval" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="rest_frequency_nth_day_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="rest_frequency_on_day" type="INT"/>
+            <column defaultValueComputed="NULL" name="rest_frequency_weekday_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_nth_day_enum" type="INT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_on_day" type="INT"/>
+            <column defaultValueComputed="NULL" name="compounding_frequency_weekday_enum" type="INT"/>
+            <column defaultValueBoolean="false" name="is_compounding_to_be_posted_as_transaction" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="allow_compounding_on_eod" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="137">
+        <createTable tableName="m_product_loan_variable_installment_config">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="loan_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="minimum_gap" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="maximum_gap" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="138">
+        <createTable tableName="m_product_loan_variations_borrower_cycle">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueNumeric="0" name="loan_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="borrower_cycle_number" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="value_condition" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="param_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0.000000" name="default_value" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="max_value" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="min_value" type="DECIMAL(19, 6)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="139">
+        <createTable tableName="m_product_mix">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="restricted_product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="140">
+        <createTable tableName="m_provision_category">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="category_name" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="description" type="VARCHAR(300)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="141">
+        <createTable tableName="m_provisioning_criteria">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="criteria_name" type="VARCHAR(200)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="142">
+        <createTable tableName="m_provisioning_criteria_definition">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="criteria_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="category_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="min_age" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="max_age" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="provision_percentage" type="DECIMAL(5, 2)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="liability_account" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="expense_account" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="143">
+        <createTable tableName="m_provisioning_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="journal_entry_created" type="boolean"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="date"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="144">
+        <createTable tableName="m_rate">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(250)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="percentage" type="DECIMAL(10, 2)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="active" type="boolean"/>
+            <column name="product_apply" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="approve_user" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="145">
+        <createTable tableName="m_repayment_with_post_dated_checks">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="check_no" type="BIGINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="amount" type="DECIMAL(20, 5)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="loan_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="repayment_id" type="BIGINT"/>
+            <column name="account_no" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="bank_name" type="VARCHAR(200)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="repayment_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="status" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="146">
+        <createTable tableName="m_report_mailing_job">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="description" type="TEXT"/>
+            <column name="start_datetime" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="recurrence" type="VARCHAR(100)"/>
+            <column name="created_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="date"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column name="email_recipients" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_subject" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_message" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_attachment_file_format" type="VARCHAR(10)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="stretchy_report_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="stretchy_report_param_map" type="TEXT"/>
+            <column defaultValueComputed="NULL" name="previous_run_datetime" type="datetime"/>
+            <column defaultValueComputed="NULL" name="next_run_datetime" type="datetime"/>
+            <column name="previous_run_status" type="VARCHAR(10)"/>
+            <column name="previous_run_error_log" type="TEXT"/>
+            <column name="previous_run_error_message" type="TEXT"/>
+            <column defaultValueNumeric="0" name="number_of_runs" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_deleted" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="run_as_userid" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="147">
+        <createTable tableName="m_report_mailing_job_configuration">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="value" type="VARCHAR(200)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="148">
+        <createTable tableName="m_report_mailing_job_run_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="job_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="start_datetime" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="end_datetime" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status" type="VARCHAR(10)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="error_message" type="TEXT"/>
+            <column name="error_log" type="TEXT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="149">
+        <createTable tableName="m_role">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="description" type="VARCHAR(500)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_disabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="150">
+        <createTable tableName="m_role_permission">
+            <column name="role_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="permission_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="151">
+        <createTable tableName="m_savings_account">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_no" type="VARCHAR(20)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="gsim_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="product_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="field_officer_id" type="BIGINT"/>
+            <column defaultValueNumeric="300" name="status_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="sub_status_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="1" name="account_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="100" name="deposit_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="submittedon_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="submittedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="approvedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="approvedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="rejectedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="rejectedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="withdrawnon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="withdrawnon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="activatedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="activatedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="closedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="closedon_userid" type="BIGINT"/>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="nominal_annual_interest_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_compounding_period_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="4" name="interest_posting_period_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_calculation_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_calculation_days_in_year_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_required_opening_balance" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueBoolean="true" name="withdrawal_fee_for_transfer" type="boolean"/>
+            <column defaultValueBoolean="false" name="allow_overdraft" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="overdraft_limit" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="nominal_annual_interest_rate_overdraft" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="min_overdraft_for_interest_calculation" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockedin_until_date_derived" type="date"/>
+            <column defaultValueComputed="NULL" name="total_deposits_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_withdrawals_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_withdrawal_fees_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_fees_charge_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_penalty_charge_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_annual_fees_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_interest_earned_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_interest_posted_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="total_overdraft_interest_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="total_withhold_tax_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="account_balance_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_required_balance" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="false" name="enforce_min_required_balance" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_balance_for_interest_calculation" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="start_interest_calculation_date" type="date"/>
+            <column defaultValueComputed="NULL" name="on_hold_funds_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="1" name="version" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="withhold_tax" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="tax_group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="last_interest_calculation_date" type="date"/>
+            <column defaultValueComputed="NULL" name="total_savings_amount_on_hold" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="interest_posted_till_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="152">
+        <createTable tableName="m_savings_account_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_penalty" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_time_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="charge_due_date" type="date"/>
+            <column defaultValueComputed="NULL" name="fee_on_month" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="fee_on_day" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="fee_interval" type="SMALLINT"/>
+            <column defaultValueNumeric="0" name="free_withdrawal_count" type="INT"/>
+            <column defaultValueComputed="NULL" name="charge_reset_date" type="date"/>
+            <column name="charge_calculation_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="calculation_percentage" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="calculation_on_amount" type="DECIMAL(19, 6)"/>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_paid_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="amount_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_paid_derived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="waived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="inactivated_on_date" type="date"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="153">
+        <createTable tableName="m_savings_account_charge_paid_by">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_transaction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="savings_account_charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="154">
+        <createTable tableName="m_savings_account_interest_rate_chart">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="name" type="VARCHAR(100)"/>
+            <column name="description" type="VARCHAR(200)"/>
+            <column name="from_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueBoolean="false" name="is_primary_grouping_by_amount" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="155">
+        <createTable tableName="m_savings_account_interest_rate_slab">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_interest_rate_chart_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(200)"/>
+            <column defaultValueComputed="NULL" name="period_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="from_period" type="INT"/>
+            <column defaultValueComputed="NULL" name="to_period" type="INT"/>
+            <column defaultValueComputed="NULL" name="amount_range_from" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_range_to" type="DECIMAL(19, 6)"/>
+            <column name="annual_interest_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="156">
+        <createTable tableName="m_savings_account_transaction">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="payment_detail_id" type="BIGINT"/>
+            <column name="transaction_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="is_reversed" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column name="transaction_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="overdraft_amount_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="balance_end_date_derived" type="date"/>
+            <column defaultValueComputed="NULL" name="balance_number_of_days_derived" type="INT"/>
+            <column defaultValueComputed="NULL" name="running_balance_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="cumulative_balance_derived" type="DECIMAL(19, 6)"/>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="appuser_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="is_manual" type="boolean"/>
+            <column defaultValueComputed="NULL" name="release_id_of_hold_amount" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="is_loan_disbursement" type="boolean"/>
+            <column name="ref_no" type="VARCHAR(128)">
+                <constraints unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="157">
+        <createTable tableName="m_savings_account_transaction_tax_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="savings_transaction_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="tax_component_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="158">
+        <createTable tableName="m_savings_interest_incentives">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="deposit_account_interest_rate_slab_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entiry_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="attribute_name" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="condition_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="attribute_value" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="incentive_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="159">
+        <createTable tableName="m_savings_officer_assignment_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="savings_officer_id" type="BIGINT"/>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="160">
+        <createTable tableName="m_savings_product">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="short_name" type="VARCHAR(4)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="description" type="VARCHAR(500)"/>
+            <column defaultValueNumeric="100" name="deposit_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="nominal_annual_interest_rate" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_compounding_period_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="4" name="interest_posting_period_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_calculation_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="interest_calculation_days_in_year_type_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_required_opening_balance" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency_enum" type="SMALLINT"/>
+            <column name="accounting_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="withdrawal_fee_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="withdrawal_fee_type_enum" type="SMALLINT"/>
+            <column defaultValueBoolean="true" name="withdrawal_fee_for_transfer" type="boolean"/>
+            <column defaultValueBoolean="false" name="allow_overdraft" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="overdraft_limit" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="nominal_annual_interest_rate_overdraft" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="min_overdraft_for_interest_calculation" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="min_required_balance" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="false" name="enforce_min_required_balance" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_balance_for_interest_calculation" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="false" name="withhold_tax" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="tax_group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="is_dormancy_tracking_active" type="boolean"/>
+            <column defaultValueComputed="NULL" name="days_to_inactive" type="INT"/>
+            <column defaultValueComputed="NULL" name="days_to_dormancy" type="INT"/>
+            <column defaultValueComputed="NULL" name="days_to_escheat" type="INT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="161">
+        <createTable tableName="m_savings_product_charge">
+            <column name="savings_product_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="162">
+        <createTable tableName="m_selfservice_beneficiaries_tpt">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="app_user_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="transfer_limit" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="163">
+        <createTable tableName="m_selfservice_user_client_mapping">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="appuser_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="164">
+        <createTable tableName="m_share_account">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_no" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)"/>
+            <column defaultValueNumeric="300" name="status_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="total_approved_shares" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="total_pending_shares" type="BIGINT"/>
+            <column name="submitted_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="submitted_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="approved_date" type="date"/>
+            <column defaultValueComputed="NULL" name="approved_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="rejected_date" type="date"/>
+            <column defaultValueComputed="NULL" name="rejected_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="activated_date" type="date"/>
+            <column defaultValueComputed="NULL" name="activated_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="closed_date" type="date"/>
+            <column defaultValueComputed="NULL" name="closed_userid" type="BIGINT"/>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="savings_account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="minimum_active_period_frequency" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="minimum_active_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="allow_dividends_inactive_clients" type="boolean"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="165">
+        <createTable tableName="m_share_account_charge">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_time_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="charge_calculation_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="0" name="charge_payment_mode_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="calculation_percentage" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="calculation_on_amount" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="charge_amount_or_percentage" type="DECIMAL(19, 6)"/>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="amount_paid_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_waived_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="amount_writtenoff_derived" type="DECIMAL(19, 6)"/>
+            <column defaultValueNumeric="0.000000" name="amount_outstanding_derived" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_paid_derived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="false" name="waived" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="min_cap" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="max_cap" type="DECIMAL(19, 6)"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="166">
+        <createTable tableName="m_share_account_charge_paid_by">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="share_transaction_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="charge_transaction_id" type="BIGINT"/>
+            <column name="amount" type="DECIMAL(20, 2)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="167">
+        <createTable tableName="m_share_account_dividend_details">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="dividend_pay_out_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="savings_transaction_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="168">
+        <createTable tableName="m_share_account_transactions">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="transaction_date" type="date"/>
+            <column defaultValueComputed="NULL" name="total_shares" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="unit_price" type="DECIMAL(10, 2)"/>
+            <column defaultValueComputed="NULL" name="amount" type="DECIMAL(20, 2)"/>
+            <column defaultValueComputed="NULL" name="charge_amount" type="DECIMAL(20, 2)"/>
+            <column defaultValueComputed="NULL" name="amount_paid" type="DECIMAL(20, 2)"/>
+            <column defaultValueNumeric="300" name="status_enum" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="type_enum" type="SMALLINT"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="169">
+        <createTable tableName="m_share_product">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(200)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="short_name" type="VARCHAR(4)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)"/>
+            <column name="description" type="VARCHAR(500)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="start_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="end_date" type="datetime"/>
+            <column name="currency_code" type="VARCHAR(3)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="currency_digits" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="currency_multiplesof" type="SMALLINT"/>
+            <column name="total_shares" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="issued_shares" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="totalsubscribed_shares" type="BIGINT"/>
+            <column name="unit_price" type="DECIMAL(10, 2)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="capital_amount" type="DECIMAL(20, 2)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="minimum_client_shares" type="BIGINT"/>
+            <column name="nominal_client_shares" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="maximum_client_shares" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="minimum_active_period_frequency" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="minimum_active_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency" type="DECIMAL(19, 6)"/>
+            <column defaultValueComputed="NULL" name="lockin_period_frequency_enum" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="allow_dividends_inactive_clients" type="boolean"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column name="accounting_type" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="170">
+        <createTable tableName="m_share_product_charge">
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="charge_id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="171">
+        <createTable tableName="m_share_product_dividend_pay_out">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="dividend_period_start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="dividend_period_end_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="status" type="SMALLINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="172">
+        <createTable tableName="m_share_product_market_price">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="product_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="from_date" type="date"/>
+            <column name="share_value" type="DECIMAL(10, 2)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="173">
+        <createTable tableName="m_staff">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_loan_officer" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="office_id" type="BIGINT"/>
+            <column name="firstname" type="VARCHAR(50)"/>
+            <column name="lastname" type="VARCHAR(50)"/>
+            <column name="display_name" type="VARCHAR(102)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="mobile_no" type="VARCHAR(50)">
+                <constraints unique="true"/>
+            </column>
+            <column name="external_id" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="organisational_role_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="organisational_role_parent_staff_id" type="BIGINT"/>
+            <column defaultValueBoolean="true" name="is_active" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="joining_date" type="date"/>
+            <column defaultValueComputed="NULL" name="image_id" type="BIGINT"/>
+            <column name="email_address" type="VARCHAR(150)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="174">
+        <createTable tableName="m_staff_assignment_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="centre_id" type="BIGINT"/>
+            <column name="staff_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column defaultValueComputed="NULL" name="createdby_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="created_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodified_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id" type="BIGINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="175">
+        <createTable tableName="m_survey_components">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="survey_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_key" type="VARCHAR(32)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_text" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(4000)"/>
+            <column name="sequence_no" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="176">
+        <createTable tableName="m_survey_lookup_tables">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="survey_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_key" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="description" type="INT"/>
+            <column name="value_from" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="value_to" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="score" type="DECIMAL(5, 2)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="177">
+        <createTable tableName="m_survey_questions">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="survey_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="component_key" type="VARCHAR(32)"/>
+            <column name="a_key" type="VARCHAR(32)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_text" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(4000)"/>
+            <column name="sequence_no" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="178">
+        <createTable tableName="m_survey_responses">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="question_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_text" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_value" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="sequence_no" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="179">
+        <createTable tableName="m_survey_scorecards">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="survey_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="question_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="response_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="user_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="created_on" type="datetime"/>
+            <column name="a_value" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="180">
+        <createTable tableName="m_surveys">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="a_key" type="VARCHAR(32)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="a_name" type="VARCHAR(255)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="description" type="VARCHAR(4000)"/>
+            <column name="country_code" type="VARCHAR(2)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="valid_from" type="datetime"/>
+            <column defaultValueComputed="NULL" name="valid_to" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="181">
+        <createTable tableName="m_tax_component">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="percentage" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="debit_account_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="debit_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="credit_account_type_enum" type="SMALLINT"/>
+            <column defaultValueComputed="NULL" name="credit_account_id" type="BIGINT"/>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="182">
+        <createTable tableName="m_tax_component_history">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="tax_component_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="percentage" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="end_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="183">
+        <createTable tableName="m_tax_group">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="184">
+        <createTable tableName="m_tax_group_mappings">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="tax_group_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="tax_component_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="start_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="end_date" type="date"/>
+            <column name="createdby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodifiedby_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="lastmodified_date" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="185">
+        <createTable tableName="m_tellers">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="debit_account_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="credit_account_id" type="BIGINT"/>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="description" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="valid_from" type="date"/>
+            <column defaultValueComputed="NULL" name="valid_to" type="date"/>
+            <column defaultValueComputed="NULL" name="state" type="SMALLINT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="186">
+        <createTable tableName="m_template">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(255)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="text" type="LONGTEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="entity" type="INT"/>
+            <column defaultValueComputed="NULL" name="type" type="INT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="187">
+        <createTable tableName="m_template_m_templatemappers">
+            <column name="m_template_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="mappers_id" type="BIGINT">
+                <constraints nullable="false" unique="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="188">
+        <createTable tableName="m_templatemappers">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="mapperkey" type="VARCHAR(255)"/>
+            <column defaultValueComputed="NULL" name="mapperorder" type="INT"/>
+            <column name="mappervalue" type="VARCHAR(255)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="189">
+        <createTable tableName="m_trial_balance">
+            <column name="office_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="amount" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entry_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="created_date" type="date"/>
+            <column name="closing_balance" type="DECIMAL(19, 6)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="190">
+        <createTable tableName="m_working_days">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="recurrence" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="repayment_rescheduling_enum" type="SMALLINT"/>
+            <column defaultValueBoolean="false" name="extend_term_daily_repayments" type="boolean"/>
+            <column defaultValueBoolean="false" name="extend_term_holiday_repayment" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="191">
+        <createTable tableName="mix_taxonomy">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="namespace_id" type="INT"/>
+            <column name="dimension" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="type" type="INT"/>
+            <column name="description" type="VARCHAR(1000)"/>
+            <column defaultValueComputed="NULL" name="need_mapping" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="192">
+        <createTable tableName="mix_taxonomy_mapping">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValue="" name="identifier" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="config" type="VARCHAR(200)"/>
+            <column defaultValueComputed="NULL" name="last_update_date" type="datetime"/>
+            <column name="currency" type="VARCHAR(11)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="193">
+        <createTable tableName="mix_xbrl_namespace">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValue="" name="prefix" type="VARCHAR(20)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="url" type="VARCHAR(100)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="194">
+        <createTable tableName="notification_generator">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="object_type" type="TEXT"/>
+            <column defaultValueComputed="NULL" name="object_identifier" type="BIGINT"/>
+            <column name="action" type="TEXT"/>
+            <column defaultValueComputed="NULL" name="actor" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="is_system_generated" type="boolean"/>
+            <column name="notification_content" type="TEXT"/>
+            <column defaultValueComputed="NULL" name="created_at" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="195">
+        <createTable tableName="notification_mapper">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="notification_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="user_id" type="BIGINT"/>
+            <column defaultValueBoolean="false" name="is_read" type="boolean"/>
+            <column defaultValueComputed="NULL" name="created_at" type="datetime"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="196">
+        <createTable tableName="oauth_access_token">
+            <column name="token_id" type="VARCHAR(256)"/>
+            <column defaultValueComputed="NULL" name="token" type="BLOB"/>
+            <column name="authentication_id" type="VARCHAR(256)"/>
+            <column name="user_name" type="VARCHAR(256)"/>
+            <column name="client_id" type="VARCHAR(256)"/>
+            <column defaultValueComputed="NULL" name="authentication" type="BLOB"/>
+            <column name="refresh_token" type="VARCHAR(256)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="197">
+        <createTable tableName="oauth_client_details">
+            <column name="client_id" type="VARCHAR(128)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="resource_ids" type="VARCHAR(256)"/>
+            <column name="client_secret" type="VARCHAR(256)"/>
+            <column name="scope" type="VARCHAR(256)"/>
+            <column name="authorized_grant_types" type="VARCHAR(256)"/>
+            <column name="web_server_redirect_uri" type="VARCHAR(256)"/>
+            <column name="authorities" type="VARCHAR(256)"/>
+            <column defaultValueComputed="NULL" name="access_token_validity" type="INT"/>
+            <column defaultValueComputed="NULL" name="refresh_token_validity" type="INT"/>
+            <column name="additional_information" type="VARCHAR(4096)"/>
+            <column defaultValueBoolean="false" name="autoapprove" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="198">
+        <createTable tableName="oauth_refresh_token">
+            <column name="token_id" type="VARCHAR(256)"/>
+            <column defaultValueComputed="NULL" name="token" type="BLOB"/>
+            <column defaultValueComputed="NULL" name="authentication" type="BLOB"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="199">
+        <createTable tableName="ppi_likelihoods">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="name" type="VARCHAR(250)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="200">
+        <createTable tableName="ppi_likelihoods_ppi">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="likelihood_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="ppi_name" type="VARCHAR(250)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueNumeric="100" name="enabled" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="201">
+        <createTable tableName="ppi_scores">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="score_from" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="score_to" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="202">
+        <createTable tableName="r_enum_value">
+            <column name="enum_name" type="VARCHAR(100)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="enum_id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="enum_message_property" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="enum_value" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="enum_type" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="203">
+        <createTable tableName="ref_loan_transaction_processing_strategy">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code" type="VARCHAR(100)">
+                <constraints unique="true"/>
+            </column>
+            <column name="name" type="VARCHAR(255)"/>
+            <column defaultValueComputed="NULL" name="sort_order" type="INT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="204">
+        <createTable tableName="request_audit_table">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="lastname" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="username" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="mobile_number" type="VARCHAR(50)"/>
+            <column name="firstname" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="authentication_token" type="VARCHAR(100)"/>
+            <column name="password" type="VARCHAR(250)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="client_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="created_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+            <column name="account_number" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="205">
+        <createTable tableName="rpt_sequence">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="206">
+        <createTable tableName="scheduled_email_campaign">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="campaign_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="campaign_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="businessRule_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="param_value" type="TEXT"/>
+            <column name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_subject" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_message" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_attachment_file_format" type="VARCHAR(10)"/>
+            <column defaultValueComputed="NULL" name="stretchy_report_id" type="INT"/>
+            <column name="stretchy_report_param_map" type="TEXT"/>
+            <column defaultValueComputed="NULL" name="closedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="closedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="submittedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="approvedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="approvedon_userid" type="BIGINT"/>
+            <column name="recurrence" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="next_trigger_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="last_trigger_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="recurrence_start_date" type="datetime"/>
+            <column defaultValueBoolean="true" name="is_visible" type="boolean"/>
+            <column name="previous_run_error_log" type="TEXT"/>
+            <column name="previous_run_error_message" type="TEXT"/>
+            <column name="previous_run_status" type="VARCHAR(10)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="207">
+        <createTable tableName="scheduled_email_configuration">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(50)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="value" type="VARCHAR(200)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="208">
+        <createTable tableName="scheduled_email_messages_outbound">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="staff_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="email_campaign_id" type="BIGINT"/>
+            <column defaultValueNumeric="100" name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_address" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="email_subject" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="message" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="campaign_name" type="VARCHAR(200)"/>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column name="error_message" type="TEXT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="209">
+        <createTable tableName="scheduler_detail">
+            <column autoIncrement="true" name="id" type="SMALLINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueBoolean="false" name="is_suspended" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="execute_misfired_jobs" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueBoolean="true" name="reset_scheduler_on_bootup" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="211">
+        <createTable tableName="sms_campaign">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="campaign_name" type="VARCHAR(100)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="campaign_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="campaign_trigger_type" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="report_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="provider_id" type="BIGINT"/>
+            <column name="param_value" type="TEXT"/>
+            <column name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="message" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="submittedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="approvedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="approvedon_userid" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="closedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="closedon_userid" type="BIGINT"/>
+            <column name="recurrence" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="next_trigger_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="last_trigger_date" type="datetime"/>
+            <column defaultValueComputed="NULL" name="recurrence_start_date" type="datetime"/>
+            <column defaultValueBoolean="true" name="is_visible" type="boolean"/>
+            <column defaultValueBoolean="false" name="is_notification" type="boolean"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="212">
+        <createTable tableName="sms_messages_outbound">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="group_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="client_id" type="BIGINT"/>
+            <column defaultValueComputed="NULL" name="staff_id" type="BIGINT"/>
+            <column defaultValueNumeric="100" name="status_enum" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="mobile_no" type="VARCHAR(50)"/>
+            <column name="message" type="VARCHAR(1000)">
+                <constraints nullable="false"/>
+            </column>
+            <column defaultValueComputed="NULL" name="campaign_id" type="BIGINT"/>
+            <column name="external_id" type="VARCHAR(100)"/>
+            <column defaultValueComputed="NULL" name="submittedon_date" type="date"/>
+            <column defaultValueComputed="NULL" name="delivered_on_date" type="datetime"/>
+            <column defaultValueBoolean="false" name="is_notification" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="213">
+        <createTable tableName="stretchy_parameter">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="parameter_name" type="VARCHAR(45)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="parameter_variable" type="VARCHAR(45)"/>
+            <column name="parameter_label" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="parameter_displayType" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="parameter_FormatType" type="VARCHAR(10)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="parameter_default" type="VARCHAR(45)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="special" type="VARCHAR(1)"/>
+            <column name="selectOne" type="VARCHAR(1)"/>
+            <column name="selectAll" type="VARCHAR(1)"/>
+            <column name="parameter_sql" type="TEXT"/>
+            <column defaultValueComputed="NULL" name="parent_id" type="INT"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="214">
+        <createTable tableName="stretchy_report">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="report_name" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="report_type" type="VARCHAR(20)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="report_subtype" type="VARCHAR(20)"/>
+            <column name="report_category" type="VARCHAR(45)"/>
+            <column name="report_sql" type="TEXT"/>
+            <column name="description" type="TEXT"/>
+            <column defaultValueBoolean="false" name="core_report" type="boolean"/>
+            <column defaultValueBoolean="false" name="use_report" type="boolean"/>
+            <column defaultValueBoolean="false" name="self_service_user_report" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="215">
+        <createTable tableName="stretchy_report_parameter">
+            <column autoIncrement="true" name="id" type="INT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="report_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="parameter_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="report_parameter_name" type="VARCHAR(45)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="216">
+        <createTable tableName="topic">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="title" type="VARCHAR(100)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column defaultValueComputed="NULL" name="enabled" type="boolean"/>
+            <column name="entity_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_type" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="member_type" type="TEXT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="217">
+        <createTable tableName="topic_subscriber">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="topic_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="user_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="subscription_date" type="date">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="218">
+        <createTable tableName="twofactor_access_token">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="token" type="VARCHAR(32)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="appuser_id" type="BIGINT">
+                <constraints nullable="false"/>
+            </column>
+            <column name="valid_from" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="valid_to" type="datetime">
+                <constraints nullable="false"/>
+            </column>
+            <column name="enabled" type="boolean">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="219">
+        <createTable tableName="twofactor_configuration">
+            <column autoIncrement="true" name="id" type="BIGINT">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="name" type="VARCHAR(40)">
+                <constraints nullable="false" unique="true"/>
+            </column>
+            <column name="value" type="VARCHAR(1024)"/>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="220">
+        <createTable tableName="x_registered_table">
+            <column name="registered_table_name" type="VARCHAR(50)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="application_table_name" type="VARCHAR(50)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="entity_subtype" type="VARCHAR(50)"/>
+            <column defaultValueNumeric="100" name="category" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="221">
+        <createTable tableName="x_table_column_code_mappings">
+            <column name="column_alias_name" type="VARCHAR(50)">
+                <constraints nullable="false" primaryKey="true"/>
+            </column>
+            <column name="code_id" type="INT">
+                <constraints nullable="false"/>
+            </column>
+        </createTable>
+    </changeSet>
+    <changeSet author="fineract" id="222">
+        <addUniqueConstraint columnNames="acc_rule_id, tag_id, acc_type_enum" constraintName="UNIQUE_ACCOUNT_RULE_TAGS"
+                             tableName="acc_rule_tags"/>
+    </changeSet>
+    <changeSet author="fineract" id="223">
+        <addUniqueConstraint columnNames="client_id, group_id, role_cv_id" constraintName="UNIQUE_GROUP_ROLES"
+                             tableName="m_group_roles"/>
+    </changeSet>
+    <changeSet author="fineract" id="224">
+        <addUniqueConstraint columnNames="appuser_id, client_id" constraintName="appuser_id_client_id"
+                             tableName="m_selfservice_user_client_mapping"/>
+        <addUniqueConstraint columnNames="client_id" constraintName="unique_self_client"
+                             tableName="m_selfservice_user_client_mapping"/>
+    </changeSet>
+    <changeSet author="fineract" id="225">
+        <addUniqueConstraint columnNames="organisation_creditbureau_id, loan_product_id" constraintName="cblpunique_key"
+                             tableName="m_creditbureau_loanproduct_mapping"/>
+    </changeSet>
+    <changeSet author="fineract" id="226">
+        <addUniqueConstraint columnNames="code_id, code_value" constraintName="code_value" tableName="m_code_value"/>
+    </changeSet>
+    <changeSet author="fineract" id="227">
+        <addUniqueConstraint columnNames="deposit_product_id, interest_rate_chart_id"
+                             constraintName="deposit_product_id_interest_rate_chart_id"
+                             tableName="m_deposit_product_interest_rate_chart"/>
+    </changeSet>
+    <changeSet author="fineract" id="228">
+        <addUniqueConstraint columnNames="enum_name, enum_message_property" constraintName="enum_message_property"
+                             tableName="r_enum_value"/>
+    </changeSet>
+    <changeSet author="fineract" id="229">
+        <addUniqueConstraint columnNames="enum_name, enum_value" constraintName="enum_value" tableName="r_enum_value"/>
+    </changeSet>
+    <changeSet author="fineract" id="230">
+        <addUniqueConstraint columnNames="external_id, level_id" constraintName="uk_m_group_external_id" tableName="m_group"/>
+    </changeSet>
+    <changeSet author="fineract" id="231">
+        <addUniqueConstraint columnNames="from_entity_type, to_entity_type, code_name"
+                             constraintName="from_entity_type_to_entity_type_code_name" tableName="m_entity_relation"/>
+    </changeSet>
+    <changeSet author="fineract" id="232">
+        <addUniqueConstraint columnNames="name, from_date" constraintName="holiday_name" tableName="m_holiday"/>
+    </changeSet>
+    <changeSet author="fineract" id="233">
+        <addUniqueConstraint
+                columnNames="entity_type, entity_id, access_type_code_value_id, second_entity_type, second_entity_id"
+                constraintName="id_uniq_m_entity_to_entity_access" tableName="m_entity_to_entity_access"/>
+    </changeSet>
+    <changeSet author="fineract" id="234">
+        <addUniqueConstraint columnNames="configkey, organisation_creditbureau_id" constraintName="mcbconfig"
+                             tableName="m_creditbureau_configuration"/>
+    </changeSet>
+    <changeSet author="fineract" id="235">
+        <addUniqueConstraint columnNames="alias, creditbureau_id" constraintName="morgcb"
+                             tableName="m_organisation_creditbureau"/>
+    </changeSet>
+    <changeSet author="fineract" id="236">
+        <addUniqueConstraint columnNames="display_name, level_id" constraintName="name" tableName="m_group"/>
+    </changeSet>
+    <changeSet author="fineract" id="237">
+        <addUniqueConstraint columnNames="name, app_user_id, is_active" constraintName="uk_m_selfservice_beneficiaries_tpt_name"
+                             tableName="m_selfservice_beneficiaries_tpt"/>
+    </changeSet>
+    <changeSet author="fineract" id="238">
+        <addUniqueConstraint columnNames="office_id, closing_date" constraintName="office_id_closing_date"
+                             tableName="acc_gl_closure"/>
+    </changeSet>
+    <changeSet author="fineract" id="239">
+        <addUniqueConstraint columnNames="rel_id, from_id, to_id" constraintName="rel_id_from_id_to_id"
+                             tableName="m_entity_to_entity_mapping"/>
+    </changeSet>
+    <changeSet author="fineract" id="240">
+        <addUniqueConstraint columnNames="report_id, parameter_id" constraintName="report_parameter_unique"
+                             tableName="stretchy_report_parameter"/>
+    </changeSet>
+    <changeSet author="fineract" id="241">
+        <addUniqueConstraint columnNames="token, appuser_id" constraintName="token_appuser_UNIQUE"
+                             tableName="twofactor_access_token"/>
+    </changeSet>
+    <changeSet author="fineract" id="242">
+        <addUniqueConstraint columnNames="account_id, type" constraintName="uk_interop_identifier_account"
+                             tableName="interop_identifier"/>
+    </changeSet>
+    <changeSet author="fineract" id="243">
+        <addUniqueConstraint columnNames="type, a_value, sub_value_or_type" constraintName="uk_interop_identifier_value"
+                             tableName="interop_identifier"/>
+    </changeSet>
+    <changeSet author="fineract" id="244">
+        <addUniqueConstraint columnNames="name, product, country, implementationKey" constraintName="unique impl"
+                             tableName="m_creditbureau"/>
+    </changeSet>
+    <changeSet author="fineract" id="245">
+        <addUniqueConstraint columnNames="client_id, document_type_id, active"
+                             constraintName="unique_active_client_identifier" tableName="m_client_identifier"/>
+    </changeSet>
+    <changeSet author="fineract" id="246">
+        <addUniqueConstraint columnNames="calendar_instance_id, meeting_date"
+                             constraintName="unique_calendar_instance_id_meeting_date" tableName="m_meeting"/>
+    </changeSet>
+    <changeSet author="fineract" id="247">
+        <addUniqueConstraint columnNames="client_id, meeting_id" constraintName="unique_client_meeting_attendance"
+                             tableName="m_client_attendance"/>
+    </changeSet>
+    <changeSet author="fineract" id="248">
+        <addUniqueConstraint columnNames="application_table_name, x_registered_table_name, status_enum, product_id"
+                             constraintName="unique_entity_check" tableName="m_entity_datatable_check"/>
+    </changeSet>
+    <changeSet author="fineract" id="249">
+        <addUniqueConstraint columnNames="document_type_id, document_key" constraintName="unique_identifier_key"
+                             tableName="m_client_identifier"/>
+    </changeSet>
+    <changeSet author="fineract" id="250">
+        <addUniqueConstraint columnNames="pocket_id, account_id, account_type" constraintName="unique_pocket_mapping"
+                             tableName="m_pocket_accounts_mapping"/>
+    </changeSet>
+    <changeSet author="fineract" id="251">
+        <createIndex indexName="FK1E37728B783C5C25" tableName="m_office_transaction">
+            <column defaultValueComputed="NULL" name="from_office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="252">
+        <createIndex indexName="FK1E37728B93C6C1B6" tableName="m_office_transaction">
+            <column defaultValueComputed="NULL" name="to_office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="253">
+        <createIndex indexName="FK1_m_client_gender_m_code_value" tableName="m_client">
+            <column defaultValueComputed="NULL" name="gender_cv_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="254">
+        <createIndex indexName="FK1_request_audit_table_m_client" tableName="request_audit_table">
+            <column name="client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="255">
+        <createIndex indexName="FK2291C477E2551DCC" tableName="m_office">
+            <column defaultValueComputed="NULL" name="parent_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="256">
+        <createIndex indexName="FK488B92AA40BE0710" tableName="m_loan_repayment_schedule">
+            <column name="loan_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="257">
+        <createIndex indexName="FK7662CE5915CEC7AB" tableName="m_appuser_role">
+            <column name="role_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="258">
+        <createIndex indexName="FK7662CE59B4100309" tableName="m_appuser_role">
+            <column name="appuser_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="259">
+        <createIndex indexName="FK7C885877240145" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="fund_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="260">
+        <createIndex indexName="FK7C9708924D26803" tableName="m_note">
+            <column defaultValueComputed="NULL" name="loan_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="261">
+        <createIndex indexName="FK7C9708940BE0710" tableName="m_note">
+            <column defaultValueComputed="NULL" name="loan_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="262">
+        <createIndex indexName="FK7C97089541F0A56" tableName="m_note">
+            <column defaultValueComputed="NULL" name="createdby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="263">
+        <createIndex indexName="FK7C970897179A0CB" tableName="m_note">
+            <column defaultValueComputed="NULL" name="client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="264">
+        <createIndex indexName="FK7C970898F889C3F" tableName="m_note">
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="265">
+        <createIndex indexName="FK8DEDB048103B544B" tableName="m_role_permission">
+            <column name="permission_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="266">
+        <createIndex indexName="FK8DEDB04815CEC7AB" tableName="m_role_permission">
+            <column name="role_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="267">
+        <createIndex indexName="FKA6A8A7D77240145" tableName="m_product_loan">
+            <column defaultValueComputed="NULL" name="fund_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="268">
+        <createIndex indexName="FKB3D587CE0DD567A" tableName="m_appuser">
+            <column defaultValueComputed="NULL" name="office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="269">
+        <createIndex indexName="FKB6F935D87179A0CB" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="270">
+        <createIndex indexName="FKB6F935D8C8D4B434" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="product_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="271">
+        <createIndex indexName="FKCAMPAIGN00000001" tableName="sms_messages_outbound">
+            <column defaultValueComputed="NULL" name="campaign_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="272">
+        <createIndex indexName="FKCE00CAB3E0DD567A" tableName="m_client">
+            <column name="office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="273">
+        <createIndex indexName="FKCFCEA42640BE0710" tableName="m_loan_transaction">
+            <column name="loan_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="274">
+        <createIndex indexName="FKCFCEA42640BE071Z" tableName="m_code_value">
+            <column name="code_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="275">
+        <createIndex indexName="FKCLIENT00000001" tableName="sms_messages_outbound">
+            <column defaultValueComputed="NULL" name="client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="276">
+        <createIndex indexName="FKDARD00000000000001" tableName="m_deposit_account_recurring_detail">
+            <column defaultValueNumeric="0" name="savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="277">
+        <createIndex indexName="FKDATP00000000000001" tableName="m_deposit_account_term_and_preclosure">
+            <column defaultValueNumeric="0" name="savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="278">
+        <createIndex indexName="FKDPIRC00000000000002" tableName="m_deposit_product_interest_rate_chart">
+            <column name="interest_rate_chart_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="279">
+        <createIndex indexName="FKDPRD00000000000001" tableName="m_deposit_product_recurring_detail">
+            <column defaultValueNumeric="0" name="savings_product_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="280">
+        <createIndex indexName="FKDPTP00000000000001" tableName="m_deposit_product_term_and_preclosure">
+            <column defaultValueNumeric="0" name="savings_product_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="281">
+        <createIndex indexName="FKGLACC000000002" tableName="acc_gl_account">
+            <column defaultValueComputed="NULL" name="tag_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="282">
+        <createIndex indexName="FKGROUP000000001" tableName="sms_messages_outbound">
+            <column defaultValueComputed="NULL" name="group_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="283">
+        <createIndex indexName="FKGroupRoleClientId" tableName="m_group_roles">
+            <column defaultValueComputed="NULL" name="client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="284">
+        <createIndex indexName="FKGroupRoleGroupId" tableName="m_group_roles">
+            <column defaultValueComputed="NULL" name="group_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="285">
+        <createIndex indexName="FKIRS00000000000001" tableName="m_interest_rate_slab">
+            <column name="interest_rate_chart_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="286">
+        <createIndex indexName="FKMSS0000000001" tableName="m_mandatory_savings_schedule">
+            <column name="savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="287">
+        <createIndex indexName="FKSA00000000000001" tableName="m_savings_account">
+            <column defaultValueComputed="NULL" name="client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="288">
+        <createIndex indexName="FKSA00000000000002" tableName="m_savings_account">
+            <column defaultValueComputed="NULL" name="group_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="289">
+        <createIndex indexName="FKSA00000000000003" tableName="m_savings_account">
+            <column defaultValueComputed="NULL" name="product_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="290">
+        <createIndex indexName="FKSAIRC00000000000001" tableName="m_savings_account_interest_rate_chart">
+            <column name="savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="291">
+        <createIndex indexName="FKSAIRS00000000000001" tableName="m_savings_account_interest_rate_slab">
+            <column name="savings_account_interest_rate_chart_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="292">
+        <createIndex indexName="FKSAT0000000001" tableName="m_savings_account_transaction">
+            <column name="savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="293">
+        <createIndex indexName="FKSTAFF000000001" tableName="sms_messages_outbound">
+            <column defaultValueComputed="NULL" name="staff_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="294">
+        <createIndex indexName="FK_ACC_0000000001" tableName="acc_gl_account">
+            <column defaultValueComputed="NULL" name="parent_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="295">
+        <createIndex indexName="FK_M_LOAN_RATE_RATE" tableName="m_loan_rate">
+            <column name="rate_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="296">
+        <createIndex indexName="FK_M_PRODUCT_LOAN_RATE_RATE" tableName="m_product_loan_rate">
+            <column name="rate_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="297">
+        <createIndex indexName="FK_M_RATE_APPROVE_USER" tableName="m_rate">
+            <column defaultValueComputed="NULL" name="approve_user"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="298">
+        <createIndex indexName="FK_M_RATE_CREATE_USER" tableName="m_rate">
+            <column name="createdby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="299">
+        <createIndex indexName="FK__m_loan_charge" tableName="m_loan_charge_paid_by">
+            <column name="loan_charge_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="300">
+        <createIndex indexName="FK__m_loan_reschedule_request"
+                     tableName="m_loan_reschedule_request_term_variations_mapping">
+            <column name="loan_reschedule_request_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="301">
+        <createIndex indexName="FK__m_loan_term_variations"
+                     tableName="m_loan_reschedule_request_term_variations_mapping">
+            <column name="loan_term_variations_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="302">
+        <createIndex indexName="FK__m_loan_transaction" tableName="m_loan_charge_paid_by">
+            <column name="loan_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="303">
+        <createIndex indexName="FK__m_savings_account_charge" tableName="m_savings_account_charge_paid_by">
+            <column name="savings_account_charge_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="304">
+        <createIndex indexName="FK__m_savings_account_transaction" tableName="m_savings_account_charge_paid_by">
+            <column name="savings_account_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="305">
+        <createIndex indexName="FK_acc_accounting_rule_acc_gl_account_credit" tableName="acc_accounting_rule">
+            <column defaultValueComputed="NULL" name="credit_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="306">
+        <createIndex indexName="FK_acc_accounting_rule_acc_gl_account_debit" tableName="acc_accounting_rule">
+            <column defaultValueComputed="NULL" name="debit_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="307">
+        <createIndex indexName="FK_acc_accounting_rule_id" tableName="acc_rule_tags">
+            <column name="acc_rule_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="308">
+        <createIndex indexName="FK_acc_accounting_rule_m_office" tableName="acc_accounting_rule">
+            <column defaultValueComputed="NULL" name="office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="309">
+        <createIndex indexName="FK_acc_gl_closure_m_appuser" tableName="acc_gl_closure">
+            <column defaultValueComputed="NULL" name="createdby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="310">
+        <createIndex indexName="FK_acc_gl_closure_m_appuser_2" tableName="acc_gl_closure">
+            <column defaultValueComputed="NULL" name="lastmodifiedby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="311">
+        <createIndex indexName="FK_acc_gl_closure_m_office" tableName="acc_gl_closure">
+            <column name="office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="312">
+        <createIndex indexName="FK_acc_gl_journal_entry_acc_gl_account" tableName="acc_gl_journal_entry">
+            <column name="account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="313">
+        <createIndex indexName="FK_acc_gl_journal_entry_acc_gl_journal_entry" tableName="acc_gl_journal_entry">
+            <column defaultValueComputed="NULL" name="reversal_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="314">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_appuser" tableName="acc_gl_journal_entry">
+            <column name="createdby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="315">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_appuser_2" tableName="acc_gl_journal_entry">
+            <column name="lastmodifiedby_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="316">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_client_transaction" tableName="acc_gl_journal_entry">
+            <column defaultValueComputed="NULL" name="client_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="317">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_loan_transaction" tableName="acc_gl_journal_entry">
+            <column defaultValueComputed="NULL" name="loan_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="318">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_office" tableName="acc_gl_journal_entry">
+            <column name="office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="319">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_payment_detail" tableName="acc_gl_journal_entry">
+            <column defaultValueComputed="NULL" name="payment_details_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="320">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_savings_account_transaction" tableName="acc_gl_journal_entry">
+            <column defaultValueComputed="NULL" name="savings_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="321">
+        <createIndex indexName="FK_acc_gl_journal_entry_m_share_account_transaction" tableName="acc_gl_journal_entry">
+            <column defaultValueComputed="NULL" name="share_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="322">
+        <createIndex indexName="FK_acc_product_mapping_m_charge" tableName="acc_product_mapping">
+            <column defaultValueComputed="NULL" name="charge_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="323">
+        <createIndex indexName="FK_acc_product_mapping_m_payment_type" tableName="acc_product_mapping">
+            <column defaultValueComputed="NULL" name="payment_type"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="324">
+        <createIndex indexName="FK_access_type_code_m_code_value" tableName="m_entity_to_entity_access">
+            <column name="access_type_code_value_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="325">
+        <createIndex indexName="FK_additional_details_repayment_schedule_id"
+                     tableName="m_loan_interest_recalculation_additional_details">
+            <column name="loan_repayment_schedule_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="326">
+        <createIndex indexName="FK_approvedon_userid" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="approvedon_userid"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="327">
+        <createIndex indexName="FK_c_external_service_properties_c_external_service"
+                     tableName="c_external_service_properties">
+            <column name="external_service_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="328">
+        <createIndex indexName="FK_closedon_userid" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="closedon_userid"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="329">
+        <createIndex indexName="FK_collateral_code_value" tableName="m_loan_collateral">
+            <column name="type_cv_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="330">
+        <createIndex indexName="FK_collateral_m_loan" tableName="m_loan_collateral">
+            <column name="loan_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="331">
+        <createIndex indexName="FK_deposit_on_hold_transaction_m_savings_account"
+                     tableName="m_deposit_account_on_hold_transaction">
+            <column name="savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="332">
+        <createIndex indexName="FK_disbursedon_userid" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="disbursedon_userid"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="333">
+        <createIndex indexName="FK_glim_id" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="glim_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="334">
+        <createIndex indexName="FK_group_id" tableName="glim_accounts">
+            <column defaultValueNumeric="0" name="group_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="335">
+        <createIndex indexName="FK_grouprole_m_codevalue" tableName="m_group_roles">
+            <column defaultValueComputed="NULL" name="role_cv_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="336">
+        <createIndex indexName="FK_gsim_group_id" tableName="gsim_accounts">
+            <column defaultValueNumeric="0" name="group_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="337">
+        <createIndex indexName="FK_gsim_id" tableName="m_savings_account">
+            <column defaultValueComputed="NULL" name="gsim_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="338">
+        <createIndex indexName="FK_guarantee_details_loan_product" tableName="m_product_loan_guarantee_details">
+            <column name="loan_product_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="339">
+        <createIndex indexName="FK_guarantor_transaction_guarantor_fund_detail" tableName="m_guarantor_transaction">
+            <column name="guarantor_fund_detail_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="340">
+        <createIndex indexName="FK_guarantor_transaction_m_deposit_account_on_hold_transaction"
+                     tableName="m_guarantor_transaction">
+            <column name="deposit_on_hold_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="341">
+        <createIndex indexName="FK_guarantor_transaction_m_loan_transaction" tableName="m_guarantor_transaction">
+            <column defaultValueComputed="NULL" name="loan_transaction_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="342">
+        <createIndex indexName="FK_job_id" tableName="job_parameters">
+            <column name="job_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="343">
+        <createIndex indexName="FK_loan_charge_id_charge_schedule" tableName="m_loan_installment_charge">
+            <column name="loan_charge_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="344">
+        <createIndex indexName="FK_loan_disbursement_detail_loan_id" tableName="m_loan_disbursement_detail">
+            <column name="loan_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="345">
+        <createIndex indexName="FK_loan_id_m_loan_id" tableName="m_loan_term_variations">
+            <column name="loan_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="346">
+        <createIndex indexName="FK_loan_ltp_strategy" tableName="m_loan">
+            <column defaultValueComputed="NULL" name="loan_transaction_strategy_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="347">
+        <createIndex indexName="FK_loan_schedule_id_charge_schedule" tableName="m_loan_installment_charge">
+            <column name="loan_schedule_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="348">
+        <createIndex indexName="FK_ltp_strategy" tableName="m_product_loan">
+            <column defaultValueComputed="NULL" name="loan_transaction_strategy_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="349">
+        <createIndex indexName="FK_m_account_transfer_details_from_client" tableName="m_account_transfer_details">
+            <column defaultValueComputed="NULL" name="from_client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="350">
+        <createIndex indexName="FK_m_account_transfer_details_from_loan_account" tableName="m_account_transfer_details">
+            <column defaultValueComputed="NULL" name="from_loan_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="351">
+        <createIndex indexName="FK_m_account_transfer_details_from_office" tableName="m_account_transfer_details">
+            <column name="from_office_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="352">
+        <createIndex indexName="FK_m_account_transfer_details_from_savings_account"
+                     tableName="m_account_transfer_details">
+            <column defaultValueComputed="NULL" name="from_savings_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="353">
+        <createIndex indexName="FK_m_account_transfer_details_to_client" tableName="m_account_transfer_details">
+            <column defaultValueComputed="NULL" name="to_client_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="354">
+        <createIndex indexName="FK_m_account_transfer_details_to_loan_account" tableName="m_account_transfer_details">
+            <column defaultValueComputed="NULL" name="to_loan_account_id"/>
+        </createIndex>
+    </changeSet>
+    <changeSet author="fineract" id="355">
+        <createIndex indexName="FK_m_account_transfer_details_to_office" tableName="m_account_transfer_details">
+            <column name="to_office_id"/>
+        </createIndex>
+    </changeSet>
... 20685 lines suppressed ...