"""已授权上下文的最小交接模拟；字段投影不替代身份认证与资源授权。"""


def build_handoff(order: dict, allowed_refs: set[str]) -> dict:
    # 上游已获准读订单；下游政策分析不需要姓名、地址与手机号。
    # 显式构造字段，不把整个 order 用 **order 展开到任务包。
    return {
        "task": "判断政策条件，列出缺失事实；不执行售后操作",
        "facts": {"days_since_delivery": order["days_since_delivery"],
                  "quality_verified": order["quality_verified"]},
        "allowed_refs": sorted(allowed_refs),
    }


def validate_result(result: dict, allowed_refs: set[str]) -> None:
    citations = result.get("citations")
    if not isinstance(citations, list) or not citations:
        raise ValueError("缺少引用")
    if any(not isinstance(ref, str) or ref not in allowed_refs for ref in citations):
        raise ValueError("返回了不在本次任务范围内的引用")
    # ID 合法不等于结论被证据支持；还需要核对条款适用性与缺失条件。
    if not isinstance(result.get("missing_facts"), list):
        raise ValueError("必须明确列出缺失事实，即使是空列表")


if __name__ == "__main__":
    refs = {"P7-v2"}
    task = build_handoff({"days_since_delivery": 10, "quality_verified": False,
                          "address": "不应进入政策分析任务的教学地址"}, refs)
    print(task)
    result = {"citations": ["P7-v2"], "missing_facts": ["质量尚未核实"]}
    validate_result(result, refs)
    print(result)
