企业级保险电子档案制度落地全流程实操案例拆解
一、准备阶段:选准合规载体,梳理核心需求
本次案例以国内中型财险公司A的车险保单电子归档为试点,覆盖从投保签单到理赔结案的全生命周期档案,载体选择开源工具Paperless-ngx(轻量、支持PDF加密、权限控制、符合《保险业务档案管理规范》DA/T 78-2019基础要求),部署在局域网虚拟机,成本可控。
1.1 梳理核心合规节点与功能需求
- 合规节点:必须满足DA/T 78-2019的原始性、完整性、可用性、安全性,需配置电子签名验证、归档日志审计、访问权限分级
- 功能需求:批量上传PDF、OCR识别关键字段(保单号、车牌号、被保险人身份证号)、一键关联全生命周期档案、到期提醒、支持DA/T 78标准格式的导出
1.2 部署环境准备
测试/生产环境统一使用Ubuntu 22.04 LTS,虚拟机配置至少为:CPU 2核、内存4GB、存储500GB SSD(试点1个月约生成100GB档案,预留扩容空间)。
- 更新系统源:
sudo apt update && sudo apt upgrade -y - 安装Docker与Docker Compose:
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh && sudo usermod -aG docker $USER && newgrp docker && sudo apt install docker-compose-plugin -y
二、部署阶段:按要求配置Paperless-ngx
2.1 拉取配置文件
创建工作目录并下载官方可直接复制的docker-compose.yml:
- 创建目录:
mkdir -p ~/paperless-ngx && cd ~/paperless-ngx - 下载配置:
wget https://github.com/paperless-ngx/paperless-ngx/releases/latest/download/docker-compose.yml
2.2 修改配置文件以适配保险合规
用nano或vim打开docker-compose.yml,找到并修改以下部分,其他保持默认:
```yaml version: "3.8" services: broker: image: docker.io/library/redis:7 restart: unless-stopped volumes: - redisdata:/data db: image: docker.io/library/postgres:15 restart: unless-stopped volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: 你的复杂Postgres密码(至少12位含大小写、数字、符号) webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: unless-stopped depends_on: - db - broker - gotenberg - tika ports: - "8000:8000" volumes: - data:/usr/src/paperless/data - media:/usr/src/paperless/media - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: 你的复杂Postgres密码(与上面一致) PAPERLESS_DBNAME: paperless PAPERLESS_URL: http://局域网IP:8000 PAPERLESS_SECRET_KEY: 生成的强密钥(可运行`python3 -c "import secrets; print(secrets.token_urlsafe(50))"`生成) PAPERLESS_TIME_ZONE: Asia/Shanghai PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_OCR_MODE: skip 试点先跳过自动OCR,后续按需开启,避免CPU过载 PAPERLESS_CONSUMER_POLLING: 10 每10秒扫描一次上传目录 PAPERLESS_CONSUMER_DELETE_DUPLICATES: true PAPERLESS_ADMIN_USER: admin PAPERLESS_ADMIN_PASSWORD: 你的复杂管理员密码(至少12位含大小写、数字、符号) PAPERLESS_ENABLE_2FA: true 开启双因素认证,满足安全合规 PAPERLESS_AUDIT_LOG: true 开启归档日志审计 PAPERLESS_MAX_FILE_SIZE: 100MB 允许大文件(如高清查勘照片PDF合并) PAPERLESS_TAG_COLORS: "red,blue,green,yellow,purple,orange" gotenberg: image: docker.io/gotenberg/gotenberg:8.7 restart: unless-stopped command: - "gotenberg" - "--chromium-disable-javascript=true" - "--chromium-allow-list=file:///tmp/." tika: image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped volumes: data: media: pgdata: redisdata: ```2.3 启动服务
运行以下命令启动Paperless-ngx,首次启动会自动下载镜像、初始化数据库:
docker compose up -d

检查服务状态,确保所有容器都是Up状态:
docker compose ps
三、配置阶段:设置权限、标签、归档流程
3.1 初始化管理员并开启2FA
- 用浏览器访问http://局域网IP:8000
- 输入配置文件中的PAPERLESS_ADMIN_USER和PAPERLESS_ADMIN_PASSWORD登录
- 系统会自动跳转到2FA配置页面,使用Google Authenticator或Authy扫描二维码,保存恢复码
3.2 创建合规用户组与权限
符合DA/T 78-2019的“最小权限”原则,创建以下4个用户组:
- 系统管理员组:仅admin用户,权限全开放
- 车险归档组:仅可上传、编辑、关联全生命周期车险档案,不可删除、导出完整DA/T 78格式
- 理赔调阅组:仅可查看与自己负责案件关联的全生命周期车险档案
- 合规审计组:仅可查看归档日志、调阅所有档案、导出完整DA/T 78格式
3.3 创建固定标签与自定义字段
固定标签用于快速分类,自定义字段用于关联DA/T 78-2019要求的元数据:
- 固定标签:投保、核保、批改、理赔报案、查勘、定损、核赔、结案、单证丢失补录
- 自定义字段(所有字段设置为必填):
- 保单号(文本)
- 车牌号(文本,支持模糊搜索)
- 被保险人身份证号/统一社会信用代码(文本)
- 归档时间(日期时间,自动获取上传时间)
- 归档人(用户选择,自动获取上传用户)
- 档案密级(下拉菜单:公开、内部、机密)
3.4 设置一键关联规则
在「设置」→「文档关联」中,创建规则:当新上传的文档包含“保单号”自定义字段时,自动与数据库中相同保单号的所有文档关联。
四、试点实施阶段:批量上传与全流程验证
4.1 批量上传历史PDF保单
将历史车险PDF保单按“年份+月份”整理到本机文件夹,通过Paperless-ngx的「批量上传」功能上传(一次最多上传1000个文件),上传后手动补充或批量导入自定义字段(用Python脚本批量导入,附简单示例):
```python import requests import csv 配置信息 BASE_URL = "http://局域网IP:8000" TOKEN = "你的API令牌(在admin用户「设置」→「API」中生成)" CSV_PATH = "历史保单元数据.csv" 需包含文档ID、保单号、车牌号、被保险人身份证号/统一社会信用代码、档案密级 headers = { "Authorization": f"Token {TOKEN}", "Content-Type": "application/json" } 读取CSV并更新自定义字段 with open(CSV_PATH, newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: document_id = row["文档ID"] payload = { "custom_fields": { "1": row["保单号"], 自定义字段ID在后台查看 "2": row["车牌号"], "3": row["被保险人身份证号/统一社会信用代码"], "6": row["档案密级"] } } response = requests.patch(f"{BASE_URL}/api/documents/{document_id}/", json=payload, headers=headers) print(f"文档ID {document_id} 更新状态:{response.status_code}") ```4.2 全流程验证合规性
- 原始性验证:上传一份带有电子签名的PDF保单,用Adobe Acrobat Reader验证签名未被篡改
- 完整性验证:模拟上传一份缺失查勘照片的PDF,归档组用户需补充后才能完成归档(可在标签中设置必填的“查勘”标签)
- 可用性验证:理赔调阅组用户搜索自己负责案件的车牌号,查看关联的所有文档
- 安全性验证:用普通用户登录,尝试删除文档、导出DA/T 78格式,系统提示权限不足;查看合规审计组的归档日志,所有操作均有记录
五、正式上线与维护
5.1 上线准备
将测试环境数据迁移到生产环境:
- 停止测试环境服务:
cd ~/paperless-ngx && docker compose down - 打包测试环境数据:
sudo tar -czf paperless-backup.tar.gz data media pgdata redisdata docker-compose.yml - 将备份文件传输到生产环境并解压到相同目录,启动服务:
docker compose up -d
5.2 日常维护
- 每日检查容器状态:
docker compose ps - 每周备份数据:
sudo tar -czf paperless-weekly-backup-$(date +%Y%m%d).tar.gz data media pgdata redisdata docker-compose.yml - 每月更新Paperless-ngx:
cd ~/paperless-ngx && docker compose pull && docker compose up -d