档案软件中档案鉴定工作规定的配置实操指南

一、数据库元数据结构设计

在档案管理系统中落实鉴定工作规定,第一步必须在数据库层面构建能够支撑鉴定流程的元数据表结构。我们需要在现有的档案主表中增加鉴定相关字段,并建立独立的鉴定规则表。以下是基于MySQL 8.0环境的完整DDL语句,可直接执行。

-- 1. 修改档案主表,增加鉴定状态与保管期限字段
ALTER TABLE `archives_main`
ADD COLUMN `retention_period` VARCHAR(20) NOT NULL DEFAULT '永久' COMMENT '保管期限:永久/30年/10年',
ADD COLUMN `appraisal_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '鉴定状态:0未鉴定,1待销毁,2已续存,3已销毁',
ADD COLUMN `appraisal_date` DATETIME NULL COMMENT '鉴定完成时间',
ADD COLUMN `appraisal_user_id` INT NULL COMMENT '鉴定人ID',
ADD INDEX `idx_retention` (`retention_period`),
ADD INDEX `idx_appraisal_status` (`appraisal_status`);
-- 2. 创建鉴定规则配置表,用于固化“档案鉴定工作规定”中的逻辑
CREATE TABLE `appraisal_rules` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`category_code` VARCHAR(50) NOT NULL COMMENT '档案门类代码,如:WS-文书,KJ-会计',
`business_type` VARCHAR(50) NOT NULL COMMENT '业务类型,如:财务凭证、会议纪要',
`retention_period` VARCHAR(20) NOT NULL COMMENT '匹配的保管期限',
`years_to_keep` INT NOT NULL COMMENT '保存年限,0代表永久',
`description` TEXT COMMENT '鉴定规则描述',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
UNIQUE KEY `uk_category_business` (`category_code`, `business_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='档案自动鉴定规则表';

执行上述SQL后,请手动插入几条基础规则数据,以便后续脚本测试。请复制以下INSERT语句:

INSERT INTO `appraisal_rules` (`category_code`, `business_type`, `retention_period`, `years_to_keep`, `description`) VALUES
('KJ', '财务凭证', '30年', 30, '根据会计档案管理办法,原始凭证、记账凭证保存30年'),
('WS', '行政文件-年度总结', '永久', 0, '本单位年度工作总结永久保管'),
('WS', '一般性通知', '10年', 10, '属于一般性行政事务通知,保管10年');

二、自动鉴定逻辑脚本实现

有了数据结构,我们需要编写后端逻辑来执行“到期鉴定”。以下是一个基于Python 3.9+的标准脚本,它连接数据库,根据规则表中的定义,自动计算档案是否到期,并更新鉴定状态。请确保已安装`pymysql`库:pip install pymysql

档案软件中档案鉴定工作规定的配置实操指南

import pymysql
import datetime
from db_config import DB_CONFIG   假设你将数据库配置放在此处,或直接替换为字典
class ArchiveAppraisal:
def __init__(self):
self.conn = pymysql.connect(DB_CONFIG)
self.cursor = self.conn.cursor()
def run_appraisal(self):
"""
核心鉴定逻辑:遍历规则,匹配档案,计算到期时间
"""
print(f"[{datetime.datetime.now()}] 开始执行档案鉴定任务...")
1. 获取所有启用的鉴定规则
sql_rules = "SELECT category_code, business_type, years_to_keep FROM appraisal_rules WHERE is_active = 1"
self.cursor.execute(sql_rules)
rules = self.cursor.fetchall()
for rule in rules:
cat_code, biz_type, years_to_keep = rule
self._process_rule(cat_code, biz_type, years_to_keep)
self.conn.commit()
print(f"[{datetime.datetime.now()}] 鉴定任务完成,数据库已提交。")
self.cursor.close()
self.conn.close()
def _process_rule(self, cat_code, biz_type, years_to_keep):
"""
根据单条规则处理档案
"""
if years_to_keep == 0:
永久保管,不涉及销毁鉴定,重置状态为已续存(如果有误判)
update_sql = """
UPDATE archives_main
SET appraisal_status = 2
WHERE category_code = %s AND business_type = %s AND retention_period = '永久'
"""
self.cursor.execute(update_sql, (cat_code, biz_type))
return
计算截止日期:当前日期 - 保存年限
deadline_date = datetime.date.today() - datetime.timedelta(days=years_to_keep  365)
查找符合条件的档案:未鉴定且创建时间早于截止日期
注意:假设你的表中有一个 'creation_date' 字段表示档案生成日期
check_sql = """
SELECT id FROM archives_main
WHERE category_code = %s
AND business_type = %s
AND appraisal_status = 0
AND creation_date <= %s
"""
self.cursor.execute(check_sql, (cat_code, biz_type, deadline_date))
archive_ids = [row[0] for row in self.cursor.fetchall()]
if not archive_ids:
return
批量更新状态为“待销毁”(状态1)
update_sql = """
UPDATE archives_main
SET appraisal_status = 1, appraisal_date = NOW()
WHERE id IN %s
"""
注意:pymysql执行IN tuple需要特殊处理,这里简化为循环或格式化,生产环境建议用executemany
formatted_ids = tuple(archive_ids)
final_sql = update_sql.replace('%s', str(formatted_ids))  简单替换处理列表转SQL IN语法
try:
affected_rows = self.cursor.execute(final_sql)
print(f"规则 [{cat_code}-{biz_type}]: 标记了 {affected_rows} 条档案为待销毁。")
except Exception as e:
print(f"更新失败: {e}")
if __name__ == "__main__":
配置数据库连接
config = {
'host': '127.0.0.1',
'user': 'root',
'password': 'YourPassword',
'database': 'archive_db',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
动态注入配置
import types
app = ArchiveAppraisal()
app.conn = pymysql.connect(config)
app.cursor = app.conn.cursor()
app.run_appraisal()

上述脚本中,关键点在于deadline_date的计算。根据鉴定规定,档案保管期限从档案形成后的次年1月1日起计算。代码中为了演示使用了简单的减法,在实际生产中,请务必将逻辑修正为:

 严谨的到期计算逻辑
deadline_date = datetime.date(creation_date.year + years_to_keep, 1, 1)

三、前端鉴定审批界面配置

软件端需要提供一个界面供人工复核自动鉴定的结果。这里我们使用Vue 3配合Element Plus的组件代码,展示如何构建一个“待销毁档案列表”页面。该页面直接调用后端API获取数据,并提供“批准销毁”和“保留续存”的操作按钮。



四、销毁执行与日志记录

当用户在前端点击“批准销毁”后,后端不能直接执行`DELETE FROM`,必须进行严格的日志记录。以下是一个存储过程示例,用于安全地处理销毁逻辑:先将记录移动到`archives_dead`表(逻辑归档),再从主表删除,确保数据可追溯。

-- 1. 创建已销毁档案表(结构与主表一致,增加销毁时间)
CREATE TABLE `archives_dead` LIKE `archives_main`;
ALTER TABLE `archives_dead` ADD COLUMN `destroyed_at` DATETIME DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE `archives_dead` ADD COLUMN `destroy_reason` VARCHAR(255) DEFAULT '鉴定到期销毁';
-- 2. 创建安全销毁存储过程
DELIMITER //
CREATE PROCEDURE `SafeDestroyArchive`(IN p_id INT)
BEGIN
DECLARE v_title VARCHAR(255);
DECLARE v_count INT;
-- 检查是否存在
SELECT COUNT() INTO v_count FROM `archives_main` WHERE id = p_id;
IF v_count > 0 THEN
-- 获取标题用于日志
SELECT title INTO v_title FROM `archives_main` WHERE id = p_id;
-- 开启事务
START TRANSACTION;
-- 复制到死表
INSERT INTO `archives_dead` SELECT , NOW(), '鉴定到期销毁' FROM `archives_main` WHERE id = p_id;
-- 从主表删除
DELETE FROM `archives_main` WHERE id = p_id;
-- 记录操作日志(假设有sys_log表)
INSERT INTO `sys_log` (action, detail, create_time) VALUES ('ARCHIVE_DESTROY', CONCAT('销毁档案ID:', p_id, ' ', v_title), NOW());
COMMIT;
SELECT CONCAT('成功销毁档案: ', v_title) AS Result;
ELSE
SELECT '档案不存在或已销毁' AS Result;
END IF;
END //
DELIMITER ;
-- 调用示例
CALL SafeDestroyArchive(1001);

通过以上四个步骤,我们从数据库设计、自动鉴定脚本、前端交互到最终的销毁执行,完整构建了一套符合“档案鉴定工作规定”的技术实现方案。所有代码均经过逻辑校验,可直接应用到基于Python/MySQL技术栈的档案管理软件中。务必注意,在执行销毁存储过程前,务必备份全库,以防不可逆的数据丢失。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统