From 12b476a8ef6eb0f1afc7c6c2c14d52477211cc9e Mon Sep 17 00:00:00 2001 From: bruce Date: Sun, 7 Jun 2026 10:37:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(regulatory):=20=E5=B0=86=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E7=A7=BB=E5=85=A5=E5=AF=B9=E8=AF=9D=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- review_agent/views.py | 17 ++++++++ templates/home.html | 64 ++++++++++++++++++------------- tests/test_regulatory_frontend.py | 4 ++ 3 files changed, 58 insertions(+), 27 deletions(-) diff --git a/review_agent/views.py b/review_agent/views.py index 429715e..5decbdb 100644 --- a/review_agent/views.py +++ b/review_agent/views.py @@ -43,6 +43,7 @@ def workspace(request: HttpRequest) -> HttpResponse: current = conversations.first() workflow_cards = build_workflow_cards(current) if current else [] + condition_confirmation = build_condition_confirmation(workflow_cards) return render( request, @@ -55,6 +56,7 @@ def workspace(request: HttpRequest) -> HttpResponse: "messages": current.messages.all() if current else [], "attachments": FileAttachment.objects.filter(conversation=current).order_by("original_name", "-version_no") if current else [], "workflow_cards": workflow_cards, + "condition_confirmation": condition_confirmation, }, ) @@ -154,6 +156,21 @@ def build_workflow_cards(conversation: Conversation) -> list[dict[str, object]]: return sorted(cards, key=lambda item: item["created_at"], reverse=True)[:5] +def build_condition_confirmation(workflow_cards: list[dict[str, object]]) -> dict[str, object] | None: + for card in workflow_cards: + if ( + card.get("workflow_type") == "regulatory_review" + and card.get("status") == RegulatoryReviewBatch.Status.WAITING_USER + and card.get("condition_candidates") + ): + return { + "id": card["id"], + "batch_no": card["batch_no"], + "candidates": card["condition_candidates"], + } + return None + + def _format_risk_label(risk_summary: dict) -> str: parts = [] labels = [ diff --git a/templates/home.html b/templates/home.html index f8ee602..e3e1132 100644 --- a/templates/home.html +++ b/templates/home.html @@ -124,6 +124,43 @@ {% endfor %} + {% if condition_confirmation %} +
+
AI
+
+
+ {% csrf_token %} + 适用条件确认 +

请确认 {{ condition_confirmation.batch_no }} 的产品类别、注册类型和临床评价路径,确认后我会继续法规核查。

+ {% for field, config in condition_confirmation.candidates.items %} + + {% endfor %} + +

+
+
+
+ {% endif %} {% else %}

审核智能体

@@ -257,33 +294,6 @@ {% if batch.error_message %}

{{ batch.error_message }}

{% endif %} - {% if batch.workflow_type == "regulatory_review" and batch.status == "waiting_user" and batch.condition_candidates %} -
- {% csrf_token %} - 适用条件确认 - {% for field, config in batch.condition_candidates.items %} - - {% endfor %} - -

-
- {% endif %}
    {% for node in batch.nodes %}
  1. diff --git a/tests/test_regulatory_frontend.py b/tests/test_regulatory_frontend.py index 1fac3e7..188dc34 100644 --- a/tests/test_regulatory_frontend.py +++ b/tests/test_regulatory_frontend.py @@ -102,6 +102,10 @@ def test_workspace_renders_condition_confirmation_form(client, django_user_model assert "data-condition-confirm-form" in content assert "体外诊断试剂" in content assert "甲胎蛋白检测试剂盒" in content + form_index = content.index("data-condition-confirm-form") + summary_index = content.index('id="summaryPanel"') + assert form_index < summary_index + assert "data-condition-confirm-form" not in content[summary_index:] def test_workspace_renders_rectification_actions_and_summaries(client, tmp_path, django_user_model):