调整流水模型理财剔除与提现规则
This commit is contained in:
@@ -272,9 +272,11 @@ public interface CcdiBankTagAnalysisMapper {
|
||||
* 微信支付宝提现超额
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param amountThreshold 提现金额阈值
|
||||
* @return 对象命中结果
|
||||
*/
|
||||
List<BankTagObjectHitVO> selectWithdrawAmtObjects(@Param("projectId") Long projectId);
|
||||
List<BankTagObjectHitVO> selectWithdrawAmtObjects(@Param("projectId") Long projectId,
|
||||
@Param("amountThreshold") BigDecimal amountThreshold);
|
||||
|
||||
/**
|
||||
* 工资快速转出
|
||||
|
||||
@@ -34,6 +34,7 @@ public class BankTagRuleConfigResolver {
|
||||
Map.entry("FOREX_BUY_AMT", Set.of("SINGLE_PURCHASE_AMOUNT")),
|
||||
Map.entry("FOREX_SELL_AMT", Set.of("SINGLE_SETTLEMENT_AMOUNT")),
|
||||
Map.entry("WITHDRAW_CNT", Set.of("WITHDRAW_CNT")),
|
||||
Map.entry("WITHDRAW_AMT", Set.of("WITHDRAW_AMT")),
|
||||
Map.entry("STOCK_TFR_LARGE", Set.of("STOCK_TFR_LARGE")),
|
||||
Map.entry("LARGE_STOCK_TRADING", Set.of("STOCK_TFR_LARGE")),
|
||||
Map.entry("MULTI_PARTY_GAMBLING_TRANSFER", Set.of("MULTI_PARTY_AMT_MIN", "MULTI_PARTY_AMT_MAX")),
|
||||
|
||||
@@ -285,7 +285,9 @@ public class CcdiBankTagServiceImpl implements ICcdiBankTagService {
|
||||
case "WITHDRAW_CNT" -> analysisMapper.selectWithdrawCntObjects(
|
||||
projectId, toInteger(config.getThresholdValue("WITHDRAW_CNT"))
|
||||
);
|
||||
case "WITHDRAW_AMT" -> analysisMapper.selectWithdrawAmtObjects(projectId);
|
||||
case "WITHDRAW_AMT" -> analysisMapper.selectWithdrawAmtObjects(
|
||||
projectId, toBigDecimal(config.getThresholdValue("WITHDRAW_AMT"))
|
||||
);
|
||||
case "SALARY_QUICK_TRANSFER" -> analysisMapper.selectSalaryQuickTransferObjects(projectId);
|
||||
case "SALARY_UNUSED" -> analysisMapper.selectSalaryUnusedObjects(projectId);
|
||||
case "SUDDEN_ACCOUNT_CLOSURE" -> analysisMapper.selectSuddenAccountClosureObjects(projectId);
|
||||
|
||||
@@ -146,6 +146,60 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
)
|
||||
</sql>
|
||||
|
||||
<sql id="financialProductExclusionPredicate">
|
||||
not (
|
||||
(
|
||||
(
|
||||
IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '理财|理财产品|结构.*存款|结构性存款|理财.*托管|余额宝|朝朝宝|朝朝盈|现金宝|金添利|定存宝'
|
||||
or IFNULL(bs.USER_MEMO, '') REGEXP '理财|理财产品|结构.*存款|结构性存款|本金划出|本金返还|余额宝|朝朝宝|朝朝盈|现金宝|金添利|定存宝|整存整取|智能存款|通知存款'
|
||||
or IFNULL(bs.CASH_TYPE, '') REGEXP '受托理财|表内理财|购买理财|理财购买|理财扣款|理财申购|理财认购|结构性存款|存款产品|朝朝宝'
|
||||
or (
|
||||
IFNULL(bs.USER_MEMO, '') REGEXP '申购|认购|赎回'
|
||||
and IFNULL(bs.USER_MEMO, '') REGEXP '理财|产品|存款|本金|余额宝|朝朝宝|朝朝盈'
|
||||
)
|
||||
)
|
||||
and IFNULL(bs.USER_MEMO, '') NOT REGEXP '财务|经理|代理财税'
|
||||
and IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') NOT LIKE '%代理财政%'
|
||||
)
|
||||
)
|
||||
</sql>
|
||||
|
||||
<sql id="thirdPartyWithdrawIncomePredicate">
|
||||
(
|
||||
(
|
||||
bs.BANK in ('ALIPAY', 'WECHAT')
|
||||
and (
|
||||
IFNULL(bs.CASH_TYPE, '') LIKE '%提现%'
|
||||
or IFNULL(bs.USER_MEMO, '') LIKE '%提现%'
|
||||
or IFNULL(bs.USER_MEMO, '') LIKE '%转出到%银行%'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%提现%'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%转出到%银行%'
|
||||
)
|
||||
)
|
||||
or (
|
||||
(
|
||||
bs.BANK is null
|
||||
or bs.BANK = ''
|
||||
or bs.BANK not in ('ALIPAY', 'WECHAT')
|
||||
)
|
||||
and (
|
||||
IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '支付宝|Alipay|财付通|Tenpay|微信|wechat|WeChat|微信零钱'
|
||||
or IFNULL(bs.USER_MEMO, '') REGEXP '支付宝|Alipay|财付通|Tenpay|微信|wechat|WeChat|微信零钱'
|
||||
or IFNULL(bs.CASH_TYPE, '') REGEXP '支付宝|Alipay|财付通|Tenpay|微信|wechat|WeChat|微信零钱'
|
||||
)
|
||||
and (
|
||||
IFNULL(bs.CASH_TYPE, '') LIKE '%提现%'
|
||||
or IFNULL(bs.USER_MEMO, '') LIKE '%提现%'
|
||||
or IFNULL(bs.USER_MEMO, '') LIKE '%转出到%银行%'
|
||||
or IFNULL(bs.USER_MEMO, '') LIKE '%提现到账%'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%提现%'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%转出到%银行%'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%提现到账%'
|
||||
)
|
||||
)
|
||||
)
|
||||
</sql>
|
||||
|
||||
<sql id="abnormalCustomerTransactionSubjectSql">
|
||||
select
|
||||
staff.id_card as subjectCertNo,
|
||||
@@ -200,6 +254,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
IFNULL(bs.USER_MEMO, '') REGEXP '(购|买).*房|(购|买).*车|车款|房款|首付|(房|车).*贷'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '汽车销售|汽车金融|4S店|汽贸|车行|房地产|置业|置地|地产|房产|不动产|链家|贝壳|我爱我家|房管局'
|
||||
)
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
and (
|
||||
exists (
|
||||
select 1
|
||||
@@ -231,6 +286,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
IFNULL(bs.USER_MEMO, '') REGEXP '税务|缴税|税款'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '税务|税务局|国库|国家金库|财政'
|
||||
)
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
and (
|
||||
exists (
|
||||
select 1
|
||||
@@ -268,6 +324,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and IFNULL(bs.LE_ACCOUNT_NAME, '') <> IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '')
|
||||
and relation.person_id is null
|
||||
and <include refid="salaryExclusionPredicate"/>
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
</select>
|
||||
|
||||
<select id="selectCumulativeIncomeObjects" resultMap="BankTagObjectHitResultMap">
|
||||
@@ -295,6 +352,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and IFNULL(bs.LE_ACCOUNT_NAME, '') <> IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '')
|
||||
and relation.person_id is null
|
||||
and <include refid="salaryExclusionPredicate"/>
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
group by staff.id_card, bs.CUSTOMER_ACCOUNT_NAME
|
||||
having SUM(IFNULL(bs.AMOUNT_CR, 0)) > #{threshold}
|
||||
) t
|
||||
@@ -316,6 +374,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
inner join ccdi_base_staff staff on staff.id_card = bs.cret_no
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.LE_ACCOUNT_NAME, '') <> IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '')
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
and STR_TO_DATE(LEFT(TRIM(bs.TRX_DATE), 10), '%Y-%m-%d') >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH)
|
||||
group by staff.id_card
|
||||
having SUM(IFNULL(bs.AMOUNT_DR, 0) + IFNULL(bs.AMOUNT_CR, 0)) > #{threshold}
|
||||
@@ -335,18 +394,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.AMOUNT_CR, 0) > #{threshold}
|
||||
and <include refid="cashDepositPredicate"/>
|
||||
and (
|
||||
exists (
|
||||
select 1
|
||||
from ccdi_base_staff staff
|
||||
where staff.id_card = bs.cret_no
|
||||
)
|
||||
or exists (
|
||||
select 1
|
||||
from ccdi_staff_fmy_relation relation
|
||||
where relation.relation_cert_no = bs.cret_no
|
||||
and relation.status = 1
|
||||
)
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
and exists (
|
||||
select 1
|
||||
from ccdi_base_staff staff
|
||||
where staff.id_card = bs.cret_no
|
||||
)
|
||||
</select>
|
||||
|
||||
@@ -373,6 +425,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.AMOUNT_CR, 0) > #{amountThreshold}
|
||||
and <include refid="cashDepositPredicate"/>
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
) source
|
||||
group by source.object_key, source.cash_date
|
||||
having COUNT(1) > #{frequencyThreshold}
|
||||
@@ -396,8 +449,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
or IFNULL(bs.USER_MEMO, '') REGEXP '转帐|转账|汇入|转存|红包|汇款|网转|转入'
|
||||
or IFNULL(bs.CASH_TYPE, '') REGEXP '转帐|转账|汇入|转存|红包|汇款|网转|转入'
|
||||
)
|
||||
and IFNULL(bs.USER_MEMO, '') NOT LIKE '%款%'
|
||||
and IFNULL(bs.LE_ACCOUNT_NAME, '') <> IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '')
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
and (
|
||||
exists (
|
||||
select 1
|
||||
@@ -644,8 +697,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.AMOUNT_DR, 0) > 0
|
||||
and (
|
||||
IFNULL(bs.USER_MEMO, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌|球|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|投注'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌|球|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|投注'
|
||||
IFNULL(bs.USER_MEMO, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌博|赌球|下注|投注|球赛投注|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|VIP666|USDT下注'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '游戏|抖币|体彩|福彩|彩票|赌博|赌球|下注|投注|球赛投注|外围|博彩|六合|时时彩|赛车|赌场|筹码|盘口|返水|洗码|庄家|闲家|百家乐|斗牛|炸金花|牌九|麻将|捕鱼|电子游艺|VIP666|USDT下注'
|
||||
)
|
||||
</select>
|
||||
|
||||
@@ -1205,6 +1258,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
or IFNULL(bs.USER_MEMO, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管|银证转账|银证|证转银|银转证'
|
||||
or IFNULL(bs.CASH_TYPE, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管|银证转账|银证|证转银|银转证'
|
||||
)
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
</select>
|
||||
|
||||
<select id="selectWithdrawCntObjects" resultMap="BankTagObjectHitResultMap">
|
||||
@@ -1224,11 +1278,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
from ccdi_bank_statement bs
|
||||
inner join ccdi_base_staff staff on staff.id_card = bs.cret_no
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.AMOUNT_CR, 0) >= 0
|
||||
and (
|
||||
IFNULL(bs.USER_MEMO, '') REGEXP '财付通|微信零钱|微信|wechat|WeChat|Tenpay|支付宝|Alipay|提现'
|
||||
or IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '财付通|微信零钱|微信|wechat|WeChat|Tenpay|支付宝|Alipay|提现'
|
||||
)
|
||||
and IFNULL(bs.AMOUNT_CR, 0) > 0
|
||||
and <include refid="thirdPartyWithdrawIncomePredicate"/>
|
||||
group by staff.id_card, LEFT(TRIM(bs.TRX_DATE), 10)
|
||||
having COUNT(1) > #{frequencyThreshold}
|
||||
) t
|
||||
@@ -1237,10 +1288,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="selectWithdrawAmtObjects" resultMap="BankTagObjectHitResultMap">
|
||||
select
|
||||
'STAFF_ID_CARD' AS objectType,
|
||||
'' AS objectKey,
|
||||
'占位SQL,待补充真实规则' AS reasonDetail
|
||||
from ccdi_bank_statement bs
|
||||
where 1 = 0
|
||||
t.objectKey AS objectKey,
|
||||
CONCAT(
|
||||
'单日微信/支付宝提现到账金额 ', CAST(t.withdrawAmount AS CHAR),
|
||||
' 元,超过阈值 ', CAST(#{amountThreshold} AS CHAR),
|
||||
' 元,交易日:', t.transDate
|
||||
) AS reasonDetail
|
||||
from (
|
||||
select
|
||||
staff.id_card AS objectKey,
|
||||
LEFT(TRIM(bs.TRX_DATE), 10) AS transDate,
|
||||
ROUND(SUM(IFNULL(bs.AMOUNT_CR, 0)), 2) AS withdrawAmount
|
||||
from ccdi_bank_statement bs
|
||||
inner join ccdi_base_staff staff on staff.id_card = bs.cret_no
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.AMOUNT_CR, 0) > 0
|
||||
and <include refid="thirdPartyWithdrawIncomePredicate"/>
|
||||
group by staff.id_card, LEFT(TRIM(bs.TRX_DATE), 10)
|
||||
having SUM(IFNULL(bs.AMOUNT_CR, 0)) > #{amountThreshold}
|
||||
) t
|
||||
</select>
|
||||
|
||||
<select id="selectSalaryQuickTransferObjects" resultMap="BankTagObjectHitResultMap">
|
||||
@@ -1472,10 +1538,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
where bs.project_id = #{projectId}
|
||||
and IFNULL(bs.AMOUNT_DR, 0) > #{threshold}
|
||||
and (
|
||||
IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|理财|资金存管|第三方存管'
|
||||
or IFNULL(bs.USER_MEMO, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|理财|资金存管|第三方存管'
|
||||
or IFNULL(bs.CASH_TYPE, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|理财|资金存管|第三方存管'
|
||||
IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管'
|
||||
or IFNULL(bs.USER_MEMO, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管|银证转账|银证|证转银|银转证'
|
||||
or IFNULL(bs.CASH_TYPE, '') REGEXP '证券|国泰君安|中信建投|中金|基金|期货|信托|同花顺|资金存管|第三方存管|银证转账|银证|证转银|银转证'
|
||||
)
|
||||
and <include refid="financialProductExclusionPredicate"/>
|
||||
</select>
|
||||
|
||||
<select id="selectProxyAccountOperationObjects" resultMap="BankTagObjectHitResultMap">
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# 银行流水打标理财类流水剔除实施记录
|
||||
|
||||
## 修改背景
|
||||
|
||||
- 员工纪检场景下,单纯理财申购、理财购买、结构性存款、理财赎回等流水属于资产形态转换,不应仅因金额较大命中大额交易或炒股模型。
|
||||
- 桌面本地知识库中的流水底层打标规则将“理财支出/理财收回”作为独立标签口径,银证类逻辑更聚焦“证券/期货 + 银证转账/银转证/证转银”等特征。
|
||||
|
||||
## 修改内容
|
||||
|
||||
- 在 `CcdiBankTagAnalysisMapper.xml` 新增 `financialProductExclusionPredicate` SQL 片段,按当前流水字段识别理财类流水并排除。
|
||||
- 大额交易模型接入理财排除:
|
||||
- 房车消费支出交易
|
||||
- 税务支出交易
|
||||
- 大额单笔收入
|
||||
- 累计收入超限
|
||||
- 年流水交易额超限
|
||||
- 大额存现交易
|
||||
- 短时间多次存现
|
||||
- 大额转账交易
|
||||
- 炒股相关模型接入理财排除:
|
||||
- 可疑银证大额转账
|
||||
- 大额炒股
|
||||
- 从“大额炒股”关键词中移除 `理财`,并补充银证转账、银证、证转银、银转证等更贴近炒股转账的关键词。
|
||||
- 大额转账交易删除 `USER_MEMO NOT LIKE '%款%'` 排除条件。业务口径为“大额转账单笔超过设置限额”,不应因摘要包含“借款、还款、工程款、货款、服务款”等“款”字统一剔除,避免员工纪检场景漏报。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 仅影响银行流水打标 SQL 命中口径,不修改前端、接口结构、参数编码和数据库结构。
|
||||
- 理财类流水将不再因金额较大命中大额交易模型,也不会因包含“理财”关键词命中炒股模型。
|
||||
- 单独出现“申购/认购/赎回”不会直接被排除,必须同时伴随理财、产品、存款、本金、余额宝、朝朝宝等理财特征,避免误排证券申购或证转银场景。
|
||||
- 大额转账交易会重新纳入摘要包含“款”的大额转账流水,仍保留同名账户排除与理财类流水排除。
|
||||
|
||||
## 验证情况
|
||||
|
||||
- XML 解析校验通过:`CcdiBankTagAnalysisMapper.xml` 可正常解析,当前包含 35 个 `select` 与 9 个 `sql` 片段。
|
||||
- 后端编译验证通过:`mvn -pl ccdi-project -am compile -DskipTests` 执行成功。
|
||||
- 编译过程中 Maven 提示 `ccdi-info-collection` 存在既有 `ccdi-lsfx` 重复依赖声明警告,本次未修改该模块。
|
||||
- 本次不启动前端页面测试,修改范围为后端 Mapper SQL。
|
||||
@@ -0,0 +1,42 @@
|
||||
# 微信支付宝提现打标规则实施记录
|
||||
|
||||
## 修改背景
|
||||
|
||||
- 当前 `WITHDRAW_CNT` 使用 `AMOUNT_CR >= 0` 与微信、支付宝关键词识别频繁提现,容易把消费、转账、充值、退款等第三方支付流水误计为提现。
|
||||
- `WITHDRAW_AMT` 规则元数据和参数已存在,但 Mapper SQL 仍为占位实现,实际不会命中。
|
||||
- 本次参考桌面本地知识库中支付宝、微信提现识别口径:优先使用 `BANK in ('ALIPAY','WECHAT')` 与提现特征;当 `BANK` 未识别到微信或支付宝时,再使用平台关键词与提现特征组合兜底。
|
||||
|
||||
## 修改内容
|
||||
|
||||
- 在 `CcdiBankTagAnalysisMapper.xml` 新增 `thirdPartyWithdrawIncomePredicate`,统一识别微信、支付宝提现到账流水。
|
||||
- 调整 `WITHDRAW_CNT`:
|
||||
- 金额方向改为 `AMOUNT_CR > 0`,表示提现到账收入。
|
||||
- 不再仅凭微信、支付宝、财付通等平台关键词计数。
|
||||
- 按员工和交易日统计提现到账次数,超过 `WITHDRAW_CNT` 阈值命中。
|
||||
- 补齐 `WITHDRAW_AMT`:
|
||||
- 按员工和交易日汇总提现到账收入金额。
|
||||
- 超过 `WITHDRAW_AMT` 阈值命中。
|
||||
- Java 调用链补充 `WITHDRAW_AMT` 参数传递:
|
||||
- Mapper 方法增加 `amountThreshold` 参数。
|
||||
- Service 执行规则时传入 `WITHDRAW_AMT` 参数。
|
||||
- 参数解析器增加 `WITHDRAW_AMT -> WITHDRAW_AMT` 映射。
|
||||
|
||||
## 性能考虑
|
||||
|
||||
- SQL 保留 `project_id`、`AMOUNT_CR > 0`、员工身份证关联等基础过滤,先缩小参与匹配的数据集。
|
||||
- `BANK in ('ALIPAY','WECHAT')` 使用精确判断优先命中。
|
||||
- 只有 `BANK` 未识别为 `ALIPAY/WECHAT` 时,才走支付宝、微信、财付通等关键词兜底,降低误报和无谓匹配范围。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 仅影响异常行为模型下:
|
||||
- `WITHDRAW_CNT` 微信支付宝频繁提现
|
||||
- `WITHDRAW_AMT` 微信支付宝提现超额
|
||||
- 不修改前端、数据库结构和菜单权限。
|
||||
|
||||
## 验证情况
|
||||
|
||||
- XML 解析校验通过:`CcdiBankTagAnalysisMapper.xml` 可正常解析,当前包含 35 个 `select` 与 10 个 `sql` 片段。
|
||||
- 后端编译验证通过:`mvn -pl ccdi-project -am compile -DskipTests` 执行成功。
|
||||
- 文本核对通过:`WITHDRAW_CNT` 已不再使用 `AMOUNT_CR >= 0`,`WITHDRAW_AMT` 已不再使用占位 SQL。
|
||||
- 编译过程中 Maven 提示 `ccdi-info-collection` 存在既有 `ccdi-lsfx` 重复依赖声明警告,本次未修改该模块。
|
||||
@@ -0,0 +1,32 @@
|
||||
# 大额存现与赌博敏感关键词调整实施记录
|
||||
|
||||
## 修改时间
|
||||
|
||||
2026-06-04
|
||||
|
||||
## 修改背景
|
||||
|
||||
员工纪检流水打标模型中,大额存现交易需要按员工本人名下流水统计,不再纳入家庭成员名下流水。疑似赌博敏感交易需要覆盖交易摘要或交易对手中的“游戏、抖币、体彩、福彩”等关注字眼,同时删除单字“球”以减少正常球类消费误报。
|
||||
|
||||
## 修改内容
|
||||
|
||||
1. 调整 `selectLargeCashDepositStatements`:
|
||||
- 保留员工本人证件号匹配 `ccdi_base_staff.id_card = ccdi_bank_statement.cret_no`。
|
||||
- 移除家庭成员证件号匹配 `ccdi_staff_fmy_relation.relation_cert_no = ccdi_bank_statement.cret_no`。
|
||||
|
||||
2. 调整 `selectGamblingSensitiveKeywordStatements`:
|
||||
- 删除宽泛单字关键词 `球`。
|
||||
- 保留并补充博彩及敏感娱乐关键词:`游戏`、`抖币`、`体彩`、`福彩`、`彩票`、`赌博`、`赌球`、`下注`、`投注`、`球赛投注`、`外围`、`博彩`、`六合`、`时时彩`、`赛车`、`赌场`、`筹码`、`盘口`、`返水`、`洗码`、`庄家`、`闲家`、`百家乐`、`斗牛`、`炸金花`、`牌九`、`麻将`、`捕鱼`、`电子游艺`、`VIP666`、`USDT下注`。
|
||||
- 命中字段仍为交易摘要 `USER_MEMO` 和交易对手 `CUSTOMER_ACCOUNT_NAME`。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 大额存现交易命中范围收窄为员工本人名下流水。
|
||||
- 疑似赌博敏感交易继续覆盖游戏、抖币等关注字眼,同时减少单字“球”造成的正常球类消费误报。
|
||||
- 不影响短时间多次存现规则;该规则此前已经仅统计员工本人名下流水。
|
||||
- 不新增表结构和参数配置。
|
||||
|
||||
## 验证情况
|
||||
|
||||
- 已执行 MyBatis XML 解析检查。
|
||||
- 已执行 `mvn -pl ccdi-project -am compile -DskipTests` 编译验证。
|
||||
Reference in New Issue
Block a user