Asset Data → Import Excel(对话式资产整理助手)
这个 skill 是什么 / 不是什么
是:一个交互式的数据整理助手。输入可以是截图、文字、表格、甚至口述;它提取可读信息,对不清楚的字段直接问用户,全部确认后填入标准 5-Sheet Excel,循环到用户说"没有要导入的了"才生成最终文件。
不是:一个"按平台硬编码识别规则"的自动 OCR 工具。它不预设你必须用哪个银行/券商 App——光大、招行、支付宝、建行、理财通只是我们验证时用过的例子,新增任何来源都只需在对话里告诉它即可。扩展新类型 = 在枚举里加一项,无需改流程。
设计哲学(五条铁律)
- 不杜撰:截图/文字里没有的数字、类别、日期,绝不臆测补全。识别不清 → 留空并询问;问不到 → 留空 + 进待确认清单。
- 不确定的就问:平台归属、账户类型、资产分类、币种、日期、代码——任何无法从输入可靠判断的,用带选项的提问或直接问用户确认。一次问清,问题尽量合并。
- 骨头固定,肉灵活:输出的 5-Sheet 结构、列名、枚举(
asset_class/product_type/account_type/liability_type/holding_type/source_type)是小程序导入的硬契约,必须遵守;除此之外(识别什么、怎么问、怎么扩展类型)全部灵活。 - 【分类按三维模型最严】(V2,2026-08 起):资产分类 =
asset_class(风险大类:cash/fixed_income/equity/gold/alternative/other/restricted_asset)×market(china/overseas/global/other/none)×product_type(持有工具)+strategy_tags(可选)。权益不再分中国/海外大类,地域一律写 market;底层为准(债基必归 fixed_income);港股通中国企业主题按方案归equity+china;market 判断不了就问用户。细则见references/classification_guide.md。分类错误的代价:直接破坏小程序统计口径与下游分析——债基误归 A 股会同时扭曲大类配置与市场分布,且错误会随快照长期累积,修复需要逐行重导。 - 【ID 对齐最严】(增量导入时):已有实体的 ID 以用户导出的数据为唯一权威来源,原样复用,绝不重新哈希、绝不改一个字符。小程序导入端对空 ID 会随机生成新 ID(
importService.js的idGen.genId)→ 同一账户/资产被重复创建。对不上号的实体 → 问用户,不猜。更新已有实体时可用稀疏行(带原 ID 只填要改的列,空白不覆盖既有数据)。
触发场景
- 用户发来任意金融 App 截图(银行/券商/基金/第三方平台/公积金/信用卡),说"整理成 Excel / 做成可导入数据 / 把截图转成表格"。
- 用户用文字描述自己的资产("我有 10 万放余额宝,5 万招行朝朝宝…"),要落成表格。
- 用户已有小程序,想批量录入/更新资产快照。
- 增量导入:用户同时给「小程序导出的已有数据(Excel 或 JSON 备份)」+「新截图」,要求对齐已有 ID 整理出增量导入表。
工作流(对话式采集循环)
核心是一个循环:采集 → 澄清 → 确认 → 填入 → 问"还有吗" → … → 用户说没了 → 出最终表。
0. 准备工作区(仅首次)
- 在用户工作区创建一个累计工作文件,例如
<workspace>/asset_import_working.json(完整 JSON 结构见references/incremental_import_sop.md第三节:meta+accounts/assets/holdings/snapshots/liabilities五个数组)。后续每确认一批就追加进去。 - 读取用户提供的截图(Read 多模态);文字/表格直接解析。
1. 提取草稿
从输入中提取所有可读的结构化信息,映射到 5 张表(Accounts/Assets/Holdings/Snapshots/Liabilities)。能确定的先填;不能确定的一律标记为「待问」。
2. 澄清提问(铁律 2)
把这一批所有不确定的点合并成一组问题问用户(优先用带选项的提问方式,选项来自标准枚举)。提问模板与边界处理(外币/无代码/不完整截图/汇总行)见 references/interaction_playbook.md。绝不替用户拍板分类或金额;用户没回前不写入最终数据。
3. 确认并填入
用户回答后,把确认的行写入 asset_import_working.json。ID 用确定性哈希派生(见 references/excel_schema.md 的 ID 约定),保证跨批次/跨来源同一产品 ID 恒定、可被小程序 upsert。
4. 继续 or 收尾
- 问用户:"还有要导入的吗?"
- 有 → 回到 Step 1。
- 没有 → 进入 Step 5。
5. 生成最终 Excel
# 英文表头版:
python scripts/build_excel.py asset_import_working.json final_import.xlsx --verify
# 中文表头版(用户模板为中文时,推荐):
python scripts/build_excel_cn.py asset_import_working.json final_import_cn.xlsx
--verify 会做结构自检(必填、枚举、引用、金额、日期)。有 error 必须修复再交付;warning(如平台汇总差额)写入待确认清单交用户。
交付前必跑校验(中文模板、英文值导出文件都能查,防枚举错位):
python scripts/check_value_aliases.py final_import_cn.xlsx
# 也可直接校验用户给的小程序导出备份(英文枚举值):
python scripts/check_value_aliases.py 用户的导出备份.xlsx
check_value_aliases.py的合法集合 =constants.js的「中文别名 ∪ 英文规范值」,所以两种文件都能通过;非合法值立即报「行号+字段+当前值+建议」。在仓库外运行时自动回退到技能内置快照assets/enums.json;也可用--constants <路径>显式指定 constants.js。
运行环境:用带 openpyxl 的 Python(macOS/Linux 用
python3,Windows 下若python3不可用改用python)。没有 openpyxl 时可用uv run scripts/build_excel.py ...——所有 Python 脚本均已内联声明依赖(PEP 723),uv 会自动解析。
6. 交付
- 交付
final_import.xlsx。 - 附待确认清单:仅包含「真正未解决」的项(识别不清、缺失汇率/日期、汇总差额、平台未展开等)——不是猜测清单。
- 提示导入方式:小程序「导入 Excel」→ 二次校验 → 入库。
增量导入模式
用户已用过小程序、库里已有数据时,新增一批资产要对齐已有 ID(铁律 5)。完整流程——导入端硬契约、导出文件格式解码、ID 注册表提取、逐实体对齐规则、增量文件只含新行、工作文件 JSON 结构——见 references/incremental_import_sop.md。第一步固定是 python scripts/extract_ids.py 导出文件.xlsx -o id_registry.json。
Resources
references/excel_schema.md— 硬契约:5-Sheet 列名/类型/必填/枚举,与小程序constants.js的SHEET_SCHEMAS一字不差。改这个文件前必须先核对 constants.js。references/enum_reference.md— 枚举权威参考(自动生成,请勿手改):由scripts/gen_enum_reference.js直接读取constants.js生成,含每个枚举字段的「英文规范值 ↔ 中文标签 ↔ 导入中文别名」完整对照,以及「小程序导出文件 = 中文表头 + 英文值」的格式解密表。这是枚举的唯一权威来源;生成任何 Excel 前先查这里,避免英文字段搞混。枚举新增/改名后重跑生成脚本即可同步。references/classification_guide.md— 标准枚举与分类启发式(关键词→类别)。枚举以 excel_schema.md / enum_reference.md 为准;不确定就问用户。references/recognition_hints.md— 可选参考,非必读。常见 App 截图布局提示,帮提取更快;但永远不能替代"问用户",更不是强制规则。references/interaction_playbook.md— 交互协议细节:怎么分批提问、怎么维护工作文件、怎么处理负债/外币/无代码产品/不完整截图等边界。references/incremental_import_sop.md— 增量导入完整 SOP:导入端硬契约、导出文件格式解码、ID 注册表提取、逐实体对齐规则、增量文件只含新行、工作文件 JSON 结构。增量导入时整本照做。references/value_aliases.md— 中文化易翻车 4 个真实例子:补充 enum_reference.md 的实战坑(现金类≠现金、第三方平台≠第三方、场内基金≠ETF、受限资产≠受限)。枚举完整合法取值以 enum_reference.md 为准;本表专门记"看着像但非法"的陷阱。scripts/build_excel.py— 把累计 JSON 封装为标准 5-Sheet xlsx(英文表头,含结构自检与默认值补全)。scripts/build_excel_cn.py— 同上但中文表头 + 中文枚举值(对齐 constants.js 别名,用户中文模板用这个)。scripts/check_value_aliases.py— 交付前必跑:校对输出 Excel 的全部枚举字段。合法值优先实时读constants.js(仓库内运行时自动回溯查找,也可--constants指定);脱离仓库运行时自动使用技能内置快照assets/enums.json。非合法值立即报错并点名行号+字段+当前值+建议。scripts/extract_ids.py— 增量导入第一步:从小程序导出的 Excel/JSON 提取已有 account/asset/holding/liability 的 ID 注册表,防止空 ID 被导入端随机生成新 ID 造成重复实体。scripts/inspect_xlsx.py— 排查辅助:打印任意 xlsx 的 Sheet/表头/枚举实际取值,诊断格式问题用。scripts/gen_enum_reference.js— 维护用(需本仓库):从constants.js自动生成references/enum_reference.md。项目枚举有变动时重跑即可,勿手改 md。scripts/verify_schema_headers.js— 维护用(需本仓库):比对excel_schema.md的「列名/中文表头/列顺序/Sheet名」与constants.js的SHEET_SCHEMAS是否一字不差。改了 excel_schema.md 或 constants.js 后必跑。assets/enums.json— 枚举合法值内置快照(由check_value_aliases.py --dump-snapshot在仓库内生成):技能脱离仓库分发时check_value_aliases.py的回退数据源。小程序枚举变更后需在仓库内重新生成。
微信扫一扫