Install
openclaw skills install finance-assistant智能财务事项与报销跟踪系统。它能够对多公司、多发票抬头进行智能化管理,从发票文件的接收、解析、分类存储到最终报销,提供一站式全生命周期的跟踪与提醒服务。支持PyMuPDF智能发票解析归档、发票缺漏智能补录及重要财务日程提醒。
openclaw skills install finance-assistant为[老板]管理的财务事务提供三大类跟踪:
[老板]管多家公司,但发票抬头(开票法律主体)可能不同:
一张发票必须有抬头字段,公司字段用于确认这笔费用归属给哪家业务单元。参考 references/headers.md 查看已知抬头映射。
所有财务记录存储在 ~/finance/ 目录下(或用户指定的财务工作目录下):
~/finance/invoices/发票原件(PDF/OFD/照片/扫描件)按**公司名(短名)**分目录存放,便于快速查找:
~/finance/invoices/
├── [公司A]/ ← 公司短名,对应抬头:[公司A全称]
│ ├── YYYY-MM-DD_[出发地]-[目的地]_机票_[金额].pdf
│ └── YYYY-MM-DD_[出发地]-[目的地]_机票_[金额].pdf
├── [公司B]/
│ ├── YYYY-MM-DD_[目的地]-高铁_[金额].pdf
│ └── [发票名A].pdf
├── [公司C]/
│ └── [发票名B].pdf
├── [公司D]/ ← 暂无数据
└── [公司E]/ ← 暂无数据
日期_摘要_金额.扩展名(发票原始文件名也可保留,方便查发票号)references/headers.md~/finance/invoices.md格式(按添加时间倒序):
| 日期 | 金额 | 摘要 | 公司 | 抬头 | 发票号 | 原件 | 状态 | 备注 |
|------|------|------|------|------|--------|------|------|------|
| YYYY-MM-DD | ¥1,200 | 办公用品采购 | [公司B] | [公司B全称] | INV-YYYY-001 | [查看](file://...pdf) | ✅已报销 | MM/DD到账 |
| YYYY-MM-DD | ¥800 | 交通费 | [公司D] | [抬头D] | INV-YYYY-002 | - | ⏳待报销 | 发票已交财务 |
~/finance/invoices/<抬头名>/ 下的原始文件✅已报销 ⏳待报销 ❌已作废~/finance/no_invoice.md格式:
| 日期 | 金额 | 摘要 | 公司 | 抬头 | 提醒次数 | 备注 |
|------|------|------|------|------|---------|------|
| YYYY-MM-DD | ¥300 | 午餐会议 | [公司C] | [公司C的客户/代开票抬头] | 2次 | 已联系财务补开 |
~/finance/important.md格式:
| 日期 | 事项 | 截止日期 | 状态 | 备注 |
|------|------|---------|------|------|
| YYYY-MM-DD | 季度增值税申报 | YYYY-MM-DD | 🔴待处理 | 需要财务数据 |
~/finance/weekly_summary.md每周一自动生成,汇总本周待处理事项。
当发票积攒到一定量或[老板]明确说"生成报销单"时,直接调用报销单生成工具(例如 [飞书报销单生成器] 等相关技能)处理全流程:
不要在此技能内重复实现,保持职责分离。
~/finance/invoices/<抬头名>/日期_摘要_金额.pdfheaders.md 映射表,如果找不到则问[老板]这笔费用归属哪家公司invoices.md → 状态标记为 ⏳待报销headers.md 默认映射填写invoices.md,状态 ⏳待报销no_invoice.md(含抬头字段)important.mdread_file 工具可能会遇到乱码或截断中文内容(CJK编码显示问题)。在读取中文Markdown文件时,建议使用更稳妥的系统读取命令:
# ✅ 推荐读取方式:使用执行环境的底层命令读取(如 cat 等命令)
# 或在代码中指定 utf-8 编码读取
with open('~/finance/invoices.md', 'r', encoding='utf-8') as f:
content = f.read()
验证技巧:如果怀疑文件读取不完整,可以先确认文件行数,再检查内容。
本技能最频繁的犯错点: 中国电子发票左右栏容易看反。每次解析PDF后必须按以下步骤验证,缺一不可:
import pymupdf
doc = pymupdf.open("发票.pdf")
text = ""
for page in doc:
text += page.get_text()
print(text)
从文本中找到所有出现的公司全称及紧邻的税号/信用代码。通常电子发票上有且只有两家公司:
| 角色可能性 | 示例 |
|---|---|
| 公司A + 税号A | [公司A全称] + [公司A税号] |
| 公司B + 税号B | [供应商A全称] + [供应商A税号] |
打开 references/headers.md,用已知公司税号反推:
这是最可靠的判断方法,必须在向[老板]报告前完成。
headers.md 中该公司的抬头一致?[老板]经常先口头说"先记上",之后再发PDF文件。流程:
invoices.md,发票号先用银行流水号,原件列留空invoices.md:修正发票号、添加原件链接、完善摘要~/finance/invoices/<公司名>/ 下列出所有 ⏳待报销 的发票,按抬头分组(同一抬头可集中报销),提醒[老板]跟进。
列出所有未开发票的费用,提醒[老板]联系补开。
列出所有未完成的重要财务事项。
# 每周一 10:00 发票报销提醒(按抬头分组)
schedule: "0 10 * * 1"
prompt: "执行财务跟踪周报:读取 ~/finance/invoices.md 中所有 ⏳待报销 的发票,按抬头分组汇总(同抬头可集中报销);读取 ~/finance/no_invoice.md 中未开发票的费用;读取 ~/finance/important.md 中未完成事项。生成周报发给[老板]。"
skills: ["finance-assistant"]
deliver: "origin"
# 每周一 10:05 无发票提醒
schedule: "0 10 * * 1"
prompt: "读取 ~/finance/no_invoice.md,列出所有还未开发票的费用记录(含抬头),提醒[老板]联系开票。每项费用的提醒次数+1。"
skills: ["finance-assistant"]
deliver: "origin"
# 每周一 10:10 重要事项
schedule: "0 10 * * 1"
prompt: "读取 ~/finance/important.md,列出所有状态为 🔴待处理 的重要财务事项,提醒[老板]注意截止日期。"
skills: ["finance-assistant"]
deliver: "origin"
[老板]管理的多家公司,以及已知的发票抬头映射(详见 references/headers.md):
| 公司 | 业务 | 默认抬头 |
|---|---|---|
| [公司A] | [业务类型A] | [抬头A] |
| [公司B] | [业务类型B] | [抬头B] |
| [公司C] | [业务类型C] | [抬头C] |
| [公司D] | [业务类型D] | [抬头D] (待确认) |
| [公司E] | [业务类型E] | [抬头E] (待确认) |
✅已报销,添加到账日期no_invoice.md 移到 invoices.md✅已完成