addedOutput schema / description
Added value: +"返回字段说明(不增加校验约束;缺失、零值和 null 按各字段说明解释):\n返回值 [object] 必有字段=ok: 业务响应信封;字段缺失表示没有提供,不能自动补零。数组的 null 与 [] 都不含条目,但 null 不承诺完成了该部分查询。\n返回值.data [object] 必有字段=room_types,total: 原始验价结果,保留 camelCase 的 rateInfos;不同于报价查询的 products。验价不锁库存。\n返回值.data.room_types [array|null]: 验价房型及房价。\n返回值.data.room_types[] [object] 必有字段=roomTypeCode,name,nameCN,bedTypeId,rateInfos\n返回值.data.room_types[].areaRange [string]: 房间面积范围,平方米。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bedTypeDesc [string]: 床型说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bedTypeDescCN [string]: 床型中文说明。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].bedTypeId [integer]: 内部标准床型 ID;零不能用于推断床型。\n返回值.data.room_types[].bedWidth [string]: 已核实床宽,米;缺失表示未知。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].hasWindow [null|boolean]: 是否有窗;明确 false 表示无窗,缺失/null 表示未知。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].name [string]: 名称。\n返回值.data.room_types[].nameCN [string]: 中文名称。\n返回值.data.room_types[].rateInfos [null|array]: 原始验价报价列表;与查询的 products 结构不同,null/空数组表示没有返回报价。\n返回值.data.room_types[].rateInfos[] [object] 必有字段=roomTypeName,roomTypeNameCN,bedTypeDesc,bedTypeDescCN,bedTypes,bedTypesCN,bedTypeId,rateCode,name,allotment,maxOccupancy,maxChildren,paymentType,currencyCode,totalPrice,discountedPrice,perNightPrice,totalTaxAndFee,mealInfo,refundable,isOTAForbidden,packageRate,dcTag,currencyCodeFX,totalPriceFX,perNightPriceFX,isOnRequest\n返回值.data.room_types[].rateInfos[].allotment [integer]: 本次报价通过库存检查的房间数,当前实现填写请求的 room_count,并非供应商全部剩余库存;不锁库存,不能用它推断最大可订数量。零不表示无限库存。\n返回值.data.room_types[].rateInfos[].bedTypeDesc [string]: 床型说明。\n返回值.data.room_types[].rateInfos[].bedTypeDescCN [string]: 床型中文说明。\n返回值.data.room_types[].rateInfos[].bedTypeId [integer]: 内部标准床型 ID;零不能用于推断床型。\n返回值.data.room_types[].rateInfos[].bedTypes [null|array]: 可选床型说明列表;null 表示未提供。\n返回值.data.room_types[].rateInfos[].bedTypes[] [string]\n返回值.data.room_types[].rateInfos[].bedTypesCN [null|array]: 可选床型中文说明列表;null 表示未提供。\n返回值.data.room_types[].rateInfos[].bedTypesCN[] [string]\n返回值.data.room_types[].rateInfos[].benefits [null|array]: 报价礼遇列表。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].benefits[] [object] 必有字段=label,desc,tags\n返回值.data.room_types[].rateInfos[].benefits[].desc [string]: 说明文本。\n返回值.data.room_types[].rateInfos[].benefits[].label [string]: 礼遇类别:luxury、virtuoso、stay_n_pay_m。\n返回值.data.room_types[].rateInfos[].benefits[].payDays [integer]: 连住优惠计费天数。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].benefits[].stayDays [integer]: 连住天数,仅适用连住优惠。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].benefits[].tags [null|array]: 礼遇细项标签列表。\n返回值.data.room_types[].rateInfos[].benefits[].tags[] [string]\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos [null|array]: 取消罚则时段;缺失/null/空数组不构成可免费取消的承诺。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[] [object] 必有字段=startDateTime,currencyCode\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].amount [null|number]: 金额,所在对象 currency/currencyCode 的主单位;cancelPolicyInfos 中表示该时段取消费用。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].currencyCode [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].endDateTime [string]: 罚则结束时间,保留返回的时区;缺失表示未提供该时段终点。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].nightCount [null|integer]: 罚款折合晚数,未提供时不按零处理。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].cancelPolicyInfos[].startDateTime [string]: 罚则起始时间,通常 RFC3339 含时区;首段起始时间对应免费取消截止。保留返回的时区;缺时区或无法解析时不猜测。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo [null|object] 必有字段=Total,BaseRate,TaxAndServiceFee,SalesTax,PerRoomBaseRate,HotelFees: 供应商原始计费明细,保留 PascalCase 字段;整数金额为供应商内部计费口径,不直接当成 MCP 展示主单位金额;下单使用 totalPrice/currencyCode。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.BaseRate [integer]: 供应商原始总房费,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees [null|array]: 酒店当地额外收取费用,不包含在该计费对象 Total 中;整数金额使用供应商内部口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[] [object] 必有字段=desc,amount,currency\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[].amount [integer]: 供应商原始酒店额外费用整数金额,内部计费口径;不能直接当展示元。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[].currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.HotelFees[].desc [string]: 说明文本。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.PerRoomBaseRate [integer]: 供应商原始单间房费,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.SalesTax [integer]: 供应商原始销售税,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.TaxAndServiceFee [integer]: 供应商原始税及服务费,内部整数计费口径。\n返回值.data.room_types[].rateInfos[].chargeableRateInfo.Total [integer]: 供应商原始含税总金额,内部整数计费口径;不代替 totalPrice。\n返回值.data.room_types[].rateInfos[].currencyCode [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].currencyCodeFX [string]: 换算展示币种 ISO 4217;空串表示未提供。\n返回值.data.room_types[].rateInfos[].dailyPrices [null|array]: 逐入住日期价格明细。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].dailyPrices[] [object] 必有字段=stayDate,price\n返回值.data.room_types[].rateInfos[].dailyPrices[].price [number]: 该入住日每房价格,所属报价币种主单位;不是全部房间整段入住总价。\n返回值.data.room_types[].rateInfos[].dailyPrices[].stayDate [string]: 入住日期 YYYY-MM-DD。\n返回值.data.room_types[].rateInfos[].dcTag [boolean]: 直签报价标记。\n返回值.data.room_types[].rateInfos[].discountedPrice [number]: 优惠券后金额,currencyCode 主单位;仅大于零表示可用券后价,零不表示免费。\n返回值.data.room_types[].rateInfos[].essentialInformation [null|array]: 供应商重要提示列表;下单前需展示影响入住或费用的条款。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].essentialInformation[] [string]\n返回值.data.room_types[].rateInfos[].isOTAForbidden [boolean]: 该报价是否禁止 OTA 销售。\n返回值.data.room_types[].rateInfos[].isOnRequest [boolean]: true 表示需向供应商申请确认,非即时确认;false 不表示已预留库存。\n返回值.data.room_types[].rateInfos[].maxChildren [integer]: 每房额外儿童上限,独立于成人上限 maxOccupancy;供应商未提供正数上限时当前实现使用请求儿童数。缺失表示未提供,零也不能单独证明酒店不接待儿童,须以实际年龄和人数验价。\n返回值.data.room_types[].rateInfos[].maxDurationForBookingConfirmMinutes [null|integer]: 需申请确认报价的最大等待时间,分钟;仅配置存在时返回,缺失不能自行承诺固定确认时限。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].maxOccupancy [integer]: 每房成人上限,不是成人加儿童的总上限;儿童额外上限见 maxChildren。缺失表示未提供,不能按零处理;零值也不能用于推断可以无限入住,须按实际入住人数验价。\n返回值.data.room_types[].rateInfos[].mealInfo [object] 必有字段=mealType,mealCount,mealChildCount: 餐食类型与成人/儿童份数。\n返回值.data.room_types[].rateInfos[].mealInfo.mealChildCount [integer]: 供应商提供的儿童餐食份数,不代表儿童入住容量;零不能改变已知餐食类型。\n返回值.data.room_types[].rateInfos[].mealInfo.mealCount [integer]: 供应商提供的成人餐食份数,辅助解释 mealType;零不覆盖已知类型,如类型 4 仍为双早。儿童份数另见 mealChildCount。\n返回值.data.room_types[].rateInfos[].mealInfo.mealType [string]: 餐食类型字符串编码:1=不含餐;2=早餐(份数见 meal_count/mealCount);3=1份早餐;4=2份早餐;5=3份早餐;6=4份早餐;7=5份早餐;8=6份早餐;9=7份早餐;10=8份早餐;11=午餐;12=晚餐;13=午餐和晚餐;14=半膳(早餐加午餐或晚餐);15=全膳(早餐、午餐、晚餐);16=一价全包;17=膳食自理(厨房设施,并非自助餐);18=早餐和午餐;19=早餐和晚餐。meal_count/mealCount 补充份数,零值不能覆盖已知餐食类型;空串或未识别编码表示类型未知,不推断为不含餐。\n返回值.data.room_types[].rateInfos[].name [string]: 名称。\n返回值.data.room_types[].rateInfos[].packageRate [boolean]: 是否套餐报价。\n返回值.data.room_types[].rateInfos[].paxRooms [null|array]: 报价中的每组房间入住人数及每日价格。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].paxRooms[] [object] 必有字段=roomCount,adults,children,dailyPriceInfo\n返回值.data.room_types[].rateInfos[].paxRooms[].adults [integer]: 每房成人数。\n返回值.data.room_types[].rateInfos[].paxRooms[].children [integer]: 每房儿童数。\n返回值.data.room_types[].rateInfos[].paxRooms[].childrenAges [null|array]: 每房儿童年龄,0–17 岁,与 children 个数一致;缺失不是年龄为零。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].paxRooms[].childrenAges[] [integer]\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo [null|array]: 入住日期逐日价格明细。\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[] [object] 必有字段=date,price,taxAndFee\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[].date [string]: 入住日期 YYYY-MM-DD。\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[].price [number]: 该入住日每房价格,所属报价币种主单位;不是全部房间整段入住总价。\n返回值.data.room_types[].rateInfos[].paxRooms[].dailyPriceInfo[].taxAndFee [number]: 该日期税费,所属报价币种主单位,不应在含税总价上重复累加。\n返回值.data.room_types[].rateInfos[].paxRooms[].roomCount [integer]: 本组相同入住人数的房间数。\n返回值.data.room_types[].rateInfos[].paymentType [integer]: 报价支付类型:1=预付,5=到店支付;当前生成器返回 1。不是 pay_order.payment_method。\n返回值.data.room_types[].rateInfos[].perNightPrice [number]: 平均每房每晚价,currencyCode 主单位;不是整段入住总价,不含另列 Stripe 手续费。\n返回值.data.room_types[].rateInfos[].perNightPriceFX [number]: 换算后的平均每房每晚展示价,currencyCodeFX 主单位。\n返回值.data.room_types[].rateInfos[].priceDetail [null|object] 必有字段=total,currency,baseRate,dailyBase,inclusions,exclusions: 价格组成;inclusions 已含、exclusions 不含,避免重复计费。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].priceDetail.baseRate [number]: 价格明细基础房费,currency 主单位。\n返回值.data.room_types[].rateInfos[].priceDetail.currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase [null|array]: 逐日基础房费。\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase[] [object] 必有字段=stayDate,price\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase[].price [number]: 该入住日每房价格,所属报价币种主单位;不是全部房间整段入住总价。\n返回值.data.room_types[].rateInfos[].priceDetail.dailyBase[].stayDate [string]: 入住日期 YYYY-MM-DD。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions [null|array]: 未包含在总价中的费用,可能到店支付。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[] [object] 必有字段=type,name,amount,currency\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].amount [number]: 金额,所在对象 currency/currencyCode 的主单位;cancelPolicyInfos 中表示该时段取消费用。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].name [string]: 名称。\n返回值.data.room_types[].rateInfos[].priceDetail.exclusions[].type [integer]: 供应商费用类别整数代码;具体收费含义以同项 name 和金额为准。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions [null|array]: 已包含在总价中的费用。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[] [object] 必有字段=type,name,amount,currency\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].amount [number]: 金额,所在对象 currency/currencyCode 的主单位;cancelPolicyInfos 中表示该时段取消费用。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].currency [string]: 金额币种 ISO 4217。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].name [string]: 名称。\n返回值.data.room_types[].rateInfos[].priceDetail.inclusions[].type [integer]: 供应商费用类别整数代码;具体收费含义以同项 name 和金额为准。\n返回值.data.room_types[].rateInfos[].priceDetail.total [number]: 价格明细总额,currency 主单位。\n返回值.data.room_types[].rateInfos[].rateCode [string]: 验价后的不透明报价代码;下单使用这个值。\n返回值.data.room_types[].rateInfos[].recommendedPrice [null|number]: 建议售价,currencyCode 主单位,不是已核实的应付金额。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].refundable [boolean]: 供应商是否标记可退款;true 不等于当前免费取消,还需检查 cancelPolicyInfos 截止时间和费用。\n返回值.data.room_types[].rateInfos[].roomTypeName [string]: 房型名称。\n返回值.data.room_types[].rateInfos[].roomTypeNameCN [string]: 房型中文名称。\n返回值.data.room_types[].rateInfos[].supplierName [string]: 供应商名称。 缺失表示本次未提供;不可自动当成零、false 或空字符串。\n返回值.data.room_types[].rateInfos[].totalPrice [number]: 全部房间、整段入住的订单总价,使用对应币种主单位(如 CNY 元),不是分;未包含另列的 Stripe 手续费,酒店到店收取费用以政策及 exclusions 为准。\n返回值.data.room_types[].rateInfos[].totalPriceFX [number]: 全部房间整段入住的换算展示总价,currencyCodeFX 主单位;不替代结算金额。\n返回值.data.room_types[].rateInfos[].totalTaxAndFee [number]: 报价所含税费合计,currencyCode 主单位;并非所有到店费用,避免在总价上重复相加。\n返回值.data.room_types[].roomTypeCode [string]: 房型代码。\n返回值.data.total [integer]: 返回房型数量。\n返回值.error [string]: 业务失败说明,不作为可重试或成功的唯一依据。\n返回值.error_code [string]: 鉴权等机器可读错误码,仅在错误路径提供。\n返回值.ok [boolean]: 业务是否成功。false 时读取 error/reason;工具执行错误也可能通过 MCP isError 返回而没有 structuredContent。\n返回值.reason [string] 取值=[\"invalid_request\",\"hotel_not_found\",\"upstream_timeout\",\"upstream_error\",\"hotel_detail_unavailable\"]: 失败原因:invalid_request=参数无效,hotel_not_found=酒店不存在,upstream_timeout=上游超时,upstream_error=上游失败,hotel_detail_unavailable=酒店详情不可用。成功空结果的 no_matching_live_room 位于 data.reason;批量逐项判断,不把一项失败当成整批失败。\n返回值 的分支 1:\n返回值 必有字段=data\n返回值.ok 取值=[true]\n返回值 的分支 2:\n返回值 必有字段=error,reason\n返回值.ok 取值=[false]\n"