# Kylin Notification - 法律合规文档

> **版本**: 1.1
> **最后更新**: 2026-06-20
> **适用范围**: 所有使用 kylin/notification 扩展包的系统

---

## 一、适用法律法规

### 1.1 《中华人民共和国个人信息保护法》(2021.11.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第六条 | 最小必要原则 | 通知内容仅包含必要信息，不做无关联推送 |
| 第二十八条 | 敏感个人信息处理规则 | 推送内容过滤身份证号/手机号/银行卡号等敏感信息 |
| 第四十四条 | 个人对其个人信息处理享有知情权、决定权 | `NotificationPreference` 模型记录用户对各渠道的授权同意状态；发送前 `checkConsent()` 校验 |
| 第四十七条 | 用户注销后应停止处理其个人信息 | `purgeForUser()` 清理通知记录、授权同意记录、推送设备信息 |

### 1.2 《中华人民共和国网络安全法》(2017.6.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十一条 | 采取监测、记录网络运行状态、网络安全事件的技术措施，日志留存 >= 180 天 | 通知日志全量记录（`NotificationLog`），审计日志写入 `kylin/audit-log` |
| 第四十二条 | 不得泄露个人信息 | 推送内容 `sanitizeContent()` 过滤敏感信息（身份证/手机号/银行卡号） |

### 1.3 《通信短信息服务管理规定》(2015.6.30)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第十八条 | 未经用户同意，不得向其发送商业性短信息 | 短信渠道发送前 `checkConsent()` 校验用户授权；默认拒绝，需用户主动授权 |
| 第二十条 | 短信息服务提供者应当记录短信息发送和接收时间、内容等信息 | `NotificationLog` 记录发送状态、消息ID、错误信息、原始响应 |

### 1.4 《互联网信息服务管理办法》(2000.9.25)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第十五条 | 不得制作、复制、发布、传播含有法律、行政法规禁止的内容 | 推送内容需通过敏感词过滤（建议集成 `kylin/word-filter`） |

### 1.5 《中华人民共和国数据安全法》(2021.9.1)

| 条款 | 要求 | 合规要点 |
|------|------|----------|
| 第二十七条 | 数据处理活动应建立健全全流程数据安全管理制度 | 通知日志、审计日志、授权同意记录全流程留存 |

---

## 二、行业规范

### 2.1 推送服务规范

- 支持多渠道：站内信/短信/邮件/微信/APP 推送
- 短信服务：阿里云短信、腾讯云短信（双通道容灾）
- APP 推送：极光推送、个推、友盟推送、FCM
- iOS 推送：APNs HTTP/2 Provider API
- 适配器模式：统一 `ChannelInterface` 接口

### 2.2 通知日志

- 每次推送记录状态和响应（`NotificationLog`）
- 日志包含渠道、目标、内容、状态、时间、消息ID、错误信息、原始响应
- 日志通过外键关联通知记录，通知删除时级联删除日志

### 2.3 授权同意管理

- 用户可对各渠道独立授权/撤销（`NotificationPreference`）
- 默认策略：站内信默认允许，其他渠道（短信/推送/邮件）默认拒绝
- 授权记录包含同意时间和撤销时间
- 系统级通知（如账号安全）可跳过授权校验

### 2.4 用户注销清理

- 用户注销时调用 `purgeForUser()` 清理：
  - 通知记录（`kylin_notifications`）
  - 授权同意记录（`kylin_notification_preferences`）
  - 通知发送日志（通过外键级联删除）
- 清理操作记录审计日志

---

## 三、合规检查清单

### 3.1 渠道支持

- [x] 阿里云短信
- [x] 腾讯云短信
- [x] 极光推送
- [x] 个推
- [x] 友盟推送
- [x] FCM
- [x] APNs
- [x] 微信模板消息

### 3.2 日志审计

- [x] 通知日志全量记录（`NotificationLog`）
- [x] 日志包含发送状态和响应
- [x] 审计日志写入 `kylin/audit-log`

### 3.3 授权同意

- [x] 用户授权同意机制（`NotificationPreference`）— PIPL 第 44 条
- [x] 发送前授权校验（`checkConsent()`）
- [x] 默认策略（站内信允许，其他渠道拒绝）
- [x] 系统级通知可跳过校验（`skip_consent_check`）

### 3.4 用户注销

- [x] 注销清理方法（`purgeForUser()`）— PIPL 第 47 条
- [x] 清理通知记录
- [x] 清理授权同意记录
- [x] 清理操作记录审计日志

### 3.5 内容安全

- [x] 敏感信息过滤（`sanitizeContent()`）— 网络安全法第 42 条
- [x] 身份证号过滤
- [x] 手机号过滤
- [x] 银行卡号过滤

### 3.6 合规要求

- [x] 用户授权推送
- [x] 短信发送日志留存
- [x] 用户注销后停止推送

---

## 四、代码检测报告

### 4.1 检测结果

| 检测项 | 状态 | 说明 |
|------|------|------|
| 阿里云短信 | ✅ 已通过 | `AliyunSmsChannel` |
| 腾讯云短信 | ✅ 已通过 | `TencentSmsChannel` 双通道容灾 |
| 极光推送 | ✅ 已通过 | `JPushChannel` |
| 个推 | ✅ 已通过 | `GeTuiChannel` |
| 友盟推送 | ✅ 已通过 | `UMengChannel` |
| FCM | ✅ 已通过 | `FcmChannel` |
| APNs | ✅ 已通过 | `ApnsChannel` HTTP/2 |
| 微信模板消息 | ✅ 已通过 | `WechatTemplateChannel` |
| 通知日志 | ✅ 已通过 | `NotificationLog` 全量记录 |
| 适配器模式 | ✅ 已通过 | 统一 `ChannelInterface` |
| 用户授权同意 | ✅ 已通过 | `NotificationPreference` + `checkConsent()` |
| 用户注销清理 | ✅ 已通过 | `purgeForUser()` |
| 敏感内容过滤 | ✅ 已通过 | `sanitizeContent()` 过滤身份证/手机号/银行卡号 |
| 审计日志 | ✅ 已通过 | 所有关键操作写入 `kylin/audit-log` |

### 4.2 审计事件清单

| 事件 | 说明 | 法律依据 |
|------|------|------|
| `notification_sent` | 通知发送 | 《网络安全法》第二十一条 |
| `notification_consent_granted` | 用户授权同意 | 《个人信息保护法》第四十四条 |
| `notification_consent_revoked` | 用户撤销授权 | 《个人信息保护法》第四十四条 |
| `notification_user_purged` | 用户注销清理 | 《个人信息保护法》第四十七条 |

### 4.3 审查结论

**本包代码合规性良好。** 多渠道推送、通知日志、授权同意、用户注销清理、敏感内容过滤功能完整。

---

## 五、免责声明

本扩展包在代码层面实现了通知推送的合规基础能力，但不构成法律建议。使用方应：

1. 确保短信发送符合《通信短信息服务管理规定》
2. 获得用户明确授权后再推送（特别是商业性短信息）
3. 用户注销时及时调用 `purgeForUser()` 清理数据
4. 咨询专业法律顾问，确保系统整体合规
5. 建议集成 `kylin/word-filter` 进行敏感词过滤
