3.9 KiB
当前附件与Note证据匹配 CP10
2026-09-16。本地实现与验证完成,真实办理仍Pending。见CR与证据。
实际Note编号
OhipBookingNoteEvidenceConverter先验证实际Reservation详情的酒店/内层ID、单对象及完整comments数组,再核对精确文本摘要。创建回执只有唯一匹配时才能保存实际Note ID到Receipt.relatedResourceId;更新回执还必须是请求中的精确Note ID。缺失、重复、错酒店/父对象/文本或有警告时不保存子ID,技术回执仍按原规则留存,不把请求ID复制成实际ID。
平台原先写后Reservation查询传nil,不能保证返回Comments。候选平台已显式请求fetchInstructions=Reservation,Comments,包括创建、更新及只读验证重放;提交56bbe86已推送integration/booking-release-codex。没有推默认分支或实际部署。原0.8.0发布包仍是较早候选代码,需要发布时重新构建;不能把本轮补丁当已上线。
完整历史
HotelBookingCallRepository.history在短事务锁定当前Execution,核对真实酒店/task/card/确认版本、scopeKey、revision、token、租约时间、完整snapshot/progress及UPDATE绑定,只允许PREPARE/RECONCILE/VERIFY_FINAL。扫描同酒店/scopeKey全部调用,包含失败、未知、空来源和本次调用;LIMIT501检测超过500即拒绝。上限在环境筛选前检查,不输出截断结果。
历史每行的Snapshot身份与真实Execution身份列比较,精确Tour Code一致;source还须匹配原snapshot/progress,旧UPDATE重新核对原绑定。不同BookingKind/环境不借用。历史原scope缺失不补猜。返回完整不可变Receipt列表,不按updatedAt选“最新版”。数据库事务不覆盖外部HTTP。
当前集合匹配
OhipBookingArtifactMatchAdapter.match(execution, prior)要求CP8完整本轮观测、CP7同一绑定、有效读取者;实际地址摘要与历史相同。NOT_SENT忽略;本次已有写入必须先进入专门续办核对;历史其他未解决写入拒绝。遗留来源NULL上传不能认定归属。遇到错误不会返回部分目标结果。
两轮查询各父对象的完整附件清单,与CP8元数据相同后,只读取有历史上传实际ID的文件,通过固定GET_FILE_ATTACHMENT验证真实父对象、酒店、非global、实际文件ID/字节及SHA256。当前hash必须匹配该ID的已记录来源。相同名字/内容但不同ID的外部文件不被选中;同ID多次历史只保留当前内容吻合的全部证据键,不把最近回执当优先版本。多个已证实旧文件仍返回集合。
FIT另外重新查询当前Note,并与CP8完整Note观测相同。必须存在唯一创建回执根ID,后续PUT沿同一实际ID且已核实读回;仅有UPDATE请求ID不能起根。当前Note的实际ID和文本摘要须吻合该链的已观测内容。匹配后的证据保留创建根与当前内容记录。两轮结果和前后完整历史均一致才返回MATCHED。
使用限制
匹配只是时间点观察,无Oracle事务锁,也不是删除授权;replacementAuthorized()及businessComplete()恒false。结果仅含实际ID、摘要和证据键,不含Note文本、字节、URL或凭据,不加入员工API。新旧Excel没有跨邮件稳定槽位,本轮不按名字、数量或顺序配对,不生成ExistingBooking、清除请求或新运行注册。
历史手工数据、旧NULL记录、丢失Note根或处理中结果保持未解决。后续执行须对已匹配对象在写前再校验、上传全部本次Excel并实际读回后,才考虑对应旧件处理;处理中断须识别本次新件,不能把它当旧件。继续完成持久替换步骤、NEW父对象关联、GROUP完整范围、FIT分配/TA及最终回显;真实MySQL/Oracle UAT、平台部署和环境配置前置保留。