Files
gaokao-volunteer-system/docs/P0_MINIMAL_API_CHANGES_2026-06-22.md
Hermes Agent cad78940ef
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
docs(6/21-6/24): 系统复审 + 全升级规划 + TestClient 覆盖报告
新增文档:
- reports/STRICT_SYSTEM_REVIEW_2026-06-23.md (滚动严格复审过程稿)
- reports/STRICT_SYSTEM_REVIEW_2026-06-24.md (汇总版, 149 passed)
- reports/TEST_CLIENT_COVERAGE_2026-06-23.md (主链路真实 TestClient 覆盖收口)
- docs/plans/2026-06-23-full-upgrade-optimization-plan.md (全升级优化计划)
- docs/COMPETITOR_SCREEN_ANALYSIS_WENXIN_QIANWEN_2026-06-21.md (竞品分析)
- docs/FIELD_MAPPING_AUDIT_FIRST_PROFILE_2026-06-21.md (首版字段映射审计)
- docs/PAGE_REDESIGN_CHECKLIST_2026-06-21.md (页面重设计清单)
- docs/REPORT_PROFILE_VERSION_RELATION_2026-06-22.md (报告版本关系)
- docs/P0_EXECUTION_TASK_BREAKDOWN_2026-06-22.md (P0 任务拆解)
- docs/P0_MINIMAL_API_CHANGES_2026-06-22.md (P0 最小 API 改动)
- docs/UPGRADE_EXECUTION_BOARD_2026-06-22.md (升级执行板)
- product/PRD_UPGRADE_2026-06-21.md (PRD 升级版)

CHANGELOG.md 同步本轮 commits
2026-06-25 09:28:23 +08:00

386 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P0_MINIMAL_API_CHANGES_2026-06-22
最后更新: 2026-06-22
状态词: P0 最小接口变更清单
真相源:
- `product/PRD_UPGRADE_2026-06-21.md`
- `docs/UPGRADE_EXECUTION_BOARD_2026-06-22.md`
- `docs/P0_EXECUTION_TASK_BREAKDOWN_2026-06-22.md`
> 本文只定义 P0 为了成立“审核优先主线”所需的最小接口与数据承接变更;不提前展开 P1 / P2。
---
## 1. 当前可复用接口盘点
当前已存在的关键接口 / 页面:
### 1.1 公开下单链
- `POST /api/public/orders`
- 返回:
- `order_id`
- `checkout_url`
- `portal_status_url`
- `portal_info_url`
当前作用:
- 创建订单
- 进入支付
- 进入 Portal 资料页 / 状态页
### 1.2 Portal 资料链
- `GET /portal/{token}/info`
- `POST /portal/{token}/info`
- `POST /portal/{token}/attachments`
当前作用:
- 四步资料向导
- 保存草稿 / 正式提交
- 上传已有方案附件
### 1.3 Portal 状态链
- `GET /portal/{token}/status`
- `GET /portal/{token}/report`
- `GET /portal/{token}/report.pdf`
当前作用:
- 看订单阶段
- 看报告 / PDF
### 1.4 当前主要限制
1. `POST /portal/{token}/info` 当前绑定 `IntakePayload`
2. `IntakePayload(mode=submit)` 当前要求至少一个偏好字段存在
3. 现有 `stage` 面向支付 / 补资料 / 交付,不面向审核结果分流
4. 现有接口无 `profile_minimum_complete` / `review_entry_source` / `review_followup_action` 语义
---
## 2. P0 最小接口策略
结论:
- **优先复用现有 Portal 链路**
- **最小新增页面域状态与轻量返回字段**
- **避免在 P0 修改订单六态状态机**
也就是:
1. 不新建整套用户系统接口
2. 先复用:
- `/portal/{token}/info`
- `/portal/{token}/attachments`
- `/portal/{token}/status`
3. 必要时新增轻量接口或返回字段,承接:
- 审核输入
- Step 1 最小建档
- 审核结果分流
---
## 3. P0 必改接口项
## 3.1 调整 `IntakePayload` 提交校验
### 当前问题
`data/orders/intake_schema.py` 当前在 `mode=submit` 时要求:
- `candidate_score`
- `candidate_rank`
- `candidate_subjects`
- 协议字段
- `candidate_interests`
- `target_cities`
- `target_majors`
- `university_preferences`
以上字段当前已不再作为 `mode=submit` 的阻塞校验P0 Step 1 最小提交仅要求省份 / 分数 / 位次 / 选科 + consent。
### P0 目标
P0 提交只要求:
- `candidate_province`
- `candidate_subjects`
- `candidate_score`
- `candidate_rank`
- 协议字段
### 变更建议
`IntakePayload(mode=submit)` 的“至少一个偏好字段”校验下放到 P1 语义,不再阻塞 P0。
### 影响
- Step 1 可独立提交
- 审核入口不再被偏好字段卡死
---
## 3.2 把 `candidate_province` 纳入 Portal info 提交链
### 当前问题
当前 Portal info 表单主提交字段中:
-`candidate_score`
-`candidate_rank`
-`candidate_subjects`
- **没有 Step 1 主视图里的 `candidate_province`**
而 PRD 已明确 Step 1 四字段必须包含省份。
### 变更建议
1.`IntakePayload` 增加 `candidate_province`
2.`/portal/{token}/info` 前端表单补 `candidate_province`
3.`submit_order_info()` 中把 `candidate_province` 写回:
- `order_intakes.payload_json`
- 必要时冗余回 `orders.candidate_province`
### 影响
- Step 1 四字段闭环成立
- 审核最小约束与档案最小建档一致
---
## 3.3 为 `/portal/{token}/info` 响应补最小建档状态
### 当前返回
`PortalIntakeResponse` 目前只有:
- `intake_status`
- `stage`
- `order_id`
### P0 缺口
P0 需要知道:
- Step 1 是否完成
- 页面提交后是否可回到审核链路
### 变更建议
`PortalIntakeResponse` 增加:
- `profile_minimum_complete: bool`
可选增加:
- `profile_missing_fields: string[]`
### 计算规则
当以下字段齐全时:
- `candidate_province`
- `candidate_subjects`
- `candidate_score`
- `candidate_rank`
`profile_minimum_complete = true`
---
## 3.4 新增或补充首页 / 状态页聚合返回字段
### 当前问题
首页目标态要求显示:
- 当前阶段
- 是否有最近审核结果
- 是否可看报告
- Step 1 是否完成
现有公开链路没有专门的工作台聚合结构。
### P0 建议
二选一:
#### 方案 A新增轻量聚合接口
建议新增:
- `GET /portal/{token}/workspace-summary`
最小返回:
- `stage`
- `profile_minimum_complete`
- `has_recent_review_result`
- `has_report`
- `primary_action`
#### 方案 B复用 `_build_portal_context()` 输出
如果暂不新开接口,则在现有状态页 / 首页承接层统一从 `_build_portal_context()` 衍生:
- `profile_minimum_complete`
- `has_report`
- `primary_action`
### 推荐
- P0 推荐 **方案 B 先落**
- 等首页工作台稳定后再决定是否抽独立聚合接口
---
## 3.5 定义审核输入最小承接结构
### 当前可复用资产
现有已存在:
- `existing_plan_summary`
- attachments 上传
### P0 目标
审核最小输入统一为:
- `existing_plan_summary`
- `attachments[]`
- `candidate_province`
- `candidate_subjects`
- `candidate_score`
- `candidate_rank`
### 变更建议
不急着在 P0 新建复杂审核对象表;先定义轻量审核输入契约,供页面和后端处理链共用。
建议文档化结构:
- `review_input_summary`
- `review_input_attachments`
- `review_constraints`
如果后端要临时落地,可先存在:
- `order_intakes.payload_json`
- 或单独轻量 JSON artifact
---
## 3.6 定义审核结果最小返回结构
### 当前问题
现有 Portal 链路没有“审核结果分流”的最小对象。
### P0 最小返回建议
新增轻量审核结果返回结构:
- `review_result_id`
- `risk_level`
- `top_findings[]`
- `recommended_action`
- `available_actions[]`
其中:
- `recommended_action ∈ {go_cwb, go_step1, go_full_plan}`
- `available_actions[]` 至少含三类入口
### 注意
P0 可以先把它定义成页面域结构,不强制先做完整持久化模型。
---
## 3.7 定义审核分流记录字段
### 当前缺口
现有代码中尚未实现:
- `review_entry_source`
- `review_followup_action`
### P0 建议
最小先定义语义,不必一开始改重 schema
- `review_entry_source ∈ {home, status, report, direct}`
- `review_followup_action ∈ {cwb, step1, full_plan, none}`
### 落地方式建议
P0 可先落在:
- 页面埋点事件
- 轻量 metadata 字段
- 或会话态 / 结果对象中
只要保证:
- 来源可追踪
- 分流动作可统计
---
## 4. P0 不建议现在改的接口项
以下内容不要提前混入 P0
1. Step 2-4 全量偏好字段接口
2. 政策中心完整 API
3. 同分段参考完整 API
4. 完整报告资产列表 API
5. 多版本方案管理 API
6. 订单六态状态机扩容
原因:
- 这些都属于 P1 / P2
- 先改只会扩大范围
---
## 5. 最小接口变更表
| 变更项 | 类型 | 当前状态 | P0 动作 | 必须性 |
| --- | --- | --- | --- | --- |
| `IntakePayload` 去掉偏好字段提交门槛 | 校验逻辑 | 与 P0 冲突 | 修改 | 必须 |
| `IntakePayload``candidate_province` | 请求字段 | 缺失 | 新增 | 必须 |
| `/portal/{token}/info` 表单补省份 | 页面 + 提交 | 缺失 | 修改 | 必须 |
| `/portal/{token}/info` 响应补 `profile_minimum_complete` | 响应字段 | 缺失 | 新增 | 建议 |
| 统一审核最小输入结构 | 契约定义 | 未定义 | 新增 | 必须 |
| 定义审核结果最小返回结构 | 契约定义 | 未定义 | 新增 | 必须 |
| 定义 `review_entry_source` | 状态 / 埋点语义 | 未定义 | 新增 | 必须 |
| 定义 `review_followup_action` | 状态 / 埋点语义 | 未定义 | 新增 | 必须 |
| 首页工作台聚合接口 | 新接口 | 无 | 可延后 / 先复用 | 可选 |
---
## 6. 推荐实现顺序
1. 先修改 `IntakePayload`,解除 P0 与当前提交校验冲突
2.`candidate_province` 接入 `/portal/{token}/info`
3. 定义 `profile_minimum_complete`
4. 定义审核输入 / 审核结果最小契约
5. 定义分流动作与来源字段
6. 最后再决定是否补首页工作台聚合接口
---
## 7. 下一步建议
1. 基于本文继续落《报告版本与档案版本关系说明》
2. 确认 `review_result` 是页面态还是轻量持久化对象
3. 确认 `profile_minimum_complete` 是纯派生字段还是落库存字段