SYSTEM ARCHITECTURE · V1 DRAFT

保单条款知识库 · 系统架构设计

面向「保单结构化存储」与「条款自动归集」两个任务的系统架构。本文档给出分层架构、数据域划分、双流水线设计、条款获取策略路由与表结构骨架;业务字段的权威定义留待保险条款解读专家补充,本文档只锁定架构骨架与接口边界。

版本 v1.0 draft 日期 2026-09-12 依据 5 份真实样张 / 4 家保司 / 112 页 状态 待专家补字段

1结论先行:三条核心判断

先把架构定调的三句话放在最前面,后面所有设计都是这三条的展开。

判断一 · 必须拆成两个数据域
保单和条款不是父子关系,是多对多。一张公共责任险保单挂了 21 份附加条款,而这些条款会被成百上千张保单反复引用。条款必须独立成域、单独去重,保单侧只存引用。
判断二 · 条款的钥匙是注册号,不是链接
实测四家保司全部给出产品注册号(如 C00017930912026012844573)。链接是获取线索、会失效、会换域名;注册号才是跨保单、跨时间的稳定主键。
判断三 · 「点进去才看到」有三种形态
不是一种。有内嵌正文直链 PDF二次跳转取址三种,必须做成可插拔的保司适配器,不能写死一套下载逻辑。
一句话总结架构 沿用你现有 panliku 的「SQLite 结构化 + OSS 原件 + MCP/Web 双通道」骨架,在其旁边并列挂一个新的条款域:保单流水线负责「这张单保了什么」,条款流水线负责「这条款写了什么」,中间用一张绑定表 + 一张证据链表把两边缝起来。

2样张实测:条款的三种真实形态

以下结论全部来自对 5 份真实保单的逐页解析,不是推测。原始抽取文本存于 样张实测/ 目录。

2.1 五份样张的形态分布

样张保险人(出单机构)页数条款形态条款数获取特征
公共责任险 中国人寿财产保险
雅安市雨城区支公司
4 C 二次跳转 21 econnect.chinalife-p.com.cn 取址接口,非文件直链
团体意外险 阳光财产保险
重庆市分公司渝中支公司
3 B 直链 PDF 7 epolicy.sinosig.com,文件名即条款全名(URL 编码)
雇主责任险 众安在线财产保险 56 B 直链 PDF 9 static.zhongan.com/upload/core/term/{条款码}.pdf,条款码如 3B3
建工团意 中国太平洋财产保险
苏州分公司
25 A 内嵌正文 2 条款全文印在 p4 起共 19 页,含注册号
建筑工程一切险 中国太平洋财产保险
苏州分公司
24 A 内嵌正文 1 条款全文印在 p4 起共 10 页,含注册号

2.2 三种形态的原始证据

形态原始链接 / 正文锚点示例可自动化程度
A 内嵌 中国太平洋财产保险股份有限公司 建筑工程施工人员团体人身意外伤害保险(2013 版)条款(产品注册号:H00001432312017052436981)第一部分 基本条款 / 第一条 保险合同构成 … 100% — 纯文本抽取 + 结构化切分
B 直链 static.zhongan.com/upload/core/term/3B3.pdf
epolicy.sinosig.com/digitalBill_download/resource/pdfs/阳光财产保险股份有限公司团体意外伤害保险(互联网专属)条款.pdf
约 95% — 直接 GET,需处理 UA / 失效
C 跳转 econnect.chinalife-p.com.cn/frontendnew/getobscloudurl?file=/clausefile/clausePdf/8017658/10001632/8017658.pdf 约 80% — 需二次请求换真实地址,且链接有效期短,必须即时落盘

2.3 从实测中发现的三个额外事实

条款三标识并存
条款名称 + 注册号 + 备案号 同时出现。众安雇主险的备案号形如「(众安在线)(备-其他)【2021】(附) 256号」,太保用注册号。两套编号都要存,用于兜底匹配。
同一条款重复列示
雇主责任险的「适用条款」页,9 份条款每份各出现 2 遍(27 条链接 = 9 × 3)。归集环节必须按条款去重,不能按出现次数入库。
存在无文本的图片页
雇主责任险 p1–p2 为纯图片页(0 字文本 / 1 张整页图)。流水线必须有 OCR 兜底分支,不能假设所有页都有文本层。

3总体架构:五层 + 双域

分层负责「数据怎么流」,双域负责「数据怎么放」。

① 接入层 · Ingest 统一入口,两种任务共用 上传 / 批次登记 SHA256 指纹去重 格式识别 PDF/图/OFD 原件留档 → OSS 归档 OCR 兜底分支(整页图片页,如雇主险 p1–p2 实测)· 文本层检测 · 页级哈希 ② 解析层 · Parse → 任务一:保单格式化 把一张保单拆成「主体 / 明细 / 特约 / 条款引用」四块 版面解析文本+表格+坐标框 保司 / 险种识别路由到对应模板 主体抽取投/被保人、标的 明细表抽取责任/保额/免赔/费率 特约抽取编号条目切分 条款引用抽取名称+注册号+链接 证据锚定页码+坐标+原文片段 校验 + 置信度规则+勾稽 ③ 条款归集层 · Clause Resolver → 任务二:条款入库 按保司路由到可插拔适配器,把条款正文取回并切分 条款主数据查重保司+注册号 命中即复用 形态判定 + 路由内嵌/直链/跳转/兜底 保司适配器每家一个插件 正文快照内容哈希+落盘 条款条目切分条 / 款 / 项 层级 语义向量化供 AI 检索引擎 失败转人工队列+ 保司索取函 失效巡检链接可用性定时探测 ④ 存储层 · Storage(域分离) 三个物理载体:对象存储放原件,关系库放结构化,向量索引放语义 保单域 · Policy policy 保单主表 party / insured_person coverage / limit / deductible endorsement 特别约定 条款域 · Clause clause 主数据(唯一键) clause_version 版本/备案 clause_section 条目 clause_artifact 正文快照 公共 · Common insurer 保司字典 policy_clause_binding 绑定 extract_evidence 证据链 doc_artifact / review_task ⑤ 服务层 · Service 复用现有 api.wangyoyo.top 的鉴权与配额骨架 MCP 工具组AI Agent 通道 Web 检索 / 管理端人工通道 复核工作台低置信度人工确认 KeyManager / 配额沿用现有三段式 定时任务:条款链接失效巡检 · 新版本条款监测 · 批次重跑 任务一 = ① ② ④ · 任务二 = ① ③ ④ · ③ 的输入来自 ② 产出的「条款引用」 关键接口:② 只负责「发现条款并输出引用」,③ 只负责「把条款正文取回来」,两边不互相依赖
图 3-1 五层总体架构。任务一(保单格式化)落在 ②④,任务二(条款入库)落在 ③④,两条流水线通过「条款引用」这个中间产物解耦。
为什么要把 ② 和 ③ 解耦 「发现这张保单引用了哪些条款」和「把条款正文弄到手」是两种完全不同的失败模式。前者失败说明解析不准,后者失败说明对方网站挂了。解耦之后,条款下载失败不会阻塞保单入库——保单先落库,条款引用标记为 pending,后台慢慢补。这在有 700+ 案件要跑的场景下是必须的。

4数据模型:保单域 / 条款域 / 绑定

这是整个架构最关键的部分。下面的字段是骨架——圈定了有哪些实体、彼此什么关系;具体字段的权威定义留给保险条款解读专家。

保单域 · Policy Domain 回答:这张单保了什么 policy 保单主表 policy_id | policy_no 保单号(唯一) insurer_id → insurer | policy_type 险种 period_from / period_to 保险期间 premium_total 总保费 | currency | tax_amount issue_date | dispute_clause | jurisdiction policy_party 投/被保人 party_role 投保人|被保险人|受益人|共保 name | id_type | id_no | address | contact policy_insured_person 人员清单 name | id_no | birth | occupation_class beneficiary | 团体险专属(实测 3 人 / 10 人) policy_coverage 责任项 ★ coverage_name 责任名 | is_main 主险/附加 sum_insured 保额 | rate 费率 | premium 保费 clause_ref_id → 绑定表(指向条款) 一行的粒度 = 「某条款下的某责任项」 policy_limit 限额 累计 / 每次事故 / 每人 policy_deductible 免赔 绝对额 / 免赔天数 / 比例 policy_endorsement 特别约定 序号 + 条目正文(实测:众安 13 条 / 太保多段编号) 条款域 · Clause Domain 回答:这条款写了什么 clause 条款主数据 ★ clause_id | insurer_id → insurer clause_name 条款全名 register_no 注册号 | filing_no 备案号 clause_type 主险|附加险|特约 | kind 唯一键:(insurer_id, register_no) clause_version 版本 版本号 | 生效/失效日 | 与上一版差异标记 clause_section 条款条目 层级:章|条|款|项 | parent_section_id section_title | section_text | order_no clause_artifact 正文快照 oss_path | content_hash | source_url fetch_mode 内嵌/直链/跳转 | fetched_at clause_fetch_task 取回任务 状态 pending/ok/failed | 重试次数 失败原因 | 转人工标记 clause_embedding 语义索引 section_id | vector | model_version 供「相似条款 / 条款解读」检索使用 绑定 policy clause 引用形态 原始链接 本单覆盖 限额/免赔 快照时机 1:N N:1 ★ 标记的两张表是架构的核心:policy_coverage 决定「单张保单的理赔口径」,clause 决定「跨保单的条款复用」 绑定表是唯一允许同时引用两个域的实体,它的职责是记录「这张保单在什么条件下引用了这份条款」——包括本单特有的限额覆盖、免赔覆盖,以及取回成功/失败状态。 注:以上为架构骨架。字段的权威定义(尤其是责任名标准词表、免赔语义分类、特约分类体系)由保险条款解读专家补充后冻结。
图 4-1 数据模型骨架。左绿框为保单域,右紫框为条款域,中间窄条为唯一的跨域实体。
为什么绑定表必须独立存在 因为同一份条款在不同保单下,限额和免赔可能完全不同。实测:阳光团体意外险的 7 个责任项,免赔额全部是「--」,但雇主责任险同一份雇主责任条款下,「医疗费用」每人限额 5 万 / 每次事故绝对免赔 100 元,「误工费」按天赔付且免赔 0 天。条款是模板,保单是实例——不把两者分开,理赔核算时就没法区分「条款规定的」和「这张单谈下来的」。

5双流水线设计

两个任务不是串行依赖,而是「任务一产出引用 → 任务二消费引用」,可并行推进。

5.1 任务一:保单格式化流水线

步骤环节做什么产出
1指纹去重文件 SHA256 比对,重复上传直接返回已有记录doc_artifact
2保司识别默认按页脚/落款/域名识别保险人;人工可选择覆盖insurer_id
3形态分类判定是「保单+内嵌条款」还是「保单+外链条款」doc_kind
4分块解析拆成四个逻辑块:主体信息 / 保障明细表 / 特别约定 / 条款清单块级结构
5字段抽取按保司模板抽取,输出结构化 JSON + 每字段证据锚点抽取结果
6条款引用抽取提取条款名称、注册号、备案号、链接/条款码clause 引用列表
7勾稽校验总保费 = 各分项之和;限额关系自洽;日期区间合法校验报告
8落库 + 闸门高置信度直接入库;低置信度进人工复核队列policy 记录
设计要点:分块解析是准确率的来源 保单 PDF 的文本流是「错乱」的——例如公共责任险明细表里,金额和标签是分开排列的(「累计赔偿限额:」和「CNY2,000,000.00」在文本流中隔了十几行)。因此不能按文本顺序抽,必须先做版面分块(按坐标把每个字段的标签和值配对),再按块抽字段。这是流水线里技术难度最高的一步。

5.2 任务二:条款归集流水线

步骤环节做什么幂等键
1引用归并同一保单内按注册号/名称去重(实测众安 27 链接 → 9 条款)policy_id + register_no
2主数据查重查 clause 表;命中则直接建立绑定,跳过下载insurer_id + register_no
3形态判定内嵌 / 直链 / 跳转 / 无来源,四选一
4保司适配器取回调用对应保司的解析插件,拿到条款 PDF 或正文content_hash
5正文快照PDF 落 OSS + 正文抽文本 + 内容哈希(防重复入库)content_hash
6条目切分按「第X条」锚点切成 clause_section,保留层级clause_version_id + order_no
7向量化每个条目生成语义向量,写入 clause_embeddingsection_id
8回写绑定更新绑定表状态为 ok,把条款挂回保单binding_id
设计要点:条款入库必须先查重 以你即将处理的 700+ 案件规模估算,同一家保司的雇主责任险条款会被几十上百张保单引用。如果每张保单都下载一份条款文本,数据库里会有大量完全相同的副本。以 (保司, 注册号) 为唯一键先查重,命中即只建绑定关系、不重复下载——这不仅省空间,更关键的是:将来条款发生修订时,只需要更新一条记录。

6条款获取策略路由(核心难点)

这是任务二里最需要架构设计的部分。不能写死一套下载逻辑,必须做成插件式适配器。

6.1 四种形态与对应的适配器

形态判定特征适配器行为实测样例难度
A 内嵌正文 文档内无条款链接,但存在「第X条」西式条目文本,且含有产品注册号 直接对本文档做文本抽取 → 按注册号拆出多个条款 → 按「第X条」切分条目 太保建工团意
太保建筑工程一切险
B1 短码直链 链接形如 .../term/{短码}.pdf,短码为 3 位字母数字混合 直接 GET 下载。短码可作为备用匹配键 众安雇主责任险
3B3 / 3E5 / 3B8 / 4T1 / 4C1 / 34Q / 4C4 / 34B / 4D8
B2 长名直链 链接路径以 URL 编码的中文条款全名结尾,可直接反解出条款名称 直接 GET 下载。文件名反解可作为条款名称的独立校验来源 阳光财险团体意外险
epolicy.sinosig.com/…/阳光财产保险股份有限公司团体意外伤害保险(互联网专属)条款.pdf
C 二次跳转 链接含 getobscloudurl / getUrl 等取址语义关键词,返回内容不是 PDF 两步走:① GET 取址接口拿真实云存储地址 → ② 立即下载。真实地址有效期短,必须同步落盘,不能只存链接 国寿财险公共责任险
econnect.chinalife-p.com.cn/frontendnew/getobscloudurl?file=/clausefile/clausePdf/8017658/10001632/8017658.pdf
D 无来源 只有条款名称,无链接、无内嵌正文 转人工队列:① 按名称在保司官网检索 ② 生成向保司/经纪公司索取条款的函件 ③ 人工回传后入库 —(预留)

6.2 适配器插件接口

每个保司一个适配器实现,统一接口,新增保司只加插件不改主流程:

接口方法输入输出 / 职责
detect()条款引用记录返回该保司的获取形态(A/B/C/D),用于路由
resolve_url()原始链接 / 条款码返回可直接下载的真实文件地址(C 形态在这里做二次请求)
fetch()真实地址下载文件字节流,处理 UA / Referer / 超时 / 重试
extract_text()文件字节流返回纯文本 + 页级结构(供后续条目切分)
verify()抽出的正文校验:正文里的注册号/条款名是否与引用一致(防下错文件)
必须做的一步:verify 签名/注册号比对不能省。实测中发现,国寿财险的条款 ID 与备案 ID 是两个不同编号8017658/10001632),众安的文件名是短码而保单上写的是全名。下错条款文件是这套系统里最危险的错误——它不会报错,但会让你在理赔核算时引用错误的条款。因此适配器取回正文后,必须回到正文里核对注册号,不一致就标记为待人工确认。

6.3 保司适配器登记表

保司形态识别域名适配器状态
中国人寿财产保险Ceconnect.chinalife-p.com.cn待开发
阳光财产保险B2epolicy.sinosig.com待开发
众安在线财产保险B1static.zhongan.com待开发
中国太平洋财产保险A—(内嵌,无需下载)待开发
新增保司时:先跑一份样张,判定形态,再写适配器。适配器注册表本身入库管理,便于统计各保司的成功率。

7表结构骨架

以下是可执行的建表骨架(SQLite),字段注释标注了实测来源。业务字段留白处待专家补充。

表名职责唯一键 / 幂等键
insurer公共保司字典:全称、简称、域名特征、适配器代码insurer_code
doc_artifact公共原始文档归档:路径、SHA256、页数、有无文本层file_sha256
policy保单保单主表policy_no
policy_party保单投保人 / 被保险人 / 受益人policy_id + party_role
policy_insured_person保单记名人员清单(团体险)policy_id + id_no
policy_coverage保单责任项:责任名、保额、费率、保费、免赔、赔付比例policy_id + coverage_name + clause_ref
policy_limit保单限额体系:累计 / 每次事故 / 每人 / 分项policy_id + limit_type
policy_deductible保单免赔:绝对额 / 天数 / 比例policy_id + scope
policy_endorsement保单特别约定条目(带序号)policy_id + seq_no
policy_clause_binding跨域绑定表:保单↔条款,含引用形态、原始链接、取回状态policy_id + clause_id
clause条款条款主数据insurer_id + register_no
clause_version条款条款版本(备案号、生效期)clause_id + version_no
clause_section条款条款条目(章/条/款/项 层级)clause_version_id + order_no
clause_artifact条款条款正文快照:OSS 路径、内容哈希、来源 URLcontent_hash
clause_fetch_task条款取回任务与失败队列binding_id + attempt_no
clause_embedding条款条款条目的语义向量索引section_id
extract_evidence公共证据链:字段值 → 页码 / 坐标 / 原文片段 / 置信度target_table + target_id + field
review_task公共人工复核队列
field_definition_pending公共待专家定义字段的交接清单(迁移 001 建立,已灌入第 9 节 8 项)seq_no

骨架共 18 张表(见 schema_skeleton.sql),加迁移 001 的交接表共 19 张。已通过 SQLite 语法校验,并在腾讯云服务器上完成初始化。

extract_evidence 是理赔场景的必需品,不是可选项 理赔核算的本质是「对账」。任何一个字段值,都必须能回答「你这个数是从哪儿来的」。这张表记录每个抽取字段的原文出处(页码 + 坐标框 + 原文片段 + 置信度),使系统支持点击字段跳回原件对应位置。没有它,抽取结果就只是一堆无从验证的数字。

8关键设计决策与取舍

每条决策都标明了代价,方便你判断是否接受。

D1 条款与保单分域存储,通过绑定表关联
理由条款被多张保单复用的概率极高(实测一张公共责任险引 21 份附加条款)。
收益条款只存一份;条款修订时只改一处;支持「同一条款在多张保单下的差异对比」。
代价查询需要 JOIN;保单展示时要拼装条款内容,实现复杂度上升。
D2 条款唯一键用「保司 + 注册号」,链接只作获取线索
理由实测四家保司均提供注册号;链接会因保司改版而失效。
收益同一份条款无论从哪张保单进来,都归并为同一条记录。
代价部分老保单可能未印注册号,需降级到「备案号 → 名称哈希」两级兜底,存在误并风险,需人工复核。
D3 条款正文一律落盘快照,不只存链接
理由C 形态(国寿财险)的真实地址是临时签名地址,且条款可能随时下架。
收益即便保司官网条款下架,本地仍有可溯源的完整正文,满足理赔举证需要。
代价存储成本增加(条款 PDF 通常 100KB–2MB),需容量规划。
D4 抽取结果必须带证据链
理由理赔核算需要对账,字段值必须可回溯。
收益支持字段级溯源;复核人员可快速定位原文;出错时可判定是抽取错还是原件错。
代价存储与写入开销增加;解析器必须保留坐标信息,不能只输出纯文本。
D5 低置信度抽取强制过人工闸门
理由保单字段(尤其限额、免赔)错一个数字,理赔金额就错。
收益把错误拦在入库前,而不是在理赔核算时才发现。
代价需要投入人工复核工时;需要设计一个高效的复核工作台,否则会变成瓶颈。
D6 存储层沿用 SQLite(与现有 panliku 一致),文件走 OSS
理由单机托管在已有 ECS 上,运维成本最低;现有鉴权/配额体系可直接复用。
收益不引入新的运维负担;迁移路径清晰(数据量大到临界点可平滑切 PostgreSQL)。
代价并发写入能力有限;向量检索需依赖 sqlite-vec 扩展,或把向量索引单独外置。
D7 两级幂等:文档级 SHA256 + 条款级内容哈希
理由同一份保单可能被重复上传;同一份条款可能被多个保司渠道重复取回。
收益重复操作不产生垃圾数据;条款内容变化(版本更新)时哈希自动不同,形成天然的版本检测信号。
代价需要在解析前先算哈希,略微增加处理时延。

9接口边界:待专家定义的字段清单

这一节是本文档与「保险条款解读专家」的交接面。架构层面已留好扩展位,以下内容需要专家给定权威定义后冻结。

交接原则 架构层只锁定「有哪些实体、哪些关系、哪些枚举需要被定义」,不预设业务语义。专家给的每一份定义,对应到本架构中都已预留落点(下方标注)。
#待定义内容为什么架构层不能自己定架构预留落点
1 责任名标准词表 实测已出现「意外伤害身故 / 意外伤害残疾 / 意外伤害医疗 / 意外伤害住院津贴 / 猝死 / 火车(包括地铁、轻轨、城市铁路) / 法律费用 / 医疗费用 / 误工费 / 死亡残疾赔偿责任」等十余种写法,跨保司不统一。需要一份可归一的受控词表,否则跨保单统计无从下手。 policy_coverage.coverage_name
+ 词表映射表
2 免赔的语义分类 实测至少四种语义:「绝对免赔 100 元」(金额)、「免赔 0 天」(天数)、「损失金额的 10%,两者以高者为准」(比例 + 择高)、「赔付比例 100%」(非免赔但对赔付有影响)。需要明确分类及各自的计算语义。 policy_deductible
+ deductible_type 枚举
3 限额体系的关系模型 实测同时存在:保单累计赔偿限额、每次事故赔偿限额、每人人身伤亡责任限额、每次事故财产损失赔偿限额、分项限额。它们之间是取小关系还是叠加关系,直接决定理赔金额,必须由专家明确。 policy_limit
+ 限额层级字段
4 特约条款的分类体系 实测特约内容跨度极大:限额约定、除外约定(如「不承保任何高空作业」)、流程约定(如「48 小时内报案」)、地域除外(如「不承保新疆、西藏」)、医院范围限制(众安列出 40+ 家除外医院)。需要分类才能被规则引擎消费。 policy_endorsement
+ endorsement_category
5 条款条目的结构化粒度 是否只拆到「条」,还是拆到「款」「项」?「释义」章节是否单列?实测太保条款含「第一部分 基本条款」这样的章级结构,众安条款结构不同。粒度决定检索精度与切分成本。 clause_section.level
6 责任免除条款的标签体系 条款正文里「责任免除」可能是一整条、也可能散落在释义中。需要专家定义识别规则。这直接关系「某情形是否在承保范围内」的自动判定。 clause_section.section_tag
7 责任 ↔ 免责的覆盖关系 一条免责条款可能作用于主险、也可能只作用于某个附加险。这层关系需要专家建模,架构上表现为一张关联表。 预留关系表
(待专家确认后建)
8 险种分类树 实测险种名跨度大:公众责任险 / 团体意外险 / 雇主责任险 / 建筑工程施工人员团体人身意外伤害保险 / 建筑工程一切险。需要一份险种分类树,才能做跨保司的同类对比。 policy.policy_type
+ 险种字典表
好消息:这 8 项都不影响架构骨架 它们全都是「枚举值」「词表」「关系表」层面的事,而架构层已经把这些位置留好了。专家给出定义后,只需要新增字典表数据或补充字段,不需要重构流水线。这也是本文档先把架构定下来、再等专家补字段的原因——顺序反了会返工,顺序对了就只是填空。

10分期路线图与风险

10.1 建议分期

阶段目标内容验收标准
P0 字段定义冻结 与保险条款解读专家对齐第 9 节的 8 项定义,冻结字段字典 产出字段字典文档,可直接转成建表语句
P1 单份样张打通 选一份形态 A(太保建筑工程一切险,内嵌条款)跑通全链路:解析 → 入库 → 条款切分 → 检索 字段抽取准确率可人工核对,条款条目结构正确
P2 四家保司适配器 实现国寿财险 / 阳光 / 众安 / 太保四家的条款适配器,覆盖 A、B1、B2、C 四种形态 5 份样张全部条款取回成功,注册号校验通过
P3 批量回溯 接入历史保单批量处理,建立复核工作台 批量处理成功率可统计,失败项全部有明确原因
P4 对外服务 挂载 MCP 工具组 + Web 检索端,复用现有鉴权与配额 AI Agent 可检索条款、可比对同类条款

10.2 已识别的主要风险

风险影响应对
保司条款链接改版或失效 正文一律落盘快照;建立链接可用性定时巡检;适配器按保司隔离,单家失效不影响其他家
部分条款需登录 / 验证码才能查看 D 兜底通道:转人工队列 + 生成向保司/经纪公司索取条款的标准函件模板
扫描件保单无文本层,需 OCR 已实测到纯图片页(雇主险 p1–p2);流水线内置文本层检测 + OCR 分支
明细表标签与数值在文本流中错位 必须先做版面分块(按坐标配对标签与值),不能按文本顺序抽取。这是准确率的胜负手
条款名称跨保司不统一,导致归并错误 优先用注册号归并;无注册号时降级到备案号 + 名称相似度,并强制人工确认
人工复核成为吞吐瓶颈 复核台要做成「字段级快速确认」而非「整单重录」;高置信度字段默认通过,只标红异常项
下一步建议 把第 9 节的 8 项定义清单交给保险条款解读专家。专家每给定一项,我就能把它落成建表语句并更新架构文档——不需要重新设计,只需要填空