"""合成筛选:人工确认的条件表,不是通用自然语言解析器。""" import json from decimal import Decimal as D rules = [("pe_ttm", "lt", D("20")), ("revenue_growth", "ge", D("0.10"))] rows = [ {"symbol": "AAA", "pe_ttm": "18", "revenue_growth": "0.12"}, {"symbol": "BBB", "pe_ttm": "24", "revenue_growth": "0.30"}, {"symbol": "CCC", "pe_ttm": "16", "revenue_growth": None}, ] def evaluate(row, active): checks = [] for field, operator, threshold in active: if operator not in {"lt", "ge"}: raise ValueError("unsupported_operator") value = row.get(field) checks.append(None if value is None else (D(value) < threshold if operator == "lt" else D(value) >= threshold)) return "fail" if False in checks else "unknown" if None in checks else "pass" result = {row["symbol"]: evaluate(row, rules) for row in rows} assert result == {"AAA": "pass", "BBB": "fail", "CCC": "unknown"} assert evaluate({"pe_ttm": "20", "revenue_growth": "0.10"}, rules) == "fail" assert evaluate({"pe_ttm": "19", "revenue_growth": "0.10"}, rules) == "pass" unresolved = ["management quality"] assert len(unresolved) == 1 try: evaluate(rows[0], [("pe_ttm", "gte", D("20"))]) except ValueError as exc: assert str(exc) == "unsupported_operator" else: raise AssertionError("未知运算符必须阻断") print(json.dumps({"result": result, "unresolved": unresolved}, sort_keys=True))