import pytest from review_agent.models import Conversation, FileSummaryBatch, FileSummaryItem from review_agent.regulatory_review.services.completeness_check import run_completeness_check from review_agent.regulatory_review.services.rule_loader import load_rule_file pytestmark = pytest.mark.django_db def test_completeness_check_matches_existing_files_and_reports_missing(django_user_model): user = django_user_model.objects.create_user(username="owner", password="pass") conversation = Conversation.objects.create(user=user, title="会话") batch = FileSummaryBatch.objects.create( conversation=conversation, user=user, batch_no="FS-CHECK", status=FileSummaryBatch.Status.SUCCESS, ) FileSummaryItem.objects.create( batch=batch, file_index=1, file_name="产品技术要求.docx", file_type="docx", relative_path="产品技术要求.docx", storage_path="x/product.docx", ) FileSummaryItem.objects.create( batch=batch, file_index=2, file_name="说明书.docx", file_type="docx", relative_path="说明书.docx", storage_path="x/ifu.docx", ) findings = run_completeness_check(batch, load_rule_file()) titles = [finding.title for finding in findings] assert "缺少3.4注册检验报告" in titles assert "缺少产品技术要求" not in titles missing = next(finding for finding in findings if finding.rule_code == "registration_test_report") assert missing.severity == "blocking" assert missing.category == "completeness" def test_completeness_check_matches_attachment4_directory_names(django_user_model): user = django_user_model.objects.create_user(username="owner", password="pass") conversation = Conversation.objects.create(user=user, title="会话") batch = FileSummaryBatch.objects.create( conversation=conversation, user=user, batch_no="FS-A4", status=FileSummaryBatch.Status.SUCCESS, ) FileSummaryItem.objects.create( batch=batch, file_index=1, directory_level="1. 监管信息 / 1.2 申请表", file_name="注册申请表.pdf", file_type="pdf", relative_path="1.监管信息/1.2申请表/注册申请表.pdf", storage_path="x/app.pdf", ) findings = run_completeness_check(batch, load_rule_file()) assert not any(finding.rule_code == "attachment4_1_2_application_form" for finding in findings) missing_qms = next(finding for finding in findings if finding.rule_code == "attachment4_6_quality_system") assert missing_qms.title == "缺少6质量管理体系文件" assert missing_qms.severity == "high" assert missing_qms.evidence["searched_fields"] == ["file_name", "relative_path", "directory_level"]