# 申请人费用画像与审核建议量化公式

## 目标

申请人费用画像用于回答：

- 该申请人的近期费用节奏是否高于同组基准。
- 本次申请的天数、金额、招待频率是否明显偏离。
- 审批时应普通通过、谨慎通过、重点复核，还是升级审批。

画像结果只作为审批参考，不应直接定义员工为异常人员。

## 同组基准

同组基准必须按业务可比口径聚合：

```text
peer_group =
  部门
+ 岗位/职级
+ 费用类型
+ 城市等级/业务区域
+ 项目类型/客户阶段
+ 近 90 天或近 180 天窗口
```

不能用全公司平均值直接比较销售、研发、项目经理等不同岗位。

## 画像风险分

```text
profile_score =
  frequency_score * 0.20
+ amount_occupancy_score * 0.25
+ peer_deviation_score * 0.25
+ adjustment_history_score * 0.15
+ current_claim_deviation_score * 0.15
```

等级：

```text
0-39   normal          正常
40-59  watch           需关注
60-79  review          重点复核
80-100 escalation      强复核 / 升级审批
```

## 子分计算

### 高频申请分

```text
frequency_ratio = applicant_claim_count_90d / peer_claim_count_p75_90d

frequency_score =
  0   if frequency_ratio <= 1.0
  30  if 1.0 < frequency_ratio <= 1.2
  60  if 1.2 < frequency_ratio <= 1.5
  80  if 1.5 < frequency_ratio <= 2.0
  100 if frequency_ratio > 2.0
```

### 高金额占用分

```text
budget_share_ratio = applicant_amount_90d / available_peer_budget_90d
amount_percentile = applicant_amount_90d 在同组中的分位数

amount_occupancy_score =
  max(
    percentile_score(amount_percentile),
    ratio_score(budget_share_ratio)
  )
```

建议第一版分位规则：

```text
P0-P75   -> 0
P75-P85  -> 40
P85-P95  -> 70
P95-P100 -> 100
```

### 同组偏离分

```text
peer_deviation_ratio =
  applicant_amount_90d / peer_amount_median_90d

peer_deviation_score =
  0   if peer_deviation_ratio <= 1.0
  40  if 1.0 < peer_deviation_ratio <= 1.3
  70  if 1.3 < peer_deviation_ratio <= 1.8
  100 if peer_deviation_ratio > 1.8
```

### 历史调减退回分

```text
adjustment_ratio =
  adjusted_or_returned_count_180d / approved_claim_count_180d

adjustment_history_score =
  0   if adjustment_ratio <= 0.05
  40  if 0.05 < adjustment_ratio <= 0.15
  70  if 0.15 < adjustment_ratio <= 0.30
  100 if adjustment_ratio > 0.30
```

### 本次申请偏离分

```text
current_claim_deviation_score =
  max(
    travel_days_deviation_score,
    daily_cost_deviation_score,
    entertainment_deviation_score
  )
```

## 出差天数建议

```text
baseline_days = peer_group.travel_days_p75
travel_days_ratio = requested_days / baseline_days
suggested_days = min(
  requested_days,
  baseline_days + business_buffer_days
)
```

建议阈值：

```text
travel_days_ratio <= 1.2       正常
1.2 < ratio <= 1.5             提醒关注
1.5 < ratio <= 2.0             建议压缩天数或补充说明
ratio > 2.0                    重点复核 / 升级审批
```

## 出差费用建议

```text
daily_cost = claim_amount / requested_days
daily_cost_ratio = daily_cost / peer_city_grade_daily_cost_baseline
suggested_amount_cap =
  suggested_days
  * peer_city_grade_daily_cost_baseline
  * tolerance_factor
```

第一版 `tolerance_factor` 建议取 `1.15` 到 `1.20`。

建议阈值：

```text
daily_cost_ratio <= 1.1       正常
1.1 < ratio <= 1.3            提醒关注
1.3 < ratio <= 1.6            建议调减费用标准
ratio > 1.6                   重点复核 / 升级审批
```

## 招待费用建议

```text
per_capita_entertainment_amount = entertainment_amount / attendee_count
per_capita_ratio = per_capita_entertainment_amount / entertainment_standard_cap
same_customer_frequency_90d = count(customer_id, applicant_id, 90d)
applicant_entertainment_percentile =
  applicant_entertainment_amount_90d 在同组中的分位数
```

建议阈值：

```text
per_capita_ratio <= 1.0            正常
1.0 < ratio <= 1.2                 提醒关注
1.2 < ratio <= 1.5                 建议调低招待标准
ratio > 1.5                        重点复核 / 升级审批
same_customer_frequency_90d >= 3   要求补充客户推进阶段
percentile >= P85                  重点复核
percentile >= P95                  升级审批
```

## 审核建议强度

```text
recommendation_strength =
  max(
    level(profile_score),
    level(current_claim_deviation_score),
    level(hard_rule_score)
  )
```

输出文案必须引用触发指标：

```text
该申请人近 90 天费用占用处于同组 P88，
本次出差天数为同类 P75 的 1.67 倍。
建议将出差天数由 5 天调整为 4 天，
或补充客户拜访安排和项目阶段说明。
```

## 输出字段建议

```json
{
  "profile_score": 66,
  "profile_level": "review",
  "peer_percentile": 88,
  "travel_days_ratio": "1.67",
  "daily_cost_ratio": "1.34",
  "same_customer_frequency_90d": 3,
  "suggested_days": 4,
  "suggested_amount_cap": "6800.00",
  "basis_codes": [
    "applicant.peer_percentile.p85",
    "travel.days_ratio.review"
  ]
}
```
