修复第二期流水规则元数据
This commit is contained in:
@@ -21,6 +21,15 @@ class CcdiBankTagRuleSqlMetadataTest {
|
||||
assertPhase1Metadata(migrationSql);
|
||||
}
|
||||
|
||||
@Test
|
||||
void phase2MetadataSql_shouldAlignInitAndMigrationScripts() throws IOException {
|
||||
String initSql = readProjectFile("sql", "2026-03-16-bank-tagging.sql");
|
||||
String migrationSql = readProjectFile("sql", "migration", "2026-03-20-sync-bank-tag-phase2-rule-metadata.sql");
|
||||
|
||||
assertPhase2Metadata(initSql);
|
||||
assertPhase2Metadata(migrationSql);
|
||||
}
|
||||
|
||||
private void assertPhase1Metadata(String sqlContent) {
|
||||
assertAll(
|
||||
() -> assertTrue(sqlContent.contains("'FOREX_BUY_AMT'")
|
||||
@@ -41,6 +50,37 @@ class CcdiBankTagRuleSqlMetadataTest {
|
||||
);
|
||||
}
|
||||
|
||||
private void assertPhase2Metadata(String sqlContent) {
|
||||
assertAll(
|
||||
() -> assertTrue(sqlContent.contains("真实规则:识别低收入关系人累计交易超10万元的员工对象"),
|
||||
"应同步 LOW_INCOME_RELATIVE_LARGE_TRANSACTION 的真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("真实规则:识别同日多对手方且金额落在可疑区间的疑似赌博对象"),
|
||||
"应同步 MULTI_PARTY_GAMBLING_TRANSFER 的真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("'MONTHLY_FIXED_INCOME'")
|
||||
&& sqlContent.contains("真实规则:识别近12个月持续出现稳定月度非工资收入的员工对象"),
|
||||
"应同步 MONTHLY_FIXED_INCOME 的指标编码和真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("'FIXED_COUNTERPARTY_TRANSFER', '疑似兼职', NULL, 'OBJECT'")
|
||||
&& sqlContent.contains("真实规则:识别固定交易对手季度转入金额落在设定区间的员工对象"),
|
||||
"FIXED_COUNTERPARTY_TRANSFER 应清空旧 indicator_code 并同步真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("真实规则:识别购房支出但当前房产登记口径缺失的流水"),
|
||||
"应同步 HOUSE_REGISTRATION_MISMATCH 的真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("真实规则:识别物业缴费但当前房产登记口径缺失的流水"),
|
||||
"应同步 PROPERTY_FEE_REGISTRATION_MISMATCH 的真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("员工及关系人有5000元以上的纳税记录,但当前资产登记口径下无房产登记。"),
|
||||
"TAX_ASSET_REGISTRATION_MISMATCH 应使用当前资产登记口径表述"),
|
||||
() -> assertTrue(sqlContent.contains("真实规则:识别大额纳税但当前房产登记口径缺失的流水"),
|
||||
"应同步 TAX_ASSET_REGISTRATION_MISMATCH 的真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("真实规则:识别单个供应商采购额占比超过70%的员工对象"),
|
||||
"应同步 SUPPLIER_CONCENTRATION 的真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("工资发放后24小时内转出超过80%的资金。")
|
||||
&& sqlContent.contains("真实规则:识别工资入账24小时内快速转出的员工对象"),
|
||||
"应同步 SALARY_QUICK_TRANSFER 的业务口径和真实规则说明"),
|
||||
() -> assertTrue(sqlContent.contains("工资发放后除代扣项目外,连续30天无消费或转账支出记录。")
|
||||
&& sqlContent.contains("真实规则:识别工资入账后30天内无消费或转账支出的员工对象"),
|
||||
"应同步 SALARY_UNUSED 的业务口径修复和真实规则说明")
|
||||
);
|
||||
}
|
||||
|
||||
private String readProjectFile(String... parts) throws IOException {
|
||||
Path path = Path.of("..", parts);
|
||||
return Files.readString(path, StandardCharsets.UTF_8);
|
||||
|
||||
Reference in New Issue
Block a user