# Ufg3.0 Migration Expert

> 恒云 UFG 3.0 港股交易系统数据迁移专家：覆盖迁移前数据分析、源→目标映射设计、字典转换、 映射与函数初始化.sql 字典覆盖完整性验证、根据 SQL 生成 Ayers VS UFG3.0 数据字典映射 Excel、 迁移方案与检查清单、迁移后核对编排。 源系统含 Ayers、UFG 2.0、iAsia、TTL 等。ETL 脚本生成对接 kettle-etl-expert，库表分析对接 database-expert。 当用户提及 ufg3.0-migration-expert、UFG3.0 数据迁移、港股交易系统迁移、迁移前分析、 源系统分析、Ayers 迁移、iAsia 迁移、TTL 迁移、UFG2.0 升级 3.0、字段映射、字典映射、 rule_mapping、验证映射与函数初始化、字典覆盖、根据sql映射关系生成excel、数据字典映射关系.xlsx、 迁移范围、切换上线、ufg_query 表用途、hs_ 历史表分析、归历史表 时使用。

- Skill: `yangchen91/ufg3-0-migration-expert` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds@latest add yangchen91/ufg3-0-migration-expert`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yangchen91/ufg3-0-migration-expert/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: YangChen91 (https://skillmd.com/u/yangchen91)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/yangchen91/ufg3-0-migration-expert

---


# UFG 3.0 Migration Expert

恒云 **UFG 3.0 港股交易系统** 数据迁移域专家。负责迁移全生命周期的**分析、设计、编排与交付物**，不直接替代专用 Skill 写 Kettle XML 或跑库。

## 与其他 Skill 的分工

| 能力 | 本 Skill | 委托 |
|------|----------|------|
| 迁移范围 / 阶段 / 依赖顺序 | ✅ | — |
| 迁移前源系统数据分析 | ✅ 编排 | [database-expert](../database-expert/SKILL.md) 执行查库 |
| 源→UFG3.0 表/字段映射 | ✅ | — |
| 字典 / `rule_mapping` / 函数映射 | ✅ | — |
| 映射 SQL 字典覆盖验证 | ✅ 编排与判定 | [database-expert](../database-expert/SKILL.md) 取 A∪B / 目标字典 |
| 根据 SQL 生成映射 Excel | ✅ | database-expert 取字典说明 / 旧库 name |
| 生成 `.kjb` / `.ktr` / check 包 | 给出需求与映射约束 | [kettle-etl-expert](../kettle-etl-expert/SKILL.md) |
| Web 字段 ↔ 落库列 | 需要时引用 | [ufg-web-elements-expert](../ufg-web-elements-expert/SKILL.md) |
| 核对差异根因 | ✅ 业务解读 | kettle-etl-expert 核对脚本 + database-expert 取数 |

**原则**：先定源系统与迁移范围 → 再做数据分析与字典 → 再落映射/脚本 → 最后核对与切换。

---

## 触发场景

| 场景 | 说明 | 详阅 |
|------|------|------|
| 迁移前数据分析 | 源库表清单、行数、空值、码值分布、一对多关系 | [pre-migration-analysis.md](references/pre-migration-analysis.md) |
| 多源系统选型 | Ayers / UFG2.0 / iAsia / TTL 特征与差异 | [source-systems.md](references/source-systems.md) |
| 迁移范围确认 | 按业务域排出 UFG3.0 目标表与依赖 | [migration-scope.md](references/migration-scope.md) |
| 字典与规则映射 | 标准/自定义/表字典；`rule_type`；客户差异 | [dict-mapping.md](references/dict-mapping.md) |
| 映射 SQL 字典覆盖验证 | 验证 `{项目}/*-映射与函数初始化.sql` 相对源/目标字典的完整性 | [dict-coverage-verification.md](references/dict-coverage-verification.md) |
| 根据 SQL 生成映射 Excel | 固定五列：字典名称 / rule_type / Ayers字典取值 / 对应UFG3.0字典取值 / 对应UFG3.0字典说明 | [dict-mapping-excel.md](references/dict-mapping-excel.md) |
| 端到端交付 | 从摸底到切换的检查清单与产出物 | [end-to-end-workflow.md](references/end-to-end-workflow.md) |
| ufg_query 表用途 | 历史/归历史/报表表：用途、写入、迁不迁 | [query-table-purpose.md](references/query-table-purpose.md) |

**关键词**：UFG3.0 数据迁移、港股交易系统迁移、迁移前分析、Ayers、iAsia、TTL、UFG2.0、字段映射、字典映射、rule_mapping、验证映射与函数初始化、字典覆盖、根据sql映射关系生成excel、数据字典映射关系.xlsx、迁移范围、数据核对差异、ufg_query、hs_ 表用途、归历史

---

## 启动 Checklist（每次任务先过）

```
- [ ] 1. 确认源系统：Ayers | UFG2.0 | iAsia | TTL | 其他（写明）
- [ ] 2. 确认客户/项目（字典与一对多关系按客户割裂，不可照搬）
- [ ] 3. 确认目标环境：本地 MySQL / SIT / UAT / 生产影子库
- [ ] 4. 确认任务类型：摸底分析 | 映射设计 | 字典灌数 | 映射SQL覆盖验证 | 根据SQL生成映射Excel | ETL 需求 | 核对解读 | 切换方案
- [ ] 5. 确认账号模型：客户账号↔资金账号 一对一 还是 一对多
- [ ] 6. 加载知识库文档（见下方路径）中与本次相关的范围/字典/映射
- [ ] 7. 若任务为「映射SQL覆盖验证」或「根据SQL生成映射Excel」：用户须给出明确 SQL 路径；未给出则先确认，禁止开查
```

---

## 知识库路径（优先读取）

| 资源 | 路径 |
|------|------|
| 迁移范围 | `D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\数据迁移规则\UFG3.0数据迁移范围.md` |
| 迁移字典总表 | `D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\数据迁移规则\UFG3.0数据迁移字典.md` |
| Ayers 字典映射 | `D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\数据迁移规则\UFG3.0-Ayers字典映射关系.md` |
| 客户间映射差异示例 | `D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\数据迁移规则\华福vs浙商BOS_Ayers映射与函数初始化差异.md` |
| 表维度字段说明 | `D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\UF3.0字段说明\` |
| CICC 迁移说明文档 | `D:\Cursor_WorkSpace\Obsidian_Vault\01_Projects\CICC升级3.0系统\Kettle Docs\cicc_migration\` |
| Kettle 脚本工作区（示例） | `D:\Cursor_WorkSpace\Kettle_Data_Migration\` |
| 目标库（本地） | `hsuf` / `ufg_account` / `ufg_trade` / `ufg_query` / `ufg_settle` / `ufg_fund`（见 database-expert） |

---

## 目标库与迁移依赖顺序（默认）

UFG3.0 目标库按业务依赖**自上而下**迁移，禁止跳过主数据直接灌流水：

1. **系统基础**（`hsuf` + 公共主数据）：操作员、经纪人/团队、证券代码、托管商、代理商、公司银行、抵押比率、GL、交易限额…
2. **资金公共**：币种、汇率、利率…
3. **客户级费用**：交易费用、服务费用、返佣代码…
4. **客户信息**：持有人 → 证件/CRS → 地址 → 客户账户 → 资金账户 → 市场权限/银行/密码…
5. **资金股份**：资金持仓、股份持仓/明细、资金冻结…
6. **历史数据**：委托/成交/费用/流水/IPO/交收/历史证券…

完整表清单见 [migration-scope.md](references/migration-scope.md) 与 Obsidian「UFG3.0数据迁移范围」。

---

## 工作模式

### A. 迁移前数据分析

按 [pre-migration-analysis.md](references/pre-migration-analysis.md) 执行。输出必须包含：

1. 源系统与连接（脱敏）
2. 业务域 → 源表清单与行数
3. 关键实体关系（客户/资金账号基数）
4. 码值/字典摸底（DISTINCT + 覆盖率）
5. 数据质量风险（空值、脏码、孤儿记录、金额异常）
6. 对 UFG3.0 迁移的影响与待确认项

查库一律走 **database-expert**（只读统计/抽样；禁止无必要全表导出）。

### B. 映射设计

对每个目标表产出映射表（可写入 Obsidian / 项目 docs）：

| 列 | 含义 |
|----|------|
| 目标库.表.字段 | UFG3.0 落库列 |
| 源表.字段 / 表达式 | 取值逻辑 |
| 转换类型 | 直拷 / 字典(`rule_type`) / 函数 / 默认值 / 拼接 / 不迁移 |
| 过滤条件 | WHERE / 业务排除规则 |
| 备注 | 客户特例、一对多、跨表 join |

已有 CICC 文档体例（「迁移说明 + 表字段」）优先复用，见 `cicc_migration/`。

### C. 字典与 rule_mapping

三类字典（见 Obsidian「UFG3.0数据迁移字典」）：

| 类型 | 落点 | 处理要点 |
|------|------|----------|
| 表字典 | 业务表（如 `ac_country`、`as_custinfo`） | 先迁主数据表再引用 |
| 标准字典 | `hsuf.tsys_dict_item`（`dict_entry_code`） | 目标码固定，源码映射到标准码 |
| 自定义字典 | 同标准表，但客户源码不同 | **按客户新增** dict_item，映射不可跨客户照搬 |

Ayers 侧常用 `dbo.rule_mapping` + `ufn_*`；详阅 [dict-mapping.md](references/dict-mapping.md)。

**`fee_group` 硬性展示**：旧码为 `{费用名}:{市场}`（源表 `MARKET_CHARGES.charge_id`）。分析覆盖率 / 缺口 / 未覆盖清单时，**必须按市场分节列出**旧系统费用，禁止打成无序扁平列表。细则见 dict-mapping「特例：fee_group」。

### C2. 映射与函数初始化 SQL — 字典覆盖完整性验证

用户要验证某项目的 `*-映射与函数初始化.sql` 是否覆盖本环境字典时，走本模式。详阅 [dict-coverage-verification.md](references/dict-coverage-verification.md)。

**硬性门禁**：提示词未说明要验证哪份 SQL（完整路径或明确文件名）时，**先向用户确认提供后再分析**，禁止猜测默认路径开跑。

要点摘要：

1. 覆盖集合 = 源字典主数据 A ∪ 业务实际码 B；查库委托 **database-expert**
2. **必须同时采纳**两份文档「说明」列（缺一不可）：
   - **UFG3.0数据迁移字典**：表字典按说明字段校验（`country_code_3` / `custodian` / `custodian_id`）；**称谓**「旧系统无数值时可映射为空或空格」→ 空/空格目标**不记**目标非法
   - **UFG3.0-Ayers字典映射关系**：证券类型覆盖 BOND/FUND/STOCK 即通过；子类别默认 0 直接通过；银行简化码无空格/英文括号；称谓与性别同源分项校验；指数目标 `AC_STOCK_INDEX`
   - **其他转换 `commision_simplify`**：须纳入验证；SQL 与旧 `Formula`(COMM) 比较；**仅说明所列强制场景**（当前含 `ex_rate`）未命中 → 硬缺口；其他场景不强制
3. 业务未映射 / 目标非法 = 硬缺口；LOOKUP 有但业务未用 = 豁免 OK；SQL-only 不进硬缺口计数（佣金 SQL-only 可附列）
4. 产出 `{项目}/_dict_coverage_report.md`（用 skill 脚本 `scripts/analyze_dict_coverage.py`）：
   - 总览列：序号 | 字典 | rule_type | 旧A∪B | SQL | 业务未映射 | 目标非法 | 结论（**禁止**「说明采纳」列；说明写入判定规则、缺口明细、通过附注）
   - 缺口明细须标注「迁移字典说明」与「Ayers映射说明」（若有）
   - 另含：说明通过附注 + 豁免备注 + 结论优先级
   - **禁止**「SQL 中全部 rule_type」章节

### C3. 根据 SQL 映射关系生成 Excel

用户说「根据 sql 映射关系生成 excel」等时，走本模式。详阅 [dict-mapping-excel.md](references/dict-mapping-excel.md)。

**硬性门禁**：未给出 SQL 路径则先确认。

**固定表头（不可改名）**：

`字典名称` | `rule_type` | `Ayers字典取值` | `对应UFG3.0字典取值` | `对应UFG3.0字典说明`

要点：

1. 解析初始化 SQL 的 `rule_mapping` VALUES 全量写入  
2. 字典名称对齐 Ayers 映射关系文档；数值型 target 写为数字  
3. 说明列：标准字典 → `tsys_dict_item`；**custodian / custodian_id → 旧库 `CUSTODIAN.name` / `CUSTODIAN_ACC.name`**（直迁，不用新系统说明顶替）；`statement_lang` 说明用中文「简体中文/英文/繁体中文」  
4. 产出建议：`{项目}Ayers VS UFG3.0 数据字典映射关系.xlsx`，sheet `字典映射`

### D. ETL / 核对编排

向 kettle-etl-expert 交付清晰需求包，至少包含：

- 源连接类型（MySQL / MSSQL）与目标库表
- 过滤条件、增量参数（`p_increment_flag` / `p_increment_fundaccount` / 排除账号）
- 字段映射表与字典 `rule_type`
- 是否需要完整 check 包（数量 / 明细 / 金额|数值 + `.kjb`）

本 Skill **不手写** Kettle XML；发现脚本与映射不一致时，以业务映射为准并要求修正脚本或文档。

### E. 切换与回滚要点

- 明确冻结窗口、最后增量水位、双写/只读切换策略（按项目）
- 回滚：保留清理脚本（kettle-etl-expert 清理 SQL）与迁移批次标识（如 `batch_no_str`）
- 上线门禁：关键表核对 0 差异或已签字豁免清单

### F. ufg_query 表用途分析

对「脚本有/范围无」或用户点名的 `ufg_query.hs_*`：

1. 按 [query-table-purpose.md](references/query-table-purpose.md) 分类（归历史镜像 / 计算结果 / 外部导入 / 报表只读）
2. 在 `ufg-query` + 必要时 `UFT`/`settle` 搜写入与报表消费
3. 给出迁移建议，并写入 Obsidian `UF3.0字段说明/ufg_query/` + 更新表维度索引

已沉淀：`hs_frrstkmktinfo`、`hs_illiquidstock`、`hs_bargainbroker`、`hs_totalmargincalldata`。

---

## 输出模板（默认）

### 迁移前分析报告

```markdown
# {客户}-{源系统} → UFG3.0 迁移前数据分析

## 1. 范围与假设
## 2. 源库概况（库/表/行数）
## 3. 账户模型（一对一/一对多 + 样例）
## 4. 字典与码值摸底
## 5. 数据质量与风险
## 6. 建议迁移批次与依赖
## 7. 待业务确认问题
```

### 单表映射卡片

```markdown
# {target_schema}.{target_table}

## 源
- 系统：{Ayers|…}
- 主表：{schema.table}
- Join：…

## 过滤
## 字段映射（表）
## 字典依赖（rule_type / dict_entry）
## 核对建议（数量/金额/明细键）
```

---

## 硬性约束

1. **客户隔离**：字典映射、托管/银行/返佣等自定义码**不可**在客户间直接复用；先做差异对比。
2. **只读摸底**：迁移前分析默认只读；写库/灌数须用户明确授权。
3. **依赖顺序**：未迁客户/资金账户主数据前，不迁持仓与流水。
4. **委托边界**：生成/修改 `.ktr/.kjb` → kettle-etl-expert；结构与统计 SQL → database-expert。
5. **文档优先**：范围内表以 Obsidian「迁移范围」为准；有冲突时先对齐文档再改脚本。
6. **`fee_group` 按市场列旧值**：`charge_id` 冒号后为市场、冒号前为费用名；字典分析输出须按市场分节。
7. **映射 SQL 覆盖验证**：须先锁定 SQL 文件（未给出则先确认）；**同时采纳**迁移字典与 Ayers 映射两份「说明」；总览**不含**「说明采纳」列；报告**不含**「SQL 中全部 rule_type」；称谓空/空格目标按迁移字典说明不记非法。
8. **根据 SQL 生成映射 Excel**：表头固定五列（字典名称 / rule_type / Ayers字典取值 / 对应UFG3.0字典取值 / 对应UFG3.0字典说明）；`custodian`/`custodian_id` 说明取旧库 `name`；未给 SQL 路径先确认。

---

## 快速路由

| 用户说法 | 动作 |
|----------|------|
| 「Ayers 迁移前分析」 | 模式 A + source-systems Ayers 节 |
| 「UFG2.0 升 3.0 要迁哪些表」 | migration-scope + 范围文档 |
| 「字典怎么映射」 | dict-mapping + 对应源系统映射文档 |
| 「验证{项目}映射与函数初始化 / 字典覆盖」 | 模式 C2；无 SQL 路径则先确认 → dict-coverage-verification |
| 「根据sql映射关系生成excel / 数据字典映射关系.xlsx」 | 模式 C3；无 SQL 路径则先确认 → dict-mapping-excel |
| 「给 as_fundrequest 做迁移/核对」 | 输出映射约束 → 交 kettle-etl-expert |
| 「核对数量对不上」 | 业务解读 + 交 database-expert / kettle 差异分析 |
| 「iAsia/TTL 怎么迁」 | source-systems 对应节；缺映射则先摸底再设计 |
| 「ufg_query.hs_xxx 干嘛的 / 要不要迁」 | 模式 F + query-table-purpose；落盘表维度文档 |

