feat(ui): 重构注册审核平台原型界面
This commit is contained in:
@@ -33,6 +33,13 @@ def index(request, scenario_id: str):
|
||||
status=UploadedDocument.STATUS_INDEXED,
|
||||
)
|
||||
form = ChatForm(request.POST or None, documents=documents)
|
||||
task_modes = [
|
||||
{"name": "目录汇总", "description": "汇总文件、页数、章节点和目录型文档。"},
|
||||
{"name": "完整性检查", "description": "对照法规模板检查齐套性、缺失项和错放项。"},
|
||||
{"name": "字段抽取", "description": "抽取产品名称、规格、适用范围、储存条件等核心字段。"},
|
||||
{"name": "一致性核查", "description": "比较申请表、说明书和产品列表的字段一致性。"},
|
||||
{"name": "综合风险报告", "description": "形成高优先级问题、建议动作和责任人通知。"},
|
||||
]
|
||||
if request.method == "POST" and form.is_valid():
|
||||
message = form.cleaned_data["message"]
|
||||
try:
|
||||
@@ -56,5 +63,6 @@ def index(request, scenario_id: str):
|
||||
"document_count": documents.count(),
|
||||
"result": result,
|
||||
"audit_log": audit_log,
|
||||
"task_modes": task_modes,
|
||||
},
|
||||
)
|
||||
|
||||
@@ -12,7 +12,34 @@ from .services import create_uploaded_document, index_document
|
||||
def document_list(request):
|
||||
# 列表页只负责展示文档元数据和可执行操作,不处理入库细节。
|
||||
documents = UploadedDocument.objects.all()
|
||||
return render(request, "documents/document_list.html", {"documents": documents})
|
||||
status_counts = {
|
||||
"uploaded": documents.filter(status=UploadedDocument.STATUS_UPLOADED).count(),
|
||||
"indexed": documents.filter(status=UploadedDocument.STATUS_INDEXED).count(),
|
||||
"failed": documents.filter(status=UploadedDocument.STATUS_FAILED).count(),
|
||||
"total": documents.count(),
|
||||
}
|
||||
processing_pipeline = [
|
||||
{"title": "原始文件接收", "detail": "校验格式、大小和场景归属后保存原件。"},
|
||||
{"title": "文本与表格抽取", "detail": "按 PDF / DOCX / MD / TXT 使用不同解析策略。"},
|
||||
{"title": "页数统计与可信度评估", "detail": "对 Word 页数采用估算与可信度标记。"},
|
||||
{"title": "章节点归类", "detail": "基于文件名、标题和正文线索识别 CH 节点。"},
|
||||
{"title": "切片与索引入库", "detail": "生成知识切片,供 RAG、规则定位和审计引用使用。"},
|
||||
]
|
||||
exception_items = [
|
||||
{"level": "待确认", "title": "CH1.2 监管信息目录.docx", "detail": "目录页码与正文页数存在偏差,建议人工复核。"},
|
||||
{"level": "低可信度", "title": "目标产品说明书.docx", "detail": "Word 页数为估算值,表格抽取质量良好。"},
|
||||
{"level": "失败", "title": "沟通记录扫描件.pdf", "detail": "疑似扫描件,需补做 OCR 或重新上传清晰版。"},
|
||||
]
|
||||
return render(
|
||||
request,
|
||||
"documents/document_list.html",
|
||||
{
|
||||
"documents": documents,
|
||||
"status_counts": status_counts,
|
||||
"processing_pipeline": processing_pipeline,
|
||||
"exception_items": exception_items,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def upload(request):
|
||||
@@ -28,7 +55,16 @@ def upload(request):
|
||||
return render(
|
||||
request,
|
||||
"documents/upload.html",
|
||||
{"form": form, "scenarios": list_scenarios()},
|
||||
{
|
||||
"form": form,
|
||||
"scenarios": list_scenarios(),
|
||||
"upload_checks": [
|
||||
"文件格式支持 PDF、DOCX、MD、TXT",
|
||||
"业务资料与法规依据资料需分开归属",
|
||||
"目录类文件会优先参与完整性校验",
|
||||
"上传完成后建议立即进入解析与入库流程",
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
||||
1
apps/platform_ui/__init__.py
Normal file
1
apps/platform_ui/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
6
apps/platform_ui/apps.py
Normal file
6
apps/platform_ui/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class PlatformUiConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "apps.platform_ui"
|
||||
172
apps/platform_ui/services.py
Normal file
172
apps/platform_ui/services.py
Normal file
@@ -0,0 +1,172 @@
|
||||
def get_platform_demo_context():
|
||||
batch = {
|
||||
"name": "2026Q2-呼吸道多联检测试剂注册批次",
|
||||
"product_name": "呼吸道病原体核酸联合检测试剂盒(PCR-荧光探针法)",
|
||||
"owner": "临床注册事务组",
|
||||
"stage": "法规完整性复核中",
|
||||
"completion": "74%",
|
||||
"next_action": "补齐 CH1.11.5 沟通记录并确认产品列表版本",
|
||||
}
|
||||
metrics = [
|
||||
{"label": "资料齐套率", "value": "82%", "note": "42 / 51 个目录项已命中"},
|
||||
{"label": "法规命中率", "value": "89%", "note": "公告附件包 6 类规则已生效"},
|
||||
{"label": "字段抽取完成度", "value": "67%", "note": "48 个核心字段已进入统一字段池"},
|
||||
{"label": "高风险问题", "value": "03", "note": "2 个缺失项,1 个跨文档冲突"},
|
||||
]
|
||||
workflow_overview = [
|
||||
{"title": "资料进入系统", "detail": "批量上传 18 份申报资料与 6 份法规原文"},
|
||||
{"title": "规则与知识装载", "detail": "按章-条-要求项-模板字段建立知识底座"},
|
||||
{"title": "解析与切片", "detail": "页数统计、目录识别、表格抽取、Chroma 入库"},
|
||||
{"title": "Agent 审核执行", "detail": "完整性检查、字段抽取、一致性核查"},
|
||||
{"title": "结论输出", "detail": "形成风险清单、证据引用、责任人动作建议"},
|
||||
]
|
||||
risk_board = [
|
||||
{"level": "高", "title": "CH1.11.5 沟通记录缺失", "owner": "监管信息专员", "action": "补充 NMPA 沟通留痕"},
|
||||
{"level": "高", "title": "产品名称跨文档表述不一致", "owner": "产品资料负责人", "action": "统一申请表与说明书命名"},
|
||||
{"level": "中", "title": "2 份 Word 页数为估算值", "owner": "文控支持", "action": "补做版式校验"},
|
||||
]
|
||||
quick_links = [
|
||||
{"title": "知识库配置", "url_name": "platform_ui:knowledge-base", "desc": "维护法规规则树与切片策略"},
|
||||
{"title": "文件中心", "url_name": "documents:list", "desc": "查看上传、解析、切片与异常状态"},
|
||||
{"title": "审核工作台", "url_name": "chat:index", "url_arg": "document_review", "desc": "发起审核、抽取与一致性核查演示"},
|
||||
{"title": "工作台大屏", "url_name": "platform_ui:command-center", "desc": "面向演示的 Agent 流程解释大屏"},
|
||||
]
|
||||
knowledge_sources = [
|
||||
{
|
||||
"code": "KB-001",
|
||||
"name": "公告附件包 / 资料要求说明",
|
||||
"type": "法规依据",
|
||||
"scope": "registration",
|
||||
"updated_at": "今天 09:20",
|
||||
"status": "已生效",
|
||||
"owner": "法规专员",
|
||||
},
|
||||
{
|
||||
"code": "KB-002",
|
||||
"name": "批准证明文件格式要求",
|
||||
"type": "模板规则",
|
||||
"scope": "registration",
|
||||
"updated_at": "今天 09:35",
|
||||
"status": "已生效",
|
||||
"owner": "模板管理员",
|
||||
},
|
||||
{
|
||||
"code": "KB-003",
|
||||
"name": "安全和性能基本原则清单",
|
||||
"type": "原则规则",
|
||||
"scope": "registration",
|
||||
"updated_at": "今天 10:02",
|
||||
"status": "待人工校订",
|
||||
"owner": "法规专员",
|
||||
},
|
||||
{
|
||||
"code": "KB-004",
|
||||
"name": "CH1 监管信息目录样例",
|
||||
"type": "业务资料",
|
||||
"scope": "batch",
|
||||
"updated_at": "今天 10:30",
|
||||
"status": "已入库",
|
||||
"owner": "文控专员",
|
||||
},
|
||||
]
|
||||
rule_tree = [
|
||||
{
|
||||
"code": "RULE-001",
|
||||
"chapter": "CH1 监管信息",
|
||||
"item": "CH1.2 监管信息目录",
|
||||
"requirement": "必须提供目录与页码映射",
|
||||
"field": "目录文件 / 页码可信度",
|
||||
"status": "启用",
|
||||
},
|
||||
{
|
||||
"code": "RULE-002",
|
||||
"chapter": "CH1 监管信息",
|
||||
"item": "CH1.4 申请表",
|
||||
"requirement": "申请表字段需与说明书一致",
|
||||
"field": "产品名称 / 规格 / 申请人",
|
||||
"status": "启用",
|
||||
},
|
||||
{
|
||||
"code": "RULE-003",
|
||||
"chapter": "CH1 监管信息",
|
||||
"item": "CH1.11.5 沟通记录",
|
||||
"requirement": "涉及沟通事项时需补齐记录",
|
||||
"field": "沟通对象 / 时间 / 结论",
|
||||
"status": "待校订",
|
||||
},
|
||||
{
|
||||
"code": "RULE-004",
|
||||
"chapter": "批准证明文件格式",
|
||||
"item": "注册证输出模板",
|
||||
"requirement": "字段映射需满足版式模板",
|
||||
"field": "注册证字段池 / Word 模板",
|
||||
"status": "启用",
|
||||
},
|
||||
]
|
||||
knowledge_stats = [
|
||||
{"label": "法规知识源", "value": "06"},
|
||||
{"label": "结构化规则项", "value": "128"},
|
||||
{"label": "业务资料切片", "value": "342"},
|
||||
{"label": "最近人工校订", "value": "2 次"},
|
||||
]
|
||||
mcp_connectors = [
|
||||
{"name": "飞书任务通知", "kind": "协同办公", "auth": "App Token", "status": "已连接", "sync": "5 分钟前"},
|
||||
{"name": "法规规则源导入", "kind": "法规服务", "auth": "文件轮询", "status": "待验证", "sync": "今天 08:50"},
|
||||
{"name": "Word 模板服务", "kind": "文档服务", "auth": "API Key", "status": "已连接", "sync": "刚刚"},
|
||||
{"name": "企业主数据源", "kind": "业务系统", "auth": "MCP Bridge", "status": "未启用", "sync": "未同步"},
|
||||
]
|
||||
skills = [
|
||||
{"name": "完整性检查 Skill", "trigger": "目录齐套性 / 章节点核查", "tools": "规则树 + RAG + 风险映射", "status": "发布中"},
|
||||
{"name": "字段抽取 Skill", "trigger": "申请表 / 说明书 / 产品列表抽取", "tools": "表格抽取 + 字段池", "status": "已发布"},
|
||||
{"name": "一致性核查 Skill", "trigger": "跨文档字段冲突检查", "tools": "字段比对 + 解释生成", "status": "灰度测试"},
|
||||
{"name": "Word 回填 Skill", "trigger": "报送版 Word 输出", "tools": "模板映射 + 导出服务", "status": "待校验"},
|
||||
]
|
||||
workflow_steps = [
|
||||
{"time": "09:32", "title": "载入批次资料", "detail": "识别 18 份业务资料与 6 份法规原文,建立本轮审核上下文。"},
|
||||
{"time": "09:34", "title": "规则树装载", "detail": "按注册申报主流程装载 CH1 监管信息与批准证明文件格式规则。"},
|
||||
{"time": "09:36", "title": "字段池初始化", "detail": "从申请表、说明书、产品列表抽取统一字段并建立来源映射。"},
|
||||
{"time": "09:39", "title": "一致性检查", "detail": "检测到产品名称和样本类型存在跨文档冲突,升级为人工复核。"},
|
||||
{"time": "09:42", "title": "风险输出", "detail": "生成 3 条风险项、2 条补件建议与 1 条责任人通知任务。"},
|
||||
]
|
||||
knowledge_filters = [
|
||||
{"label": "全部", "active": True},
|
||||
{"label": "法规依据", "active": False},
|
||||
{"label": "模板规则", "active": False},
|
||||
{"label": "业务资料", "active": False},
|
||||
]
|
||||
knowledge_form = {
|
||||
"title": "新增 / 编辑知识源",
|
||||
"fields": [
|
||||
{"label": "知识源名称", "value": "体外诊断试剂注册申报资料要求及说明"},
|
||||
{"label": "知识源类型", "value": "法规依据"},
|
||||
{"label": "适用流程", "value": "registration"},
|
||||
{"label": "状态", "value": "已生效"},
|
||||
{"label": "切片策略", "value": "按章条切片,保留条款编号"},
|
||||
],
|
||||
}
|
||||
rule_form = {
|
||||
"title": "新增 / 编辑规则项",
|
||||
"fields": [
|
||||
{"label": "规则编码", "value": "RULE-005"},
|
||||
{"label": "所属章节", "value": "CH1 监管信息"},
|
||||
{"label": "规则名称", "value": "申请表签章完整性检查"},
|
||||
{"label": "模板字段", "value": "签章页 / 申请人签字"},
|
||||
{"label": "规则说明", "value": "若申请表缺少签章,则标记为高优先级缺失项"},
|
||||
],
|
||||
}
|
||||
return {
|
||||
"batch": batch,
|
||||
"metrics": metrics,
|
||||
"workflow_overview": workflow_overview,
|
||||
"risk_board": risk_board,
|
||||
"quick_links": quick_links,
|
||||
"knowledge_sources": knowledge_sources,
|
||||
"rule_tree": rule_tree,
|
||||
"knowledge_stats": knowledge_stats,
|
||||
"knowledge_filters": knowledge_filters,
|
||||
"knowledge_form": knowledge_form,
|
||||
"rule_form": rule_form,
|
||||
"mcp_connectors": mcp_connectors,
|
||||
"skills": skills,
|
||||
"workflow_steps": workflow_steps,
|
||||
}
|
||||
13
apps/platform_ui/urls.py
Normal file
13
apps/platform_ui/urls.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
|
||||
app_name = "platform_ui"
|
||||
|
||||
urlpatterns = [
|
||||
path("knowledge-base/", views.knowledge_base, name="knowledge-base"),
|
||||
path("mcp-center/", views.mcp_center, name="mcp-center"),
|
||||
path("skills/", views.skill_studio, name="skills"),
|
||||
path("command-center/", views.command_center, name="command-center"),
|
||||
]
|
||||
23
apps/platform_ui/views.py
Normal file
23
apps/platform_ui/views.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from .services import get_platform_demo_context
|
||||
|
||||
|
||||
def knowledge_base(request):
|
||||
context = get_platform_demo_context()
|
||||
return render(request, "platform_ui/knowledge_base.html", context)
|
||||
|
||||
|
||||
def mcp_center(request):
|
||||
context = get_platform_demo_context()
|
||||
return render(request, "platform_ui/mcp_center.html", context)
|
||||
|
||||
|
||||
def skill_studio(request):
|
||||
context = get_platform_demo_context()
|
||||
return render(request, "platform_ui/skill_studio.html", context)
|
||||
|
||||
|
||||
def command_center(request):
|
||||
context = get_platform_demo_context()
|
||||
return render(request, "platform_ui/command_center.html", context)
|
||||
@@ -12,5 +12,23 @@ def index(request):
|
||||
{
|
||||
"scenarios": list_scenarios(),
|
||||
"scenario_issues": list_scenario_issues(),
|
||||
"hero_metrics": [
|
||||
{"label": "资料齐套率", "value": "82%", "note": "已识别 42 / 51 个法规模板项"},
|
||||
{"label": "法规命中率", "value": "89%", "note": "公告附件包 6 类规则已加载"},
|
||||
{"label": "字段抽取完成度", "value": "67%", "note": "48 个核心字段进入统一字段池"},
|
||||
{"label": "高风险问题", "value": "03", "note": "含 1 个缺失项与 1 个命名冲突"},
|
||||
],
|
||||
"workflow_overview": [
|
||||
{"title": "资料进入系统", "detail": "导入本批次注册申报资料、法规原文与模板文件。"},
|
||||
{"title": "知识底座装载", "detail": "以章-条-要求项-模板字段组织法规规则。"},
|
||||
{"title": "解析与切片", "detail": "完成页数统计、表格抽取、章节点归类和向量入库。"},
|
||||
{"title": "Agent 审核执行", "detail": "发起完整性检查、字段抽取和一致性比对。"},
|
||||
{"title": "结论输出与留痕", "detail": "形成风险清单、证据引用、责任人动作和审计日志。"},
|
||||
],
|
||||
"risk_board": [
|
||||
{"level": "高风险", "title": "CH1.11.5 沟通记录缺失", "detail": "监管沟通事项未形成可追溯文件,无法支撑本轮章节齐套性。"},
|
||||
{"level": "高风险", "title": "产品名称在申请表与说明书中不一致", "detail": "Agent 判定为跨文档命名冲突,需进入人工复核。"},
|
||||
{"level": "中风险", "title": "2 份 Word 文档页数可信度不足", "detail": "版式页数使用估算值,建议复核目录页码与正文总页数。"},
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user