修复V4房型信息复核与自动DEF展示

This commit is contained in:
andy
2026-07-21 10:40:44 +07:00
parent c28130b3da
commit de6a52d708
10 changed files with 270 additions and 50 deletions

View File

@@ -571,16 +571,16 @@ Room Information 卡展示模型:
- `ROOM_INFORMATION` 卡只由 `NEW_BOOKING``UPDATE_BOOKING``CANCEL_BOOKING` 三类 event 触发;`TRACE_RESERVATION_NOTES``ROOMING_LIST``PAYMENT` 不触发房型信息卡。
- SuperAgent 仍只输出字段契约中的业务字段。Nights、Breakfast、Group Booking Status、Block ID、Confirmation Number 和 Adult 不由 SuperAgent 输出;其中 Adult 第一版不在卡内展示。
- 后端已在 `GET /api/reservation/order-tasks/{orderTaskId}` 的 Room Information 业务卡 `display_payload.room_information` 中补稳定展示模型,结构为 `event_type``booking_type``current_values``proposed_values``final_values``change_summary[]``group_booking_status_options[]`。前端按该展示模型渲染业务 UI不再从 Agent raw payload / `target_order` 自行推导;`fields[]` 继续作为确认 / 复核的可编辑字段白名单。
- `fields[]` 的 Room Information 主路径统一为 `/room_information/final_values/...`,例如 `/room_information/final_values/arrival_date``/room_information/final_values/room_items/0/room_type_code`。确认接口收到该结构时,后端会从展示模型派生 `confirmed_payload_json.room_information.final_values`,并重新计算 `nights``breakfast_included``group_booking_status_label`只读字段、Agent `target_order`、Adult 和前端注入字段不会写入确认快照。
- 后端已在 `GET /api/reservation/order-tasks/{orderTaskId}` 的 Room Information 业务卡 `display_payload.room_information` 中补稳定展示模型,结构为 `event_type``booking_type``current_values``proposed_values``final_values``change_summary[]``group_booking_status_options[]`。前端按该展示模型渲染业务 UI不再从 Agent raw payload / `target_order` 自行推导;`fields[]` 继续作为确认 / 复核的可编辑字段白名单。`fields[].write_target` 对前端只表达请求体目标,例如 `confirmed_payload``review_resolution.field_overrides`,不暴露后端内部列名。
- `fields[]` 的 Room Information 主路径统一为 `/room_information/final_values/...`,例如 `/room_information/final_values/arrival_date``/room_information/final_values/room_items/0/room_type_code`。确认接口收到该结构时,后端会从展示模型派生 `confirmed_payload_json.room_information.final_values`,并重新计算 `nights``breakfast_included``group_booking_status_label`只读字段、Agent `target_order`、Adult 和前端注入字段不会写入确认快照。`REVIEW_REQUIRED` 状态下,当前卡白名单内业务字段可以返回 `editable=true` 并允许同一 pointer 走 `review-resolution`,不再限定只能修空值、`missing_fields[]` 或目录错误字段。
- `NEW_BOOKING`卡片展示创建后的最终值。Agent 提供 `target_order``arrival_date``departure_date``rate_code``booking_scenario``room_items[]`Fit 可提供 `guest_name`;后端派生 `nights``breakfast_included` 和 Group Booking Status。
- `UPDATE_BOOKING`:后端从本地订单投影读取当前值,用 Agent `after` 合并得到最终值;页面上方展示本次实际变化的 `change_summary[]`,例如 `入住日期2026-07-12 -> 2026-07-20`。如果日期变化导致 `nights` 变化,`nights` 也必须出现在差异区;字段区展示合并后的最终值。
- `CANCEL_BOOKING`:不使用 Agent 输出当前订单快照后端从本地订单投影读取当前值并只读展示用户只确认整单取消。Cancel 卡不允许编辑 Group Booking Status、Breakfast、日期、Rate Code 或房型房量。
- `nights` 由后端按酒店本地业务日期计算:`departure_date - arrival_date`,不涉及时区和 UTC日期缺失、非法或离店早于入住时`nights` 为空。第一版确认校验要求日期必填,后续如需更严格营业日规则另开 checkpoint。
- `breakfast_included` 是卡片展示和确认使用的布尔字段。Group 固定含早前端显示勾选且只读Fit 按 Rate Code 派生Rate Code 包含 `RB` 时含早,包含 `RO` 时不含早;如果 Rate Code 无法派生,前端显示必填勾选框,由用户确认是否含早。
- Group Booking Status 仅 Group 显示,稳定 code 为 `TEN``DEF``INQ`,前端显示 `TEN-Tentative``DEF-Definite``INQ-Inquiry`。New Group 默认 `TEN``booking_scenario=STANDARD | PROPOSAL` 仅保留为 Agent 场景参考,不映射 Group Booking Status。`NEW_BOOKING` / `UPDATE_BOOKING` 确认前可手动改选,`CANCEL_BOOKING` 只读。
- `ROOMING_LIST` 卡确认时,如果同订单为 Group后端已把 Group Booking Status 自动置为 `DEF`,即使此前为 `TEN``INQ`;该自动变更写入 `V4_ROOMING_LIST_AUTO_DEF` 业务审计。Fit 不显示也不变更 Group Booking Status。
- `target_order.locator_value` 不作为前端可编辑字段;订单归属错误时通过 V4 复核选择正确订单或创建正确订单投影,不直接改写 Agent 原始 `target_order.locator_value`。但 New Booking 创建 / 确认的最终订单投影字段允许编辑Group 显示并允许编辑 `group_block_name`,默认值来自 `target_order.locator_value``locator_type=GROUP_CODE`Fit 显示并允许编辑 `fit_name`,默认值来自 `guest_name ?? target_order.locator_value`。用户修改这些字段只影响本系统最终订单投影和确认快照,不回写 Agent 原始定位字段。
- `ROOMING_LIST` 卡确认时,如果同订单为 Group后端已把 Group Booking Status 自动置为 `DEF`,即使此前为 `TEN``INQ`;该自动变更写入 `V4_ROOMING_LIST_AUTO_DEF` 业务审计,并且刷新任务详情时 Room Information 的 `display_payload.room_information.final_values``confirmed_payload.room_information.final_values` 都以后端 DEF 后的确认快照为准。当前订单详情 `order_overview` 不返回 Group Booking Status 字段,仍只展示既有确认快照字段。Fit 不显示也不变更 Group Booking Status。
- `target_order.locator_value` 不作为前端可编辑字段,也不在普通任务详情的 Basic Information `display_payload` / `confirmed_payload` 中返回;订单归属错误时通过 V4 复核选择正确订单或创建正确订单投影,不直接改写 Agent 原始 `target_order.locator_value`。但 New Booking 创建 / 确认的最终订单投影字段允许编辑Group 显示并允许编辑 `group_block_name`,默认值来自 Agent `target_order.locator_value``locator_type=GROUP_CODE`Fit 显示并允许编辑 `fit_name`,默认值来自 `guest_name ?? target_order.locator_value`。用户修改这些字段只影响本系统最终订单投影和确认快照,不回写 Agent 原始定位字段。
- Block ID 和 Confirmation Number 第一版只读;存在本地投影或未来 PMS 结果时展示否则为空。Block ID 仅 Group 显示Confirmation Number 仅 Fit 显示。
V4 任务详情页第一版字段白名单:
@@ -601,7 +601,7 @@ Rooming List 卡事项确认规则:
- Rooming List 卡第一版只做事项确认不做名单解析、附件预览、Excel 生成或 PMS 导入。
- `ROOMING_LIST` event 不输出 `rows[]`、逐人名单、同住分组、18 列、Excel 或 PMS 导入参数,也不要求单独输出 `attachment_ids[]`
- 页面应展示卡片标题、状态、目标订单信息和“确认卡片”按钮;如需查看来源内容,仍通过本订单任务底部的 `SOURCE_MESSAGE_DISPLAY` 查看当前触发 SourceMessage 正文和附件摘要。
- 用户点击“确认卡片”表示已人工处理该 Rooming List 事项;该确认会更新 V4 卡片状态和订单任务派生状态;如果同订单为 Group 且存在可更新的已确认 Room Information 快照,后端同时覆盖该快照里的 `group_booking_status=DEF``group_booking_status_label=DEF-Definite`,不改变 Agent 原始 payload。没有可更新投影时确认仍成功只记录安全审计提示不临时创建不完整 Room Information。该动作不代表 M010 Rooming List Excel 已生成,也不代表 PMS / OPERA / OHIP 已执行。
- 用户点击“确认卡片”表示已人工处理该 Rooming List 事项;该确认会更新 V4 卡片状态和订单任务派生状态;如果同订单为 Group 且存在可更新的已确认 Room Information 快照,后端同时覆盖该快照里的 `group_booking_status=DEF``group_booking_status_label=DEF-Definite`,不改变 Agent 原始 payload,并写入可通过 V4 订单任务审计接口查询的 `V4_ROOMING_LIST_AUTO_DEF` 摘要。没有可更新投影时确认仍成功,只记录安全审计提示,不临时创建不完整 Room Information。该动作不代表 M010 Rooming List Excel 已生成,也不代表 PMS / OPERA / OHIP 已执行。
- 独立 Rooming List Excel 生成能力仍属于 M010 `/reservation/rooming-lists/new` 工具页面,第一版不嵌入 V4 Rooming List 卡。
Payment 卡附件展示规则: