feat(regulatory): 对齐附件4目录核查规则
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user