From 134e0fb5ffc64440cdba5ad980f30071fe103b82 Mon Sep 17 00:00:00 2001 From: bruce Date: Wed, 3 Jun 2026 23:32:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=8E=9F=E5=9E=8B=E8=AE=BE=E8=AE=A1):=20?= =?UTF-8?q?=E7=B2=BE=E7=AE=80=E5=AF=BC=E8=88=AA=E5=B9=B6=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E8=B5=84=E6=96=99=E4=B8=8E=E6=B3=95=E8=A7=84=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../原型设计/registration-prototype-demo.html | 155 +++++++++++++++++- 1 file changed, 146 insertions(+), 9 deletions(-) diff --git a/docs/原型设计/registration-prototype-demo.html b/docs/原型设计/registration-prototype-demo.html index fabc73b..5b2cfd4 100644 --- a/docs/原型设计/registration-prototype-demo.html +++ b/docs/原型设计/registration-prototype-demo.html @@ -792,12 +792,11 @@

以对话为核心的人机协同审核原型,聚焦上传、知识库、留痕与结构化结论。

@@ -1044,6 +1043,35 @@ trace: ["字段抽取", "字段复核", "回填草稿"] } ] + }, + materials: { + metrics: [ + { label: "资料文件数", value: "18", note: "含监管信息、说明书与补充材料" }, + { label: "已识别页数", value: "236", note: "PDF / DOCX 已统计,1 份 DOC 待复核" }, + { label: "章节点命中", value: "14", note: "覆盖 CH1 至 CH6 关键章节" }, + { label: "目录异常", value: "2", note: "1 份页数待复核,1 份疑似目录错放" } + ], + items: [ + { path: "第1章 监管信息/CH1.2 监管信息目录.docx", chapter: "CH1.2", pages: "3", status: "已识别", note: "命中监管信息目录" }, + { path: "第1章 监管信息/CH1.4 申请表.docx", chapter: "CH1.4", pages: "5", status: "已识别", note: "用于字段抽取与一致性核查" }, + { path: "第1章 监管信息/CH1.9 产品申报前沟通的说明.doc", chapter: "CH1.9", pages: "待复核", status: "异常", note: "疑似目录错放,页数待人工确认" }, + { path: "第1章 监管信息/CH1.11.1 符合标准的清单.docx", chapter: "CH1.11.1", pages: "2", status: "已识别", note: "可用于完整性检查" }, + { path: "第1章 监管信息/CH1.11.5 真实性声明.docx", chapter: "CH1.11.5", pages: "1", status: "已识别", note: "监管声明材料" }, + { path: "目标产品说明书.docx", chapter: "CH3", pages: "18", status: "已识别", note: "主要字段来源文档" } + ] + }, + regulations: { + metrics: [ + { label: "法规源数量", value: "6", note: "公告、申报要求、批准证明文件格式等" }, + { label: "适用条款", value: "24", note: "当前原型重点命中 CH1 相关条款" }, + { label: "命中规则包", value: "4", note: "完整性、一致性、风险与导出规则" }, + { label: "高风险依据", value: "2", note: "缺失必交项与冲突字段命中阻断条件" } + ], + refs: [ + { title: "附件 4 体外诊断试剂注册申报资料要求及说明", type: "核心法规", hit: "CH1.11.4 必交项", summary: "用于判断授权书/声明类资料缺失是否构成高风险。" }, + { title: "关于公布体外诊断试剂注册申报资料要求和批准证明文件格式的公告", type: "配套公告", hit: "资料结构要求", summary: "用于说明申报资料章节结构和材料格式要求。" }, + { title: "目标产品说明书.docx", type: "业务依据", hit: "字段取值比对", summary: "作为字段抽取和一致性核查的重要业务依据。" } + ] } }; @@ -1063,9 +1091,7 @@ function renderTopNav() { document.querySelectorAll("[data-top-nav]").forEach(item => { const target = item.dataset.topNav; - const isActive = (activeTabId === "chat" && target === "chat") - || (activeTabId === "knowledge" && target === "knowledge") - || (activeTabId === "history" && target === "history"); + const isActive = activeTabId === target; item.classList.toggle("active", isActive); }); } @@ -1275,6 +1301,115 @@ `; } + function renderMaterialsPage() { + return ` +
+ ${renderMetrics(data.materials.metrics)} +
+
+
+

资料包总览

+

直接承接原始材料目录,用于上传后快速看到文件结构、章节点和异常。

+
+
+ + + +
+
+
+
+ + + + + + + + + + + + ${data.materials.items.map(item => ` + + + + + + + + `).join("")} + +
相对路径命中章节页数状态说明
${item.path}${item.chapter}${item.pages}${item.status}${item.note}
+
+
+
+
+ `; + } + + function renderRegulationsPage() { + return ` +
+ ${renderMetrics(data.regulations.metrics)} +
+
+
+
+
+

法规依据总览

+

展示当前审核 Agent 会引用的核心法规、公告和业务说明材料。

+
+
+
+
+ ${data.regulations.refs.map(item => ` +
+
+ ${item.type} + ${item.hit} +
+ ${item.title} +
${item.summary}
+
+ `).join("")} +
+
+
+
+
+
+
+
+

当前命中依据

+

本轮高风险结论主要来自以下两类法规判断。

+
+
+
+
+
+
+ CH1.11.4 缺失必交资料 +
依据申报资料要求及说明,授权书/声明类文件属于必交项,缺失即触发高风险。
+
+ 高风险 +
+
+
+ 产品名称冲突待确认 +
说明书与申请表出现表述差异,进入一致性核查并阻断正式导出。
+
+ 核查中 +
+
+
+
+
+
+
+ `; + } + function renderKnowledgePage() { return `
@@ -1522,6 +1657,8 @@ function renderPages() { document.getElementById("pages").innerHTML = [ + renderMaterialsPage(), + renderRegulationsPage(), renderChatPage(), renderKnowledgePage(), renderHistoryPage() @@ -1539,7 +1676,7 @@ const topNav = event.target.closest("[data-top-nav]"); if (topNav) { const target = topNav.dataset.topNav; - if (target === "chat" || target === "knowledge" || target === "history") { + if (target === "materials" || target === "regulations" || target === "chat" || target === "knowledge" || target === "history") { activeTabId = target; } rerender();