← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

财务数据脱敏采样(抽样试跑 · 保形脱敏 · 原表不动)

【财友云】从大表抽 20-50 行并对姓名/身份证/银行卡/手机号/金额保形脱敏,用于试跑与外发,原表零改动。适用于数据安全、合规、打个码等场景,核心能力覆盖敏感信息处理、抽点样本试试、数据外发前处理、工资表不能给人看、手机号身份证打星号。

person作者: u_43ebbe62hubenterprise

本地运行,零网络请求、免 API Key、不主动外发数据。 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。 边界说明:本包脚本自身不联网、不外发;若你把内容贴进 AI 对话,内容是否离开本机由你所使用的客户端决定,不由本包决定。

<!-- WB-CLAIM-BOUNDARY v1 -->

财务数据脱敏采样

流程跑通之前,谁都不该拿全量真实数据去试。本包解决两件事:抽一小撮样本(20–50 行)和把它脱敏到可以放心流转。

保形的含义:姓名还是两个字、金额还是五位数、银行卡还是 19 位——数据的形状保留,真实值破坏。这样试跑能跑出真实问题,外发也不泄露。

运行方式

<!-- WB-INVOKE-CONTRACT v1 -->

环境:Python 3.8+,仅标准库,无需安装任何依赖。

作用:财务数据脱敏采样(零网络 · 本地运行)

命令(在技能目录下执行;<尖括号> 是你要替换的输入):

# 默认预览(不写盘)
python scripts/data_mask.py <file>

# 确认无误后正式执行
python scripts/data_mask.py <file> --execute

参数:

| 参数 | 说明 | |---|---| | <file> | — |

选项:

| 选项 | 说明 | |---|---| | --sheet SHEET | — | | -n N | 抽样行数,默认 30(SOP 建议 20-50) | | --kinds KINDS | 强制指定列类型:列名=name/id/card/phone/amount,逗号分隔 | | --stratify STRATIFY | 按该列分层抽样,保证各分类都覆盖 | | --ratio RATIO | 金额缩放比例,默认 0.618 | | --jitter | 金额加 ±5% 随机扰动,防比例反推 | | --seed SEED | 随机种子,保证可复现 | | --out-dir OUT_DIR | — | | --execute | — | | --operator OPERATOR | — | | --rule-version RULE_VERSION | — |

退出码:0 成功 / 2 输入错误 / 3 鉴权失败 / 4 环境或依赖失败 / 8 部分成功。

输出:产物写入执行目录,源文件不改动;先跑预览确认,再加 --execute 落盘。

何时不触发

以下情况不要启动本技能,并主动告诉用户该走哪条路:

  1. 需求不在上面适用范围之内 → 直接说明本技能不覆盖,不要硬套流程凑出结果。
  2. 缺少必要输入(参数、文件、授权、前置数据)→ 先向用户索取,不要自行假设默认值开跑。
  3. 用户只是随口一问、要一个即时结论 → 直接回答,不要启动完整流程。
  4. 同一任务上一轮已产出、用户未要求变更 → 复用上次产物,不重复执行。
  5. 触发条件只是勉强沾边 → 宁可不触发。误触发一次的成本高于漏触发一次。

工作流(编号阶段)

| 阶段 | 做什么 | 产物 | 闸门 | |---|---|---|---| | 一 | 输出四件套(每次运行必有) | 执行结果 + 留痕文件 | 前置输入齐备、前置条件满足;缺参数先索取,不要假设默认值 | | 二 | 环境准备 | 执行结果 + 留痕文件 | 上一阶段产物已可用且通过检查;否则退回上一阶段重做 | | 三 | 用法 | 执行结果 + 留痕文件 | 上一阶段产物已可用且通过检查;否则退回上一阶段重做 | | 四 | 脱敏规则 | 执行结果 + 留痕文件 | 上一阶段产物已可用且通过检查;否则退回上一阶段重做 | | 五 | 一条必须知道的风险 | 执行结果 + 留痕文件 | 上一阶段产物已可用且通过检查;否则退回上一阶段重做 | | 六 | 安全与边界(拒绝权) | 执行结果 + 留痕文件 | 高危动作已人工确认;失败项已列原因与回滚方式 |

按顺序推进;上一阶段闸门没过,不进入下一阶段。

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

| 文件 | 内容 | |---|---| | mask_主表.csv | 脱敏后的样本,附原始行号(可回溯到原表核对) | | mask_异常表.csv | 不适用场景的说明 | | mask_校验表.csv | 抽样参数、脱敏列清单、反推风险提示、人工复核声明 | | fin-log.jsonl | 处理日志(追加) |

自动识别 + 预览

data_mask.py 工资表.xlsx -n 30

真实输出:

方案:工资表.xlsx | 总行=5 | 抽样=4 | 识别敏感列=6
  脱敏列:姓名(name)、应发工资(amount)、社保基数(amount)、银行卡(card)、手机号(phone)、身份证号(id)
  金额处理:×0.618
--- 脱敏样本预览(前 8 行)---
  员工编号 | 姓名 | 部门 | 应发工资 | 社保基数 | 银行卡 | 手机号 | 身份证号
  E003 | 王* | 财务部 | 13057.71 | 7106.36 | ***************0125 | 137****7000 | 4403************36
  E005 | 孙* | 技术部 | 14164.76 | 7577.36 | ***************0127 | 135****5000 | 4403************38

分层抽样 + 抗反推

data_mask.py 工资表.xlsx -n 30 --stratify 部门 --jitter --execute --operator 王五

--stratify 部门 保证每个部门都有样本;--jitter 给金额加 ±5% 随机扰动。

脱敏规则

| 类型 | 处理 | 示例 | |---|---|---| | 姓名 | 留首字,其余打星 | 张三 → 张* | | 身份证 / 税号 | 留前 4 后 2 | 440301199001011234 → 4403************36 | | 银行卡 | 只留后 4 位 | 6222021234567890123 → ***************0123 | | 手机号 | 留前 3 后 4 | 13800138000 → 138****8000 | | 金额 | 按比例缩放(默认 ×0.618) | 22000 → 13596 |

关联键不脱敏:员工编号、单号、合同号、凭证号这类列一律原样保留(E003 还是 E003)。脱敏掉它们,样本就没法和原表勾稽了。

一条必须知道的风险

金额按固定比例缩放,所以样本内部的比例关系仍然成立——如果同表里既有总额又有明细,理论上能反推出缩放比例,再倒推真实金额。

需要更强保护就加 --jitter(±5% 随机扰动),比例关系会被打散。这条风险写进了校验表的"反推提示"一栏,不会藏起来。

安全与边界(拒绝权)

  • 源文件零改动:输出进 _out/,原文件一个字节都不动
  • 默认预览:不加 --execute 不写盘
  • 识别不了就明说:没识别出的敏感列会在输出里标注"未识别到,用 --kinds 指定",不会假装已经脱敏
  • 可复现:--seed 固定随机种子,同一份输入跑两次结果一致,便于复核

人工复核(必读)

  • 脱敏样本不能用于入账、付款、申报——它的金额是假的
  • 外发前请自己再看一遍有没有列名里没体现的敏感字段(备注栏常常藏东西)
  • 涉及薪酬、个税的数据,外发范围按公司权限规定执行

相邻路线转交

| 用户要做的事 | 转交给 | |---|---| | 先统一格式再脱敏 | caiyouyun-fin-table-clean | | 扫描全表找异常 | caiyouyun-fin-anomaly-scan | | 检查文件里有没有泄露的密钥口令 | caiyouyun-financial-secret-scan |

自检清单

  • [ ] 关联键(编号/单号)原样保留了
  • [ ] 没有识别到的敏感列已用 --kinds 补上
  • [ ] 要外发的话,已确认加过 --jitter

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

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

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

输出规范

  • 交付形态:执行结果 + 变更清单,说清动了什么、没动什么。
  • 必含字段:执行前状态 / 执行动作 / 执行后状态 / 失败项与原因 / 回滚方式。
  • 留痕:产生副作用的执行必须写留痕文件(manifest / log),可回溯。
  • 自检:失败项未列原因,或无可回滚路径,视为未完成。

免责声明

本技能输出的是数据整理与流程辅助,不构成投资建议、税务意见或审计结论。涉及具体决策,以持牌机构、执业税务师/会计师的正式意见为准;引用的税率、法规与官方数据以最新公示版本为准,如遇更新以官方口径为准。


版本:v0.1.3 · 出品:【财友云】

反例对照(避开这些写法)

| ❌ 反例 | ✅ 正例 | 判据 | |---|---|---| | 高危动作直接执行 | 先 dry-run 预览,人工确认后再落盘 | 这一步做错了能不能一键撤回 | | 失败只说「失败了」 | 失败项 + 失败原因 + 已回滚到什么状态 | 用户能不能据此判断要不要重试 | | 重复执行已做过的动作 | 先查留痕文件,已完成的跳过(幂等) | 重跑一次会不会产生重复副作用 | | 执行完不说改了什么 | 给出变更清单:动了哪些、没动哪些 | 用户能否核对结果 |

<!-- WB-SELFCHECK v1 -->

交付前自检(必跑)

本包自带可执行自检脚本。在交付 / 打包 / 发布之前,必须运行并通过:

python scripts/selfcheck.py

退出码语义(与本节末尾「退出码(脚本契约)」一致):

| 码 | 含义 | 你要做的事 | |---|---|---| | 0 | 全部通过 | 可以交付 | | 2 | 用法错误 | 检查运行路径,用包根目录下 scripts/selfcheck.py | | 3 | 门禁未通过 | 按 FAIL 项逐条修好再交付,不要带病交付 | | 4 | 环境问题 | 检查 Python 版本(需 3.8+)与入口脚本是否可运行 | | 8 | 部分通过 | 无 FAIL,但有 WARN;建议先修警告项再交付 |

自检覆盖:SKILL.md 与 frontmatter(name·description)/ 合规声明(frontmatter license 或 ATTRIBUTION.md,二者其一即可——第三方转化包常以后者记录归属)/ 必备章节 / 打包卫生(禁止 .pyc·pycache·.bak·.zip)/ 脚本可编译 / 入口脚本 --help 可运行。

<!-- /WB-SELFCHECK -->

退出码(脚本契约)

| 码 | 含义 | 你要对用户说的话 | |---|---|---| | 0 | 成功 | 直接给结果,不解释过程 | | 2 | 输入错误(缺参数 / 格式不对 / 文件不存在) | 「你给的 <X> 不对,需要 <Y>」—— 说明正确格式,不要猜默认值硬跑 | | 3 | 鉴权/授权失败(密钥缺失、无权限) | 「需要你先提供 <凭据>」—— 说明去哪里拿,不要跳过鉴权 | | 4 | 服务/环境失败(网络不可用、依赖缺失) | 「这一步依赖 <X> 不可用」—— 给出替代路径或降级方案 | | 8 | 部分成功(有成功项也有失败项) | 「N 项成功、M 项失败」—— 逐条列出失败项与原因,不要只报总数 |

脚本退出非 0 时:不要静默重试。先把该码对应的话告诉用户,再决定是补齐输入重试、还是换路径。

状态与断点

  • 多阶段流程在执行目录写 outputs/.state.json,记录「当前阶段 + 已完成产物路径 + 时间」。
  • 每个阶段结束后写一次;中途中断后重启,先读该文件,从断点阶段继续,不从头重跑。
  • 状态文件只记阶段与产物路径,不记对话内容、不记敏感数据。
  • 发现状态文件与实际情况不符(产物已不存在)时,以实际产物为准并重置状态。