feat(regulatory): 按实际处理数量更新节点进度

This commit is contained in:
2026-06-07 13:32:06 +08:00
parent 32d258bb75
commit 3e8720e521
5 changed files with 286 additions and 62 deletions

View File

@@ -1,13 +1,25 @@
from __future__ import annotations
from collections.abc import Callable
from review_agent.models import FileSummaryBatch
from review_agent.regulatory_review.schemas import Finding
def run_completeness_check(batch: FileSummaryBatch, rule_set: dict) -> list[Finding]:
def run_completeness_check(
batch: FileSummaryBatch,
rule_set: dict,
progress_callback: Callable[[dict[str, object]], None] | None = None,
) -> list[Finding]:
items = list(batch.items.order_by("file_index"))
findings: list[Finding] = []
for requirement in rule_set.get("requirements", []):
requirements = [
requirement
for requirement in rule_set.get("requirements", [])
if requirement.get("type") in {"required", "conditional", "recommended", "chapter", "directory"}
]
total = len(requirements)
for index, requirement in enumerate(requirements, start=1):
if requirement.get("type") not in {"required", "conditional", "recommended", "chapter", "directory"}:
continue
matched = [
@@ -20,24 +32,32 @@ def run_completeness_check(batch: FileSummaryBatch, rule_set: dict) -> list[Find
[*requirement.get("file_keywords", []), *requirement.get("aliases", [])],
)
]
if matched:
continue
findings.append(
Finding(
rule_code=requirement["code"],
category=requirement.get("category", "completeness"),
severity=requirement.get("severity", "medium"),
title=f"缺少{_numbered_title(requirement)}",
detail=f"当前文件汇总批次未发现{_numbered_title(requirement)}",
suggestion=requirement.get("suggestion", ""),
evidence={
"requirement_type": requirement.get("type"),
"matched_files": [],
"searched_keywords": requirement.get("file_keywords", []),
"searched_fields": ["file_name", "relative_path", "directory_level"],
},
if not matched:
findings.append(
Finding(
rule_code=requirement["code"],
category=requirement.get("category", "completeness"),
severity=requirement.get("severity", "medium"),
title=f"缺少{_numbered_title(requirement)}",
detail=f"当前文件汇总批次未发现{_numbered_title(requirement)}",
suggestion=requirement.get("suggestion", ""),
evidence={
"requirement_type": requirement.get("type"),
"matched_files": [],
"searched_keywords": requirement.get("file_keywords", []),
"searched_fields": ["file_name", "relative_path", "directory_level"],
},
)
)
if progress_callback:
progress_callback(
{
"processed": index,
"total": total,
"label": _numbered_title(requirement),
"finding_count": len(findings),
}
)
)
return findings