票证 P0 已上线 L0

发票查重

按发票号码+代码+金额+日期组合查重,并抓拆票、连号、跨期同额,拦住重复报销与重复入账

技能 sluginvoice-duplicate-check
所属栏目票证 发票 / 票据
交付阶段P0 P0 计划 · 验证财税品类能否吃住「数据不出电脑」,且只做地基类(清洗/合并/脱敏/异常)与最高频刚需
版权© 2026 律令科技(深圳)有限公司开发 · 财友云(caiyouyun.cn)发布
这个包已上线。复制到本地即可离线运行;正文与用法以下方随包 SKILL.md 为准。

技能正文(随包 SKILL.md)

> **本地运行,零网络、免 API Key、数据不出电脑。**
> 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。

# 发票查重

重复报销最难的是**证据**。同一张票报了两次,两张表长得一模一样,肉眼扫不出来——因为第二次报销的人往往改了备注、换了部门、隔了半个月。

本包不猜哪一张是真的。它把**四种嫌疑**全部列出来,每嫌疑都附上「和哪一行的哪几列相同」,你把两张原票调出来比一下就行。查重结果从来不是结论,是清单。

## 输出四件套(每次运行必有)

| 文件 | 内容 |
|---|---|
| `dup_主表.csv` | 未命中任何嫌疑的票,通过查重 |
| `dup_异常表.csv` | 所有嫌疑票,含 `_命中类型 / _命中行号 / _风险等级` |
| `dup_校验表.csv` | 查重键、分组数、各类型命中数、人工复核声明 |
| `fin-log.jsonl` | 处理日志(追加) |

## 环境准备

```bash
PY="<python 3.8+ 路径>"   # 纯标准库
"$PY" <skill目录>/scripts/dup_check.py <发票明细表> [参数]
```

## 用法

### 默认四键查重

```bash
dup_check.py 报销发票明细.xlsx
```

按 `发票号码 + 发票代码 + 金额 + 开票日期` 组合判重(键列不存在时自动退化,并在校验表里写明退化原因)。

真实输出:

```
方案:报销发票明细.xlsx | 数据行=138 | 查重键=发票号码+发票代码+金额+开票日期
  四键全同 → 全额重复
  号码同金额异 → 拆票嫌疑
--- 命中 3 类 ---
  全额重复   2 组(4 行)
  拆票嫌疑   1 组(2 行)
  同额同源近日期 0 组
```

### 加时间容差,抓跨月重复

```bash
dup_check.py 报销发票明细.xlsx --window 7
```

同销方、同金额、开票日期相差 7 天以内的票进入「跨期同额」嫌疑。改日期躲重复,这条能抓。

### 换业务唯一键

```bash
dup_check.py 报销发票明细.xlsx --key 发票号码,金额 --mode any
```

报销场景里 often 只关心「同一张票报没报过」,金额是主证据,日期可能被报销单改。

## 四种嫌疑的判定

| 命中类型 | 判定 | 典型来源 |
|---|---|---|
| 全额重复 | 查重键四列全同 | 同一张票贴了两张报销单 |
| 拆票嫌疑 | 号码代码相同,金额/日期不同 | 把一张票拆成两笔入账 |
| 跨期同额 | 号码不同,但销方+金额相同且日期差 ≤ `--window` | 改日期重复入账 |
| 一票多报 | 号码不同、销方相同、金额相同(无日期条件) | 借别的票凑数 |

**风险分级**:全额重复 = 高(基本确定是重复);拆票嫌疑 = 高;跨期同额 = 中(改日期可能只是笔误);一票多报 = 中(销方名可能写错)。

## 一条必须知道的边界

查重键必须**四列齐全**才有意义。只有号码没有金额,查重就退化成「号码查重」——那挡不住拆票。

所以本包在键列缺失时不静默降级,而是在校验表里写清退化到哪种键、每组命中数变化多大。你看了觉得不够严,就补列重跑。

## 安全与边界(拒绝权)

- **源文件零改动**:输出进 `_out/`,原表一个字节不动
- **默认预览**:不加 `--execute` 不写盘
- **键列不在表里就停**:`C.need()` 校验,不猜近似列名(「票号」≠「发票号码」)
- **不宣判**:命中只是嫌疑,最终认不认由审核人说了算,输出里也不写"确认欺诈"

## 人工复核(必读)

- 「全额重复」里的两张票请调出原件比对,很可能一张是复印件
- 「拆票嫌疑」要确认是不是同一张票分两次报销(这是重复报销的典型手法)
- 命中清单应当退回给报销人确认,不要直接按异常扣款

## 相邻路线转交

| 用户要做的事 | 转交给 |
|---|---|
| 发票文件批量改名、归档 | `invoice-batch-rename` |
| 发票合规项预检(必填/备注/清单) | `invoice-rule-check` |
| 按月核对进销项、出申报底稿 | `vat-monthly-recon` |
| 发票台账汇总 | `invoice-book` |

## 可直接复制的说法

```text
帮我把这张报销发票明细跑一遍查重,四键(号码+代码+金额+日期)全同的算全额重复,
号码相同但金额不同的算拆票嫌疑,同销方同金额日期差 7 天以内的算跨期同额。
只要清单不要结论,命中几组、每组涉及哪几行都列出来,我拿去跟报销人对。
```

## 做完怎么算完成

- [ ] 命中清单里的每一组都能在原表里找到对应行号
- [ ] 重复类型判断无误(全额 vs 拆票别混)
- [ ] 退回给报销人确认后才有处理结果
- [ ] 校验表里写的查重键与实际使用的一致

---

本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。

版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。
本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。

允许个人及企业内部免费使用、复制、修改,包括内部生产环境。
未经书面许可,不得将本 Skill 或其修改版作为商业服务对外销售、转售或提供托管服务。
各版本发布之日起 4 年后自动转为 Apache License 2.0。详见随包 `LICENSE.md`。

相邻技能

票证 规划中P0 计划 已上线

发票台账

进销项发票台账,按月/客户/税率汇总,导出 CSV

L0 · 发票 / 票据
票证 规划中P1 在建 已上线

发票 PDF 字段提取

从带文本层的数电票 PDF 抽取号码/日期/金额/税率/购销方

L0 · 发票 / 票据
票证 规划中P1 在建 已上线

发票合规预检

必填字段、金额勾稽、备注栏与清单发票规则校验

L1 · 发票 / 票据
票证 规划中P1 在建 已上线

发票文件批量命名

按 日期-销方-金额-号码 规范重命名,输出可追溯清单

L0 · 发票 / 票据
票证 规划中P1 在建 已上线

进销项发票月度核对

按所属期与开票期双口径汇总,红字与原票关联,跨期/未勾选/税率异常单列,输出申报前待确认清单

L1 · 发票 / 票据
资金 规划中P0 计划 已上线

银行流水解析

多银行 CSV/Excel 流水归一化成统一字段与方向标记

L0 · 现金 / 银行 / 收付
资金 规划中P0 计划 已上线

银企对账

流水与账面按金额+日期窗口匹配,输出已勾对/单边与余额调节表

L0 · 现金 / 银行 / 收付
记账 规划中P1 在建 已上线

批量生成记账凭证

从业务单据表按科目映射批量生成凭证草稿,借贷平衡预检

L0 · 凭证 / 账簿
报表 规划中P1 在建 已上线

财务指标分析

40+ 指标(偿债/营运/盈利/成长)+ 多期趋势与同业占位

L0 · 报表 / 申报
底座 规划中P0 计划 已上线

税费计算

增值税/附加/个税/印花税/所得税预缴,附公式与政策依据

L1 · 计算工具 / 归档 / 合规
底座 规划中P0 计划 已上线

财税数值工具

金额大写、含税不含税互算、价税分离、尾差分摊、百分比反算

L0 · 计算工具 / 归档 / 合规
记账 规划中P1 在建 已上线

分录合法性校验

借贷平衡、科目级次、辅助核算必填、红字方向、异常金额预警

L0 · 凭证 / 账簿
本页内容由本地构建生成于 2026-09-27。技能正文以随包 SKILL.md 为准。