From 5e4e978cd590efe17792ff9f612262a0a5f4c151 Mon Sep 17 00:00:00 2001 From: xst <2318492244@qq.com> Date: Tue, 29 Sep 2026 10:03:43 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=85=A5=E5=BA=93=209=20=E6=9C=88?= =?UTF-8?q?=E7=A7=AF=E5=8E=8B=E6=88=90=E6=9E=9C=EF=BC=88=E6=BB=87=E4=B8=AD?= =?UTF-8?q?=E5=A5=BD=E8=BF=90=E5=8E=9F=E5=9E=8B=E8=AF=84=E4=BC=B0=E3=80=81?= =?UTF-8?q?=E5=B0=8F=E8=B1=A1=E5=BC=80=E7=A5=A8=E9=9C=80=E6=B1=82=E4=B8=8E?= =?UTF-8?q?=E5=8E=9F=E5=9E=8B=E3=80=81=E5=B7=A5=E5=85=B7=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 原型评估_滇中好运物流云_20260917/:物流云原型评估产物(含核对表与字段对比表) - requirements/小象开票收款方创建需求.md + prototypes/小象开票原型.html:小象开票建司机/车辆/收款信息需求 - requirements.txt:Execute 战区依赖调整(移除 pytest/allure-pytest/requests,改用 pytest-html,Appium 默认注释) - .claude/launch.json:新增物流公司管理原型预览服务(wuliu-proto:8138) - .agents/skills:agent 技能定义 --- .agents/skills/case_generate/SKILL.md | 7 + .agents/skills/qe_fleet/SKILL.md | 221 ++++++ .claude/launch.json | 12 +- requirements.txt | 9 +- requirements/prototypes/小象开票原型.html | 628 ++++++++++++++++++ requirements/小象开票收款方创建需求.md | 272 ++++++++ .../01_原型盘点.md | 76 +++ .../02_网络货运合规对照.md | 51 ++ .../03_与运八契合度对比.md | 53 ++ .../04_司机车辆字段核对.md | 590 ++++++++++++++++ 原型评估_滇中好运物流云_20260917/05_核对表.md | 525 +++++++++++++++ .../05_核对表_字段名对比_v2.xlsx | Bin 0 -> 41718 bytes .../06_原型不存在字段清单.xlsx | Bin 0 -> 18154 bytes 原型评估_滇中好运物流云_20260917/README.md | 28 + 14 files changed, 2463 insertions(+), 9 deletions(-) create mode 100644 .agents/skills/case_generate/SKILL.md create mode 100644 .agents/skills/qe_fleet/SKILL.md create mode 100644 requirements/prototypes/小象开票原型.html create mode 100644 requirements/小象开票收款方创建需求.md create mode 100644 原型评估_滇中好运物流云_20260917/01_原型盘点.md create mode 100644 原型评估_滇中好运物流云_20260917/02_网络货运合规对照.md create mode 100644 原型评估_滇中好运物流云_20260917/03_与运八契合度对比.md create mode 100644 原型评估_滇中好运物流云_20260917/04_司机车辆字段核对.md create mode 100644 原型评估_滇中好运物流云_20260917/05_核对表.md create mode 100644 原型评估_滇中好运物流云_20260917/05_核对表_字段名对比_v2.xlsx create mode 100644 原型评估_滇中好运物流云_20260917/06_原型不存在字段清单.xlsx create mode 100644 原型评估_滇中好运物流云_20260917/README.md diff --git a/.agents/skills/case_generate/SKILL.md b/.agents/skills/case_generate/SKILL.md new file mode 100644 index 0000000..dd1605c --- /dev/null +++ b/.agents/skills/case_generate/SKILL.md @@ -0,0 +1,7 @@ +# case_generate (向后兼容别名) + +本 skill 是 `/qe-fleet run` 的向后兼容别名,行为完全一致。 + +调用 `python3 scripts/fleet_runner.py run --requirement <需求文档路径>`,按战区顺序执行完整流水线,产出至 `output/manifests/{BASE_NAME}.json`。 + +详情请参见 `.Codex/skills/qe_fleet/SKILL.md`。 diff --git a/.agents/skills/qe_fleet/SKILL.md b/.agents/skills/qe_fleet/SKILL.md new file mode 100644 index 0000000..6554369 --- /dev/null +++ b/.agents/skills/qe_fleet/SKILL.md @@ -0,0 +1,221 @@ +--- +name: qe-fleet +description: Agentic QE Fleet — 混合流水线:Python 脚手架 + AI Agent 内容生成 +metadata: + short-description: 多 Agent QE Fleet:从需求到测试用例的全流程自动化 + 质量门禁 + 知识沉淀 +--- + +# Agentic QE Fleet(混合流水线 v3.0) + +当用户输入以下任一意图时使用本 skill: + +- `/qe-fleet run <需求文档>` +- `/qe-fleet prepare <需求文档>` +- `/qe-fleet analyze <需求文档>` +- `/qe-fleet design <需求文档>` +- `/qe-fleet review <需求文档>` +- `/qe-fleet export <需求文档>` +- `/qe-fleet monitor <需求文档> --results <测试结果>` +- `/qe-fleet status <需求文档>` +- `/case_generate <需求文档>`(向后兼容别名) + +## 架构概述 + +本流水线采用**混合架构**: + +- **Python 脚本(fleet_runner.py)**: 处理确定性工作——文档解析、知识激活、需求分析、冲突检测、风险矩阵、测试策略模板、测试数据模板、Playwright/Appium 脚本骨架、清单管理 +- **Codex Agent(本 Skill)**: 处理生成式 AI 工作——测试点设计、测试用例编写、用例评审、覆盖率审计、质量裁决 + +## `/qe-fleet run` — 全流程自动执行 + +收到此命令后,按以下 6 个阶段自动执行,不要停在说明阶段: + +### Phase 1: SCAFFOLD(脚手架生成) + +```bash +python scripts/fleet_runner.py run --scaffold-only --requirement <需求文档路径> +``` + +产出: +- 标准化需求文档(含附加文件检测 + 多源注册表) +- 知识激活 + 缺口检测 +- 需求分析 + 冲突检测 + 风险矩阵 +- 测试策略模板 + 测试数据模板 +- Playwright/Appium 脚本骨架 +- 所有战区 manifest(含 `pending_ai` 标记) + +### Phase 2: GATE-CHECK(门禁检查) + +读取 `output/manifests/{BASE_NAME}_analyze.json`: +- 若 `confirmation_gate.required=true` 且 `decision_status` 不是 `confirmed` 或 `not_required`: + - 🛑 阻断并告知用户:确认单路径、阻断原因 + - 不得继续执行后续阶段 +- 若门禁通过或无门禁要求,继续 Phase 3 + +### Phase 3: AI-DESIGN(AI 生成设计产物) + +按依赖顺序调用 AI Agent 填充设计产物。**重要**:若目标文件已存在且内容非空(>500 字符),跳过该 Agent 并告知用户可手动重新生成。 + +#### 3a: data-builder + testpoint-designer(可并行) + +**Agent: data-builder** +- 输入文件:`output/analysis/{BASE_NAME}_分析.md`、`{PROJECT_PROFILE}`、来自 prepare manifest 的 `sources_registry` 中所有 `role=api_spec` 的附加文件 +- Agent prompt:`agents/design/data_builder.md` +- 输出:`output/analysis/{BASE_NAME}_测试数据.md`(覆盖模板) +- 验证:文件存在且 >300 字符 +- 调用方式:使用 Agent 工具,subagent_type=general-purpose,在 prompt 中指明输入文件和输出文件 + +**Agent: testpoint-designer** +- 输入文件:`output/analysis/{BASE_NAME}_分析.md`、`output/analysis/{BASE_NAME}_风险评估.md`、`output/analysis/{BASE_NAME}_测试策略.md`、`output/analysis/{BASE_NAME}_关联与冲突.md`、`{PROJECT_PROFILE}`、`knowledge_base/02_history/common_missed_scenes.md`、`knowledge_base/02_history/historical_defects.md`、`knowledge_base/01_standards/definition_of_done.md`、prepare manifest 中 `sources_registry` 的所有附加文件 +- Agent prompt:`agents/design/testpoint_designer.md` +- 输出:`output/test_points/{BASE_NAME}_测试点.md` +- 验证:文件存在且 >500 字符,含有 `TP-` 标识符 +- 调用方式:使用 Agent 工具,subagent_type=general-purpose + +#### 3b: case-designer(依赖 3a 完成) + +- 输入文件:`output/test_points/{BASE_NAME}_测试点.md`(3a 产出)、`output/analysis/{BASE_NAME}_测试数据.md`、`knowledge_base/01_standards/test_case_template.md`、`knowledge_base/01_standards/review_checklist.md`、`knowledge_base/03_best_practices/` +- Agent prompt:`agents/design/case_designer.md` +- 输出:`output/test_cases/{BASE_NAME}_测试用例.md` +- 验证:文件存在且 >500 字符,含 Markdown 表格,表头与 `test_case_template.md` 一致 +- 调用方式:使用 Agent 工具 + +### Phase 4: AI-REVIEW(AI 评审) + +#### 4a: case-reviewer + coverage-auditor(可并行) + +**Agent: case-reviewer** +- 输入文件:`output/test_cases/{BASE_NAME}_测试用例.md`、`knowledge_base/01_standards/review_checklist.md`、`knowledge_base/01_standards/test_case_template.md`、`knowledge_base/01_standards/definition_of_done.md`、`output/analysis/{BASE_NAME}_风险评估.md` +- Agent prompt:`agents/review/case_reviewer.md` +- 输出:`output/analysis/{BASE_NAME}_评审报告.md` +- 验证:文件存在且 >500 字符,含阻断项/建议项计数 + +**Agent: coverage-auditor** +- 输入文件:`output/analysis/{BASE_NAME}_分析.md`、`output/test_points/{BASE_NAME}_测试点.md`、`output/test_cases/{BASE_NAME}_测试用例.md`、`output/analysis/{BASE_NAME}_风险评估.md` +- Agent prompt:`agents/review/coverage_auditor.md` +- 输出:`output/analysis/{BASE_NAME}_覆盖率审计.md` +- 验证:文件存在且 >500 字符 + +#### 4b: quality-gatekeeper(依赖 4a 完成) + +- 输入文件:`output/analysis/{BASE_NAME}_评审报告.md`、`output/analysis/{BASE_NAME}_覆盖率审计.md`、`output/analysis/{BASE_NAME}_风险评估.md`、`fleet_config.yml` +- Agent prompt:`agents/review/quality_gatekeeper.md` +- 输出:`output/analysis/{BASE_NAME}_质量裁决.md` +- 验证:文件含 `PASS`、`PASS_WITH_FIX` 或 `BLOCKED` + +### Phase 5: VERDICT(裁决 + 导出) + +读取 `output/analysis/{BASE_NAME}_质量裁决.md` 中的裁决结果: + +- **PASS** 或 **PASS_WITH_FIX**: 执行导出 + ```bash + python scripts/fleet_runner.py export --requirement <需求文档路径> + ``` + (若已有 review 战区的阻断项或覆盖缺口,在导出前先修复用例文件,参考 Phase 4 的评审报告) +- **BLOCKED**: 🛑 告知用户阻断原因,提供修复方向,不导出 Excel + +### Phase 6: REPORT(汇总反馈) + +输出最终状态汇总: + +``` +🏁 QE Fleet 运行完成 + ✅ prepare: 完成 (置信度 0.95, 附加文件 N 个) + ✅ analyze: 完成 (风险 P0=N, P1=N) + ✅ design: 完成 (测试点 N, 用例 N) + ✅ execute: 完成 (Playwright + Appium 脚本) + ✅ review: 完成 (裁决: PASS/PASS_WITH_FIX/BLOCKED) + ✅ export: 完成/N/A + +产物: + 📊 Excel: output/excel_reports/{BASE_NAME}_测试用例.xlsx + 🧠 XMind: output/xmind_reports/{BASE_NAME}.xmind + 📋 测试点: output/test_points/{BASE_NAME}_测试点.md (N个) + 📝 测试用例: output/test_cases/{BASE_NAME}_测试用例.md (N条) + ✅ 质量裁决: output/analysis/{BASE_NAME}_质量裁决.md +``` + +--- + +## 其他命令 + +### `/qe-fleet prepare <需求文档>` +```bash +python scripts/fleet_runner.py prepare --requirement <需求文档路径> +``` + +### `/qe-fleet analyze <需求文档>` +```bash +python scripts/fleet_runner.py analyze --requirement <需求文档路径> +``` + +### `/qe-fleet design <需求文档>` +仅执行 Phase 3(AI-DESIGN),前提是 prepare 和 analyze 已完成。 +若 manifest 未就绪,先执行对应的脚手架命令。 + +### `/qe-fleet review <需求文档>` +仅执行 Phase 4(AI-REVIEW),前提是设计产物已存在。 + +### `/qe-fleet export <需求文档>` +```bash +python scripts/fleet_runner.py export --requirement <需求文档路径> +``` + +### `/qe-fleet monitor <需求文档> --results <测试结果>` +```bash +python scripts/fleet_runner.py monitor --requirement <需求文档路径> --results <测试结果文件> +``` + +### `/qe-fleet status <需求文档>` +```bash +python scripts/fleet_runner.py status --requirement <需求文档路径> +``` + +--- + +## AI Agent 调用模板 + +每次调用 AI Agent 时,使用以下模板构造 prompt: + +``` +你是 {agent_name}。{从 agent prompt 文件读取的 role 描述}。 + +# 任务 +{从 agent prompt 文件读取的 task 描述} + +# 关键输入文件(必须读取) +{列出所有输入文件路径} + +# 输出文件 +写入: {output_file_path} + +# 输出格式 +{从 agent prompt 文件读取的 output format} + +# 约束 +{从 agent prompt 文件读取的 constraints} + +# 附加上下文 +- 项目画像: {PROJECT_PROFILE} +- 附加源文件(如有,来自 prepare manifest sources_registry) +``` + +--- + +## 约束 + +- 除非脚本执行失败,不要要求用户手动执行中间命令 +- 确认门禁未解除时,必须阻断并告知原因和解决路径 +- 质量裁决 BLOCKED 时,不得导出 Excel +- 若主输入是 .docx/.doc/.pdf,必须基于 prepare 产出的标准化 Markdown +- 若 manifest 中有附加源文件(`sources_registry`),必须纳入 AI Agent 的输入文件列表 +- 需求有歧义时必须显式标注 `> ⚠️ 待确认:问题、影响范围、建议确认方向` +- 基于项目画像差异化,避免通用化输出 +- 历史缺陷和易漏场景必须显式体现在测试点或用例中 +- 预期结果必须同时覆盖 UI 反馈和数据状态变化 +- 所有 bash 命令使用 `python`(非 `python3`) +- 若改动涉及 scripts/、.Codex/、agents/、AGENTS.md、README.md,必须执行 `python scripts/governance_audit.py auto` + +## 兼容性 + +`/case_generate` 保留为 `/qe-fleet run` 的别名,行为完全一致。 diff --git a/.claude/launch.json b/.claude/launch.json index f84cd88..8828cc8 100644 --- a/.claude/launch.json +++ b/.claude/launch.json @@ -2,10 +2,16 @@ "version": "0.0.1", "configurations": [ { - "name": "prototypes", + "name": "proto-mirror", "runtimeExecutable": "python", - "runtimeArgs": ["-m", "http.server", "8791", "--directory", "resources/prototypes"], - "port": 8791 + "runtimeArgs": ["-m", "http.server", "8137", "--directory", "C:/Users/23184/AppData/Local/Temp/proto_mirror"], + "port": 8137 + }, + { + "name": "wuliu-proto", + "runtimeExecutable": "python", + "runtimeArgs": ["-m", "http.server", "8138", "--directory", "requirements/prototypes"], + "port": 8138 } ] } diff --git a/requirements.txt b/requirements.txt index 20ce8ba..a326921 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,12 +1,9 @@ openpyxl>=3.1,<4 python-docx>=0.8.11,<2 pyantiword -# ── Execute 战区 / 测试框架依赖 ── -pytest>=8.0 +# ── Execute 战区依赖 ── playwright>=1.40 Pillow>=10.0 # 截图像素对比 (result-reporter Agent) -Appium-Python-Client>=3.0 # 移动端自动化(仅 Web 端测试可不装) +# Appium-Python-Client>=3.0 # 取消注释以启用移动端自动化 pymysql>=1.0 # 数据库操作(测试中更新风控状态等) -PyYAML>=6.0 # tests/config/test_config.yaml 配置加载 -allure-pytest>=2.13 # Allure 测试报告 -requests>=2.28 # tests/apis/yun8 HTTP 客户端 +pytest-html>=4.0 # pytest HTML 报告 diff --git a/requirements/prototypes/小象开票原型.html b/requirements/prototypes/小象开票原型.html new file mode 100644 index 0000000..4475b41 --- /dev/null +++ b/requirements/prototypes/小象开票原型.html @@ -0,0 +1,628 @@ + + + + + +小象开票 - 收款方创建 - 交互原型 + + + +
+ + +
+
+ +
+ 管超级管理员 +
+
+ +
交互原型:数据为演示数据、不落库;对接 xxyb 接口(创建司机 / 创建车辆 / 新增收款信息);筛选样式参照真实页面(表头筛选行)。
+ +
+ +
+
+
已创建司机
0
+
已创建车辆
0
+
收款信息
0
+
待审核
0
+
+
+
快捷入口(小象开票)
+
+ + + +
+
+
+ + +
+
+
创建司机(小象开票)
+
+ + + + + +
+
+ + + + + + + + + + + + + + +
税源地审核状态审核时间司机姓名身份证号身份证有效期手机号操作
+
+ +
+
+ + +
+
+
创建车辆(小象开票)
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + +
税源地审核状态审核时间车牌号车辆所有人车辆分类车牌颜色车辆能源类型操作
+
+ +
+
+ + +
+
+
新增收款信息(小象开票)
+
+ + + +
+
+ + + + + + + + + + + + +
收款人姓名身份证号收款银行卡号收款银行收款手机号收款人类型第三方ID / 操作
+
+ +
+
+ +
+
+
+ + +
+
+
新增司机×
+
+
基础信息(司机实名)
+
+
+
+
+
+
点击上传
+
点击上传
+
+
+ 司机认证信息(选填,driverAuthDomain) +
+
+
+
+
点击上传
+
点击上传
+
+
+
点击上传
+
+
+
非必填字段按 xxyb 平台实际配置填写(接口文档注意事项);证件有效期为长期时填"长期"。
+
+
+
+ + +
+
+
+ + +
+
+
新增车辆×
+
+
车辆基础信息
+
+
+
+
+
车辆认证信息
+
+
+
+
+
+
点击上传
+
点击上传
+
+
+
+
+
+
其余字段(行驶证副页/注册日期/发证机关、道路运输证年检与有效期、挂车信息、总质量/核定载质量/整备质量、外廓尺寸、使用性质、挂靠协议等)见接口文档,正式表单全量保留。
+
+
+ + +
+
+
+ + +
+
+
新增收款信息×
+
+
+
+
+
+
+
点击上传
+
+
+
+
+
+ + +
+
+
+ +
+ + + + diff --git a/requirements/小象开票收款方创建需求.md b/requirements/小象开票收款方创建需求.md new file mode 100644 index 0000000..003cabe --- /dev/null +++ b/requirements/小象开票收款方创建需求.md @@ -0,0 +1,272 @@ +# 小象开票 —— 收款方创建需求文档(创建司机 / 创建车辆 / 新增收款信息) + +> **版本**: v1.0(初稿) +> **编写日期**: 2026-09-28 +> **状态**: 待评审 +> **接口文档(权威来源)**: +> - 创建司机:https://v4.xxyb.cn/markdown/link/proxy/DriverCreate.html +> - 创建车辆:https://v4.xxyb.cn/markdown/link/proxy/VehicleCreate.html +> - 新增收款信息:https://v4.xxyb.cn/markdown/link/proxy/PayeeCreate.html +> - 公共枚举:https://v4.xxyb.cn/markdown/link/base/Code.html +> **交互原型**: [prototypes/小象开票原型.html](prototypes/小象开票原型.html)(风格与"物流公司管理"原型一致,数据为演示数据) +> **UI 参考**: 三十六匠发票"司机上传 / 车辆上传"页面截图(表头筛选行 + 批量上传按钮样式) +> **菜单位置**: 小象开票(顶级菜单)下新增:创建司机、创建车辆、新增收款信息 + +--- + +## 1. 背景与目标 + +小象开票(联合开票)业务要求承运方(司机、车辆)及其收款账户先在 xxyb 平台完成建档,才能开票。当前建档在小象平台侧手工操作,与运八系统脱节。本次在小象开票菜单下新增三个功能,直接调用 xxyb 开放接口完成建档: + +1. **创建司机**:录入司机信息 → 调用 `createDriver` 在 xxyb 平台创建司机档案; +2. **创建车辆**:录入车辆信息 → 调用 `createVehicle` 创建车辆档案; +3. **新增收款信息**:录入收款人账户 → 调用 `createPayee` 创建收款信息。 + +建档结果(第三方返回 ID、审核状态)在列表中可见、可追溯。 + +### 1.1 设计原则 + +- 三个功能均为**记录/建档性质**:调用成功即在本系统留存记录并展示第三方审核状态,**不阻断**运单、开票等任何既有流程(是否允许开票由小象平台侧控制)。 +- 接口文档为字段权威来源,本文档字段表与其一致;页面展示字段为全量字段的子集(必填 + 高频选填),其余字段按接口文档保留扩展。 + +--- + +## 2. 名词 + +| 名词 | 说明 | +|:---|:---| +| xxyb 平台 | 联合开票合作方(小象),接口基地址 `https://www.xxyb.cn/union/api/link/` | +| 税源地 | 开票主体(如云南运八数据科技有限公司),建档时随单传入 | +| 审核状态 | xxyb 平台对建档资料的审核结果:待审核 / 审核通过 / 审核不通过(AuditStatusEnum) | +| 长期 | 证件有效期无固定截止日期时,有效期字段填写字符串"长期" | + +--- + +## 3. 角色与权限 + +| 角色 | 权限 | +|:---|:---| +| 开票运营人员 | 三个页面的新增、查看、批量上传 | +| 其他角色 | 列表只读(按需授权) | + +- 数据按机构隔离(沿用平台多机构规则);操作记行为日志。 +- **Header 鉴权**:`token`(应用令牌)、`cid`(合作ID),由平台配置统一注入,前端不接触。 + +--- + +## 4. 功能清单 + +| 编号 | 功能 | 说明 | 优先级 | +|:---|:---|:---|:---:| +| FR-01 | 创建司机 | 司机列表 + 新增司机弹窗,提交调用 `createDriver` | P0 | +| FR-02 | 创建车辆 | 车辆列表 + 新增车辆弹窗,提交调用 `createVehicle` | P0 | +| FR-03 | 新增收款信息 | 收款信息列表 + 新增弹窗,提交调用 `createPayee` | P0 | +| FR-04 | 审核状态展示 | 列表展示 xxyb 审核状态与审核时间 | P0 | +| FR-05 | 批量上传 | 司机身份证批量上传、车牌号批量上传(参照三十六匠页面;范围见 Q1) | P2 | + +--- + +## 5. 接口规范(权威来源:xxyb 接口文档) + +### 5.0 公共 + +- 请求方式:POST(JSON);Header:`token`(应用令牌,必填)、`cid`(合作ID,必填)。 +- 返回结构:`{ code, msg, data, requestId }`;`code=200` 成功;成功后 `data.id` 为第三方建档 ID,需落库保存。 +- 图片/附件类字段均为 **URL**:文件先上传平台文件服务(OBS)取得 URL 后再随接口提交。 + +### 5.1 创建司机 `POST /union/api/link/createDriver` + +| 字段 | 类型 | 层级 | 说明 | 必填 | +|:---|:---|:---:|:---|:---:| +| driverPhone | String | 1 | 司机手机号 | 是 | +| driverRealAuthDomain | ApiDriverRealAuthDomain | 1 | 司机基础信息 | 是 | +| driverAuthDomain | ApiDriverAuthDomain | 1 | 司机认证信息 | 否 | + +**ApiDriverRealAuthDomain 司机实名认证信息**: + +| 字段 | 类型 | 说明 | 必填 | +|:---|:---|:---|:---:| +| driverName | String | 司机姓名 | 是 | +| driverIdCard | String | 身份证 | 是 | +| driverIdCardAddress | String | 身份证地址 | 否 | +| idCardFrontImg | String | 身份证人像面图片 | 否 | +| idCardBackImg | String | 身份证国徽面图片 | 否 | + +**ApiDriverAuthDomain 司机认证信息(全部选填)**: + +| 字段 | 类型 | 说明 | +|:---|:---|:---| +| driverLicense | String | 驾驶证 | +| driverLicenseFrontImg / BackImg | String | 驾驶证正/反面图片 | +| driverLicenseIssuingAuthority | String | 驾驶证发证机关 | +| driverLicenseExpireStartTime / EndTime | String | 驾驶证有效期起/止(长期填"长期") | +| professionalQualificationCertificate | String | 从业资格证 | +| professionalQualificationCertificateImg | String | 从业资格证图片 | +| professionalQualificationCertificateExpireStartTime / EndTime | String | 从业资格证有效期起/止 | +| approvedDrivingType | ApprovedDrivingTypeEnum | 准驾车型(A1/A2/A1A2/B2/C1 等组合值,见 Code.html) | + +返回:`data.id` = 司机ID。 + +### 5.2 创建车辆 `POST /union/api/link/createVehicle` + +| 字段 | 类型 | 层级 | 说明 | 必填 | +|:---|:---|:---:|:---|:---:| +| vehicleBasicDomain | ApiVehicleBasicDomain | 1 | 车辆基础信息 | 是 | +| vehicleAuthDomain | ApiVehicleAuthDomain | 1 | 车辆认证信息 | 否 | + +**ApiVehicleBasicDomain 车辆基础信息**: + +| 字段 | 类型 | 说明 | 必填 | +|:---|:---|:---|:---:| +| licensePlateNumber | String | 车辆牌号 | 是 | +| licensePlateColor | ColorEnum | 车牌颜色(BLUE 蓝 / YELLOW 黄 / GREEN 绿) | 是 | + +**ApiVehicleAuthDomain 车辆认证信息**(必填:vehicleType、vehicleLength、vehicleEnergyType、vehicleLicenseFrontImg、vehicleLicenseBackImg、vehicleLicenseExpireTime;其余选填): + +| 字段 | 类型 | 说明 | +|:---|:---|:---| +| vehicleType | VehicleTypeEnum | 车型(重型半挂牵引车/重型自卸货车/轻型厢式货车等,见 Code.html) | +| vehicleLength | BigDecimal | 车长 | +| vehicleEnergyType | VehicleEnergyTypeEnum | 能源类型(A汽油/B柴油/C电/E天然气/O混合动力/Y无/Z其他等) | +| vehicleIdentificationNumber | String | 车辆识别代码 | +| vehicleLicense | String | 行驶证 | +| vehicleLicenseFrontImg / BackImg / ClipImg | String | 行驶证正面/反面/副页图片 | +| vehicleLicenseRegisterTime / ExpireTime | String | 行驶证注册日期/有效期 | +| vehicleLicenseIssuingAuthority / IssuingTime | String | 行驶证发证机关/发证日期 | +| roadTransportLicense + Img + AnnualInspectionImg + ExpireTime | String | 道路运输证系列 | +| roadTransportBusinessLicense | String | 道路运输经营许可证 | +| trailerLicenseNumber + Img + BackImg | String | 挂车牌照/副本照片 | +| groupPhotoImg | String | 人车合照 | +| totalMass / approvedLoad / curbWeight | BigDecimal | 总质量/核定载质量/整备质量 | +| overallDimensions / useNature | String | 外廓尺寸/使用性质 | +| creditCode | String | 统一社会信用代码/身份证号 | +| vehicleOwner / vehicleOwnerExpireTime | String | 车辆所有人/有效期 | +| affiliationAgreement | List<String> | 挂靠协议(多附件 URL) | + +返回:`data.id` = 车辆ID。 + +### 5.3 新增收款信息 `POST /union/api/link/createPayee` + +| 字段 | 类型 | 层级 | 说明 | 必填 | +|:---|:---|:---:|:---|:---:| +| payeeBasicDomain | ApiPayeeBasicDomain | 1 | 收款信息 | 是 | + +**ApiPayeeBasicDomain 收款人基础信息**: + +| 字段 | 类型 | 说明 | 必填 | 备注 | +|:---|:---|:---|:---:|:---| +| payeeName | String | 收款人姓名 | 是 | | +| payeeIdCard | String | 收款人身份证 | 是 | | +| payeeBankCard | String | 收款银行卡号 | 是 | | +| payeeBankCardImg | String | 收款银行卡图片 | 否 | | +| payeeBankName | String | 收款银行 | 否 | | +| payeePhone | String | 收款手机号 | 条件 | accountType 为 PERSONAL 时必填 | +| accountType | AccountTypeEnum | 收款人类型 | 是 | PERSONAL 个人 / ENTERPRISE 企业 | + +返回:`data.id` = 收款人ID。 + +--- + +## 6. 业务规则 + +### BR-01 必填与格式校验(前端 + 后端双重) + +- 手机号 11 位;身份证 18 位国标格式;银行卡号按 Luhn 校验 + 位数 15-19 位。 +- 收款人类型 = 个人时,`payeePhone` 必填(接口条件必填,前端联动校验)。 +- 车牌号格式校验(省份简称+字母+5/6位,含挂车"挂"字尾);车辆长度数值 ≥ 0。 + +### BR-02 证件有效期"长期"口径 + +- 有效期截止类字段(驾驶证/资格证/行驶证/道路运输证/车辆所有人有效期)支持选择"长期",提交时填写字符串 `长期`;起止格式 `yyyy-MM-dd`。 + +### BR-03 附件 + +- 页面上传证件图片 → 平台文件服务(OBS)→ 取 URL 随接口提交;单图 ≤ 10MB,jpg/jpeg/png/pdf(挂靠协议支持多文件)。 +- 上传失败时阻断提交并提示。 + +### BR-04 提交与结果落库 + +- 提交成功:保存 `data.id`(第三方ID)+ 提交内容 + 税源地 + 审核状态=待审核;提示"创建成功"。 +- 提交失败:展示接口 `msg`;表单不清空。 +- **重复创建**:同一身份证号(司机)/同一车牌号(车辆)在"待审核或审核通过"状态下重复创建时,前端提示确认;后端是否阻断以 xxyb 平台校验为准(见 Q4)。 + +### BR-05 审核状态同步 + +- 列表展示审核状态(待审核/审核通过/审核不通过)与审核时间,来源于 xxyb 平台。 +- 同步方式见待确认 Q2(回调 / 定时轮询),状态变化仅做展示更新,不影响本系统流程。 + +### BR-06 批量上传 + +- 参照三十六匠页面提供"批量上传 / 司机身份证批量上传 / 车牌号批量上传"入口(Excel 模板导入,逐条调接口);范围见 Q1。 + +--- + +## 7. 页面详述 + +### 7.1 创建司机(小象开票 → 创建司机) + +- **按钮**:查询、新增司机、批量上传、司机身份证批量上传(后两者见 Q1)。 +- **表头筛选行**(参照截图样式,无标签、placeholder 直书):请选择税源地 ▼ / 请选择审核状态 ▼ / 审核时间起-止 / 请输入司机 / 请输入身份证号。 +- **列表列**:选择框、税源地、审核状态(待审核-橙 / 审核通过-绿 / 审核不通过-红)、审核时间、司机姓名、身份证号、身份证有效期(驾驶证有效期止)、手机号、操作(查看、重新上传——仅审核不通过时显示)。 +- **新增司机弹窗**(字段名对应 5.1): + - 基础信息:司机手机号*、司机姓名*、身份证号*、身份证地址、身份证人像面图片、身份证国徽面图片; + - 认证信息(选填,默认折叠):驾驶证号、驾驶证正/反面图片、发证机关、驾驶证有效期起/止(支持"长期")、从业资格证、资格证图片、资格证有效期起/止、准驾车型(下拉)。 +- 提交成功后列表新增一行:审核状态"待审核",第三方ID落库。 + +### 7.2 创建车辆(小象开票 → 创建车辆) + +- **按钮**:查询、新增车辆、批量上传、车牌号批量上传。 +- **表头筛选行**:请选择税源地 ▼ / 请选择审核状态 ▼ / 审核时间起-止 / 请输入车牌 / 请输入车辆所有人 / 请选择车辆分类 ▼ / 请选择车牌颜色 ▼ / 请选择能源类型 ▼。 +- **列表列**:税源地、审核状态、审核时间、车牌号、车辆所有人、车辆分类(=vehicleType)、车牌颜色、车辆能源类型、操作(查看、重新上传)。 +- **新增车辆弹窗**: + - 基础信息:车牌号*、车牌颜色*(蓝/黄/绿); + - 认证信息:车型*(下拉,VehicleTypeEnum)、车长*(米)、能源类型*(下拉)、车辆识别代码、行驶证正面图片*、行驶证反面图片*、行驶证有效期*(支持"长期")、道路运输证、道路运输经营许可证、车辆所有人; + - 其余字段(挂车、质量参数、外廓尺寸、挂靠协议等)按接口文档保留输入(弹窗"更多信息"折叠区),原型中省略展示。 + +### 7.3 新增收款信息(小象开票 → 新增收款信息) + +- **按钮**:查询、新增收款信息、导出。 +- **表头筛选行**:请输入收款人姓名 / 请输入身份证号 / 请选择收款人类型 ▼。 +- **列表列**:收款人姓名、身份证号、收款银行卡号、收款银行、收款手机号、收款人类型(个人/企业)、第三方ID、创建时间、操作(查看)。 +- **新增收款信息弹窗**:收款人类型*(个人/企业,切换联动)、收款人姓名*、身份证号*、收款银行卡号*、银行卡图片、收款银行、收款手机号(**个人必填**联动校验)。 + +--- + +## 8. 待确认问题 + +| 编号 | 问题 | 倾向方案 | +|:---:|:---|:---| +| Q1 | 批量上传是否本期实现(Excel 模板 + 逐条调接口)? | 建议本期先做单笔,批量二期 | +| Q2 | 审核状态如何同步:xxyb 回调(Callback)还是我方定时轮询? | 待与平台确认接口 | +| Q3 | 审核不通过后的"重新上传"是调编辑接口重新提交还是新建一条?接口文档未见编辑接口 | 待平台确认;倾向新建一条并作废旧记录 | +| Q4 | 重复创建(同身份证/同车牌)xxyb 侧是否幂等/报错? | 以平台校验为准,我方先做提示 | +| Q5 | 菜单项命名:创建司机 / 创建车辆 / 新增收款信息(与接口同名)还是 司机管理 / 车辆管理 / 收款信息? | 待产品确认 | +| Q6 | 税源地字段接口未见入参——是否随 `cid` 隐含?列表中税源地列取值来源? | 待与平台确认 | + +> ⚠️ 待确认 Q6 补充:接口文档的请求参数中**没有税源地字段**,但参照页面(三十六匠)列表均有"税源地"列。需确认税源地是否由 `cid`(合作ID)隐含绑定,或需要额外参数。 + +> ⚠️ 待确认 Q7:**企业收款人(accountType=ENTERPRISE)的 payeeIdCard 字段填什么?** 接口字段名为"收款人身份证",企业场景下应填法定代表人身份证还是统一社会信用代码?原型当前按"企业填统一社会信用代码、个人填身份证"处理。 + +--- + +## 9. 验收要点(概要) + +1. 三个接口的 Header(token/cid)由平台配置注入,前端无感知;请求体字段与接口文档一致(逐字段核对)。 +2. 必填校验生效:司机(手机号/姓名/身份证)、车辆(车牌/颜色/车型/车长/能源类型/行驶证正反/有效期)、收款信息(类型/姓名/身份证/银行卡号;个人时手机号必填)。 +3. 有效期选择"长期"时提交值为字符串"长期";日期字段格式 yyyy-MM-dd。 +4. 提交成功落库 `data.id` 并以"待审核"入列表;失败展示 `msg` 且表单保留。 +5. 收款人类型=企业时手机号非必填、个人时必填(联动)。 +6. 车牌颜色/车型/能源类型/准驾车型/收款人类型取值与 Code.html 枚举一致。 +7. 列表筛选(表头筛选行)与分页正常;审核状态展示正确。 +8. 权限:非授权角色只读;跨机构数据不可见。 + +--- + +## 10. 原型对照 + +| 原型页面 | 说明 | +|:---|:---| +| 创建司机(列表 + 新增弹窗) | 对标三十六匠"司机上传"截图:表头筛选行 + 批量上传按钮 | +| 创建车辆(列表 + 新增弹窗) | 对标"车辆上传"截图:车辆分类/车牌颜色/能源类型列 | +| 新增收款信息(列表 + 新增弹窗) | 新增设计,列表含收款人类型 | +| 侧边栏 | 小象开票菜单下新增三个菜单项(NEW 标识) | diff --git a/原型评估_滇中好运物流云_20260917/01_原型盘点.md b/原型评估_滇中好运物流云_20260917/01_原型盘点.md new file mode 100644 index 0000000..8535a9e --- /dev/null +++ b/原型评估_滇中好运物流云_20260917/01_原型盘点.md @@ -0,0 +1,76 @@ +# 01 原型盘点 — 滇中好运智慧物流协同平台 0.2.0 + +> 来源:demo.kmshuangmiao.com 前端产物逆向(主应用 `main-BZrhSiwe.js` + `waybill-center` 子应用),抓取日期 2026-09-17。 +> 原型状态:纯前端 Mock(`__DZH_HTTP_MOCK__ = true`),状态依据飞书《业务表清单》《业务节点对比》《菜单对比》revision 213,产品名《滇中好运物流云》。大量字段标注"待确认",属于**客户讲解/评审演示原型**,非可实施产品。 + +## 1. 总体架构 + +**双系统(同一账号体系内切换视角)** + +| 系统 | systemKey | 定位 | 角色(8/7 个) | +|---|---|---|---| +| 物流云 | `logisticsCloud` | 统一调度平台(唯一数据枢纽),承接呈钢 ERP 业务与三方业务 | 系统管理员、供货商(呈钢)/呈钢业务员、货主/货主业务员/货主财务、调度主管、调度员、平台调度-客服/安全、平台调度-核算专员、平台调度-财务管理 | +| 中闽 | `zhongmin` | 特殊物流公司(自营车队 + 资产 + 内部成本财务),接受物流云委托 | 系统管理员、运营、计划员/调度员、核算专员、财务、车队长、资产管理员 | + +- 物流云视角范围声明:*只展示呈钢 ERP 来源业务及物流云本组织资料;中闽自有业务、车队、资产、成本和内部财务明细不下发*。 +- 其他承运商(好运、**运八**、云岭、博成、安达、顺达等)只作为**运力池准入租户**出现,不拥有独立工作系统(角色体系中仅有"运输公司调度"泛称)。 +- 另有司机端概念:司机 App(提交资质申请、装/卸货打卡、回单、在途费用上报),无独立原型界面(waybill-center 内嵌手机样机演示)。 + +**子应用**:运单中心 `waybill-center`(独立页面,`embedded=1` 嵌入主应用),承载运单管理/监控/异常三个一级入口,含费用录入、改派、退换货、轨迹详情、发运生命周期等十余个特性脚本。 + +## 2. 菜单结构(17 组 / 49 模块,双系统按权限投影) + +- **经营分析**:经营分析与报表(reportSnapshots,金额无确认规则时显示"待确认") +- **经营工作台**(role-workbench/dashboard):货主、调度、财务、物流公司四类工作台 +- **计划调度**:发货计划(sourceOrders,货主/ERP 代录/客户自提)、调度计划(materialPlans,拆分/合并/铁路)、配载与派车(loading)、装车计划(dispatches)、分派承运(carrier) +- **运单中心**:运单(driverTasks)、履约监控(fulfillmentMonitoring)、异常管理(exceptionCases)、接收通知(dispatchNotifications) +- **运力中心**:运力池(capacityPool)、资质管理(qualificationReview)、车辆资质校验结果(qualificationResult) +- **配载中心**:装车计划资质门禁 +- **履约协同**:凭证中心(voucherChains,回单/凭证链) +- **客户合同**:货主管理(businessSubjects)、项目台账(projects)、合同台账(contracts) +- **价格管理**:价格台账(priceBases,片区运价/项目一口价/调价待审核版本) +- **基础资料**:货物/货物分类、站点与地址、路线档案、铁路站点、铁路运价、倒短费 +- **核算结算中心**:核算管理、结算申请、结算管理、结算对账、收付准备、收付款记录、付款批次、发票管理、在途费用、罚款台账、财务关单、财务管理 +- **财务协同/结算核算**:铁路运费对账(车皮级,次日导入铁路局 PDF 回填) +- **报表中心**:运营/资产/成本/司机工资/财务报表、利润分析 +- **接口中心**:接口配置(interfaceDefinitions,本期仅呈钢 ERP)、接口任务(externalExchangeTasks,交换/回执/重试) +- **安全审计**:审计事件(auditEvents)、操作日志(operationLogs) +- **系统管理**:租户管理、组织架构、用户账号、角色管理、导出历史 +- **中闽独有资产模块**:车头/车挂/司机管理、维保、保险到期、罚款、油卡管理、新能源资产(车电分离)、停运、成本归集等 + +## 3. 业务主线(原型闭环) + +``` +呈钢ERP/货主/运八代录 → 发货计划(sourceOrders) + → 调度计划(materialPlans, S1呈钢/S2昆铁倒短/S4三方直委中闽; 拆分/合并) + → 装车计划(dispatches, 承运模式: 中闽自营车队/指定合作承运商/待调度分派) + ↳ 资质门禁(qualificationResult): 单人+单车组合 OCR 机审通过才可生成运单 + → 运单(driverTasks): 待核价→已开单→装货中→待发货→运输中→已卸货→核算中→结算中→已付款→财务关单 + ↳ 司机App: 装货打卡/卸货打卡/回单上传/在途费用上报(电费/装卸/过磅/ETC/路桥/其他) + → 履约监控: 车辆位置+路线轨迹(高德地图Mock)+异常处置+运输台账 + → 凭证中心: 回单审核(退回/补传/复核, 不覆盖历史) + → 核算(上游/下游独立, 磅单+回单+最终审核值齐全才放行, 调价留痕) + → 结算申请→结算管理→结算对账→付款批次(线下全额付款登记)→收付款记录(冲正机制) + → 发票管理(进项/销项登记, OCR, "线下结果的线上登记候选, 不连接真实税务") + → 财务关单(月度勾稽+人工关账) +``` + +## 4. 关键机制细节(与运八对比相关) + +- **资质管理**:以"司机+单车"组合为审核主体;司机 App/物流公司提交 → 资料冻结 → OCR 机审(道路运输证影像过期会阻断装车计划且不生成发货单)→ 物流云运营抽检 → 组合可运输门禁。*原型自注:正式 OCR 字段、车型匹配规则、抽检比例及运营角色映射待确认。* +- **轨迹**:履约监控用高德地图展示车辆位置与路线轨迹(Mock 数据);"轨迹数据来源""定位不可用处理"仅为待确认的口径配置项;**无北斗/车载终端接入**;运单时效靠司机 App 装卸打卡。 +- **发票**:进项/销项两条线,字段含发票类型(电子增值税专用/普通)、税率、价税合计、OCR 识别(有 OCR-FAILED 演示数据)、一票多批次分摊;**明确声明不连接真实税务,无代开、无红冲链路、无个税**。 +- **资金**:付款批次"登记线下全额付款结果、付款凭证和发票进度……不支持部分付款,**不执行真实资金操作**";收付款记录同。无支付通道、无银行存管、无分账。 +- **合同**:合同台账登记原始合同及增补,附件 OCR 预填,"不采集结算依据";**无电子签约**。 +- **异常**:司机主动上报或系统识别,责任岗位+处理时限+复核闭环;缺货通知仅调度内部可见。 +- **接口**:接口配置目前仅呈钢 ERP(发货计划/项目/价格等);接口任务管理发送/回执/失败/重试。**网络货运平台明确排除在本期接入范围外。** +- **运八在原型中的存在方式**: + 1. 运力池承运商租户 `carrier-yunba` = 云南运八物流科技有限公司; + 2. 发货计划来源类型:"运八调度"角色录入 → 标记为"运八授权代录"; + 3. 核算管理范围声明:"参考 Demo 的运八样例数据未迁入;当前仅复用其已评审核算规则,并适配呈钢、昆铁和中闽现有业务对象"; + 4. 工作台数据过滤把 YUNBA/-YB-/运八 命中的数据标为 OUT_OF_SCOPE。 + +## 5. 原型空白清单(关键词全文检索为 0) + +监管/省级监测、北斗、投诉、评价体系、电子签、个税、代开、货源大厅/竞价/招标、多式联运、甩挂、超载/超限管控。 +("危险货物"仅货物档案上的一个 `dangerousGoodsFlag` 标记,无承运管控流程;"信用"仅统一社会信用代码字段。) diff --git a/原型评估_滇中好运物流云_20260917/02_网络货运合规对照.md b/原型评估_滇中好运物流云_20260917/02_网络货运合规对照.md new file mode 100644 index 0000000..6aeaa73 --- /dev/null +++ b/原型评估_滇中好运物流云_20260917/02_网络货运合规对照.md @@ -0,0 +1,51 @@ +# 02 网络货运合规对照 — 依据现行《网络货运承运平台经营管理办法》 + +## 0. 首先必须说明:监管依据已于 2026 年 1 月更换 + +- 原《网络平台道路货物运输经营管理暂行办法》(交运规〔2019〕12号)经 2021、2023 年两次延期后,**有效期至 2025-12-31 已届满**。 +- **现行依据:《网络货运承运平台经营管理办法》(交运规〔2026〕1号)**,交通运输部+国家税务总局 2026-01-23 印发、即日实施,4 章 32 条,**长期有效**(不再两年一续)。 +- 本对照以新办法为准。原文: + - 办法全文: + - 官方解读: + - 税务总局法规库: +- 注意第三十一条:**"对于从事网络货运信息交易撮合的网络货运撮合平台,其经营管理另行规定"** —— 即监管层把"承运平台"与"撮合/协同平台"分开管理,撮合类规则尚未出台。 + +## 1. 定性结论 + +**该原型不属于《办法》定义的网络货运承运平台,也无意成为承运平台。** + +《办法》第二条:网络货运承运平台经营 = "以承运人身份与托运人签订运输合同,委托实际承运人完成道路货物运输,**承担承运人责任**"。原型中: + +- 无承运法律关系承载(无电子运输合同/签约,合同模块仅"台账登记,不采集结算依据"); +- 无承运责任配套(无承运人责任险,保险仅中闽车辆保险到期管理); +- 原型接口模块自述:"**未确认或明确排除的网络货运平台不进入菜单、业务线和演示数据**"。 + +原型实际形态 = **货主/供货商(呈钢)— 统一调度协同平台(物流云)— 承运执行方(中闽自营 + 外部承运商含运八)** 的多方协同调度系统(TMS/协同 SaaS)。这类形态目前最接近《办法》第三十一条预留的"网络货运撮合/协同平台"范畴(规则另行规定),**经营资质与监管义务主要落在实际签运输合同、承担承运责任的一方——即运八这类网络货运平台或中闽这类持证运输企业身上,而不是物流云上**。 + +## 2. 逐条对照(若把它当作/改造成网络货运承运平台) + +| 条款 | 要求(摘要) | 原型现状 | 差距 | +|---|---|---|---| +| 第六条 | 道路运输经营许可证,经营范围=网络货运承运平台经营 | 平台无承运定位(经营资质属企业侧,原型不涉及) | 定性层面不满足 | +| 第七条 | 经营性互联网信息服务(ICP)资质 + **信息交互处理及全程跟踪记录等线上服务能力** | 有信息交互与计划/运单/凭证留痕;全程跟踪仅有高德 Mock 轨迹+司机打卡,无北斗/车载终端 | 跟踪记录能力不足(演示级) | +| 第八条 | 安全生产管理制度、从业人员教育培训 | 空白 | 无 | +| 第十条 | 审查实际承运车辆**道路运输证**、驾驶员**从业资格证**;线上线下车人一致;不得超越实际承运人经营范围 | **有较强承载**:单人+单车资质组合、OCR 机审、运营抽检、装车计划资质门禁(证照过期阻断生成运单) | 原型最接近合规的一条;字段/规则标注待确认 | +| 第十一条 | 不得虚构运输交易相互委托 | 无防控设计(亦无违规意图体现) | 需风控规则 | +| 第十二条 | 按合同**及时结算运费**;自购燃料交付需承运人同意 | 结算链完整(核算→结算→付款批次),但"登记线下全额付款结果……不执行真实资金操作";油卡为中闽自有资产,非平台代购燃料 | 资金真实性/时效无系统保障 | +| 第十三条 | 不得指使超载、超限运输 | 无装载校验(磅单仅用于核算) | 无 | +| **第十四条** | **按技术规范上传单证信息至注册地省级网络货运信息监测系统,确保及时、完整、准确** | **完全空白**:全文无"监管/监测/上报监管"概念;接口中心仅呈钢 ERP,且明确排除网络货运平台接入 | **最大硬缺口** | +| 第十五条 | 鼓励承运人责任保险 | 无 | 无(鼓励性) | +| 第十六条 | 零担:托运人身份查验登记、安全检查/开封验视、审批检验手续留存 | 货主实名主体档案有;零担安检流程无 | 部分缺口 | +| **第十七条** | 交易规则/服务协议、进入退出机制;**不得利用数据算法收取不合理费用**;**服务评价体系并公示**;**投诉举报机制**(公开电话、及时处理) | **空白**:全文 0 处投诉、0 处评价 | **硬缺口** | +| **第十八条** | 记录注册/身份认证/服务/交易信息,**保存≥3 年,涉税资料≥10 年**;交易信息含**订单日志、网上交易日志、款项结算、含时间和地理位置的实时行驶轨迹数据**;燃料/通行费全流程信息;实时监控、不得虚构 | 有审计事件/操作日志/凭证链(演示级);无留存周期设计;轨迹非实时真实数据;无燃料/通行费全流程(ETC 仅为在途费用报销分类) | 产品级缺口 | +| 第十九条 | 依法抵扣进项、税前扣除,不得虚开发票 | 发票模块明确"线下结果的线上登记候选,不连接真实税务" | 空白(有意为之) | +| 第二十条 | 平台**代办税费申报和缴纳义务**(司机个税代扣等) | 无个税/代开概念 | 空白 | +| 第二十一/二十二条 | 网络安全法/数据安全法;信息保密 | 有租户数据隔离设计(中闽数据不下发、运八数据 OUT_OF_SCOPE 过滤),演示级 | 架构意识有,落地无 | +| 第二十三条 | 省级监测系统对接、与税务共享、上传部级交互系统 | 空白 | 同第十四条 | + +## 3. 结论与建议 + +1. **不要让"物流云"申请网络货运牌照或以承运平台名义经营**——以原型当前设计,补齐第 14/17/18/20 条的代价等于再造一个运八,且与已排除网络货运平台接入的产品定位自相矛盾。 +2. **合规责任链建议**:物流云保持"调度协同/撮合"定位(留意第三十一条后续配套规则出台时的备案/报备要求);运输合同、承运责任、监管上报、开票、资金全部由持牌方(运八或中闽)承担——这正好与运八现有能力吻合。 +3. 若客户(滇中好运项目)**坚持物流云也要持牌经营网络货运**,则必须在原型外新增:省级监测系统上报通道(运单/资金流水/驾驶员位置,参照部级交互系统接口规范)、北斗车载轨迹接入、电子合同签约、投诉举报+服务评价、代办税费与真实发票链路、信息留存策略(3 年/涉税 10 年)、真实支付与运费时效管控——工作量相当于一个独立项目,建议单独立项评估。 +4. 老版《暂行办法》时代的"八项服务功能"(信息发布、线上交易、全程监控、金融支付、投诉举报、信用评价、查询统计、数据调取,交办运函〔2019〕1391号服务指南)不再是新办法的逐字要求,但省级监测系统的**技术规范上传接口**(第十四条"相关技术规范"所引)仍是各省对接口径,对接省平台时以云南省监测系统最新接口文档为准。 diff --git a/原型评估_滇中好运物流云_20260917/03_与运八契合度对比.md b/原型评估_滇中好运物流云_20260917/03_与运八契合度对比.md new file mode 100644 index 0000000..7b4661d --- /dev/null +++ b/原型评估_滇中好运物流云_20260917/03_与运八契合度对比.md @@ -0,0 +1,53 @@ +# 03 与运八项目契合度对比 + +> 运八侧事实来源:`output/菜单清单.md`(运八管理后台 423 个可见菜单,ntocc.sys_resource 导出)、`tests/api/test_yun8_transport_flow.py`(24 步全链路:货源→接单→装货→卸货→核算→审核→油卡充值→司机打款→货主打款→回单→ETC 发票)。 + +## 1. 两个系统的定位差 + +| 维度 | 运八(网络货运平台) | 原型·物流云(统一调度协同平台) | +|---|---|---| +| 法律角色 | 网络货运承运人(承担承运责任、开票、资金、监管上报) | 调度协同中枢(不对托运人承担承运责任) | +| 核心资产 | 合规链路:监管上报(司机/车辆/路单/资金)、多渠道发票(浙样红/满货达/滇运通/三十六匠/小象/ETC)、税务管理、真实资金(光大/快钱/分账/提现) | 业务链路:计划→配载→运单→履约→凭证→核算→结算的协同与管控 | +| 运力来源 | 社会运力为主(司机/车队注册、审核、评价、投诉) | 中闽自营车队 + 准入承运商(含运八) | +| 货源组织 | 货源大厅、发布货源、项目货源 | 呈钢 ERP 计划、货主发货计划、客户自提 | +| 强项 | 四流合一(合同/货物/资金/票据)、监管口径 | 计划调度颗粒度(拆分/合并/配载/资质门禁)、三方协同流程、权责划分 | + +**结论:互补大于竞争。** 原型自己也是这么设计的——运八在原型中不是被替代的对象,而是运力池里的承运商租户和"授权代录"数据来源。 + +## 2. 原型已为运八预留的契合点 + +1. **承运商租户位**:运力池/资质管理按"准入承运商"设计,`carrier-yunba 云南运八物流科技有限公司` 已在演示数据中。 +2. **代录通道**:发货计划来源类型支持"运八调度→运八授权代录"(与"中闽人工代录""平台人工代录"并列),说明产品规划中运八是上游计划的一个合法来源。 +3. **核算规则复用**:核算管理声明"仅复用运八已评审核算规则,并适配呈钢、昆铁和中闽现有业务对象"——两边的运费核算口径同源,结算对账有共同语言。 +4. **接口中心已就位**:接口配置/接口任务模块(发送/回执/失败重试/补偿记录)就是为外部系统接入准备的,目前仅接了呈钢 ERP,接入运八只是配置层面的事(产品上已留好位置)。 +5. **凭证中心**:按运单节点管理回单文件+版本+审核链,与运八的回单签收/电子回单可以一一映射。 + +## 3. 功能重叠与双轨风险(需要明确归属) + +| 领域 | 运八已有 | 原型也有 | 风险 | 建议归属 | +|---|---|---|---|---| +| 运单 | 运单管理/跟踪/轨迹/补录,是监管上报的路单来源 | driverTasks 全生命周期+waybill-center | **双轨运单**:同一票货两边各生成运单号,监管口径以运八路单为准,金额/里程不一致即监测系统异常 | 运单主数据放物流云(调度视角),**合规运单以运八为准**;物流云运单向运八推送生成路单,回传路单号绑定 | +| 司机/车辆资质 | 司机审核/车辆审核/核验审核+**监管上报**(司机上报/车辆上报) | 单人+单车资质组合、OCR 机审、装车门禁 | 双重审核、口径不一(如从业资格证字段、4.5 吨以下豁免) | 物流云做**准入门禁**(可派判断),运八做**合规审查与上报**;资质结果双向同步,避免司机重复提交 | +| 轨迹 | 运单轨迹、轨迹导出、(对接监测系统的驾驶员位置上传) | 高德 Mock 轨迹+装卸打卡 | 原型无真实轨迹源 | 轨迹一律取运八/北斗侧,物流云只消费展示 | +| 回单 | 回单签收/电子回单 | 凭证中心(版本链/审核退回/补传) | 双侧上传、重复归档 | 司机 App 上传入口收敛为一处,另一方同步镜像 | +| 结算/资金 | 运费核算→审核→油卡充值→司机打款→货主打款→分账/提现(真实资金) | 核算→结算申请→结算→付款批次(**线下登记,不执行真实资金**) | 原型已声明不动资金,天然无冲突,但要防业务员误以为走了系统=付了钱 | 金额口径在物流云核对,**支付指令全部走运八**;物流云付款批次仅做台账并与运八流水勾稽 | +| 发票 | 多渠道代开(专票/普票/ETC/红冲)+税务管理 | 进/销项线下登记(Mock,不连税务) | 原型发票模块定位是"线下结果登记",与运八开票是上下游而非竞争 | 运八开票,物流云登记勾稽(原型已有"发票分配到付款批次"的勾稽设计,方向正确) | +| 油卡/能源 | 加油管理、能源卡、万金油、油费预付 | 中闽油卡管理(自营资产)、在途费用(电费/ETC 等 6 类报销) | 两种语义(资产卡 vs 平台代购燃料)。注意新办法第十二条:平台自购燃料交付需承运人同意;第十八条要求燃料全流程留痕 | 平台代购燃料(若有)必须在运八侧做全流程留痕;物流云油卡仅限中闽自有 | +| 异常 | 客服运维(运输异常/投诉/评价/预警/撤单) | 异常管理(责任岗位/复核闭环)+履约预警 | 处置口径分叉 | 运营异常协同在物流云,**投诉举报类按新办法第十七条必须建在承运平台(运八)并对外公示** | + +## 4. 契合度总评 + +- **业务流程契合:高**。原型的发货计划→装车计划→运单→回单→核算→结算链条与运八 24 步链路几乎同构(接单/装卸/核算/打款/回单/ETC 发票都能对上),且核算规则同源。 +- **角色契合:中高**。原型把货主、承运商、调度、财务分系统分角色投影,运八作为承运商/调度来源都有位;但运八没有像中闽那样的独立工作系统,若运八要在物流云上做调度协同,目前只能用"运输公司调度"泛化角色,颗粒度不够。 +- **数据契合:中**。租户/主体/凭证/导出等主数据模型齐备,但运单、资质、结算三个核心对象双方都要"最终裁定权",必须提前定归属,否则监测系统(运八上报)与协同平台(物流云)数据打架。 +- **合规契合:天然的上下游**。物流云缺的监管能力恰好是运八的长项(监管上报/发票/资金),运八弱的调度协同恰好是物流云的长项。**"物流云管业务,运八管合规"是阻力最小的组合。** + +## 5. 落地建议(给评审/立项用) + +1. **明确一句话定位**:物流云 = 计划调度与协同管控;运八 = 合规承运与资金票据通道。中闽 = 自营运力执行方(原型已按此设计,保持)。 +2. **接口清单**(在原型"接口配置"模块中立项,本期已排除、后续应纳入): + - 下行:物流云装车计划/运单 → 运八生成合规运单(路单); + - 上行:运八回传路单号、轨迹、回单、打款流水、发票状态 → 物流云履约监控/凭证中心/付款批次勾稽; + - 资质:运八审核结果 ↔ 物流云门禁状态同步。 +3. **三个"唯一"原则**:运单号以运八路单为准、支付以运八通道为准、开票以运八为准;物流云所有对应模块降级为"登记+勾稽",这与原型现有声明(不动真实资金、不连税务)完全一致,改造成本最低。 +4. **测试关注点**(本仓库视角):若立项对接,建议在 `tests/api/` 增加"物流云↔运八"接口造数用例,复用现有 24 步链路的 yun8_pipeline,把物流云侧计划/运单造数串进来,重点验证运单号绑定、资质状态同步、结算金额对平三条断言。 diff --git a/原型评估_滇中好运物流云_20260917/04_司机车辆字段核对.md b/原型评估_滇中好运物流云_20260917/04_司机车辆字段核对.md new file mode 100644 index 0000000..fbe616f --- /dev/null +++ b/原型评估_滇中好运物流云_20260917/04_司机车辆字段核对.md @@ -0,0 +1,590 @@ +# 04 司机/车辆字段核对(全量清单版)— 原型 vs 运八生产库 vs 物流云生产库 + +> 口径:三个数据源逐字段比对。**只列库内有数据(空值率非 0%)的字段**;填充率按 `is_delete(d)=0` 的有效行计算。 +> - 原型侧:前端产物中的司机/车辆模块字段定义、证件槽、OCR 预填映射(滇中好运 0.2.0,2026-09-17 抓取)。**2026-09-17 已将整站镜像到本地并实测验证**(新建司机/新建车辆/车挂/车辆详情四个页面的真实表单与代码提取一致;详见 05 核对表的"页面验证记录")。原型 schema 中存在但页面未验证的字段(可使用全部车辆/可查看运费/可取消订单/维护方式/挂靠车辆/空重状态)在 05 中标【◇schema】并列入待确认映射。 +> - 运八生产库 `ntocc`:base_driver(129 列)/ base_driver_ext(39)/ base_driver_tax(27,**整表 0 行未启用,不列**)/ base_vehicle(113)/ base_vehicle_ext(36) +> - 物流云生产库 `logistics_could`:ts_driver(49 列)/ ts_vehicle(80)/ ts_trailer(33,**独立挂车表**)/ nts_driver(44)/ nts_vehicle(67,网货同步表) +> 查询日期 2026-09-17,全部只读。 +> +> 覆盖标记:✓ 已覆盖|△ 部分/需映射或间接承载|✗ 缺失|·平台侧=运八平台职责字段(物流云不需覆盖,不计入缺失)|·系统=id/审计类。🔒挂车=挂车相关字段,见"挂车专项"。 + +## 一、汇总 + +| 库.表 | 有效行 | 有数据字段 | ✓ | △ | ✗ | ·平台侧 | ·系统 | +|---|---|---|---|---|---|---|---| +| 运八 ntocc.base_driver | 72,598 | 112/129 | 19 | 8 | 37 | 39 | 9 | +| 运八 ntocc.base_driver_ext | 75,598 | 33/39 | 0 | 13 | 1 | 10 | 9 | +| 运八 ntocc.base_vehicle | 65,154 | 104/113 | 27 | 18 | 35 | 14 | 10 | +| 运八 ntocc.base_vehicle_ext | 65,607 | 35/36 | 0 | 13 | 4 | 9 | 9 | +| 物流云 ts_driver | 1,029 | 39/49 | 18 | 9 | 3 | 0 | 9 | +| 物流云 ts_vehicle | 289 | 47/80 | 24 | 8 | 6 | 0 | 9 | +| 物流云 ts_trailer(挂车) | 427 | 21/33 | 6 | 6 | 0 | 0 | 9 | +| 物流云 nts_driver(网货) | 2 | 28/44 | 14 | 4 | 3 | 1 | 6 | +| 物流云 nts_vehicle(网货) | 14 | 47/67 | 30 | 4 | 7 | 0 | 6 | + +## 二、四句话结论 + +1. **物流云生产库 ts_* 与原型基本同构**(ts_driver 仅 3 个有数据字段缺失),原型就是它的演化版;但原型**删掉/没有** 4 个值得警惕的字段:`total_quality`(总质量>4.5 吨判定标记,ts_vehicle 100% 填充——4.5 吨监管豁免的判定依据)、`signed_status/signed_time`(网货签约)、`is_long_term_driver_license`(驾驶证长期有效——没有它"长期"证会显示成已过期)。 +2. **运八司机侧最要害的缺失是实名核验组**:verify_*/idcard_auth_*/license_auth_* 等 13 个字段在运八**全部有数据**(填充率 44%–100%),原型完全没有对应物——OCR 机审不能替代公安比对/活体检测的证据链;其次是司机侧道路经营许可证(运八 67.4% 有值)与驾驶证副页影像。 +3. **车辆侧缺的是治超四件套**:行驶证号(93.0% 有值)、注册/发证日期(53.1%)、总质量(53.6%)+ 准牵引总质量(78.9%)+ 轴数(63.7%)——没有这组字段做不了装载校验(新办法第十三条);另有道路运输证有效期起(52.7%)、实际所有人(63.7%)、超牌(46.0%)。 +4. **挂车三套模型不同构,必须先统一再对接**:运八=主车内嵌 20+ 个 trailer_* 字段(填充率 8%–100%);物流云生产库=独立 ts_trailer 表 + ts_vehicle.trailer_id 外键(但外键仅 0.7% 填充,基本没用起来);原型=独立挂车档案复用主车模板。原型挂车档案**装不下**的运八字段:挂车总质量(80.8%)、挂车行驶证总质量(72.2%)、挂车准牵引总质量(8.6%)、挂车年审凭证(10.2%)、超牌/超牌有效期(46.0%/38.1%)。 + +## 三、挂车专项(运八挂车字段 ↔ 原型挂车档案) + +原型把挂车建成独立车辆档案(fleetTrailers,复用主车字段模板 + 主车上的 currentTrailerPlate/hasTrailerFlag)。与运八 `base_vehicle` 内嵌挂车字段对照(按有数据字段): + +| 能力 | 运八字段(填充率) | 原型挂车档案 | 判定 | +|---|---|---|---| +| 挂车车牌 | trailer_num(92.9%) | plateDisplay | ✓ | +| 挂车车牌颜色/类型 | trailer_license_color(100%)、trailer_classification_code(88.7%) | plateColor/vehicleType(需代码映射) | ✓ 需字典 | +| 挂车道路运输证号/到期/影像 | trailer_road_transport(91.9%)、…_expiry_date(46.2%)、…_img(99.7%) | roadPermitNoMasked/roadPermitExpiry/证件槽 | ✓ | +| 挂车行驶证正/副页影像 | trailer_vehicle_license_img(100%)、…_deputy_page_img(81.0%) | 行驶证正/副页证件槽 | ✓ | +| 挂车核定载质量 | trailer_load_weight(89.3%)、trailer_load_quality(72.7%) | ratedLoadQuantity | ✓ | +| 挂车整备质量 | trailer_curb_weight(8.6%) | curbWeightKg | ✓ | +| **挂车总质量** | trailer_total_weight(80.8%)、trailer_total_Mass(72.2%) | **无字段** | ✗ | +| **挂车准牵引总质量** | trailer_total_quasi_mass(8.6%) | **无字段** | ✗ | +| **挂车年审凭证** | trailer_annual_review_img(10.2%) | **无字段** | ✗ | +| **超牌** | if_over_quota(46.0%)、super_card_end_date(38.1%)、super_card_ocr | **无字段** | ✗ | +| 挂车照片 | trailer_vehicle_img(75.3%) | 通用附件 | △ | +| 挂车到期照片 | trailer_expiry_date_img(99.6%) | 通用附件 | △ | + +物流云 ts_trailer(独立表,427 行)与原型挂车档案同构度最高(有数据字段 ✓6 △6 缺 0),说明**原型挂车设计继承自物流云生产库**;缺的同样是总质量/准牵引/年审/超牌这类"质量组"字段——模板里根本没设计。 + +## 四、逐字段全量清单 + +(表内按填充率降序;🔒挂车 字段的覆盖判定按"挂车档案"口径。) + + +### ntocc.base_driver(有效 72598 行,有数据字段 112/129) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `id` | | bigint(10) | 100.0% | ·系统 | 系统/审计字段 | +| `code` | UUID | varchar(32) | 100.0% | ·系统 | UUID | +| `party_code` | 用户编码 | varchar(32) | 100.0% | △ | appAccountStatus(APP账号)间接承载 | +| `branch_code` | 机构编码 | varchar(32) | 100.0% | ·系统 | 机构 | +| `phone` | 手机 | varchar(32) | 100.0% | ✓ | mobileMasked | +| `work_company` | 工作单位 | varchar(128) | 100.0% | ✗ | 缺失 | +| `home_address` | 地址 | varchar(255) | 100.0% | ✓ | address | +| `driver_img` | 司机照片 | varchar(255) | 100.0% | ✗ | 司机照片 | +| `identification_img` | 司机身份证,多张时用逗号分隔。 | varchar(1000) | 100.0% | ✓ | 身份证正面(证件槽) | +| `identification_back_img` | 司机身份证反面照片 | varchar(1000) | 100.0% | ✓ | 身份证反面(证件槽) | +| `work_license_img` | 从业资格证照片 | varchar(1000) | 100.0% | ✓ | 从业资格证(证件槽) | +| `driver_license_img` | 司机驾驶证图片 | varchar(1000) | 100.0% | ✓ | 驾驶证(证件槽) | +| `business_license_img` | 营业执照照片 | varchar(1000) | 100.0% | ✗ | 营业执照影像 | +| `road_permit_number_img` | 道路经营许可证照片 | varchar(255) | 100.0% | ✗ | 缺失 | +| `is_freeze` | 是否冻结(0-未冻结 1-已冻结) | tinyint(1) | 100.0% | △ | dispatchEligibility | +| `work_status` | 司机工作状态 0 休息 1 上班 | tinyint(1) | 100.0% | △ | dispatchEligibility | +| `freezing_amount` | 冻结金额 | decimal(20,2) | 100.0% | ·平台侧 | 资金 | +| `balance` | 账户余额 | decimal(20,2) | 100.0% | ·平台侧 | 资金 | +| `oil_card` | 油卡点数 | decimal(20,2) | 100.0% | ·平台侧 | 油卡 | +| `etc` | etc | decimal(20,2) | 100.0% | ·平台侧 | ETC | +| `auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | tinyint(1) | 100.0% | ✓ | status | +| `auth_type` | 审核来源:0手动审核,1自动审核 | tinyint(1) | 100.0% | △ | 机审/人工(抽检) | +| `license_auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | tinyint(1) | 100.0% | ✗ | 驾驶证核验 | +| `driver_type` | 0司机,1车队,2-车队司机 | int(1) | 100.0% | ✗ | 司机/车队/车队司机细分 | +| `is_deleted` | 默认0正常,1删除 | tinyint(1) | 100.0% | ·系统 | 系统/审计字段 | +| `created_by` | 创建人 | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_created` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `modified_by` | 修改人 | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_modified` | 修改时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `bond` | 保证金 | decimal(20,2) | 100.0% | ·平台侧 | 保证金 | +| `is_send_logink` | 是否上报网络货运省平台,0否(默认),1是 | tinyint(1) | 100.0% | ·平台侧 | 省平台上报 | +| `attribute` | 司机/车队属性,0外协,1自有 | tinyint(1) | 100.0% | ✓ | driverProperty(值域映射) | +| `safe_duty_insure_img` | 安全责任险照片 | varchar(255) | 100.0% | ✗ | 安全责任险影像 | +| `depen_deal_img` | 挂靠协议照片 | varchar(255) | 100.0% | ✗ | 挂靠协议影像 | +| `szwl_credit_status` | 信用流转开通状态:(0:未开通、1:申请中、2:申请失败、3:已开通) | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `szwl_credit_balance` | 信用凭证余额 | decimal(20,2) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `is_send_tax` | 是否上报税务平台,0否(默认),1是 | tinyint(1) | 100.0% | ·平台侧 | 税务上报 | +| `is_share` | 是否清分,0否(默认),1是 | tinyint(1) | 100.0% | ·平台侧 | 清分 | +| `share_ratio` | 清分比率(整数,100%全部给车队) | int(10) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `verify_type` | 认证通过方式,1公安接口,2人工审核 | tinyint(1) | 100.0% | ✗ | 实名核验组 | +| `verify_addr` | 公安对比状态,0未认证,1通过,2失败 | tinyint(1) | 100.0% | ✗ | 公安比对 | +| `verify_flag` | 认证标识,0未认证,1已认证,2未通过 | tinyint(1) | 100.0% | ✗ | 缺失 | +| `verify_type_img` | 图片认证通过方式,1公安接口,2人工审核 | tinyint(1) | 100.0% | ✗ | 缺失 | +| `verify_addr_img` | 图片公安对比状态,0未认证,1通过,2失败 | tinyint(1) | 100.0% | ✗ | 缺失 | +| `verify_flag_img` | 图片认证标识,0未认证,1已认证,2未通过 | tinyint(1) | 100.0% | ✗ | 缺失 | +| `verify_way` | 认证渠道,0未认证,1活体检测,2在线图片 | tinyint(1) | 100.0% | ✗ | 认证渠道 | +| `from_rainbow` | 来源于彩虹糖0否1是,默认为0 | varchar(1) | 100.0% | ·平台侧 | 彩虹糖 | +| `allow_driver_receive` | 车队允许司机接运单:0允许,1不允许 | tinyint(1) | 100.0% | △ | cancelOrderAllowed近似 | +| `hat_balance` | 快钱账户余额 | decimal(20,2) | 100.0% | ·平台侧 | 快钱 | +| `is_sign_dyt` | 是否签约(滇运通) 0:未签约 1:已签约 | tinyint(1) | 100.0% | ·平台侧 | 滇运通 | +| `gd_balance` | 光大账户余额 | decimal(20,2) | 100.0% | ·平台侧 | 光大 | +| `is_sign_kqd` | 是否签署快企点协议 1是 0否 | varchar(255) | 100.0% | ·平台侧 | 快企点 | +| `thirty_six_status` | 三十六匠上传状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(2) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `mhd_carrier_status` | 满货达个体承运人上传状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(2) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `mhd_driver_status` | 满货达司机状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(2) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `idcard_auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | tinyint(1) | 100.0% | ✗ | 实名核验组 | +| `dyt_driver_status` | 滇运通司机状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `dyt_carrier_status` | 滇运通个体承运人上传状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `name` | 姓名 | varchar(64) | 94.7% | ✓ | displayName | +| `identification_number` | 身份证号 | varchar(20) | 94.6% | ✓ | identityMasked | +| `carrier_code` | 司机对应承运人的code | varchar(32) | 94.5% | ✗ | 所属承运人 | +| `idcard_auth_msg` | 身份证认证描述 | varchar(128) | 93.3% | ✗ | 实名核验组 | +| `auth_msg` | 审核信息 | varchar(128) | 91.2% | △ | 审核信息 | +| `auth_time` | 审核时间,修改审核状态时同步修改 | datetime | 91.1% | △ | 审核流时间 | +| `license_auth_msg` | 驾驶证认证描述 | varchar(255) | 91.0% | ✗ | 驾驶证核验 | +| `road_per_expiry_date_img` | 道路运输证到期日期照片(cx) | varchar(1000) | 89.2% | ✗ | 缺失 | +| `id_card_due_date` | 身份证到期日期 | datetime | 87.0% | ✓ | identityExpiry | +| `province_code` | 省编码 | varchar(32) | 86.5% | ✗ | 缺失 | +| `city_code` | 市编码 | varchar(32) | 86.4% | ✗ | 缺失 | +| `county_code` | 县/区编码 | varchar(32) | 86.4% | ✗ | 缺失 | +| `amap_sid` | 高德地图服务ID | varchar(32) | 86.2% | ·平台侧 | 高德 | +| `amap_tid` | 高德地图终端ID | varchar(32) | 86.2% | ·平台侧 | 高德 | +| `amap_trid` | 高德地图轨迹ID | varchar(32) | 86.2% | ·平台侧 | 高德 | +| `driver_license` | 驾驶证 | varchar(128) | 85.9% | ✓ | driverLicenseNoMasked | +| `vehicle_class` | 准驾车型,使用总质量 4.5 吨及以下普通货运车辆从事普通货物运输经营的驾驶员必填,根据机 | varchar(32) | 85.8% | ✓ | licenseClass | +| `issuing_organizations` | 驾驶证发证机关,使用总质量 4.5 吨及以下普通货运车辆从事普通货物运输经营的驾驶员必填,根据机 | varchar(255) | 85.8% | ✓ | issuingAuthority | +| `vehicle_code` | 驾驶车辆编码 | varchar(32) | 85.4% | △ | 组合资质关系(手机号+车牌)间接承载 | +| `work_license` | 上岗证(从业资格证) | varchar(128) | 85.1% | ✓ | qualificationNoMasked | +| `driver_license_from_date` | 司机驾驶证开始日期 | datetime | 84.7% | ✓ | licenseValidFrom | +| `driver_license_due_date` | 司机驾驶证到期日期 | datetime | 84.6% | ✓ | licenseExpiry | +| `work_license_due_date` | 从业资格证到期日期 | datetime | 84.6% | ✓ | qualificationExpiry | +| `road_permit_number` | 道路经营许可证 | varchar(128) | 67.4% | ✗ | 司机侧道路经营许可证 | +| `id_card_due_date_begin` | 身份证到期日期开始 | date | 63.7% | ✗ | 身份证有效期起 | +| `road_transport_effective_date` | 道路运输证有效期自 | datetime | 63.5% | ✗ | 道路运输证有效期起 | +| `verify_remark` | 人工审核备注 | varchar(255) | 57.5% | ✗ | 缺失 | +| `dyt_driver_time` | 滇运通司机上传时间 | datetime | 52.8% | ·平台侧 | 平台侧(不需覆盖) | +| `dyt_driver_message` | 滇运通司机上传信息 | varchar(500) | 52.8% | ·平台侧 | 平台侧(不需覆盖) | +| `dyt_carrier_message` | 滇运通个体承运人上传信息 | varchar(128) | 44.7% | ·平台侧 | 滇运通 | +| `dyt_carrier_time` | 滇运通个体承运人上传时间 | datetime | 44.7% | ·平台侧 | 平台侧(不需覆盖) | +| `belong_shipment` | 归属货主(无归属是值为司机类型) | varchar(255) | 32.0% | ✗ | 归属货主 | +| `thirty_six_message` | 三十六匠上传信息 | varchar(255) | 25.5% | ·平台侧 | 三十六匠 | +| `thirty_six_time` | 三十六匠上传时间 | datetime | 25.1% | ·平台侧 | 平台侧(不需覆盖) | +| `szwl_did` | 蚂蚁数字物流区块链Did | varchar(128) | 24.7% | ·平台侧 | 蚂蚁链 | +| `szwl_credit_msg` | 信用流转开通结果信息 | varchar(255) | 24.7% | ·平台侧 | 平台侧(不需覆盖) | +| `sex` | 性别(1:男 2: 女 ) | int(255) | 21.6% | ✗ | 上报报文 | +| `driver_license_back_img` | 司机驾驶证副页图片 | varchar(255) | 11.6% | ✗ | 驾驶证副页 | +| `new_work_license_img` | 从业资格证最新页 | varchar(255) | 10.5% | ✗ | 从业资格证最新页 | +| `mhd_carrier_message` | 满货达个体承运人上传信息 | varchar(255) | 9.9% | ·平台侧 | 满货达 | +| `mhd_carrier_time` | 满货达个体承运人上传时间 | datetime | 9.9% | ·平台侧 | 平台侧(不需覆盖) | +| `mhd_driver_message` | 满货达司机上传信息 | varchar(255) | 9.7% | ·平台侧 | 平台侧(不需覆盖) | +| `mhd_driver_time` | 满货达司机上传时间 | datetime | 9.7% | ·平台侧 | 平台侧(不需覆盖) | +| `nation` | 名族 | varchar(32) | 6.9% | ✗ | 上报报文 | +| `data_from` | 数据来源(为空时来自平台内部) | varchar(100) | 4.1% | ·系统 | 来源 | +| `sign_time` | 签约时间(滇运通) | datetime | 3.9% | ·平台侧 | 平台侧(不需覆盖) | +| `link_man` | 车队名称 | varchar(64) | 2.2% | ✓ | fleetName | +| `refuel_proportion` | 加油比例 | int(10) | 2.1% | ·平台侧 | 平台侧(不需覆盖) | +| `legal_person` | 法人姓名 | varchar(128) | 1.8% | ✗ | 个体/车队法人 | +| `business_license_number` | 营业执照号 | varchar(100) | 1.7% | ✗ | 缺失 | +| `flow_id` | 实名认证ID | varchar(64) | 1.5% | ✗ | 实名认证流水 | +| `balance_gmt_modified` | 光大余额变动时间 | datetime | 1.2% | ·平台侧 | 平台侧(不需覆盖) | +| `compulsory_insurance_proof_img` | 机动车交通事故责任强制保险证明 | varchar(255) | 27 行 | ✗ | 交强险证明 | +| `merchant_type` | 商户类型:2个体工商户;3(默认)自然人 | tinyint(1) | 2 行 | ✗ | 涉税身份 | + +### ntocc.base_driver_ext(有效 75598 行,有数据字段 33/39) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `id` | | bigint(20) | 100.0% | ·系统 | 系统/审计字段 | +| `code` | UUID | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `branch_code` | 机构编码 | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `driver_code` | 司机编码 | varchar(32) | 100.0% | ·系统 | 关联键 | +| `auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | tinyint(1) | 100.0% | △ | 审核结论由资质机审承载 | +| `is_send_logink` | 是否上报网络货运省平台,0否,1是,2失败 | tinyint(1) | 100.0% | ·平台侧 | 省平台上报 | +| `is_freeze` | 是否冻结(0-未冻结 1-已冻结) | tinyint(1) | 100.0% | △ | 冻结 | +| `created_by` | 创建者 | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_created` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_modified` | 更新时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `is_deleted` | 删除标记 0 未删除 1 已删除 | tinyint(1) | 100.0% | ·系统 | 系统/审计字段 | +| `is_send_tax` | 是否上报税务平台,0否(默认),1是 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `is_real_people` | 是否活体检测实人认证,0 否(默认),1是 | tinyint(1) | 100.0% | ✗ | 活体实人认证标记 | +| `auth_type` | 审核类型1-自动审核 0-平台、管理员 | tinyint(1) | 100.0% | △ | 机审/人工 | +| `auth_name` | 审核名 | varchar(32) | 100.0% | △ | 抽检人 | +| `is_send_zhong_lian` | 是否上报中联。0-否,1-是,2-上传失败 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `freeze_msg` | 冻结原因 | varchar(255) | 100.0% | △ | 部分/需映射 | +| `is_send_ah_logink` | 是否上报安徽网络货运省平台,0否,1是,2失败 | tinyint(1) | 100.0% | ·平台侧 | 安徽上报 | +| `electricity_card` | 电卡余额 | decimal(10,2) | 100.0% | ·平台侧 | 电卡 | +| `gas_card` | 气卡余额 | decimal(10,2) | 100.0% | ·平台侧 | 气卡 | +| `auth_time` | 审核时间,修改审核状态时同步修改 | datetime | 98.8% | △ | 部分/需映射 | +| `auth_msg` | 审核信息 | varchar(255) | 87.9% | △ | 部分/需映射 | +| `modified_by` | 更新者 | varchar(32) | 66.1% | ·系统 | 系统/审计字段 | +| `send_error` | 网络货运上报失败信息 | varchar(255) | 64.9% | ·平台侧 | 平台侧(不需覆盖) | +| `oil_card` | 油卡余额 | decimal(10,2) | 63.7% | ·平台侧 | 油卡余额 | +| `ah_send_error` | 安徽网络货运上报失败信息 | varchar(255) | 53.9% | ·平台侧 | 平台侧(不需覆盖) | +| `zhong_lian_err_msg` | 中联上传结果 | varchar(255) | 12.8% | ·平台侧 | 中联 | +| `identification_back_orc_json` | 司机身份证反面的ocrJson | text | 7.0% | △ | OCR(身份证反面) | +| `identification_orc_json` | 司机身份证正面的ocrJson | text | 7.0% | △ | OCR机审(身份证正面) | +| `work_license_orc_json` | 司机从业资格证的ocrJson | text | 6.8% | △ | OCR(从业资格证) | +| `license_orc_json` | 司机驾驶证正面的ocrJson | text | 6.8% | △ | OCR(驾驶证) | +| `new_work_license_orc_json` | 司机从业资格证最新的ocrJson | text | 6.3% | △ | OCR(最新页) | +| `license_back_orc_json` | 司机驾驶证副页的ocrJson | text | 0.2% | △ | OCR(驾驶证副页) | + +### ntocc.base_vehicle(有效 65154 行,有数据字段 104/113) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `id` | | bigint(10) | 100.0% | ·系统 | 系统/审计字段 | +| `code` | UUID | varchar(32) | 100.0% | ·系统 | UUID | +| `license_number` | 车牌号 | varchar(128) | 100.0% | ✓ | plateDisplay | +| `branch_code` | 公司编码 | varchar(32) | 100.0% | ·系统 | 机构 | +| `license_plate_type` | 牌照类型代码 | varchar(20) | 100.0% | ✗ | 牌照类型代码 | +| `road_transport_certificate_img` | 道路运输许可证照片 | varchar(500) | 100.0% | ✓ | 道路运输证(证件槽) | +| `load_weight` | 车辆可载重量 | varchar(10) | 100.0% | △ | ratedLoadQuantity(可载口径) | +| `load_volume` | 车辆可载平方 | varchar(10) | 100.0% | ✗ | 可载方量 | +| `remaining_load_volume` | 车辆剩余可载立方 | decimal(20,2) | 100.0% | ✗ | 缺失 | +| `vehicle_license_color` | 车牌颜色:1 蓝色 2 黄色 3 黑色 4 白色 5 绿色 9 其他 91 农黄色 92 农绿色 93 黄绿色 94 渐变绿 | varchar(32) | 100.0% | ✓ | plateColor(代码映射) | +| `vehicle_license_img` | 车辆行驶证照片 | varchar(500) | 100.0% | ✓ | 行驶证正页(证件槽) | +| `is_has_trailer` | 有无挂车:0无/1有 | tinyint(1) | 100.0% | ✓ | hasTrailerFlag | +| `trailer_vehicle_license_img` | 挂车行驶证照片 | varchar(500) | 100.0% | △ 🔒挂车 | 挂车档案行驶证影像槽 | +| `auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | int(1) | 100.0% | ✓ | status | +| `load_status` | 载重状态:0空载(/1负载 | int(1) | 100.0% | ✓ | emptyLoadStatus | +| `is_freeze` | 是否冻结 ,0-未冻结,1-已冻结 | int(1) | 100.0% | △ | availabilityStatus | +| `is_deleted` | 默认0正常,1删除 | tinyint(1) | 100.0% | ·系统 | 系统/审计字段 | +| `created_by` | | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_created` | | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `modified_by` | | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_modified` | | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `location_source` | 定位来源 0中交兴路 1APP端 2GPS硬件 默认0 | int(2) unsigned | 100.0% | ✗ | 定位来源 | +| `net_status` | 入网标志:0未入网,1已入网 | int(1) | 100.0% | ✗ | 入网标志 | +| `send_logink` | 是否上报到省平台 0否 1是 | int(1) | 100.0% | ·平台侧 | 省平台 | +| `is_send_logink` | 是否上报网络货运省平台,0否(默认),1是 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `etc_status` | ETC备案:0未备案,1备案 | int(1) | 100.0% | ·平台侧 | ETC备案 | +| `repair_status` | 维修状态:0正常,1报修中 | int(1) | 100.0% | △ | transportStatus(维保) | +| `road_permit_number_img` | 道路经营许可证照片 | varchar(500) | 100.0% | ✗ | 许可证影像 | +| `trailer_license_color` | 挂车车牌颜色:1 蓝色 2 黄色 3 黑色 4 白色 5 绿色 9 其他 91 农黄色 92 农绿色 93 黄绿色 94 渐变绿 | varchar(32) | 100.0% | ✓ 🔒挂车 | 挂车档案plateColor(映射) | +| `from_rainbow` | 来源于彩虹糖0否1是,默认为0 | varchar(1) | 100.0% | ·平台侧 | 彩虹糖 | +| `road_per_expiry_date_img` | 道路运输证到期日期照片 | varchar(1000) | 100.0% | ✗ | 缺失 | +| `accident_insurance_img` | 机动车交通事故责任强制保险证明照片 | varchar(1000) | 100.0% | ✗ | 交强险影像 | +| `thirty_six_status` | 三十六匠上传状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(2) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `team_type` | 人车分离,车辆归属人角色,0->司机,1->车队 | tinyint(1) | 100.0% | ✗ | 人车分离角色 | +| `team_code` | 车队编码 | varchar(32) | 100.0% | △ | fleetName组织 | +| `trailer_road_transport_certificate_img` | 挂车道路运输证照片 | varchar(500) | 99.7% | △ 🔒挂车 | 挂车道路运输证影像槽 | +| `trailer_expiry_date_img` | 挂车道路运输证到期日期照片(cx) | varchar(1000) | 99.6% | △ 🔒挂车 | 挂车证到期照片 | +| `dyt_vehicle_status` | 滇运通车辆上报状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(4) | 98.5% | ·平台侧 | 平台侧(不需覆盖) | +| `total_weight` | 车辆总重量 | varchar(10) | 93.9% | ✗ | 总质量 | +| `owner` | 车辆所有人,总质量 4.5 吨及以下普通货运车辆必填,按照机动车行驶证填写。 | varchar(255) | 93.9% | ✓ | ownerCompanyName | +| `length` | 车长 | varchar(30) | 93.9% | ✓ | vehicleLengthMm(单位核对) | +| `width` | 车宽 | varchar(10) | 93.9% | ✓ | vehicleWidthMm | +| `height` | 车高 | varchar(10) | 93.9% | ✓ | vehicleHeightMm | +| `road_transport_certificate_number` | 车辆道路运输证号 | varchar(32) | 93.8% | ✓ | roadPermitNoMasked | +| `classification_code` | 车辆分类代码 | varchar(32) | 93.8% | ✓ | vehicleType(部标代码映射) | +| `road_permit_number` | 道路经营许可证 | varchar(128) | 93.7% | △ | 道路经营许可证号(口径并存) | +| `vehicle_energy_type` | 车辆能源类型 | varchar(32) | 93.4% | ✓ | energyType(代码映射) | +| `vehicle_license` | 车辆行驶证号 | varchar(32) | 93.0% | ✗ | 行驶证号 | +| `vin` | 车辆识别代号,总质量 4.5 吨及以下普通货运车辆必填,按照机动车行驶证填写。 | varchar(255) | 93.0% | ✓ | vinMasked | +| `use_character` | 使用性质,总质量 4.5 吨及以下普通货运车辆必填,按照机动车行驶证填写。 | varchar(255) | 92.9% | ✓ | useNature | +| `issuing_organizations` | 发证机关,总质量 4.5 吨及以下普通货运车辆必填,按照机动车行驶证填写 | varchar(255) | 92.9% | ✗ | 行驶证发证机关 | +| `trailer_num` | 挂车车牌号 | varchar(255) | 92.9% | ✓ 🔒挂车 | currentTrailerPlate(主车)/挂车档案车牌 | +| `trailer_road_transport` | 挂车道路运输证 | varchar(255) | 91.9% | △ 🔒挂车 | 挂车档案道路运输证号 | +| `road_permit_name` | 道路经营许可证业户名称 | varchar(255) | 91.8% | ✗ | 许可证业户名称 | +| `is_linked` | 是否挂靠车辆,0否,1是 | int(1) | 90.2% | ✓ | affiliatedFlag | +| `vehicle_license_deputy_page_img` | 车辆行驶证副页照片 | varchar(500) | 89.6% | ✓ | 行驶证副页(证件槽) | +| `trailer_load_weight` | 挂车可载重量 | varchar(10) | 89.3% | △ 🔒挂车 | 挂车档案ratedLoadQuantity | +| `vehicle_license_due_date` | 行驶证到期日期 | datetime | 89.1% | ✓ | annualInspectionExpiry | +| `road_transport_certificate_date` | 道路运输许可证到期日期 | datetime | 88.7% | ✓ | roadPermitExpiry | +| `trailer_classification_code` | 挂车车辆分类代码 | varchar(32) | 88.7% | ✓ 🔒挂车 | 挂车档案vehicleType(映射) | +| `auth_msg` | 审核结果 | varchar(255) | 88.5% | △ | 审核信息 | +| `self_respect` | 车身自重 | varchar(10) | 84.3% | △ | curbWeightKg(自重口径) | +| `curb_weight` | 行驶证整备质量 | varchar(255) | 81.4% | ✓ | curbWeightKg | +| `trailer_vehicle_license_deputy_page_img` | 挂车行驶证副页照片 | varchar(500) | 81.0% | △ 🔒挂车 | 挂车行驶证副页影像槽 | +| `trailer_total_weight` | 挂车总重量 | varchar(10) | 80.8% | ✗ 🔒挂车 | 挂车总质量,模板无此字段 | +| `total_quasi_mass` | 行驶证准牵引总质量 | varchar(255) | 78.9% | ✗ | 准牵引总质量 | +| `brand` | 品牌 | varchar(200) | 78.3% | ✗ | 品牌 | +| `vehicle_img` | 车辆照片,多张以逗号分割 | varchar(500) | 76.0% | △ | 通用附件 | +| `trailer_vehicle_img` | 挂车照片 | varchar(500) | 75.3% | △ 🔒挂车 | 通用附件 | +| `trailer_load_quality` | 挂车行驶证核定载质量 | varchar(255) | 72.7% | △ 🔒挂车 | 挂车档案ratedLoadQuantity(行驶证口径) | +| `trailer_total_Mass` | 挂车行驶证总质量 | varchar(255) | 72.2% | ✗ 🔒挂车 | 挂车行驶证总质量 | +| `real_owner` | 车辆实际所有人 | varchar(64) | 63.7% | ✗ | 实际所有人 | +| `axlenum` | 车轴数 | varchar(2) | 63.7% | ✗ | 轴数 | +| `real_owner_phone` | 车辆实际所有人联系方式 | varchar(32) | 63.7% | ✗ | 缺失 | +| `load_quality` | 行驶证核定载质量 | varchar(255) | 53.6% | ✓ | ratedLoadQuantity | +| `total_mass` | 行驶证总质量 | varchar(255) | 53.6% | ✗ | 行驶证总质量 | +| `register_date` | 注册日期,总质量 4.5 吨及以下普通货运车辆必填,按照机动车行驶证填写 | date | 53.1% | ✗ | 注册日期 | +| `issue_date` | 发证日期,总质量 4.5 吨及以下普通货运车辆必填,按照机动车行驶证填写 | datetime | 53.1% | ✗ | 发证日期 | +| `road_transport_effective_date` | 道路运输证有效期自 | datetime | 52.7% | ✗ | 道路运输证有效期起 | +| `depen_deal_img` | 挂靠协议图片 | varchar(500) | 47.7% | ✗ | 挂靠协议影像 | +| `state_img` | 车主声明照片 | varchar(500) | 47.7% | ✗ | 车主声明 | +| `trailer_road_transport_expiry_date` | 挂车道路运输证到期日期(cx) | datetime | 46.2% | ✓ 🔒挂车 | 挂车档案roadPermitExpiry | +| `if_over_quota` | 挂车是否超牌 | bigint(20) | 46.0% | ✗ 🔒挂车 | 缺失 | +| `super_card_end_date` | 超牌有效期至 | date | 38.1% | ✗ 🔒挂车 | 缺失 | +| `dyt_vehicle_message` | 滇运通车辆上报信息 | varchar(255) | 28.2% | ·平台侧 | 滇运通 | +| `dyt_vehicle_time` | 滇运通车辆上报时间 | datetime | 28.2% | ·平台侧 | 平台侧(不需覆盖) | +| `road_transport_certificate_word` | 车辆道路运输证字 | varchar(32) | 26.9% | △ | 道路运输证字号,原型只有证号 | +| `thirty_six_message` | 三十六匠上传信息 | varchar(255) | 23.9% | ·平台侧 | 三十六匠 | +| `thirty_six_time` | 三十六匠上传时间 | datetime | 23.9% | ·平台侧 | 平台侧(不需覆盖) | +| `business_uniform_social_credit_code` | 道路经营许可证业户统一社会信用代码 | varchar(255) | 16.4% | ✗ | 业户统一社会信用代码 | +| `new_vehicle_license_deputy_page_img` | 最新车辆行驶证副页 | varchar(500) | 12.5% | ✗ | 最新副页 | +| `vehicle_license_register_date` | 车辆行驶证注册日期 | datetime | 10.5% | ✗ | 行驶证注册日期 | +| `vehicle_license_issue_date` | 车辆行驶证发证日期 | datetime | 10.5% | ✗ | 行驶证发证日期 | +| `mhd_vehicle_message` | 满货达车辆上报信息 | varchar(255) | 10.5% | ·平台侧 | 满货达 | +| `mhd_vehicle_status` | 满货达车辆上报状态:0未上传,1上传中,2上传成功,3上传失败 | tinyint(2) | 10.5% | ·平台侧 | 平台侧(不需覆盖) | +| `mhd_vehicle_time` | 满货达车辆上报时间 | datetime | 10.5% | ·平台侧 | 平台侧(不需覆盖) | +| `trailer_annual_review_img` | 挂车年审照片 | varchar(500) | 10.2% | ✗ 🔒挂车 | 挂车年审凭证 | +| `trailer_curb_weight` | 挂车行驶证整备质量 | varchar(255) | 8.6% | △ 🔒挂车 | 挂车档案curbWeightKg | +| `trailer_total_quasi_mass` | 挂车行驶证准牵引总质量 | varchar(255) | 8.6% | ✗ 🔒挂车 | 挂车准牵引总质量 | +| `road_transport_img_url` | 道路经营许可证验证图片 | varchar(256) | 4.1% | ✗ | 许可证验证图 | +| `data_from` | 数据来源(为空时来自平台内部) | varchar(100) | 3.9% | ·系统 | 系统/审计字段 | +| `device` | 好运宝设备号 | varchar(255) | 0.6% | ·平台侧 | 好运宝设备 | +| `main_order_number` | 货源单号 | varchar(255) | 0.6% | ·系统 | 业务号 | +| `emission_standards` | 排放标准 | varchar(4) | 43 行 | ✓ | emissionStandard | + +### ntocc.base_vehicle_ext(有效 65607 行,有数据字段 35/36) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `id` | | bigint(20) | 100.0% | ·系统 | 系统/审计字段 | +| `code` | UUID | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `branch_code` | 机构编码 | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `vehicle_code` | 车辆Code | varchar(32) | 100.0% | ·系统 | 关联键 | +| `auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | tinyint(1) | 100.0% | △ | 审核结论 | +| `vehicle_auth_status` | 审核状态:0未审核/1审核中/2审核未通过/3审核通过 | tinyint(1) | 100.0% | △ | 部分/需映射 | +| `is_send_logink` | 是否上报网络货运省平台,0否,1是,2失败 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `etc_status` | ETC备案:0未备案,1备案 | int(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `created_by` | 创建者 | varchar(32) | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_created` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `gmt_modified` | 更新时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `is_deleted` | 删除标记 0 未删除 1 已删除 | tinyint(1) | 100.0% | ·系统 | 系统/审计字段 | +| `is_send_trailer` | 挂车是否已经上报到省监管平台:0=否(默认)/1=是 | tinyint(1) | 100.0% | ·平台侧 | 挂车上报 | +| `auth_type` | 审核类型1-自动审核 0-平台、管理员 | tinyint(1) unsigned zerofill | 100.0% | △ | 部分/需映射 | +| `auth_name` | 审核名 | varchar(32) | 100.0% | △ | 部分/需映射 | +| `is_send_zhong_lian` | 是否上报中联。0-否,1-是,2-上传失败 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `is_send_ah` | 是否上报安徽。0-否,1-是,2-上传失败 | tinyint(1) | 100.0% | ·平台侧 | 平台侧(不需覆盖) | +| `auth_time` | 审核时间 | datetime | 99.5% | △ | 部分/需映射 | +| `auth_msg` | 审核信息 | varchar(255) | 88.1% | △ | 部分/需映射 | +| `vehicle_auth_msg` | 审核状态描述 | varchar(255) | 88.1% | △ | 部分/需映射 | +| `modified_by` | 更新者 | varchar(32) | 86.6% | ·系统 | 系统/审计字段 | +| `energy_card_type` | 能源卡类型:0-默认 1-油卡 2-电卡 3-天然气 | int(10) unsigned | 86.1% | ·平台侧 | 能源卡 | +| `send_error` | 网络货运上报失败信息 | varchar(255) | 72.0% | ·平台侧 | 平台侧(不需覆盖) | +| `ah_err_msg` | 安徽上传结果 | varchar(255) | 59.2% | ·平台侧 | 平台侧(不需覆盖) | +| `zhong_lian_err_msg` | 中联上传结果 | varchar(255) | 13.6% | ·平台侧 | 平台侧(不需覆盖) | +| `new_vehicle_license_ocr_back` | 最新车辆行驶证副页ocr | text | 8.8% | △ | OCR | +| `road_transport_permit_ocr` | 道路运输证对象ocr | text | 8.1% | △ | OCR | +| `vehicle_license_ocr_front` | 驾驶证正页ocr | text | 7.9% | △ | OCR机审 | +| `vehicle_license_ocr_back` | 车辆行驶证副页ocr | text | 7.9% | △ | OCR | +| `vehicle_license_car_back_number` | 行驶证副页车牌号ocr | varchar(32) | 7.8% | △ | OCR副页车牌 | +| `license_plate_ocr` | 车牌号车头ocr | text | 7.6% | △ | OCR | +| `trailer_road_transport_permit_ocr` | 挂车道路运输证ocr | text | 6.5% | ✗ 🔒挂车 | 缺失 | +| `trailer_vehicle_license_deputy_page_ocr_back` | 挂车行驶证副页ocr | text | 5.9% | ✗ 🔒挂车 | 缺失 | +| `trailer_vehicle_license_ocr_front` | 挂车行驶证正页ocr | text | 5.9% | ✗ 🔒挂车 | 缺失 | +| `super_card_ocr` | 超牌ocr | text | 0.4% | ✗ | 缺失 | + +### logistics_could.ts_driver(有效 1029 行,有数据字段 39/49) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `name` | 驾驶员姓名 | varchar(20) | 100.0% | ✓ | displayName | +| `phone` | 驾驶员联系电话 | varchar(20) | 100.0% | ✓ | mobileMasked | +| `identification_number` | 身份证号 | varchar(20) | 100.0% | ✓ | identityMasked | +| `user_id` | 用户id | bigint | 100.0% | △ | appAccountStatus间接 | +| `diver_attribute` | 司机属性,0:自有,1:外调 | int | 100.0% | ✓ | driverProperty(映射) | +| `auth_status` | 认证状态:0未认证/1认证中/2认证未通过/3认证通过 | int | 100.0% | ✓ | status | +| `signed_status` | 网货签约状态:0未签约/1已签约 | int | 100.0% | ✗ | 网货签约状态 | +| `is_activation` | 是否已激活 | bit(1) | 100.0% | △ | appAccountStatus | +| `create_user_id` | 创建用户id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_user_name` | 创建用户姓名 | varchar(255) | 100.0% | ·系统 | 系统/审计字段 | +| `is_long_term_driver_license` | 驾驶证是否长期有效 | bit(1) | 100.0% | ✗ | 驾驶证长期有效标记 | +| `is_ues_all_vehicle` | 是否使用所有车辆 | bit(1) | 100.0% | ✓ | allVehicleAccess | +| `is_show_expenses` | 是否显示运输费用 | bit(1) | 100.0% | ✓ | freightVisible | +| `is_cancel_waybill` | 是否可以取消接单 | bit(1) | 100.0% | ✓ | cancelOrderAllowed | +| `recent_reviser` | 最后人姓名 | varchar(50) | 100.0% | ·系统 | 系统/审计字段 | +| `enterprise_id` | 企业id | bigint | 100.0% | △ | 组织/主体 | +| `org_id` | 组织id | bigint | 100.0% | △ | 组织 | +| `org_data_used_mode` | 使用数据模式,0:全组织机构,1:当前组织机构,2:当前组织及其子组织 | int | 100.0% | △ | 数据范围 | +| `id` | id主键 | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_date` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `update_date` | 修改时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `is_delete` | 是否删除 | bit(1) | 100.0% | ·系统 | 系统/审计字段 | +| `update_user_id` | 更新用户id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `group_id` | 组id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `identification_img_id` | 司机身份证正面照片 | bigint | 99.9% | ✓ | 身份证正面(证件槽) | +| `identification_back_img_id` | 司机身份证反面照片 | bigint | 99.9% | ✓ | 身份证反面(证件槽) | +| `id_card_due_date` | 身份证到期日期 | datetime | 99.1% | ✓ | identityExpiry | +| `create_org_id` | 创建组织id | bigint | 41.4% | △ | 组织 | +| `create_org_name` | 创建组织名称 | varchar(50) | 41.4% | △ | 组织 | +| `org_name` | 组织名称 | varchar(50) | 40.3% | △ | 组织 | +| `work_license_img_id` | 道路运输从业资格证号照片 | bigint | 29.7% | ✓ | 从业资格证(证件槽) | +| `driver_license_img_id` | 司机驾驶证照片 | bigint | 28.9% | ✓ | 驾驶证(证件槽) | +| `driver_leader_name` | 车队长姓名 | varchar(100) | 23.8% | ✓ | fleetLeaderName | +| `driver_leader_id` | 车队长id | bigint | 23.6% | △ | 车队长ID | +| `work_company` | 工作单位 | varchar(100) | 0.2% | ✗ | 缺失 | +| `detailed_address` | 详细地址 | varchar(100) | 1 行 | ✓ | address | +| `driver_issuing_organization` | 驾驶证发证机关 | varchar(100) | 1 行 | ✓ | issuingAuthority | +| `driver_license` | 机动车驾驶证号 | varchar(20) | 1 行 | ✓ | driverLicenseNoMasked | +| `work_license` | 道路运输从业资格证号 | varchar(20) | 1 行 | ✓ | qualificationNoMasked | + +### logistics_could.ts_vehicle(有效 289 行,有数据字段 47/80) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `license_number` | 车牌号码 | varchar(20) | 100.0% | ✓ | plateDisplay | +| `vehicle_number_color` | 车牌颜色 | int | 100.0% | ✓ | plateColor(代码映射) | +| `is_has_trailer` | 是否挂车 | bit(1) | 100.0% | ✓ | hasTrailerFlag | +| `total_quality` | 总质量是否大于4.5吨 | bit(1) | 100.0% | ✗ | 总质量>4.5吨判定标记 | +| `vehicle_attributes` | 车辆属性 1-自有车辆,2-外调车辆 | int | 100.0% | ✓ | ownershipType(映射) | +| `empty_state` | 空载状态 1-是,0-否 | int | 100.0% | ✓ | emptyLoadStatus | +| `is_enable` | 启用状态 | bit(1) | 100.0% | ✓ | enableStatus | +| `create_user_id` | 创建用户id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_user_name` | 创建用户姓名 | varchar(255) | 100.0% | ·系统 | 系统/审计字段 | +| `update_user_name` | 修改用户姓名 | varchar(255) | 100.0% | ·系统 | 系统/审计字段 | +| `enterprise_id` | 企业id | bigint | 100.0% | △ | 组织/主体 | +| `org_id` | 组织id | bigint | 100.0% | △ | 组织 | +| `org_data_used_mode` | 使用数据模式,0:全组织机构,1:当前组织机构,2:当前组织及其子组织 | int | 100.0% | △ | 数据范围 | +| `id` | id主键 | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_date` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `update_date` | 修改时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `is_delete` | 是否删除 | bit(1) | 100.0% | ·系统 | 系统/审计字段 | +| `update_user_id` | 更新用户id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `group_id` | 组id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `org_name` | 所属组织名称 | varchar(50) | 97.6% | △ | 组织 | +| `create_org_name` | 创建组织名称 | varchar(50) | 97.2% | △ | 组织 | +| `create_org_id` | 创建组织id | bigint | 97.2% | △ | 组织 | +| `vehicle_dep_name` | 车辆所属单位名称 | varchar(512) | 93.4% | ✓ | ownerCompanyName | +| `is_linked` | 车辆是否挂靠 | bit(1) | 73.0% | ✓ | affiliatedFlag | +| `vehicle_leader_name` | 车管名称 | varchar(50) | 71.6% | ✓ | vehicleManagerName | +| `audit_state` | 审核状态,0:待审核,1:通过,-1:不通过 | int | 69.9% | ✓ | status | +| `vehicle_leader_id` | 车管id | bigint | 69.9% | △ | 车管ID | +| `road_permit_img_id` | 道路运输证照片Id | bigint | 2.8% | ✓ | 道路运输证影像槽 | +| `road_transport_certificate_date` | 道路运输证到期日期 | datetime | 2.8% | ✓ | roadPermitExpiry | +| `vehicle_license_img1_id` | 车辆行驶证正面照片Id | bigint | 2.8% | ✓ | 行驶证正页(证件槽) | +| `vehicle_license_img2_id` | 车辆行驶证反面照片Id | bigint | 2.8% | ✓ | 行驶证副页(证件槽) | +| `vehicle_driving_license_expiration_date` | 车辆行驶证到期日期 | datetime | 2.8% | ✓ | annualInspectionExpiry | +| `road_transport_annual_review_img_id` | 道路运输证年审凭证照片 | bigint | 2.8% | ✗ | 道路运输证年审凭证 | +| `trailer_num` | 挂车车牌号 | varchar(50) | 2.4% | ✓ 🔒挂车 | 挂车档案plateDisplay | +| `owner` | 车辆所有人 | varchar(50) | 1.7% | ✓ | ownerCompanyName | +| `trailer_license_plate_color` | 挂车车牌颜色 | int | 1.7% | ✓ 🔒挂车 | 挂车档案plateColor(映射) | +| `road_transport_certificate_number` | 车辆道路运输证号 | varchar(50) | 1.4% | ✓ | roadPermitNoMasked | +| `trailer_license_img1_id` | 挂车行驶证正面照片Id | bigint | 1.4% | ✓ 🔒挂车 | 挂车档案行驶证正页(槽) | +| `trailer_license_img2_id` | 挂车行驶证反面照片Id | bigint | 1.4% | ✓ 🔒挂车 | 挂车档案行驶证副页(槽) | +| `trailer_road_permit_id` | 挂车道路运输证照片Id | bigint | 1.4% | ✓ 🔒挂车 | 挂车档案道路运输证影像(槽) | +| `vehicle_driving_license_file_number` | 车辆行驶证档案编号 | varchar(255) | 1.4% | ✗ | 行驶证档案编号 | +| `road_operation_permit_holders_name` | 道路经营许可证业户名称 | varchar(50) | 1.4% | ✗ | 经营许可证业户名称 | +| `trailer_road_transport_certificate_expire_date_photo_id` | 挂车道路运输证到期日期照片Id | bigint | 1.4% | △ 🔒挂车 | 到期照片 | +| `trailer_road_transport_certificate_expire_date` | 挂车道路运输证到期日期 | datetime | 1.4% | ✓ 🔒挂车 | 挂车档案roadPermitExpiry | +| `trailer_road_transport_annual_review_img_id` | 挂车道路运输证年审凭证照片 | bigint | 1.0% | ✗ 🔒挂车 | 挂车年审凭证 | +| `trailer_id` | 挂车ID | bigint | 0.7% | ✗ 🔒挂车 | 缺失 | +| `vehicle_type` | 车辆类型 | varchar(255) | 0.3% | ✓ | vehicleType | + +### logistics_could.ts_trailer(有效 427 行,有数据字段 21/33) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `trailer_num` | 挂车车牌号 | varchar(20) | 100.0% | ✓ | 挂车档案plateDisplay | +| `trailer_license_plate_color` | 挂车车牌颜色 | int | 100.0% | ✓ | 挂车档案plateColor(映射) | +| `audit_state` | 审核状态,0:待审核,1:通过,-1:不通过 | int | 100.0% | ✓ | 挂车档案status | +| `is_enable` | 启用状态 | bit(1) | 100.0% | ✓ | 挂车档案enableStatus | +| `create_user_id` | 创建人id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_user_name` | 创建人姓名 | varchar(50) | 100.0% | ·系统 | 系统/审计字段 | +| `create_date` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `update_date` | 修改时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `update_user_id` | 更新用户Id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `update_user_name` | 更新用户姓名 | varchar(50) | 100.0% | ·系统 | 系统/审计字段 | +| `org_name` | 所属组织名称 | varchar(50) | 100.0% | △ | 组织 | +| `create_org_name` | 创建组织名称 | varchar(50) | 100.0% | △ | 组织 | +| `create_org_id` | 创建组织id | bigint | 100.0% | △ | 组织 | +| `enterprise_id` | 企业id | bigint | 100.0% | △ | 组织/主体 | +| `org_id` | 组织id | bigint | 100.0% | △ | 组织 | +| `org_data_used_mode` | 使用数据模式,0:全组织机构,1:当前组织机构,2:当前组织及其子组织 | int | 100.0% | △ | 数据范围 | +| `id` | id主键 | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `is_delete` | 是否删除 | bit(1) | 100.0% | ·系统 | 系统/审计字段 | +| `group_id` | 组id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `trailer_license_img1_id` | 挂车行驶证正面照片Id | bigint | 0.2% | ✓ | 挂车档案行驶证正页(槽) | +| `trailer_license_img2_id` | 挂车行驶证反面照片Id | bigint | 0.2% | ✓ | 挂车档案行驶证副页(槽) | + +### logistics_could.nts_driver(有效 2 行,有数据字段 28/44) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `platform_identity_id` | 平台身份Id | bigint | 100.0% | ·平台侧 | 网货平台身份 | +| `we_chat_open_id` | 微信小程序openId | varchar(50) | 100.0% | ✗ | 微信小程序openId | +| `name` | 驾驶员姓名 | varchar(20) | 100.0% | ✓ | displayName | +| `phone` | 驾驶员联系电话 | varchar(20) | 100.0% | ✓ | mobileMasked | +| `identification_number` | 身份证号 | varchar(20) | 100.0% | ✓ | identityMasked | +| `id_card_due_date` | 身份证到期日期 | datetime | 100.0% | ✓ | identityExpiry | +| `diver_attribute` | 司机属性,0:自有,1:外调 | int | 100.0% | ✓ | driverProperty(映射) | +| `auth_status` | 认证状态:0未认证/1认证中/2认证未通过/3认证通过 | int | 100.0% | ✓ | status | +| `signed_status` | 网货签约状态:0未签约/1已签约 | int | 100.0% | ✗ | 网货签约状态 | +| `is_activation` | 是否已激活 | bit(1) | 100.0% | △ | appAccountStatus | +| `is_long_term_driver_license` | 驾驶证是否长期有效 | bit(1) | 100.0% | ✗ | 驾驶证长期有效标记 | +| `id` | id主键 | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_date` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `update_date` | 修改时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `is_delete` | 是否删除 | bit(1) | 100.0% | ·系统 | 系统/审计字段 | +| `group_id` | 组id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `vehicle_class` | 准驾车型 | varchar(20) | 50.0% | ✓ | licenseClass | +| `driver_issuing_organization` | 驾驶证发证机关 | varchar(100) | 50.0% | ✓ | issuingAuthority | +| `driver_license_from_date_begin` | 驾驶证有效期开始日期 | datetime | 50.0% | ✓ | licenseValidFrom | +| `driver_license_from_date_end` | 驾驶证有效期结束日期 | datetime | 50.0% | ✓ | licenseExpiry | +| `driver_license` | 机动车驾驶证号 | varchar(20) | 50.0% | ✓ | driverLicenseNoMasked | +| `work_license` | 道路运输从业资格证号 | varchar(20) | 50.0% | ✓ | qualificationNoMasked | +| `identification_img_id` | 司机身份证正面照片 | bigint | 50.0% | ✓ | 身份证正面(证件槽) | +| `identification_back_img_id` | 司机身份证反面照片 | bigint | 50.0% | ✓ | 身份证反面(证件槽) | +| `user_id` | 用户id | bigint | 50.0% | △ | appAccountStatus间接 | +| `auth_time` | 认证时间,修改认证状态时同步修改 | datetime | 50.0% | △ | 审核时间 | +| `auth_failure_message` | 认证失败消息 | varchar(255) | 50.0% | △ | 审核信息 | +| `update_user_id` | 更新用户id | bigint | 50.0% | ·系统 | 系统/审计字段 | + +### logistics_could.nts_vehicle(有效 14 行,有数据字段 47/67) + +| 字段 | 注释 | 类型 | 填充率 | 覆盖 | 原型对应/说明 | +|---|---|---|---|---|---| +| `license_number` | 车牌号码 | varchar(20) | 100.0% | ✓ | plateDisplay | +| `vehicle_number_color` | 车牌颜色 | varchar(255) | 100.0% | ✓ | plateColor(代码映射) | +| `audit_state` | 审核状态,0:待审核,1:通过,-1:不通过 | int | 100.0% | ✓ | status | +| `is_has_trailer` | 是否挂车:true有,false无 | bit(1) | 100.0% | ✓ | hasTrailerFlag | +| `road_permit_img_id` | 道路运输证照片Id | bigint | 100.0% | ✓ | 道路运输证影像槽 | +| `road_transport_certificate_date` | 道路运输证到期日期 | datetime | 100.0% | ✓ | roadPermitExpiry | +| `vehicle_license_img1_id` | 车辆行驶证正面照片Id | bigint | 100.0% | ✓ | 行驶证正页(证件槽) | +| `vehicle_license_img2_id` | 车辆行驶证反面照片Id | bigint | 100.0% | ✓ | 行驶证副页(证件槽) | +| `vehicle_attributes` | 车辆属性 1-自有车辆,2-外调车辆 | int | 100.0% | ✓ | ownershipType(映射) | +| `id` | id主键 | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `create_date` | 创建时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `update_date` | 修改时间 | datetime | 100.0% | ·系统 | 系统/审计字段 | +| `is_delete` | 是否删除 | bit(1) | 100.0% | ·系统 | 系统/审计字段 | +| `group_id` | 组id | bigint | 100.0% | ·系统 | 系统/审计字段 | +| `audit_remark` | 审核备注 | varchar(255) | 92.9% | △ | 审核信息 | +| `is_linked` | 车辆是否挂靠 | bit(1) | 92.9% | ✓ | affiliatedFlag | +| `trailer_license_img1_id` | 挂车行驶证正面照片Id | bigint | 78.6% | ✓ 🔒挂车 | 挂车档案行驶证正页(槽) | +| `trailer_license_img2_id` | 挂车行驶证反面照片Id | bigint | 78.6% | ✓ 🔒挂车 | 挂车档案行驶证副页(槽) | +| `trailer_num` | 挂车车牌号 | varchar(255) | 78.6% | ✓ 🔒挂车 | 挂车档案plateDisplay | +| `trailer_road_permit_id` | 挂车道路运输证照片Id | bigint | 78.6% | ✓ 🔒挂车 | 挂车档案道路运输证影像(槽) | +| `vehicle_type` | 车辆类型 | varchar(255) | 57.1% | ✓ | vehicleType | +| `road_transport_certificate_number` | 车辆道路运输证号 | varchar(255) | 57.1% | ✓ | roadPermitNoMasked | +| `total_weight` | 车辆总重量 | double(6,2) | 57.1% | ✗ | 总质量 | +| `issue_date` | 车辆行驶证发证日期 | datetime | 57.1% | ✗ | 行驶证发证日期 | +| `register_date` | 车辆行驶证注册日期 | datetime | 57.1% | ✗ | 行驶证注册日期 | +| `issuing_organizations` | 车辆行驶证发证机关 | varchar(255) | 57.1% | ✗ | 行驶证发证机关 | +| `height` | 车高(mm) | double(20,2) | 57.1% | ✓ | vehicleHeightMm | +| `width` | 车宽(mm) | double(20,2) | 57.1% | ✓ | vehicleWidthMm | +| `length` | 车长(mm) | double(20,2) | 57.1% | ✓ | vehicleLengthMm | +| `load_weight` | 核定载质量(kg) | double(20,2) | 57.1% | ✓ | ratedLoadQuantity | +| `owner` | 车辆所有人 | varchar(255) | 57.1% | ✓ | ownerCompanyName | +| `road_permit_name` | 道路运输证业户名称 | varchar(255) | 57.1% | ✗ | 许可证业户名称 | +| `use_character` | 车辆使用性质 | varchar(255) | 57.1% | ✓ | useNature | +| `vehicle_energy_type` | 车辆能源类型 | varchar(255) | 57.1% | ✓ | energyType(映射) | +| `vehicle_img_id` | 车辆照片 | bigint | 57.1% | △ | 通用附件 | +| `vin` | 车辆识别码VIN | varchar(255) | 57.1% | ✓ | vinMasked | +| `trailer_classification_code` | 挂车车辆类型 | varchar(255) | 50.0% | ✓ 🔒挂车 | 挂车档案vehicleType(映射) | +| `trailer_load_weight` | 挂车核定载质量(kg) | double(6,2) | 50.0% | ✓ 🔒挂车 | 挂车档案ratedLoadQuantity | +| `trailer_road_transport` | 挂车道路运输证号 | varchar(255) | 50.0% | ✓ 🔒挂车 | 挂车档案roadPermitNoMasked | +| `trailer_total_weight` | 挂车总质量 | double(6,2) | 50.0% | ✗ 🔒挂车 | 挂车总质量,模板无此字段 | +| `update_user_id` | 更新用户id | bigint | 35.7% | ·系统 | 系统/审计字段 | +| `classification_code` | 车辆分类代码 | varchar(255) | 28.6% | ✓ | vehicleType(部标映射) | +| `road_permit_number` | 道路运输证号 | varchar(255) | 28.6% | △ | 许可证号口径并存 | +| `trailer_license_color` | 挂车车牌类型 | varchar(255) | 28.6% | ✓ 🔒挂车 | 挂车档案plateColor(映射) | +| `vehicle_license` | 车辆行驶证号 | varchar(255) | 28.6% | ✗ | 行驶证号 | +| `vehicle_license_color` | 车辆颜色 | varchar(255) | 28.6% | ✓ | plateColor | +| `vehicle_license_due_date` | 道路许可证到期日期 | datetime | 28.6% | △ | 许可证到期口径并存 | + + +## 五、物流云生产库补充结论 + +1. **ts_* 是原型的直系前身**:字段命名/口径与原型高度一致(含 diver_attribute、is_ues_all_vehicle 这类拼写都一致),落地改造量小,主要是新增字段而非重构。 +2. **ts_driver 证件影像填充率偏低**(1029 名司机中从业资格证照片 29.7%、驾驶证照片 28.9%,detailed_address/驾驶证号等仅 1 行),而原型资质门禁强依赖证件影像+OCR——上线前要安排存量补采,否则门禁会把大半存量司机挡在门外。 +3. **ts_vehicle 证件类字段填充率仅 2.8%**(道路运输证/行驶证影像、到期日期),主数据维护停在"车牌+组织+状态"层;真正证件齐全的是 **nts_vehicle(网货表,57%–100% 填充)**——即当前生产库是"ts_*=内部档案、nts_*=对外网货规范数据"的双层结构。 +4. **nts_* 是现成的运八对接雏形**:nts_driver/nts_vehicle 带 platform_identity_id(平台身份)、signed_status(网货签约)、we_chat_open_id,字段集即部标网络货运司机/车辆要素——但仅 2/14 行,说明对接处于试点。后续"物流云↔运八"同步建议沿用 nts 字段集作为接口契约,而非 ts。 +5. 原型相对 ts_* 删掉的字段需逐个确认意图:work_company(ts 填充 0.2%,可删)、is_long_term_driver_license(100% 填充,建议保留——与"驾驶证长期有效"现实匹配)、signed_status/signed_time(网货签约,若签约职能归运八则可删,但 nts 层应保留)、road_transport_annual_review_img_id/vehicle_driving_license_file_number/road_operation_permit_holders_name(低填充,可后补)、**total_quality(100% 填充,建议必须保留)**。 + +## 六、行动清单(合并三库视角) + +**A 级(监管/治超硬要求,建议原型必须补或明确由运八承载结论)** +- 车辆:行驶证号、注册日期、发证日期、发证机关、行驶证档案编号、总质量、准牵引总质量、轴数、`total_quality`(>4.5 吨判定)、道路运输证有效期起、道路经营许可证业户名称/统一社会信用代码、交强险影像 +- 司机:实名核验结果组(核验方式/公安比对结果/核验时间/活体标记——至少要承接运八回传的结论)、司机侧道路经营许可证、驾驶证副页影像、身份证有效期起、性别/民族/出生日期(上报报文)、涉税身份(商户类型) +- 挂车:挂车总质量、挂车准牵引总质量、挂车年审凭证、超牌及有效期 + +**B 级(业务需要)**:品牌、车辆/司机照片、实际所有人及电话、车主声明照片、挂靠协议影像、承运人归属(carrier_code)、网货签约状态(nts 层)、驾驶证长期有效标记、挂车到期/年审照片、可载方量与剩余可载(配载扣减) + +**对接事项(非字段问题)**:挂车建模三选一统一;车牌颜色/车辆分类/能源类型/使用性质/权属建部标代码映射表;质量(kg/吨)与尺寸(mm)单位规范;外部司机以"手机号+车牌"组合并加身份证号强校验;同步前先跑运八侧空值核对(本报告 SQL 可复用)。 + +--- +*生成方式:原型前端产物逆向 + information_schema.columns + 全列 COUNT 空值率(脚本化,可复跑)。数据快照 2026-09-17。* diff --git a/原型评估_滇中好运物流云_20260917/05_核对表.md b/原型评估_滇中好运物流云_20260917/05_核对表.md new file mode 100644 index 0000000..6247671 --- /dev/null +++ b/原型评估_滇中好运物流云_20260917/05_核对表.md @@ -0,0 +1,525 @@ +# 05 核对表 — 字段名对比(运八×原型 / 物流云×原型) + +每个字段一行:中文语义 + 双侧"存在/不存在" + 实际字段名(含中文名与实测填充率)。快照 2026-09-17(生产库逐列 COUNT + 原型本地镜像页面验证)。 + +**两张表相互独立**:运八表的映射结论已由业务逐项确认(2026-09-18,见"用户已确认映射"与"运八有·原型无");物流云表按其自身与原型的关系独立校验(物流云生产库 ts_* 即原型的直系前身,同源字段为直接映射),其中 7 项语义需业务独立确认,不随运八表结论变化。 + +各分组含义:**两边都有·直接映射**=语义一致可直接对接|**两边都有·用户已确认映射**=业务确认的对应关系(仅运八表)|**两边都有·需映射**=字段两边都有但需代码字典/口径换算|**映射待确认**=语义需业务确认|**×有·原型无**=原型不存在该字段|**原型有·×无**=原型新增|**平台职责·不补**=运八平台职责字段|**系统字段**=id/审计类。 + +原型侧标注:【✓页面验证】=在原型页面实测到;【◇仅代码定义】=仅前端代码定义、页面未验证到。 + +Excel 版:[05_核对表_字段名对比_v2.xlsx](05_核对表_字段名对比_v2.xlsx)(同结构,可筛选)。详细依据见 [04_司机车辆字段核对.md](04_司机车辆字段核对.md)。 + +## 表一:运八 × 原型 字段名对比(已经业务确认归类) + +### 两边都有·直接映射(37 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 审核状态 | 存在 | 存在 | `base_driver.auth_status`(100%)·审核状态、`base_driver_ext.auth_status`(100%)·审核状态 | 状态(status)【◇仅代码定义】 | 直接映射 | +| 司机 | 司机驾驶证图片 | 存在 | 存在 | `base_driver.driver_license_img`(100%)·司机驾驶证图片 | 驾驶证(证件槽) | 直接映射 | +| 司机 | 地址 | 存在 | 存在 | `base_driver.home_address`(100%)·地址 | 联系地址(address)【✓页面验证】 | 直接映射 | +| 司机 | 司机身份证反面照片 | 存在 | 存在 | `base_driver.identification_back_img`(100%)·司机身份证反面照片 | 身份证反面(证件槽) | 直接映射 | +| 司机 | 手机 | 存在 | 存在 | `base_driver.phone`(100%)·手机 | 手机号(mobileMasked)【✓页面验证】 | 直接映射 | +| 司机 | 从业资格证照片 | 存在 | 存在 | `base_driver.work_license_img`(100%)·从业资格证照片 | 从业资格证(证件槽) | 直接映射 | +| 司机 | 姓名 | 存在 | 存在 | `base_driver.name`(95%)·姓名 | 司机姓名(displayName)【✓页面验证】 | 直接映射 | +| 司机 | 身份证号 | 存在 | 存在 | `base_driver.identification_number`(95%)·身份证号 | 身份证号(identityMasked)【✓页面验证】 | 直接映射 | +| 司机 | 身份证到期日期 | 存在 | 存在 | `base_driver.id_card_due_date`(87%)·身份证到期日期 | 身份证有效期(identityExpiry)【✓页面验证】 | 直接映射 | +| 司机 | 驾驶证 | 存在 | 存在 | `base_driver.driver_license`(86%)·驾驶证 | 驾驶证号(driverLicenseNoMasked)【✓页面验证】 | 直接映射 | +| 司机 | 准驾车型 | 存在 | 存在 | `base_driver.vehicle_class`(86%)·准驾车型 | 准驾车型(licenseClass)【✓页面验证】 | 直接映射 | +| 司机 | 驾驶证发证机关 | 存在 | 存在 | `base_driver.issuing_organizations`(86%)·驾驶证发证机关 | 发证机关(issuingAuthority)【✓页面验证】 | 原型补:行驶证发证机关 | +| 司机 | 上岗证(从业资格证) | 存在 | 存在 | `base_driver.work_license`(85%)·上岗证(从业资格证) | 从业资格证号(qualificationNoMasked)【✓页面验证】 | 直接映射 | +| 司机 | 司机驾驶证开始日期 | 存在 | 存在 | `base_driver.driver_license_from_date`(85%)·司机驾驶证开始日期 | 驾驶证生效(licenseValidFrom)【✓页面验证】 | 直接映射 | +| 司机 | 司机驾驶证到期日期 | 存在 | 存在 | `base_driver.driver_license_due_date`(85%)·司机驾驶证到期日期 | 驾驶证到期(licenseExpiry)【✓页面验证】 | 直接映射 | +| 司机 | 从业资格证到期日期 | 存在 | 存在 | `base_driver.work_license_due_date`(85%)·从业资格证到期日期 | 从业资格到期(qualificationExpiry)【✓页面验证】 | 直接映射 | +| 车辆 | 审核状态 | 存在 | 存在 | `base_vehicle.auth_status`(100%)·审核状态、`base_vehicle_ext.auth_status`(100%)·审核状态 | 状态(status)【◇仅代码定义】 | 直接映射 | +| 车辆 | 有无挂车:0无/1有 | 存在 | 存在 | `base_vehicle.is_has_trailer`(100%)·有无挂车:0无/1有 | 可牵引挂车(hasTrailerFlag)【✓页面验证】 | 直接映射 | +| 车辆 | 车牌号 | 存在 | 存在 | `base_vehicle.license_number`(100%)·车牌号 | 车牌(plateDisplay)【✓页面验证】 | 直接映射 | +| 车辆 | 道路运输许可证照片 | 存在 | 存在 | `base_vehicle.road_transport_certificate_img`(100%)·道路运输许可证照片 | 道路运输证(证件槽) | 直接映射 | +| 车辆 | 🔒挂车车牌颜色:1 蓝色 2 黄色 3 黑色 4 白色 5 绿色 9 其他 91 | 存在 | 存在 | `base_vehicle.trailer_license_color`(100%)·挂车车牌颜色:1 蓝色 2 黄色 3 黑色 4 白色 5 绿色 9 其他 91 | 挂车档案车牌颜色(plateColor·映射)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆行驶证照片 | 存在 | 存在 | `base_vehicle.vehicle_license_img`(100%)·车辆行驶证照片 | 行驶证正页(证件槽) | 直接映射 | +| 车辆 | 车高 | 存在 | 存在 | `base_vehicle.height`(94%)·车高 | 车高(vehicleHeightMm)【✓页面验证】 | 直接映射 | +| 车辆 | 车长 | 存在 | 存在 | `base_vehicle.length`(94%)·车长 | 车长(vehicleLengthMm·单位核对)【✓页面验证】 | 直接映射 | +| 车辆 | 车宽 | 存在 | 存在 | `base_vehicle.width`(94%)·车宽 | 车宽(vehicleWidthMm)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆道路运输证号 | 存在 | 存在 | `base_vehicle.road_transport_certificate_number`(94%)·车辆道路运输证号 | 道路运输证号(roadPermitNoMasked)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆识别代号 | 存在 | 存在 | `base_vehicle.vin`(93%)·车辆识别代号 | 车辆识别代号(vinMasked)【✓页面验证】 | 直接映射 | +| 车辆 | 使用性质 | 存在 | 存在 | `base_vehicle.use_character`(93%)·使用性质 | 使用性质(useNature)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车车牌号 | 存在 | 存在 | `base_vehicle.trailer_num`(93%)·挂车车牌号 | 当前挂车(currentTrailerPlate·主车)/挂车档案车牌【✓页面验证】 | 直接映射 | +| 车辆 | 车辆行驶证副页照片 | 存在 | 存在 | `base_vehicle.vehicle_license_deputy_page_img`(90%)·车辆行驶证副页照片 | 行驶证副页(证件槽) | 直接映射 | +| 车辆 | 行驶证到期日期 | 存在 | 存在 | `base_vehicle.vehicle_license_due_date`(89%)·行驶证到期日期 | 行驶证到期(annualInspectionExpiry)【✓页面验证】 | 直接映射 | +| 车辆 | 道路运输许可证到期日期 | 存在 | 存在 | `base_vehicle.road_transport_certificate_date`(89%)·道路运输许可证到期日期 | 道路运输证到期(roadPermitExpiry)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车车辆分类代码 | 存在 | 存在 | `base_vehicle.trailer_classification_code`(89%)·挂车车辆分类代码 | 挂车档案车辆类型(vehicleType·映射)【✓页面验证】 | 直接映射 | +| 车辆 | 行驶证整备质量 | 存在 | 存在 | `base_vehicle.curb_weight`(81%)·行驶证整备质量 | 整备质量(curbWeightKg)【✓页面验证】 | 直接映射 | +| 车辆 | 行驶证核定载质量 | 存在 | 存在 | `base_vehicle.load_quality`(54%)·行驶证核定载质量 | 核定载重(ratedLoadQuantity)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车道路运输证到期日期 | 存在 | 存在 | `base_vehicle.trailer_road_transport_expiry_date`(46%)·挂车道路运输证到期日期 | 挂车档案道路运输证到期(roadPermitExpiry)【✓页面验证】 | 直接映射 | +| 车辆 | 排放标准 | 存在 | 存在 | `base_vehicle.emission_standards`(43行)·排放标准 | 排放标准(emissionStandard)【✓页面验证】 | 直接映射 | + +### 两边都有·用户已确认映射(9 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 司机身份证 | 存在 | 存在 | `base_driver.identification_img`(100%)·司机身份证 | 已确认: 身份证正面(单槽) | 用户已确认映射 | +| 司机 | 司机工作状态 0 休息 1 上班 | 存在 | 存在 | `base_driver.work_status`(100%)·司机工作状态 0 休息 1 上班 | 已确认: 可派状态(dispatchEligibility) | 用户已确认映射 | +| 司机 | 车队名称 | 存在 | 存在 | `base_driver.link_man`(2%)·车队名称 | 已确认: 所属车队(fleetName) | 用户已确认映射 | +| 车辆 | 载重状态 | 存在 | 存在 | `base_vehicle.load_status`(100%)·载重状态 | 已确认: 空重状态(emptyLoadStatus) | 用户已确认映射 | +| 车辆 | 车辆可载重量 | 存在 | 存在 | `base_vehicle.load_weight`(100%)·车辆可载重量 | 已确认: 核定载重(ratedLoadQuantity) | 用户已确认映射 | +| 车辆 | 车牌颜色 | 存在 | 存在 | `base_vehicle.vehicle_license_color`(100%)·车牌颜色 | 已确认: 车牌颜色(plateColor) | 用户已确认映射 | +| 车辆 | 车辆所有人 | 存在 | 存在 | `base_vehicle.owner`(94%)·车辆所有人 | 已确认: 所属主体 | 用户已确认映射 | +| 车辆 | 车辆能源类型 | 存在 | 存在 | `base_vehicle.vehicle_energy_type`(93%)·车辆能源类型 | 已确认: 能源类型(energyType) | 用户已确认映射 | +| 司机 | 从业资格证起始日期(库字段注释误写"道路运输证有效期自") | 存在 | 存在 | `base_driver.road_transport_effective_date`(63%)·道路运输证有效期自 | 已确认:从业资格有效起始日期(qualificationValidFrom)【用户已确认】 | 用户已确认映射;字段注释与实际含义不符,以业务确认为准 | + +### 两边都有·需映射(28 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 审核名 | 存在 | 存在 | `base_driver_ext.auth_name`(100%)·审核名 | 抽检人 | 需映射/口径确认 | +| 司机 | 审核来源 | 存在 | 存在 | `base_driver.auth_type`(100%)·审核来源、`base_driver_ext.auth_type`(100%)·审核类型1-自动审核 0-平台、管理员 | 机审/人工(抽检) | 需映射/口径确认 | +| 司机 | 审核时间 | 存在 | 存在 | `base_driver_ext.auth_time`(99%)·审核时间、`base_driver.auth_time`(91%)·审核时间 | 审核流时间 | 需映射/口径确认 | +| 司机 | 审核信息 | 存在 | 存在 | `base_driver.auth_msg`(91%)·审核信息、`base_driver_ext.auth_msg`(88%)·审核信息 | 审核信息 | 需映射/口径确认 | +| 司机 | 司机身份证反面的ocrJson | 存在 | 存在 | `base_driver_ext.identification_back_orc_json`(7%)·司机身份证反面的ocrJson | OCR(身份证反面) | 需映射/口径确认 | +| 司机 | 司机身份证正面的ocrJson | 存在 | 存在 | `base_driver_ext.identification_orc_json`(7%)·司机身份证正面的ocrJson | OCR机审(身份证正面) | 需映射/口径确认 | +| 司机 | 司机从业资格证的ocrJson | 存在 | 存在 | `base_driver_ext.work_license_orc_json`(7%)·司机从业资格证的ocrJson | OCR(从业资格证) | 需映射/口径确认 | +| 司机 | 司机驾驶证正面的ocrJson | 存在 | 存在 | `base_driver_ext.license_orc_json`(7%)·司机驾驶证正面的ocrJson | OCR(驾驶证) | 需映射/口径确认 | +| 司机 | 司机从业资格证最新的ocrJson | 存在 | 存在 | `base_driver_ext.new_work_license_orc_json`(6%)·司机从业资格证最新的ocrJson | OCR(最新页) | 需映射/口径确认 | +| 司机 | 司机驾驶证副页的ocrJson | 存在 | 存在 | `base_driver_ext.license_back_orc_json`(0%)·司机驾驶证副页的ocrJson | OCR(驾驶证副页) | 需映射/口径确认 | +| 车辆 | 🔒挂车行驶证照片 | 存在 | 存在 | `base_vehicle.trailer_vehicle_license_img`(100%)·挂车行驶证照片 | 挂车档案行驶证影像槽 | 需映射/口径确认 | +| 车辆 | 🔒挂车道路运输证照片 | 存在 | 存在 | `base_vehicle.trailer_road_transport_certificate_img`(100%)·挂车道路运输证照片 | 挂车道路运输证影像槽 | 需映射/口径确认 | +| 车辆 | 🔒挂车道路运输证到期日期照片 | 存在 | 存在 | `base_vehicle.trailer_expiry_date_img`(100%)·挂车道路运输证到期日期照片 | 挂车证到期照片 | 需映射/口径确认 | +| 车辆 | 🔒挂车道路运输证 | 存在 | 存在 | `base_vehicle.trailer_road_transport`(92%)·挂车道路运输证 | 挂车档案道路运输证号 | 需映射/口径确认 | +| 车辆 | 🔒挂车可载重量 | 存在 | 存在 | `base_vehicle.trailer_load_weight`(89%)·挂车可载重量 | 挂车档案核定载重(ratedLoadQuantity)【✓页面验证】 | 需映射/口径确认 | +| 车辆 | 审核结果 | 存在 | 存在 | `base_vehicle.auth_msg`(89%)·审核结果、`base_vehicle_ext.auth_msg`(88%)·审核信息 | 审核信息 | 需映射/口径确认 | +| 车辆 | 🔒挂车行驶证副页照片 | 存在 | 存在 | `base_vehicle.trailer_vehicle_license_deputy_page_img`(81%)·挂车行驶证副页照片 | 挂车行驶证副页影像槽 | 需映射/口径确认 | +| 车辆 | 车辆照片 | 存在 | 存在 | `base_vehicle.vehicle_img`(76%)·车辆照片 | 通用附件 | 建议补:品牌/车辆照片 | +| 车辆 | 🔒挂车照片 | 存在 | 存在 | `base_vehicle.trailer_vehicle_img`(75%)·挂车照片 | 通用附件 | 需映射/口径确认 | +| 车辆 | 🔒挂车行驶证核定载质量 | 存在 | 存在 | `base_vehicle.trailer_load_quality`(73%)·挂车行驶证核定载质量 | 挂车档案核定载重(ratedLoadQuantity·行驶证口径)【✓页面验证】 | 需映射/口径确认 | +| 车辆 | 车辆道路运输证字 | 存在 | 存在 | `base_vehicle.road_transport_certificate_word`(27%)·车辆道路运输证字 | 道路运输证字号,原型只有证号 | 需映射/口径确认 | +| 车辆 | 最新车辆行驶证副页ocr | 存在 | 存在 | `base_vehicle_ext.new_vehicle_license_ocr_back`(9%)·最新车辆行驶证副页ocr | OCR | 需映射/口径确认 | +| 车辆 | 🔒挂车行驶证整备质量 | 存在 | 存在 | `base_vehicle.trailer_curb_weight`(9%)·挂车行驶证整备质量 | 挂车档案整备质量(curbWeightKg)【✓页面验证】 | 需映射/口径确认 | +| 车辆 | 道路运输证对象ocr | 存在 | 存在 | `base_vehicle_ext.road_transport_permit_ocr`(8%)·道路运输证对象ocr | OCR | 需映射/口径确认 | +| 车辆 | 驾驶证正页ocr | 存在 | 存在 | `base_vehicle_ext.vehicle_license_ocr_front`(8%)·驾驶证正页ocr | OCR机审 | 需映射/口径确认 | +| 车辆 | 车辆行驶证副页ocr | 存在 | 存在 | `base_vehicle_ext.vehicle_license_ocr_back`(8%)·车辆行驶证副页ocr | OCR | 需映射/口径确认 | +| 车辆 | 行驶证副页车牌号ocr | 存在 | 存在 | `base_vehicle_ext.vehicle_license_car_back_number`(8%)·行驶证副页车牌号ocr | OCR副页车牌 | 需映射/口径确认 | +| 车辆 | 车牌号车头ocr | 存在 | 存在 | `base_vehicle_ext.license_plate_ocr`(8%)·车牌号车头ocr | OCR | 需映射/口径确认 | + +### 运八有·原型无(94 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 车队允许司机接运单 | 存在 | 不存在 | `base_driver.allow_driver_receive`(100%)·车队允许司机接运单 | — | 原型无对应字段 | +| 司机 | 司机/车队属性 | 存在 | 不存在 | `base_driver.attribute`(100%)·司机/车队属性 | — | 原型无对应字段 | +| 司机 | 冻结原因 | 存在 | 不存在 | `base_driver_ext.freeze_msg`(100%)·冻结原因 | — | 原型无对应字段 | +| 司机 | 是否冻结 | 存在 | 不存在 | `base_driver.is_freeze`(100%)·是否冻结、`base_driver_ext.is_freeze`(100%)·是否冻结 | — | 原型无对应字段 | +| 司机 | 用户编码 | 存在 | 不存在 | `base_driver.party_code`(100%)·用户编码 | — | 原型无对应字段 | +| 司机 | 驾驶车辆编码 | 存在 | 不存在 | `base_driver.vehicle_code`(85%)·驾驶车辆编码 | — | 原型无对应字段 | +| 车辆 | 审核名 | 存在 | 不存在 | `base_vehicle_ext.auth_name`(100%)·审核名 | — | 原型无对应字段 | +| 车辆 | 审核类型1-自动审核 0-平台、管理员 | 存在 | 不存在 | `base_vehicle_ext.auth_type`(100%)·审核类型1-自动审核 0-平台、管理员 | — | 原型无对应字段 | +| 车辆 | 是否冻结 | 存在 | 不存在 | `base_vehicle.is_freeze`(100%)·是否冻结 | — | 原型无对应字段 | +| 车辆 | 维修状态 | 存在 | 不存在 | `base_vehicle.repair_status`(100%)·维修状态 | — | 原型无对应字段 | +| 车辆 | 审核状态 | 存在 | 不存在 | `base_vehicle_ext.vehicle_auth_status`(100%)·审核状态 | — | 原型无对应字段 | +| 车辆 | 车队编码 | 存在 | 不存在 | `base_vehicle.team_code`(100%)·车队编码 | — | 原型无对应字段 | +| 车辆 | 审核时间 | 存在 | 不存在 | `base_vehicle_ext.auth_time`(99%)·审核时间 | — | 原型无对应字段 | +| 车辆 | 车辆分类代码 | 存在 | 不存在 | `base_vehicle.classification_code`(94%)·车辆分类代码 | — | 原型无对应字段 | +| 车辆 | 道路经营许可证 | 存在 | 不存在 | `base_vehicle.road_permit_number`(94%)·道路经营许可证 | — | 原型无对应字段 | +| 车辆 | 是否挂靠车辆 | 存在 | 不存在 | `base_vehicle.is_linked`(90%)·是否挂靠车辆 | — | 原型无对应字段 | +| 车辆 | 审核状态描述 | 存在 | 不存在 | `base_vehicle_ext.vehicle_auth_msg`(88%)·审核状态描述 | — | 原型无对应字段 | +| 车辆 | 车身自重 | 存在 | 不存在 | `base_vehicle.self_respect`(84%)·车身自重 | — | 原型无对应字段 | +| 司机 | 营业执照照片 | 存在 | 不存在 | `base_driver.business_license_img`(100%)·营业执照照片 | — | 不补:车队可以另作管理 | +| 司机 | 挂靠协议照片 | 存在 | 不存在 | `base_driver.depen_deal_img`(0%)·挂靠协议照片 | — | — | +| 司机 | 司机照片 | 存在 | 不存在 | `base_driver.driver_img`(100%)·司机照片 | — | 原型补:司机照片 | +| 司机 | 0司机,1车队,2-车队司机 | 存在 | 不存在 | `base_driver.driver_type`(100%)·0司机,1车队,2-车队司机 | — | 不补:车队可以另作管理 | +| 司机 | 是否活体检测实人认证 | 存在 | 不存在 | `base_driver_ext.is_real_people`(100%)·是否活体检测实人认证 | — | 承载实名核验 | +| 司机 | 审核状态 | 存在 | 不存在 | `base_driver.license_auth_status`(100%)·审核状态 | — | 承载实名核验,结论回传 | +| 司机 | 道路经营许可证照片 | 存在 | 不存在 | `base_driver.road_permit_number_img`(100%)·道路经营许可证照片 | — | 不补:车队可以另作管理 | +| 司机 | 安全责任险照片 | 存在 | 不存在 | `base_driver.safe_duty_insure_img`(100%)·安全责任险照片 | — | 建议补:保险影像 | +| 司机 | 公安对比状态 | 存在 | 不存在 | `base_driver.verify_addr`(100%)·公安对比状态 | — | 承载实名核验,结论回传 | +| 司机 | 图片公安对比状态 | 存在 | 不存在 | `base_driver.verify_addr_img`(100%)·图片公安对比状态 | — | 承载实名核验,结论回传 | +| 司机 | 认证标识 | 存在 | 不存在 | `base_driver.verify_flag`(100%)·认证标识 | — | 承载实名核验,结论回传 | +| 司机 | 图片认证标识 | 存在 | 不存在 | `base_driver.verify_flag_img`(100%)·图片认证标识 | — | 承载实名核验,结论回传 | +| 司机 | 认证通过方式 | 存在 | 不存在 | `base_driver.verify_type`(100%)·认证通过方式 | — | 承载实名核验,结论回传 | +| 司机 | 图片认证通过方式 | 存在 | 不存在 | `base_driver.verify_type_img`(100%)·图片认证通过方式 | — | 承载实名核验,结论回传 | +| 司机 | 认证渠道 | 存在 | 不存在 | `base_driver.verify_way`(100%)·认证渠道 | — | 承载实名核验,结论回传 | +| 司机 | 工作单位 | 存在 | 不存在 | `base_driver.work_company`(100%)·工作单位 | — | 不补:车队体系 | +| 司机 | 审核状态 | 存在 | 不存在 | `base_driver.idcard_auth_status`(100%)·审核状态 | — | 承载实名核验,结论回传 | +| 司机 | 司机对应承运人的code | 存在 | 不存在 | `base_driver.carrier_code`(95%)·司机对应承运人的code | — | 所属承运人,上报开票系统映射值 | +| 司机 | 身份证认证描述 | 存在 | 不存在 | `base_driver.idcard_auth_msg`(93%)·身份证认证描述 | — | 承载实名核验,结论回传 | +| 司机 | 驾驶证认证描述 | 存在 | 不存在 | `base_driver.license_auth_msg`(91%)·驾驶证认证描述 | — | 承载实名核验,结论回传 | +| 司机 | 道路运输证到期日期照片 | 存在 | 不存在 | `base_driver.road_per_expiry_date_img`(89%)·道路运输证到期日期照片 | — | 原型补:司机侧道路运输/经营许可证 | +| 司机 | 省编码 | 存在 | 不存在 | `base_driver.province_code`(87%)·省编码 | — | 建议补:行政区划(地址结构化) | +| 司机 | 市编码 | 存在 | 不存在 | `base_driver.city_code`(86%)·市编码 | — | 建议补:行政区划(地址结构化) | +| 司机 | 县/区编码 | 存在 | 不存在 | `base_driver.county_code`(86%)·县/区编码 | — | 建议补:行政区划(地址结构化) | +| 司机 | 道路经营许可证 | 存在 | 不存在 | `base_driver.road_permit_number`(67%)·道路经营许可证 | — | 不补:车队可以另作管理 | +| 司机 | 身份证到期日期开始 | 存在 | 不存在 | `base_driver.id_card_due_date_begin`(64%)·身份证到期日期开始 | — | 原型补:身份证有效期起 | +| 司机 | 人工审核备注 | 存在 | 不存在 | `base_driver.verify_remark`(57%)·人工审核备注 | — | 承载实名核验,结论回传 | +| 司机 | 归属货主 | 存在 | 不存在 | `base_driver.belong_shipment`(32%)·归属货主 | — | 运八数据库字段 | +| 司机 | 性别 | 存在 | 不存在 | `base_driver.sex`(22%)·性别 | — | 运八数据库字段 | +| 司机 | 司机驾驶证副页图片 | 存在 | 不存在 | `base_driver.driver_license_back_img`(12%)·司机驾驶证副页图片 | — | 运八数据库字段 | +| 司机 | 从业资格证最新页 | 存在 | 不存在 | `base_driver.new_work_license_img`(10%)·从业资格证最新页 | — | 原型补:从业资格证最新页 | +| 司机 | 名族 | 存在 | 不存在 | `base_driver.nation`(7%)·名族 | — | 运八数据库字段 | +| 司机 | 法人姓名 | 存在 | 不存在 | `base_driver.legal_person`(2%)·法人姓名 | — | 车队体系 | +| 司机 | 营业执照号 | 存在 | 不存在 | `base_driver.business_license_number`(2%)·营业执照号 | — | 车队体系 | +| 司机 | 实名认证ID | 存在 | 不存在 | `base_driver.flow_id`(2%)·实名认证ID | — | 承载实名核验,结论回传 | +| 司机 | 机动车交通事故责任强制保险证明 | 存在 | 不存在 | `base_driver.compulsory_insurance_proof_img`(27行)·机动车交通事故责任强制保险证明 | — | 运八数据库字段 | +| 司机 | 商户类型 | 存在 | 不存在 | `base_driver.merchant_type`(2行)·商户类型 | — | 车队体系 | +| 车辆 | 机动车交通事故责任强制保险证明照片 | 存在 | 不存在 | `base_vehicle.accident_insurance_img`(100%)·机动车交通事故责任强制保险证明照片 | — | 运八数据库字段 | +| 车辆 | 牌照类型代码 | 存在 | 不存在 | `base_vehicle.license_plate_type`(100%)·牌照类型代码 | — | 运八数据库字段 | +| 车辆 | 车辆可载平方 | 存在 | 不存在 | `base_vehicle.load_volume`(100%)·车辆可载平方 | — | 运八数据库字段 | +| 车辆 | 定位来源 0中交兴路 1APP端 2GPS硬件 默认0 | 存在 | 不存在 | `base_vehicle.location_source`(100%)·定位来源 0中交兴路 1APP端 2GPS硬件 默认0 | — | 运八数据库字段 | +| 车辆 | 入网标志 | 存在 | 不存在 | `base_vehicle.net_status`(100%)·入网标志 | — | 运八数据库字段 | +| 车辆 | 车辆剩余可载立方 | 存在 | 不存在 | `base_vehicle.remaining_load_volume`(100%)·车辆剩余可载立方 | — | 运八数据库字段 | +| 车辆 | 道路运输证到期日期照片 | 存在 | 不存在 | `base_vehicle.road_per_expiry_date_img`(100%)·道路运输证到期日期照片 | — | 运八数据库字段 | +| 车辆 | 道路经营许可证照片 | 存在 | 不存在 | `base_vehicle.road_permit_number_img`(100%)·道路经营许可证照片 | — | 原型补:道路经营许可证 | +| 车辆 | 人车分离 | 存在 | 不存在 | `base_vehicle.team_type`(100%)·人车分离 | — | 运八数据库字段 | +| 车辆 | 车辆总重量 | 存在 | 不存在 | `base_vehicle.total_weight`(94%)·车辆总重量 | — | 原型补:车辆总重量 | +| 车辆 | 车辆行驶证号 | 存在 | 不存在 | `base_vehicle.vehicle_license`(93%)·车辆行驶证号 | — | 原型补:行驶证号 | +| 车辆 | 发证机关 | 存在 | 不存在 | `base_vehicle.issuing_organizations`(93%)·发证机关 | — | 原型补:行驶证发证机关 | +| 车辆 | 道路经营许可证业户名称 | 存在 | 不存在 | `base_vehicle.road_permit_name`(92%)·道路经营许可证业户名称 | — | 运八数据库字段 | +| 车辆 | 🔒挂车总重量 | 存在 | 不存在 | `base_vehicle.trailer_total_weight`(81%)·挂车总重量 | — | 原型补:挂车总质量 | +| 车辆 | 行驶证准牵引总质量 | 存在 | 不存在 | `base_vehicle.total_quasi_mass`(79%)·行驶证准牵引总质量 | — | 运八数据库字段 | +| 车辆 | 品牌 | 存在 | 不存在 | `base_vehicle.brand`(78%)·品牌 | — | 运八数据库字段 | +| 车辆 | 🔒挂车行驶证总质量 | 存在 | 不存在 | `base_vehicle.trailer_total_Mass`(72%)·挂车行驶证总质量 | — | 原型补:挂车总质量 | +| 车辆 | 车辆实际所有人 | 存在 | 不存在 | `base_vehicle.real_owner`(64%)·车辆实际所有人 | — | 运八数据库字段 | +| 车辆 | 车轴数 | 存在 | 不存在 | `base_vehicle.axlenum`(64%)·车轴数 | — | 运八数据库字段 | +| 车辆 | 车辆实际所有人联系方式 | 存在 | 不存在 | `base_vehicle.real_owner_phone`(64%)·车辆实际所有人联系方式 | — | 运八数据库字段 | +| 车辆 | 行驶证总质量 | 存在 | 不存在 | `base_vehicle.total_mass`(54%)·行驶证总质量 | — | 运八数据库字段 | +| 车辆 | 注册日期 | 存在 | 不存在 | `base_vehicle.register_date`(53%)·注册日期 | — | 原型补:行驶证注册/发证日期 | +| 车辆 | 发证日期 | 存在 | 不存在 | `base_vehicle.issue_date`(53%)·发证日期 | — | 原型补:行驶证注册/发证日期 | +| 车辆 | 道路运输证有效期自 | 存在 | 不存在 | `base_vehicle.road_transport_effective_date`(53%)·道路运输证有效期自 | — | 原型补:道路运输证有效期起 | +| 车辆 | 挂靠协议图片 | 存在 | 不存在 | `base_vehicle.depen_deal_img`(48%)·挂靠协议图片 | — | 运八数据库字段 | +| 车辆 | 车主声明照片 | 存在 | 不存在 | `base_vehicle.state_img`(48%)·车主声明照片 | — | 运八数据库字段 | +| 车辆 | 🔒挂车是否超牌 | 存在 | 不存在 | `base_vehicle.if_over_quota`(46%)·挂车是否超牌 | — | 原型补:超牌标记/有效期/OCR | +| 车辆 | 🔒超牌有效期至 | 存在 | 不存在 | `base_vehicle.super_card_end_date`(38%)·超牌有效期至 | — | 原型补:超牌标记/有效期/OCR | +| 车辆 | 道路经营许可证业户统一社会信用代码 | 存在 | 不存在 | `base_vehicle.business_uniform_social_credit_code`(16%)·道路经营许可证业户统一社会信用代码 | — | 运八数据库字段 | +| 车辆 | 最新车辆行驶证副页 | 存在 | 不存在 | `base_vehicle.new_vehicle_license_deputy_page_img`(12%)·最新车辆行驶证副页 | — | 原型补:行驶证最新副页 | +| 车辆 | 车辆行驶证注册日期 | 存在 | 不存在 | `base_vehicle.vehicle_license_register_date`(11%)·车辆行驶证注册日期 | — | 原型补:行驶证注册/发证日期 | +| 车辆 | 车辆行驶证发证日期 | 存在 | 不存在 | `base_vehicle.vehicle_license_issue_date`(11%)·车辆行驶证发证日期 | — | 原型补:行驶证注册/发证日期 | +| 车辆 | 🔒挂车年审照片 | 存在 | 不存在 | `base_vehicle.trailer_annual_review_img`(10%)·挂车年审照片 | — | 原型补:挂车年审凭证 | +| 车辆 | 🔒挂车行驶证准牵引总质量 | 存在 | 不存在 | `base_vehicle.trailer_total_quasi_mass`(9%)·挂车行驶证准牵引总质量 | — | 原型补:挂车准牵引总质量 | +| 车辆 | 🔒挂车道路运输证ocr | 存在 | 不存在 | `base_vehicle_ext.trailer_road_transport_permit_ocr`(6%)·挂车道路运输证ocr | — | 运八数据库字段 | +| 车辆 | 🔒挂车行驶证副页ocr | 存在 | 不存在 | `base_vehicle_ext.trailer_vehicle_license_deputy_page_ocr_back`(6%)·挂车行驶证副页ocr | — | 运八数据库字段 | +| 车辆 | 🔒挂车行驶证正页ocr | 存在 | 不存在 | `base_vehicle_ext.trailer_vehicle_license_ocr_front`(6%)·挂车行驶证正页ocr | — | 运八数据库字段 | +| 车辆 | 道路经营许可证验证图片 | 存在 | 不存在 | `base_vehicle.road_transport_img_url`(4%)·道路经营许可证验证图片 | — | 运八数据库字段 | +| 车辆 | 🔒超牌ocr | 存在 | 不存在 | `base_vehicle_ext.super_card_ocr`(0%)·超牌ocr | — | 运八数据库字段 | + +### 原型有·运八无(11 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 可使用全部车辆 | 不存在 | 存在 | —(不存在) | 可使用全部车辆(allVehicleAccess) | 运八无;物流云 ts_driver.is_ues_all_vehicle 有;核验(限对比表列名+注释):无此字段 | +| 司机 | 紧急联系人 | 不存在 | 存在 | —(不存在) | 紧急联系人(emergencyContact) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 司机 | 从业资格核发机关 | 不存在 | 存在 | —(不存在) | 从业资格核发机关(qualificationIssuingAuthority) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 司机 | 维护方式 | 不存在 | 存在 | —(不存在) | 维护方式(maintenanceMode) | 原型新增(中闽维保视角);核验(限对比表列名+注释):无此字段 | +| 司机 | 体检报告/毒检证明/无犯罪证明(证件槽) | 不存在 | 存在 | —(不存在) | 体检报告、毒检证明、无犯罪证明、其他(均为页面证件槽) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 车辆 | 保险到期 | 不存在 | 存在 | —(不存在) | 保险到期(insuranceExpiry) | 原型新增(运八在 base_vehicle_insurance 子表;物流云无);核验(限对比表列名+注释):无此字段 | +| 车辆 | 购买日期/资产价值/残值/折旧周期/资产入账时间 | 不存在 | 存在 | —(不存在) | 购买日期(purchaseDate)、资产价值(assetValue)、残值(residualValue)、折旧周期(depreciationPeriodMonths)、资产入账时间(assetEntryDate) | 原型新增(中闽资产/折旧视角);核验(限对比表列名+注释):无此字段 | +| 车辆 | 车管 | 不存在 | 存在 | —(不存在) | 车管(vehicleManagerName) | 运八无;物流云 ts_vehicle.vehicle_leader_name 有;核验(限对比表列名+注释):无此字段 | +| 车辆 | 运行状态/停运原因 | 不存在 | 存在 | —(不存在) | 运行状态(transportStatus)、停运原因(suspensionReason) | 原型新增(中闽运力状态);核验(限对比表列名+注释):无此字段 | +| 车辆 | 档案齐全标记 | 不存在 | 存在 | —(不存在) | 档案齐全(documentsComplete) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 车辆 | 所属主体/所属租户 | 不存在 | 存在 | —(不存在) | 所属主体(ownerSubjectId)、所属租户(ownerTenantId) | 原型新增(多主体归属);核验(限对比表列名+注释):无此字段 | + +### 平台职责·不补(67 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 账户余额 | 存在 | — | `base_driver.balance`(100%)·账户余额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 保证金 | 存在 | — | `base_driver.bond`(100%)·保证金 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 电卡余额 | 存在 | — | `base_driver_ext.electricity_card`(100%)·电卡余额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | etc | 存在 | — | `base_driver.etc`(100%)·etc | — | 运八数据库字段,不补(运八侧) | +| 司机 | 冻结金额 | 存在 | — | `base_driver.freezing_amount`(100%)·冻结金额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 来源于彩虹糖0否1是 | 存在 | — | `base_driver.from_rainbow`(100%)·来源于彩虹糖0否1是 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 气卡余额 | 存在 | — | `base_driver_ext.gas_card`(100%)·气卡余额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 光大账户余额 | 存在 | — | `base_driver.gd_balance`(100%)·光大账户余额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 快钱账户余额 | 存在 | — | `base_driver.hat_balance`(100%)·快钱账户余额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否上报安徽网络货运省平台 | 存在 | — | `base_driver_ext.is_send_ah_logink`(100%)·是否上报安徽网络货运省平台 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否上报网络货运省平台 | 存在 | — | `base_driver.is_send_logink`(100%)·是否上报网络货运省平台、`base_driver_ext.is_send_logink`(100%)·是否上报网络货运省平台 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否上报税务平台 | 存在 | — | `base_driver.is_send_tax`(100%)·是否上报税务平台、`base_driver_ext.is_send_tax`(100%)·是否上报税务平台 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否上报中联。0-否 | 存在 | — | `base_driver_ext.is_send_zhong_lian`(100%)·是否上报中联。0-否 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否清分,0否 | 存在 | — | `base_driver.is_share`(100%)·是否清分,0否 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否签约 | 存在 | — | `base_driver.is_sign_dyt`(100%)·是否签约 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 是否签署快企点协议 1是 0否 | 存在 | — | `base_driver.is_sign_kqd`(100%)·是否签署快企点协议 1是 0否 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 满货达个体承运人上传状态 | 存在 | — | `base_driver.mhd_carrier_status`(100%)·满货达个体承运人上传状态 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 满货达司机状态 | 存在 | — | `base_driver.mhd_driver_status`(100%)·满货达司机状态 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 油卡点数 | 存在 | — | `base_driver.oil_card`(100%)·油卡点数、`base_driver_ext.oil_card`(64%)·油卡余额 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 清分比率 | 存在 | — | `base_driver.share_ratio`(100%)·清分比率 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 信用凭证余额 | 存在 | — | `base_driver.szwl_credit_balance`(100%)·信用凭证余额 | — | 平台职责,不补(运八侧) | +| 司机 | 信用流转开通状态 | 存在 | — | `base_driver.szwl_credit_status`(100%)·信用流转开通状态 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 三十六匠上传状态 | 存在 | — | `base_driver.thirty_six_status`(100%)·三十六匠上传状态 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 滇运通司机状态 | 存在 | — | `base_driver.dyt_driver_status`(100%)·滇运通司机状态 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 滇运通个体承运人上传状态 | 存在 | — | `base_driver.dyt_carrier_status`(100%)·滇运通个体承运人上传状态 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 高德地图服务ID | 存在 | — | `base_driver.amap_sid`(86%)·高德地图服务ID | — | 运八数据库字段,不补(运八侧) | +| 司机 | 高德地图终端ID | 存在 | — | `base_driver.amap_tid`(86%)·高德地图终端ID | — | 运八数据库字段,不补(运八侧) | +| 司机 | 高德地图轨迹ID | 存在 | — | `base_driver.amap_trid`(86%)·高德地图轨迹ID | — | 运八数据库字段,不补(运八侧) | +| 司机 | 网络货运上报失败信息 | 存在 | — | `base_driver_ext.send_error`(65%)·网络货运上报失败信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 安徽网络货运上报失败信息 | 存在 | — | `base_driver_ext.ah_send_error`(54%)·安徽网络货运上报失败信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 滇运通司机上传时间 | 存在 | — | `base_driver.dyt_driver_time`(53%)·滇运通司机上传时间 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 滇运通司机上传信息 | 存在 | — | `base_driver.dyt_driver_message`(53%)·滇运通司机上传信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 滇运通个体承运人上传信息 | 存在 | — | `base_driver.dyt_carrier_message`(45%)·滇运通个体承运人上传信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 滇运通个体承运人上传时间 | 存在 | — | `base_driver.dyt_carrier_time`(45%)·滇运通个体承运人上传时间 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 三十六匠上传信息 | 存在 | — | `base_driver.thirty_six_message`(25%)·三十六匠上传信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 三十六匠上传时间 | 存在 | — | `base_driver.thirty_six_time`(25%)·三十六匠上传时间 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 信用流转开通结果信息 | 存在 | — | `base_driver.szwl_credit_msg`(25%)·信用流转开通结果信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 蚂蚁数字物流区块链Did | 存在 | — | `base_driver.szwl_did`(25%)·蚂蚁数字物流区块链Did | — | 运八数据库字段,不补(运八侧) | +| 司机 | 中联上传结果 | 存在 | — | `base_driver_ext.zhong_lian_err_msg`(13%)·中联上传结果 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 满货达个体承运人上传信息 | 存在 | — | `base_driver.mhd_carrier_message`(10%)·满货达个体承运人上传信息 | — | 平台职责,不补(运八侧) | +| 司机 | 满货达个体承运人上传时间 | 存在 | — | `base_driver.mhd_carrier_time`(10%)·满货达个体承运人上传时间 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 满货达司机上传信息 | 存在 | — | `base_driver.mhd_driver_message`(10%)·满货达司机上传信息 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 满货达司机上传时间 | 存在 | — | `base_driver.mhd_driver_time`(10%)·满货达司机上传时间 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 签约时间 | 存在 | — | `base_driver.sign_time`(4%)·签约时间 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 加油比例 | 存在 | — | `base_driver.refuel_proportion`(2%)·加油比例 | — | 运八数据库字段,不补(运八侧) | +| 司机 | 光大余额变动时间 | 存在 | — | `base_driver.balance_gmt_modified`(1%)·光大余额变动时间 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | ETC备案 | 存在 | — | `base_vehicle.etc_status`(100%)·ETC备案、`base_vehicle_ext.etc_status`(100%)·ETC备案 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 来源于彩虹糖0否1是 | 存在 | — | `base_vehicle.from_rainbow`(100%)·来源于彩虹糖0否1是 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 是否上报安徽。0-否 | 存在 | — | `base_vehicle_ext.is_send_ah`(100%)·是否上报安徽。0-否 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 是否上报网络货运省平台 | 存在 | — | `base_vehicle.is_send_logink`(100%)·是否上报网络货运省平台、`base_vehicle_ext.is_send_logink`(100%)·是否上报网络货运省平台 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 挂车是否已经上报到省监管平台:0=否 | 存在 | — | `base_vehicle_ext.is_send_trailer`(100%)·挂车是否已经上报到省监管平台:0=否 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 是否上报中联。0-否 | 存在 | — | `base_vehicle_ext.is_send_zhong_lian`(100%)·是否上报中联。0-否 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 是否上报到省平台 0否 1是 | 存在 | — | `base_vehicle.send_logink`(100%)·是否上报到省平台 0否 1是 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 三十六匠上传状态 | 存在 | — | `base_vehicle.thirty_six_status`(100%)·三十六匠上传状态 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 滇运通车辆上报状态 | 存在 | — | `base_vehicle.dyt_vehicle_status`(99%)·滇运通车辆上报状态 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 能源卡类型 | 存在 | — | `base_vehicle_ext.energy_card_type`(86%)·能源卡类型 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 网络货运上报失败信息 | 存在 | — | `base_vehicle_ext.send_error`(72%)·网络货运上报失败信息 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 安徽上传结果 | 存在 | — | `base_vehicle_ext.ah_err_msg`(59%)·安徽上传结果 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 滇运通车辆上报信息 | 存在 | — | `base_vehicle.dyt_vehicle_message`(28%)·滇运通车辆上报信息 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 滇运通车辆上报时间 | 存在 | — | `base_vehicle.dyt_vehicle_time`(28%)·滇运通车辆上报时间 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 三十六匠上传信息 | 存在 | — | `base_vehicle.thirty_six_message`(24%)·三十六匠上传信息 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 三十六匠上传时间 | 存在 | — | `base_vehicle.thirty_six_time`(24%)·三十六匠上传时间 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 中联上传结果 | 存在 | — | `base_vehicle_ext.zhong_lian_err_msg`(14%)·中联上传结果 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 满货达车辆上报信息 | 存在 | — | `base_vehicle.mhd_vehicle_message`(10%)·满货达车辆上报信息 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 满货达车辆上报状态 | 存在 | — | `base_vehicle.mhd_vehicle_status`(10%)·满货达车辆上报状态 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 满货达车辆上报时间 | 存在 | — | `base_vehicle.mhd_vehicle_time`(10%)·满货达车辆上报时间 | — | 运八数据库字段,不补(运八侧) | +| 车辆 | 好运宝设备号 | 存在 | — | `base_vehicle.device`(1%)·好运宝设备号 | — | 运八数据库字段,不补(运八侧) | + +### 系统字段(21 项) + +| 类别 | 字段语义 | 运八侧 | 原型侧 | 运八侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 机构编码 | 存在 | — | `base_driver.branch_code`(100%)·机构编码、`base_driver_ext.branch_code`(100%)·机构编码 | — | 系统字段,无需处理 | +| 司机 | UUID | 存在 | — | `base_driver.code`(100%)·UUID、`base_driver_ext.code`(100%)·UUID | — | 系统字段,无需处理 | +| 司机 | 创建人 | 存在 | — | `base_driver.created_by`(100%)·创建人、`base_driver_ext.created_by`(100%)·创建者 | — | 系统字段,无需处理 | +| 司机 | 司机编码 | 存在 | — | `base_driver_ext.driver_code`(100%)·司机编码 | — | 系统字段,无需处理 | +| 司机 | 创建时间 | 存在 | — | `base_driver.gmt_created`(100%)·创建时间、`base_driver_ext.gmt_created`(100%)·创建时间 | — | 系统字段,无需处理 | +| 司机 | 修改时间 | 存在 | — | `base_driver.gmt_modified`(100%)·修改时间、`base_driver_ext.gmt_modified`(100%)·更新时间 | — | 系统字段,无需处理 | +| 司机 | 主键 | 存在 | — | `base_driver.id`(100%)、`base_driver_ext.id`(100%) | — | 系统字段,无需处理 | +| 司机 | 默认0正常 | 存在 | — | `base_driver.is_deleted`(100%)·默认0正常、`base_driver_ext.is_deleted`(100%)·删除标记 0 未删除 1 已删除 | — | 系统字段,无需处理 | +| 司机 | 修改人 | 存在 | — | `base_driver.modified_by`(100%)·修改人、`base_driver_ext.modified_by`(66%)·更新者 | — | 系统字段,无需处理 | +| 司机 | 数据来源 | 存在 | — | `base_driver.data_from`(4%)·数据来源 | — | 系统字段,无需处理 | +| 车辆 | 公司编码 | 存在 | — | `base_vehicle.branch_code`(100%)·公司编码、`base_vehicle_ext.branch_code`(100%)·机构编码 | — | 系统字段,无需处理 | +| 车辆 | UUID | 存在 | — | `base_vehicle.code`(100%)·UUID、`base_vehicle_ext.code`(100%)·UUID | — | 系统字段,无需处理 | +| 车辆 | 创建者 | 存在 | — | `base_vehicle.created_by`(100%)、`base_vehicle_ext.created_by`(100%)·创建者 | — | 系统字段,无需处理 | +| 车辆 | 创建时间 | 存在 | — | `base_vehicle.gmt_created`(100%)、`base_vehicle_ext.gmt_created`(100%)·创建时间 | — | 系统字段,无需处理 | +| 车辆 | 更新时间 | 存在 | — | `base_vehicle.gmt_modified`(100%)、`base_vehicle_ext.gmt_modified`(100%)·更新时间 | — | 系统字段,无需处理 | +| 车辆 | 主键 | 存在 | — | `base_vehicle.id`(100%)、`base_vehicle_ext.id`(100%) | — | 系统字段,无需处理 | +| 车辆 | 默认0正常 | 存在 | — | `base_vehicle.is_deleted`(100%)·默认0正常、`base_vehicle_ext.is_deleted`(100%)·删除标记 0 未删除 1 已删除 | — | 系统字段,无需处理 | +| 车辆 | 更新者 | 存在 | — | `base_vehicle.modified_by`(100%)、`base_vehicle_ext.modified_by`(87%)·更新者 | — | 系统字段,无需处理 | +| 车辆 | 车辆Code | 存在 | — | `base_vehicle_ext.vehicle_code`(100%)·车辆Code | — | 系统字段,无需处理 | +| 车辆 | 数据来源 | 存在 | — | `base_vehicle.data_from`(4%)·数据来源 | — | 系统字段,无需处理 | +| 车辆 | 货源单号 | 存在 | — | `base_vehicle.main_order_number`(1%)·货源单号 | — | 系统字段,无需处理 | + +## 表二:物流云 × 原型 字段名对比(独立校验) + +### 两边都有·直接映射(49 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 认证状态 | 存在 | 存在 | `ts_driver.auth_status`(100%)·认证状态、`nts_driver.auth_status`(100%)·认证状态 | 状态(status)【◇仅代码定义】 | 直接映射 | +| 司机 | 司机属性,0:自有,1 | 存在 | 存在 | `ts_driver.diver_attribute`(100%)·司机属性,0:自有,1、`nts_driver.diver_attribute`(100%)·司机属性,0:自有,1 | 司机性质(driverProperty·映射)【✓页面验证】 | 直接映射 | +| 司机 | 身份证到期日期 | 存在 | 存在 | `nts_driver.id_card_due_date`(100%)·身份证到期日期、`ts_driver.id_card_due_date`(99%)·身份证到期日期 | 身份证有效期(identityExpiry)【✓页面验证】 | 直接映射 | +| 司机 | 身份证号 | 存在 | 存在 | `ts_driver.identification_number`(100%)·身份证号、`nts_driver.identification_number`(100%)·身份证号 | 身份证号(identityMasked)【✓页面验证】 | 直接映射 | +| 司机 | 驾驶员姓名 | 存在 | 存在 | `ts_driver.name`(100%)·驾驶员姓名、`nts_driver.name`(100%)·驾驶员姓名 | 司机姓名(displayName)【✓页面验证】 | 直接映射 | +| 司机 | 驾驶员联系电话 | 存在 | 存在 | `ts_driver.phone`(100%)·驾驶员联系电话、`nts_driver.phone`(100%)·驾驶员联系电话 | 手机号(mobileMasked)【✓页面验证】 | 直接映射 | +| 司机 | 司机身份证反面照片 | 存在 | 存在 | `ts_driver.identification_back_img_id`(100%)·司机身份证反面照片、`nts_driver.identification_back_img_id`(50%)·司机身份证反面照片 | 身份证反面(证件槽) | 存量补采(物流云侧证件影像) | +| 司机 | 司机身份证正面照片 | 存在 | 存在 | `ts_driver.identification_img_id`(100%)·司机身份证正面照片、`nts_driver.identification_img_id`(50%)·司机身份证正面照片 | 身份证正面(证件槽) | 存量补采(物流云侧证件影像) | +| 司机 | 驾驶证发证机关 | 存在 | 存在 | `nts_driver.driver_issuing_organization`(50%)·驾驶证发证机关、`ts_driver.driver_issuing_organization`(1行)·驾驶证发证机关 | 发证机关(issuingAuthority)【✓页面验证】 | 直接映射 | +| 司机 | 机动车驾驶证号 | 存在 | 存在 | `nts_driver.driver_license`(50%)·机动车驾驶证号、`ts_driver.driver_license`(1行)·机动车驾驶证号 | 驾驶证号(driverLicenseNoMasked)【✓页面验证】 | 直接映射 | +| 司机 | 驾驶证有效期开始日期 | 存在 | 存在 | `nts_driver.driver_license_from_date_begin`(50%)·驾驶证有效期开始日期 | 驾驶证生效(licenseValidFrom)【✓页面验证】 | 直接映射 | +| 司机 | 驾驶证有效期结束日期 | 存在 | 存在 | `nts_driver.driver_license_from_date_end`(50%)·驾驶证有效期结束日期 | 驾驶证到期(licenseExpiry)【✓页面验证】 | 直接映射 | +| 司机 | 准驾车型 | 存在 | 存在 | `nts_driver.vehicle_class`(50%)·准驾车型 | 准驾车型(licenseClass)【✓页面验证】 | 直接映射 | +| 司机 | 道路运输从业资格证号 | 存在 | 存在 | `nts_driver.work_license`(50%)·道路运输从业资格证号、`ts_driver.work_license`(1行)·道路运输从业资格证号 | 从业资格证号(qualificationNoMasked)【✓页面验证】 | 直接映射 | +| 司机 | 道路运输从业资格证号照片 | 存在 | 存在 | `ts_driver.work_license_img_id`(30%)·道路运输从业资格证号照片 | 从业资格证(证件槽) | 存量补采(物流云侧证件影像) | +| 司机 | 司机驾驶证照片 | 存在 | 存在 | `ts_driver.driver_license_img_id`(29%)·司机驾驶证照片 | 驾驶证(证件槽) | 存量补采(物流云侧证件影像) | +| 司机 | 车队长姓名 | 存在 | 存在 | `ts_driver.driver_leader_name`(24%)·车队长姓名 | 车队长(fleetLeaderName)【✓页面验证】 | 直接映射 | +| 司机 | 详细地址 | 存在 | 存在 | `ts_driver.detailed_address`(1行)·详细地址 | 联系地址(address)【✓页面验证】 | 直接映射 | +| 车辆 | 审核状态,0:待审核,1:通过,-1:不通过 | 存在 | 存在 | `ts_trailer.audit_state`(100%)·审核状态,0:待审核,1:通过,-1:不通过、`nts_vehicle.audit_state`(100%)·审核状态,0:待审核,1:通过,-1:不通过、`ts_vehicle.audit_state`(70%)·审核状态,0:待审核,1:通过,-1:不通过 | 状态(status)【◇仅代码定义】 | 直接映射 | +| 车辆 | 空载状态 1-是 | 存在 | 存在 | `ts_vehicle.empty_state`(100%)·空载状态 1-是 | 空重状态(emptyLoadStatus)【◇仅代码定义】 | 直接映射 | +| 车辆 | 启用状态 | 存在 | 存在 | `ts_vehicle.is_enable`(100%)·启用状态、`ts_trailer.is_enable`(100%)·启用状态 | 启用状态(enableStatus)【✓页面验证】 | 直接映射 | +| 车辆 | 是否挂车 | 存在 | 存在 | `ts_vehicle.is_has_trailer`(100%)·是否挂车、`nts_vehicle.is_has_trailer`(100%)·是否挂车:true有 | 可牵引挂车(hasTrailerFlag)【✓页面验证】 | 直接映射 | +| 车辆 | 车牌号码 | 存在 | 存在 | `ts_vehicle.license_number`(100%)·车牌号码、`nts_vehicle.license_number`(100%)·车牌号码 | 车牌(plateDisplay)【✓页面验证】 | 直接映射 | +| 车辆 | 道路运输证照片Id | 存在 | 存在 | `nts_vehicle.road_permit_img_id`(100%)·道路运输证照片Id、`ts_vehicle.road_permit_img_id`(3%)·道路运输证照片Id | 道路运输证影像槽 | 存量补采(物流云侧证件影像) | +| 车辆 | 道路运输证到期日期 | 存在 | 存在 | `nts_vehicle.road_transport_certificate_date`(100%)·道路运输证到期日期、`ts_vehicle.road_transport_certificate_date`(3%)·道路运输证到期日期 | 道路运输证到期(roadPermitExpiry)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车车牌颜色 | 存在 | 存在 | `ts_trailer.trailer_license_plate_color`(100%)·挂车车牌颜色、`ts_vehicle.trailer_license_plate_color`(2%)·挂车车牌颜色 | 挂车档案车牌颜色(plateColor·映射)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车车牌号 | 存在 | 存在 | `ts_trailer.trailer_num`(100%)·挂车车牌号、`nts_vehicle.trailer_num`(79%)·挂车车牌号、`ts_vehicle.trailer_num`(2%)·挂车车牌号 | 挂车档案车牌(plateDisplay)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆属性 1-自有车辆 | 存在 | 存在 | `ts_vehicle.vehicle_attributes`(100%)·车辆属性 1-自有车辆、`nts_vehicle.vehicle_attributes`(100%)·车辆属性 1-自有车辆 | 权属属性(ownershipType·映射)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆行驶证正面照片Id | 存在 | 存在 | `nts_vehicle.vehicle_license_img1_id`(100%)·车辆行驶证正面照片Id、`ts_vehicle.vehicle_license_img1_id`(3%)·车辆行驶证正面照片Id | 行驶证正页(证件槽) | 存量补采(物流云侧证件影像) | +| 车辆 | 车辆行驶证反面照片Id | 存在 | 存在 | `nts_vehicle.vehicle_license_img2_id`(100%)·车辆行驶证反面照片Id、`ts_vehicle.vehicle_license_img2_id`(3%)·车辆行驶证反面照片Id | 行驶证副页(证件槽) | 存量补采(物流云侧证件影像) | +| 车辆 | 车牌颜色 | 存在 | 存在 | `ts_vehicle.vehicle_number_color`(100%)·车牌颜色、`nts_vehicle.vehicle_number_color`(100%)·车牌颜色 | 车牌颜色(plateColor·代码映射)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆所属单位名称 | 存在 | 存在 | `ts_vehicle.vehicle_dep_name`(93%)·车辆所属单位名称 | 车主单位(ownerCompanyName)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车行驶证正面照片Id | 存在 | 存在 | `nts_vehicle.trailer_license_img1_id`(79%)·挂车行驶证正面照片Id、`ts_vehicle.trailer_license_img1_id`(1%)·挂车行驶证正面照片Id、`ts_trailer.trailer_license_img1_id`(0%)·挂车行驶证正面照片Id | 挂车档案行驶证正页(槽) | 直接映射 | +| 车辆 | 🔒挂车行驶证反面照片Id | 存在 | 存在 | `nts_vehicle.trailer_license_img2_id`(79%)·挂车行驶证反面照片Id、`ts_vehicle.trailer_license_img2_id`(1%)·挂车行驶证反面照片Id、`ts_trailer.trailer_license_img2_id`(0%)·挂车行驶证反面照片Id | 挂车档案行驶证副页(槽) | 直接映射 | +| 车辆 | 🔒挂车道路运输证照片Id | 存在 | 存在 | `nts_vehicle.trailer_road_permit_id`(79%)·挂车道路运输证照片Id、`ts_vehicle.trailer_road_permit_id`(1%)·挂车道路运输证照片Id | 挂车档案道路运输证影像(槽) | 直接映射 | +| 车辆 | 车管名称 | 存在 | 存在 | `ts_vehicle.vehicle_leader_name`(72%)·车管名称 | 车管(vehicleManagerName)【✓页面验证】 | 直接映射 | +| 车辆 | 车高(mm) | 存在 | 存在 | `nts_vehicle.height`(57%)·车高(mm) | 车高(vehicleHeightMm)【✓页面验证】 | 直接映射 | +| 车辆 | 车长(mm) | 存在 | 存在 | `nts_vehicle.length`(57%)·车长(mm) | 车长(vehicleLengthMm)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆道路运输证号 | 存在 | 存在 | `nts_vehicle.road_transport_certificate_number`(57%)·车辆道路运输证号、`ts_vehicle.road_transport_certificate_number`(1%)·车辆道路运输证号 | 道路运输证号(roadPermitNoMasked)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆使用性质 | 存在 | 存在 | `nts_vehicle.use_character`(57%)·车辆使用性质 | 使用性质(useNature)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆类型 | 存在 | 存在 | `nts_vehicle.vehicle_type`(57%)·车辆类型、`ts_vehicle.vehicle_type`(0%)·车辆类型 | 车辆类型(vehicleType)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆识别码VIN | 存在 | 存在 | `nts_vehicle.vin`(57%)·车辆识别码VIN | 车辆识别代号(vinMasked)【✓页面验证】 | 直接映射 | +| 车辆 | 车宽(mm) | 存在 | 存在 | `nts_vehicle.width`(57%)·车宽(mm) | 车宽(vehicleWidthMm)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车车辆类型 | 存在 | 存在 | `nts_vehicle.trailer_classification_code`(50%)·挂车车辆类型 | 挂车档案车辆类型(vehicleType·映射)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车核定载质量 | 存在 | 存在 | `nts_vehicle.trailer_load_weight`(50%)·挂车核定载质量 | 挂车档案核定载重(ratedLoadQuantity)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车道路运输证号 | 存在 | 存在 | `nts_vehicle.trailer_road_transport`(50%)·挂车道路运输证号 | 挂车档案道路运输证号(roadPermitNoMasked)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车车牌类型 | 存在 | 存在 | `nts_vehicle.trailer_license_color`(29%)·挂车车牌类型 | 挂车档案车牌颜色(plateColor·映射)【✓页面验证】 | 直接映射 | +| 车辆 | 车辆行驶证到期日期 | 存在 | 存在 | `ts_vehicle.vehicle_driving_license_expiration_date`(3%)·车辆行驶证到期日期 | 行驶证到期(annualInspectionExpiry)【✓页面验证】 | 直接映射 | +| 车辆 | 🔒挂车道路运输证到期日期 | 存在 | 存在 | `ts_vehicle.trailer_road_transport_certificate_expire_date`(1%)·挂车道路运输证到期日期 | 挂车档案道路运输证到期(roadPermitExpiry)【✓页面验证】 | 直接映射 | + +### 两边都有·需映射(20 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 企业id | 存在 | 存在 | `ts_driver.enterprise_id`(100%)·企业id | 组织/主体 | 需映射/口径确认 | +| 司机 | 是否已激活 | 存在 | 存在 | `ts_driver.is_activation`(100%)·是否已激活、`nts_driver.is_activation`(100%)·是否已激活 | APP账号状态(appAccountStatus)【✓页面验证】 | 需映射/口径确认 | +| 司机 | 使用数据模式,0:全组织机构,1 | 存在 | 存在 | `ts_driver.org_data_used_mode`(100%)·使用数据模式,0:全组织机构,1 | 数据范围 | 需映射/口径确认 | +| 司机 | 组织id | 存在 | 存在 | `ts_driver.org_id`(100%)·组织id | 组织 | 需映射/口径确认 | +| 司机 | 用户id | 存在 | 存在 | `ts_driver.user_id`(100%)·用户id、`nts_driver.user_id`(50%)·用户id | APP账号状态(appAccountStatus)间接【✓页面验证】 | 需映射/口径确认 | +| 司机 | 认证失败消息 | 存在 | 存在 | `nts_driver.auth_failure_message`(50%)·认证失败消息 | 审核信息 | 需映射/口径确认 | +| 司机 | 认证时间 | 存在 | 存在 | `nts_driver.auth_time`(50%)·认证时间 | 审核时间 | 需映射/口径确认 | +| 司机 | 创建组织id | 存在 | 存在 | `ts_driver.create_org_id`(41%)·创建组织id | 组织 | 需映射/口径确认 | +| 司机 | 创建组织名称 | 存在 | 存在 | `ts_driver.create_org_name`(41%)·创建组织名称 | 组织 | 需映射/口径确认 | +| 司机 | 组织名称 | 存在 | 存在 | `ts_driver.org_name`(40%)·组织名称 | 组织 | 需映射/口径确认 | +| 司机 | 车队长id | 存在 | 存在 | `ts_driver.driver_leader_id`(24%)·车队长id | 车队长ID | 需映射/口径确认 | +| 车辆 | 创建组织id | 存在 | 存在 | `ts_trailer.create_org_id`(100%)·创建组织id、`ts_vehicle.create_org_id`(97%)·创建组织id | 组织 | 需映射/口径确认 | +| 车辆 | 创建组织名称 | 存在 | 存在 | `ts_trailer.create_org_name`(100%)·创建组织名称、`ts_vehicle.create_org_name`(97%)·创建组织名称 | 组织 | 需映射/口径确认 | +| 车辆 | 企业id | 存在 | 存在 | `ts_vehicle.enterprise_id`(100%)·企业id、`ts_trailer.enterprise_id`(100%)·企业id | 组织/主体 | 需映射/口径确认 | +| 车辆 | 使用数据模式,0:全组织机构,1 | 存在 | 存在 | `ts_vehicle.org_data_used_mode`(100%)·使用数据模式,0:全组织机构,1、`ts_trailer.org_data_used_mode`(100%)·使用数据模式,0:全组织机构,1 | 数据范围 | 需映射/口径确认 | +| 车辆 | 组织id | 存在 | 存在 | `ts_vehicle.org_id`(100%)·组织id、`ts_trailer.org_id`(100%)·组织id | 组织 | 需映射/口径确认 | +| 车辆 | 所属组织名称 | 存在 | 存在 | `ts_trailer.org_name`(100%)·所属组织名称、`ts_vehicle.org_name`(98%)·所属组织名称 | 车主单位 | 需映射/口径确认 | +| 车辆 | 审核备注 | 存在 | 存在 | `nts_vehicle.audit_remark`(93%)·审核备注 | 审核信息 | 需映射/口径确认 | +| 车辆 | 车辆照片 | 存在 | 存在 | `nts_vehicle.vehicle_img_id`(57%)·车辆照片 | 通用附件 | 需映射/口径确认 | +| 车辆 | 道路许可证到期日期 | 存在 | 存在 | `nts_vehicle.vehicle_license_due_date`(29%)·道路许可证到期日期 | 许可证到期口径并存 | 需映射/口径确认 | + + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| + +### 两边都有·用户已确认映射(5 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 车辆 | 核定载质量 | 存在 | 存在 | `nts_vehicle.load_weight`(57%)·核定载质量 | 已确认: 核定载重(ratedLoadQuantity)【用户已确认】 | 用户已确认映射 | +| 车辆 | 车辆所有人 | 存在 | 存在 | `nts_vehicle.owner`(57%)·车辆所有人、`ts_vehicle.owner`(2%)·车辆所有人 | 已确认: 所属主体(ownerCompanyName)【用户已确认】 | 用户已确认映射 | +| 车辆 | 车辆能源类型 | 存在 | 存在 | `nts_vehicle.vehicle_energy_type`(57%)·车辆能源类型 | 已确认: 能源类型(energyType)【用户已确认】 | 用户已确认映射 | +| 车辆 | 道路运输证号 | 存在 | 存在 | `nts_vehicle.road_permit_number`(29%)·道路运输证号 | 已确认: 道路运输证号(roadPermitNoMasked)【用户已确认】 | 用户已确认映射 | +| 车辆 | 车辆颜色 | 存在 | 存在 | `nts_vehicle.vehicle_license_color`(29%)·车辆颜色 | 已确认: 车牌颜色(plateColor)【用户已确认】 | 用户已确认映射 | + +### 物流云有·原型无(24 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 车辆 | 车辆是否挂靠 | 存在 | 不存在 | `nts_vehicle.is_linked`(93%)·车辆是否挂靠、`ts_vehicle.is_linked`(73%)·车辆是否挂靠 | — | 原型无对应字段 | +| 车辆 | 车辆分类代码 | 存在 | 不存在 | `nts_vehicle.classification_code`(29%)·车辆分类代码 | — | 原型无对应字段 | + +| 司机 | 是否可以取消接单 | 存在 | 不存在 | `ts_driver.is_cancel_waybill`(100%)·是否可以取消接单 | 可取消订单(cancelOrderAllowed)【◇仅代码定义】 | 原型无对应字段 | +| 司机 | 是否显示运输费用 | 存在 | 不存在 | `ts_driver.is_show_expenses`(100%)·是否显示运输费用 | 可查看运费(freightVisible)【◇仅代码定义】 | 原型无对应字段 | +| 司机 | 是否使用所有车辆 | 存在 | 不存在 | `ts_driver.is_ues_all_vehicle`(100%)·是否使用所有车辆 | 可使用全部车辆(allVehicleAccess)【◇仅代码定义】 | 原型无对应字段 | +| 车辆 | 车管id | 存在 | 不存在 | `ts_vehicle.vehicle_leader_id`(70%)·车管id | 车管ID | 原型无对应字段 | +| 车辆 | 🔒挂车道路运输证到期日期照片Id | 存在 | 不存在 | `ts_vehicle.trailer_road_transport_certificate_expire_date_photo_id`(1%)·挂车道路运输证到期日期照片Id | 到期照片 | 原型无对应字段 | + +| 司机 | 驾驶证是否长期有效 | 存在 | 不存在 | `ts_driver.is_long_term_driver_license`(100%)·驾驶证是否长期有效、`nts_driver.is_long_term_driver_license`(100%)·驾驶证是否长期有效 | — | 原型找回:驾驶证长期有效(ts 100%填充) | +| 司机 | 网货签约状态 | 存在 | 不存在 | `ts_driver.signed_status`(100%)·网货签约状态、`nts_driver.signed_status`(100%)·网货签约状态 | — | 不补:签约职能属网货平台侧;nts 层保留 | +| 司机 | 微信小程序openId | 存在 | 不存在 | `nts_driver.we_chat_open_id`(100%)·微信小程序openId | — | 不补:对接通道字段 | +| 司机 | 工作单位 | 存在 | 不存在 | `ts_driver.work_company`(0%)·工作单位 | — | 不补:车队体系另建 | +| 车辆 | 总质量是否大于4.5吨 | 存在 | 不存在 | `ts_vehicle.total_quality`(100%)·总质量是否大于4.5吨 | — | 原型找回:>4.5吨判定标记(ts 100%填充) | +| 车辆 | 车辆行驶证发证日期 | 存在 | 不存在 | `nts_vehicle.issue_date`(57%)·车辆行驶证发证日期 | — | 原型补:行驶证注册/发证日期 | +| 车辆 | 车辆行驶证发证机关 | 存在 | 不存在 | `nts_vehicle.issuing_organizations`(57%)·车辆行驶证发证机关 | — | 原型补:行驶证发证机关 | +| 车辆 | 车辆行驶证注册日期 | 存在 | 不存在 | `nts_vehicle.register_date`(57%)·车辆行驶证注册日期 | — | 原型补:行驶证注册/发证日期 | +| 车辆 | 道路运输证业户名称 | 存在 | 不存在 | `nts_vehicle.road_permit_name`(57%)·道路运输证业户名称 | — | 建议补:经营许可证业户信息 | +| 车辆 | 车辆总重量 | 存在 | 不存在 | `nts_vehicle.total_weight`(57%)·车辆总重量 | — | 原型补:治超判定组 | +| 车辆 | 🔒挂车总质量 | 存在 | 不存在 | `nts_vehicle.trailer_total_weight`(50%)·挂车总质量 | — | 原型补:挂车总质量 | +| 车辆 | 车辆行驶证号 | 存在 | 不存在 | `nts_vehicle.vehicle_license`(29%)·车辆行驶证号 | — | 原型补:行驶证号 | +| 车辆 | 道路运输证年审凭证照片 | 存在 | 不存在 | `ts_vehicle.road_transport_annual_review_img_id`(3%)·道路运输证年审凭证照片 | — | 低填充,可后补 | +| 车辆 | 道路经营许可证业户名称 | 存在 | 不存在 | `ts_vehicle.road_operation_permit_holders_name`(1%)·道路经营许可证业户名称 | — | 低填充,可后补 | +| 车辆 | 车辆行驶证档案编号 | 存在 | 不存在 | `ts_vehicle.vehicle_driving_license_file_number`(1%)·车辆行驶证档案编号 | — | 低填充,可后补 | +| 车辆 | 🔒挂车道路运输证年审凭证照片 | 存在 | 不存在 | `ts_vehicle.trailer_road_transport_annual_review_img_id`(1%)·挂车道路运输证年审凭证照片 | — | 评估补齐(见04 A/B/C 级) | +| 车辆 | 🔒挂车ID | 存在 | 不存在 | `ts_vehicle.trailer_id`(1%)·挂车ID | — | 评估补齐(低填充) | + +### 原型有·物流云无(10 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 紧急联系人 | 不存在 | 存在 | —(不存在) | 紧急联系人(emergencyContact) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 司机 | 从业资格有效起始日期 | 不存在 | 存在 | —(不存在) | 从业资格有效起始日期(qualificationValidFrom) | 原型新增(两库只有到期日);核验(限对比表列名+注释):无"起始日期"字段,仅有到期日(对照中已体现) | +| 司机 | 从业资格核发机关 | 不存在 | 存在 | —(不存在) | 从业资格核发机关(qualificationIssuingAuthority) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 司机 | 维护方式 | 不存在 | 存在 | —(不存在) | 维护方式(maintenanceMode) | 原型新增(中闽维保视角);核验(限对比表列名+注释):无此字段 | +| 司机 | 体检报告/毒检证明/无犯罪证明(证件槽) | 不存在 | 存在 | —(不存在) | 体检报告、毒检证明、无犯罪证明、其他(均为页面证件槽) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 车辆 | 保险到期 | 不存在 | 存在 | —(不存在) | 保险到期(insuranceExpiry) | 原型新增(生产库无对应主表字段);核验(限对比表列名+注释):无此字段 | +| 车辆 | 购买日期/资产价值/残值/折旧周期/资产入账时间 | 不存在 | 存在 | —(不存在) | 购买日期(purchaseDate)、资产价值(assetValue)、残值(residualValue)、折旧周期(depreciationPeriodMonths)、资产入账时间(assetEntryDate) | 原型新增(中闽资产/折旧视角);核验(限对比表列名+注释):无此字段 | +| 车辆 | 运行状态/停运原因 | 不存在 | 存在 | —(不存在) | 运行状态(transportStatus)、停运原因(suspensionReason) | 原型新增(中闽运力状态);核验(限对比表列名+注释):无此字段 | +| 车辆 | 档案齐全标记 | 不存在 | 存在 | —(不存在) | 档案齐全(documentsComplete) | 原型新增;核验(限对比表列名+注释):无此字段 | +| 车辆 | 所属主体/所属租户 | 不存在 | 存在 | —(不存在) | 所属主体(ownerSubjectId)、所属租户(ownerTenantId) | 原型新增(多主体归属);核验(限对比表列名+注释):无此字段 | + +### 平台职责·不补(1 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 平台身份Id | 存在 | — | `nts_driver.platform_identity_id`(100%)·平台身份Id | — | 不补:对接通道字段 | + +### 系统字段(18 项) + +| 类别 | 字段语义 | 物流云侧 | 原型侧 | 物流云侧字段(表.字段·填充率·中文名) | 原型侧字段 | 处理建议 | +|---|---|---|---|---|---|---| +| 司机 | 创建时间 | 存在 | — | `ts_driver.create_date`(100%)·创建时间、`nts_driver.create_date`(100%)·创建时间 | — | 系统字段,无需处理 | +| 司机 | 创建用户id | 存在 | — | `ts_driver.create_user_id`(100%)·创建用户id | — | 系统字段,无需处理 | +| 司机 | 创建用户姓名 | 存在 | — | `ts_driver.create_user_name`(100%)·创建用户姓名 | — | 系统字段,无需处理 | +| 司机 | 组id | 存在 | — | `ts_driver.group_id`(100%)·组id、`nts_driver.group_id`(100%)·组id | — | 系统字段,无需处理 | +| 司机 | id主键 | 存在 | — | `ts_driver.id`(100%)·id主键、`nts_driver.id`(100%)·id主键 | — | 系统字段,无需处理 | +| 司机 | 是否删除 | 存在 | — | `ts_driver.is_delete`(100%)·是否删除、`nts_driver.is_delete`(100%)·是否删除 | — | 系统字段,无需处理 | +| 司机 | 最后人姓名 | 存在 | — | `ts_driver.recent_reviser`(100%)·最后人姓名 | — | 系统字段,无需处理 | +| 司机 | 修改时间 | 存在 | — | `ts_driver.update_date`(100%)·修改时间、`nts_driver.update_date`(100%)·修改时间 | — | 系统字段,无需处理 | +| 司机 | 更新用户id | 存在 | — | `ts_driver.update_user_id`(100%)·更新用户id、`nts_driver.update_user_id`(50%)·更新用户id | — | 系统字段,无需处理 | +| 车辆 | 创建时间 | 存在 | — | `ts_vehicle.create_date`(100%)·创建时间、`ts_trailer.create_date`(100%)·创建时间、`nts_vehicle.create_date`(100%)·创建时间 | — | 系统字段,无需处理 | +| 车辆 | 创建用户id | 存在 | — | `ts_vehicle.create_user_id`(100%)·创建用户id、`ts_trailer.create_user_id`(100%)·创建人id | — | 系统字段,无需处理 | +| 车辆 | 创建用户姓名 | 存在 | — | `ts_vehicle.create_user_name`(100%)·创建用户姓名、`ts_trailer.create_user_name`(100%)·创建人姓名 | — | 系统字段,无需处理 | +| 车辆 | 组id | 存在 | — | `ts_vehicle.group_id`(100%)·组id、`ts_trailer.group_id`(100%)·组id、`nts_vehicle.group_id`(100%)·组id | — | 系统字段,无需处理 | +| 车辆 | id主键 | 存在 | — | `ts_vehicle.id`(100%)·id主键、`ts_trailer.id`(100%)·id主键、`nts_vehicle.id`(100%)·id主键 | — | 系统字段,无需处理 | +| 车辆 | 是否删除 | 存在 | — | `ts_vehicle.is_delete`(100%)·是否删除、`ts_trailer.is_delete`(100%)·是否删除、`nts_vehicle.is_delete`(100%)·是否删除 | — | 系统字段,无需处理 | +| 车辆 | 修改时间 | 存在 | — | `ts_vehicle.update_date`(100%)·修改时间、`ts_trailer.update_date`(100%)·修改时间、`nts_vehicle.update_date`(100%)·修改时间 | — | 系统字段,无需处理 | +| 车辆 | 更新用户id | 存在 | — | `ts_vehicle.update_user_id`(100%)·更新用户id、`ts_trailer.update_user_id`(100%)·更新用户Id、`nts_vehicle.update_user_id`(36%)·更新用户id | — | 系统字段,无需处理 | +| 车辆 | 修改用户姓名 | 存在 | — | `ts_vehicle.update_user_name`(100%)·修改用户姓名、`ts_trailer.update_user_name`(100%)·更新用户姓名 | — | 系统字段,无需处理 | + +## 页面验证记录(2026-09-17) + +将原型整站镜像到本地并启动(修复 `__DZH_HTTP_MOCK__` 开关与 `mock-data/` 静态数据集后,静态 Mock 引擎正常加载),用浏览器实测以下页面并提取真实表单字段: + +1. **司机档案·新建司机**:车队与联系方式(所属车队/司机性质/车队长/手机号/联系地址)+ 证件识别 6 槽(身份证正/反面、驾驶证、从业资格证、体检报告选传、其他证件毒检/无犯罪)+ 账号与派车信息(APP账号状态/可派状态/不可派原因/紧急联系人/档案备注)——与代码提取的 editorSchemas 完全一致。 +2. **车头管理·新建车辆**:行驶证正/反面、道路运输证、车辆正面/侧面照、保险凭证、环保清单(国六必传)、归属信息、车牌颜色/能源类型、可牵引挂车/营运车辆、折旧信息——与 editorSchemas 一致。 +3. **车挂管理·新建车辆**:与车头**完全同模板**,页面确认无挂车总质量/准牵引总质量/年审凭证/超牌字段——挂车模型差异成立。 +4. **车辆详情页**:车管人员、当前挂车、运行状态、启用状态、可派状态、权属类型、归属租户、折旧、附件分类均存在;挂靠车辆、空重状态、档案状态未出现。 +5. 原型代码中存在但页面未验证的字段(可使用全部车辆/可查看运费/可取消订单/维护方式/挂靠车辆/空重状态)在表中标【◇仅代码定义】。 + +## 总结 + +**数量分布** + +| 分组 | 运八×原型 | 物流云×原型 | +|---|---|---| +| 两边都有·直接映射 | 37 | 49 | +| 两边都有·用户已确认映射 | 9 | 5 | +| 两边都有·需映射 | 28 | 20 | +| 运八(物流云)有·原型无 | 94 | 24 | +| 原型有·运八(物流云)无 | 11 | 10 | +| 平台职责·不补 | 67 | 1 | +| 系统字段 | 21 | 18 | + +**运八表**:已由业务逐项确认——9 项映射确认(从业资格证起始日期〔库字段 `base_driver.road_transport_effective_date`、注释误写"道路运输证有效期自"〕、身份证正面单槽、可派状态、所属车队、空重状态、核定载重、车牌颜色、所属主体、能源类型),其余待确认项判为"原型不存在";运八侧处理建议以业务修订为准(carrier_code=所属承运人上报开票系统映射值;总质量仍原型补,准牵引/轴数/业户/保险影像/品牌/方量等=运八数据库字段不补;实名核验组=运八承载结论回传;平台职责字段不补)。 + +**物流云表(独立校验,与运八无关)**:物流云生产库 ts_* 即原型直系前身,同源字段为直接映射;业务已将 5 行硬映射改判为"原型不存在"(可取消接单、可查看运费、可使用全部车辆、车管id、挂车道路运输证到期日期照片);业务已确认 5 项映射(核定载重〔kg vs 吨,单位统一〕、所属主体、能源类型、道路运输证号〔road_permit_number 与 road_transport_certificate_number 并存,以 road_permit_number 对接原型〕、车牌颜色,均需代码字典/单位换算);2 项判为"原型不存在"(挂靠车辆〔原型页面未展示〕、车辆分类代码)。 + +**仍需处理**:挂车统一为独立档案并补挂车总质量/准牵引/年审/超牌 4 组(车挂页面同模板、确无这些字段);物流云存量证件补采(ts_driver 证件影像约29%、ts_vehicle 证件字段2.8%)。 + +**对接规则(4 条)** + +1. join 键:手机号+车牌组合,另加 `identification_number` 身份证号强校验。 +2. 代码字典:车牌颜色/车辆分类/能源类型/使用性质/权属,先建映射表再同步(仅限双方确认存在的字段)。 +3. 单位:质量(kg/吨)、尺寸(mm)在接口层统一。 +4. 数据质量前置:运八轴数仅 63.7%、证件空值 10–15%,同步前先跑空值清单(SQL 见 cb_query.py 会话)。 + +--- +*由脚本生成(原型前端逆向 + 页面验证 + information_schema + 逐列 COUNT);运八表经业务确认归类,物流云表独立校验。可复跑。* diff --git a/原型评估_滇中好运物流云_20260917/05_核对表_字段名对比_v2.xlsx b/原型评估_滇中好运物流云_20260917/05_核对表_字段名对比_v2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..06705a811ea45c26a2e996c51d0b33e324921bf7 GIT binary patch literal 41718 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 Mxi?M2gx_)hA8-X!0ssI2 literal 0 HcmV?d00001 diff --git a/原型评估_滇中好运物流云_20260917/README.md b/原型评估_滇中好运物流云_20260917/README.md new file mode 100644 index 0000000..6f99731 --- /dev/null +++ b/原型评估_滇中好运物流云_20260917/README.md @@ -0,0 +1,28 @@ +# 滇中好运智慧物流协同平台原型评估(2026-09-17) + +评估对象:https://demo.kmshuangmiao.com/logistics-platform/#/dashboard +(滇中好运智慧物流协同平台 0.2.0,厂商 demo 站点,纯前端 Mock 数据) + +## 本目录文件 + +| 文件 | 内容 | +|---|---| +| [01_原型盘点.md](01_原型盘点.md) | 原型的系统架构、角色、菜单模块、业务主线与关键机制盘点 | +| [02_网络货运合规对照.md](02_网络货运合规对照.md) | 按现行《网络货运承运平台经营管理办法》(交运规〔2026〕1号)逐条对照的合规评估 | +| [03_与运八契合度对比.md](03_与运八契合度对比.md) | 原型与运八网络货运平台的功能对比、契合点、冲突点与落地建议 | +| [04_司机车辆字段核对.md](04_司机车辆字段核对.md) | (详细说明文档)全量字段清单(空值率>0):原型 vs 运八生产库(base_driver/_ext/_tax、base_vehicle/_ext)vs 物流云生产库(ts_driver/ts_vehicle/ts_trailer、nts_*),含挂车专项比对 | +| [05_核对表.md](05_核对表.md) | (字段名对比)运八×原型(已经业务确认归类)、物流云×原型(独立校验,与运八无关)两张两两对照表 | +| [05_核对表_字段名对比_v2.xlsx](05_核对表_字段名对比_v2.xlsx) | 05 的 Excel 版:运八×原型 268 行 / 物流云×原型 127 行 / 总结,按分组着色、可筛选 | +| [06_原型不存在字段清单.xlsx](06_原型不存在字段清单.xlsx) | 单独清单:原型不存在的字段(运八侧 94 项 / 物流云侧 24 项),含库字段、中文名、填充率、处理建议——对接时这些数据留在源系统不进原型 | + +## 三句话结论 + +1. **原型不是网络货运承运平台,也没有打算做成一个**——它是「物流云(统一调度协同平台)+ 中闽(自营特殊物流公司)」的双主体协同调度原型,原型接口配置模块中明确声明"未确认或明确排除的网络货运平台不进入菜单、业务线和演示数据"。 +2. **若以网络货运牌照标准衡量,原型缺少全部监管硬性能力**:省级监测系统上报、投诉举报/服务评价、电子合同、代办税费与真实发票链、北斗轨迹、真实资金通道、信息 3 年/涉税 10 年留存等,均为空白或 Mock。 +3. **与运八高度互补、低度重叠**:运八在原型中被定位为承运商租户(云南运八物流科技有限公司)+"运八调度"授权代录角色;物流云管计划/调度/管控,运八管合规承运/开票/资金/监管上报,是天然的上游协同+下游合规承运组合,但运单、资质、结算三处存在双轨风险,需要接口打通(原型接口中心目前仅接入呈钢 ERP)。 + +## 证据来源 + +- 原型前端产物逆向分析:`assets/main-BZrhSiwe.js`(2.4MB)、`waybill-center/` 子应用及配套脚本(2026-09-17 抓取,版本参数 v=20260906~20260916) +- 运八侧事实依据:本项目 `output/菜单清单.md`(ntocc.sys_resource 导出,423 个可见菜单)、`tests/api/test_yun8_transport_flow.py`(24 步全链路造数) +- 法规依据:交通运输部官网(办法全文与解读,链接见 02 文档)