Files
ARR-2.0-0918/integrations/ohip/rate-info-platform-request.md
T

101 lines
7.7 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.
# ARR 有效价读取:平台接口补充清单
**后续状态:已补齐。** 用户2026-09-16通知后,目录0.7.0提供GET getRateInfo及推荐POST searchRateInfo;
5笔测试预订/11次只读调用通过。见[发布验证](../../.project-docs/50-evidence/topics/2026-09-16-rate-info-publication.md)。
以下为补充前的历史需求;GET现已标记上游弃用,新接入优先POST,原文“未封装”不再代表当前状态。
2026-09-16。供平台开发讨论;本助手未向他人发送此文件,也没有修改平台或应用授权。
用户随后明确由其联系平台开发者补充getRateInfo,完成后通知本任务。
ARR 已在 OHIPSB02 通过 `searchHotelReservations` + `getReservation` 取得2026-09-15到店的139笔完整详情。
下一项需要验证的是**指定预订、指定日期的有效价**,不能直接使用搜索结果中的当前价格。
## 推荐补充的一个只读操作
优先封装 Oracle RSV 的 **`getRateInfo`**:
```text
GET /rsv/v1/hotels/{hotelId}/reservations/rateInfo
```
这是 Oracle 路径,不是已经存在的 Edge 路径。平台应自行确定固定包装路由,并在catalog/OpenAPI公布Operation ID、
参数白名单、响应封装、能力组和重试规则。ARR 不会绕过 Edge 直接调用 Oracle,也不会猜测平台路由。
Oracle description 指明读取预订费率资料,并限制时间跨度21天;`#/definitions/rateInfo` 包含:
| Oracle响应路径 | 规范含义与ARR用途 |
|---|---|
| `detail.totalRateAmount` | **指定预订及日期的Effective Rate**;是XML `EFFECTIVE_RATE_AMOUNT` 的直接候选,仍需同源样本验收 |
| `detail.totalPackageAmount` | 指定预订/日期的包价合计,用于解释价格差异 |
| `detail.totalTaxAmount` | 税额合计,核对税口径 |
| `detail.revenue` | 金额、税、币种等明细,按totalType解析;不凭字段名推断税内/税外 |
| `detail.packages[]` | 包价金额细项 |
| `detail.rateSuppressed` | 价格隐藏标记;不得将隐藏或缺失的金额填0后继续 |
| `warnings` | 业务警告,不能只看HTTP状态 |
如果 Edge 继续使用已知的 OHIPDocument 包装,上述路径将位于 `data.detail.*`;新接口未发布前这只是预期包装方式。
规范另有 **`searchRateInfo`**,POST `/rsv/v1/hotels/{hotelId}/reservations/rateInfo/searches`,返回同一个rateInfo结构。
目前只需选一项作为最小验证入口,不要求同时封装GET和POST。
## 最小验证请求
从本批搜索返回的内部Reservation ID选样本,不使用Confirmation No。先测试以下字段组合:
| query | 值 | 依据/限制 |
|---|---|---|
| `id` | `<内部Reservation ID>` | Oracle查询参数定义的对象ID;必须验证确实按该预订读取 |
| `type` | `Reservation` | 按已知预订身份类型构造的候选,参数本身是无枚举字符串;需平台实测 |
| `summaryInfo` | `false` | 请求detail,而不是住宿总价summary |
| `detailDate` | `2026-09-15` | 规范明确详细结果需要日期,固定为待处理到店日 |
以上参数存在且类型已离线核对,**尚未证明这一最小组合在目标Oracle环境足够**。若还需criteriaStartDate/EndDate,
应依据被查预订及请求日期补足、验证边界并遵守21天限制,不能默认为整段入住只返回一个价。
不要为了让调用通过而覆写ratePlanCode、roomType、adults/children,或使用新的报价条件替代已存预订数据。
currencyCode也是可选参数,首轮不主动转换货币;必须记录实际返回的币种依据,再与原报表核对。
可机读示例及来源标识见 [rate-info-oracle-examples.json](rate-info-oracle-examples.json)。其中没有凭证或真实预订ID。
## 为什么现在需要它
- 当前139笔详情、396个费率项均未返回规范中的`effectiveRate`。单独取RateInfoDetails/DailySummary仍未补齐。
- 9笔搜索rateAmount不同于到店日base;这9笔的搜索价全部匹配2026-09-16费率,而到店日为2026-09-15。
这证明本批搜索摘要不能直接用作昨日价格,不表示已经证明所有预订都按系统今天取价。
- 另7笔详情total与base不同;其差额全部等于2026-09-15的`computedResvPrice`包价合计,均是独立列示的包价样本。
22笔有包价的记录中还存在不同addToRate/printSeparateLine组合,不能简单把所有包价都加一次。
- 因此优先读取Oracle明确提供的“预订+日期→有效价”,再验证报告对应关系;不在ARR里猜测税/包价/折扣算法。
这些差异来自现有私有原件的本地分析,未新增或修改任何预订。金额正文、客人和公司名不进入此清单。
## 平台验收应回传什么
1. 新的catalog/OpenAPI条目:固定Operation ID/Edge路由、query或body字段及类型、能力组、同步只读语义、限流/重试行为。
2. 目标测试酒店中已存预订的日期详情响应,记录request ID、酒店、查询身份和detailDate;原始内容按私有资料交付。
3. 优先覆盖九笔跨日变价、七笔独立列示包价、addToRate组合、普通无包价,以及有适用样本时的折扣/税/共享/多房。
样本可按ARR私有索引定位,不能只用一个没有包价的成功请求代表全部口径。
4. 证明`summaryInfo=false`得到detail而非summary;缺价、rateSuppressed、无效ID/日期、超过21天和业务警告须有明确处理。
5. 核对这是读取已存预订价格的操作。不要将validateRateInfo、Refresh Rates、预订修改或重新报价写入流程混进只读接口。
平台补齐后,ARR仍需与同环境、同酒店、同预订/日期的原报告做字段比对,才可选作生产来源。
如果该API返回的Effective Rate不等于原XML列,保留差异并查清报表口径,不静默改财务定价。
## 其余接口取舍
| 操作 | 本轮结论 |
|---|---|
| searchHotelReservations / getReservation | 保留现有主干,已验证一日完整候选及详情获取 |
| getRateInfo(或searchRateInfo二选一) | 本次提出的平台新增只读封装候选;目录未提供,无法由ARR自行授权出一个不存在的操作 |
| getBlock | 9/17原件复查纠正:26笔除了Block ID,还在blockIdList中返回typed BlockCode,两层一致;已可取值,无需为这些记录补查或扩大blocks.read授权 |
| getProfile | 暂无新增依据。详情已经有角色和名字结构,本批仅有Group角色;再读同一Group Profile不能证明Company/TravelAgent/Source的报告优先级 |
| 财务账单、住宿日汇总、费率计划配置 | 不用这些结果替换固定ARR计价,也不将配置报价当成已存预订的指定日有效价 |
报告的状态/空ETA/顺序仍是业务等价验证项。这里请求的是具体读接口,不是新的页面自动化或原生XML导出工程。
## 来源与当前状态
- 2026-09-16本轮CLI回读:catalog0.6.0/111操作,`getRateInfo`、`searchRateInfo`均不存在;request ID `f90ce73e-eb4d-4168-b5cb-5274b9da6d49`。
- Oracle固定提交的 [rsv.json](https://github.com/oracle/hospitality-api-docs/blob/dd631fbd5d0fce74a7dbdf96b43f07ce587211f2/rest-api-specs/property/v1/rsv.json):getRateInfo/searchRateInfo、rateInfo、searchRateInfoRequest。
- Oracle [Updating Reservations](https://docs.oracle.com/en/industries/hospitality/opera-cloud/25.5/ocsuh/t_managing_reservations_editing_reservation_stay_details.htm)
说明Effective Rate考虑加到房价的包价项目,支持区分rate/base与effective;不据此替代本酒店原报告验收。
- [139笔实测证据](../../.project-docs/50-evidence/topics/2026-09-16-arr-api-live-probe.md);[本轮语义追查](../../.project-docs/50-evidence/topics/2026-09-16-arr-api-semantics.md)。