解析电子发票并汇总生成报销单
28.2/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 988hj7tczd-oss/dsh-invoice-tools该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 70 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-fs给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 解析电子发票PDF
- 金额交叉校验
- 生成报销单
DSH 原生工具:把中文电子发票 PDF 解析成结构化 JSON,带金额交叉校验,还能生成报销单(Markdown / xlsx)
README
由 DeepSeek 最新模型翻译生成dsh-invoice-tools — 发票解析 / 报销单生成工具
[!IMPORTANT]
依赖前置:相邻 dsh-src 检出(link: 依赖)本项目在开发形态下使用 link: 依赖指向相邻的 DeepSeek Harness 源码检出(dsh-src),与当前仓库保持同一父目录布局(/dsh-src)。克隆本仓库后:
1. 先把官方 deepseek-ai/deepseek-harness 检出到与本仓库同级的 dsh-src/ 目录,并执行其 pnpm install && pnpm run build;
2. 再按下方「安装」一节执行本仓库的 pnpm install --offline && pnpm build 与测试。
发布到 npm 的版本会尽量把 link: 依赖替换为 registry 真实版本;无法替换的内部包保持 link:,见各包 README 说明。
DSH(DeepSeek Harness)原生工具插件:读取工作区内的增值税电子发票文件(数电票/全电发票 PDF、图片),结构化为 JSON(发票代码/号码/金额/税额/购买方/销售方/开票日期),多张汇总生成报销单(Markdown / xlsx)。
展开完整文档(README 剩余 1 节)
dsh-invoice-tools — 发票解析 / 报销单生成工具
[!IMPORTANT]
依赖前置:相邻 dsh-src 检出(link: 依赖)本项目在开发形态下使用 link: 依赖指向相邻的 DeepSeek Harness 源码检出(dsh-src),与当前仓库保持同一父目录布局(/dsh-src)。克隆本仓库后:
1. 先把官方 deepseek-ai/deepseek-harness 检出到与本仓库同级的 dsh-src/ 目录,并执行其 pnpm install && pnpm run build;
2. 再按下方「安装」一节执行本仓库的 pnpm install --offline && pnpm build 与测试。
发布到 npm 的版本会尽量把 link: 依赖替换为 registry 真实版本;无法替换的内部包保持 link:,见各包 README 说明。
DSH(DeepSeek Harness)原生工具插件:读取工作区内的增值税电子发票文件(数电票/全电发票 PDF、图片),结构化为 JSON(发票代码/号码/金额/税额/购买方/销售方/开票日期),多张汇总生成报销单(Markdown / xlsx)。
全程只读输入、写入输出文件;发票数据仅在本机处理,不上传任何查验接口;解析缓存按会话隔离(工具无法取得会话上下文时回退为进程级缓存,详见「安全与隐私」)。
2026-08 调研结论:dsh invoice payment 报销 发票 实时搜索 0 结果,发票/报销方向无人做,本插件填补该空白。
功能一览
| 工具 | 作用 | 参数 |
| invoice_parse | 单张/批量发票解析(文件或目录) | path(必填) |
| invoice_summary | 汇总结算 + 报销单生成 | files? / out? / categories? |
解析路径(invoice_parse)
1. XML 附件优先:读取 PDF 内嵌的结构化 XML(/EmbeddedFiles 命名树),按中英双语候选标签白名单抽取:发票号码/代码、金额(不含税)、税额、价税合计、购买方、销售方、开票日期、查验平台网址。
2. 文本层兜底:无 XML 时以文本正则抽取——票号正则 \d{8,20} + 标签定位(发票号码:、金额(大写)…(小写)¥x、开票日期:、购买方名称: 等)。
3. 勾稽校验:价税合计 = 金额 + 税额(容差 0.01),不符时核对表标 ⚠。
4. 置信度标注:XML 直读 = 高(high);正则 = 中(medium);关键字段缺失 = 低(low)并列出缺失清单。
汇总(invoice_summary)
- 合计/税额/价税合计、按类别小计(categories 映射,键 = 票号或文件名);
- 重复票检测:同票号 + 同金额(保留首张,其余建议剔除);
- 生成 报销单-.md(默认)或 xlsx(out 参数)到工作区;
- files 缺省时复用 invoice_parse 的解析缓存;缓存 key 含会话维度(:),工具拿不到会话 id 时回退 global: 前缀——即进程级缓存,见「安全与隐私」。
目录结构
dsh-invoice-tools/
├── cordis.yml # 装配清单(生产以裸包名 dsh-invoice-tools 挂载) ├── package.json # dsh.bundle.patch 声明 + 构建/测试脚本 ├── tsconfig.json ├── src/ │ ├── index.ts # 装配 + 注册 2 工具 │ ├── tools/invoice-parse.ts # 单张/批量解析(fs 编排 + 核对表渲染 + 会话作用域缓存) │ ├── tools/invoice-summary.ts# 汇总 + 报销单生成(版本守卫写入) │ ├── pdf-extract.ts # 自写最小 PDF 解析器:文本层 + XML 附件 + 加密检测 │ ├── invoice-model.ts # 字段模型 + XML/正则抽取 + 金额勾稽校验 │ └── summary.ts # 报销单 md/xlsx 渲染 + 极小 zip 打包器 ├── tests/smoke.e2e.ts # 离线冒烟测试(fixture PDF 内嵌生成) └── README.md
装配方式
依赖:宿主已提供 tools(工具注册表)与 fs(文件系统服务)。两种挂载模式:
1. 生产(推荐):dsh plugin add 安装后以裸包名挂载。package.json 的 dsh.bundle.patch 声明随包发布;main 指向编译产物 lib/index.js(发布前
npm run build 产出)。cordis.yml 中的 name: 'dsh-invoice-tools' 由 loader
按 Node 模块解析(import('dsh-invoice-tools')),不要使用相对路径——loader 对 . 开头的 name 按 bundle/profile 根目录解析,包内相对源码路径(./src/index.ts)必然解析失败并使启动 fail-loud。
- insert:
- id: invoice-tools
name: 'dsh-invoice-tools'
2. 开发直挂:绝对路径(同 dsh-src/scratch-plugin 的做法):把 insert 行并入宿主 cordis.yml,name 写源码入口的绝对路径:
- insert:
- id: invoice-tools
name: '/absolute/path/to/dsh-invoice-tools/src/index.ts'
使用示例
解析单文件 / 整目录 invoice_parse path='invoices/电子发票_2024.pdf' invoice_parse path='invoices/' # 目录递归
汇总(缺省用上次 parse 缓存)→ 报销单-.md invoice_summary invoice_summary out='both' categories='{"发票号码123...":"差旅","文件B.pdf":"办公"}'
指定文件汇总(须先 parse) invoice_summary files='["invoices/A.pdf","invoices/B.pdf"]' out='md'
输出示例(核对表):
| 源文件 | 发票号码 | 开票日期 | 金额 | 税额 | 价税合计 | 来源 | 置信度 | 勾稽 |
| 电子发票_2024.pdf | 24412000000012345678 | 2024-01-05 | 100.00 | 13.00 | 113.00 | XML | 高(XML) | ✓ |
安全与隐私
- 不读取任何凭证/密钥/证书/账号配置;仅处理用户指定的发票文件,读取遵循宿主 fs 的 read 策略与沙箱,输出写入工作区。
- 不上传任何查验接口:查验(verify)为显式 opt-in 能力,默认关闭,当前版本不实现任何网络请求。
- 文件读写通过主机的 ctx.fs 服务完成;观察策略由宿主 fs 事件管道(fs/write-intent / fs/observed,宿主 fs-observation-policy 只挂事件、不注册服务)统一处理。本插件直接调用 ctx.fs 读写,不做额外工作区包含校验——插件自身不声称额外安全边界,信任边界完全落在宿主 fs 沙箱与观察策略之上。
- 写盘编排(只影响插件自身行为,并非策略闸门):目标已存在时先 read,再以版本守卫(replaceIfVersion)原子写入;不存在时 createIfAbsent。
- 隐私边界如实说明:解析缓存按会话隔离(key 为 :,会话 id 取自工具执行上下文的 agent.id);工具无法取得会话上下文时(非代理循环驱动等场景),缓存回退为进程级——同进程内其它会话理论上可读到该缓存的解析结果,请勿向缓存中放入敏感发票数据。
- OCR 不是首版依赖:纯扫描件(图片 / 无文本层 PDF)返回明确"跳过原因",不中断批量;后续可显式 opt-in 对接社区 vision 插件(如 dsh-vision-guard 的 vision_analyze)。
xlsx 落盘说明
DSH 文件系统服务提供 UTF-8 文本信道(无二进制写 API),故 invoice_summary out='xlsx' 生成的 xlsx(标准 OOXML ZIP,可由 Excel/WPS/openpyxl 打开)以 base64 文本落盘为 报销单-.xlsx.b64:
base64 -d 报销单-20260823.xlsx.b64 > 报销单-20260823.xlsx # macOS/Linux
工具返回值同时携带 xlsxBase64,会话内可自行解码。文件头 PK\x03\x04、中央目录与 xl/worksheets/sheet1.xml 结构均由离线测试做结构断言;openpyxl 交叉验证在环境可用时执行,缺失时测试显式打印 -- SKIP openpyxl 交叉验证(python3/openpyxl 缺失) 并计入 skipped (node:test skip 语义,不再静默跳过)。
实现说明与已知限制
- PDF 解析为自写最小解析器(零第三方依赖,仅 Node 内置 zlib):顺序扫描对象并精确跳过 stream;支持 FlateDecode/未压缩流、Tj/TJ 文本操作符、 latin1 与 UTF-16BE(hex)字符串、/EmbeddedFiles 附件树。不依赖 xref 表,对老式 xref 与 xref 流均鲁棒。局限:不支持对象流内的间接引用流、JPEG2000 图像、页面渲染;生产环境如需完整 PDF 语义,可替换为调用 pdfplumber/pypdf 的外部路径(调研已核实可用)。
- XML 附件抽取依赖中英双语候选标签白名单(invoice-model.ts);覆盖面外的 Schema 将导致该文件被跳过(reason=unparsable),不会生成错误数据。
- 金额仅解析阿拉伯数字(¥/¥/千分位);中文大写金额无法解析时字段缺失并降低置信度。
- 目录扫描递归深度上限 3;单文件读取上限 16MB。
开发与测试
npm install # 拉取类型依赖(@deepseek-ai/cordis / dsh-tools / typescript)
npm run typecheck # tsc --noEmit
npm run build # tsc → lib/
npm run test # build + node --test
npm run test:offline # 纯离线冒烟(Node ≥ 22.19,原生运行 .ts,不需要 npm install)
冒烟测试(tests/smoke.e2e.ts)内嵌 fixture 生成器,覆盖验收标准: ① 含 XML 附件的样例解析字段完整 + 勾稽通过 + confidence=high; ② 无 XML 文本型样例走正则路径 + confidence=medium; ③ 3 张样例汇总:合计正确 + 重复检测命中构造样本; ④ xlsx 结构断言(ZIP + 表头/行数据);openpyxl 交叉验证在环境可用时执行、缺失时显式标记跳过; ⑤ 异常文件(加密 PDF / 纯图片)返回明确跳过原因且不中断批量; ⑥ 勾稽不符样本标红提示。
License
MIT
权限、失败边界与 DSH STORE 状态
- PERMISSIONS.md:运行时读取面 / 命令面(固定 argv,非 shell)/ 写面 / 外部服务 / 失败边界 / 供应链 / 文件权限信号(无 chmod/chown、644、无 setuid/setgid)。
- docs/store-evidence.md:一次性 Profile 安装 → 启动(工具注册清单)→ 卸载步骤、本地离线证据、待宿主补录真实运行记录说明,并逐项回应 DSH STORE 五类审查信号(仓库 canonical 匹配 / Node 声明 / 供应链 / 文件权限 / 命令权限)。
- STORE 复检由 dsh-safe-plugin-manager 每 3 小时自动执行;本仓库已按清单契约声明(package.json 的 repository / engines.node / dsh.compatibility / dsh.permissions)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
988hj7tczd-oss/dsh-invoice-tools
解析电子发票并汇总生成报销单
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,173已汉化DeepSeek 客户端
74.4
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,197已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,308已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,897已汉化DSH
71.2