Skill Hub · 诺亚 AI 能力中心 静态参考版

让每一个技能成为可信资产 —— 诺亚 Agent 生态的技能资产中心:统一注册、检测把关、按需复用。本站为 skill-hub.noahgroup.com 于 2026-08-21 的全量数据镜像。

镜像采集 2026-08-2166 个已发布技能18 个分类 · 3 条分发渠道含技能包 SKILL.md 全文
← 返回目录

nav-review-collect

SKILL_942502307 · vv1.1 · Olive 海外运营 · Owner:Olive 基金运营 · 发布于 2026-08-10
调用 51 下载 1 点赞 0 浏览 0
简介
专用于NAV复核第二阶段的数据采集与证据截图生成,仅收集源数据不生成报告。
触发词
收集NAV数据,生成NAV截图,准备复核数据
分发渠道
ARK Engine
功能测试
✅ 通过 · 业务评审:✅ 通过
技能包文件
nav-review-collect/SKILL.md、nav-review-collect/references/payment_log_spec.md、nav-review-collect/references/screenshot_spec.md
使用示例:帮我收集这批NAV复核数据并生成对应截图

SKILL.md 全文

Frontmatter

namenav-review-collect
description|

NAV Review Stage 2 — 数据收集与截图生成

When to Use

本 skill 只收集数据 + 生成截图,不构建报告,不上传 iGowin。 ---

输入

输出

<target_dir>/.cortex/
├── nav_data/
│   ├── tb.json                # TB 全量
│   ├── sofi.json              # 持仓全量(FS Pack)/ ipa.json(IGOWIN)
│   ├── cash_balances.json     # 各账户期末余额
│   ├── bank_transactions.json # 整期银行流水(按月分组)
│   ├── nominee_cashflow.json  # Nominee 现金账项(按月)
│   ├── investment_movement.json # 投资活动(Capital Call / Distribution / Sub / Red)
│   ├── investment_support.json  # 各持仓支持文件信息
│   ├── mmf_reinvestment.json    # MMF Reinvestment 跨期数据
│   ├── distribution_je.json     # 分配复合分录(按 TranID/Batch ID 分组)
│   ├── prior_cost.json          # 上期成本快照
│   ├── prior_mv.json            # 上期市值快照
│   ├── payment_log.json         # 期内 Payment Log 行
│   └── summary_log.json
└── screenshots/
    ├── cash/        # Cash Review 用
    ├── inv_cost/    # Investment Cost Review 用
    └── inv_ugl/     # Investment Unrealized G/L Review 用
---

外置规范文件

| 文件 | 内容 | |------|------| | references/screenshot_spec.md | 红框标注代码、高亮可读性规则、IPA 裁剪规范、Investment 类禁止填充规则 | | references/payment_log_spec.md | Payment Log 行截图、PI 文件截图、Email 证据截图细则 | Subagent 生成截图时必须先读取对应规范文件并严格遵守。 ---

执行流程

Step 0:加载 profile

import json, os
target_dir = r"<...>"
profile = json.load(open(os.path.join(target_dir, ".cortex", "nav_profile.json"), encoding="utf-8"))

Step 1:并行收集结构化数据(4 个 subagent)

⚠️ Subagent 容错策略:若 subagent 因账户权限失败,立即改为 run_in_terminal + openpyxl/fitz 直接读取。不要重试失败的 subagent。

Subagent A — 当期 TB / 持仓 / 投资活动

输入:profile.key_files.fs_packprofile.key_files.tb_csv + profile.key_files.ipa + profile.key_files.investment_movement 任务: 1. 读取 TB 全量(含 Reporting Period、所有科目余额)→ nav_data/tb.json 2. 读取持仓明细(SOFI 或 IPA)→ nav_data/sofi.json 3. 必须最先读 Investment Movement Summary → nav_data/investment_movement.json,列出期内全部活动 4. 抓出 Cash/Investment/UGL 相关科目余额 → nav_data/cash_balances.json 5. Distribution 复合分录追溯:若 report_system == "Maples-FSPack" 且 TB 中 Investment Distribution-CostInvestment Distribution-UnrealizedGL 当期 Debits/Credits ≠ 0,从 Report/Detailed General Ledger.csv 提取每笔发生额,按 TranID 分组写入 nav_data/distribution_je.json 6. IGOWIN 体系对应文件为 Report/I1. JE Report.xlsx,按 Batch ID 分组写入同一 JSON 结构。
Guard clause:若 TB 中 Distribution-Cost 与 Distribution-UnrealizedGL 当期 Debits/Credits 全为 0 → 跳过第 5-6 步,distribution_je.json[]

Subagent B — 当期银行对账单(含 Nominee + MMF Reinvestment)

输入:profile.folders.bank_statements[]profile.months_in_scope[] + subsequent_months[] 任务(对每个银行 / 每个月): 1. 多币种账户识别(强制第一步):扫描全 PDF 找到基金本位币账户对应页(通过账户标识符如 788611579-USD 确认)。空账户(余额为 0 的 CNY 等)跳过。 2. 用 fitz 逐页读取目标币种页,提取期末余额、所有交易行 → nav_data/bank_transactions.json 3. Nominee 平台(Ark/Noah):抓 Holdings 与 Cashflow Statement / Transaction Details 页 → nav_data/nominee_cashflow.json。若某月无 cash activity,对应月份写 null + "no_activity": true。 4. 关键词搜索辅助定位:Holdings, Transaction Details, Cashflow, Closing Balance, Reinvestment, Dividend, Subscription, Redemption, Goldman, Liquid MMF Reinvestment 派生(合并到本 Subagent 末尾)
Guard clause:若 profile.has_mmf == falsemmf_reinvestment.json{},跳过以下全部。
nominee_cashflow.json 中抽取跨期 reinvestment → nav_data/mmf_reinvestment.json 字段:

Subagent C — 当期 Investment 支持文件 + Payment Log

输入:profile.folders.investment[]profile.key_files.payment_log 任务: 1. 对每个持仓文件夹,按优先级寻找 supporting 文件并提取关键信息: 2. 加密 PDF 处理:若 PDF 加密,搜索同级 Pw*.txt 取密码,用 pikepdf 解锁后再用 fitz 读取 3. 写入 nav_data/investment_support.json:字段包括 investment, type, source_file, source_priority, ending_balance, net_contributions, net_income, capital_call_total, capital_call_components, distribution_total, page_refs 4. 读取 Payment Log,筛选 From == fund_name 且 Value Date 在期内 → nav_data/payment_log.json
Guard clause:若 profile.folders.investment 为空或不存在 → investment_support.json[]

Subagent D — 上期对比基准

输入:profile.prior_period_dir + profile.prior_period_files.fs_pack / .ipa 任务: 1. 读取上期 TB / SOFI(或 IPA)→ nav_data/prior_cost.jsonnav_data/prior_mv.json 2. 字段:每个持仓的 Prior Cost / Prior MV / Prior UGL,以及上期 TB 现金余额
Guard clause:若 profile.prior_period_dir 为空或不存在 → prior_cost.json / prior_mv.json{},并在 stdout 警告"上期数据缺失,Cost/UGL 对比将不可用"。
---

Step 2:并行生成截图(3 个 subagent,分别面向三份报告)

关键原则:截图与报告必须分离。先生成全部 PNG,验证文件存在,再交给 report skill。
截图标注规范:所有 subagent 必须先读取 references/screenshot_spec.md 并严格遵守。

Subagent X — Cash Review 截图 → .cortex/screenshots/cash/

| 文件名模板 | 来源 | 标注内容 | |------------|------|---------| | cash_balance_summary.png | Cash Appraisal P.1 或 FS Pack Cash sheet | 各账户期末余额行 | | bank_<bank>_<month>_p1.png | 银行对账单(本位币账户页) | 期末余额 + 关键交易 | | bank_<bank>_<month>_subsequent.png | Subsequent 对账单 | 期后交易 | | nominee_<platform>_<month>_cashflow.png | Ark/Noah monthlyStatement | Cashflow Statement 页 | | PL_<PN>.png | Payment Log XLSX 渲染 | PN / From / To / Amount / Value Date | | PI_<PN>.png | PI PDF(P.1/P.3) | 付款指令 + 发票/Contract Note | | email_<source>.png | .msg / .eml 解析后渲染 | 关键金额 + 日期段落 |
Guard clause:若 profile.has_nominee == false → 跳过所有 nominee_* 截图。
Payment Log / Email 截图细则:详见 references/payment_log_spec.md,必须先读取并严格遵守。

Subagent Y — Investment Cost Review 截图 → .cortex/screenshots/inv_cost/

| 文件名模板 | 来源 | 标注内容 | |------------|------|---------| | prior_ipa.png / prior_cost.png | 上期 IPA / SOFI(宽表裁顶部 ~200pt @ 3× zoom,仅红边描线) | Cost 列、报告日期 | | current_ipa.png / current_cost.png | 当期 IPA / SOFI(同上) | Cost 列、报告日期 | | investment_movement.png | Investment Movement Summary | 当期所有活动行 | | capital_call_<n>.png | Capital Call Notice PDF | Component 金额行 | | distribution_<n>.png | Net Distribution Notice PDF | Total / Recallable / Non-recallable / Tax Withholding | | ilpa_section_c_<n>.png | ILPA Notice Section C | 各分项金额 + 2.17 列 | | mmf_holdings_<month>.png | Ark/Noah monthlyStatement Holdings 页 — 个股持仓行 | Closing Market Value、Period end date | | mmf_reinvestment_<month>.png | Ark monthlyStatement Transaction Details | Reinvestment 行 Shares / Div Rate / Posn | | nominee_txn_details_<month>.png | Ark monthlyStatement "交易明細 Transaction Details" 页 — 非 Reinvestment 交易行 | 赎回 Redemption / Stock Deposit / Subscription 的 Transaction Amount 金额列(红框 highlight) |
Guard clause:若 profile.has_mmf == false → 跳过所有 mmf_* 截图。
Guard clause:若 investment_movement.json 为空 → 跳过 investment_movement.png
MMF Holdings 截图注意:截个股持仓行(JPM/GS individual lines),不得截 Holdings 汇总封面。

Subagent Z — Investment Unrealized G/L Review 截图 → .cortex/screenshots/inv_ugl/

| 文件名模板 | 来源 | 标注内容 | |------------|------|---------| | prior_mv.png | 上期 SOFI / IPA | MV / UGL 列 | | current_mv.png | 当期 SOFI / IPA | MV / UGL 列 | | mv_support_<inv>.png | 持仓对应 CAS / Investor Statement / monthlyStatement | Ending Balance / MV 字段 | | mv_support_<mmf_id>.png | MMF 持仓 Ark/Noah monthlyStatement Holdings 页(如 mv_support_goldman.png) | Closing Market Value 行 | | tb_ugl.png | TB sheet | Unrealized G/L 科目行 |
Guard clause:若 prior_mv.json{} → 跳过 prior_mv.png
MMF MV Support 强制规则:即使 MMF 持仓没有外部 GP 报告,也必须生成 mv_support_<mmf_id>.png(来源 = Ark/Noah monthlyStatement Holdings 页,与 inv_cost 的 mmf_holdings_<期末月>.png 可复用同一张图)。UGL Review 报告每个 MMF 持仓的 supporting block 必须有 5 张截图(Prior MV p1/p2 + Current MV p1/p2 + MV Support),不允许只有 4 张。
孤儿持仓识别(强制):截图前必须先核对 verified_cost.json 投资清单。Investment 文件夹下任何 fund 若未在 verified_cost.json 出现(如已退出但文件夹保留),属于孤儿持仓 → 为该 fund 生成 mv_support_*.png。如果上一期遗留了孤儿截图,记录在 stdout 警告 "孤儿截图:mv_support_<inv>.png(fund 未在 verified_cost 中,UGL 报告将不引用)" 但删除该截图(保留供审计追溯)
Guard clause:若 prior_mv.json{} → 跳过 prior_mv.png
MMF MV Support 强制规则:即使 MMF 持仓没有外部 GP 报告,也必须生成 mv_support_<mmf_id>.png(来源 = Ark/Noah monthlyStatement Holdings 页,与 inv_cost 的 mmf_holdings_<期末月>.png 可复用同一张图)。UGL Review 报告每个 MMF 持仓的 supporting block 必须有 5 张截图(Prior MV p1/p2 + Current MV p1/p2 + MV Support),不允许只有 4 张。
孤儿持仓识别(强制):截图前必须先核对 verified_cost.json 投资清单。Investment 文件夹下任何 fund 若未在 verified_cost.json 出现(如已退出但文件夹保留),属于孤儿持仓 → 为该 fund 生成 mv_support_*.png。如果上一期遗留了孤儿截图,记录在 stdout 警告 "孤儿截图:mv_support_<inv>.png(fund 未在 verified_cost 中,UGL 报告将不引用)" 但删除该截图(保留供审计追溯)。
---

Step 3:截图文件存在性验证

生成后必须执行:
Get-ChildItem -Path "<target_dir>\.cortex\screenshots" -Recurse -Include *.png |
  Select-Object FullName, Length |
  Format-Table -AutoSize
任何应有但缺失的截图 → 立即用 run_in_terminal 直接生成补齐,不要交回主流程。 ---

完成检查表

---

关键注意事项

1. 数据全量提取:JSON 中保存原始字段足够丰富,让 report skill 不需要再回去读 PDF/XLSX。 2. Investment 支持文件优先级:PDF > .msg/.eml > 其他 > 非 Investment 文件夹。在 investment_support.json 中记录 source_priority。 3. MMF 跨期规则:monthly = 仅次月(1 期);quarterly = M2+M3+M4(3 期)两种频率均不计入首月 / 当月。每个 period 必须带 month: "YYYY-MM" 字段,供下游 report skill 按月匹配 supporting 截图。派生逻辑在 Subagent B 末尾完成。 4. TB 频率影响搜索范围:profile.period_type=monthly → 只读当月;quarterly → 读整季 + 季后一月。 5. 截图脚本与报告脚本分离:本 skill 结束时必须有 PNG 文件落盘,不能依赖临时变量。 6. Subagent 容错:失败立即降级为 run_in_terminal 直接执行,不要重试同一 subagent。 7. 本 skill 不构建 Word、不计算最终结论:只做数据收集和视觉证据准备。校验公式由 report skill 负责。