实现M002 V3 P0.1 Parent Group路由修订

This commit is contained in:
andy
2026-07-12 11:42:01 +08:00
parent 0358b34159
commit 92489af18e
42 changed files with 3971 additions and 79 deletions

View File

@@ -0,0 +1,70 @@
# 取消预订
## 适用业务
用于当前邮件要求取消或释放:
- 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 复核。