工资表社保表个税表按人逐项核对,三态判定,只有一方有必须标出不按 0 补齐
payroll-three-checkSKILL.md 为准。> **本地运行,零网络、免 API Key、数据不出电脑。**
> 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。
# 工资社保个税三表核对
工资表发多少钱、社保表个人缴多少、个税表申报多少收入,这三张表讲的是同一批人的同一件事。
很多公司月末是三张表各自做各自的,等发现对不上已经是月底第三天的早晨。
本包把三张表**以「姓名」为键做外连接**,逐人逐项比对,出三种判定:
| 判定 | 含义 |
|---|---|
| 一致 | 两侧都有值且差额在容差内(默认 0.01 元) |
| 不一致 | 两侧都有值,差额超出容差 |
| 只有一方有 | **一侧有值、另一侧缺数** —— 单独标出,不按 0 补齐当一致 |
外加第四种:`不可计算`(两侧都缺数)。
## 核对项
| 编号 | 左(工资表) | 右 | 说明 |
|---|---|---|---|
| T1 | 应发工资 | 个税申报表「申报收入」 | 申报收入额一般应等于应发工资合计 |
| T2 | 工资表「社保个人」 | 社保表「个人缴纳」 | 同一笔个人扣款 |
| T3 | 工资表「公积金个人」 | 社保表「公积金个人缴纳」 | 两侧都有这一列时才参与 |
## 输入 / 输出
输入:3 个文件,位置参数依次为**工资表、社保缴纳表、个税申报表**(`.xlsx` / `.csv`)。
| 表 | 必需列 | 可选列 |
|---|---|---|
| 工资表 | 姓名、应发工资 | 社保个人、公积金个人 |
| 社保缴纳表 | 姓名、个人缴纳 | 公积金个人缴纳、缴费基数 |
| 个税申报表 | 姓名、申报收入 | 实缴税额 |
列名找不到时自动匹配别名(姓名 / 员工姓名 / 人员;应发工资 / 应发合计 / 工资总额;
个人缴纳 / 个人应缴 / 个人部分;申报收入 / 收入额 / 工资薪金所得……),
也可用 `--wage-col` / `--soc-col` / `--tax-col` 手动指定。
输出(进 `_out/`,源文件不动):
| 文件 | 内容 |
|---|---|
| `tl_主表.csv` | 逐人逐项一行:姓名 / 核对项 / 两侧值 / 判定 / 差异 / 差异合计(该人) |
| `tl_异常表.csv` | 所有非「一致」项(含只有一方有),带风险等级 |
| `tl_校验表.csv` | 三态统计、口径、容差、人数对照 |
| `tl_差异合计.csv` | **差异单独成表**:谁在哪几项不一致、差异合计多少 |
| `fin-log.jsonl` | 处理日志(追加) |
## 用法
```bash
PY="<python 3.8+ 路径>" # 纯标准库,无需 pip install
"$PY" <skill目录>/scripts/three_check.py 工资表.xlsx 社保缴纳表.xlsx 个税申报表.xlsx --execute
```
容差与列名:
```bash
"$PY" three_check.py 工资表.xlsx 社保表.xlsx 个税表.xlsx --tol 0.5 \
--wage-col 应发合计 --tax-col 收入额 --execute
```
**默认不写盘**——不加 `--execute` 只打印预览,确认无误再落盘。
## 真实输出
正常(4 人 3 项,李娜差 1 元):
```
方案:工资表 4 人(应发工资) | 社保表 4 人(个人缴纳) | 个税表 4 人(申报收入)
合并后 4 人,核对项 3 个:T1 应发工资 ↔ 个税申报收入、T2 社保个人 ↔ 社保表个人缴纳、T3 公积金个人 ↔ 社保表公积金个人缴纳
--- 逐人逐项核对(共 12 项,只列非「一致」与前 15 行)---
李娜 T1 应发工资 ↔ 个税申报收入 不一致 差 1.0 两表金额差 1.00 元
--- 三态统计 ---
一致 11 项 | 不一致 1 项 | 只有一方有 0 项 | 不可计算 0 项
--- 异常表(1 条)---
[李娜 ] T1 应发工资 ↔ 个税申报收入 1.0
```
只有一方有(李娜不在社保表、赵敏不在个税表、王强社保为空值):
```
方案:工资表 4 人(应发工资) | 社保表 3 人(个人缴纳) | 个税表 3 人(申报收入)
合并后 4 人,核对项 2 个:T1 应发工资 ↔ 个税申报收入、T2 社保个人 ↔ 社保表个人缴纳
--- 逐人逐项核对(共 8 项,只列非「一致」与前 15 行)---
李娜 T2 社保个人 ↔ 社保表个人缴纳 只有一方有 差 1500.0 社保缴纳表里没有这个人;只有「社保个人」有值(1500.0),「个人缴纳」这一侧缺数,不按
赵敏 T1 应发工资 ↔ 个税申报收入 只有一方有 差 16900.0 个税申报表里没有这个人;只有「应发工资」有值(16900.0),「申报收入」这一侧缺数,不按
--- 三态统计 ---
一致 6 项 | 不一致 0 项 | 只有一方有 2 项 | 不可计算 0 项
```
失败路径:
```
$ three_check.py tc_工资表.xlsx tc_社保表_缺列.xlsx tc_个税申报表.xlsx --execute
【算不出】「tc_社保表_缺列.xlsx」里找不到个人缴纳列
建议:可用别名:个人缴纳、个人应缴、个人部分、个人缴纳金额、缴纳金额(个人);也可用 --wage-col / --soc-col / --tax-col 指定列名
本包不会给一个看似合理的替代数字 —— 财税场景算错比不做更危险。
$ three_check.py tc_工资表_重复人.xlsx tc_社保缴纳表.xlsx tc_个税申报表.xlsx --execute
【算不出】「tc_工资表_重复人.xlsx」里有 1 个重复的人,无法按人核对:「张伟」出现在第 1、2 行
建议:同一张表同一个人只能有一行,合并后再跑本包
```
## 拒绝权(什么情况下不给数)
| 情况 | 处理 |
|---|---|
| 三个文件里任一缺姓名列 | 拒绝(RC=2),列出可识别别名 |
| 工资表缺应发工资列 / 社保表缺个人缴纳列 / 个税表缺申报收入列 | 拒绝(RC=2) |
| 同一张表同一人出现两行 | 拒绝(RC=2),报出重复行号 |
| 文件不存在 / 空表 | 拒绝(RC=2) |
| `--tol` 不是 ≥ 0 的数字 | 拒绝(RC=2) |
| 一侧有值另一侧缺数 | **不拒绝**,标「只有一方有」并计差异 —— 这是要找的线索 |
| 金额为空值、为 0、为负 | 按「有值」比对,差异照算;空值那侧按「缺数」处理,绝不填 0 |
## 关键设计(容易踩的坑)
1. **只有一方有 ≠ 0**。工资表扣了 1500 社保、社保表这一行是空的,差额不是 1500 的「0 差」,
而是「社保表根本没这人的数据」——可能是漏缴、漏报、也可能是 Tax 口径没启用。本包一律单独标出。
2. **外连接不做内连接**。某人只出现在社保表也照样进主表,否则「谁没缴社保」这件事就被悄悄吞掉了。
3. **差异单独列**。主表里每人每项一行,差异看这一行;「差异合计(该人)」在每行重复给出,
另有一张 `tl_差异合计.csv` 只汇总差异,方便直接甩给对账的人。
4. **容差 0.01 元**。超过 1 分钱就算不一致——财务对账要的就是这 1 分钱的来源。
5. **姓名是唯一键**。三张表的姓名写法必须一致(空格、全角半角、简称都会匹配不上)。
匹配不上不会「顺便」给您一个结论,只会标「只有一方有」。
## 人工复核(必读)
- 社保表「个人缴纳」与工资表「社保个人」口径可能不同(一个按申报基数、一个按应发扣款),
一致只是幸运,不一致不等于错——要看政策与申报口径
- 个税申报收入是**申报口径**,可能因年终奖单独计税、专项附加扣除等与实际发放不一致
- 三张表的时间区间要对齐(同一所属期),跨月数据会全部对不上
- 「只有一方有」要人工逐条判断是漏报还是漏做,本包不替您下结论
- 别人重名、身份证填错导致匹配串人,本包识别不到,只按姓名匹配
## 相邻路线转交
| 用户要做的事 | 转交给 |
|---|---|
| 只算工资表里的个税与实发 | `payroll-calc` |
| 生成可发给员工的工资条 | `salary-slip-gen` |
| 工资计提 / 发放凭证入账 | `voucher-batch-generate` |
| 个税申报表填写 | `tax-form-fill` |
| 社保缴费基数合规检查 | `social-base-check`(如无则人工核查) |
## 可直接复制的说法
```text
把工资表、社保缴纳表、个税申报表三张表按人核对一遍。
逐人逐项给我三种结论:一致、不一致、只有一方有。
「只有一方有」的必须单独列出来并标出是哪一侧缺,不许按 0 补齐当作一致。
差异合计单独给一列、单独出一张表。
某张表缺姓名列、或者同一个人两行,就直接拒绝并说清楚,不要硬凑一个结果。
```
## 做完怎么算完成
- [ ] 三个文件的姓名写法已确认一致(无空格、无简称)
- [ ] 「只有一方有」的每一行都找到了人(漏缴 / 漏报 / 口径不同)
- [ ] 三表所属期间已对齐到同一月
- [ ] `tl_差异合计.csv` 里的差异合计与主表逐项差异对得上
- [ ] T1 / T2 / T3 三项口径与本公司实际申报口径确认过
---
本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。
版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。
本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。
允许个人及企业内部免费使用、复制、修改,包括内部生产环境。
未经书面许可,不得将本 Skill 或其修改版作为商业服务对外销售、转售或提供托管服务。
各版本发布之日起 4 年后自动转为 Apache License 2.0。详见随包 `LICENSE.md`。增值税/附加/个税/印花税/所得税预缴,附公式与政策依据
金额大写、含税不含税互算、价税分离、尾差分摊、百分比反算
五险一金 + 个税累计预扣预缴 + 实发,支持多地参数表
直线/双倍余额/年数总和/工作量法,生成折旧明细表
期间生成、周旬季年切换、工作日调整、账期与自然日换算
按年度-凭证号-附件组织,生成目录清单与完整性校验
按人拆成独立文件,可加密打包,不留明文
无形资产与长期待摊费用摊销明细表
新增/折旧/处置/盘点全生命周期台账
等额本息/等额本金/气球贷,含实际利率与 IRR 校验
多币种折算、期末汇兑损益计算,汇率走内置表或导入
合并查询所有财税技能的运行日志,按时间/技能/级别过滤
SKILL.md 为准。