修复任务详情字段过滤契约

This commit is contained in:
andy
2026-07-13 08:50:06 +08:00
parent 890565d43f
commit b05001e481
7 changed files with 36 additions and 4 deletions

View File

@@ -397,6 +397,7 @@ Content-Type: application/json
- Parent split 父事件展示为 `Cancel Allotment / cancel_allotment_control_block`,不再展示独立 Parent Cancel Booking 卡。
- 任务列表筛选不提供 `linked_parent_release_after_child_split`;新开发阶段只展示 `S10/S99` 筛选,不再展示旧 `S000/S999` 筛选项。
- 任务详情字段控件以 `M002-task-field-control-contract-v1.md` 为准:前端优先消费后端 `fields[]` 中的 `control_type``edit_scope``write_target``options_source``raw_readonly`,旧矩阵开关只作为兼容兜底。
- 任务详情 `fields[]` 由后端按当前任务 active definition 过滤后返回,前端不得自行补齐完整字段矩阵;后端未返回的字段对当前任务视为不展示、不校验、不提交。
- type-known manual review 的 `missing_fields[]` 不应统一渲染为普通文本输入;前端应按 `field_pointer` 匹配 `fields[]`,复用对应字段控件并提交 `review_resolution.field_overrides[]`
- 前端不得自行硬编码 PMS 房型目录、Rate Code 全集、Fix Charge 枚举或 P1/P2 未冻结字段;选项来源未接入时按只读、容错或“目录待接入”处理。
@@ -447,6 +448,7 @@ V3 P0.1 不做以下事项:
- `POST /api/reservation/tasks/{taskId}/manual-review-resolutions` 支持字段修正、当前订单归属确认、JSON Pointer 到可编辑字段校验、READY 流转、confirmed payload 写入、两条 OPERA 模拟操作创建和审计记录。
- `POST /api/reservation/tasks/{taskId}/manual-review-resolutions``field_overrides[]` 已支持 `field_pointer``field_path` 两种定位方式;`field_path` 可为 P0 主路径或旧扁平路径,成功后响应归一化到 P0 主 `field_path`
- 任务详情 `fields[]` 已新增 `control_type``edit_scope``write_target``options_source``raw_readonly``control_hint`,用于前端字段控件和同卡复核输入渲染。
- 任务详情 `fields[]` 已与保存草稿、最终确认和复核解阻使用同一套 active definition 规则;已按 `visible``result_type``task_type``task_subtype``display_condition` 过滤。
- `room_items[0]` 字段第一版已返回 P0 JSON Pointer 和控件契约:房量为 `number`PMS 房型代码为 `select + active_pms_room_type_catalog`,房型原文 `room_type_raw` 作为 raw 证据只读。
- type-known manual review 的缺失字段返回 `edit_scope=manual_review_only``write_target=review_resolution.field_overrides`;只读诊断字段、源邮件通知卡和 route/result/task 字段不返回可编辑控件。
- `CANCEL_ALLOTMENT` 第一版复用字段矩阵中的 `Cancel Booking 卡 / cancel_allotment_control_block` 规则Parent / Allotment 复核中 `/case_keys/block_code``case_keys.group_code` 别名处理,前端只需要提交任务详情 `fields[]` 暴露的 `case_keys.group_code`。后端会派生 `cancel_object_type=allotment_control_block` 并接受 `cancel_scope=entire_allotment_control_block`