---
id: 010
title: 数据生命周期合规（注销 / 导出 / 保留期）
status: closed
labels: [compliance, p0, privacy]
assignee: team-lead
created_at: 2026-04-23
closed_at: 2026-04-24
---

# #010 数据生命周期合规

## 背景

个人信息保护法 + GDPR 要求平台给用户：
- **删除权**：用户能完整删除所有个人数据
- **可携带权**：导出自己的全部数据
- **保留期透明**：说清楚数据存多久

## 进度

### ✅ 已完成（2026-04-24，commit 5cce95c）

`src/xiangqin/account.py` 新模块全路径覆盖：

| 操作 | 触发方 | CLI | 实现 |
|---|---|---|---|
| 软删（30d 冷静期） | 用户本人 | `xq unregister` | `account.unregister()` — 标 `users.deleted_at`，清 agent_gateway_url/hooks_token，清 sessions |
| 冷静期内撤回 | 用户邮件 → admin 跑 | `xq admin user reactivate` | `account.reactivate()` — grace 外 / 已 scrub 拒绝 |
| 数据导出 | 用户本人 | `xq profile export` | `account.export_data()` — profile/messages/blocks/reports/orders/photos（不含 phone_hash） |
| 过期硬删 | cron | `xq admin account purge-expired` | `account.purge_expired()` — 删 children，scrub users.phone_hash 成 'DELETED:'+id，**保 envelope_orders**（会计法 5 年） |
| 立即硬删（GDPR §17） | admin | `xq admin user hard-delete` | `account.hard_delete()` — 同 purge 路径但不走 grace |

测试：24 个新测（单元 19 + FastAPI 集成 5），全套 303 passed，coverage 74.10%。

### ⏳ 未来 followup（非阻塞）

- cron 调度：目前靠 admin 手动 `xq admin account purge-expired`。后续可挂 systemd timer 或 aliyun 函数计算日调。先人工跑观察。
- 邮件通道正式化：冷静期内撤回目前靠 yarnb@qq.com，未来可做 admin web UI。

## 相关

P0-2 of blueprint。
