# 房型映射

## 安全立场

房型映射必须由本 reference 支持且唯一。必需房型未覆盖或存在歧义时，保留 raw text、PMS room type code 为 `null`，并在原业务事件上附非空 `manual_review`；不得使用 downstream hard validation 代替人工确认。不要凭常识猜 PMS room type。

## 已知规则

| Raw / normalized signal | PMS room type code | 说明 |
| --- | --- | --- |
| 普通 `DBL`, `Double`, `1 DBL` | `RM2` | 普通 DBL。 |
| 普通 `TWN`, `Twin`, `1 TWN` | `RM3` | 普通 TWN。 |
| `U-DBL`, `Upgrade DBL` | `RM2` | Rate Code 走 upgrade 口径。 |
| `U-TWN`, `Upgrade TWN` | `RM3` | Rate Code 走 upgrade 口径。 |
| `U-TRP`, `TRP`, `Triple` | `RM4` | 需结合人数/家庭房语境确认。 |
| `DBL SUITE`, `Double Suite`, `SUITE DBL` | `SU1` | 必须有明确 DBL suite 线索。 |
| `TWN SUITE`, `Twin Suite`, `SUITE TWN` | `SU6` | 必须有明确 TWN suite 线索。 |
| `FAMILY 3PAX`, `FAMILY 4PAX` | `SU3` | 家庭房规则。 |
| `ST+K`, `2卧1厅`, `FAMILY 1` 且组合证据匹配 | `SU3` | Rate Code 继续按渠道/价格判断。 |
| `HNM`, Honeymoon | 默认 DBL 路径 | 仅在没有更明确房型时使用。 |

## 保留规则

- 始终保留 `room_type_raw`。
- normalized room text 与 PMS code 分开保存。
- 不得让 PMS code 抹掉 `U-`、`Sup`、高级房、suite/family、price 等原始线索。
- 不得仅凭 room code 反推 Rate Code。
- Extra bed / 加床 / `เตียงเสริม` 不是房型。
- `Q10` 类 suite 文本必须结合 twin/double/layout evidence；不得只凭 `Q10` 单独映射。

## 业务复核

以下房型不安全情况在业务 `event_type` 和 subtype 已知时，必须保留原业务事件并附非空、完整的 `manual_review`：

- generic `SUITE` 没有精确床型，包括 Parent split child；不再存在 normal candidate / downstream-hard-validation 例外。
- `FAMILY 1` 缺 ST+K / 2卧1厅 / 1200 组合证据。
- `HNM` 与更明确房型冲突。
- 存在多个映射候选。
- raw room text 混合不兼容类别。

始终保留 `room_type_raw`，令无法唯一确认的 `pms_room_type_code=null`，并在 `manual_review.missing_fields[]` 中写入对应 PMS code 字段的 RFC 6901 JSON Pointer。只有房型证据同时导致业务类型或 subtype 本身无法确定时，才使用 `event_type=Need Manual Review` 的 Fallback 复核。
