向高风险司法管辖区进行的第三方支付

1. 简介

交易监控是零售银行的基本支柱,确保金融交易的完整性和安全性。它在检测和防止金融欺诈、洗钱以及其他非法活动方面发挥关键作用,保护银行及其客户免受潜在威胁和损失。

第三方支付至高风险司法管辖区”规则监控指向被归类为金融违规高风险的地区或国家的交易。通过识别此类交易,银行可以更仔细地审查它们,确保它们遵守监管要求并且不是非法活动的渠道。

2. 规则细分

  • 时间范围

    • 在滚动的 30 天内评估所有数据(此时间段可自行设定)

  • 捕获

    • 洗钱马

  • 逻辑

    1. 按唯一来源账户聚合流入支付的总价值

    2. 将交易匹配至高风险司法管辖区

      • 当单笔交易的价值在原始流入金额的 90% 至 110% 之间时。

3. 建模

本节将展示示例图上的 Cypher 查询示例。目的是说明查询的结构,并提供关于如何在实际环境中构建数据的指南。我们将在一个包含少量节点的图上进行演示。示例图将基于以下数据模型:

3.1. 数据模型

fs transaction monitoring high risk jurisdictions model

3.1.1 必需字段

以下是开始所需的字段

Account(账户)节点

  • accountNumber: 包含账户标识符。此标识符可更改为您为 Account 使用的其他任何标识符。

Transaction(交易)节点

  • transactionId: 交易的唯一系统标识符。

  • amount: 包含在账户之间转移的金额。

  • date: 包含交易发生的日期。

PERFORMS 关系

  • 不需要属性

BENEFITS_TO 关系

  • 不需要属性

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)

3.3. Neo4j 模式

// Show neo4j scheme
CALL db.schema.visualization()

它将提供以下响应

fs transaction monitoring high risk jurisdictions schema

4. Cypher 查询

4.1. 增强图形版本

这是标准交易监控规则的增强版,在当前系统中难以实现大规模和简易性。为什么?

  1. 对关系进行递归遍历并无限回溯在任何现有系统中都无法实现

  2. Neo4j 的卓越性能得益于我们在遍历时评估了以下条件

    1. 聚合交易的价值超出原始交易金额的 90% - 110% 范围。

    2. 交易日期超出指定的时间段(此处为 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
© . This site is unofficial and not affiliated with Neo4j, Inc.