SOP-505:订单添加政策补差款审批
标准 SOP 测试文档;每个任务(Task ID)代表一个独立的测试步骤,便于人工/自动化测试按序号完成并记录进度。
文档元数据
- 文档类型:SOP / Checklist
- 适用场景:订单项
ProductType=PRODUCT_TYPE_POLICY_COMPENSATION(政策补差款)提交时的两步审批流程 - 配置文件:
20260422_create_policy_compensation_item_review_template.sql(SOP-505 审批模板)20260422_rollback_policy_compensation_item_review_template.sql(回滚脚本)- 创建者:财务 / 运营 / QA
- 最近更新时间:2026-04-24
- 相关接口定义:参考
crm.swagger.json中OrderService与ReviewService模块(特别是POST /api/v1/orders、GET /api/v1/reviews/{flow_id}、POST /api/v1/reviews/{flow_id}/actions)
工作流概述
流程图
graph LR
A[提交订单含政策补差项] --> B[逐级领导审批<br/>all 模式]
B --> C[财务审批<br/>any 模式]
C -->|通过| D[OrderItem.status=SUCCESS]
C -.->|驳回| E[OrderItem.status=REJECTED]
审批角色
| 步骤 | 审批人 | required_mode | 说明 |
|---|---|---|---|
| 逐级领导审批 | 提交人所在部门向上所有层级 leader | all |
depth=-1 全层级串行;skip_roles=[u:admin];多层时需每层都 approve |
| 财务审批 | 往来会计 / 总账会计 / 税务会计 / 财务主管 / 财务总 | any |
任一财务 position 通过即可 |
核心配置(模板 SOP-505)
- 触发事件:
order.items.add_policy_compensation - 资源类型:
model.OrderItem - on_approved_actions:
update_status → OrderItem.status = "SUCCESS" - on_rejected_actions:
update_status → OrderItem.status = "REJECTED"
前置条件
| 条件 | 检查方式 |
|---|---|
| 已使用有权限的用户登录 | 登录成功,订单菜单可见 |
| SOP-505 审批模板已加载 | SELECT id FROM review_templates WHERE sop_number='SOP-505' AND is_active=1 返回 1 行 |
已存在 ProductType=PRODUCT_TYPE_POLICY_COMPENSATION 的产品 |
SELECT id,name FROM products WHERE type='PRODUCT_TYPE_POLICY_COMPENSATION' 至少 1 条 |
| 提交人所在部门向上至少有 1 个能登录的 leader | department_leaders JOIN departments 递归查到可登录用户 |
| 财务 position 有能登录的用户(同 SOP-604) | SELECT username FROM users WHERE position IN ('往来会计','总账会计','税务会计','财务主管','财务总') |
任务矩阵
任务 T1:创建订单并提交政策补差项
入口:CRM 菜单 → 订单 → 新建订单
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:新建订单 | 选客户/账户 | 订单表单展开 | 页面展示 | 截图 | [ ] |
步骤 2 |
| 步骤2:添加订单项 | 选产品 ProductType=PRODUCT_TYPE_POLICY_COMPENSATION,填金额 / 日期 / 备注 |
订单项行展示 | 字段回显 | 截图 | [ ] |
步骤 3 |
| 步骤3:提交订单 | 点击"提交" | 订单创建 + 一个 review flow 触发 | trans_orders 新行 + review_instances 新 flow,resource_type='model.OrderItem', template.sop_number='SOP-505' |
截图 | [ ] |
任务 T2 |
| 步骤4:边界——非政策补差产品 | ProductType=PRODUCT_TYPE_RECHARGE_CASH |
不触发 SOP-505 | review_instances 不含 SOP-505 flow | 截图 | [ ] |
— |
| 步骤5:边界——同订单含多个政策补差项 | N 个 POLICY_COMPENSATION 订单项 | 触发 N 个独立 flow | N 个 SOP-505 flow | 截图 | [ ] |
— |
任务 T2:查看 review 详情
入口:审批中心 → 我发起的
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:打开审批详情 | 点击 SOP-505 flow | 页面加载详情 | 页面标题 "订单添加政策补差款审批" | 截图 | [ ] |
步骤 2 |
| 步骤2:核对 payload | — | 订单项扁平字段:金额/产品/备注/客户名 | 肉眼核对 | 截图 | [ ] |
任务 T3 |
| 步骤3:核对当前步骤 | — | current_step=1, status=REVIEWING, 当前审批人为 leader |
DB 查询 review_instances |
截图 | [ ] |
— |
任务 T3:逐级领导审批(step 1, all 模式)
入口:审批中心 → 待我审批(提交人各层级 leader 依次登录)
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:Level-0 leader 登录 | 直属部门 leader | 待审批列表含该 flow | 列表查询 | 截图 | [ ] |
步骤 2 |
| 步骤2:Level-0 通过 | 点击"通过" | 生成下一层级 task(仍 step_order=1) | review_tasks 新增记录 |
截图 | [ ] |
步骤 3 |
| 步骤3:Level-1 leader 登录 | 上级部门 leader | 出现新待审批 | 列表查询 | 截图 | [ ] |
步骤 4 |
| 步骤4:Level-N 全部通过 | 直到最高层级 | current_step=2 |
review_instances.current_step |
截图 | [ ] |
任务 T4 |
| 步骤5:任意一层驳回 | 某层 leader 点"驳回" | review_instances.status=REJECTED + OrderItem.status=REJECTED |
DB + 订单项状态查询 | 截图 | [ ] |
— |
| 步骤6:admin 跳过 | 若某层是 u:admin 角色 |
跳过该层(不生成 task) | 无 task 产生 | 截图 | [ ] |
— |
任务 T4:财务审批(step 2, any 模式)
入口:审批中心 → 待我审批(任一财务 position 登录)
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:财务登录 | position ∈ 财务列表 | 待审批列表含该 flow | 列表查询 | 截图 | [ ] |
步骤 2 |
| 步骤2:通过 | 点击"通过" | review_instances.status=APPROVED + 触发 on_approved_actions |
DB 查询 | 截图 | [ ] |
任务 T5 |
| 步骤3:驳回 | 点击"驳回"(另一测试用例) | review_instances.status=REJECTED + 触发 on_rejected_actions |
DB 查询 | 截图 | [ ] |
— |
任务 T5:验证 OrderItem 状态联动
入口:MySQL 直查
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:APPROVED 路径 | 审批通过 | OrderItem.status='SUCCESS' |
SELECT status FROM order_items WHERE id=ITEM_ID |
截图 | [ ] |
步骤 2 |
| 步骤2:REJECTED 路径 | 审批驳回 | OrderItem.status='REJECTED' |
同上 | 截图 | [ ] |
步骤 3 |
| 步骤3:action 失败感知 | 若 update_status 失败 | OrderItem.err_msg 写入错误信息(SOP-604 同路径已修复 helper.go 静默吞错) |
SELECT err_msg FROM order_items WHERE id=ITEM_ID |
截图 | [ ] |
— |
任务 T6:审批历史与日志
入口:工作流详情页 → 审批记录
| Action Steps | Input / Payload | 预期结果 | 验证方式 | 证据 | 状态 | 下游任务 |
|---|---|---|---|---|---|---|
| 步骤1:查看审批记录 | 打开审核历史 | 显示每位 leader + 财务审批的人/时间/结果 | review_actions 有完整记录 |
截图 | [ ] |
— |
API 参考
相关接口
| 接口 | 方法 | 描述 |
|---|---|---|
/api/v1/orders |
POST | 创建订单(含政策补差项时触发 SOP-505) |
/api/v1/reviews/{flow_id} |
GET | 审批详情 |
/api/v1/reviews/{flow_id}/actions |
POST | approve / reject |
/api/v1/reviews/{flow_id}/history |
GET | 审批历史 |
测试数据示例
成功案例(订单项)
{
"product_id": 123,
"product_type": "PRODUCT_TYPE_POLICY_COMPENSATION",
"amount": 500,
"memo": "补差款测试"
}
审批通过后 OrderItem 状态
SELECT id, product_type, status, err_msg
FROM order_items
WHERE id = ITEM_ID;
-- 预期:status='SUCCESS', err_msg=NULL
失败案例
| 场景 | 预期行为 |
|---|---|
| 订单项产品类型不是 POLICY_COMPENSATION | 不触发 SOP-505 |
| SOP-505 模板未配置 | no matching template found 错误被吞(不阻断订单创建),订单项状态保持提交态 |
| 审批驳回 | OrderItem.status=REJECTED |
| 审批通过但 update_status action 失败 | OrderItem.err_msg 填写错误信息;状态保持 REVIEWING |
异常处理
| 异常场景 | 预期行为 | 处理方法 |
|---|---|---|
| 订单创建 OK 但找不到 SOP-505 flow | 模板未加载 / event 拼写 | 重跑 20260422_create_policy_compensation_item_review_template.sql |
| step1 卡住不进 step2 | all 模式要求每层 leader 都通过 |
登录每一级 leader 依次通过;u:admin 层会被 skip |
| step2 无人审批 | 当前环境无财务 position 用户 | 补财务 position 账号 |
| APPROVED 后 OrderItem 仍是 REVIEWING | update_status action 失败 | 查 order_items.err_msg;或 server 日志 |
进度采集模板
| 任务ID | 任务名称 | 执行人 | 开始时间 | 结束时间 | 状态 | 备注 |
|---|---|---|---|---|---|---|
| T1 | 创建订单并提交政策补差项 | ⬜ | ||||
| T2 | 查看 review 详情 | ⬜ | ||||
| T3 | 逐级领导审批 | ⬜ | ||||
| T4 | 财务审批 | ⬜ | ||||
| T5 | 验证 OrderItem 状态联动 | ⬜ | ||||
| T6 | 审批历史与日志 | ⬜ |
附录
相关配置文件
migrations/20260422_create_policy_compensation_item_review_template.sql- SOP-505 模板migrations/20260422_rollback_policy_compensation_item_review_template.sql- 回滚
相关文档
docs/SOP/sop-501-discount-adjust.md- 折扣率调整docs/SOP/sop-503-batch-policy-label-adjust.md- 批量政策标签docs/SOP/sop-504-batch-account-policy-label.md- 批量账户政策标签docs/SOP/sop-604-external-payment.md- 外采付款审批
关联代码
services/order/service.go:1712-1729— OrderItem 提交时根据ProductType触发 SOP-505internal/review/executor/action_executor.go#executeUpdateStatus— on_approved / on_rejected action 实现
文档版本:v1.0.0 最后更新:2026-04-24 维护者:财务团队 / 运营团队 / QA