59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
"""
|
|
字段合同校验入口壳。
|
|
|
|
本文件职责:暴露 validate_required_fields_shell;正式规则读 contracts JSON 后再实现。
|
|
禁止:在未 require_formal_contract 时假装已激活字段;禁止用正则替代模型语义。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import Any
|
|
|
|
from agent.schema.contracts_loader import load_contract, require_formal_contract
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def validate_required_fields_shell(
|
|
*,
|
|
facts: dict[str, Any],
|
|
business_line: str = "",
|
|
require_formal: bool = True,
|
|
) -> dict[str, Any]:
|
|
"""
|
|
字段校验空壳。
|
|
|
|
返回结构固定:ok / implemented / missing / errors。
|
|
implemented=False 表示规则引擎尚未接入(框架阶段预期)。
|
|
"""
|
|
stem = "inquiry-required-fields-v1"
|
|
try:
|
|
contract = (
|
|
require_formal_contract(stem) if require_formal else load_contract(stem)
|
|
)
|
|
except (FileNotFoundError, RuntimeError) as exc:
|
|
return {
|
|
"ok": False,
|
|
"implemented": False,
|
|
"missing": [],
|
|
"errors": [str(exc)],
|
|
"business_line": business_line,
|
|
}
|
|
|
|
is_ph = bool(contract.get("_meta", {}).get("is_placeholder"))
|
|
logger.info(
|
|
"schema.validate_shell line=%s placeholder=%s facts_keys=%s(未跑激活规则)",
|
|
business_line or "-",
|
|
is_ph,
|
|
sorted(facts.keys()),
|
|
)
|
|
return {
|
|
"ok": False,
|
|
"implemented": False,
|
|
"missing": [],
|
|
"errors": ["field_activation_rules_not_implemented"],
|
|
"business_line": business_line,
|
|
"contract_placeholder": is_ph,
|
|
}
|