FINERACT-1946: Change the loan transaction ordering

This commit is contained in:
Adam Saghy
2023-07-25 14:46:08 +02:00
parent b66a0a012f
commit d11ca18cb2
23 changed files with 6796 additions and 6395 deletions
@@ -175,7 +175,8 @@ public class JournalEntryRunningBalanceUpdateServiceImpl implements JournalEntry
BigDecimal runningBalance = calculateRunningBalance(entryData, runningBalanceMap);
params.add(new Object[] { Boolean.TRUE, runningBalance, officeRunningBalance,
platformSecurityContext.authenticatedUser().getId(), DateUtils.getOffsetDateTimeOfTenant(), entryData.getId() });
platformSecurityContext.authenticatedUser().getId(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(),
entryData.getId() });
batchIndex++;
if (batchIndex == batchUpdateSize || index == entryDataList.size() - 1) {
this.jdbcTemplate.batchUpdate(sql, params);
@@ -212,7 +213,7 @@ public class JournalEntryRunningBalanceUpdateServiceImpl implements JournalEntry
for (JournalEntryData entryData : entryDataList) {
BigDecimal runningBalance = calculateRunningBalance(entryData, runningBalanceMap);
params.add(new Object[] { runningBalance, platformSecurityContext.authenticatedUser().getId(),
DateUtils.getOffsetDateTimeOfTenant(), entryData.getId() });
DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(), entryData.getId() });
}
this.jdbcTemplate.batchUpdate(sql, params);
}
@@ -64,7 +64,7 @@ public class LoanAccountLock {
public LoanAccountLock(Long loanId, LockOwner lockOwner, LocalDate lockPlacedOnCobBusinessDate) {
this.loanId = loanId;
this.lockOwner = lockOwner;
this.lockPlacedOn = DateUtils.getOffsetDateTimeOfTenant();
this.lockPlacedOn = DateUtils.getOffsetDateTimeOfTenantWithMostPrecision();
this.lockPlacedOnCobBusinessDate = lockPlacedOnCobBusinessDate;
}
@@ -75,6 +75,6 @@ public class LoanAccountLock {
public void setNewLockOwner(LockOwner newLockOwner) {
this.lockOwner = newLockOwner;
this.lockPlacedOn = DateUtils.getOffsetDateTimeOfTenant();
this.lockPlacedOn = DateUtils.getOffsetDateTimeOfTenantWithMostPrecision();
}
}
@@ -67,7 +67,7 @@ public class LoanLockingServiceImpl implements LoanLockingService {
UPDATE m_loan_account_locks SET version= version + 1, lock_owner = ?, lock_placed_on = ? WHERE loan_id = ?
""", accountsToLock, getInClauseParameterSizeLimit(), (ps, id) -> {
ps.setString(1, lockOwner.name());
ps.setObject(2, DateUtils.getOffsetDateTimeOfTenant());
ps.setObject(2, DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
ps.setLong(3, id);
});
}
@@ -97,7 +97,7 @@ public class LoanLockingServiceImpl implements LoanLockingService {
ps.setLong(1, loanId);
ps.setLong(2, 1);
ps.setString(3, lockOwner.name());
ps.setObject(4, DateUtils.getOffsetDateTimeOfTenant());
ps.setObject(4, DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
ps.setObject(5, cobBusinessDate);
});
}
@@ -63,7 +63,7 @@ public class UpdateNpaTasklet implements Tasklet {
resetNPASqlBuilder.append("set is_npa = false").append(", last_modified_by = ?, last_modified_on_utc = ? ").append(" FROM ")
.append(fromPart).append(wherePart);
}
jdbcTemplate.update(resetNPASqlBuilder.toString(), user.getId(), DateUtils.getOffsetDateTimeOfTenant());
jdbcTemplate.update(resetNPASqlBuilder.toString(), user.getId(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
final StringBuilder updateSqlBuilder = new StringBuilder(900);
@@ -82,7 +82,8 @@ public class UpdateNpaTasklet implements Tasklet {
.append(fromPart).append(wherePart);
}
final int result = jdbcTemplate.update(updateSqlBuilder.toString(), user.getId(), DateUtils.getOffsetDateTimeOfTenant());
final int result = jdbcTemplate.update(updateSqlBuilder.toString(), user.getId(),
DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
log.debug("{}: Records affected by updateNPA: {}", ThreadLocalContextUtil.getTenant().getName(), result);
return RepeatStatus.FINISHED;
@@ -73,7 +73,7 @@ public class LoanScheduleHistoryWritePlatformServiceImpl implements LoanSchedule
final BigDecimal penaltyCharges = repaymentScheduleInstallment.getPenaltyChargesCharged(currency).getAmount();
Map<String, Object> oldDates = null;
OffsetDateTime createdOnDate = DateUtils.getOffsetDateTimeOfTenant();
OffsetDateTime createdOnDate = DateUtils.getOffsetDateTimeOfTenantWithMostPrecision();
LocalDateTime oldCreatedOnDate = null;
LocalDateTime oldLastModifiedOnDate = null;
if (repaymentScheduleInstallment.getCreatedDate().isPresent()) {
@@ -89,7 +89,7 @@ public class LoanScheduleHistoryWritePlatformServiceImpl implements LoanSchedule
final Long lastModifiedByUser = repaymentScheduleInstallment.getLastModifiedBy()
.orElse(platformSecurityContext.authenticatedUser().getId());
OffsetDateTime lastModifiedOnDate = DateUtils.getOffsetDateTimeOfTenant();
OffsetDateTime lastModifiedOnDate = DateUtils.getOffsetDateTimeOfTenantWithMostPrecision();
if (repaymentScheduleInstallment.getLastModifiedDate().isPresent()) {
lastModifiedOnDate = repaymentScheduleInstallment.getLastModifiedDate().get();
} else if (repaymentScheduleInstallment.getId() != null && oldDates == null) {
@@ -318,7 +318,7 @@ public final class LoanApplicationCommandFromApiJsonHelper {
baseDataValidator.reset().parameter(LoanApiConstants.amortizationTypeParameterName).value(amortizationType).notNull()
.inMinMaxRange(0, 1);
if (!amortizationType.equals(AmortizationMethod.EQUAL_PRINCIPAL.getValue()) && fixedPrincipalPercentagePerInstallment != null) {
if (!AmortizationMethod.EQUAL_PRINCIPAL.getValue().equals(amortizationType) && fixedPrincipalPercentagePerInstallment != null) {
baseDataValidator.reset().parameter(LoanApiConstants.fixedPrincipalPercentagePerInstallmentParamName).failWithCode(
"not.supported.principal.fixing.not.allowed.with.equal.installments",
"Principal fixing cannot be done with equal installment amortization");
@@ -271,7 +271,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat
this.jdbcTemplate.update(transactionSql, scheduleAccrualData.getLoanId(), scheduleAccrualData.getOfficeId(),
externalIdFactory.create().getValue(), LoanTransactionType.ACCRUAL.getValue(), accruedTill, amount, interestPortion,
feePortion, penaltyPortion, DateUtils.getBusinessLocalDate(), user.getId(), user.getId(),
DateUtils.getOffsetDateTimeOfTenant(), DateUtils.getOffsetDateTimeOfTenant());
DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
final Long transactionId = this.jdbcTemplate.queryForObject("SELECT " + sqlGenerator.lastInsertId(), Long.class); // NOSONAR
Map<LoanChargeData, BigDecimal> applicableCharges = scheduleAccrualData.getApplicableCharges();
@@ -291,7 +291,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat
scheduleAccrualData.getRepaymentScheduleId());
String updateLoan = "UPDATE m_loan SET accrued_till=?, last_modified_by=?, last_modified_on_utc=? WHERE id=?";
this.jdbcTemplate.update(updateLoan, accruedTill, user.getId(), DateUtils.getOffsetDateTimeOfTenant(),
this.jdbcTemplate.update(updateLoan, accruedTill, user.getId(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(),
scheduleAccrualData.getLoanId());
Optional<LoanTransaction> loanAccrualTransaction = loanTransactionRepository.findByIdAndLoanId(transactionId,
@@ -280,7 +280,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
* TODO Vishwas: Remove references to "Contra" from the codebase
***/
final String sql = "select " + rm.loanPaymentsSchema() + " where tr.loan_id = ? and tr.transaction_type_enum not in (0, 3) "
+ " and (tr.is_reversed=false or tr.manually_adjusted_or_reversed = true) order by tr.transaction_date ASC,id ";
+ " and (tr.is_reversed=false or tr.manually_adjusted_or_reversed = true) order by tr.transaction_date, tr.created_on_utc, tr.id ";
Collection<LoanTransactionData> loanTransactionData = this.jdbcTemplate.query(sql, rm, loanId); // NOSONAR
// TODO: would worth to rework in the future. It is not nice to fetch relations one by one... might worth to
// give a try to get rid of native queries
@@ -2140,7 +2140,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
final LoanTransactionDerivedComponentMapper rm = new LoanTransactionDerivedComponentMapper(sqlGenerator);
final String sql = "select " + rm.schema()
+ " where tr.loan_id = ? and tr.transaction_type_enum = ? and tr.is_reversed=false order by tr.transaction_date ASC,id ";
+ " where tr.loan_id = ? and tr.transaction_type_enum = ? and tr.is_reversed=false order by tr.transaction_date, tr.created_on_utc, tr.id ";
return this.jdbcTemplate.query(sql, rm, loanId, LoanTransactionType.WAIVE_INTEREST.getValue()); // NOSONAR
} catch (final EmptyResultDataAccessException e) {
return null;
@@ -493,8 +493,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
AppUser user = context.authenticatedUser();
jdbcTemplate.update(transactionSql, loanId, loan.getOfficeId(), externalIdFactory.create().getValue(),
LoanTransactionType.ACCRUAL.getValue(), actualDisbursementDate, loanCharge.amount(), loanCharge.amount(),
DateUtils.getBusinessLocalDate(), user.getId(), user.getId(), DateUtils.getOffsetDateTimeOfTenant(),
DateUtils.getOffsetDateTimeOfTenant());
DateUtils.getBusinessLocalDate(), user.getId(), user.getId(),
DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision());
}
}
@@ -120,8 +120,8 @@ public class SavingsSchedularInterestPoster {
savingsAccountTransactionData.getId(), null, false, null, false,
savingsAccountTransactionData.getTransactionDate(), JournalEntryType.CREDIT.getValue().longValue(),
savingsAccountTransactionData.getAmount(), null, JournalEntryType.CREDIT.getValue().longValue(),
savingsAccountData.getId(), DateUtils.getOffsetDateTimeOfTenant(),
DateUtils.getOffsetDateTimeOfTenant(), false, BigDecimal.ZERO, BigDecimal.ZERO, null,
savingsAccountData.getId(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(),
DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(), false, BigDecimal.ZERO, BigDecimal.ZERO, null,
savingsAccountTransactionData.getTransactionDate(), null, userId, userId,
DateUtils.getBusinessLocalDate() });
@@ -131,8 +131,8 @@ public class SavingsSchedularInterestPoster {
savingsAccountTransactionData.getId(), null, false, null, false,
savingsAccountTransactionData.getTransactionDate(), JournalEntryType.DEBIT.getValue().longValue(),
savingsAccountTransactionData.getAmount(), null, JournalEntryType.DEBIT.getValue().longValue(),
savingsAccountData.getId(), DateUtils.getOffsetDateTimeOfTenant(),
DateUtils.getOffsetDateTimeOfTenant(), false, BigDecimal.ZERO, BigDecimal.ZERO, null,
savingsAccountData.getId(), DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(),
DateUtils.getOffsetDateTimeOfTenantWithMostPrecision(), false, BigDecimal.ZERO, BigDecimal.ZERO, null,
savingsAccountTransactionData.getTransactionDate(), null, userId, userId,
DateUtils.getBusinessLocalDate() });
}
@@ -30,4 +30,5 @@
<include file="parts/0007_x_extend_tenant_ro_passwords.xml" relativeToChangelogFile="true"/>
<include file="parts/0008_encrypt_existing_ro_tenant_passwords.xml" relativeToChangelogFile="true"/>
<include file="parts/0009_set_and_encrypt_ro_if_not_exists.xml" relativeToChangelogFile="true"/>
<include file="parts/0010_set_datetime_precision.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
@@ -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">
<changeSet author="fineract" id="1" context="tenant_store_db">
<modifyDataType tableName="tenants" columnName="created_date" newDataType="datetime(6)"/>
<modifyDataType tableName="tenants" columnName="lastmodified_date" newDataType="datetime(6)"/>
</changeSet>
</databaseChangeLog>
@@ -136,4 +136,5 @@
<include file="parts/0114_create_cob_indices.xml" relativeToChangelogFile="true" />
<include file="parts/0115_create_index_from_loan_transaction_id.xml" relativeToChangelogFile="true" />
<include file="parts/0116_add_configuration_asset_externalization_of_non_active_loans.xml" relativeToChangelogFile="true" />
<include file="parts/0117_set_datetime_precision.xml" relativeToChangelogFile="true" />
</databaseChangeLog>
@@ -0,0 +1,152 @@
<?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.3.xsd">
<changeSet author="fineract" id="1" context="mysql">
<modifyDataType tableName="acc_gl_closure" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="acc_gl_closure" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="acc_gl_journal_entry" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="acc_gl_journal_entry" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="acc_gl_journal_entry" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="acc_gl_journal_entry" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="client_device_registration" columnName="updatedon_date" newDataType="datetime(6)" />
<modifyDataType tableName="interop_identifier" columnName="created_on" newDataType="timestamp(6)" />
<modifyDataType tableName="interop_identifier" columnName="modified_on" newDataType="timestamp(6)" />
<modifyDataType tableName="job" columnName="create_time" newDataType="datetime(6)" />
<modifyDataType tableName="job" columnName="previous_run_start_time" newDataType="datetime(6)" />
<modifyDataType tableName="job" columnName="next_run_time" newDataType="datetime(6)" />
<modifyDataType tableName="job_run_history" columnName="start_time" newDataType="datetime(6)" />
<modifyDataType tableName="job_run_history" columnName="end_time" newDataType="datetime(6)" />
<modifyDataType tableName="m_account_transfer_standing_instructions_history" columnName="execution_time" newDataType="datetime(6)" />
<modifyDataType tableName="m_adhoc" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_adhoc" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_adhoc" columnName="last_run" newDataType="timestamp(6)" />
<modifyDataType tableName="m_business_date" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_business_date" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_business_date" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_business_date" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_calendar" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_calendar" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_calendar" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_calendar" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_cashier_transactions" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_client" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_client" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_identifier" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_identifier" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_identifier" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_identifier" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_transaction" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_transaction" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_client_transaction" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_delinquency_bucket" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_delinquency_bucket" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_delinquency_bucket_mappings" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_delinquency_bucket_mappings" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_delinquency_range" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_delinquency_range" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_deposit_account_on_hold_transaction" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates_periods" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates_periods" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates_periods" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_floating_rates_periods" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_hook" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_hook" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_import_document" columnName="import_time" newDataType="datetime(6)" />
<modifyDataType tableName="m_import_document" columnName="end_time" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_account_locks" columnName="lock_placed_on" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_delinquency_tag_history" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_delinquency_tag_history" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_officer_assignment_history" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_officer_assignment_history" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule_history" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule_history" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule_history" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_repayment_schedule_history" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_transaction" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_transaction" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_transaction" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_transaction_relation" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_loan_transaction_relation" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_mandatory_savings_schedule" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_mandatory_savings_schedule" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_note" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_note" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_note" columnName="created_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_note" columnName="last_modified_on_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_portfolio_command_source" columnName="made_on_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_portfolio_command_source" columnName="checked_on_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_portfolio_command_source" columnName="made_on_date_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_portfolio_command_source" columnName="checked_on_date_utc" newDataType="datetime(6)" />
<modifyDataType tableName="m_provisioning_criteria" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_provisioning_criteria" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_rate" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_rate" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_report_mailing_job" columnName="start_datetime" newDataType="datetime(6)" />
<modifyDataType tableName="m_report_mailing_job" columnName="previous_run_datetime" newDataType="datetime(6)" />
<modifyDataType tableName="m_report_mailing_job" columnName="next_run_datetime" newDataType="datetime(6)" />
<modifyDataType tableName="m_report_mailing_job_run_history" columnName="start_datetime" newDataType="datetime(6)" />
<modifyDataType tableName="m_report_mailing_job_run_history" columnName="end_datetime" newDataType="datetime(6)" />
<modifyDataType tableName="m_savings_officer_assignment_history" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_savings_officer_assignment_history" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_share_account" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_share_account" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_share_product" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_share_product" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_share_product_dividend_pay_out" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_share_product_dividend_pay_out" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_staff_assignment_history" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_staff_assignment_history" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_survey_scorecards" columnName="created_on" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_component" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_component" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_component_history" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_component_history" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_group" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_group" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_group_mappings" columnName="created_date" newDataType="datetime(6)" />
<modifyDataType tableName="m_tax_group_mappings" columnName="lastmodified_date" newDataType="datetime(6)" />
<modifyDataType tableName="mix_taxonomy_mapping" columnName="last_update_date" newDataType="datetime(6)" />
<modifyDataType tableName="notification_generator" columnName="created_at" newDataType="datetime(6)" />
<modifyDataType tableName="notification_mapper" columnName="created_at" newDataType="datetime(6)" />
<modifyDataType tableName="scheduled_email_campaign" columnName="next_trigger_date" newDataType="datetime(6)" />
<modifyDataType tableName="scheduled_email_campaign" columnName="last_trigger_date" newDataType="datetime(6)" />
<modifyDataType tableName="scheduled_email_campaign" columnName="recurrence_start_date" newDataType="datetime(6)" />
<modifyDataType tableName="sms_campaign" columnName="next_trigger_date" newDataType="datetime(6)" />
<modifyDataType tableName="sms_campaign" columnName="last_trigger_date" newDataType="datetime(6)" />
<modifyDataType tableName="sms_campaign" columnName="recurrence_start_date" newDataType="datetime(6)" />
<modifyDataType tableName="sms_messages_outbound" columnName="delivered_on_date" newDataType="datetime(6)" />
<modifyDataType tableName="twofactor_access_token" columnName="valid_from" newDataType="datetime(6)" />
<modifyDataType tableName="twofactor_access_token" columnName="valid_to" newDataType="datetime(6)" />
</changeSet>
</databaseChangeLog>