文书档案归档
一步步带用户完成「判断该不该归 → 归多久 → 怎么编号 → 怎么写目录 → 实体怎么摆 → 怎么自检」。
核心原则:交互式推进,不替用户拍板。 每个阶段结束都要用 AskUserQuestion 让用户确认,确认后才进入下一阶段。宁可多问一句,也不要把错的数据写进目录表。
阶段 0:摸清三件事(必问)
第一个动作:用 AskUserQuestion 一次性问清下面 4 个问题(已知的不重复问):
- 归档部门:选项列常见的 3 个部门即可,不要把「其他部门」做成选项——提问界面选项下方自带「其他」自由输入框,用户直接手输部门名,一次到位(避免"选其他→再问一轮"的二次确认);拿到手输名称后与
02~11的部门名单对照,读音/写法接近的按目录表规范写法跟用户确认一次即可。 - 归档年度(单选):当年 / 上一年 / 指定年份。
- 源目录在哪(单选 + 自定义):如
Z:\办公室;同时确认要不要排除08.档案管理这类成果目录。 - 目录表在哪(单选 + 自定义):已有
附件3:…目录.xlsx就沿用;没有则用内置模板新建(见下)。
用户只说了"帮我归档"而没说部门/年度时,必须问,不要按上下文猜。
新手判断:如果用户表现出不了解流程(问"该怎么弄""要准备什么"),先按 references/95-首次使用指南.md 引导一遍,告诉他只需要"部门+年度+资料位置"三样、目录表可以用内置模板,再进入四要素提问。
资料分散判断:用户给不出单一源目录、或提到"材料在好几个地方",按 references/96-资料分散怎么办.md 处理:
- 首选:引导用户按 references/97-资料收集与放置建议.md 把资料集中复制到一个收集夹(含放置位置红绿灯:✅本地非系统盘/自有权限的共享盘,❌桌面/下载/网盘同步目录),再统一盘点;
- 用户不愿集中 → 让用户把每个位置都列出来,scan_source.py --src 传多个源,不要让用户先搬文件;
- 散在多人手里 → 生成「应收材料清单」让用户去收集,收齐后再盘点;
- 只有纸质件 → 先扫描建档,扫描没到位的不进目录(不建空单元)。
指令不全时:参照 97-资料收集与放置建议.md 第 4 节的九种发起示例,引导用户补全四要素(部门/年度/位置/目录表)。
目录表没有时用内置模板:把 assets/档案目录模板.xlsx 复制为 附件3:{公司}{年度}管理类档案目录.xlsx,改三处即可用:①每张子表 A1 标题的公司与年度;②档号里的单位代码(默认 SIGJ09);③删除每表第 4 行的示例行。之后按正常流程从 0001 起编。
阶段 1:只加载该部门的标准(关键)
按部门只读两份文件,绝不一次读全部:
| 用户选的部门 | 专用范围文件 |
|---|---|
| 办公室(党委办公室、党委工作部) | references/02-办公室.md |
| 人力资源部(党委组织部) | references/03-人力资源部.md |
| 财务资金部 | references/04-财务资金部.md |
| 审计监督部(纪委办公室) | references/05-审计监督部.md |
| 经营管理部(法律合约部) | references/06-经营管理部.md |
| 生产管理部 | references/07-生产管理部.md |
| 物资设备部 | references/08-物资装备部.md |
| 安全环保管理部 | references/09-安全环保管理部.md |
| 技术质量部 | references/10-技术质量部.md |
| 市场开发部 | references/11-市场开发部.md |
外加两份通用:
references/01-通用归档范围.md—— 所有部门都适用(会议、对上/对下业务、其他工作等 17 类)references/91-保管期限判定.md—— 判期限的规则与六种易错情形
> 归档范围是按部门拆开的,一份文件只讲一个部门的事。不要把全部标准塞进上下文,也不要跨部门套用——别的部门的条目对这个部门无效,条数与期限都可能不同。
阶段 2:盘点源目录
- 先跑脚本拿清单,不要靠肉眼翻。源目录有多个就全部传进来(--src 可重复):
python scripts/scan_source.py --src "Z:\<部门>" --year 2025 --out "F:\...\候选清单.md"
python scripts/scan_source.py --src "Z:\<部门>\1.综合" --src "Z:\<部门>\15.保密工作" --year 2025 # 多源
- 脚本列出本年度文件/目录,并标出「混装夹」(同级都有编号前缀、它没有的那种)。
- 盘完后向用户确认没有遗漏的源:桌面、下载、微信/企业微信接收文件、OA 系统里是否还有本年度材料(详见
96-资料分散怎么办.md的自查三问)。 - 逐类归堆(收发文、会议、信访、检查、台账…),见
92-盘点与去重.md。 - 与已有目录去重:导出目录表中该部门块的所有行(档号/文号/题名/日期),按文号 → 题名 → 日期三级比对。
盘点后,用 AskUserQuestion 报汇总数字并确认:
「盘出 N 项候选,其中 M 项已在目录中(将跳过)、K 项新材料,另有 X 项拿不准要不要归(下一步逐条问)」。
阶段 3:逐条判定(分批问,不要一次抛 40 条)
把候选按 8~10 条一批 用 AskUserQuestion 确认,每条给出建议值和依据:
- 保管期限:先查专用范围,再查通用范围;命中的条目把「业务职能 + 序号」写进建议理由。
- 题名:公文用户名;非公文按"年度 + 事由 + 材料类型"组名。
- 日期:成文日期 / 会议日期 / 年度性材料 12-31。
- 收发文与文号:公文必填;台账、会议材料等非公文留空(不填「—」)。
拿不准的(重要性判断、跨年度、是否重复)单列出来问,说明两个选项的后果。
每批确认完先记成临时清单(不写表),全部确认后再进阶段 4。
阶段 4:写目录表
动手前必读 90-档号与目录规范.md,并严格照做:
- 没有目录表就先用模板:复制
assets/档案目录模板.xlsx(三张子表+格式+表头都已备好),改 A1 标题与档号单位代码、删示例行;然后一切从 0001 起编。 - 读三张子表结构,定位本部门块的最后一行(序号、档号末 4 位、第 10 列写法)。
- 记下该表 A2 统计行的现值。
- 新行插在本部门块末尾(下一个部门块之前),序号与档号只在本部门块内续编。
- 按列填:序号 | 档号 | 收发文 | 文号 | 责任者 | 题名 | 日期 | 保管期限 | 归档机构 | 第 10 列。
- 格式照抄同表现有数据行(10 号字、居中、自动换行、日期格式
yyyy"年"m"月"d"日";模板里已预设)。 - 追加后重算统计行:单元数 = 去重档号数,记录数 = 数据行数。
- 保存前先备份
…_追加前备份.xlsx。
写完用 AskUserQuestion 报一次数字:「永久 +17(0053~0069)、长期 +16(0052~0067)、短期 +4(0038~0041),统计行已更新,是否继续做实体归档?」
阶段 5:实体归档
网络共享通常不允许工具进程改名/删除已有文件夹,所以实体操作一律走「生成脚本 → 用户双击」:
- 生成
plan.csv(模板见assets/plan_template.csv),表头:期限,部门,序号,题名,源路径。 - 先预览,再执行:
python scripts/copy_units.py --plan plan.csv --root "Z:\...\2025年" --dry-run
python scripts/copy_units.py --plan plan.csv --root "Z:\...\2025年" --log "F:\...\归档复制日志.txt"
- 配一个
.bat供双击,见assets/run_script.bat.template(注释必须纯 ASCII,末尾pause)。 - 目录表副本有多份时(桌面母本 + 档案室副本),每份都要同步。
阶段 6:自检(必做,别省)
python scripts/check_archive.py --root "Z:\...\2025年" --catalog "附件3:…目录.xlsx"
检查:单元数 vs 目录统计行、空单元、同名单元、命名格式(是否 4位序号-题名)、未加横杠的单元。
- 单元数对不上 → 查漏建或多建;
- 空单元 → 补扫描件,或撤掉单元(不要在目录里留空档);
- 同名单元 → 顺源目录查是否复制自重复/混装文件夹,见
93-常见问题与坑.md第 4 节。
最后给用户一份收尾报告:新增条数、档号区间、实体路径、遗留问题(含拿不准的判断)、日志位置。
硬性规则
- 不猜部门、不猜年度:没问清不动手。
- 只读本部门标准:跨部门条目不能套用。
- 编号只在本部门块内续,档号前缀一字不改,已用档号不复用、不重排。
- 新行插部门块末尾,不写到表尾,不打乱部门顺序。
- 非公文不编文号,收发文/文号列留空而不是打「—」。
- 不建空单元;归档前确认源文件存在且非空。
- 改表先备份,改完同步所有副本。
- 实体改名/删除不由工具进程硬试,交给用户的会话执行。
- 判断拿不准时列选项让用户选,并在报告里标注"推定"。
参考文件索引(按需读,别全读)
| 文件 | 什么时候读 |
|---|---|
references/95-首次使用指南.md |
用户是新手/第一次用时 |
references/96-资料分散怎么办.md |
资料不在一个文件夹、散在多人手里、只有纸质件时 |
references/97-资料收集与放置建议.md |
引导用户集中资料、建议放置位置、找发起指令示例时 |
references/01-通用归档范围.md |
阶段 3 每次都要 |
references/02~11-*.md |
阶段 1,只读本部门那一个 |
references/90-档号与目录规范.md |
阶段 4 前必读 |
references/91-保管期限判定.md |
阶段 3 判期限时 |
references/92-盘点与去重.md |
阶段 2 前必读 |
references/93-常见问题与坑.md |
遇到权限/空单元/重名/Excel 被占用时 |
资产索引(assets/)
| 文件 | 什么时候用 |
|---|---|
档案目录模板.xlsx |
用户没有目录表时,复制后改标题/单位代码即可用 |
plan_template.csv |
阶段 5 生成实体复制计划用 |
run_script.bat.template |
阶段 5 配一键双击脚本用(注释必须纯 ASCII) |
脚本索引
| 脚本 | 作用 |
|---|---|
scripts/scan_source.py |
盘点源目录,输出本年度候选清单,标记混装夹 |
scripts/copy_units.py |
按 plan.csv 复制成归档单元(可预览、可重复运行) |
scripts/rename_units.py |
批量给单元文件夹加/去横杠(--dry-run 先看) |
scripts/check_archive.py |
自检:数量对账、空单元、同名单元、命名格式 |