diff --git a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml
index ff9735d2..aa7c571f 100644
--- a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml
+++ b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml
@@ -531,10 +531,6 @@
from ccdi_bank_statement_tag_result tr
where tr.project_id = #{query.projectId}
and tr.bank_statement_id is not null
- and (
- tr.rule_name like '%可疑%'
- or tr.rule_code = 'ABNORMAL_CUSTOMER_TRANSACTION'
- )
@@ -717,7 +713,7 @@
-
+
diff --git a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java
index 73e1e29c..2128654f 100644
--- a/ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java
+++ b/ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewMapperSqlTest.java
@@ -90,11 +90,17 @@ class CcdiProjectOverviewMapperSqlTest {
void shouldExposeSuspiciousTransactionAggregationQuery() throws Exception {
String xml = Files.readString(Path.of("src/main/resources/mapper/ccdi/project/CcdiProjectOverviewMapper.xml"));
String suspiciousSql = extractSelect(xml, "selectSuspiciousTransactionPage");
+ String modelHitSql = extractSqlFragment(xml, "suspiciousTransactionModelHitSql");
+ String aggregatedSql = extractSqlFragment(xml, "suspiciousTransactionAggregatedSql");
- assertTrue(suspiciousSql.contains("rule_name like '%可疑%'"), suspiciousSql);
+ assertTrue(modelHitSql.contains("from ccdi_bank_statement_tag_result tr"), modelHitSql);
+ assertTrue(modelHitSql.contains("tr.bank_statement_id is not null"), modelHitSql);
+ assertFalse(modelHitSql.contains("rule_name like '%可疑%'"), modelHitSql);
+ assertFalse(modelHitSql.contains("ABNORMAL_CUSTOMER_TRANSACTION"), modelHitSql);
assertTrue(suspiciousSql.contains("ccdi_biz_intermediary"), suspiciousSql);
assertTrue(suspiciousSql.contains("ccdi_enterprise_base_info"), suspiciousSql);
assertTrue(suspiciousSql.contains("group by merged.bankStatementId"), suspiciousSql);
+ assertTrue(aggregatedSql.contains("lpad(merged.matchPriority, 2, '0')"), aggregatedSql);
assertTrue(suspiciousSql.contains("hasModelRuleHit"), suspiciousSql);
assertTrue(suspiciousSql.contains("hasNameListHit"), suspiciousSql);
assertTrue(suspiciousSql.contains("final_result.nameListHitType"), suspiciousSql);
diff --git a/docs/reports/implementation/2026-06-01-suspicious-transaction-model-hit-scope.md b/docs/reports/implementation/2026-06-01-suspicious-transaction-model-hit-scope.md
new file mode 100644
index 00000000..9882f767
--- /dev/null
+++ b/docs/reports/implementation/2026-06-01-suspicious-transaction-model-hit-scope.md
@@ -0,0 +1,35 @@
+# 涉疑交易明细模型命中范围调整实施记录
+
+## 背景
+
+风险明细模块的「涉疑交易」列表此前在模型规则命中部分限制为 `rule_name like '%可疑%'`,并额外包含 `ABNORMAL_CUSTOMER_TRANSACTION`。该口径会导致大额单笔、短时间多笔存现等已有流水级命中模型无法进入涉疑交易明细。
+
+本次确认的业务口径为:涉疑交易明细应放开展示所有流水级模型命中;名单库命中只在同一笔流水同时命中时优先展示匹配对象和标签,不作为模型命中的过滤条件。
+
+## 修改内容
+
+- 调整 `CcdiProjectOverviewMapper.xml` 的 `suspiciousTransactionModelHitSql`:
+ - 保留 `tr.project_id = #{query.projectId}`。
+ - 保留 `tr.bank_statement_id is not null`,仅展示可落到具体流水的命中。
+ - 删除 `rule_name like '%可疑%'` 和 `tr.rule_code = 'ABNORMAL_CUSTOMER_TRANSACTION'` 限制。
+- 保持名单库命中逻辑不变:
+ - 信贷客户账号命中优先级为 1。
+ - 中介账号、姓名、企业名称命中按原 `matchPriority` 聚合。
+ - 同一笔流水既有模型命中又有名单命中时,`suspiciousPersonName` 和 `nameListHitType` 仍优先取名单命中结果。
+- 更新 SQL 单测,明确校验模型命中范围已放开,并校验名单命中优先级聚合逻辑仍存在。
+
+## 影响范围
+
+- 影响页面:项目详情风险明细模块的「涉疑交易」列表及导出。
+- 影响数据范围:所有 `ccdi_bank_statement_tag_result.bank_statement_id is not null` 的流水级规则命中均可进入涉疑交易明细。
+- 不影响对象级命中:`bank_statement_id is null` 的员工/家庭/资产等对象级结果仍不会进入该流水明细列表。
+- 不影响名单库命中阈值和匹配规则。
+
+## 验证
+
+- 已执行 `mvn -pl ccdi-project -Dtest=CcdiProjectOverviewMapperSqlTest test`,结果通过:`Tests run: 7, Failures: 0, Errors: 0, Skipped: 0`。
+- 验证点:
+ - `suspiciousTransactionModelHitSql` 不再包含 `rule_name like '%可疑%'`。
+ - `suspiciousTransactionModelHitSql` 不再包含 `ABNORMAL_CUSTOMER_TRANSACTION` 单规则特例。
+ - `suspiciousTransactionModelHitSql` 保留 `tr.bank_statement_id is not null`。
+ - 聚合 SQL 保留基于 `matchPriority` 的名单命中优先展示逻辑。