# Rate Code 与结算价格

## 安全立场

Rate Code 必须由当前证据和本 reference 唯一支持。不要只凭 room code 猜。若 channel、market、room text、UP marker、price、breakfast、restaurant 或 supplier 上下文不足，输出人工复核。

## 已知规则

| 场景 | Typical Rate Code |
| --- | --- |
| QBD 普通 DBL/TWN 且无 `U` 或 Upgrade marker | `GRPA1-900` |
| QBD `U-DBL` / `U-TWN` / `U-TRP` 或 Upgrade marker | `GRPA2-850UP` 或对应 UP rate code |
| LianTai 普通 DBL/TWN 或 Sup DBL/Sup TWN | `GRP1-900` |
| LianTai `U-DBL` / `U-TWN` | `WHO1-850UP` |
| LianTai `ST+K` / `2卧1厅` / `FAMILY 1` 且价格 1200 | `WHO3-1200` |

价格示例：

- 850 -> `WHO1-850UP`
- 900 -> `GRP1-900`
- 1000 -> `WHO2-1000`
- 1200 -> `WHO3-1200`

渠道和上下文优先于单纯价格。

## `U-<number>`

例如 `U-1200`：

- 数字部分视为 settlement price / price marker。
- 保留 `rate_code_raw = "U-1200"`。
- 数字命中已知规则时输出命中。
- 数字不可读或未覆盖时人工复核。
- 绝不写入 confirmation/reservation/booking reference 字段。

## 控房/配额默认

示例：

- `U-DBL` -> room `RM2`，settlement price 850。
- `U-TWN` -> room `RM3`，settlement price 850。
- `U-TRP` / `FAM` -> room `RM4`，settlement price 1275。

仅当事件明确是 new Allotment / Control Block、房型唯一映射，且当前没有不同明确规则时使用。

## 手工价格

当需要人工维护 settlement price：

```json
{
  "rate_code": null,
  "settlement_price": null,
  "manual_settlement_price_required": true,
  "manual_price_reason_code": "",
  "price_evidence": []
}
```

手工价格仍要求目标、日期/room items、price text 和系统上下文安全。

## 复合价格

对于 `2000THB+500`、`1800+500`、`2000THB*2 +500*2`：

- 只用可分离的 base room price 判断 Rate Code / settlement price。
- additional component 交给 `52-fix-charge.md`。
- 不得把组件相加后当单一房价。

## 人工复核

- channel/market 未知或冲突。
- raw room type 无法唯一映射。
- UP marker 与普通 rate path 冲突。
- price marker 不可读。
- price 未命中任何规则。
