# 事件路由地图

## 用途

从当前邮件动作选择业务事件类型，并决定需要读取哪些业务 reference。

## 路由顺序

1. Main Agent 先判断当前输入是否足以识别邮件意图；不足时输出 `S99`，不调用本 skill。
2. Main Agent 按 `03-current-content-completeness.md` 盘点全部当前业务内容，不得识别一个事件后停止。
3. Main Agent 将每项当前内容与本文件的支持业务事件目录匹配；整封邮件没有匹配时输出 `S10`，不调用本 skill。
4. `candidate_events` 至少包含一个支持业务事件时，才调用本 skill；同时存在的清楚但不受支持内容保留在 `unknowns`。
5. 已匹配支持事件但事件类型候选冲突、目标不清或参数不安全时，输出业务级 `Need Manual Review`。
6. 能安全拆分时，每个目标对象独立路由，并把未覆盖意图一对一输出到顶层 `unhandled_current_intents`。

只有 Thank you、裸 FYI、acknowledgement、Noted、Received 等没有具体预订业务信息的文字不匹配 Trace。FYI 或单纯告知只要包含与明确预订对象相关的具体补充信息，就路由为 `Trace`。一般咨询和当前不支持的业务请求仍不应伪装成 Trace；`please confirm booking details` 或请酒店核对并回复既有预订当前没有对应支持事件。

当一封邮件同时包含支持事件和当前不支持的业务请求时，不得因为支持事件已命中而忽略剩余请求，也不得把整封邮件降级为 S10。支持部分正常路由，未覆盖部分进入 `unhandled_current_intents`。

## 路由表

| 当前信号 | 事件类型 | 读取 |
| --- | --- | --- |
| 新建 FIT、Group Block、Allotment、Control Block | `New Booking` | `10-new-booking.md` |
| Parent-to-child allocation creation | child `New Booking` + 必须 linked parent `Cancel Booking` release/cancel candidate | `31-allotment-control-block.md` |
| 修改日期、晚数、房型、房量、人数、价格或其他主订单字段 | `Update Booking / Amendment` | `11-update-booking.md` |
| 整单取消、CXL、release/cancel block | `Cancel Booking` / `Cancel Allotment` | `12-cancel-booking.md` |
| 当前 voucher、payment slip、bank transfer image/PDF/file | `Voucher Received` / `Payment Evidence` | `13-voucher-payment.md` |
| 当前名单、分房表、guest list | `Rooming List` | `14-rooming-list.md` |
| 旧 Group Code 改新 Group Code | `AMEND GROUP CODE` | `15-amend-group-code.md` |
| 与具体预订对象相关、但不属于主任务核心参数的当前补充信息：Trace、Reservation Note、Guest Request、extra bed、Meeting、function/banquet、meal、transport、room preference/setup、arrival notice、payment information 或其他具体业务告知 | `Trace` | `16-trace-notes.md` |
| Rooming List 目标需要 TA Recorder | `TA RECORDER` | `17-ta-recorder-note.md` |
| Invoice 请求、收到 invoice、payment notice | invoice/payment 相关事件 | `18-invoice.md` |
| 单独手工价格或 Rate Code 维护 | `Manual RateCode` | `53-manual-rate-code.md` |

## 冲突优先级

- 当前只有 voucher/payment proof，即使标题像 NEW，也优先 voucher/payment。
- Rooming List 文件不得当成 booking update 表。
- `AMEND GROUP CODE TO` 且 old/new 清楚时，优先 `AMEND GROUP CODE`。
- Parent-to-child allocation creation 不因出现 `AMEND` 字样就当普通改单。
- Extra bed alone 是 Trace，不是房量修改。
- 先识别主任务完整承接的核心参数，再把剩余的具体预订补充信息按目标生成 Trace；不得为同一核心参数重复生成 Trace。
- 已确定、需要随预订保留的补充付款安排可以是 Trace；付款凭证、到账结果、Payment Notice、Invoice、催款或需要酒店批准的价格、退款、减免、账期、付款政策、合同条件询问不是 Trace。
- Cancel 行不会因为历史上有 guest request 就自动生成 Trace。

## 拆分

- 按目标对象拆。
- QBD/LianTai 按当前有效行拆。
- Parent-to-child allocation 按 child group code 拆，并额外输出一个 parent linked release/cancel candidate。
- Extra bed、Meeting、meal、arrival notice、guest request 或其他预订补充信息与主业务同现时，按目标拆 linked Trace。
- 同一封邮件、同一目标对象的多条补充信息合并成一个 Trace；多个目标对象分别生成 Trace。
- Rooming List 按目标 group 拆，并可派生 TA Recorder。

无法安全拆分时，输出 `Need Manual Review`，写明冲突和需要查看的证据。

不符合 Trace 但具有当前业务意义的内容必须以 `unknowns[].category=unhandled_current_business_content` 保留原文。同邮件存在至少一个支持事件时输出到顶层 `unhandled_current_intents`；整封邮件没有支持事件时由 Main Agent 输出 S10。不得静默忽略。
