Files
zhanghongyu_0626 3fb0ceb334 Enhance suitability assessment and documentation
- Implemented `check_suitability` method in `CoreReadOnlyRepository` for suitability determination based on customer and product risk levels.
- Added `build_suitability_log_row` function in `suitability.py` for mapping suitability check results to `risk_suitability_log`.
- Updated `AGENTS.md`, `ENVIRONMENT.md`, and `FLOW.md` to reflect changes in suitability assessment processes and documentation.
- Revised `FRAMEWORK.md` and `MEMORY.md` to clarify project structure and data flow related to suitability checks.
- Expanded `TODO.md` with tasks related to logging and auditing suitability assessments.
2026-09-07 11:15:30 +08:00

167 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户画像 L0~L3 设计框架
> **用途:** 说明画像四层分工、表结构、JSON 字段约定、与 Core / 适当性 / 客户资料的对齐关系。
> **DDL:** [01-mysql-共用底座.sql](./01-mysql-共用底座.sql) · **L0:** [Core模拟底座/01-表结构与种子说明.md](../Core模拟底座/01-表结构与种子说明.md)
> **记忆分层:** [业务记忆管理手册.md](../../业务记忆管理/业务记忆管理手册.md) · **适当性落库:** [07-risk_suitability_log说明.md](./07-risk_suitability_log说明.md)
---
## 1. 四层一句话
| 层 | 存什么 | 权威库/表 | 谁写 | 谁读 |
| --- | --- | --- | --- | --- |
| **L0** | 官方 KYC、正式 C1~C5、持仓/流水 | `jinrong_core` | 非 Agent | 四 Agent 只读 |
| **L1** | 客户侧偏好、规划、行为(**不能改 L0 等级**) | `customer_profile_l1` | 客户 Agent | 客户本人、代理人、风控、分析 |
| **L2** | 代理人服务记录、诉求、待办(**客户不可见**) | `customer_profile_l2` | 代理人 Agent | 代理人、风控、分析 |
| **L3** | 监测分层、评分维度(**不改 L0 等级**) | `customer_profile_l3` | 风控 Agent | 风控、代理人/分析只读 |
```text
L0(Core)──── 正式风评、收入、资产、产品事实
↑ 只读,禁止覆盖
L1(Agent)── 客户说的偏好、规划、阈值摘要
L2(Agent)── 代理人服务过程 enrich
L3(Agent)── 风控监测 enrich
```
---
## 2. L0 与 Agent 画像的边界(2026-09-07 对齐客户手册)
**L0 已在 Core 扩展**(`core_customer` + `core_customer_risk` + `core_product`),对应客户资料《用户信息数据示例》中的 **基础信息 / 投资档案 / 产品属性**:
| 客户资料章节 | L0 表/字段 | Agent 画像能否写 |
| --- | --- | --- |
| 基础信息(性别、学历、收入…) | `core_customer.*` | ❌ 只读 |
| 正式风评 C1~C5、问卷得分、过期日 | `core_customer_risk.*` | ❌ 只读 |
| 产品 R 等级、起购、期限 | `core_product.*` | ❌ 只读 |
| C×R 匹配规则 | `core_suitability_rule` | ❌ 只读 |
| 产品偏好、口头风格、服务诉求 | L1 / L2 JSON | ✅ Agent enrich |
| 监测评分、异常行为标签 | L3 JSON | ✅ 风控 enrich |
**铁律:** L1 里客户说「我比较激进」**不能**把 L0 的 C2 改成 C5;适当性买卖仍以 L0 + R-02 为准。
---
## 3. MySQL 画像表结构
### 3.1 `customer_profile_l1`(一客户一行)
| 列 | 类型 | 含义 |
| --- | --- | --- |
| `customer_id` | PK | 与 Core 一致 |
| `style_tags` | JSON | 风格/财务/生命周期标签(见 §4.1) |
| `style_questionnaire` | JSON | C-07 问卷答卷与得分摘要(**非** L0 正式风评) |
| `allocation_plan` | JSON | C-08 资金比例规划 |
| `behavior_tags` | JSON | 行为标签(活跃度、咨询频率等) |
| `attribution_pref` | VARCHAR | 复盘归因偏好(日/周/月) |
| `version` | INT | 乐观锁;写入 `risk_suitability_log.profile_l1_version` 可选 |
### 3.2 `customer_profile_l2`(客户 × 代理人 一行)
| 列 | 类型 | 含义 |
| --- | --- | --- |
| `customer_id` + `advisor_id` | UK | 归属维度 |
| `asset_snapshot` | JSON | A-01 查 Core 后的概况快照(非权威账) |
| `demands` | JSON | 沟通诉求、关注点 |
| `follow_up_todos` | JSON | 待跟进事项 |
| `service_tags` | JSON | 服务标签(VIP 诉求、适老化等) |
| `source_session_id` | VARCHAR | 来源会话 |
### 3.3 `customer_profile_l3`(一客户一行)
| 列 | 类型 | 含义 |
| --- | --- | --- |
| `monitor_tier` | ENUM | normal / watch / high |
| `risk_score` | SMALLINT | 监测分(**≠** L0 正式 C 档) |
| `score_dimensions` | JSON | 四维/六维评分快照(见 §4.3) |
| `monitor_tags` | JSON | AML/行为异常等标签 |
| `last_alert_id` | VARCHAR | 关联最近预警 |
---
## 4. JSON 字段约定(对齐客户资料标签体系)
> P0:**列名已定**;JSON **键名约定**在实现 L1/L2 写入前按下列 schema 填充,无需改表。
### 4.1 L1 `style_tags` 推荐结构
对照《用户信息数据示例》§1.5 画像标签:
```json
{
"basic": { "age_band": "25-30", "city": "上海", "education": "本科" },
"financial": { "income_band": "10-20万", "monthly_investable": "3000-5000" },
"investment": {
"goal": "购房储蓄",
"horizon": "1-3年",
"product_preferences": ["指数基金", "货币基金"],
"excluded_products": ["私募", "期货"]
},
"lifecycle": { "stage": "单身奋斗期", "near_term_goal": "购房" },
"threshold_pref_summary": "亏损10%提醒"
}
```
- `threshold_pref_summary`:C-04 阈值偏好的 **摘要**;明细在 `customer_threshold_config`。
- **禁止**在 L1 存「正式 C 等级」——以 L0 为准。
### 4.2 L2 `demands` / `service_tags` 示例
```json
{
"demands": ["了解赎回规则", "子女教育金规划"],
"service_tags": { "tier": "vip", "prefer_channel": "counter", "elderly_care": true }
}
```
### 4.3 L3 `score_dimensions` 示例
对照《投资者风险画像研判规则》四维(监测用,**不写入 L0**):
```json
{
"basic_attr": 17.5,
"invest_experience": 17.5,
"risk_preference": 8.0,
"behavior_anomaly": 20.0,
"computed_at": "2026-09-07T00:00:00Z",
"model_ref": "JR-RULE-2024-001"
}
```
---
## 5. 适当性:L1 与 R-02 的边界
**L1 仅辅助** R-02 判断(如规划、偏好),**不能替代** L0 风评。
计算/落库流程见 [07-risk_suitability_log说明.md](./07-risk_suitability_log说明.md)。
---
## 6. Redis 缓存
画像 L1/L2/L3 有热缓存(MySQL 为权威,UPDATE 后 DEL)。Key 明细见 [02-redis-keys.md](./02-redis-keys.md)。
---
## 7. 读写权限速查
| 角色 | L0 | L1 | L2 | L3 | suitability_log |
| --- | --- | --- | --- | --- | --- |
| 客户本人 | R | W/R 本人 | — | — | R 本人 |
| 代理人 | R | R 名下 | W/R 名下 | R 名下 | R 名下 |
| 风控 | R | R | R | W | **W** |
| 数据分析 | R | R 脱敏 | R 脱敏 | R 脱敏 | — |
JWT 细则见 [02-JWT-RBAC鉴权手册.md](../技术选型和版本/02-JWT-RBAC鉴权手册.md) §7。
---
## 8. P0 验收
- [ ] L0 事实只来自 Core RO;画像 Tool 无 UPDATE Core
- [ ] L1 写入后 version 递增;不写入正式 `risk_code`
- [ ] L2 按 `customer_advisor_rel` 隔离;客户 API 不可见 L2
- [ ] L3 不写 L0;监测分与正式 C 档文档区分
- [ ] R-02 写入 `risk_suitability_log` 与 `check_suitability` 字段一致