投顾演示数据准备脚本:配好测评与归属,方案那步如实报告卡在证据来源
投顾线合并后 21 张 advisor_* 表全空,导致 published 返回 []、投顾 customer_ids 为空、
客户画像因缺测评返回 403。本脚本按依赖顺序补能自己造的那几样:
1. 产品目录:调 tools/import_hq_test_products.py 取真实行情(实测 19 个 ETF/LOF);
2. 客户风险测评:给 9001 补一条 C5、有效期一年(answers 里注明是演示数据);
3. 客户-投顾归属:9001 → 9020(assigned_at 往前留 5 秒,避开 DATETIME(0) 舍入陷阱)。
**方案那步不配** —— 缺的是证据来源不是技术:authoritative_tradable_products 是
fail closed 的(Missing or unverified evidence excludes a product),而造
advisor_product_suitability_reference 必须带 source_url 与 document_sha256,也就是真实的
销售适当性披露 / 基金合同文件(import_product_governance_reference.py 的两个 CSV,
不在仓库里,属环境数据)。脚本**不伪造这两个字段**(证据链红线),只检查并打印真正的解法。
实测:cust_t 的 /users/me/memory-profile 由 403 变 200(测评生效);admin 视角看 9020 的
customer_ids = ["9001"](归属生效);advisor 的 published 仍为 [](符合预期,尚无方案)。
⚠️ 顺带发现一处口径不一致:画像 fin_customer_profile.investor_type 是 C2,而新补的测评是
C5 —— 前者决定画像展示、后者决定适当性裁决,两者会同时出现在界面上。演示前需要统一
(要么把测评改成 C2,要么把画像也改成 C5)。
This commit is contained in:
@@ -152,11 +152,12 @@ function renderProbes(roles, userId) {
|
||||
{ label: '角色清单', path: '/api/v1/admin/roles', role: 'admin' },
|
||||
{ label: '我的身份(管理视角)',
|
||||
path: `/api/v1/admin/users/${userId}/roles`, role: 'admin' },
|
||||
// ⚠️ 这个接口的语义是"**我(客户)自己**已发布的方案":服务端按
|
||||
// `customer_id == 调用者 user_id` 过滤(权限码 `product-recommendation:read:self`
|
||||
// 的 `:self` 正对应这一点),所以**投顾调它必然为空**。标成 customer 才不会被误用。
|
||||
{ label: '我已发布的投顾方案(客户视角)',
|
||||
path: '/api/v1/advisor/recommendations/published', role: 'customer' },
|
||||
// 这个接口按 `customer_id == 调用者 user_id` 过滤 —— 即"**我自己的**方案"
|
||||
// (`product-recommendation:read:self` 的 `:self` 正对应这一点),与 `generate`
|
||||
// 落库时写的 `customer_id=context.user_id` 是自洽的一对。
|
||||
// 所以**投顾能看到自己生成并发布的方案**;空只说明还没有发布过任何方案。
|
||||
{ label: '我发布的投顾方案', path: '/api/v1/advisor/recommendations/published',
|
||||
role: 'advisor' },
|
||||
];
|
||||
const box = document.getElementById('probes');
|
||||
box.innerHTML = '';
|
||||
|
||||
Reference in New Issue
Block a user