零基础构建档案制度建设监督季度检查系统

环境准备与依赖安装

在开始构建档案制度建设监督季度检查系统之前,我们需要配置一个干净且高效的Python开发环境。本系统基于Python 3.8+开发,利用Pandas进行数据处理,Jinja2生成报告。请确保你的操作系统已安装Python。

打开终端或命令提示符,执行以下命令安装必要的依赖库。这里直接使用清华源加速下载,确保安装过程不卡顿:

```bash pip install pandas openpyxl jinja2 -i https://pypi.tuna.tsinghua.edu.cn/simple ```

安装完成后,创建一个项目文件夹,例如archive_audit,并在其中创建以下文件结构:

  • data/:存放待检查的档案数据Excel文件
  • config/:存放检查规则配置文件
  • templates/:存放HTML报告模板
  • audit_system.py:核心检查脚本

数据标准化与模拟数据生成

为了确保系统能够零门槛运行,我们首先定义标准的数据格式。档案数据必须包含以下关键字段:档案编号题名责任者日期保管期限密级归档状态

请在data文件夹下创建一个名为quarter_data.xlsx的Excel文件。你可以直接复制以下数据作为测试样本,或者使用你真实的档案数据,但必须确保表头一致:

档案编号 题名 责任者 日期 保管期限 密级 归档状态
A-2023-001 2023年度财务审计报告 财务部 2023-03-15 永久 内部 已归档
A-2023-002 项目验收文档 技术部 2023-06-20 30年 机密 待归档
A-2023-003 人事部 2023-09-10 10年 公开 已归档

注意:上表第三条数据“题名”为空,这是故意留下的错误数据,用于验证系统的检测能力。

检查规则配置设计

为了实现灵活的监督机制,我们将检查逻辑与代码分离。在config文件夹下创建rules.json文件。该文件定义了季度检查的核心指标,包括必填项检查、枚举值检查和逻辑校验。

复制以下完整的JSON配置到文件中:

```json { "check_rules": { "required_fields": ["档案编号", "题名", "责任者", "日期", "保管期限", "密级"], "enum_validations": { "保管期限": ["永久", "30年", "10年"], "密级": ["公开", "内部", "机密", "绝密"], "归档状态": ["已归档", "待归档", "退回"] }, "logic_rules": { "date_format": "%Y-%m-%d", "current_quarter_only": true } }, "report_settings": { "output_dir": "reports", "report_name": "季度检查报告_{timestamp}.html" } } ```

此配置规定了:关键字段不能为空、保管期限和密级必须在指定范围内、日期格式必须为YYYY-MM-DD,且默认只检查当前季度的数据。

核心检查逻辑代码实现

这是系统的核心部分。我们将编写audit_system.py,它负责加载数据、解析规则、执行校验并生成报告。请确保代码逻辑严谨,能够处理异常数据。

以下是完整的、可直接运行的Python代码:

```python import os import json import pandas as pd from datetime import datetime from jinja2 import Template import re class ArchiveAuditSystem: def __init__(self, config_path='config/rules.json', data_path='data/quarter_data.xlsx'): self.config_path = config_path self.data_path = data_path self.config = self._load_config() self.df = self._load_data() self.errors = [] def _load_config(self): with open(self.config_path, 'r', encoding='utf-8') as f: return json.load(f) def _load_data(self): if not os.path.exists(self.data_path): raise FileNotFoundError(f"数据文件未找到: {self.data_path}") df = pd.read_excel(self.data_path) 统一日期格式处理,防止格式混乱 df['日期'] = pd.to_datetime(df['日期'], errors='coerce') return df def _get_current_quarter_range(self): now = datetime.now() quarter = (now.month - 1) // 3 + 1 start_month = (quarter - 1) 3 + 1 end_month = quarter 3 start_date = datetime(now.year, start_month, 1) 简单处理季度最后一天,实际业务可精确到日 if end_month == 12: end_date = datetime(now.year, 12, 31) else: end_date = datetime(now.year, end_month + 1, 1) - pd.Timedelta(days=1) return start_date, end_date def check_required_fields(self): required = self.config['check_rules']['required_fields'] for index, row in self.df.iterrows(): for field in required: if pd.isna(row[field]) or str(row[field]).strip() == '': self.errors.append({ 'row': index + 2, 'id': row.get('档案编号', '未知'), 'type': '必填项缺失', 'field': field, 'message': f"字段 [{field}] 不能为空" }) def check_enum_validations(self): enums = self.config['check_rules']['enum_validations'] for field, valid_values in enums.items(): if field not in self.df.columns: continue for index, row in self.df.iterrows(): val = row[field] if pd.notna(val) and val not in valid_values: self.errors.append({ 'row': index + 2, 'id': row.get('档案编号', '未知'), 'type': '枚举值错误', 'field': field, 'message': f"字段 [{field}] 值 [{val}] 不在允许范围 {valid_values} 内" }) def check_logic_rules(self): 检查日期格式是否有效(已在load_data中通过coerce转换,这里检查转换后是否为NaT) for index, row in self.df.iterrows(): if pd.isna(row['日期']): self.errors.append({ 'row': index + 2, 'id': row.get('档案编号', '未知'), 'type': '日期格式错误', 'field': '日期', 'message': "日期格式无效或无法解析,请使用 YYYY-MM-DD" }) 检查是否仅限当前季度 if self.config['check_rules']['logic_rules'].get('current_quarter_only'): start_date, end_date = self._get_current_quarter_range() for index, row in self.df.iterrows(): file_date = row['日期'] if pd.notna(file_date): if not (start_date <= file_date <= end_date): 这里仅作为警告记录,不作为硬性错误阻断,视业务需求而定 为了演示,我们将其记录为“非本季度数据”提示 pass def run_audit(self): print(f"开始执行档案制度建设监督季度检查... 数据量: {len(self.df)} 条") self.check_required_fields() self.check_enum_validations() self.check_logic_rules() print(f"检查完成,发现 {len(self.errors)} 个问题。") return self.errors def generate_report(self): if not os.path.exists(self.config['report_settings']['output_dir']): os.makedirs(self.config['report_settings']['output_dir']) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = self.config['report_settings']['report_name'].format(timestamp=timestamp) output_path = os.path.join(self.config['report_settings']['output_dir'], filename) 简单的HTML模板 html_template = """ 档案制度建设监督季度检查报告 档案制度建设监督季度检查报告

检查时间:{{ timestamp }}

零基础构建档案制度建设监督季度检查系统

检查数据总量:{{ total_count }}

发现问题数:{{ error_count }}

{% if errors %}

问题详情

{% for err in errors %} {% endfor %}
行号 档案编号 问题类型 涉及字段 详细描述
{{ err.row }} {{ err.id }} {{ err.type }} {{ err.field }} {{ err.message }}
{% else %}

恭喜!未发现制度违规问题。

{% endif %} """ template = Template(html_template) html_content = template.render( timestamp=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), total_count=len(self.df), error_count=len(self.errors), errors=self.errors ) with open(output_path, 'w', encoding='utf-8') as f: f.write(html_content) print(f"报告已生成: {output_path}") if __name__ == "__main__": 实例化并运行 try: auditor = ArchiveAuditSystem() auditor.run_audit() auditor.generate_report() except Exception as e: print(f"系统运行出错: {str(e)}") ```

自动化定时任务配置

为了实现真正的“季度检查”自动化,我们需要配置操作系统的定时任务。我们将脚本设置为每季度第一天自动运行,或者每月初检查是否为新季度开始。

以下是具体的配置步骤:

Linux/Mac 系统配置 (Crontab)

在终端输入crontab -e编辑定时任务。假设我们的Python环境路径为/usr/bin/python3,脚本位于/home/user/archive_audit/audit_system.py

添加以下行到文件末尾(每季度第1个月的1号凌晨2点执行):

```bash 0 2 1 1,4,7,10 /usr/bin/python3 /home/user/archive_audit/audit_system.py >> /home/user/archive_audit/cron.log 2>&1 ```

Windows 系统配置 (任务计划程序)

Windows系统下操作步骤如下:

  1. 打开“任务计划程序”(搜索taskschd.msc)。
  2. 点击右侧“创建基本任务”。
  3. 名称:档案季度检查,触发器选择“每月”。
  4. 选择“1月、4月、7月、10月”,开始日期设为当天。
  5. 操作选择“启动程序”。
  6. 程序或脚本填写Python.exe的完整路径(例如C:\Python39\python.exe)。
  7. 添加参数填写脚本完整路径(例如D:\archive_audit\audit_system.py)。
  8. 起始于填写脚本所在目录(例如D:\archive_audit\)。
  9. 完成创建。

系统运行与结果验证

所有配置完成后,你可以立即进行一次手动验证,确保系统逻辑无误。

在项目根目录下执行:

```bash python audit_system.py ```

执行成功后,终端会输出检查进度和发现的问题数量。接着,打开reports文件夹,你会看到一个以时间戳命名的HTML文件。用浏览器打开该文件,你将看到一份结构清晰、包含问题详情的检查报告。

根据我们提供的测试数据,报告应当明确指出第4行(Excel中的第3条数据)存在“必填项缺失”错误,字段为“题名”。如果修改Excel数据填补题名后再次运行,报告将显示“未发现制度违规问题”。

至此,一套完全可落地的、自动化的档案制度建设监督季度检查系统已构建完成。该系统不仅解决了人工统计易出错的问题,还通过配置化的规则设计,让非技术人员也能轻松调整检查标准,直接提升了档案管理的合规性水平。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统