ワンクリックで
wlzh-invoice-scanner
扫描目录识别所有类型发票(交通、住宿、餐饮等),提取关键信息并生成分类统计报告
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
扫描目录识别所有类型发票(交通、住宿、餐饮等),提取关键信息并生成分类统计报告
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
Automate the full QuarkPanTool → mswnlz GitHub content publishing pipeline. Use when the user provides Quark share URLs and wants: (1) create a batch folder in Quark Drive, (2) save/copy resources into that folder, (3) copy promotional files INTO each shared resource folder, (4) generate permanent encrypted share links with random passcodes, (5) auto-classify items into mswnlz repos (book/movies/etc.) by repo descriptions, (6) append/update the target repo's YYYYMM.md and README month index, (7) git commit+push, (8) send unified Telegram notifications, and (9) force-trigger mswnlz.github.io site rebuild and return the final site URLs.
Track YouTube channels for new uploads. Supports both RSS mode (no API key needed, unlimited quota) and API mode. Use when: add/remove/list tracked YouTube channels, check for new videos, or run scheduled YouTube channel monitoring.
"Upload and publish videos to YouTube with title, description, tags, thumbnail and subtitles. Use for: youtube upload, publish video, share on youtube."
音频变声处理工具 - 使用 RVC AI 模型进行真实的声音转换,支持视频直接输入
通用图片生成 Skill,支持多种 AI 模型(ModelScope、Gemini、RunningHub 等),可被其他 Skills 调用
文本转语音工具 - 支持 Edge TTS 和 Kokoro TTS (v1.1-zh) 双引擎,102 个中文音色
SOC 職業分類に基づく
| name | wlzh-invoice-scanner |
| description | 扫描目录识别所有类型发票(交通、住宿、餐饮等),提取关键信息并生成分类统计报告 |
| version | 3.7.0 |
| author | wlzh |
| changelog | ["3.7.0: 新增首次使用指南,补充第一次拿到 Skill 时的准备、调用、模式选择、输出文件、统一汇总配置说明;文档示例路径脱敏","3.6.0: 新增招待费/客户模式;输入包含招待费、招待或客户时逐张输出招待费明细,不汇总发票号和金额;补充 Windows 路径配置说明","3.5.0: 新增报销汇总追加功能;config.json 配置汇总文件路径,每次扫描后自动将摘要卡片追加到汇总 MD 最上面","3.4.0: 金额展示格式改为无千分位逗号,并去掉小数尾随 0,便于复制粘贴到不接受逗号的系统","3.3.0: 新增结构化摘要卡片输出(文件夹名/总金额/发票号汇总/分类明细)","3.2.0: 新增退票费独立分类(火车退票费/机票退票费);五大分类替代四大分类","3.1.0: 强制 Python 算术校验;铁路客票一律归长途交通;报告文件名改为文件夹名.md;增加重复发票去重逻辑;增加处理前重新扫描要求","3.0.0: 铁路电子客票归长途交通;报告文件名改为文件夹名","2.5.0: 初始完整版本"] |
你是一个专业的发票识别专家。任务是识别和提取各类发票的关键信息,并按类型分类统计。
/wlzh-invoice-scanner ./发票文件夹
/wlzh-invoice-scanner ./receipts.zip
# Windows 路径建议加引号;JSON 配置中反斜杠需写成 \\\\,命令输入可直接使用 Windows 路径
/wlzh-invoice-scanner "C:\\Users\\Alice\\Documents\\发票"
/wlzh-invoice-scanner "C:\\Users\\Alice\\Documents\\receipts.zip"
# 招待费/客户模式:输入路径或附加提示包含「招待费」「招待」「客户」任一关键词即启用
/wlzh-invoice-scanner ./客户发票
/wlzh-invoice-scanner ./餐饮发票 招待
/wlzh-invoice-scanner "C:\\Users\\Alice\\Documents\\客户招待" 招待费
/wlzh-invoice-scanner "C:\\Users\\Alice\\Documents\\发票"默认行为不变:如果输入路径和附加参数都不包含触发词,继续执行原有完整发票统计逻辑(分类、发票号汇总、金额累加、Python 校验、结构化摘要卡片)。
招待费/客户模式触发条件:仅根据用户本次输入判断,不根据发票内容自动猜测。检查原始输入路径和路径后的附加提示,只要包含以下任一关键词即启用招待费/客户模式:
招待费招待客户示例:
/wlzh-invoice-scanner ./客户发票
/wlzh-invoice-scanner ./餐饮发票 招待
/wlzh-invoice-scanner ./receipts.zip 招待费
招待费/客户模式下,每张发票独立输出为一条 招待费 明细;不生成发票号汇总,不进行金额累计,不输出分类统计。
在开始扫描之前,先清理目录中的无用文件:
find "<input_dir>" -type f \( -name "*.xml" -o -name "*.ofd" \) -delete已清理 X 个无用文件(.xml, .ofd)接收输入路径后,判断类型并处理:
情况A:输入是 ZIP 文件
/tmp/invoice_scanner_<timestamp>unzip -q "<zipfile>" -d "<temp_dir>"find "<temp_dir>" -type f -exec mv {} "<report_dir>/" \;rm -rf "<temp_dir>"rm -f "<zipfile>"已解压并清理 ZIP 文件情况B:输入是目录
首先检测目录中是否包含 ZIP 文件
find "<input_dir>" -name "*.zip"自动解压 ZIP 文件(如果存在)
unzip -q "<zip_file>" -d "<temp_extract_dir>"find "<temp_extract_dir>" -type f -exec mv {} "<zip_parent_dir>/" \;rm -rf "<temp_extract_dir>"rm -f "<zip_file>"已解压并清理 X 个 ZIP 文件*.jpg, *.jpeg, *.png, *.pdffind "<input_dir>" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pdf" \) | sort对每个文件:
A. 市内交通发票
B. 长途交通发票 ⚠️ 铁路电子客票一律归此类
⚠️ 分类硬规则(v3.1 起强制执行):票据类型为"铁路电子客票"→ 一律归"长途交通"。市内交通仅限出租车/网约车发票、地铁票、公交票。即使行程是短途(如樟木头→深圳、深圳北→樟木头),铁路电子客票也归长途交通。
C. 住宿发票
D. 退票费 ⚠️ 独立分类(v3.2 起新增)
E. 其他发票
⚠️ 必须在识别阶段执行去重,避免重复计费
去重规则:
_1 后缀:通常表示重复下载/打印的同一张发票标记方式:
计入: 是计入: 否,并注明对应的正式发票号码根据发票类型提取关键字段:
A. 市内交通发票字段:
B. 长途交通发票字段:
飞机票:
火车票:
C. 住宿发票字段:
D. 退票费字段:
E. 其他发票字段:
招待费 / 招待 / 客户 时)招待费/客户模式不再按五大分类输出,而是每张正式发票单独一行。多张发票必须写多行,不合并。
每张发票提取字段:
招待费¥268、¥520.5)餐厅/商户名称提取优先级:
销售方名称 / 商户名称 / 餐厅名称 / 服务商名称待确认,并在备注中标注 ⚠️ 餐厅/商户名称存疑,请人工复核招待费/客户模式仍需二次确认每张发票的发票号码、金额、餐厅/商户名称;无法确认的字段标记为 待确认 或添加 ⚠️ 备注。
⚠️ 关键步骤:每张发票提取后必须进行二次确认,确保准确性
发票号码确认:
金额确认:
¥1277、¥44.2、¥400.5、¥0。不要输出 ¥1,277.00、¥44.20、¥400.50、¥0.00。日期确认:
如果确认时发现问题:
备注: ⚠️ 字段提取存疑,请人工复核
⚠️ 极其重要:LLM 心算经常出错(如 1837+222.58+1393.04 算成 3052 而非 3452),必须用代码验证
招待费/客户模式不输出总金额、分类小计和金额累加结果,因此跳过“总额/分类合计”校验;但每张发票金额仍必须逐张二次确认,并使用复制友好金额格式展示。
¥0生成报告后,必须使用 Bash 工具运行 Python 进行独立算术校验:
python3 -c "
items = [<所有发票金额列表,用逗号分隔>]
total = sum(items)
print(f'单张合计: {total:.2f}')
print(f'报告总额: <报告中的总额>')
print(f'校验: {\"✓\" if abs(total - <报告总额>) < 0.02 else \"✗ 差异!\"}')"
校验规则:
单张金额合计 === 总金额(允许误差 ±0.02 元)市内交通 + 长途交通 + 住宿 + 退票费 + 其他 === 总金额✓ 金额已校验所有面向用户的金额展示(报告正文、表格、统计摘要、金额验证、结构化摘要卡片)都必须使用复制友好格式:
¥1277,不要写 ¥1,277.00¥44.2,不要写 ¥44.20;¥400.5,不要写 ¥400.50¥230,不要写 ¥230.00¥0,不要写 ¥0.00建议使用这个 Python 格式化函数生成展示金额:
def fmt_yuan(x):
s = f"{float(x):.2f}".rstrip('0').rstrip('.')
return f"¥{s}"
生成 Markdown 报告文件到输入路径的目录:
<文件夹名称>.md
/path/to/降噪客户拜访 0518-0521 → 报告 降噪客户拜访 0518-0521.mdinvoices.md<文件夹名称>.zip<文件夹名称>.md - 可读性报告,根据模式输出:
默认统计模式包含:
招待费/客户模式包含:
招待费/客户模式)序号、费用名称、发票号码、金额、餐厅/商户、开票日期、文件路径、备注费用名称 固定写 招待费招待费/客户模式不得输出:发票号汇总行、总金额、金额累加、五大分类统计、分类金额校验公式、默认统计摘要卡片。
发票号汇总行示例:
📋 发票号汇总(可复制): 1234567890/9876543210/5555666677/8888999900
生成报告后,清理报告目录中的所有中间文件:
find "<report_dir>" -type f \( -name "*.xml" -o -name "*.ofd" -o -name "*.zip" \) -delete🗑️ 已清理 X 个中间文件(.xml, .ofd, .zip)完成所有处理后,将报告目录中的所有文件打包成一个 ZIP 压缩包(默认统计模式和招待费/客户模式都必须执行):
<文件夹名称>.zip/path/to/发票2024,则压缩包名称为 发票2024.zipcd "<report_dir>" && rm -f "<folder_name>.zip" && zip -r "<folder_name>.zip" . -x "*.DS_Store" -x "<folder_name>.zip"
-r: 递归压缩所有文件和子目录.: 压缩当前目录的所有内容-x "*.DS_Store": 排除 macOS 系统文件-x "<folder_name>.zip": 排除 zip 文件自身,避免递归📦 已打包最终文件:<path_to_zip_file>
压缩包大小:X.XX MB
示例:
输入目录:/path/to/发票2024
生成的报告:/path/to/发票2024/发票2024.md
生成的压缩包:/path/to/发票2024/发票2024.zip
¥0,并在备注中说明.xml 和 .ofd 文件.xml、.ofd 和旧 .zip 文件发票2024.zip)降噪客户拜访 0518-0521.md),不再使用 invoices.md完成后输出:
🗑️ 已清理 3 个无用文件(.xml, .ofd)
📦 已解压并清理 2 个 ZIP 文件
✅ 发票扫描完成
📊 统计摘要:
- 总计: 15 张发票
- 总金额: ¥8430.5
- ✓ 金额已校验(Python 独立验算通过)
📋 发票号汇总: 1234567890/9876543210/5555666677/8888999900
按分类统计:
📍 市内交通: 5 张 (¥230)
- 打车: 4 张 (¥210)
- 地铁: 1 张 (¥20)
✈️ 长途交通合计: 4 张 (¥3600) ← 飞机+火车+长途汽车总和
- 飞机票: 2 张 (¥2400)
- 火车票: 2 张 (¥1200)
🏨 住宿: 2 张 (¥4200)
🎫 退票费: 0 张 (¥0)
📦 其他: 4 张 (¥400.5)
- 餐饮: 3 张 (¥350.5)
- 通讯: 1 张 (¥50)
💡 金额验证:
单张合计: 230.00 + 3600.00 + 4200.00 + 0.00 + 400.50 = 8430.50
市内交通 (¥230) + 长途交通 (¥3600) + 住宿 (¥4200) + 退票费 (¥0) + 其他 (¥400.5) = 总计 (¥8430.5) ✓
⚠️ 1 张发票需要人工复核(发票字段提取存疑)
📄 报告已生成:
- /path/to/发票2024.md
🗑️ 已清理 5 个中间文件(.xml, .ofd, .zip)
📦 已打包最终文件:/path/to/发票2024.zip
压缩包大小:12.45 MB
位置:报告目录内部
⚠️ 处理完成后,必须在终端最后输出一个结构化摘要卡片。默认统计模式输出分类摘要卡片;招待费/客户模式输出逐张明细卡片。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📂 降噪客户拜访 0518-0521
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 总金额: ¥2811.55 (7张)
📋 发票号: 26952000002075124346/26952000002055155446/26449123774000016358/26338891111036673445/26952000002037354826/26449165860002800464/26448784110004571321
📊 分类:
长途交通 5张 ¥1875 (飞机票×2 ¥1820 | 火车票×3 ¥55)
住宿 3张 ¥936.55
退票费 0张 ¥0
市内交通 0张 ¥0
其他 0张 ¥0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
默认统计模式摘要卡片要求:
0张 ¥0招待费/客户模式摘要卡片要求:
模式:招待费/客户招待费 发票号 金额 餐厅/商户招待费/客户模式示例:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📂 客户餐饮发票
模式:招待费/客户
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
招待费 1234567890 ¥268 深圳市某某餐厅
招待费 9876543210 ¥520.5 广州市某某酒楼
招待费 5555666677 ¥188 上海某某饭店
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 在步骤 11 输出摘要卡片之后执行
config.json 文件SKILL.md 同级目录下的 config.json{
"summary_dir": "/path/to/baoxiao/",
"summary_file": "报销汇总.md"
}
"C:/Users/Alice/Documents/报销/""C:\\Users\\Alice\\Documents\\报销\\"summary_dir + summary_file# 报销汇总
# 报销汇总
## YYYY-MM-DD 文件夹名称
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 总金额: ¥XXX (N张)
📋 发票号: xxx/xxx/xxx
📊 分类:
长途交通 N张 ¥XXX (飞机票×N ¥XXX | 火车票×N ¥XXX)
市内交通 N张 ¥XXX
住宿 N张 ¥XXX
退票费 N张 ¥XXX
其他 N张 ¥XXX
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(旧记录继续...)
当本次输入触发招待费/客户模式时,仍然写入同一个 summary_dir + summary_file,并插入到汇总 MD 顶部(紧跟 # 报销汇总 标题之后)。
费用名称 固定为 招待费插入格式:
# 报销汇总
## YYYY-MM-DD 文件夹名称 招待费
| 日期 | 费用名称 | 发票号码 | 金额 | 餐厅/商户 | 来源文件 | 备注 |
|------|----------|----------|------|-----------|----------|------|
| YYYY-MM-DD | 招待费 | 1234567890 | ¥268 | 深圳市某某餐厅 | invoice1.pdf | |
| YYYY-MM-DD | 招待费 | 9876543210 | ¥520.5 | 广州市某某酒楼 | invoice2.jpg | |
(旧记录继续...)
━━━━ 或表格后加一个空行再接下一条 ## 标题)YYYY-MM-DD 使用当前扫描日期文件夹名称 使用被扫描的文件夹 basenamesummary_dir 目录不存在,输出警告并跳过📝 已追加摘要到 <summary_file 路径>config.json:用户的个人配置,包含真实路径,不应提交到版本库config.json.sample:示例配置文件,供其他用户参考.gitignore:排除 config.json,防止意外提交个人路径