应付三单匹配:导入发票、采购订单与收货单,按容差策略匹配并导出异常底稿——4 个 `ap.*` 工具。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-ap-three-way
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:PerryLink/dsh-ap-three-way
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-ap-three-way
官方仓库。 本包唯一官方仓库,由 PerryLink 维护;其他账号下的同名仓库与本项目无关。Apache-2.0。
发票/PO/GRN 三单匹配、容差与例外底稿。
状态:alpha / 公开合成 / partial / not counted / 非 GA。 不含客户证据、客户数据,也不作生产可用声明。
English · 简体中文 · Español · Português · हिन्दी
dsh plugin --profile <profile> add dsh-ap-three-way
⭐ 如果它帮到了你,点个 star 会让下一个人更容易找到它;没有任何功能被 star 解锁。
工作流:本地输入 → 插件 → 本地输出;不需要调用模型。

本地真实测试运行;不调用模型或网络。
一句话
把发票、采购单与收货单逐行比对,列出可过账行和全部例外。
适合 / 不适合
- 适合:几十到几百行的发票、采购单(PO)、收货单(GRN)CSV;需要按容差给出「可过账 / 例外」清单并留底稿的应付对账。
- 不适合:需要自动过账、修改供应商主数据或替代审批的场景;本包只做本地匹配,不改任何单据。
输入
- 发票 CSV:UTF-8,表头
supplier,invoice_no,po_no,line_no,qty,unit_price,amount(invoice_no可省略)。 - 采购单 CSV:
po_no,line_no,qty,unit_price,amount;收货单 CSV:po_no,line_no,qty。 - 发票 XML:根节点
<Invoice>,含Seller/Name与Items/Item(Quantity/UnitPrice/Amount)。 - 金额最多两位小数;建议单个文件 ≤5 MB。自带样例在
samples/quickstart/input/(合成数据,远小于 500 KB)。
输出
- 终端摘要:可过账几行、例外几行,默认价格容差 1%。
- 底稿:
$DSH_HOME/storages/dsh-ap-three-way/exports/ap-<时间戳>.xlsx,工作表Matches/Exceptions。 - 原文件不会被修改。
示例
直接复制这句话:
帮我用自带样例做一次发票、采购单、收货单三单匹配,把能过的和例外分别列出来。
也可以自己跑(真实运行,截图即来自这条命令):
node samples/quickstart/run.mjs

合成样例 → 金标 samples/quickstart/expected/result.json;命令与哈希见 screenshots.json。
权限
- 读:你指定的发票 / 采购单 / 收货单 CSV 与发票 XML(由会话读取后作为参数传入);不读其他目录
- 写:
$DSH_HOME/storages/dsh-ap-three-way(匹配状态与exports/*.xlsx);不改原文件 - 联网:否(源码中没有 HTTP / DNS / WebSocket 调用)
- 外部系统:无(不连接 ERP / 供应商系统,不上传数据)
写文件的工具标 R1(本地写),只读工具标 R0;逐项见下方工具表。
FAQ
装不上怎么办?
确认 DSH >=0.2.1-rc.3 <0.4.0、Node >=24.9 <25,并用全新的 DSH_HOME 重试;完整步骤见 TROUBLESHOOTING.md。
价格在 1% 以内,为什么还是例外?
默认容差只放宽「单价」,数量超过收货单(qty_over_grn)仍然算例外;需要放宽时可显式传 price_bps / qty_bps 调容差,并保留策略参数。
能处理我的真实发票吗?
可以本地运行,但本包是 alpha、只用公开/合成数据验证,不构成审计或付款结论;使用真实数据前请脱敏,并保留复核人。
会联网或上传数据吗?
不会。工具、样例和导出都在本机完成。
版本
- 当前版本:
0.1.0(与package.json一致) - 测试:
node --test test/*.test.mjs全绿(26 个用例,0 失败)
安装
安装并验证:
dsh plugin --profile <profile> add dsh-ap-three-way
dsh --profile <profile> --dump-config | grep dsh-ap-three-way
卸载:
dsh plugin --profile <profile> remove dsh-ap-three-way
安装通道
推荐 npm;其他通道用于固定版本或离线。
- npm(推荐):
dsh plugin --profile <profile> add dsh-ap-three-way - git 通道:
dsh plugin --profile <profile> add github:PerryLink/dsh-ap-three-way - tarball:
pnpm packthendsh plugin --profile <profile> add ./dsh-ap-three-way-<version>.tgz - 1024 商店:
npm i -g dsh1024thendsh1024 plugin --profile <profile> add dsh-ap-three-way
它做什么
发票/PO/GRN 三单匹配、容差与例外底稿。 在 DeepSeek Harness 本地运行;下表就是实际工具面,示例使用真实命令面。
输入和输出都留在本地,不上传。
工具
工具名是稳定 API;说明已本地化。
| 工具 | 用途 | 风险 |
|---|---|---|
ap.import |
导入发票、PO 和 GRN 行 | R1 local write |
ap.import_invoice_xml |
导入发票 XML 测试样例 | R1 local write |
ap.match |
执行三单匹配,默认价格容差 1%,并校验数量(写入匹配与例外) | R1 local write |
ap.export |
导出 Matches/Exceptions xlsx | R1 local write |
ap.tolerance_match |
按可配置容差(bps)重算三单匹配,只读 | R0 |
ap.duplicate_check |
检测重复发票行,只读 | R0 |
快速开始
dsh plugin --profile <profile> add dsh-ap-three-way
dsh --profile <profile> --dump-config | grep dsh-ap-three-way
验收示例(fixture + 快速开始)
- 快速开始:
samples/quickstart/(合成数据)→node samples/quickstart/run.mjs,金标samples/quickstart/expected/result.json。 - fixture:
fixtures/public/mit/invoice-github-sample.xml(公开 MIT 样本)。 - 验收:
node scripts/acceptance.mjs,明细见ACCEPTANCE.csv。
| req_id | metric | threshold | actual | pass | source | counted |
|---|---|---|---|---|---|---|
| SKU-05-A01 | 发票行解析 | 20/20 | 20 | true | public/synthetic | false |
| PS1-QS01 | quickstart 样例与金标一致 | 1/1 | 1 | true | synthetic/quickstart | true |
SKU 行是公开/合成 fixture 检查;PS1-QS01 是随包样例的本地复现,均非客户运行。
边界
- 仅公开/合成样例;不含客户数据或客户证据。
- alpha/partial、not counted,不作 GA 或生产可用声明。
- 除非工具明确说明,否则不调用模型、不联网。
- 每个工具的精确边界见工具表与
ACCEPTANCE.csv。
公开样例
公开/合成 fixture 在 fixtures/;自带快速开始样例在 samples/quickstart/(随包发布,≤500 KB)。ACCEPTANCE.csv 中 SKU 行 counted=false,PS1-QS01 为样例本地复现 counted=true。
开发
pnpm install --frozen-lockfile
pnpm build && pnpm lint && pnpm typecheck && pnpm test
兼容性
| 维度 | 状态 |
|---|---|
| Harness | dsh >=0.2.1-rc.3 <0.3.0 |
| Node | >=24.9.0 <25 |
| Platforms | All; local files only |
| 数据 | No network, no model call, no upload |
权限与数据
- 本地运行;不联网、不调用模型、不上传。
- 只使用公开/合成 fixture;不含客户数据或客户证据。
- alpha/partial;not counted,不作 GA 或生产可用声明。
相关项目
兄弟包与家族索引: dsh-einvoice · dsh-bankrec · dsh-travel-recon · dsh-finops-suite
相关核查器(英文表): Related checkers.
家族
许可证
Apache-2.0. See LICENSE, NOTICE, THIRD-PARTY-NOTICES.
链接
同类插件
loopx-project/loopx#dsh-loopx-plugin★ 6537
LoopX——面向长周期 Agent 的提供商中立、本地优先状态内核与控制平面:在 DeepSeek Harness 执行层之上持久化 Goal、Todo、门禁、证据、配额、恢复与交接状态;插件负责引导安装 CLI 与技能、准入有界的同会话续跑,并为精确绑定的工作循环提供本地 GoalBar。
Q00/ouroboros#integrations/dsh-plugin★ 6308
通过 DSH MCP 客户端挂载 Ouroboros 的纯配置包,在 DSH 中提供 36 个涵盖需求访谈、Seed、执行、评估与演化流程的工具。
chuspeeism/dashi-taskboard#deepseek-harness★ 3434
把当前已安装并运行中的 Codex Taskboard 嵌入 DeepSeek Harness 侧边栏,并通过 Launcher 运行时描述文件连接,而不是使用固定端口。
NanmiCoder/dsh-agent-teams★ 2647
AgentTeams 多智能体团队。
EthanYoQ/AI-Novel-Writer#dsh-ai-novel-writer★ 2265
安装专用 AI 小说创作预设与工作台:提供带修订号的本地项目资产、紧凑侧边工作台,以及需要原生审批的逐文件变更。
Miaotofu01/Study-Mate★ 1307
你的AI学习搭档:定计划、讲知识、做项目,学透一门科目。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。