Test #1

Merged
admin merged 256 commits from test into main 2026-09-28 16:01:16 +08:00
3 changed files with 30 additions and 9 deletions
Showing only changes of commit 2cf36a3b12 - Show all commits
+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` 自动建柜。
+7 -2
View File
@@ -29,17 +29,22 @@
| `019ff90b-9b45-7191-b68f-c3b52567e3e4` | `019ff600-f9f1-78f1-a357-7c80c13e574e` | 货柜管理后端扩展契约 | 补齐清关报关与 DO/PU 文件查看下载、货柜异常及历史、运输轨迹日志和柜次 PDA 作业摘要的后端契约、权限、OpenAPI、SQL 与测试 |
| `019ff90b-a037-79b0-b945-8f88bdbde9c5` | `019ff600-f9f1-78f1-a357-7c80c13e574e` | 货柜管理 Admin 功能补齐 | 补齐货柜与装柜清单的文件闭环、异常处理、更多操作、运输轨迹日志、PDA 摘要和必要列表字段,不含柜态看板 |
| `019ff90b-a72d-7000-abdf-e5363357a564` | `019ff600-f9f1-78f1-a357-7c80c13e574e` | 货柜管理全链验收与状态数据 | 维护货柜管理全流程契约测试、真实验收脚本、各状态人工可点击数据矩阵和验收证据,不修改业务源码 |
| `01a00037-08c8-7883-b76d-5c22b88e2329` | `019ff600-f9f1-78f1-a357-7c80c13e574e` | PDA 拣货与装柜取证 | 维护 PDA 拣货、批量提交、任务恢复、装柜证据、状态提示及现场交互,并同步 PDA 本地契约测试;不修改 Admin、Client 或 Java 业务源码 |
| `019ffef3-cc5e-78a1-affa-bcc98abfcc9e` | `019ffe52-81c7-74b2-9e8c-644428843584` | 国内仓订单-称重图片 OCR 与总重量 | 建设测量环节称重图片上传、OCR 重量识别、人工确认及订单总重量汇总的 Admin、Firstleg、File/Integration 契约与自动化测试,不改变审核直达待分柜和费用非阻塞规则 |
| `019fff79-cdba-74f1-a591-3086119a94ed` | `019ffe52-81c7-74b2-9e8c-644428843584` | Warehouse 托盘主数据去资源化 | 将托盘收敛为可复用标识与主数据,维护托盘容量、皮重及内部只读快照契约,移除托盘动态占用释放语义,同时保持库位预占、占用、释放和 PDA 结算资源状态机 |
| `019fff79-d2bd-74f1-9342-aaf677cb480d` | `019ffe52-81c7-74b2-9e8c-644428843584` | Admin 称重托盘与真实错误态 | 维护 Admin 入仓称重的托盘选择、毛重皮重净重展示、真实业务错误呈现及相关响应式和自动化测试,消费 Firstleg 最终称重去皮契约 |
| `019ffedb-8e47-7262-84fa-13c4309864f4` | `019ff600-e924-7902-b00e-fa1ee1658e08` | 客户详情操作日志分页计数修复 | 修复客户详情操作日志实际记录与分页总数不一致,核对审计分页契约、Admin 适配和回归测试;不得部署或写测试环境 |
| `019ffedb-8e47-7262-84fa-13c4309864f4` | `019ff600-e924-7902-b00e-fa1ee1658e08` | 客户审计日志与权限契约 | 维护客户详情操作日志的查询、分页、字段呈现、脱敏、平台权限与 Gateway/API 契约测试;不接管客户生命周期、IAM 菜单初始化或业务事件生产者 |
| `019ffac4-fdb1-71f2-af81-35366389a717` | `019ff600-e924-7902-b00e-fa1ee1658e08` | 消息中心与客户收件箱 | 维护 Admin 消息模板与发送任务、Client 我的消息、已读未读、成员与客户隔离、IAM 通知契约及全量真实验收 |
| `019ff9db-46b2-7830-9a69-a326485fdaa7` | `019ff8e7-aa4a-7ee0-b856-ee5db7ae525f` | Admin 原型样式收敛 | 维护 Admin 页面与弹框的原型视觉差异、共享样式边界和前端视觉验收;不修改 Client,不覆盖业务功能、服务端契约或权限语义,跨模块共享样式由 Admin 平台治理总控统一集成 |
| `019ff9db-46b2-7830-9a69-a326485fdaa7` | `019ff8e7-aa4a-7ee0-b856-ee5db7ae525f` | Admin 原型样式与全量视觉验收 | 维护 Admin 页面与弹框的原型视觉差异、共享样式边界和前端视觉验收;不处理临时缺陷、部署故障或服务端契约。不得修改 Client,不覆盖业务功能、服务端契约或权限语义,跨模块共享样式由 Admin 平台治理总控统一集成 |
## 规则
- 只有用户明确指定当前对话为总控时才登记;任务规模和模型判断不能自动启用总控。
- 跨对话寻址只使用 `task_id`,名称只用于展示。独立任务创建成功后,先登记稳定 ID、所属总控 ID 和职责,再下发工作。
- 一个 `task_id` 在本文件中只能有一个角色和一条稳定职责:总控只能出现在“总控”表,独立任务只能出现在“总控创建、需要长期复用的用户独立任务”表。不得同时作为总控和子任务登记。
- 发送前必须以本文件的 `task_id`、`parent_task_id` 和职责为准做三项核对;侧栏标题、历史标题、同名对话和模型摘要都不是寻址依据。未登记 ID、父 ID 不一致、职责不匹配或存在同名副本时,不得下发,先回报总控或用户确认。
- 已登记独立任务只复用其登记职责。一次性缺陷、部署排障、临时验收或与登记职责无关的工作不得借用该 ID;需要长期复用的新职责时,由所属总控在用户授权后创建并登记新的独立任务。
- 对话标题应与登记 `display_name` 保持一致;发现历史标题或当前标题不一致时,先以登记职责判断是否仍可复用。确认职责已稳定变化后,先更新本表,再改标题;不得仅因标题相同认定为同一任务。
- 只登记用户可见的长期独立任务;普通对话和 `thread_source=subagent` 子代理不登记。
- 复用前只读核对 ID 是否存在、未归档且职责匹配。异常时停止并告诉用户,不自动创建、归档、解档、恢复或替换任务。
- 本文件只保存稳定 ID、父子关系和职责,不记录状态、进度、排期、工作包、验证结果或临时阻断。