gopherops-non-invest-payment
- 简介
- 基于MCP工具链解析文档附件,自动发起基金非投资BDS付款流程
- 触发词
- 发起非投资付款,提交付款流程,发起BDS付款
- 分发渠道
- ARK Engine、诺Chat
- 功能测试
- ✅ 通过 · 业务评审:✅ 通过
- 技能包文件
- gopherops-non-invest-payment/SKILL.md
SKILL.md 全文
Frontmatter
| name | gopherops-non-invest-payment |
|---|---|
| description | 通过 gopherops-mcp 发起基金非投资付款流程。当用户说"发起非投资付款"、"提交非投资付款流程"、"帮我发起付款流程"、"发起BDS付款"、"非投资类付款"时必须触发此 skill。即使用户只说"帮我发起个付款"、"提交一下付款流程"也应触发。本 skill 包含字段填写规则和从实际操作中总结的关键经验,是发起该类流程的唯一权威参考。 |
基金非投资付款流程发起 Skill
概述
通过 gopherops-mcp 工具链,将付款说明文档和附件材料自动处理为 BDS 非投资付款流程申请。
注意:通过 MCP 发起的流程会直接进入"审批中"状态,不支持草稿/暂存。如需先暂存,请在 BDS 页面手动操作。
---
第一步:读取规则和付款说明文档
1. 读取 ./input/ 下的规则文档(通常命名含"规则"或"提交规则"的 .docx 文件)
2. 解包付款说明 Word(用印材料-付款说明-*.docx)提取文本:
python3 <docx-skill路径>/scripts/office/unpack.py 付款说明.docx /tmp/payment_unpacked/
python3 -c "
from xml.etree import ElementTree as ET
tree = ET.parse('/tmp/payment_unpacked/word/document.xml')
texts = []
for p in tree.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p'):
line = ''.join(t.text or '' for t in p.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t'))
if line.strip():
texts.append(line)
print('\n'.join(texts))
"
提取以下字段:
| 提取项 | 用途 | |--------|------| | 基金名称 | productName、customProcessName、payBody | | 付款金额和税种 | payedAmount、payOtherMemo | | 收款方名称 | accountName、receivablesBody | | 执行事务合伙人(用印主体②) | attachSealInfos 中付款说明的第二个 sealInfos 条目 | | 合伙企业(用印主体①) | 所有用印附件的第一个 sealInfos 条目 | | 完整正文内容 | payedMemo(必须是全文拼接,不是摘要) |
---
第二步:查询基金信息
调用 query_fund_by_name,用基金全称搜索,获取:
fundCode→ 作为productCode- GID(recordId)→ 后续查询用
---
第三步:上传附件
对每个附件文件(共4类:代付协议、应纳税额截图、申报记录、付款说明):
1. 调用 get_upload_url(file_name, content_type) 获取预签名上传 URL(有效期30分钟)
2. 用 HTTP PUT 上传文件到返回的 uploadUrl
3. 保存返回的 objectName,后续作为 attUrl 使用
curl -s -o /dev/null -w "%{http_code}" -X PUT \
"<uploadUrl>" \
-H "Content-Type: <content_type>" \
--data-binary "@<本地文件路径>"
返回 200 表示上传成功
附件分类:
attachInfos(参考材料):代付协议、应纳税额截图 → 不需要盖章attachSealInfos(用印材料):申报记录、付款说明 → 需要盖章
---
第四步:调用 start_non_invest_payment 发起流程
顶层字段
| 字段 | 值 |
|------|----|
| taskId | "" (新发起流程传空) |
| applyAccount | 申请人域账号(需向用户确认) |
| productName | 基金全称 |
| productCode | fundCode(从 query_fund_by_name 获取) |
| customProcessName | 基金非投资付款-{基金全称} |
| payedMemo | 付款说明 Word 的完整正文内容(不是简短摘要) |
| payedType | 对外付款 |
| isAdvancedByGP | "0" |
| paymentMethod | 正文含"从托管户划入"时用 PM_TGHHK;否则用 PM_ZJZF |
paymentItems 数组(每条付款明细)
| 字段 | 填写规则 |
|------|---------|
| accountName | 收款账户名称 |
| payBody | 付款主体 = 基金全称 |
| payCurrency | CNY |
| payedAmount | 付款金额(数字) |
| payOtherMemo | 税种描述 |
| paymentItems | 付款事项编码(见下方编码表,不传中文名) |
| receivablesBody | 收款方全称 |
| accountAttribute1 | "0"(非关联方) |
| accountAttribute2 | "0"(非GP) |
| paymentStartDate | 2024-01-01 |
| paymentDeadline | 2024-12-31 |
⚠️accountNumber(收款账号)和accountBank(开户行)在发起节点不填。
付款事项编码表:
| 中文名称 | 编码 |
|---------|------|
| 经营所得个人所得税 | ZZS_GRSDS |
如遇其他税种,先用 query_non_invest_pay_process 查询历史成功流程,从中提取对应编码。不要传中文名(会报"未找到对应付款事项"错误)。attachInfos(参考材料)
{
"attName": "文件名",
"attUrl": "objectName(get_upload_url 返回值)",
"attParentType": "存续类",
"attChildType": "其他存续类材料"
}
attachSealInfos(用印材料)
{
"attName": "文件名",
"attUrl": "objectName",
"attParentType": "划款类",
"attChildType": "其他对外划款指令单",
"copies": 1,
"isNeedSeal": "0",
"isUseBarCode": "0",
"sealInfos": [
{"sealBody": "基金全称", "sealType": "公章", "useSealCount": 1}
]
}
isNeedSeal默认传"0"(线下用印)。若基金已开通 BDS 电子用印可改为"1",但改"1"后若报错"BDS电子用印不支持xxx的公章",须改回"0"。
用印规则:
| 附件 | sealInfos 条目 |
|------|--------------|
| 申报记录 | [{sealBody: 基金全称, sealType: 公章, useSealCount: 1}] |
| 付款说明 | [{基金全称, 公章, 1}, {执行事务合伙人全称, 公章, 1}] |
---
已验证成功的完整请求结构(参考示例)
以下为 NIVP260703008001 最终成功提交的参数结构,可作为模板参考:
{
"taskId": "",
"applyAccount": "yddvd0068",
"productName": "珠海君棱股权投资中心(有限合伙)",
"productCode": "SX1151",
"customProcessName": "基金非投资付款-珠海君棱股权投资中心(有限合伙)",
"payedMemo": "珠海君棱股权投资中心(有限合伙)根据税法规定,需申报相关税费:应缴纳经营所得个人所得税689,313.51 元。现申请将该笔税费从托管户划入代付主体账户,该笔支付账户信息如下:账户名:芜湖戈专企业管理有限公司 账户号:15591129540048 开户行:平安银行上海分行营业部 待缴税完成后,我司承诺会提供完税凭证。",
"payedType": "对外付款",
"isAdvancedByGP": "0",
"paymentMethod": "PM_TGHHK",
"paymentItems": [
{
"accountName": "芜湖戈专企业管理有限公司",
"accountCategory": "",
"payBody": "珠海君棱股权投资中心(有限合伙)",
"payCurrency": "CNY",
"payedAmount": 689313.51,
"payOtherMemo": "经营所得个人所得税",
"paymentItems": "ZZS_GRSDS",
"receivablesBody": "芜湖戈专企业管理有限公司",
"accountAttribute1": "0",
"accountAttribute2": "0",
"paymentStartDate": "2024-01-01",
"paymentDeadline": "2024-12-31"
}
],
"attachInfos": [
{
"attName": "参考材料-芜湖戈专代付协议.pdf",
"attUrl": "gowin/cortex/.../参考材料-芜湖戈专代付协议.pdf",
"attParentType": "存续类",
"attChildType": "其他存续类材料"
},
{
"attName": "参考材料-35-..._应纳税额.png",
"attUrl": "gowin/cortex/.../..._应纳税额.png",
"attParentType": "存续类",
"attChildType": "其他存续类材料"
}
],
"attachSealInfos": [
{
"attName": "用印材料-珠海君棱-申报记录.pdf",
"attUrl": "gowin/cortex/.../用印材料-珠海君棱-申报记录.pdf",
"attParentType": "划款类",
"attChildType": "其他对外划款指令单",
"copies": 1,
"isNeedSeal": "0",
"isUseBarCode": "0",
"sealInfos": [
{"sealBody": "珠海君棱股权投资中心(有限合伙)", "sealType": "公章", "useSealCount": 1}
]
},
{
"attName": "用印材料-付款说明-珠海君棱.docx",
"attUrl": "gowin/cortex/.../用印材料-付款说明-珠海君棱.docx",
"attParentType": "划款类",
"attChildType": "其他对外划款指令单",
"copies": 1,
"isNeedSeal": "0",
"isUseBarCode": "0",
"sealInfos": [
{"sealBody": "珠海君棱股权投资中心(有限合伙)", "sealType": "公章", "useSealCount": 1},
{"sealBody": "歌斐资产管理有限公司", "sealType": "公章", "useSealCount": 1}
]
}
]
}
---
常见错误处理
| 错误信息 | 原因 | 解决方法 |
|---------|------|---------|
| 未找到对应付款事项(xxx) | paymentItems 传了中文名而非编码 | 改传编码,如 ZZS_GRSDS |
| BDS电子用印不支持xxx的公章 | 该基金未开通 BDS 电子用印 | 将 isNeedSeal 改为 "0" |
| 申请人账号不能为空 | 未传 applyAccount | 向用户确认域账号后补充 |
| 付款主体不能为空 | paymentItems 数组中漏了 payBody | 每条明细都要填 payBody |
---
关键字段陷阱
1. 附件类型字段名:必须用 attParentType / attChildType,不是 attType1 / attType2
2. 用印信息层级:用印信息必须嵌套在 sealInfos 数组内,字段名是 useSealCount(不是 sealNum 或 sealTimes)
3. payedMemo:必须是付款说明 Word 的完整正文拼接,不是简短摘要
4. paymentMethod:文档中有"托管户"字样时用 PM_TGHHK,否则默认 PM_ZJZF
5. 不填收款账号/开户行:accountNumber 和 accountBank 在发起节点不传
6. isNeedSeal 默认用 "0":大多数基金未开通电子用印,默认线下即可
---
工具说明(gopherops-mcp)
| 工具 | 用途 |
|------|------|
| query_fund_by_name | 按基金名模糊查询,获取 fundCode 和 GID |
| get_upload_url | 获取 OSS 预签名上传 URL(有效期30分钟) |
| start_non_invest_payment | 发起非投资付款流程,返回 requestNo 和 taskId |
| query_non_invest_pay_process | 查询已发起流程的状态;也可用于查找历史成功流程以获取付款事项编码 |