Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/wlzh/skills --skill wlzh-invoice-scanner명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Upload and fully manage YouTube videos and live events: metadata, thumbnails, captions, playlists, scheduled broadcasts, encoder streams, binding, lifecycle transitions, and cleanup.
Convert YouTube videos to SEO-optimized blog posts. Extract video title, description, and content, then generate a search-engine-friendly blog post with embedded video, cover images, optimized metadata, structured Markdown sections, clean resource blocks, and canonical 5-8 keywords. Auto-generates English filenames and saves to the configured Hexo blog posts directory. Includes tag management rules to maintain a clean, consistent tag taxonomy.
文本转语音工具 - 默认 MiniMax TTS,支持切换 Edge TTS 和 Kokoro TTS (v1.1-zh)
SOC 직업 분류 기준
SKILL.md 표시 중
| 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,防止意外提交个人路径