feat(regulatory): 对齐附件4目录核查规则

This commit is contained in:
2026-06-07 09:27:42 +08:00
parent bbd2d3532a
commit 1bdc7322cf
15 changed files with 753 additions and 43 deletions

View File

@@ -47,9 +47,30 @@ def load_rule_file(path: str | Path | None = None) -> dict:
raise ValueError(f"规则 code 必须为 {DEFAULT_RULE_CODE}")
if not isinstance(payload.get("requirements"), list) or not payload["requirements"]:
raise ValueError("规则文件必须包含 requirements 列表。")
_validate_attachment4_requirements(payload)
return payload
def _validate_attachment4_requirements(payload: dict) -> None:
requirements = payload.get("requirements") or []
required_codes = {str(code) for code in payload.get("attachment4_required_codes") or []}
by_attachment4_code: dict[str, list[dict]] = {}
for requirement in requirements:
attachment4_code = requirement.get("attachment4_code")
if attachment4_code:
by_attachment4_code.setdefault(str(attachment4_code), []).append(requirement)
for field in ["code", "rule_id", "title", "severity", "file_keywords", "citation_query"]:
if attachment4_code and not requirement.get(field):
raise ValueError(f"附件4规则 {attachment4_code} 缺少 {field}")
missing = sorted(required_codes - set(by_attachment4_code), key=_attachment4_sort_key)
if missing:
raise ValueError(f"附件4目录项缺少规则{', '.join(missing)}")
def _attachment4_sort_key(value: str) -> tuple[int, ...]:
return tuple(int(part) for part in value.split(".") if part.isdigit())
def check_rule_version(
*,
path: str | Path | None = None,