Files
Wyndham-RSVN-0918/docs/project/integrations/ohip-parameter-simulation-closure-20260918.md
T
2026-09-18 15:38:52 +08:00

63 lines
8.6 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.
# 参数接口与独立模拟验收交付
> 历史验收记录:下文为暂停TA之前的实现。当前无TA代码与新一轮47参数/3故障已完成,以[无TA交付](ohip-no-ta-local-test-20260918.md)为准;平台接口连接沙箱,现有环境更新由用户执行。
日期:2026-09-18;接续 9 月 17 日无人值守要求。上传 XML/EML、操作已有任务和更新现有服务仍由用户完成。本轮只读查证公共资料、修改本地代码并运行独立合成参数测试,没有创建子智能体。
## 参数与接口现在到哪一层
[逐参数对照表](ohip-parameter-interface-mapping-20260917.md)已更新到实际发布状态,修正 `blockProfileType` 角色字段,并去除过期“接口尚未发布”结论。公共目录有 184 个操作;消费端登记的 18 个非附件操作,其方法、路由、查询参数白名单全部匹配。
| 业务 | 参数及接口接入 | 真实环境边界 |
| --- | --- | --- |
| GROUP 新建 | Block Name/TA、日期、Account/Contact、Rate、含早、GTT/TA/GC/BTQR/TEN/THB → `postBlock/getBlock`;完整逐晚房量 → `putBlockAllocation/getBlockRoomRateGrid` | 需真实酒店代码、档案和房量控制;本轮未启用 |
| GROUP 修改 | 先按 Tour 查当前 Block;只更新日期/TA/完整房量,保留 Rate、状态、Account 等 | Initial/Actual 与人数分列独立;改期真实行为待酒店验收 |
| FIT 新建 | 姓名/CN → `postProfile/getProfile`;共享 Guest、Agent、日期/房型房数、Rate、Fixed Rate、Adult/GC/BTQR、Note → `postReservation/getReservation` | **TA 正式写读字段未获证,正式入口保持阻断** |
| FIT 修改 | `searchHotelReservations/getReservation/putReservation`;同类型有界新增房型复用实际 Guest 和创建接口,备注按历史证据定位 | 同一 TA 缺口;不能把模拟成功称为真实 Oracle 成功 |
| 源 Allotment 取消 | 查 Block、关联预订、下一状态 → `putBlockStatus` → 精确状态回查 | 酒店须提供 Block 原因和取消状态;关联客人/PM 或不完整查询继续阻止 |
| FIT→GROUP | 完整检查最终 GROUP 参数后,逐笔 `postCancelReservation`,查实取消,再复用 GROUP 新建 | 正式编排已接;仍需真实环境配置/验收 |
| GROUP→FIT | 同次确认内取消 Block 后创建 FIT 的编排和模拟链已跑通 | 因真实 FIT TA 契约未齐,正式入口在取消原团之前阻断 |
Account/Contact 和代码查询所需的 `getProfiles/getProfileRelationships/getRoomTypes/getRatePlansByHotel/getMarketCodes/getSourceCodes/getGuaranteeCodes/getPaymentMethodsLOV` 已发布;取消配置 `getCancellationCodes/getBlockCancellationReasons/getBlockStatusCodes` 及 `getOperaSettings` 也已发布。本应用业务运行使用受信的酒店映射,不会每次按名字猜档案或把配置查询自动变成权限授予。这里没有新增让平台同事重复封装的清单。
## 测试参数已补齐
模拟目录 [catalog.example.json](../../../server/src/test/local-fit-simulation/catalog.example.json) 只含合成姓名和 ID。房型/Rate 直接使用冻结目录的 **10 个房型、21 个 Rate Code**,没有复制一套选价逻辑。GRPA3 含早/BUALUANG、GRPA4 含早/LEELA 保持原已确认规则;餐厅不另造 Oracle 写入字段。
- 两个 Account 各有 Agent、关联 Contact 和同名 Company 干扰项。GROUP 必须是 Agent/AgentContact,FIT 必须是 TravelAgent 关联到 Agent;跨账户 Contact、Company 冒充 Agent、无效 Guest ID 会被模拟酒店拒绝。
- Market、Source、Reservation Type、Payment、Currency、Room Type、Rate Code 都在模拟酒店真正校验,错误请求不能改变已存对象。之前只有 Java 展示目录,现在不再仅靠显示名称判断接通。
- 新增独立模拟取消原因 `SYN-FIT-CXL`、`SYN-BLOCK-CXL`,状态 `TEN/ACT/SYN-CANCEL`、下一状态规则、`occupancy_split_enabled=false`。它们不是目标酒店真实值,不能复制到正式配置。
- Initial/Actual 两份网格独立保存,查询按 `roomAllocationCriteria` 精确筛选。未启用人数分列时总量使用 onePerson;Actual 不代表必须拆成人数列。开启分列的原生模拟校验独立覆盖,应用层仍要求明确完整四列,不能猜分配。
- 模拟 TA 专用属性 `__localSimulationTaRecordLocator` 明确保留为测试协议;正式 Adapter 没有采用这个字段。
- 已取消历史仍出现在模拟搜索里,应用必须根据精确详情过滤;不能靠模拟酒店偷偷隐藏旧记录让测试通过。
隔离参数验收不读取 Excel,也不上传 XML/EML。旧纯协议单元测试仍可不加载完整目录;**完整接口验收必须以 `--catalog` 启用严格参数目录**,缺失新 `simulation` 配置就拒绝启动。现有私有目录/运行服务没有被替换。
## 完整测试发现并修复的问题
1. GROUP UPDATE 残留“来源附件必须非空”的条件已去除,无附件也能按确认参数更新。邮件原件的接收/查看和历史附件审计不受影响。
2. 本地状态策略把 allowPickup 同时当作人数分列开关,导致 Actual 更新准备失败。现在独立读取分列配置,Initial/Actual 只决定网格类别。
3. 模拟网格查询忽略类别,Actual 查询混入 Initial 旧格。现在按请求返回真实对应类别,另一类不会被清零或改标签。
4. 同类型 FIT 的内层查询重新把已取消历史纳入目标;现在沿用外层精确识别结果,新增房型后的最终集合核验也排除详情已确认取消的旧记录。仍保留原确认、酒店、时间和租约校验。
5. GROUP→FIT 首次预检在原目标/检查点尚未由 Worker 保存时冻结 Guest 计划,触发 `GUEST_CONTEXT_CHANGED`。现在首次预检只返回准备结果,持久检查点存在后才冻结客档计划,没有放松仓库一致性校验。
保留既定拒绝边界:两笔旧 FIT 不能直接压成总共一间房并暗中取消一笔;本次把它列为预期拒绝并验证零写入。已支持的同住期、同 Guest、总数足以承接原编号的房型合并及有界新增房型继续运行。加床及其他未授权业务未扩展。
## FIT TA 官方查证结果
这轮检查了固定官方提交 `4bd129b455bc5e3ab0f900ac47983611e58659b4` 下 **全部 45 个 Property v1 模块**,不只查 RSV。BLK 文件下载重试失败后,使用已缓存文件并核实 Git blob 摘要与该提交完全一致。
- [BLK](https://github.com/oracle/hospitality-api-docs/blob/4bd129b455bc5e3ab0f900ac47983611e58659b4/rest-api-specs/property/v1/blk.json) / BLK Async 有 Block 的 `reservationDetails.taRecordLocator`。
- [RSV](https://github.com/oracle/hospitality-api-docs/blob/4bd129b455bc5e3ab0f900ac47983611e58659b4/rest-api-specs/property/v1/rsv.json) 的 `taRecordLocatorList` 是搜索条件;仍未找到 Reservation 创建/修改的相应属性。
- 新发现 [FOF 佣金模块](https://github.com/oracle/hospitality-api-docs/blob/4bd129b455bc5e3ab0f900ac47983611e58659b4/rest-api-specs/property/v1/fof.json) `commissionDetailType.recordLocator` 描述为 TA Record locator。反向追踪到佣金查询/重算返回,未找到将其作为 Reservation TA 写入参数的接口。它不能替代 `getReservation` 的正式字段契约。
因此剩余准确缺口仍是:**FIT TA 的写入 JSON Pointer、精确读回 Pointer、所需 fetchInstructions/酒店控制及版本依据**。不是再缺一个已知待封装路径。给 Oracle/接口负责人的具体问题沿用[上一份交付](ohip-formal-cancellation-fit-ta-20260917.md),不重复要求平台同事搜索同一套公开文档。本轮未向外部发送消息。
## 复现与运行边界
运行器:[check_parameters.py](../../../server/src/test/local-fit-simulation/check_parameters.py)。它新建专属目录、临时 PostgreSQL、随机 loopback 端口的 Go Edge 与模拟酒店、独立 H2;完成或失败后停止自己创建的进程。不会启动工作台、上传文件、访问现有 5178/8082、使用真实凭证或初始化用户的测试数据。
命令及组件限制见[模拟工具说明](../../../server/src/test/local-fit-simulation/README.md)。这是应用参数与本地 HTTP/持久日志验证;取消入口在一次性 Go 副本中使用已有测试夹具,不是拿当前线上平台或真实 Oracle 写入做验收。公开目录匹配、隔离请求成功、实际应用授权、真实酒店接收是不同的证据。
最终数量、日志、失败定位与清理记录见[本轮证据](../../../.project-docs/50-evidence/topics/2026-09-18-parameter-simulation-closure.md)。用户之后仍负责文件上传和真实环境操作;本轮不需要用户补上传文件才能完成上述测试。