diff --git a/docs/25-风控模块代码评审报告.md b/docs/25-风控模块代码评审报告.md index a5258ec..84eaa2b 100644 --- a/docs/25-风控模块代码评审报告.md +++ b/docs/25-风控模块代码评审报告.md @@ -204,7 +204,25 @@ Asia/Shanghai 展示。北京 08:00 前生成时,统计窗口是"前一日 08: 没有任何地方把它初始化成 20。 影响:行为分是"预警结案 → 客户行为评分下降"这条链路的落点,现在这条链路**产出为零**。 -修复点在**画像创建侧**(把初始值设为满分),不在风控的扣分逻辑里。 + +**补充复核(同日):这不是本项目的代码缺陷,而是上游数据前提缺失。** + +全仓搜索后确认,**本项目不创建 `fin_customer_profile` 行**:`FundCustomerProfile(` 只出现在 +类定义与测试里,没有任何 INSERT;`profile_assembly_service` 走的是 ORM 读取 + 属性更新, +行不存在时返回 `profile_row_not_opened`。也就是说画像行由**本项目之外的流程**写入, +而它写入时把 `behavior_score` 设成了 0。 + +本项目的扣分逻辑本身是对的:`min(满分, before) - deduction` 再 `max(0, ...)` —— 给定 0, +任何扣分都只能得 0,这是算术必然,不是判断错误。 + +**处置建议**(不由技术侧单方面决定): + +1. 上游创建画像时按满分初始化 `behavior_score`(需上游确认该字段的语义与取值范围); +2. 若上游无法改,则需要一个**能区分"未初始化"与"扣光了"**的标记(例如新增一列), + 本项目才能在重建画像时补初值 —— 但仅为了这个目的加列,成本收益需要权衡。 + +在拿到上游口径之前,本项目**不做**任何"见 0 就补 20"的处理:0 同样是合法的扣分结果, +那样会把真正扣到 0 的客户错误地抬回满分。 ---