向高风险司法管辖区进行的第三方支付
1. 简介
交易监控是零售银行的基本支柱,确保金融交易的完整性和安全性。它在检测和防止金融欺诈、洗钱以及其他非法活动方面发挥关键作用,保护银行及其客户免受潜在威胁和损失。
“第三方支付至高风险司法管辖区”规则监控指向被归类为金融违规高风险的地区或国家的交易。通过识别此类交易,银行可以更仔细地审查它们,确保它们遵守监管要求并且不是非法活动的渠道。
2. 规则细分
-
时间范围
-
在滚动的 30 天内评估所有数据(此时间段可自行设定)
-
-
捕获
-
洗钱马
-
-
逻辑
-
按唯一来源账户聚合流入支付的总价值
-
将交易匹配至高风险司法管辖区
-
当单笔交易的价值在原始流入金额的 90% 至 110% 之间时。
-
-
3. 建模
本节将展示示例图上的 Cypher 查询示例。目的是说明查询的结构,并提供关于如何在实际环境中构建数据的指南。我们将在一个包含少量节点的图上进行演示。示例图将基于以下数据模型:
3.2. 示例数据
以下 Cypher 语句将在 Neo4j 数据库中创建示例图:
// Create all accounts
CREATE (a1:Account:Internal {accountNumber: "ACC001"})
CREATE (a2:Account:Internal {accountNumber: "ACC002"})
CREATE (a3:Account:Internal {accountNumber: "ACC003"})
CREATE (a4:Account:Internal {accountNumber: "ACC004"})
CREATE (a5:Account:Internal {accountNumber: "ACC005"})
CREATE (a6:Account:Internal {accountNumber: "ACC006"})
CREATE (a7:Account:External:HighRiskJurisdiction {accountNumber: "ACC007"})
// Create valid transactions
CREATE (a2)-[:PERFORMS]->(:Transaction {transactionId: "TXN001", amount: 1100, date: datetime()-duration({days: 29})})-[:BENEFITS_TO]->(a4)
CREATE (a4)-[:PERFORMS]->(:Transaction {transactionId: "TXN002", amount: 100, date: datetime()-duration({days: 27})})-[:BENEFITS_TO]->(a6)
CREATE (a4)-[:PERFORMS]->(:Transaction {transactionId: "TXN003", amount: 200, date: datetime()-duration({days: 26})})-[:BENEFITS_TO]->(a6)
CREATE (a4)-[:PERFORMS]->(:Transaction {transactionId: "TXN004", amount: 600, date: datetime()-duration({days: 25})})-[:BENEFITS_TO]->(a6)
CREATE (a6)-[:PERFORMS]->(:Transaction {transactionId: "TXN005", amount: 500, date: datetime()-duration({days: 3})})-[:BENEFITS_TO]->(a7)
CREATE (a6)-[:PERFORMS]->(:Transaction {transactionId: "TXN006", amount: 500, date: datetime()-duration({days: 2})})-[:BENEFITS_TO]->(a7)
// Create invalid transactions (outside time window or not matching criteria)
CREATE (a1)-[:PERFORMS]->(:Transaction {transactionId: "TXN007", amount: 500, date: datetime()-duration({days: 60})})-[:BENEFITS_TO]->(a2)
CREATE (a1)-[:PERFORMS]->(:Transaction {transactionId: "TXN008", amount: 500, date: datetime()-duration({days: 60})})-[:BENEFITS_TO]->(a2)
CREATE (a3)-[:PERFORMS]->(:Transaction {transactionId: "TXN009", amount: 750, date: datetime()-duration({days: 28})})-[:BENEFITS_TO]->(a4)
CREATE (a5)-[:PERFORMS]->(:Transaction {transactionId: "TXN010", amount: 100, date: datetime()-duration({days: 24})})-[:BENEFITS_TO]->(a6)
CREATE (a5)-[:PERFORMS]->(:Transaction {transactionId: "TXN011", amount: 50, date: datetime()-duration({days: 24})})-[:BENEFITS_TO]->(a6)
4. Cypher 查询
4.1. 增强图形版本
这是标准交易监控规则的增强版,在当前系统中难以实现大规模和简易性。为什么?
-
对关系进行递归遍历并无限回溯在任何现有系统中都无法实现
-
Neo4j 的卓越性能得益于我们在遍历时评估了以下条件
-
聚合交易的价值超出原始交易金额的 90% - 110% 范围。
-
交易日期超出指定的时间段(此处为 30 天)。
-
MATCH (l:Account)-[:PERFORMS]->(last_t:Transaction)-[:BENEFITS_TO]->(hrj:HighRiskJurisdiction)
WHERE last_t.date >= datetime()-duration({days: 30})
WITH l, hrj, SUM(last_t.amount) AS total_hrj_transactions
MATCH path=(first)((a1)-[:PERFORMS]->(t:Transaction)-[:BENEFITS_TO]->(a2)
WHERE COLLECT {
WITH a1, a2
MATCH (a1)-[:PERFORMS]->(some_t:Transaction)-[:BENEFITS_TO]->(a2)
WHERE some_t.date >= datetime()-duration({days: 30})
WITH SUM(some_t.amount) AS s
RETURN 0.9 * total_hrj_transactions <= s <= 1.1 * total_hrj_transactions
} = [TRUE]
)*(l)-[:PERFORMS]->(tx:Transaction)-[:BENEFITS_TO]->(hrj)
WHERE NOT EXISTS {
WITH first
MATCH (before)-[:PERFORMS]->(tx:Transaction)-[:BENEFITS_TO]->(first)
WHERE tx.date >= datetime()-duration({days: 30})
WITH SUM(tx.amount) AS sx, before
WHERE 0.9 * total_hrj_transactions <= sx <= 1.1 * total_hrj_transactions
RETURN before
} AND
tx.date >= datetime()-duration({days: 30})
RETURN path