# 头程至实际开船节点冻结矩阵与缺口清单 本文按当前确认结果冻结第一阶段范围:从头程下单开始,完成国内履约、报关协同、送港运输,并记录承运船舶实际开航。尾程入库、派送和签收不在本阶段实现。流程基线同时采用《报关代码开发交接清单》和《头程到尾程流程节点梳理》;原型只用于页面字段和承载方式参考。 ## 一、阶段边界 ```text 头程下单 F01-F13:下单、审核、到仓、测量、计费、费用确认、组托、待分柜 国内货柜履约 F14-F21:分柜、订舱、拖车、拣货、装柜、LOADED LOADED 后并行 F22:报关协同 F23:送港、进港、甩柜、改配 海运起点 F24:承运船舶实际开航 ``` 本阶段的终点是实际开航事实,不是“报关完成”、国内离仓、目的港清关或海外入仓。`LOADED` 只表示物理装柜完成;报关协同线和送港运输线从 `LOADED` 后同时启动,不能把其中一条线的结果写成另一条线的结果。 ## 二、F01-F24 节点冻结矩阵 | 节点 | 客户可见进度 | 后台业务对象 | 必须形成的真实事实 | 当前状态 | 本阶段缺口 | |---|---|---|---|---|---| | F01-F07 | 待下单、审核中、已审核 | 企业、订单、审核任务 | 提交、补件、审核、入仓单生成 | 已有主链 | 按现有订单契约回归,不在本轮重做 | | F08-F10 | 待到仓、测量中、待确认 | 入仓单、测量记录 | 收货、扫码、称重、测量、审核 | 已有主链 | 只核对是否能稳定产出排柜事实 | | F11-F13 | 费用待确认、待组托、待分柜 | 费用版本、确认记录、托盘 | 计费推送、客户确认、组托/封托 | 已确认并行规则 | 保证费用默认确认不能冒充报关确认 | | F14-F20 | 待分柜、订舱中、装柜中 | 柜次、装柜计划、拖车、PDA 任务 | 分柜、订舱、排车、拣货、照片、铅封、数量核对 | 主链已有 | 核对真实柜号、订舱和装柜快照能否冻结 | | F21 | 国内已装柜 | 装柜计划、物理货柜、装柜证据 | 实际柜号、实装箱数、装柜证据、`LOADED` | 已有 | 报关案例按最终实装范围建立;部分装柜只显示已装箱数并标记线下处理,不在系统内自动分摊 | | F22.1 | 报关确认中 | 客户报关案例 | 每客户案例、客户范围、入仓码范围、实装箱数显示 | 缺失 | 新增客户级案例和柜内覆盖信息;部分装柜显示箱数并交线下处理 | | F22.2 | 待提交资料、待补资料 | 客户资料包 | 上传、替换、补充、资料类型、版本、提交时间 | 部分已有 | 当前任意文件模型需补类型化清单和补件原因 | | F22.3 | 已发送报关行 | 报关行发送批次 | 发送范围、文件快照、发送人、发送时间、报关行 | 缺失 | 新增发送批次及幂等历史 | | F22.4 | 待客户确认 | 回执轮次 | 报关行回执、回执版本、返回时间、关联客户案例 | 缺失 | 新增每客户/每轮回执对象 | | F22.5 | 客户确认中、已打回 | 客户确认记录 | 确认/打回、成员、时间、原因、当前轮次 | 缺失 | 客户端新增确认与打回,打回只重开当前客户 | | F22.6 | 等待整柜确认 | 柜级申报批次 | 所有客户案例确认完成的门禁快照 | 缺失 | 未全部确认不得进入整柜正式提交 | | F22.7 | 已提交正式申报 | 整柜正式申报 | 提交报关行确认、正式申报时间、操作人、批次 | 缺失 | 不能用旧 `start` 直接代替正式申报 | | F22.8 | 查验中、待补资料、已放行、扣货/其他 | 海关结果事实 | 报关单号、结果类型、时间、凭证、处理结果 | 缺失 | 查验、不查验放行、扣货和其他结果分开记录 | | F23.1 | 送港中、已离仓 | 送港/出仓任务 | 离仓时间、车辆/任务、操作人、证据 | 已有对象 | 报关确认不能成为送港前置 | | F23.2 | 已送港、已进港 | 运输和港口事实 | 送港时间、进港时间、来源和凭证 | 部分已有 | 与订舱、拖车和船次事实统一读写 | | F23.3 | 已甩柜、改配中、待下一航次 | 异常/改配记录 | 甩柜原因、发生时间、原航次、新航次、处理人 | 部分已有 | 需要独立历史,不能覆盖原进港事实 | | F24 | 海运中 | 船次实际节点 | 承运船舶、航次、实际开航时间、来源/凭证 | 基础已有 | 只允许实际开航事实推进海运节点 | ## 三、当前实现与目标的主要断点 ### 1. 报关数据模型仍是旧柜级模型 当前 `fl_customs_container` 只有 `WAITING_CUSTOMER_DOCUMENTS`、`READY_TO_START`、`DECLARING`、`COMPLETED` 四个状态;客户资料根记录挂在柜级报关聚合下,不能表达“同柜多个客户各自有独立案例和轮次”。 目标至少需要以下关系: ```text 物理货柜 ├─ 最终实装快照 ├─ 客户报关案例 × N │ ├─ 客户资料包与版本 │ ├─ 报关行回执轮次 × N │ └─ 客户确认/打回记录 × N ├─ 整柜正式申报批次 └─ 海关结果事实 × N ``` ### 2. 当前“报关完成”含义过宽 现有完成动作是平台上传每份完成文件,或对全买单柜直接确认;这不能继续作为客户确认、正式申报、海关放行和可离仓的统一含义。状态需要按客户案例、整柜申报和海关结果分别投影。 ### 3. 报关线与送港线的门禁关系需要调整 当前 `CustomsDispatchGateContributor` 要求 `fl_customs_container.status=COMPLETED` 才通过国内出仓门禁,`CustomsAutoDispatchCoordinator` 也在报关完成后自动尝试离仓。这与冻结口径冲突:报关资料未确认只能阻断报关线正式提交,不能阻断送港线。 需要重新定义: - 送港/离仓门禁只检查装柜、PDA、订舱、证据和其他已确认的运输条件。 - 报关线单独检查客户案例确认、整柜申报和海关结果。 - 报关完成事件不能自动伪造送港或开船事实。 - 实际开航只能由船次实际节点推进。 ### 4. 客户端缺少报关协同闭环 当前客户端 `CustomsDocumentsDialog.vue` 只能上传、替换、调整关联入仓码和下载完成文件,缺少: - 独立报关资料列表和待办数; - 报关行回执查看; - 当前轮次确认; - 打回原因和重新提交; - 客户案例的进度和通知。 ### 5. 平台端缺少整柜协同闭环 当前 `ContainerCustomsPanel.vue` 主要展示缺资料清单、冻结资料和完成文件,缺少: - 按客户查看案例和实际装柜覆盖; - 发送报关行批次; - 回执轮次管理; - 客户确认汇总; - 全部客户确认后的整柜正式提交; - 报关单号和海关结果录入; - 查验、扣货、补资料和其他结果的历史。 ## 四、接口、权限、审计和测试缺口 ### 接口与数据库 - OpenAPI 不能继续只暴露旧的四态 `ContainerView`。 - 需要新增客户案例、资料包、发送批次、回执轮次、确认记录、整柜申报和海关结果的查询/命令契约。 - 文件仍由 File 服务保存,但每个文件必须绑定业务类型、客户案例/申报批次、版本和覆盖范围。 - 每个写命令都要带版本和幂等键;重放同参数返回原结果,不同参数返回冲突。 - 换柜时需要保留新旧柜关联;部分装柜只记录已装箱数和线下处理标记,不在系统内自动做数量分摊或覆盖旧资料。 ### 权限 至少区分: - 客户上传、替换、补件、确认、打回; - 平台客服接收、核对、退回补件; - 平台报关操作员发送报关行、上传回执、提交正式申报; - 平台人员录入查验、放行、扣货及其他海关结果; - 客户和平台各自的只读下载权限。 ### 审计 需要保留客户范围、资料版本、回执轮次、确认人、打回原因、提交批次、报关单号、结果凭证和操作时间。客户 A 的动作不能出现在客户 B 的案例中;柜级汇总可以看到客户名和业务编号,但客户端只能看到自身范围。 ### 测试 最小验收矩阵至少覆盖: 1. 单客户和多客户同柜。 2. 一客户打回时其他客户继续保持已确认。 3. 同一请求重放、同幂等键换参数、版本冲突。 4. 未全部客户确认时正式提交被拒绝。 5. 正式申报、查验、不查验放行、扣货和其他结果分别显示。 6. 报关线未完成时送港仍可按运输门禁继续。 7. 甩柜改配保留原航次事实并生成新航次关联。 8. 只有实际开航事实推进 F24。 9. 客户越权读取同柜其他客户资料被拒绝。 10. 部分装柜能显示实际箱数并留下线下处理标记;换柜不能直接覆盖原案例和历史回执。 ## 五、开发前仍需业务确认 以下问题中,前四项已经由《报关代码开发交接清单》和《头程到尾程流程节点梳理》冻结,本轮又补充冻结了文件形态、部分装柜展示、回执确认、首期申报和实际开航/改配处理方式;表格后的内容仍需业务补充,不能由代码现状推断。 ### 已冻结的业务规则 | 规则 | 冻结口径 | 依据 | |---|---|---| | 资料提交时点 | `LOADED` 后按最终实装快照建立客户案例并进入本轮报关 | 交接清单“一、必须实现的报关流程”;总流程 F21/F22 | | 同柜客户边界 | 一个客户案例只属于一个客户;同一客户多个入仓码可以共享资料,但跨客户正式合报默认禁止 | 报关专题“申报组与柜级总览”“买单、退税和混合柜完成条件” | | 回执与客户确认 | 首期以报关行回执文件为主,客户对整份回执确认;回执上传不等于客户确认 | 本轮业务确认 | | 资料与部分装柜 | 报关资料、报关行回执都按文件保存;部分装柜只展示箱数,线下人员处理后续,不做系统内数量分摊 | 本轮业务确认 | | 首期正式申报 | 由平台授权人员人工提交并回填报关行确认和海关结果 | 本轮业务确认;报关专题状态约定 | | 报关与送港关系 | `LOADED` 后两条线并行,报关确认、正式申报和海关结果不作为送港前置 | 交接清单“二、必须保持的并行关系”;总流程“四、关键节点” | | 海运起点与改配 | 首期人工录入实际开航;甩柜/改配生成新航次,并重新评估关联申报批次;只有实际开航事实推进 F24 | 本轮业务确认;交接清单第二条;总流程 F23/F24 | ### 仍需补充的字段和操作规则 1. 首版资料清单具体项目、条件规则、版本生效方式和责任人是什么? ## 六、冻结结论 - 第一阶段覆盖 F01-F24,终点为实际开航。 - F22 报关协同和 F23 送港运输从 `LOADED` 后并行启动。 - 客户确认、报关行回执、整柜正式申报、海关放行、离仓、进港、甩柜和实际开航都是独立事实。 - 先完成节点矩阵、对象关系、状态投影、门禁和验收缺口确认,再进入代码设计。 - 尾程 F25-F40 暂不纳入本阶段实现,但必须保留 F24 到目的港清关的接口衔接点。