feat: 添加线索引擎、NLQ、场景检测、前端界面等核心功能模块
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
"""全量穿透扫描引擎集成测试(需 PostgreSQL)。
|
||||
|
||||
验证场景检测→线索生成→落库的端到端链路(R5+R7+R8/R9)。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.clues.models import ClueStatus, ConfidenceTier
|
||||
from app.engines import scan
|
||||
from app.scenarios.churn_fraud import CohortPoint
|
||||
from app.scenarios.split_contract import ContractRecord
|
||||
|
||||
|
||||
def test_split_scan_creates_high_confidence_clue(session):
|
||||
contracts = [ContractRecord(f"C{i}", f"CUST{i}", 850000) for i in range(8)]
|
||||
result = scan.run_split_contract_scan(
|
||||
session, contracts, approval_threshold=1_000_000, shared_controller=True
|
||||
)
|
||||
assert result.scenario_code == "R8"
|
||||
assert result.scanned_count == 8
|
||||
assert result.clue is not None
|
||||
assert result.clue.confidence == ConfidenceTier.HIGH
|
||||
assert result.clue.status == ClueStatus.NEW
|
||||
assert result.clue.amount_involved > 0
|
||||
assert result.clue.model_version == scan.MODEL_VERSION
|
||||
|
||||
|
||||
def test_split_scan_no_clue_when_clean(session):
|
||||
contracts = [ContractRecord("C1", "A", 100000), ContractRecord("C2", "B", 3_000_000)]
|
||||
result = scan.run_split_contract_scan(session, contracts, approval_threshold=1_000_000)
|
||||
assert result.clue is None
|
||||
|
||||
|
||||
def test_churn_scan_creates_clue(session):
|
||||
curve = [CohortPoint(0, 1.0), CohortPoint(1, 0.95), CohortPoint(2, 0.1)]
|
||||
result = scan.run_churn_scan(
|
||||
session,
|
||||
retention_curve=curve,
|
||||
commission_paid=300000,
|
||||
active_ratio=0.05,
|
||||
zero_usage_ratio=0.9,
|
||||
channel_key="CH-001",
|
||||
)
|
||||
assert result.clue is not None
|
||||
assert result.clue.scenario_code == "R9"
|
||||
assert result.clue.subjects["channel"] == "CH-001"
|
||||
Reference in New Issue
Block a user