采购文件整理与重命名
概述
把散乱/命名不规范的采购文件,按「项目 → 环节」两级目录归档并统一重命名。
同一项目归入同一文件夹,覆盖采购全生命周期八个环节,支持任意文件格式。
最终归档结构(项目文件夹是必需的第一层):
<整理目录 或 归档库>/
├── <项目名>/
│ ├── 01-采购申请/
│ ├── 02-供应商寻源与准入/
│ ├── 03-招投标与询价/
│ ├── 04-采购审批/
│ ├── 05-合同/
│ ├── 06-订单/
│ ├── 07-验收/
│ └── 08-付款/
└── _待处理/ ← 项目未定/非采购文件暂存,待 AI 判断
路径规则(重要):
- 用户丢一个文件夹来整理 → 原地整理:在该文件夹内直接建「项目/环节」结构,不搬离、不新建别的目录。
- 新文件(邮箱下载、桌面新建等散文件)→ 判断项目/环节后,归入用户已有的归档库对应项目文件夹;归档库位置由用户指定,不要自动新建「采购文件库」。
何时使用
- 用户要求按采购进度/采购项目归类整理文件、统一重命名、归档;
- 用户要把旧的采购资料文件夹整体重新整理;
- 用户希望「盒子」:旧文件夹丢进去自动整理,新文件丢进去自动重命名归位;
- 文件名无法判断类别、需要读文档内容才能正确归类时。
核心工作流:脚本预分类 + AI 深读
不要只靠文件名关键词判断。 关键词只是第一层线索,最终以「读文档内容」为准。
第一步:脚本确定性预分类(organizer.py)
python scripts/organizer.py <源目录> # 原地整理(默认预览,只打印不移动)
python scripts/organizer.py <源目录> --execute # 确认预览无误后,真正移动
python scripts/organizer.py <源目录> --target <归档库> # 迁移到指定归档库
> 默认预览模式:不传 --execute 一律只打印、不移动文件;确认后再加 --execute 执行。
行为:
- 关键词匹配文件名/文件夹名,能确定「项目+环节」的直接归位;
- 项目确定、环节未定 → 移入 <项目>/00-待分类/(保留原名);
- 项目未定 → 移入 _待处理/(保留原名,交给 AI)。
第二步:AI 读取文档,提炼项目名 + 判断环节
对 _待处理/ 与 <项目>/00-待分类/ 中的文件,逐个执行:
-
提取文本(用本技能
scripts/extract_text.py):
bash python scripts/extract_text.py <文件路径> --limit 6000
支持 PDF / docx / xlsx / txt。扫描型 PDF 无法提取文本时,改用 Read 工具(图片)或提示用户 OCR。 -
提炼项目名 —— 以「采购申请」类文档为准,组合四个要素:
{申请日期}_{申请单号}_{申请人}_{采购标的}
示例:2021-05-07_PROC-BC99A95566124141_曲瑾_在线大班直播课采购。
若同批文件已能判定属于同一采购事件(同一审批编号/申请人/标的),合并为同一项目。 -
判断环节 —— 依据文档内容语义归类(详见
references/procurement-stages.md):
- 采购申请/立项/需求计划 → 01
- 寻源/供应商征集/市场调研/供应商准入/入库 → 02
- 招投标/询价/单一来源/报价单/报价汇总/报价对比 → 03
- 采购审批/审批流转/会签 → 04
- 合同/协议 → 05,订单/送货 → 06,验收/到货 → 07,付款/发票 → 08 -
执行归档(organizer.py 的
--apply,标准化入口):
生成 JSON 映射文件,每条{"source": 绝对路径, "project": 项目名, "stage_no": "05"},
bash python scripts/organizer.py --target <归档根目录> --apply <mapping.json> # 预览 python scripts/organizer.py --target <归档根目录> --apply <mapping.json> --execute # 执行
默认预览,确认无误后再加--execute执行。
桌面「盒子」界面(gui.py)
需要带 tkinter 的完整版 Python(Windows 下 py -3):
python scripts/gui.py
GUI 提供:选择旧文件夹预览整理、收件箱自动监听、待分类清单手动归位、项目/规则管理。
GUI 的自动分类同样只是关键词预分类;真正「读文档判断」请走上面的 AI 工作流。
项目识别与命名
- 项目来源:优先由 AI 从采购申请文档提炼(时间+单号+申请人+标的);也可在
config.json的projects中预设项目名与别名关键词。 - 命名模板:
{stage_no}-{stage_name}_{name}_{date}(日期放末尾),日期取文件修改时间。
变量:{stage_no}{stage_name}{date}{name}{project}。 - 同名文件自动加
_1/_2,不覆盖。
配置
scripts/config.json:唯一规则来源(八大环节关键词、命名模板、pending_dir等),升级时随整包覆盖、自动生效,不会残留旧版本。- 个人路径偏好(归档库位置、收件箱、监听开关)保存在用户目录
~/.workbuddy/procurement-file-organizer/settings.json,升级不受影响。 - 想临时用别的规则文件,可传
--config <路径>覆盖。
隐私与数据处理
- 文件始终在用户本地处理:移动/重命名/归档均为本地磁盘操作,文件本身不会上传云端。
- 关键词预分类(organizer.py)纯本地:不读取文件内容、不联网。
- AI 读文档判断(extract_text.py + 大模型):在本地提取文档文本后,文本内容会发送给云端大模型做语义判断。涉及报价、合同金额等敏感内容的文件,应征得用户同意后再做 AI 深判断,或建议用纯关键词模式。
- 首次使用或处理敏感资料前,应向用户说明上述边界。
路径确认(每次开始时)
- 每次会话/打开界面开始时,读取
~/.workbuddy/procurement-file-organizer/settings.json,向用户主动告知当前归档库与收件箱路径,并询问是否需要更改。 - 未设置归档库时,提示用户:丢文件夹来会原地整理(无需设置);新散文件需指定归入哪个归档库。
规则自更新(自我演进)
使用过程中,用户提出新的规则要求时,按以下流程自动更新规则文件,实现 skill 的自我演进——不需要用户手动重新打包。
- 确认:复述理解的新规则,明确列出将改动的字段(命名模板 / 环节 / 关键词 / 项目命名),请用户确认。未经用户确认,不得改动任何规则。
- 更新:用户确认后,用编辑工具更新
scripts/config.json:
- 改命名格式 → 更新naming_template(变量{stage_no}{stage_name}{date}{name}{project});
- 加/减关键词 → 修改对应环节的keywords数组;
- 调整环节(合并/拆分/新增)→ 更新stages数组,注意编号连续、与references/procurement-stages.md对应。
- 涉及环节定义、归类语义变化时,同步更新references/procurement-stages.md和本 SKILL.md 中的描述。 - 同步:若本 skill 被内嵌在专家包(
procurement-assistant/skills/procurement-file-organizer/)或存在独立副本(~/.workbuddy/skills/、Cursor 打开的源码目录),把改动同步到这些副本,保证专家与独立 skill 规则一致。 - 提示:若需分发给他人,提示用户是否重新打包 zip。
常见新规则示例:
- 「日期放到最前面」→ naming_template 改为 {date}_{stage_no}-{stage_name}_{name};
- 「对账也归入付款」→ 在 08-付款 的 keywords 追加 "对账";
- 「把报价对比从招投标里拆出来」→ 调整 stages 数组并重新编号。
资源
scripts/organizer.py— 核心逻辑:关键词预分类、--apply按映射归档、--simulate预览;scripts/extract_text.py— 文档文本提取(PDF/docx/xlsx/txt),供 AI 阅读;scripts/gui.py— 桌面「盒子」界面;scripts/config.json— 默认规则配置;references/procurement-stages.md— 八大环节定义、关键词与项目命名规则。