from app.service.risk_judgement_service import ( assess_alert_detail, assess_alert_list_item, ) def test_rw018_valid_auto_investment_is_release_candidate() -> None: result = assess_alert_detail({ "alert": { "alert_no": "ALERT-018", "rule_codes": ["RW-018"], }, "work_order": { "channel": "定投", "status": "已完成", }, }) assert result["verdict"] == "可考虑放行" assert result["confidence"] == "高" assert any("定投工单" in reason for reason in result["reasons"]) def test_rw007_current_levels_no_longer_mismatch() -> None: result = assess_alert_detail({ "alert": { "alert_no": "ALERT-007", "rule_codes": ["RW-007"], }, "customer": {"investor_type": "C2"}, "product": { "risk_level": "R2", "risk_disclosure_required": 0, "second_confirmation_required": 0, "recording_required": 0, }, "work_order": {}, }) assert result["verdict"] == "疑似误报" assert any("不存在风险等级差" in reason for reason in result["reasons"]) def test_rw007_missing_trace_supports_risk() -> None: result = assess_alert_detail({ "alert": { "alert_no": "ALERT-007", "rule_codes": ["RW-007"], }, "customer": {"investor_type": "C2"}, "product": { "risk_level": "R5", "risk_disclosure_required": 1, "second_confirmation_required": 1, "recording_required": 1, }, "work_order": { "risk_disclosure_ack_at": None, "second_confirmation_at": None, "recording_reference": None, }, }) assert result["verdict"] == "证据支持风险" assert any("缺少交易留痕" in reason for reason in result["reasons"]) def test_rw003_core_thresholds_support_risk() -> None: result = assess_alert_detail({ "alert": { "alert_no": "ALERT-003", "rule_codes": ["RW-003"], }, "transaction": {"amount": "750000.00"}, "evidence_snapshot": {"ratio": "0.9375"}, }) assert result["verdict"] == "证据支持风险" assert any("500000 元阈值" in reason for reason in result["reasons"]) def test_rw015_small_night_trade_is_release_candidate() -> None: result = assess_alert_list_item({ "alert_no": "ALERT-015", "rule_codes": ["RW-015"], }) assert result["verdict"] == "疑似误报" assert result["confidence"] == "中"