# 丰田 EPC 数据关系图

这份文档给不懂技术的人看，用来理解 Toyota EPC 这套数据是怎么关联的。

你可以把它理解成：EPC 不是一个 Excel，也不是一个普通数据库，而是一堆“表”。每个文件负责一部分信息，最终要把这些表连起来，才能查到完整结果。

## 最简单理解

```mermaid
flowchart LR
  OE["OE 配件号<br/>例如 48510-8Z205"]
  Part["零件信息<br/>左右前减震器"]
  Fig["图纸信息<br/>图组 4803"]
  Img["原厂示意图<br/>PNG 图片"]
  Catalog["地区目录<br/>EU / GR / JP / US"]
  Model["车型/底盘<br/>GUN125 / GGN125"]
  Cond["适配条件<br/>左右舵/发动机/年月/目的地"]
  VIN["车架号 VIN<br/>17 位"]

  OE --> Part
  OE --> Fig
  Fig --> Img
  OE --> Catalog
  Catalog --> Model
  Catalog --> Cond
  VIN --> Model
  Model --> Cond
  Cond --> OE
```

一句话：

```text
OE 能查到零件和图纸；
车型和车架号能查到目录；
目录和条件决定这个 OE 到底适不适配。
```

## 文件像什么表

| EPC 文件 | 你可以理解成 | 主要作用 |
|---|---|---|
| `FGI*.DAT` | OE 索引表 | 输入 OE，找到它在哪个地区目录、哪个参考号、哪个图组 |
| `HINMEI*.DAT` | 零件名称表 | 把参考号变成零件名称 |
| `BZI*.DAT` | 图纸目录表 | 把图组变成图号、年月范围 |
| `EMI*.DAT` / `EMK*.DAT` | 图片库 | 从图号提取原厂示意图 |
| `KRK*.DAT` | 车型底盘表 | 这个目录包含哪些基础底盘 |
| `TKM*.Dxx` / `KIG*.Dxx` | 条件字典表 | 解释 LHD/RHD、发动机、变速箱、目的地等条件 |
| `FRAMNO.DAT` | 车架号范围表 | 基础底盘、年份、车架流水号范围 |
| `VIN9.INI` | VIN 规则线索 | 帮助判断 VIN/车架号前缀 |
| `KPT*.DAT` | 适配规则表 | 把 OE、车型、左右舵、发动机、年月等真正关联起来 |

## OE 查询的关系

```mermaid
flowchart TD
  A["输入 OE<br/>48510-8Z205"]
  B["FGI*.DAT<br/>找到目录/参考号/图组"]
  C["HINMEI*.DAT<br/>找到零件名称"]
  D["BZI*.DAT<br/>找到图纸编号"]
  E["EMI/EMK<br/>提取原厂图片"]
  F["KRK*.DAT<br/>找到基础底盘"]
  G["TKM/KIG<br/>找到条件字段"]
  H["KPT*.DAT<br/>判断精准适配"]
  I["最终结果<br/>车型 + 条件 + 图片 + OE"]

  A --> B
  B --> C
  B --> D
  D --> E
  B --> F
  B --> G
  B --> H
  F --> H
  G --> H
  H --> I
```

当前已经打通：

```text
OE -> 目录
OE -> 参考号
OE -> 图组
参考号 -> 零件名称
图组 -> 图片
目录 -> 基础底盘
目录 -> 条件字段
```

还没完全打通：

```text
OE + 车型 + 左右舵 + 发动机 + 年月 + 目的地 -> 精准适配
```

原因：

```text
这一步需要继续解析 KPT*.DAT。
```

## VIN 查询的关系

```mermaid
flowchart TD
  A["输入 17 位 VIN<br/>LFMAPE2C7A0185487"]
  B["识别 VIN 结构<br/>厂商/车型/年份/流水号"]
  C["VIN9.INI<br/>前缀规则"]
  D["FRAMNO.DAT<br/>车架号范围"]
  E["找到基础底盘<br/>例如 GUN125"]
  F["找到地区目录<br/>例如 GR/US/EU/JP"]
  G["进入 OE/配件查询"]
  H["最终结果<br/>该车可用配件"]

  A --> B
  B --> C
  B --> D
  C --> E
  D --> E
  E --> F
  F --> G
  G --> H
```

注意：

```text
FRAMNO.DAT 不是每台车一条完整 17 位 VIN。
它更像“车架流水号范围表”。
所以 VIN 查询要先拆 VIN，再匹配范围。
```

## 最关键的一张关系表

最终我们需要做出来的核心关系表长这样：

| OE | 地区 | 目录 | 零件名称 | 图组 | 图片 | 基础底盘 | 完整车型 | 年月 | 左右舵 | 发动机 | 目的地 | 是否精准 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 48510-8Z205 | GR | 672390 | 右前减震器总成 | 4803 | 484156B.png | GUN125 | GUN125L | 05.2015-05.2020 | LHD | 待解析 | Asia/Middle East | 待确认 |

现在能填的：

```text
OE、地区、目录、零件名称、图组、图片、基础底盘、条件字段
```

现在还不能完整填的：

```text
完整车型、年月、左右舵精准关系、发动机精准关系、目的地精准关系
```

## 为什么现在 demo 不是最终结果

以 `48510-8Z205` 为例：

当前 demo 显示：

```text
GUN125
GGN125
```

外部网站可能显示：

```text
GUN125L
GGN125L
GGN125R
```

这不是矛盾。

可以理解为：

```text
demo 现在显示的是“基础底盘”
外部网站显示的是“完整车型销售代码”
```

关系是：

```text
GUN125 -> GUN125L
GGN125 -> GGN125L / GGN125R
```

所以 demo 方向对，但还没展开到最细。

## 三个阶段

```mermaid
flowchart LR
  S1["阶段 1<br/>能查到"]
  S2["阶段 2<br/>查得准"]
  S3["阶段 3<br/>能分享"]

  S1 --> S2 --> S3
```

### 阶段 1：能查到

目标：

```text
输入 OE，能看到地区、目录、零件名、图纸、基础底盘。
```

当前进度：

```text
基本完成。
```

### 阶段 2：查得准

目标：

```text
输入 OE，能知道具体适配哪个车型、年月、左右舵、发动机、目的地。
```

关键：

```text
解析 KPT*.DAT。
```

当前进度：

```text
待继续。
```

### 阶段 3：能分享

目标：

```text
做成互联网可访问的查询系统。
```

要注意：

```text
不要直接公开原始 EPC 文件。
不要直接批量公开原厂图片库。
优先公开整理后的查询结果和适配摘要。
```

## 给技术的工作清单

```mermaid
flowchart TD
  A["整理文件清单"]
  B["解析 FGI<br/>OE 索引"]
  C["解析 HINMEI<br/>零件名称"]
  D["解析 BZI/EMI/EMK<br/>图纸图片"]
  E["解析 KRK<br/>基础底盘"]
  F["解析 TKM/KIG<br/>条件字典"]
  G["解析 FRAMNO/VIN9<br/>车架号范围"]
  H["重点解析 KPT<br/>精准适配规则"]
  I["导入中间数据库"]
  J["做内部查询页面"]

  A --> B --> I
  A --> C --> I
  A --> D --> I
  A --> E --> I
  A --> F --> I
  A --> G --> I
  A --> H --> I
  I --> J
```

优先级：

1. 先固化已经能解析的文件。
2. 再集中攻克 `KPT*.DAT`。
3. 再做 VIN 查询。
4. 最后考虑互联网共享。

## 当前结论

这套数据值得继续做。

因为已经证明：

```text
OE 可以查。
图片可以提。
基础底盘可以读。
左右舵字段可以读。
车架号范围可以统计。
```

接下来最重要的是：

```text
搞清楚 KPT*.DAT 怎么把这些东西串起来。
```
