This commit is contained in:
2026-08-15 09:47:19 +08:00
parent 0171c791bd
commit 2cf36a3b12
3 changed files with 30 additions and 9 deletions
+1 -1
View File
@@ -28,7 +28,7 @@
| P3-Q11 | 九个动作中哪些是强制前置,哪些允许并行? | 统一门禁按已确认前置执行;PDA 单柜次单人作业 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10 | 订舱完成、拖车完成、报关资料完成且有放行回执、PDA 拣货完成及五类证据完整均为进入 `LOADED` 的强制门禁;PDA 单柜次单人作业,不做多人并行;进入任务即拣货中,提交时批量写入 | 全流程、状态机、PDA、页面进度 |
| P3-Q12 | 报关回执包含哪些类型,海关放行是否为装柜完成硬门禁? | 有效放行回执作为硬门禁,首版人工上传 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10 | 首版回执由人工上传;必须存在有效放行回执才能通过 `LOADED` 门禁。回执类型和版本可追溯,具体字段按人工业务单据映射 | 报关状态、装柜完成门禁、客户回执 |
| P3-Q13 | 三期终点以什么状态为准? | 国内系统以能掌控的最后环节为终点 | 开工阻断 | 已确认 | 用户当前对话确认 | 2026-08-08 | 三期终点为 `LOADED`/装柜完成;`DELIVERED`/派送完成只能在到达海外仓后由海外仓可信回传推进,不属于国内三期操作和验收范围 | 阶段边界、状态、里程碑、验收、海外仓回传 |
| P3-Q14 | 订舱、渠道柜次、放舱与智能排柜的先后关系是什么? | 确认订舱后生成稳定内部柜次,放舱只补真实运输数据 | 开工阻断 | 已确认 | 用户当前对话确认 | 2026-08-12 | 订舱进入 `CONFIRMED` 时渠道、箱型和数量已确定,系统按箱型需求数量生成绑定渠道的稳定内部柜次;未放舱不影响候选查询、智能推荐、人工调整和保存装柜计划。同一柜次只能装同渠道入库单,服务端禁止跨渠道混装。进入 `RELEASED` 时补充提单号、船名航次、预计开船时间等真实运输数据,不重建柜次或改变已有装柜计划;真实集装箱号可在放舱时或之后录入 | 订舱、柜次、智能排柜、预装、PDA、运输信息 |
| P3-Q14 | 订舱、渠道柜次、放舱与智能排柜的先后关系是什么? | 线下已订妥的订舱在创建时完整登记五项真实运输快照并直接确认;放舱不覆盖首次快照 | 开工阻断 | 已确认 | 用户当前对话确认 | 2026-08-12 | 订舱创建请求必须携带提单号、船名、航次、预计开船时间、预计到港时间五项真实运输数据,并直接进入 `CONFIRMED`;渠道、箱型和数量同时确定,系统按箱型需求数量生成绑定渠道的稳定内部柜次。未放舱不影响候选查询、智能推荐、人工调整和保存装柜计划;同一柜次只能装同渠道入库单,服务端禁止跨渠道混装。`RELEASED` 仅作为后续放舱/PDA 门禁,不补录、不覆盖首次五项运输快照;真实集装箱号可在放舱时或之后录入 | 订舱、柜次、智能排柜、预装、PDA、运输信息 |
### 2.1 PDA 已确认子决策
@@ -18,9 +18,9 @@
| 数据代号 | 必备状态/形态 | 生成前置 | 自动化断言 | 人工可点击入口 | 当前状态 |
|---|---|---|---|---|---|
| CT-D01 | 已确认订单 `CONFIRMED`,尚无柜次 | 可创建并确认订单 | 确认后自动产生唯一柜次;重复事件不重复建柜 | 订单详情可进入关联柜次 | 待契约 |
| CT-D01 | 线下已确认真实订舱登记为 `CONFIRMED`,尚未关联内部柜 | 创建请求必须携带提单号、船名、航次、预计开船/到港五项运输快照 | 登记直接产生 `CONFIRMED` 真实订舱事实,不自动创建内部柜;DRAFT/SUBMITTED 不进入正式列表 | 订舱列表只显示已确认及后续状态 | 已冻结,待环境验收 |
| CT-D02 | 不同渠道各一单 | 渠道主数据可用 | 柜次/清单/任务不得跨渠道混装或串查 | 排柜候选可按渠道辨识 | 待契约 |
| CT-D03 | 已排柜但无真实柜号 | 临时柜身份可生成 | 不要求真实柜号即可排柜,内部身份稳定 | 预装清单可查看“待补号”柜次 | 待契约 |
| CT-D03 | 内部模拟柜已排货但无真实柜号/订舱 | 正式装柜仓库、ACTIVE 物流渠道、箱型和容量可用 | 服务端生成稳定 `containerBookingId/cabinetNo`;同仓同渠道 WAIT_SPLIT 可排,不要求真实柜号或订舱 | 货柜列表可新增模拟柜,预装清单显示待关联/待补号 | 已冻结,待环境验收 |
| CT-D04 | 已补真实柜号、PDA 可领取 | CT-D03 | 补号后 PDA 入口开放且关联原内部柜身份 | PDA 任务列表可进入 | 待契约 |
| CT-D05 | 作业中更换真实柜号 | CT-D04,PDA 已开始 | 柜号变化但柜次 ID、任务、清单、证据归属不漂移 | 详情与 PDA 同步显示新柜号 | 待契约 |
| CT-D06 | 预装清单已生成/确认 | CT-D03 | 清单版本、订单明细、数量及确认历史可追溯 | 预装清单列表/详情可点击 | 待契约 |
@@ -36,7 +36,7 @@
| 用例 | 场景 | 服务端/契约断言 | UI/设备断言 | 证据要求 | 状态 |
|---|---|---|---|---|---|
| CT-E01 | `CONFIRMED` 自动建柜 | 状态事件自动建一个柜次;重放幂等;失败可观测 | 订单详情无需手工建柜即可看到柜次 | 前后资源 ID、事件/日志 | 待契约 |
| CT-E01 | 模拟柜显式关联真实订舱柜 | `CONFIRMED` 不自动建柜;模拟柜排货后首次 link 成功且内部身份/明细稳定 | 货柜详情可从正式订舱候选显式关联 | link 前后柜次、计划、明细及订舱分配快照 | 已冻结,待环境验收 |
| CT-E02 | 渠道隔离 | 不同渠道不能进入同一排柜结果;交叉 ID 请求失败 | 候选、清单和详情不串渠道 | 双渠道正向及交叉负向响应 | 待契约 |
| CT-E03 | 无真实柜号排柜 | 临时身份可完成排柜/预装;真实柜号字段可空 | 页面明确展示待补号,不伪造柜号 | 柜次 ID、预装版本 | 待契约 |
| CT-E04 | 补号开放 PDA | 合法补号后任务可领取;未补号时领取被稳定阻止 | 补号前后 PDA 入口状态同步 | 补号审计、领取响应 | 待契约 |
@@ -59,7 +59,7 @@
| 能力标识 | 冻结边界 | 事实来源 | 状态 |
|---|---|---|---|
| `confirmed-auto-container` | `CONFIRMED` 自动建柜、幂等和唯一性 | 三期产品确认版及既有订单/货柜契约 | 既有冻结,待环境验收 |
| `simulation-container-link` | `CONFIRMED` 只形成真实订舱事实;内部模拟柜由货柜入口创建并显式关联,旧自动建柜语义已移除 | `PlatformContainerController`、`ContainerService`、`OceanBookingService`、`firstleg-v1.yaml`、`ocean-bookings-v1.yaml` | 本轮目标冻结,待环境验收 |
| `channel-isolation` | 渠道隔离与禁止跨渠道混装 | 三期产品确认版及既有排柜契约 | 既有冻结,待环境验收 |
| `container-number-lifecycle` | 无真实柜号排柜、补号开放 PDA、作业中换号身份稳定 | 既有预装/货柜/PDA 契约 | 既有冻结,待环境验收 |
| `preload-and-loading-list` | 预装与装柜清单状态、版本、明细和历史 | 既有 Loading List OpenAPI/Controller/DTO | 既有冻结,待环境验收 |
@@ -140,7 +140,23 @@
| 可选客户 | 原型第 527 行“客户/公司名称”无必填标记;当前产品确认允许平台先建订舱后关联客户 | Admin 可清空选择;前端类型、Java DTO 与 OpenAPI 均允许 `customerId/customerName` 同时为空,单边填写必须拒绝 | `LANDED` |
| 无客户 HTTP fixture | 不以历史客户或占位 ID/名称替代可空契约 | `ocean-bookings` 使用本轮 marker、正式渠道和仓库创建无客户订舱,详情回读真实 `bookingNo` 后按订舱号查询列表,断言空客户快照、`CONFIRMED` 及稳定柜次;发布 `createdResources.oceanBookingUnassignedCustomer` | 已准备,待部署后 HTTP 验收 |
| 指定客户隔离链 | 保留来自本轮入库单的正式客户范围 | `phase3-container-loading` 与既有订舱主链继续断言客户、仓库、渠道一致和跨渠道拒绝,不借历史资源 | 已准备,待部署后 HTTP 验收 |
| 提单号、船名、航次、ETD、ETA | 原型存在相关展示/录入字段,但 P3-Q14 明确真实运输数据在 `RELEASE` 补录,阶段时序覆盖草稿直接编辑方式 | 草稿页面仅只读展示,`OceanBookingDraftData` 和保存 payload 不含五字段;确认放舱弹框与 `ReleaseRequest` 必须完整携带五字段 | `LANDED` |
| 提单号、船名、航次、ETD、ETA | 原型存在相关展示/录入字段;最新 P3-Q14 确认线下已订妥资料在创建订舱时完整登记,创建直接进入 `CONFIRMED`;`RELEASED` 仅作为后续放舱/PDA 门禁,不覆盖首次快照 | 创建 payload、持久化详情和列表必须完整携带五字段并返回 `CONFIRMED`;正常路径不得再调用订舱 `/submit`、`/confirm`;后续 `ReleaseRequest` 仍须携带五字段且不得改变首次快照 | `LANDED` |
| 单证号 | 原型第 529 行存在“单证号”,但当前阶段 DTO/OpenAPI 未冻结对应写字段 | 不猜字段名或复用提单号;本轮不扩展写契约 | 非本轮能力,不标记接口阻断 |
离线合同:`ocean-booking-prototype-contract.test.mjs` 锁定原型证据、跨端可选客户、条款字段、草稿/放舱时序;`ocean-booking-fixture-contract.test.mjs` 与 `full-regression-entry-contract.test.mjs` 锁定无客户/指定客户双链和默认编排。
离线合同:`ocean-booking-prototype-contract.test.mjs` 锁定原型证据、跨端可选客户、条款字段、创建即确认和放舱门禁时序;`ocean-booking-fixture-contract.test.mjs` 与 `full-regression-entry-contract.test.mjs` 锁定无客户/指定客户双链和默认编排。DRAFT/SUBMITTED/FAILED 不再作为订舱人工矩阵的可稳定生成状态,仅保留正式列表负向覆盖。
## 内部模拟柜关联真实订舱增量
事实来源:`PlatformContainerController`、`ContainerDtos`、`ContainerService`、`OceanBookingService`、`OceanBookingMapper`、`firstleg-v1.yaml`、`ocean-bookings-v1.yaml`。
| 验收项 | 自动化断言 | 当前结论 |
|---|---|---|
| 正式订舱列表 | 仅允许 `CONFIRMED/CHANGE_PENDING/RELEASED/CANCELLED`;`DRAFT/SUBMITTED` 查询失败且默认列表不返回未确认记录;内部模拟柜不进入订舱列表 | 契约与 HTTP fixture 已落地,待部署后验证 |
| 新增内部模拟柜 | `POST /api/platform/v1/containers` 只接收正式装柜仓库、当前 ACTIVE 物流渠道、箱型、容量和限重;不接收真实柜号或订舱;服务端生成稳定 `containerBookingId/cabinetNo` | 契约与 HTTP fixture 已落地,待部署后验证 |
| 排货后首次关联 | 同仓、同渠道、箱型/容量/限重及指定客户范围一致时,允许已有预排货的 `EDITING` 模拟柜首次 `POST /containers/{id}/ocean-booking-link`;关联前后柜次、计划和明细身份不变 | 契约与 HTTP fixture 已落地,待部署后验证 |
| 隔离与唯一占用 | 跨仓、跨渠道、箱型/容量/客户范围不匹配拒绝;同一 `requirementId` 的真实订舱容量只能关联一次;双渠道负向必须来自同仓真实 ACTIVE 渠道,否则报告 `BLOCKED_FIXTURE` | 静态合同已锁定;双渠道和主要 HTTP 负向待部署后验证 |
| 首次关联不可逆门禁 | 存在 PDA、有效装柜证据、业务单证或已进入 `LOADING/COMPLETED` 时首次 link 拒绝 | 服务端静态门禁已锁定;需部署后以独立 marker fixture 验证 |
| 解绑与换绑 | 完全空的 `WAIT_LOADING` 模拟柜允许 unlink 后 rebind;一旦已有排货、PDA、证据或单证事实,unlink/rebind 均拒绝 | 空柜正向和排货后负向 HTTP fixture 已落地,待部署后验证 |
| 全量编排 | 默认入口先运行 `phase3-container-loading` 完成“模拟柜新增 -> 同仓同渠道排货 -> 首次 link -> PDA”,再由证据、finalize、出仓模块沿本轮 marker 的稳定 ID 继续;禁止历史数据和 mock 回退 | Node 入口合同已锁定,待默认全量 HTTP 验证 |
离线合同:`container-simulation-association-contract.test.mjs` 锁定跨层契约及全量顺序;`phase3-producer-chain-contract.test.mjs`、`phase3-order-splitting-contract.test.mjs`、`ocean-booking-channel-contract.test.mjs` 锁定现有生产者不再依赖 `CONFIRMED` 自动建柜。