2.1 Paperless-ngx 与 Mayan EDMS
两个开源文档管理系统都不会成为本项目的事实源,但它们的消费管道、文档类型 / 多文件版本、对象级 ACL 是现成的设计参考。
Decision一期不迁移 SVN,只抽取 EDMS 设计模式。
Paperless借鉴消费管道、自动匹配、标签优于文件夹。
Mayan借鉴文档容器、多文件版本、对象级 ACL。
相关来源文件
docs/11-reference-platforms-agentic-knowledge-base.md· §3 Paperless-ngx 与 Mayan EDMS。docs/03-baseline-requirements.md· §4 数据与权限基线。
两者定位
| 维度 | Paperless-ngx | Mayan EDMS |
|---|---|---|
| 产品定位 | 把纸质 / 扫描 / 日常文件变成 可检索归档 | 企业级电子文档管理系统 |
| 核心抽象 | tags · correspondents · document types · 自定义字段 · 存储路径 | document type 是核心对象,文档继承类型上的设置 |
| 自动匹配 | 给 tag / correspondent / document type / storage path 配匹配规则 | 更强调文档类型、工作流、ACL、版本 |
| 权限 | 对象权限、owner、privileges、列表权限 | RBAC + 全局权限 + 对象级 ACL + 类型继承 |
| 版本 | 保留原始文件 + 归档版本 | Document 是容器,可有多个 document files / versions |
| 工作流 | 工作流可修改元数据和权限 | 状态、转换、版本、签名、REST 接口 更完整 |
| 适配成本 | 较轻 | 较重 |
来源
docs/11-reference-platforms-agentic-knowledge-base.md §3.2。Paperless-ngx 可借鉴设计
图 2.1.1 · Paperless-ngx 的消费管道。
- 消费管道:文件进入后统一产生处理任务,包括 OCR、文本抽取、元数据匹配、入库。本项目可对应到
ingestion_job。 - 自动匹配算法:给标签、往来方、文档类型设置
match与matching_algorithm,自动判断是否应用。可作为标签规则引擎原型。 - 标签优于文件夹:一个文档可有多个标签,跨目录组织。本项目应弱化 SVN 目录树作为唯一组织维度。
- 原件不覆盖:保留原始文件,同时生成可搜索 / 归档版本。对应"Word 留档 + 盖章 PDF + OCR 文本"分层。
- 管理列表:tags / document types / 已保存视图 / 工作流都是独立可维护对象。
不要照搬 correspondent
Paperless 的 correspondent 适合账单、信函、家庭归档,但本项目需要 客户 / 政府单位 / 合同主体 / 我方主体 / 政策 / 项目 等多实体模型。Paperless 的自动匹配也容易在企业复杂业务中误匹配,必须叠加人审与冲突优先级。
来源
docs/11-reference-platforms-agentic-knowledge-base.md §3.3。
Code
paperless-ngx/paperless-ngx ·
消费管道
src/documents/consumer.py、src/documents/tasks.py;
自动匹配 src/documents/matching.py、src/documents/models.py(MatchingModel 抽象类与 matching_algorithm 字段);
工作流模板 src/documents/templating/。
Mayan EDMS 可借鉴设计
图 2.1.2 · Mayan EDMS 文档容器模型。
- 文档类型优先:合同、发票、申报材料、评审意见、政策文件、会议纪要等应是稳定类型,元数据规则继承自类型。
- 文档容器模型:同一业务文档可关联 Word 留档、盖章 PDF、扫描图片、修订版、附件包;本项目对应
documents与document_files(见 §4)。 - 非破坏性版本:索引文本、OCR 文本、人工修正文稿、源文件不互相覆盖。
- 对象级权限:权限不是前端过滤,而是对象 / 类型 / 路径级约束。
- 工作流状态:待解析、解析失败、待人审、已确认、需重建索引、已废弃应作为一等字段,而不是隐式状态。
不要把它当事实源
Mayan 是重型系统。一期把原始文件迁出 SVN 会引发权限、目录习惯、版本历史和用户阻力。SVN authz 是事实边界;Mayan 的 ACL 不应覆盖 SVN authz,只能作为治理层参考。
来源
docs/11-reference-platforms-agentic-knowledge-base.md §3.4。
Code
mayan-edms/mayan-edms(GitLab) ·
文档容器与多文件
apps/documents/models/document_models.py、document_file_models.py、document_version_models.py;
文档类型继承 apps/documents/models/document_type_models.py;
对象级 ACL apps/acls/;
工作流状态机 apps/document_states/;
事件审计 apps/events/。
迁移到本项目的对照表
| EDMS 概念 | 本项目对应 | 实现位置 |
|---|---|---|
| Document 类型 | 合同 / 政策 / 申报书 / 评审意见 / 会议纪要 / 台账 | document_types 表 + 类型规则 |
| 文档容器 + 多文件 | 一份业务文档对应 Word 留档、盖章 PDF、扫描图片 | documents + document_versions |
| Tag / Correspondent | L1 / L2 / L2.5 / L3 标签 + 客户 / 政府单位实体 | tags + entities |
| 自动匹配 | 路径规则 + 文件名规则 + 关键词规则 | 规则引擎 + AI suggestion |
| 工作流 status | 待解析 / 解析失败 / 待人审 / 已确认 / 已废弃 | document_status 状态机 |
| 对象级访问控制 | SVN authz + 路径前缀映射 + 角色范围 | permissions 表 + 检索过滤层 |
| Storage path | SVN 路径 + 镜像规则 | svn_path + 增量同步策略 |
这张表后续会在 1.3 入库管线页转成具体表 schema。
来源
docs/11-reference-platforms-agentic-knowledge-base.md §3、§10。
Code
Paperless 概念 → 代码:tags
src/documents/models.py(Tag)、document types Document类型、自定义字段 CustomField、存储路径 StoragePath、工作流与 src/documents/signals/handlers.py。
Mayan 概念 → 代码:types apps/documents/models/document_type_models.py、元数据 apps/元数据/、权限 apps/权限/。
继续阅读
- 2.2 Argilla 人审反馈 · 把"自动匹配"产生的候选送进人审。
- 1.2 标签体系 · 如何把 tag 和 correspondent 拓展成多实体模型。
- 1.3 入库管线 · 文档容器模型在数据库中的具体表。