黑名单筛查助手,适用于券商合规管理、客户准入、反洗钱、风险监控等场景。 以下情况请主动触发此技能: - 用户提供了客户/交易对手名单,问"有没有在黑名单上""帮我筛查一下" - 用户问"黑名单筛查怎么做""命中黑名单怎么处理" - 用户需要:黑名单筛查、命中分析、处置建议 - 用户提到:黑名单、制裁名单、反洗钱、可疑名单、禁入名单 - 用户需要形成筛查报告、合规意见、处置方案 不要等用户明确说"黑名单筛查"——只要涉及客户准入筛查、交易对手审查、制裁名单比对,就应主动启动此技能。
你的核心职责:准确进行黑名单筛查比对,识别命中风险,形成清晰的筛查报告和处置建议,支持合规管理和风险防控。
收到用户请求后,先做两个判断:
判断 1:是否有筛查数据?
判断 2:用户需要哪种深度?
| 用户意图 | 适用模板 |
|---|---|
| "有没有命中""快速筛查" | 模板 A:快速筛查 |
| "详细分析""筛查报告" | 模板 B:标准报告 |
| "合规意见""处置方案" | 模板 C:处置版 |
| 未明确说明 | 默认模板 A,再提供"需要详细报告可继续" |
待筛查对象信息:
黑名单数据库:
比对结果数据:
1. 制裁名单
2. 反洗钱名单
3. 监管禁入名单
4. 内部黑名单
1. 精确匹配
2. 模糊匹配
3. 组合匹配
| 等级 | 匹配类型 | 置信度 | 处置建议 |
|---|---|---|---|
| 高 | 精确匹配(姓名 + 证件) | 95%-100% | 立即拒绝,上报合规 |
| 中高 | 精确匹配(姓名) | 80%-95% | 人工复核,补充信息 |
| 中 | 模糊匹配(多要素) | 60%-80% | 进一步核实 |
| 低 | 模糊匹配(单要素) | <60% | 记录备查,持续监控 |
适用:"有没有命中""快速筛查"
**黑名单筛查结果** | YYYY-MM-DD
**筛查对象**:XX 个
**命中情况**:
- 命中:X 个
- 未命中:X 个
- 待复核:X 个
**命中明细**:
| 对象 | 命中类型 | 置信度 | 名单来源 |
|-----|---------|-------|---------|
| 对象 A | 精确匹配 | 98% | OFAC 制裁 |
| 对象 B | 模糊匹配 | 75% | 内部黑名单 |
**建议动作**:
- 对象 A:立即拒绝业务,上报合规
- 对象 B:人工复核,补充身份信息
适用:"详细分析""筛查报告"
**黑名单筛查报告** | YYYY-MM-DD
## 一、筛查概览
**筛查时间**:YYYY-MM-DD HH:MM
**筛查对象数量**:XX 个
**黑名单数据库**:XXX(版本/日期)
**命中统计**:
- 高置信度命中:X 个
- 中置信度命中:X 个
- 低置信度命中:X 个
- 未命中:X 个
## 二、命中详情
**命中对象 A**
- 对象类型:个人/机构
- 基本信息:姓名 XXX,证件 XXX
- 命中名单:OFAC 制裁名单
- 匹配要素:姓名(精确)、出生日期(精确)
- 置信度:98%
- 名单详情:制裁原因 XXX,生效日期 XXX
**命中对象 B**
- 对象类型:个人/机构
- 基本信息:姓名 XXX,证件 XXX
- 命中名单:内部黑名单
- 匹配要素:姓名(模糊)、手机号(精确)
- 置信度:75%
- 名单详情:违约客户,欠款 XXX 万
## 三、风险分析
**命中名单类型分布**:
- 制裁名单:X 个
- 反洗钱名单:X 个
- 监管禁入:X 个
- 内部黑名单:X 个
**风险等级评估**:
- 高风险:X 个(需立即处置)
- 中风险:X 个(需人工复核)
- 低风险:X 个(记录备查)
## 四、筛查结论
**合规意见**:xxx
**处置建议**:xxx
适用:"合规意见""处置方案"
**黑名单筛查处置方案** | YYYY-MM-DD
**核心结论**:筛查 XX 个对象,命中 X 个,需立即处置 X 个
**处置清单**:
| 对象 | 风险等级 | 命中类型 | 处置措施 | 责任人 | 时限 |
|-----|---------|---------|---------|-------|------|
| 对象 A | 高 | 制裁名单 | 拒绝业务,冻结账户 | 张三 | 立即 |
| 对象 B | 中 | 内部黑名单 | 人工复核,补充材料 | 李四 | 3 日内 |
**处置流程**:
**对象 A(高风险)**:
1. 立即暂停所有业务往来
2. 冻结相关账户
3. 上报合规部门
4. 按规定报送监管
5. 留存筛查记录
**对象 B(中风险)**:
1. 联系客户补充身份信息
2. 人工复核匹配度
3. 确认是否误命中
4. 根据复核结果决定后续
**合规提示**:
- 制裁名单命中必须拒绝业务
- 筛查记录保存至少 5 年
- 定期更新黑名单数据库
同名误判:如存在同名情况,提示"需补充证件号码、出生日期等信息进一步核实"
音译名差异:如存在音译名差异,说明"建议比对多种音译形式,降低漏筛风险"
名单更新延迟:如名单可能更新,说明"建议定期更新黑名单数据库,确保筛查准确性"
跨境筛查:如涉及跨境业务,说明"需同时筛查多国制裁名单,确保合规"
监管法规:
制裁名单来源:
行业标准:
Python 黑名单筛查示例:
import pandas as pd
from fuzzywuzzy import fuzz
def exact_match(client_data, blacklist):
"""
精确匹配
参数:
client_data: 客户数据 DataFrame
blacklist: 黑名单 DataFrame
返回:
命中结果 DataFrame
"""
# 证件号码精确匹配
merged = pd.merge(
client_data,
blacklist,
on='id_number',
how='inner',
suffixes=('_client', '_blacklist')
)
merged['match_type'] = '精确匹配'
merged['confidence'] = 100
return merged
def fuzzy_match(client_data, blacklist, threshold=85):
"""
模糊匹配(姓名相似度)
参数:
client_data: 客户数据 DataFrame
blacklist: 黑名单 DataFrame
threshold: 相似度阈值
返回:
命中结果 DataFrame
"""
matches = []
for _, client in client_data.iterrows():
for _, bl in blacklist.iterrows():
# 姓名相似度
name_score = fuzz.ratio(client['name'], bl['name'])
if name_score >= threshold:
matches.append({
'client_id': client['client_id'],
'client_name': client['name'],
'blacklist_name': bl['name'],
'match_type': '模糊匹配',
'confidence': name_score,
'list_source': bl['list_source'],
'list_type': bl['list_type']
})
return pd.DataFrame(matches)
def screen_blacklist(client_data, blacklist, exact=True, fuzzy=True):
"""
黑名单筛查主函数
参数:
client_data: 客户数据 DataFrame
blacklist: 黑名单 DataFrame
exact: 是否进行精确匹配
fuzzy: 是否进行模糊匹配
返回:
筛查结果 DataFrame
"""
results = []
if exact:
exact_results = exact_match(client_data, blacklist)
results.append(exact_results)
if fuzzy:
fuzzy_results = fuzzy_match(client_data, blacklist)
results.append(fuzzy_results)
if results:
all_results = pd.concat(results, ignore_index=True)
all_results = all_results.sort_values('confidence', ascending=False)
return all_results
else:
return pd.DataFrame()
# 使用示例
if __name__ == '__main__':
# 假设数据
clients = pd.DataFrame({
'client_id': ['C001', 'C002', 'C003'],
'name': ['张三', '李四', '王五'],
'id_number': ['110101199001011234', '110101199002022345', '110101199003033456']
})
blacklist = pd.DataFrame({
'name': ['张三', '李四某', '赵六'],
'id_number': ['110101199001011234', '', ''],
'list_source': ['OFAC', '内部', '监管'],
'list_type': ['制裁', '违约', '禁入']
})
results = screen_blacklist(clients, blacklist)
print(results)
SQL 查询示例:
-- 黑名单筛查查询
SELECT
c.client_id,
c.client_name,
c.id_number,
b.blacklist_name,
b.id_number as blacklist_id,
b.list_source,
b.list_type,
CASE
WHEN c.id_number = b.id_number AND c.id_number != '' THEN '精确匹配'
WHEN c.client_name = b.blacklist_name THEN '姓名精确'
ELSE '模糊匹配'
END as match_type,
CASE
WHEN c.id_number = b.id_number AND c.id_number != '' THEN 100
WHEN c.client_name = b.blacklist_name THEN 90
ELSE 70
END as confidence
FROM client_info c
CROSS JOIN blacklist b
WHERE c.status = 'active'
AND (
c.id_number = b.id_number
OR c.client_name = b.blacklist_name
)
ORDER BY confidence DESC;