接入异常账户命中流水主链路

This commit is contained in:
wkc
2026-03-31 20:45:25 +08:00
parent f981dc9906
commit 2877e26fa5
3 changed files with 90 additions and 3 deletions

View File

@@ -953,6 +953,39 @@ PHASE2_STATEMENT_RULE_BUILDERS = {
"SALARY_UNUSED": build_salary_unused_samples,
}
ABNORMAL_ACCOUNT_RULE_BUILDERS = {
"SUDDEN_ACCOUNT_CLOSURE": build_sudden_account_closure_samples,
"DORMANT_ACCOUNT_LARGE_ACTIVATION": build_dormant_account_large_activation_samples,
}
def _resolve_abnormal_account_fact(rule_code: str, abnormal_accounts: List[Dict]) -> Optional[Dict]:
for account_fact in abnormal_accounts:
if account_fact.get("rule_code") == rule_code:
return account_fact
if rule_code == "SUDDEN_ACCOUNT_CLOSURE":
return next(
(
account_fact
for account_fact in abnormal_accounts
if account_fact.get("status") == 2 and account_fact.get("invalid_date")
),
None,
)
if rule_code == "DORMANT_ACCOUNT_LARGE_ACTIVATION":
return next(
(
account_fact
for account_fact in abnormal_accounts
if account_fact.get("status") == 1 and account_fact.get("effective_date")
),
None,
)
return None
def build_seed_statements_for_rule_plan(
group_id: int,
@@ -961,21 +994,36 @@ def build_seed_statements_for_rule_plan(
**kwargs,
) -> List[Dict]:
statements: List[Dict] = []
abnormal_accounts = list(kwargs.get("abnormal_accounts") or [])
common_kwargs = {key: value for key, value in kwargs.items() if key != "abnormal_accounts"}
for rule_code in rule_plan.get("large_transaction_hit_rules", []):
builder = LARGE_TRANSACTION_BUILDERS.get(rule_code)
if builder is not None:
statements.extend(builder(group_id, log_id, **kwargs))
statements.extend(builder(group_id, log_id, **common_kwargs))
for rule_code in rule_plan.get("phase1_hit_rules", []):
builder = PHASE1_RULE_BUILDERS.get(rule_code)
if builder is not None:
statements.extend(builder(group_id, log_id, **kwargs))
statements.extend(builder(group_id, log_id, **common_kwargs))
for rule_code in rule_plan.get("phase2_statement_hit_rules", []):
builder = PHASE2_STATEMENT_RULE_BUILDERS.get(rule_code)
if builder is not None:
statements.extend(builder(group_id, log_id, **kwargs))
statements.extend(builder(group_id, log_id, **common_kwargs))
for rule_code in rule_plan.get("abnormal_account_hit_rules", []):
builder = ABNORMAL_ACCOUNT_RULE_BUILDERS.get(rule_code)
account_fact = _resolve_abnormal_account_fact(rule_code, abnormal_accounts)
if builder is not None and account_fact is not None:
statements.extend(
builder(
group_id,
log_id,
account_fact=account_fact,
le_name=common_kwargs.get("primary_enterprise_name", "模型测试主体"),
)
)
return statements