Back to skills
extension
Category: OtherAPI key required

企业股权深度分析报告

生成企业股权结构与关联企业深度分析报告(HTML→SVG+PNG→PDF)。 涵盖实控人穿透、股权架构四层可视化、控制力六档分档评估、关联企业全景梳理及关键风险揭示五大模块。 适用场景包括:港股/内地上市公司实控人核查、非上市企业股权架构梳理、BVI/信托多层穿透。 当用户请求分析企业股权、绘制架构图、穿透实际控制人或生成股权报告时使用此技能。

personAuthor: user_87fe9f99hubcommunity

企业股权结构深度分析报告生成

概述

基于水滴信用 MCP 平台,生成含 SVG 股权架构图、控制力分档评估、关联企业全景清单的标准化 PDF 报告。采用 warm-tech 配色(#F7F4ED / #D4A574 / #2C3E50)。报告结构见下文,CSS/分页/页面宽度规范见 references/layout-fundamentals.md

MCP 依赖与配置

前置检查

执行本技能前,须确认以下水滴信用 MCP 服务均已配置:

| MCP 服务 | 功能 | 股权报告关键工具 | |----------|------|---------------| | shuidi_data | 企业工商与股权数据 | get_company_infoget_company_controllerget_company_beneficial_ownerget_company_partnerget_company_investmentpierce_equity | | shuidi_listed | 上市公司信息 | get_quoted_company_info(识别上市状态与股票代码) |

检查方法:调用 mcp_data_query_get_company_info 确认返回 status_code: 1。若失败须提示用户配置 MCP。

MCP 配置方法

{
  "mcpServers": {
    "shuidi_data": {
      "url": "https://data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
    },
    "shuidi_risk": {
      "url": "https://risk.data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
    },
    "shuidi_qc": {
      "url": "https://qc.data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
    },
    "shuidi_sti": {
      "url": "https://sti.data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
    },
    "shuidi_bid": {
      "url": "https://bid.data.shuidi.cn/mcp/?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
    }
  }
}

获取凭证:访问 水滴信用开放平台 申请 SHUIDI_MCP_PNAMESHUIDI_MCP_PKEY。注入环境变量:

export SHUIDI_MCP_PNAME="your_project_name"
export SHUIDI_MCP_PKEY="your_project_key"

配置路径~/.hermes/profiles/<profile>/mcp.json~/.hermes/config.yamlmcp 字段。

依赖缺失处理

股权报告对 MCP 依赖精简——仅 shuidi_data 为核心必需(8 项关键调用均来自此服务)。shuidi_listed 在查询上市公司时使用,缺失时标注「上市信息不可获取」。其他服务(shuidi_risk / shuidi_sti / shuidi_bid)在本报告中不直接使用。

报告结构

| 章节 | 内容 | 关键输出 | |------|------|---------| | 封面 | 深蓝渐变底,中英文标题,股票代码,免责声明 | @page cover | | 目录 | target-counter 自动页码,虚线点引 | @page toc | | 第一章 | 执行摘要(150-200 字 + 指标速览卡片) | 8 卡网格 | | 第二章 | 企业基本信息 + 控股平台穿透 + 实控人分析 + SVG 架构图 | SVG→PNG 嵌入 | | 第三章 | 关联企业全景(投资概览 + 23 家企业分类清单) | .name-col | | 第四章 | 控制力分档(6 档:全资/绝对/控股/实质/相对/参股 + CSS 柱状图) | 6 色分档 | | 第五章 | 关键发现与风险提示(控制权稳定性/信托架构/代际传承/少数股东权益) | AI 解读 |

数据获取 — 8 项并行 MCP 调用

| 工具 | 返回数据 | |------|---------| | mcp_data_query_get_company_info | 工商登记信息 | | mcp_data_query_get_company_controller | 实际控制人 | | mcp_data_query_get_company_beneficial_owner | 受益所有人 + 控制路径 | | mcp_data_query_get_company_partner(page_index=0) | 股东出资明细 | | mcp_data_query_get_company_investment(page_index=0) | 对外投资清单 | | mcp_data_query_pierce_equity(direction=1) | 向上股权穿透 | | mcp_data_query_pierce_equity(direction=0) | 向下股权穿透 | | mcp_data_listed_get_quoted_company_info | 上市公司信息(如有) |

以上 8 项在首轮一次性并行发起。返回 status_code: 2 的项标注「数据缺失」,不省略该模块。

SVG 股权架构图规范

详见 references/svg-diagram-spec.md。核心规则:

  • 四层递进布局:自然人实控人 + 法人平台 → 上市公司主体 → 中间控股平台 → 目标公司 → 三列子公司(全资/控股/参股)
  • 合并规则:上游股东 >5 个时第 6 名起合并为「其他股东(合并),合计约 X%」虚线框;下游参股企业 >4 个时持股 <20% 的合并
  • 节点配色:自然人 #D4A574→#c09060 圆角 rx=25;法人平台 #87A878→#6d9168 rx=8;上市公司 #2C3E50→#1a2a38 rx=10 加阴影;目标公司 #D4A574→#b08050 rx=8 加★前缀
  • 线型:直接持股用虚线(stroke-dasharray="6,3"),间接控股用实线,线上标注持股百分比
  • viewBox"0 0 1000 800",背景渐变 #f8f6f1→#efebe0
  • 全局字体font-family="Source Han Sans SC, sans-serif"(非等宽;SVG text 在 WeasyPrint 中无法渲染中文 → 须 rsvg-convert 转 PNG 后 <img> 嵌入)
  • SVG 转 PNGrsvg-convert --width=1200 架构图.svg -o 架构图_hd.png
  • HTML 嵌入<img src="<os.path.abspath(png)>" style="..."/>(WeasyPrint 须绝对路径)

数据内联 + HTML 组装原则

所有 MCP 查询结果直接内联写入 Python 脚本数据字典区,同一脚本完成数据提取 + SVG 生成 + PNG 转换 + HTML 组装 + PDF 渲染。HTML 组装全程使用 ''.join(parts) 而非 f-string,零花括号变量泄漏风险。

PDF 输出规范

| 要素 | 规范 | |------|------| | 字体 | CSS font-family: "Source Han Sans SC" + WeasyPrint FontConfiguration() | | 页面宽度 | .page { width: 180mm } = 210mm - 2×15mm(@page margin) | | 盒模型 | CSS 首行 * { box-sizing: border-box; } | | 分页 | 每章 .page { page-break-before: always };封面 .cover { page-break-after: always };表格/AI 框 page-break-inside: avoid | | 封面定位 | .cover { height: 297mm; overflow: hidden } + .cover-footer { margin-top: auto } | | 体积 | 正常 600-750KB(含嵌入字体 + 170KB PNG 架构图) |

禁止:@font-face + file:/// URL(WeasyPrint 不可靠解析)、SVG <text> 直接嵌入 PDF(中文方框)

关键陷阱与处置

| # | 陷阱 | 处置 | |---|------|------| | 1 | .page width 与 @page 内容区不匹配 → 溢出/留白 | .page width = 210mm - 2×@page-margin | | 2 | 未设 box-sizing: border-box → 内容右溢 | CSS 首行声明 | | 3 | SVG text 直接嵌入 → 中文方框 | rsvg-convert 转 PNG 后 <img> 嵌入 | | 4 | SVG & 未转义 → XML 解析错误 | svg_escape()&amp; | | 5 | os.path.expanduser("~") 重复拼接 | 硬编码 workspace 绝对路径 | | 6 | WeasyPrint img src 用相对路径 | os.path.abspath() | | 7 | f-string 花括号未转义 → 变量泄漏 | ''.join(parts) 拼装 HTML | | 8 | 表格名称列截断 | .name-col { white-space: nowrap } | | 9 | AI 解读缺失数据来源声明 | 每个章节末尾含【AI 深度解读】段落,标注数据获取方式 | | 10 | AI 解读用 emoji | 纯文本【】标记 |

详细诊断与修复方案见 references/pitfalls.md

验证清单

  • [ ] 8 项 MCP 工具已并行调用
  • [ ] SVG 通过 ElementTree.parse() 验证,& 已转义
  • [ ] PNG 转换成功,<img> 以绝对路径嵌入 HTML
  • [ ] validate_html() 零花括号变量残留 + <img> 标签存在
  • [ ] 封面声明位于封面底部(margin-top: auto
  • [ ] 所有章节末尾含 AI 深度解读,无 emoji
  • [ ] PDF 600-750KB,中文正常渲染
  • [ ] 控制力分档表颜色正确(6 档 6 色)
  • [ ] 目录自动页码正常(WeasyPrint target-counter