feat: add risk review phase
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 阶段 6:风控与审核实施计划
|
||||
|
||||
## 目标
|
||||
|
||||
发送前有规则、有原因、有闭环。阶段 6 聚焦短信任务进入发送链路前的风险评估与审核决策,不实现真实发送 worker。
|
||||
|
||||
## 实施范围
|
||||
|
||||
1. 风控规则配置。
|
||||
- 建立租户级和平台级规则模型。
|
||||
- 内置第一版默认阈值。
|
||||
- 支持 `block`、`manual_review`、`allow` 动作。
|
||||
2. 发送前风险评估。
|
||||
- 单任务最大号码数。
|
||||
- 重复号码比例。
|
||||
- 非法号码比例。
|
||||
- 黑名单命中比例。
|
||||
- 非工作时间大批量营销发送。
|
||||
- 短时间任务创建频控。
|
||||
- 模板变量异常。
|
||||
3. 风控命中记录。
|
||||
- 记录规则编号、规则名称、阈值、实际值、处理动作、可读原因。
|
||||
- 关联租户、应用、模板和短信任务。
|
||||
4. 短信审核闭环。
|
||||
- 风控直接拒绝时,任务进入 `rejected` 并返回拒绝原因。
|
||||
- 风控要求人工审核时,任务进入 `pending_review` 并展示审核原因。
|
||||
- 管理端可通过或拒绝审核,并记录审核原因。
|
||||
|
||||
## 目录结构建议
|
||||
|
||||
```text
|
||||
api/src/risk-review/
|
||||
risk-review.module.ts
|
||||
risk-review.service.ts
|
||||
client-risk-review.controller.ts
|
||||
admin-risk-review.controller.ts
|
||||
```
|
||||
|
||||
## API 边界
|
||||
|
||||
客户端:
|
||||
|
||||
- `POST /api/client/risk-review/tasks/evaluate`:创建短信发送预审任务并执行风控评估。
|
||||
- `GET /api/client/risk-review/tasks`:查询短信任务与拒绝/审核原因。
|
||||
|
||||
管理端:
|
||||
|
||||
- `GET /api/admin/risk-review/rules`:查看风控规则。
|
||||
- `POST /api/admin/risk-review/rules`:创建或调整风控规则。
|
||||
- `GET /api/admin/risk-review/hits`:查看风控命中记录。
|
||||
- `GET /api/admin/risk-review/tasks/pending`:查看待审核任务和审核原因。
|
||||
- `POST /api/admin/risk-review/tasks/:id/approve`:审核通过。
|
||||
- `POST /api/admin/risk-review/tasks/:id/reject`:审核拒绝。
|
||||
|
||||
## 验收标准
|
||||
|
||||
1. 命中风控规则时,必须记录规则编号、规则名称、阈值、实际值、处理动作。
|
||||
2. 进入审核的任务必须展示审核原因。
|
||||
3. 直接拒绝的任务必须向客户端返回可读原因。
|
||||
4. `npm run verify:phase6` 通过。
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# 阶段 6:风控与审核进度记录
|
||||
|
||||
## 当前状态
|
||||
|
||||
- 状态:进行中
|
||||
- 开始时间:2026-07-01
|
||||
|
||||
## 计划步骤
|
||||
|
||||
1. 创建阶段 6 计划和验收标准。已完成,`npm run verify:phase6` 基线通过,BullMQ 端到端约 875.04 TPS。
|
||||
2. 增加风控规则、短信发送预审任务、风控命中记录模型。已完成,`npm --prefix api run prisma:generate` 通过。
|
||||
3. 实现风控评估服务与客户端预审接口。已完成,`npm --prefix api run build` 通过。
|
||||
4. 实现管理端规则配置、命中记录、短信审核接口。已完成,`npm --prefix api run build` 通过。
|
||||
5. 运行 Prisma generate、API build、阶段验证脚本和 API health smoke。已完成。
|
||||
|
||||
## 验收记录
|
||||
|
||||
- 风控规则模型:已建立 `RiskRule`,支持平台默认规则和租户覆盖规则。
|
||||
- 短信发送预审任务:已建立 `SmsSendTask`,记录任务状态、审核原因、拒绝原因和基础风险指标。
|
||||
- 风控命中记录:已建立 `RiskHitRecord`,记录规则编号、规则名称、阈值、实际值、处理动作和可读原因。
|
||||
- 客户端接口:
|
||||
- `POST /api/client/risk-review/tasks/evaluate`
|
||||
- `GET /api/client/risk-review/tasks`
|
||||
- 管理端接口:
|
||||
- `GET /api/admin/risk-review/rules`
|
||||
- `POST /api/admin/risk-review/rules`
|
||||
- `GET /api/admin/risk-review/hits`
|
||||
- `GET /api/admin/risk-review/tasks`
|
||||
- `GET /api/admin/risk-review/tasks/pending`
|
||||
- `POST /api/admin/risk-review/tasks/:id/approve`
|
||||
- `POST /api/admin/risk-review/tasks/:id/reject`
|
||||
- `npm run verify:phase6` 通过。
|
||||
- 队列契约校验通过。
|
||||
- Go Gateway `go test ./...` 通过。
|
||||
- BullMQ Spike:15000 条消息、并发 500、端到端约 795.83 TPS,满足 500 条/秒指标。
|
||||
- Prisma Client 生成通过。
|
||||
- API build 通过。
|
||||
- 前端 build 通过,仍存在 Vite chunk size warning。
|
||||
- API health smoke 通过:`/api/health` 返回 `ok`。
|
||||
|
||||
## 阶段 6 验收状态
|
||||
|
||||
- 命中风控规则时记录规则编号、规则名称、阈值、实际值、处理动作:已完成。
|
||||
- 进入审核的任务必须展示审核原因:已完成,`SmsSendTask.reviewReason` 与 `riskHits` 一起返回。
|
||||
- 直接拒绝的任务必须向客户端返回可读原因:已完成,`evaluateTask` 返回 `reason`,并写入 `SmsSendTask.rejectReason`。
|
||||
|
||||
## 结论
|
||||
|
||||
阶段 6 已完成。下一阶段可进入阶段 7:发送链路。
|
||||
|
||||
## 风险与说明
|
||||
|
||||
- 当前阶段只实现发送前预审与审核闭环,不启动真实发送链路;真实入队和 Send Worker 放到阶段 7。
|
||||
- 本地没有 PostgreSQL 服务时,仅运行 Prisma Client 生成和 TypeScript 构建,不执行数据库迁移。
|
||||
Reference in New Issue
Block a user