基金尽调的图表实践:AI辅助下的HTML、VBA与Python制图路径
2026.05.14 | 作者:廖奕霖 | 来源:投资基金
一、写在前面:基金尽调为什么需要图表化

 

近期,Claude Code 团队的工程师 Thariq Shihipar 对 HTML 的推崇,给基金尽调报告写作提供了一个很有意思的参照。他认为 HTML 相较 Markdown 更适合作为 AI Agent 输出格式,并展示了 20 个自包含的 HTML 示例,覆盖规划、代码审查、设计、图表、报告和自定义编辑界面等场景;Karpathy 也在社交媒体上对此表示认同;Simon Willison 则进一步指出,在长上下文模型和 Agent 工作流中,HTML 能够容纳更复杂的信息层级。[1]

表面上是程序员社区关于 Markdown 与 HTML 的偏好变化,放到基金尽调业务中看,指向一个更加实际的问题:当尽调报告越来越长、越来越复杂的情况下,基金律师真正需要的不是更多文字,而是更可阅读、更可核对、更可控制的信息组织方式。基金尽调报告天然包含大量结构化信息:基金管理人基本情况、基金产品架构、核心条款、投资决策流程、已投项目、退出情况和储备项目,律师的任务就变成了如何在复杂主体、基金结构、投资关系、资金流向和合规风险之间建立清晰关系的表达工具。

AI 的价值在于降低图表制作和工具使用的门槛。过去,使用 HTML、VBA 或 Python 制图,往往意味着需要先掌握一定代码能力;现在,基金律师可以用自然语言描述表格结构、字段口径、呈现要求,并提供参考范例,由 AI 先生成可编辑的表格、脚本或图像,再结合基金文件、工商资料、投决材料和财务数据进行核对、修正和完善。换言之,AI 可以帮助律师更快地把专业判断转化为一张可以核对、可以讨论、可以交付的图表。

基于这一思路,本文拟探讨在 AI 辅助下,基金尽调报告中各类图表的绘制路径。相关方法并不局限于基金尽调,其他非诉业务,乃至部分诉讼法律文件中的事实梳理、关系呈现和风险表达,也可以参照使用。

 

 
二、问题由来:基金律师的“图表焦虑”
 

在基金尽调业务中,文字是最主要的表达工具。基金律师习惯将尽调过程、主要事实、访谈记录和风险建议等用文字搭建一篇报告,但读者未必总能沿着这条文字路径走下去。尤其在基金架构、出资关系、投资链条和资金流向等问题上,关键的信息不总是藏在某一个句子里,而是藏在多个主体、多个文件和多个时间节点之间的关系中。

 

例如,一次基金管理人尽调可能同时涉及登记备案、实际控制人、股东穿透、核心团队、投资决策机制、内控制度和历史业绩等。若全部依靠段落说明,读者很容易在信息密度较高的部分迷失。一张清晰的基金架构图、一条准确的资金流向线、一份按风险等级排列的问题清单,往往比三页连续论述更快触达问题核心。基金尽调图表在这里承担的角色,不是替代尽调报告,而是把尽调分析翻译成更容易进入决策讨论的界面。

 

实践中,基金律师也早已意识到图表的重要性,现行实践中也不乏对各类图表的运用。问题在于,传统制图方式并不高效。基金律师常用 Visio、Word 或 PPT 手工绘制基金架构图、股权穿透图、投资流程图和风险统计表。它们的优点是上手直观,缺点也很明显:一旦补充材料、基金结构调整、底层项目新增、持股比例更新或监管口径变化,图形就要反复移动、对齐、改线、调色。一个下午可能不是花在尽调判断上,而是花在拖动文本框和箭头上。更麻烦的是,手工绘图很容易出现版本错误:正文已经改了,图没有改;基金名称已经统一,图中仍保留旧简称;数据已经更新,表格仍停留在上一版口径。

 

在 AI 介入之后,事情正在发生变化。对于基金律师来说,重要的是能否把基金尽调问题拆成清楚的字段、层级、关系和校验规则。只要基金律师能说清楚“这张表要比较哪些基金产品、依据哪些材料、风险如何分级、哪些单元格需要合并、哪些字段必须标注来源和截止日”,AI 就可以生成一个可继续修改的表格雏形。

 

因此,基金尽调报告中的图表不是装饰性工作,而是基金法律服务交付方式的一部分。它影响阅读效率,也影响事实核对、风险判断、投决沟通和交付质量。

 

 
三、基本要求:基金尽调图表应当满足什么标准

 

基金尽调图表的审美标准,应当由它所服务的业务场景决定。商业咨询报告追求视觉冲击,信息图追求传播效率;基金尽调报告追求的是事实可靠、逻辑可循、风险可核、口径可复用。在多数正式基金尽调文书中,朴素、平实、克制是与尽调报告自身的严肃性相匹配的表达选择。

 

AI 使图表的生成变得更快,但不改变图表应当满足的专业标准。无论表格结构由基金律师手动搭建,还是由 AI 根据提示词起草初稿,基金尽调图表都应当经得起以下几项基本检验:

 

序号

基本要求

具体含义

实务提示

内容质量:尽调图表画的对不对

1

事实准确

图表中的每一个要素——基金名称、管理人名称、GP/LP 身份、持股比例、认缴与实缴金额、投资金额、退出金额、时间节点、风险等级——都应与正文结论和底稿材料保持一致。准确不只是数字无误,也包括关系类型不含混:箭头表示的是出资、持股、委托管理、投决授权、资金划转还是控制关系,必须可辨。

不能为了画面均衡或表达简化而改变基金法律关系。若正文结论是“实际控制”而非“直接持股”,图中的连线方式和标注就应当体现这一区别。

2

来源可追溯

图表中的每一项信息,都应当能够回溯到具体底稿材料——基金合同、合伙协议、工商档案、AMBERS 备案信息、投资决策文件、出资凭证、银行流水、审计报告、项目协议、访谈纪要或客户确认文件。

重要图表宜在图注、脚注或正文中标明数据来源和截止时点,例如“根据目标基金管理人提供的截至 2026 年 4 月 30 日的基金产品台账整理”。

表达规范:尽调图表呈现得稳不稳

3

风格克制统一

图表的字体、配色、线条和层级应当与基金尽调报告的表达秩序保持一致。尽调报告本身追求克制和规范,图表不应成为报告中视觉风格突变的部分。

正式报告中通常以黑、白、灰为底色,辅以一到两种强调色区分风险等级、主体类型或关系类型。颜色不宜过多,线条不宜过花。

4

功能充分

制图工具的表达能力应当匹配基金尽调场景的复杂度。如果图表需要合并单元格、多层表头、跨行说明、文件索引、穿透层级或精确排版,所选工具就必须支持这些功能。

简单问题清单可继续使用Markdown 表格;涉及基金产品矩阵、股权穿透结构或资金流向图的,宜引入 HTML、VBA 或 Python。

工程可行:尽调图表改得动、交得出

5

便于修改

基金尽调中的修改高频发生:管理人名称更正、基金产品新增、交易结构调整、项目数据更新、数据口径变化、风险判断升降级。图表必须能够被快速、精确地局部修改,而不是每次变动都要整体重做。

优先选择能够精确修改节点、文字和数据的制图方式。若使用AI 生成脚本,应保留提示词、源代码和数据文件,以便材料更新后重新生成。

6

交付兼容

基金尽调成果可能在Word/WPS、PDF、微信、邮件、打印件和投影屏幕中流转,同一张图表需要在不同环境中稳定呈现,不能出现字体缺失、边框错位或分辨率劣化。

制图时应提前确认最终交付格式,测试字体嵌入、图片清晰度和导出效果。图片建议使用300 dpi 或更高规格导出。

 

上述六项要求,归根结底指向两件事。第一件是尽调判断层面的可靠:图表中的主体、关系、数据和结论能够被逐项追溯到依据,经得起复核和质疑。第二件是工程层面的可维护:当基金资料补充、口径调整或交付格式切换时,图表能够被快速、准确地修改,而不是只能推倒重来。一张基金尽调图表如果在这两个维度上站得住,形式是否精美反而是次要问题。接下来的问题就是:用什么工具、沿什么路径,才能在基金律师的日常尽调工作中比较可靠地满足这些要求。

 
 
四、三条路径:HTML、VBA 与 Python

 

(一)HTML:解决复杂表格问题

 

对于基金尽调报告而言,HTML 最直接的价值在于表格。很多 Markdown 编辑器和文档平台支持在 Markdown 中直接嵌入 HTML。借助 HTML 的 rowspan 和 colspan 属性,可以实现原生 Markdown 表格做不到的跨行、跨列和复杂表头。[2]

 

这一路径尤其适合制作基金管理人尽调问题清单、基金产品对比表、风险等级表和整改建议表。它不需要完整开发网页,也不需要复杂环境;即便不熟悉 HTML,也可以把字段、合并单元格规则和样式要求告诉 AI,让 AI 生成可嵌入 Markdown 的表格初稿。它可以留在现有写作流程中,不必切换到专门制图软件,尤其适合“正文中的表格”,而不是“独立的大图”。例如,基金管理人尽调中的文件清单往往不只是简单列材料名称,还要同时记录文件类别、取得状态、底稿编号、核查要点、风险提示和补充要求。此时可以用 colspan 做多层表头,用 rowspan 合并同一核查模块下的多份文件。

 

当然,HTML 也有边界。不同 Markdown 渲染器对 HTML 和 CSS 的支持并不完全一致。若后续要导出 Word 或 PDF,应当提前测试最终交付格式。对于重要的基金尽调报告,建议采用尽量朴素的 HTML 表格结构,少用复杂 CSS,减少跨平台渲染风险。

 

(二)VBA:在报告的原生环境中自动制表

 

VBA 常被视为上一代办公自动化工具,但在尽调报告交付中,它仍然很有生命力。原因很简单:Word 仍然是尽调服务交付的核心格式之一。无论是尽调报告、法律意见书还是备忘录,很多最终成果都要回到 Word 中。既然最终交付环境是 Word,那么使用 Word 原生能力自动生成表格、批量设置样式、插入统计图,就具有天然优势。[3]

 

VBA 的价值在于处理重复劳动。例如,批量生成基金产品统计表、将 Excel 中的问题清单导入 Word、按照风险等级给单元格着色、统一调整表格宽度和字体、生成投资项目分布图后自动插入指定位置。这些工作如果手工完成,非常耗时;如果用 VBA 自动化,则可以让基金律师把精力放回资料核查、风险判断和报告表述。在实际工作中,VBA 不一定要先依赖 Excel。更直接的做法,是把表格结构、字段名称、示例数据和样式要求直接告诉 AI,让 AI 生成一段可以在 Word 宏编辑器中运行的 VBA:运行后自动插入表格、填充内容、设置标题行、字体、边框和列宽。Excel 仍然适合存放长期维护的基金产品台账、项目台账和风险台账,但对于一次性的基金统计表、投资能力说明表或项目汇总表,基金律师完全可以先让 AI 生成可运行宏,在 Word 中直接得到原生表格。

 

VBA 的不足也很明确。它依赖 Office 环境,宏安全设置可能影响运行;在 WPS、Mac 版 Office 或不同版本 Word 中,兼容性需要测试;宏代码也需要妥善管理,避免把含有敏感信息随文档外发。

 

(三)Python:生成高质量可复现图表

 

如果说 HTML 适合解决复杂表格,VBA 适合解决 Word 内部自动化,那么 Python 则适合处理更高阶的基金尽调图表生成任务。它特别适合三类场景:一是基于数据的统计图,如基金产品数量分布、已投项目行业分布、退出方式分布、风险事项类型分布;二是结构关系图,如基金架构图、股权穿透图、资金流向图;三是需要重复生成的标准化图表,如每个项目都要输出的风险矩阵、时间轴和问题分布图。

 

更准确地说,尽调图表中的 Python 通常不是单独发挥作用,而是借助若干成熟库形成一条小型流水线。pandas 适合读取和整理 Excel 台账,把基金产品、投资项目、风险事项等原始数据清洗成可绘图的数据表;Matplotlib 是最基础也最常用的制图库,适合生成柱状图、饼图、时间轴、矩阵图以及可插入 Word 或 PDF 的高分辨率图片。

 

Python 的优势在于可复现。手工绘图通常只留下一个结果文件,而 Python 可以留下数据、代码和输出图片三层痕迹。只要原始数据更新,重新运行脚本即可生成新图。当然,生成图片的技术路径很多,Python 只是其中一种较便于举例和复现的路线。过去,这一层最容易把非技术背景的律师挡在门外;但在 AI 辅助下,基金律师可以先给出数据样式和目标图形,让 AI 生成脚本并解释每一段作用。

 

回到本节的主线:HTML、VBA 和 Python 并不是三个相互排斥的选项,而是分别对应不同的基金尽调交付场景和复杂度层级。正文中需要嵌入的复杂表格,用 HTML 最轻量;Word 报告内部的批量制表和格式统一,用 VBA 最原生;需要数据驱动、高分辨率、可复现的基金架构图或统计图,用 Python 最灵活。基金律师可以从自己最常遇到的尽调场景开始,逐步扩展工具边界。

 

 

五、场景示例:三个基金尽调图表的生成路径

 

(一)基金管理人尽调文件清单:HTML 路径

 

基金管理人尽调中最基础的文件是尽调文件清单——按核查模块列示应取得材料、实际取得状态、重点核查事项以及补充要求。这类清单用原生 Markdown 表格虽然也能写,但一旦涉及主体资格、登记备案、内部治理、风控体系、基金产品和投资项目等多个模块,普通表格很容易变成一张长而平的材料台账,难以同时呈现“文件分类”和“核查进度”。

 

HTML 的 rowspan 和 colspan 属性可以很自然地解决这个问题。下面的示例中,表头用 colspan 把“底稿管理”和“核查记录”分成两个字段组;表体用 rowspan 合并“主体资格与登记备案”“内部治理与风控体系”“基金产品与投资项目”等核查模块,并在每个模块下继续区分主体资格文件、登记备案文件、治理文件、合规风控文件、基金产品文件和投资项目文件。这样一来,读者既能横向查看某一份文件的取得状态和核查意见,也能纵向判断哪一类材料仍需优先补充。

 

律师不需要记住这些合并单元格的具体写法。更实际的做法是,把表格规则用自然语言告诉 AI:第一列按核查模块合并,第二列按文件类别合并,表头分为底稿管理和核查记录两组,逐行列示文件名称、取得状态、底稿编号、日期、重点核查事项和补充要求,并在表尾汇总需优先补充的材料编号。AI 生成 HTML 初稿后,基金律师再核对文件名称、时间口径等是否与实际材料一致。

 

代码示例:

 




 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
基金管理人尽调文件清单及核查记录
核查模块 文件类别 文件名称 底稿管理 核查记录
取得状态 底稿编号 截止/签署日期 重点核查事项 补充要求或风险提示
主体资格与登记备案 主体资格文件 营业执照、公司章程及历次章程修正案 已取得 A-01 2026-04-30 核对管理人名称、注册资本、经营范围、股权结构及章程约定的治理机制。 如章程与工商档案不一致,应要求管理人说明差异原因并补充最新工商调档材料。
股东名册、实控人说明及穿透结构图 部分取得 A-02 2026-04-30 核查实际控制人认定、股东穿透层级及是否存在代持或一致行动安排。 尚需补充自然人股东身份证明、上层持股平台合伙协议及实控人确认函。
登记备案文件 私募基金管理人登记证明及协会公示截图 已取得 A-03 2026-05-10 核对登记类型、登记时间、机构诚信信息、异常经营信息及是否存在纪律处分记录。 报告中应注明协会公示信息的查询日期,避免后续公示信息更新造成口径不一致。
重大事项变更报送记录 未取得 A-04 待补充 核查股权变更、高管变更、实际控制人变更等事项是否按监管要求及时报送。 列为高优先级补充材料;未能提供的,应在问题清单中单独披露。
内部治理与风控体系 治理文件 股东会、董事会或执行董事决议文件 部分取得 B-01 2024-01-01 核查重大事项决策权限、会议召集程序、表决方式及决议签署完整性。 缺少 2025 年度部分会议资料,应补充会议通知、签到表及表决记录。
投委会名单、议事规则及历次投决会议纪要 已取得 B-02 2024-01-01 核查投委会成员资格、回避机制、表决比例及实际执行情况。 如个别项目未见完整投决记录,应与投资项目底稿交叉核对。
合规风控文件 合规风控制度、利益冲突防控制度、信息披露制度 已取得 B-03 2026-03-31 核查制度是否覆盖募投管退、关联交易、利益冲突、信息披露和档案保存。 重点关注制度是否仅为模板文件,是否有对应执行记录支撑。
员工投资、跟投及关联交易台账 部分取得 B-04 2026-04-30 核查员工跟投安排、关联方交易审批及信息披露情况。 尚需补充关联方清单及管理人关于不存在未披露关联交易的书面确认。
基金产品与投资项目 基金产品文件 基金合同、合伙协议及补充协议 已取得 C-01 各基金签署日 核查基金期限、投资范围、管理费、收益分配、投资限制及 LP 特殊权利安排。 对存在差异化条款的基金,应另行制作产品对比表。
基金备案回执、募集监督协议及托管协议 部分取得 C-02 待补充 核查募集账户、托管安排、备案完成时间及基金合同签署时间之间的匹配关系。 缺少两只历史基金的托管协议,应补充后再判断募集流程合规性。
投资项目文件 项目立项报告、尽调报告、投决材料及投资协议 已取得 C-03 2024-01-01 核查项目筛选、尽调、估值、投决和协议签署是否符合基金合同及内部制度。 对投决程序倒置或材料缺失项目,应在风险问题清单中单独列示。
投后管理报告、退出决策文件及收益分配记录 部分取得 C-04 2024-01-01 核查投后跟踪频率、重大事项报告、退出审批及收益分配是否留痕完整。 尚需补充已退出项目的收益分配测算表及 LP 通知记录。
需优先补充材料汇总 A-04、B-01、B-04 上述材料影响登记备案合规性、内部治理执行情况、募集托管流程及投后退出核查结论,应在出具正式尽调报告前完成补充或取得管理人书面说明。

 

运行结果:

 

 

(二)基金认缴、实缴及已投资金额柱状图:VBA 路径

 

基金律师经常需要在尽调报告中比较不同基金产品的规模和资金使用情况:每只基金的认缴规模是多少,实缴资金到位到什么程度,已投资金额占实缴金额的比例大致如何。若只用文字列示,读者需要在段落中逐项寻找数字;若用一张并列柱状图呈现,基金之间的募集进度、资金到位情况和投资节奏会更直观,也更便于和正文中的投资能力、管理能力分析相互印证。

 

VBA 的价值在于,它可以直接在 Word 中生成原生图表,而不是先在 Excel 中画图、截图,再粘贴回报告。基金律师可以把统计口径、示例数据、图表标题、颜色和图注要求告诉 AI,让 AI 生成一段可在 Word 宏编辑器中运行的代码。宏执行后,Word 会插入一张并列柱状图,并把“认缴金额”“实缴金额”“已投资金额”三组数据写入图表系列;后续如果底稿数据更新,只需要修改代码中的数组或改为读取 Excel 台账,再重新运行即可。

 

下面这段示例代码可以在 Word 的 VBA 编辑器中运行,用虚构数据生成一张“基金认缴、实缴及已投资金额对比”的并列柱状图。示例金额以“亿元”为单位;实务中,律师只需替换 fundNames、committedValues、paidInValues 和 investedValues 几组数组,并在图注中注明数据来源和截止日期:

 

代码示例:

 

Sub InsertFundAmountComparisonBarChart()

Const xlColumnClustered As Long = 51

Const xlCategory As Long = 1

Const xlValue As Long = 2

Const xlLegendPositionBottom As Long = -4107

 

Dim fundNames As Variant

Dim committedValues As Variant

Dim paidInValues As Variant

Dim investedValues As Variant

Dim seriesIndex As Long

 

Dim chartShape As InlineShape

Dim chartObj As Chart

Dim seriesObj As Object

 

fundNames = Array("一期基金", "二期基金", "三期基金", "专项基金A", "成长基金B")

committedValues = Array(10#, 15#, 8#, 6#, 20#)

paidInValues = Array(8.5, 12#, 6.4, 4.8, 16.5)

investedValues = Array(7.1, 9.8, 5.5, 3.2, 12.6)

 

Selection.TypeText "五只基金认缴、实缴及已投资金额对比图(示例)"

Selection.TypeParagraph

 

Set chartShape = Selection.InlineShapes.AddChart2( _

Style:=-1, Type:=xlColumnClustered)

chartShape.Width = CentimetersToPoints(15)

chartShape.Height = CentimetersToPoints(8)

 

Set chartObj = chartShape.Chart

 

With chartObj

.ChartType = xlColumnClustered

 

Do While .SeriesCollection.Count > 3

.SeriesCollection(.SeriesCollection.Count).Delete

Loop

 

For seriesIndex = 1 To 3

If .SeriesCollection.Count < seriesIndex Then

Set seriesObj = .SeriesCollection.NewSeries

Else

Set seriesObj = .SeriesCollection(seriesIndex)

End If

 

With seriesObj

.XValues = fundNames

 

Select Case seriesIndex

Case 1

.Name = "认缴金额"

.Values = committedValues

.Format.Fill.ForeColor.RGB = RGB(79, 129, 189)

Case 2

.Name = "实缴金额"

.Values = paidInValues

.Format.Fill.ForeColor.RGB = RGB(155, 187, 89)

Case 3

.Name = "已投资金额"

.Values = investedValues

.Format.Fill.ForeColor.RGB = RGB(192, 80, 77)

End Select

 

.ApplyDataLabels

End With

Next seriesIndex

 

.HasTitle = True

.ChartTitle.Text = "五只基金认缴、实缴及已投资金额对比"

.HasLegend = True

.Legend.Position = xlLegendPositionBottom

.Axes(xlCategory).HasTitle = False

.Axes(xlValue).HasTitle = True

.Axes(xlValue).AxisTitle.Text = "金额(亿元)"

.Axes(xlValue).MinimumScale = 0

End With

 

chartShape.Range.Select

Selection.Collapse wdCollapseEnd

Selection.TypeParagraph

Selection.TypeText "注:示例金额为虚构数据,单位为亿元;正式报告中应注明数据来源、统计口径和截止日期。"

Selection.TypeParagraph

End Sub

 

这条路径最终交付的,仍然是 Word 中可编辑的原生图表——可以继续调整标题、颜色、数据标签和版式,不会像截图那样丧失可操作性。VBA 把重复性的图表搭建沉淀为可复用的工具,让基金律师把更多注意力留给真正需要判断的问题:认缴、实缴和已投资金额的统计口径是否一致,未实缴部分是否需要披露,已投资金额是否与项目台账、投决文件和出资凭证相互印证。

 

运行结果: 

 

 

(三)中基协备案基金架构图:Python 路径

 

中基协私募基金备案需将“产品架构图”列入私募基金的相关上传附件,这类图需要说清楚 GP/LP 的出资情况、基金管理人的登记编码、管理人对基金的受托管理关系、托管银行安排以及基金对底层项目的投资关系等。[4]

 

这类图手工用 Visio 或 PPT 绘制当然可行,但每次备案材料补充、合伙人认缴金额调整、管理人登记信息更新、托管安排变更或底层项目新增,都可能要重新移动文本框、对齐线条、调整比例标注。Python 的优势在于,可以把主体名称、认缴比例、认缴金额、受托管理关系、托管关系和投资关系写成一组可修改的数据,再由脚本稳定生成同一风格的图。基金律师不需要先学 Python,只需要把基金架构说清楚,再让 AI 转换成脚本初稿。

 

用这种方式生成的图像,背后始终有一套的数据和规则。结构调整时,律师只需更新合伙人名单、认缴比例、金额、管理人登记编码或底层项目名称,重新运行脚本即可得到新图,不必担心旧图中某条线没改、某个比例还停留在上一版。正式交付时,将 Python 生成的高分辨率 PNG 插入 Word 或 PDF 即可;团队内部协作时,保留提示词、源数据和脚本三件套,任何人都可以复核图表与基金合同、合伙协议、托管协议和项目材料之间的对应关系。

 

以下以 Matplotlib [5]为例,说明如何生成一张基金架构图。

 

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

plt.rcParams["font.sans-serif"] = ["宋体"]
plt.rcParams["axes.unicode_minus"] = False

fig, ax = plt.subplots(figsize=(16, 8))
ax.set_xlim(0, 16)
ax.set_ylim(0, 10)
ax.axis("off")

def draw_box(x, y, w, h, text, facecolor="white", fontsize=10):
    rect = mpatches.Rectangle(
        (x, y), w, h,
        facecolor=facecolor,
        edgecolor="black",
        linewidth=1.1
    )
    ax.add_patch(rect)
    ax.text(
        x + w / 2, y + h / 2, text,
        ha="center", va="center",
        fontsize=fontsize, linespacing=1.35
    )
 return (x + w / 2, y + h / 2)

# 上方列示 GP/LP 及认缴比例、认缴金额
partners = [
    {
 "name": "A 合伙企业\n(GP)",
 "ratio": "1.00%",
 "amount": "500 万元",
 "x": 0.5,
 "fill": "#d9d9d9",
    },
    {
 "name": "B 合伙企业\n(LP)",
 "ratio": "9.00%",
 "amount": "4,500 万元",
 "x": 3.6,
 "fill": "white",
    },
    {
 "name": "C 公司\n(LP)",
 "ratio": "20.00%",
 "amount": "10,000 万元",
 "x": 6.7,
 "fill": "white",
    },
    {
 "name": "D 公司\n(LP)",
 "ratio": "30.00%",
 "amount": "15,000 万元",
 "x": 9.8,
 "fill": "white",
    },
    {
 "name": "E 公司\n(LP)",
 "ratio": "40.00%",
 "amount": "20,000 万元",
 "x": 12.9,
 "fill": "white",
    },
]

box_w, box_h = 2.6, 1.35
top_y = 7.7
capital_line_y = 6.65

for partner in partners:
    center_x, _ = draw_box(
        partner["x"], top_y, box_w, box_h,
        partner["name"], facecolor=partner["fill"]
    )
    ax.plot([center_x, center_x], [top_y, capital_line_y],
            color="black", linewidth=1.1)
    ax.text(
        center_x - 0.35, capital_line_y + 0.25,
        partner["ratio"] + "\n" + partner["amount"],
        ha="center", va="bottom", fontsize=9
    )

# 认缴关系主线
first_center = partners[0]["x"] + box_w / 2
last_center = partners[-1]["x"] + box_w / 2
ax.plot([first_center, last_center], [capital_line_y, capital_line_y],
        color="black", linewidth=1.1)

# 基金主体
fund_x, fund_y, fund_w, fund_h = 5.8, 4.35, 4.4, 1.2
fund_center_x, fund_center_y = draw_box(
    fund_x, fund_y, fund_w, fund_h,
 "F 基金\n合伙企业(有限合伙)",
    facecolor="#d9d9d9", fontsize=11
)
ax.plot([fund_center_x, fund_center_x], [capital_line_y, fund_y + fund_h],
        color="black", linewidth=1.1)

# 管理人和托管银行
manager_x, manager_y, manager_w, manager_h = 0.9, 4.25, 3.3, 1.35
manager_center = draw_box(
    manager_x, manager_y, manager_w, manager_h,
 "基金管理人\nG 公司\n登记编码:P1000000",
    facecolor="white", fontsize=10
)
custodian_center = draw_box(
 11.8, 4.4, 3.3, 1.1,
 "托管银行\nH 银行",
    facecolor="white", fontsize=10
)

ax.annotate(
 "", xy=(fund_x, fund_center_y),
    xytext=(manager_x + manager_w, manager_center[1]),
    arrowprops=dict(arrowstyle="-|>", color="black", linewidth=1.1)
)
ax.text(4.85, 5.05, "受托管理", fontsize=9, ha="center")

ax.annotate(
 "", xy=(fund_x + fund_w, fund_center_y), xytext=(custodian_center[0] - 1.65, custodian_center[1]),
    arrowprops=dict(arrowstyle="-|>", color="black", linewidth=1.1)
)
ax.text(11.15, 5.05, "资金托管", fontsize=9, ha="center")

# 底层项目
project_center = draw_box(
 5.8, 1.55, 4.4, 1.15,
 "底层项目",
    facecolor="white", fontsize=10
)
ax.annotate(
 "", xy=(project_center[0], 2.7), xytext=(fund_center_x, fund_y),
    arrowprops=dict(arrowstyle="-|>", color="black", linewidth=1.1)
)
ax.text(8.45, 3.35, "项目投资", fontsize=9, ha="left")

ax.set_title("中基协备案基金架构图(示例)",
             fontsize=14, fontweight="bold", pad=18)

plt.tight_layout()
plt.savefig("amac_fund_structure.png", dpi=300, bbox_inches="tight")

 

上面这段代码只用到了 Matplotlib 的矩形框、文本和连线,就可以生成一张接近备案材料风格的基金架构图。基金律师使用这类脚本时,重点并不在逐行理解 Matplotlib 语法,而在于对图中的事实要素和法律关系进行校验。修改时,可以把代码理解为一个图表模板,主要替换 partners 列表以及管理人、登记编码、托管银行、基金名称、底层项目和关系标签等字段;如基金架构更复杂,则再相应增加节点、连线或层级。

 

运行结果:

 

 

 

六、结语展望:演变中的尽调报告交付方式

 

作为一名长期从事基金业务的律师,以上几种路径只是从我们日常尽调作业出发的一点尝试。选择 HTML、VBA 和 Python,并不是要把它们当成基金尽调制图的标准答案,而是因为它们分别贴近正文写作、Word 交付和数据图像生成这三个常见场景。真正值得讨论的是,当 AI 已经能够把自然语言需求转译为代码和界面,律师应当如何把图表能力纳入自己的尽调表达习惯。

 

往前看,基金尽调图表可能同时走向动态化和标准化。动态化意味着,尽调报告不必始终停留在静态 PDF 或 Word 中:基金管理人、基金产品、LP 出资、项目投资、资金流、风险事项和底稿材料之间,可以被设计成可点击、可追溯、可更新的关系网络。标准化则提醒我们,图表越进入正式交付,越需要稳定的字段、口径、样式和校验规则。基金名称如何写,认缴与实缴金额如何标,备案状态如何呈现,底稿来源如何追溯,版本变化如何保留,这些细节看似琐碎,却决定了一张图表能否真正被团队复用、被客户和投资人信任。

 

AI 也会继续扩展这件事的边界。它可以起草 HTML、VBA 或 Python,帮助统一格式、发现遗漏、生成不同版本;但至少在今天,基金文件是否真实完整、依据是否对应、风险判断是否成立、披露边界是否合适,仍然必须由基金律师逐项复核。也正是在这种边界感中,AI 才更像一种工具,而不是判断本身。它能让制图从“会不会代码”的问题,逐渐转向“是否把基金尽调中的事实结构想清楚”的问题。

 

无论工具怎样演进,基金尽调报告的审美仍应保持克制。好的基金尽调图表,是让读者更快看见问题,也更容易追问依据。基金尽调报告的图表化,归根结底不是技术人员的专属工作,而是基金律师交付能力的延伸。当不懂代码的律师也能借助 AI 把基金结构画清楚、把项目关系讲明白、把支撑文件呈现得可复核,尽调服务的专业性就不只体现在结论里,也体现在交付方式本身。

 

 

[1] 参见 Thariq Shihipar, The unreasonable effectiveness of HTML — examples, https://thariqs.github.io/html-effectiveness/; Simon Willison, “Using Claude Code: The Unreasonable Effectiveness of HTML”, Simon Willison’s Weblog, 2026-05-08, https://simonwillison.net/2026/May/8/unreasonable-effectiveness-of-html/; Techmeme 2026-05-11 归档,https://www.techmeme.com/260511/p31。

[2] CommonMark Spec 0.31.2, §§4.6, 6.6, https://spec.commonmark.org/0.31.2/; MDN Web Docs, : The Table Data Cell element, https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/td。

[3] Microsoft Learn, Tables.Add method (Word), https://learn.microsoft.com/en-us/office/vba/api/word.tables.add; InlineShapes.AddChart2 method (Word), https://learn.microsoft.com/en-us/office/vba/api/word.inlineshapes.addchart2; Chart.SeriesCollection method (Word), https://learn.microsoft.com/en-us/office/vba/api/word.chart.seriescollection 。

[4] 中国证券投资基金业协会《私募投资基金备案业务办理》服务指南,“申请材料”之“相关上传附件”列示“产品架构图(仅适用于非证券类私募投资基金)(附件 12)”,https://www.amac.org.cn/fwdt/wyb/jgdjhcpbeian/smjjglrdjhcpba/fwzn/202206/t20220624_19657.html。

[5] Matplotlib, Documentation, https://matplotlib.org/stable/index.html; Matplotlib, matplotlib.pyplot.savefig, https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.savefig.html 。

调配全所资源、长期陪伴客户的一站式法律服务

订阅我们
*
*
*
*
*
*
单击刷新
您感兴趣的业务领域(可多选)
您感兴趣的行业领域(可多选)
温馨提示:
提交本表单视为您希望收到植德律师事务所行业研究报告、出版物。
免责声明:
您订阅的行业研究报告、出版物不代表植德律师事务所就相关问题的法律意见。如您需要法律意见,请您向具有相关资格的专业人士咨询或寻求帮助。
微信公众号