# 经理中心团队工资统计

经理中心首页 4 张卡片（本月团队工资、上月团队工资、活跃主播数、环比增长）的数据链路。

## 口径

- 团队范围：经理 → BD Leader（`bd_leader_profiles.created_by_user_id`）→ BD（`bd_profiles.parent_leader_user_id`）→ Agency（`agencies.parent_bd_user_id`），Agency 可直接挂 Leader 或挂 Leader 下属 BD；全链路只统计 active 状态。
- 主播归属：按 wallet 周期账户 `host_period_diamond_accounts.agency_owner_user_id`（送礼入账时的收款人快照）圈定，与工资结算同一口径。
- 预收入（estimated）：进行中周期 = max(已结算累计, 当前档位累计工资 + 剩余钻石按月底费率折美元)，即“立刻月结能拿多少”；已 month_end 关闭的周期直接取已结算累计（含剩余折算），不用当前政策重估，避免政策上调后显示从未发放的金额。政策取区域当前生效政策（不区分结算模式/触发方式），与 H5 平台政策展示一致。
- 周期：UTC 月（`cycle_key = yyyy-MM`），本月 + 上月两个周期。
- 活跃主播：该周期累计钻石 > 0 的主播数。
- 环比：`(本月预收入 - 上月预收入) / 上月预收入`，上月为 0 时有收入记 +100%，无收入记 0%。
- 时效：gateway 内存缓存 2 分钟（按 app_code + 经理 user_id），产品接受分钟级延迟。

## HTTP 接口

`GET /api/v1/manager-center/overview`（JWT，需 `manager_center` 能力）

响应 `data` 在原有身份/权限字段基础上新增 `dashboard`；统计链路故障时省略该字段，H5 显示占位符：

```json
{
  "dashboard": {
    "month_label": "Jul 2026",
    "cycle_key": "2026-07",
    "last_cycle_key": "2026-06",
    "this_month_salary": 12152,
    "this_month_salary_usd_minor": 1215200,
    "last_month_salary": 9269,
    "last_month_salary_usd_minor": 926900,
    "active_hosts": 128,
    "active_hosts_last_month": 96,
    "growth": "+31%",
    "team_bd_leaders": 2,
    "team_bds": 5,
    "team_agencies": 3,
    "team_stats_truncated": false,
    "updated_at_ms": 1783500000000
  }
}
```

金额字段 `*_salary` 是美元数值（分转元），`*_usd_minor` 是美分整数；`growth` 直接下发带符号百分比字符串。`team_stats_truncated=true` 表示团队 Agency 超过单次拉取上限（5000），统计口径不完整。

## 内部 RPC

- user-service `UserHostService.ListManagerTeamAgencies(manager_user_id, page_size)` → 团队树内全部有效 Agency + BD Leader/BD 数量 + truncated 标记；经理身份停用返回 PermissionDenied。
- wallet-service `WalletService.GetTeamHostSalaryStats(agency_owner_user_ids[], cycle_keys[], now_ms)` → 每个周期的 estimated/settled 主播工资美分、活跃主播数、总钻石。只读聚合，不加锁不推进结算进度。

## 索引

- `bd_leader_profiles`：新增 `idx_bd_leader_profiles_created_by (app_code, created_by_user_id, status)`（migration 007 + initdb）。
- `host_period_diamond_accounts`：新增 `idx_host_period_diamond_cycle_owner (app_code, cycle_key, agency_owner_user_id, total_diamonds)`（initdb 幂等补建）。

## 对应 H5

`hyapp-h5/gonghui/manager-center`：`renderDashboard` 读取 `overview.dashboard.*`；拿到 overview 但缺 `dashboard` 时 4 张卡片显示 `--` 且月份标签按 UTC 当月计算，只有本地预览（无 API 注入）才显示设计稿假数据。
