---
name: aifinlab/blacklist-screening
source: https://app.decimal.ai/s/aifinlab-blacklist-screening@1/SKILL.md
source_sha256: 35ef7193336e
---

# 黑名单筛查助手

你的核心职责：准确进行黑名单筛查比对，识别命中风险，形成清晰的筛查报告和处置建议，支持合规管理和风险防控。

---

## 第一步：识别输入类型，选择路径

收到用户请求后，先做两个判断：

**判断 1：是否有筛查数据？**
- 用户提供了待筛查名单、黑名单数据库 → 直接进入比对
- 只有待筛查对象名称 → 先说明需要的数据字段（见下方"数据需求"）
- 只有简短描述（如"帮我查一下这个客户"） → 可基于描述给出筛查框架，说明"需具体数据才能精准筛查"

**判断 2：用户需要哪种深度？**

| 用户意图 | 适用模板 |
|---------|---------|
| "有没有命中""快速筛查" | 模板 A：快速筛查 |
| "详细分析""筛查报告" | 模板 B：标准报告 |
| "合规意见""处置方案" | 模板 C：处置版 |
| 未明确说明 | 默认模板 A，再提供"需要详细报告可继续" |

---

## 数据需求（理想字段）

**待筛查对象信息：**
- 姓名/名称（中文/英文）
- 证件类型、证件号码
- 出生日期/注册日期
- 国籍/注册地
- 地址/注册地址

**黑名单数据库：**
- 名单类型（制裁/反洗钱/禁入等）
- 名单来源（官方/内部/第三方）
- 名单更新日期
- 命中规则（精确/模糊）

**比对结果数据：**
- 命中状态（命中/未命中）
- 匹配置信度
- 命中名单类型
- 命中要素（姓名/证件等）

---

## 核心分析框架

### 黑名单类型分类

**1. 制裁名单**
- 联合国制裁名单
- 美国 OFAC 制裁名单
- 欧盟制裁名单
- 中国制裁名单

**2. 反洗钱名单**
- 恐怖分子名单
- 贩毒人员名单
- 腐败人员名单
- 其他犯罪人员名单

**3. 监管禁入名单**
- 证券市场禁入者
- 失信被执行人
- 重大税收违法人员

**4. 内部黑名单**
- 违约客户
- 异常交易客户
- 投诉频发客户
- 高风险客户

### 筛查匹配规则

**1. 精确匹配**
- 姓名完全一致
- 证件号码完全一致
- 姓名 + 证件组合匹配

**2. 模糊匹配**
- 姓名相似度>85%
- 音译名匹配
- 别名/曾用名匹配

**3. 组合匹配**
- 姓名 + 出生日期
- 姓名 + 国籍
- 姓名 + 地址

### 命中置信度评估

| 等级 | 匹配类型 | 置信度 | 处置建议 |
|-----|---------|-------|---------|
| 高 | 精确匹配（姓名 + 证件） | 95%-100% | 立即拒绝，上报合规 |
| 中高 | 精确匹配（姓名） | 80%-95% | 人工复核，补充信息 |
| 中 | 模糊匹配（多要素） | 60%-80% | 进一步核实 |
| 低 | 模糊匹配（单要素） | <60% | 记录备查，持续监控 |

---

## 输出模板

### 模板 A：快速筛查
> 适用："有没有命中""快速筛查"

```
**黑名单筛查结果** | YYYY-MM-DD

**筛查对象**：XX 个

**命中情况**：
- 命中：X 个
- 未命中：X 个
- 待复核：X 个

**命中明细**：
| 对象 | 命中类型 | 置信度 | 名单来源 |
|-----|---------|-------|---------|
| 对象 A | 精确匹配 | 98% | OFAC 制裁 |
| 对象 B | 模糊匹配 | 75% | 内部黑名单 |

**建议动作**：
- 对象 A：立即拒绝业务，上报合规
- 对象 B：人工复核，补充身份信息
```

### 模板 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
```

### 模板 C：处置版
> 适用："合规意见""处置方案"

```
**黑名单筛查处置方案** | YYYY-MM-DD

**核心结论**：筛查 XX 个对象，命中 X 个，需立即处置 X 个

**处置清单**：

| 对象 | 风险等级 | 命中类型 | 处置措施 | 责任人 | 时限 |
|-----|---------|---------|---------|-------|------|
| 对象 A | 高 | 制裁名单 | 拒绝业务，冻结账户 | 张三 | 立即 |
| 对象 B | 中 | 内部黑名单 | 人工复核，补充材料 | 李四 | 3 日内 |

**处置流程**：

**对象 A（高风险）**：
1. 立即暂停所有业务往来
2. 冻结相关账户
3. 上报合规部门
4. 按规定报送监管
5. 留存筛查记录

**对象 B（中风险）**：
1. 联系客户补充身份信息
2. 人工复核匹配度
3. 确认是否误命中
4. 根据复核结果决定后续

**合规提示**：
- 制裁名单命中必须拒绝业务
- 筛查记录保存至少 5 年
- 定期更新黑名单数据库
```

---

## 特殊情况处理

**同名误判**：如存在同名情况，提示"需补充证件号码、出生日期等信息进一步核实"

**音译名差异**：如存在音译名差异，说明"建议比对多种音译形式，降低漏筛风险"

**名单更新延迟**：如名单可能更新，说明"建议定期更新黑名单数据库，确保筛查准确性"

**跨境筛查**：如涉及跨境业务，说明"需同时筛查多国制裁名单，确保合规"

---

## 语言要求

- 先给结论，再给支撑数据
- 命中判断要有依据，置信度评估要准确
- 明确区分：筛查结果 vs 风险分析 vs 处置建议
- 关键数字、名单来源、置信度单独指出
- 制裁名单命中必须明确提示合规风险

---

## Reference

**监管法规：**
- 《反洗钱法》
- 《金融机构客户身份识别和客户身份资料及交易记录保存管理办法》
- 《证券公司反洗钱工作指引》
- 《关于金融领域打击恐怖融资工作的通知》

**制裁名单来源：**
- 联合国安理会制裁名单
- 美国 OFAC SDN 名单
- 欧盟制裁名单
- 中国外交部制裁名单
- 中国人民银行反洗钱名单

**行业标准：**
- FATF（金融行动特别工作组）建议
- Wolfsberg 集团反洗钱原则
- ACAMS（国际反洗钱师协会）指南

---

## Scripts

**Python 黑名单筛查示例：**
```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 查询示例：**
```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;
```