feat: 增强审核智能体页完整性与字段抽取能力卡展示
This commit is contained in:
@@ -143,6 +143,16 @@
|
|||||||
{% empty %}
|
{% empty %}
|
||||||
<li class="detail-item">当前无目录汇总结果。</li>
|
<li class="detail-item">当前无目录汇总结果。</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% elif analysis_card.kind == "completeness" %}
|
||||||
|
{% for item in analysis_card.items %}
|
||||||
|
<li class="detail-item">
|
||||||
|
<strong>{{ item.document_name|default:"必交项" }}</strong>
|
||||||
|
<div>章节点:{{ item.chapter_code|default:"-" }}</div>
|
||||||
|
<div>{{ item.reason|default:"当前资料包未提供该资料。" }}</div>
|
||||||
|
</li>
|
||||||
|
{% empty %}
|
||||||
|
<li class="detail-item">当前无缺失项。</li>
|
||||||
|
{% endfor %}
|
||||||
{% elif analysis_card.kind == "consistency" %}
|
{% elif analysis_card.kind == "consistency" %}
|
||||||
{% for item in analysis_card.items %}
|
{% for item in analysis_card.items %}
|
||||||
<li class="detail-item">
|
<li class="detail-item">
|
||||||
@@ -155,8 +165,11 @@
|
|||||||
{% elif analysis_card.kind == "field_extraction" %}
|
{% elif analysis_card.kind == "field_extraction" %}
|
||||||
{% for item in analysis_card.items %}
|
{% for item in analysis_card.items %}
|
||||||
<li class="detail-item">
|
<li class="detail-item">
|
||||||
<strong>{{ item.field_name|default:item.name }}</strong>
|
<strong>{{ item.field_name|default:"抽取字段" }}</strong>
|
||||||
<div>{{ item.field_value|default:item.value }}</div>
|
<div>{{ item.field_value|default:"-" }}</div>
|
||||||
|
{% if item.source_document %}
|
||||||
|
<div class="muted">来源:{{ item.source_document }}</div>
|
||||||
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li class="detail-item">当前无抽取字段。</li>
|
<li class="detail-item">当前无抽取字段。</li>
|
||||||
@@ -177,8 +190,15 @@
|
|||||||
{% for item in analysis_card.warnings %}
|
{% for item in analysis_card.warnings %}
|
||||||
<li class="detail-item">
|
<li class="detail-item">
|
||||||
{% if analysis_card.kind == "field_extraction" %}
|
{% if analysis_card.kind == "field_extraction" %}
|
||||||
<strong>{{ item.field_name|default:item.name|default:"低置信度字段" }}</strong>
|
<strong>{{ item.field_name|default:"低置信度字段" }}</strong>
|
||||||
<div>{{ item.field_value|default:item.value|default:item }}</div>
|
<div>{{ item.field_value|default:"-" }}</div>
|
||||||
|
{% if item.source_document %}
|
||||||
|
<div class="muted">来源:{{ item.source_document }}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% elif analysis_card.kind == "completeness" %}
|
||||||
|
<strong>{{ item.document_name|default:"错放项" }}</strong>
|
||||||
|
<div>目标章节点:{{ item.chapter_code|default:"-" }}</div>
|
||||||
|
<div>当前归类:{{ item.current_location|default:"未识别" }}</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ item }}
|
{{ item }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -466,6 +466,86 @@ def test_chat_page_shows_consistency_card_from_conversation_summary(client, db):
|
|||||||
assert "high" in content
|
assert "high" in content
|
||||||
|
|
||||||
|
|
||||||
|
def test_chat_page_shows_completeness_card_from_conversation_summary(client, db):
|
||||||
|
batch, conversation = _create_conversation_with_batch()
|
||||||
|
conversation.latest_summary = {
|
||||||
|
"structured_output": {
|
||||||
|
"output_type": "registration_completeness_report",
|
||||||
|
"summary": "当前资料包仍缺少关键必交项。",
|
||||||
|
"risk_level": "high",
|
||||||
|
"missing_items": [
|
||||||
|
{
|
||||||
|
"chapter_code": "CH2",
|
||||||
|
"document_name": "产品技术要求",
|
||||||
|
"reason": "当前资料包未发现对应文件",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"misplaced_items": [
|
||||||
|
{
|
||||||
|
"chapter_code": "CH4",
|
||||||
|
"document_name": "研究资料",
|
||||||
|
"current_location": "CH6",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conversation.save(update_fields=["latest_summary", "updated_at"])
|
||||||
|
|
||||||
|
response = client.get(reverse("chat:detail", args=[conversation.conversation_id]))
|
||||||
|
|
||||||
|
content = response.content.decode("utf-8")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert "完整性检查能力卡" in content
|
||||||
|
assert "当前资料包仍缺少关键必交项" in content
|
||||||
|
assert "产品技术要求" in content
|
||||||
|
assert "CH2" in content
|
||||||
|
assert "当前资料包未发现对应文件" in content
|
||||||
|
assert "研究资料" in content
|
||||||
|
assert "当前归类:CH6" in content
|
||||||
|
|
||||||
|
|
||||||
|
def test_chat_page_shows_field_extraction_card_from_conversation_summary(client, db):
|
||||||
|
batch, conversation = _create_conversation_with_batch()
|
||||||
|
conversation.latest_summary = {
|
||||||
|
"structured_output": {
|
||||||
|
"output_type": "registration_field_extraction_report",
|
||||||
|
"summary": "已完成核心注册字段抽取。",
|
||||||
|
"field_items": [
|
||||||
|
{
|
||||||
|
"field_name": "产品名称",
|
||||||
|
"field_value": batch.product_name,
|
||||||
|
"source_document": "申请表.docx",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field_name": "规格型号",
|
||||||
|
"field_value": "48T/盒",
|
||||||
|
"source_document": "产品列表.xlsx",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"low_confidence_items": [
|
||||||
|
{
|
||||||
|
"field_name": "储存条件",
|
||||||
|
"field_value": "2-8℃",
|
||||||
|
"source_document": "说明书.docx",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conversation.save(update_fields=["latest_summary", "updated_at"])
|
||||||
|
|
||||||
|
response = client.get(reverse("chat:detail", args=[conversation.conversation_id]))
|
||||||
|
|
||||||
|
content = response.content.decode("utf-8")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert "字段抽取能力卡" in content
|
||||||
|
assert "已完成核心注册字段抽取" in content
|
||||||
|
assert "产品名称" in content
|
||||||
|
assert "48T/盒" in content
|
||||||
|
assert "来源:申请表.docx" in content
|
||||||
|
assert "储存条件" in content
|
||||||
|
assert "来源:说明书.docx" in content
|
||||||
|
|
||||||
|
|
||||||
def test_chat_page_blocks_formal_export_when_word_export_node_is_blocked(client, db):
|
def test_chat_page_blocks_formal_export_when_word_export_node_is_blocked(client, db):
|
||||||
batch, conversation = _create_conversation_with_batch()
|
batch, conversation = _create_conversation_with_batch()
|
||||||
conversation.node_results = [
|
conversation.node_results = [
|
||||||
|
|||||||
Reference in New Issue
Block a user