# 取消预订

## 适用业务

用于当前邮件要求取消或释放：

- FIT Reservation
- Group Block
- Allotment / Control Block
- 控房或配额

可接受信号：

- cancel booking / reservation / group
- release or cancel block
- cancel allotment / allocation / control block
- `CXL`
- 明确整单取消

## 事件类型

- `Cancel Booking`：只取消 FIT Reservation、普通 Group Block 或 Child Group Block。
- `Cancel Allotment`：取消整个 Allotment / Control Block，也就是 Parent Group。

Parent Group 的 `case_keys.group_code` 与 `case_keys.block_code` 必须相同；普通或 Child Group Block 继续只填 `group_code`、`block_code=null`。

## 部分修改边界

减少房量、改日期、释放部分 allocation 或明确保留 parent 余量继续使用，当前均不受支持；不得输出 Update、Cancel 或 `Allotment Maintenance`。整封邮件只有该明确意图时走 S10；同邮件另有支持事件时按 `03-current-content-completeness.md` 进入 `unhandled_current_intents`。

如果当前证据无法确定是整块取消、完整 Parent split，还是部分维护/保留余量，则业务类型或 subtype 尚未确定，输出 `event_type=Need Manual Review` 的 Fallback 复核。

## Parent Allocation Linked Event

当当前证据已经确认 Parent Group 完整拆成 Child Groups 时，必须为 parent group 生成独立 linked cancel candidate：`event_type=Cancel Allotment`、`extracted_fields.cancel_scope=entire_allotment_control_block`、`relationship_type=linked_parent_release_after_child_split`、`requires_downstream_hard_validation=true`。

这个事件：

- 不替代 child New Booking。
- 每个 child 固定是 `New Booking` 且 `booking_object_type=Group Block`；parent candidate 的 `related_source_event_indices[]` 必须指向全部 child events。
- 不要求字面 cancel / CXL。
- 必须来自当前 parent-child split 证据。
- 不得由历史证据单独触发。
- 只是候选事件，不代表 PMS 已取消成功，不创建真实 TaskCard，不写外部系统。
- 无论正文是否显式写取消，同一 split cluster 都只能有一个 Parent `Cancel Allotment`。显式取消同一 parent 时合并证据；不同 parent 才分别输出。
- 当前 Agent 不得再生成 linked Parent `Cancel Booking`；旧组合只允许 reader/adapter 无损兼容展示。

## 不适用

- 新建，除 Parent split 派生的 linked `Cancel Allotment` 外。
- 普通 date/room/guest/price amendment。
- Voucher/payment evidence。
- Rooming List。
- 只有 Trace。
- cancel action 只在历史邮件中。

## 业务复核

当前证据已经能确定 `Cancel Booking`/`Cancel Allotment` 及其对象 subtype 时，以下问题保留原业务事件，并使用非空、完整的 `manual_review`：

- cancel target 不清。
- 多目标无法安全拆分。
- 系统上下文显示 conflict、lock 或 already completed state。
- 完整 Parent split 已确认，`Cancel Allotment` subtype 已确定，但 parent 双 key、child list 或关系证据不完整。

Parent split 的关系字段不安全时不得把候选视为已取消；保留已确认的 parent/child 证据，并在 `manual_review.missing_fields[]` 中使用 RFC 6901 JSON Pointer。

Parent 双 key 候选冲突时，两键置空并使用 `manual_review.reason_code=target_object_unclear`；关系字段不安全时使用 `parent_child_split_evidence_unclear`。

只有 `CXL` 是否为当前动作不清、无法确定是普通订单取消还是 Allotment 整块取消，或无法确定是完整 split 还是部分维护时，才输出 `event_type=Need Manual Review` 的 Fallback 复核。
