# 迁移方案

## 目标

保证现在用 CSV 记录的数据，将来可以低成本迁移到 SQLite、PostgreSQL、ERP、低代码表格或本地 RAG 派生索引。

## 当前设计对迁移友好的点

- 每类实体都有独立稳定 ID。
- 合同、货品、相关方、进出记录已拆表，避免一个大表难迁移。
- 证据文件路径不直接绑定某台机器的绝对路径。
- 结构化事实与原始证据分离。
- RAG 索引是派生物，可删除重建，不作为权威库。

## CSV → SQLite 映射

| CSV | SQLite 表 | 主键 |
| --- | --- | --- |
| `contracts.csv` | `contracts` | `contract_id` |
| `items.csv` | `items` | `item_id` |
| `parties.csv` | `parties` | `party_id` |
| `goods_movements.csv` | `goods_movements` | `movement_id` |
| `intake_queue.csv` | `intake_queue` | `intake_id` |

## SQLite/PostgreSQL 建议类型

- ID、状态、类型、路径：`TEXT`
- 数量：`NUMERIC`
- 日期：`DATE` 或 `TIMESTAMPTZ`
- 备注：`TEXT`
- 可变元数据：后续可加 `metadata_json JSONB`

## 迁移前检查清单

1. 所有 ID 唯一且非空。
2. 所有关联 ID 能在对应表中找到。
3. 日期格式统一。
4. 数量字段可解析为数字。
5. `source_path` 指向的证据文件存在。
6. 敏感字段已确认是否允许进入目标系统。
7. 导出前生成备份包。

## RAG 迁移策略

RAG 只使用数据库或 CSV 导出的轻量 JSONL：

```text
数据库/CSV → 脱敏摘要 JSONL → RAG
```

不要使用：

```text
合同全文/扫描件 → 公共 RAG → 事实判断
```

## 后续可补脚本

当小样本字段稳定后，再补：

- `scripts/validate_csv.py`：检查 ID、日期、数量、路径。
- `scripts/export_sqlite.py`：从 CSV 生成 SQLite。
- `scripts/export_light_rag_jsonl.py`：生成脱敏 RAG 索引。
- `scripts/check_evidence_hashes.py`：校验证据文件哈希。
