审核队列 · 1,415 条待审
出处硬校验:锚点须在 K0 命中;手填出处强制 inferred。批量通过:规则类直接入 rules.yaml(一个 commit); 定义类需人工归簇请单张过。
建模纪律 · 知识分类骨架(11 类)—— 判不准时点开对锚点
没通过实体四条的,不是扔掉,是归位。每类锚在不同的数据形态上——锚不对就是归错了。
速判:占一张实体表 → 实体;按时间追加流水 → 事件;某实体会流转的取值 → 状态维;静态描述值 → 属性; 一组可选值 → 枚举;连两个实体 → 关系;多事件编排 → 流程;「如果…就…」→ 规则;施加的操作 → 动作;算出来的量 → 指标。 全文见仓库 建模纪律.md「纪律 2」。
NY 定价引擎(CtPrice)的规则源码是定价 DSL 规则源码,语法类似 Java,由定价引擎解释执行,不可当作普通 Java 编译。
"**性质**:定价 **DSL 规则源码**(语法类 Java,由定价引擎解释执行,不可当普通 Java 编译)"
定价引擎根据客户、商户、场景等输入,输出多档期数下的产品号、期数、各类费率、利率与 TagLabel,每档为数组下标,最多 20 档。
"根据客户、商户、场景等输入,输出**多档期数**下的产品号、期数、各类费率、利率与 TagLabel(每档为数组下标,最多 20 档)"
定价引擎有两条产品线:CL 基础定价(产品 9022)与 PL 定价(含 CT / Non-CT / MVP,产品 9012)。
"**两条产品线**:CL 基础定价(产品 9022)与 PL 定价(CT / Non-CT / MVP,产品 9012)"
PriceEngineID 是定价活动码,取值 DJ001…DJ089,是最核心的分流字段。
"`PriceEngineID` | 定价活动码(DJ001…DJ089),最核心的分流字段"
客群标签表示客群风险分层(取值如 A000…A145 等),基础定价表按客群标签出多档费率。
"`客群标签` | 客群风险分层(A000…A145 等),基础定价表按它出多档费率"
IfTryCalcTag 是是否走试算的标记,取值 "Y" 表示试算。
"`IfTryCalcTag` | 是否走试算标记("Y"=试算)"
CreditlLimit 字段表示授信额度,源码拼写为 Creditl(非 Credit)。
"`CreditlLimit` | 授信额度(注意源码拼写 Creditl,非 Credit)"
试算可用额度按公式计算:可用额度 = 授信额度(或质押额度)× TryCalcLevelPer − 已用余额(LoanBalance)。
"可用额度 = 授信额度(或质押额度) × TryCalcLevelPer − 已用余额(LoanBalance)"
主流程在阶段 105 判断是否走试算:当 IfTryCalcTag="Y" 时走试算。
"【105 是否走试算?(IfTryCalcTag="Y")】"
走试算后在阶段 108 判断是否需要试算档位:当 Crosta03TermRestraint ≤ 1 时需要试算档位。
"108 是否需要试算档位?(Crosta03TermRestraint ≤ 1)"
在阶段 104 判断是否直接输出定价:当客群标签属于 {A121, A122, A221} 时直接输出定价。
"104 是否直接输出定价?(客群标签 ∈ {A121,A122,A221})"
主流程阶段 100「是否 MVR 免息额度」判断当前处于停用状态。
"【100 是否 MVR 免息额度?】⚠️当前停用"
贷后试算子流程在阶段 106 判断是否贷后试算:当 IfTryCalcTag≠"Y" 且 PriceEngineID 匹配 DJ 加三位数字时进入贷后试算。
"【106 是否贷后试算?(IfTryCalcTag≠"Y" 且 PriceEngineID~DJ\d{3})】"
贷后试算子流程阶段 109「是否需要试算(双价)」当前为强制常开状态。
"【109 是否需要试算(双价)?】⚠️当前强制常开"
四张主定价表均按「客群标签」分块,每个客群内按期数出多档费率。
"四张主定价表均**按「客群标签」分块**,每客群内按期数出多档费率"
当 IfTryCalcTag = "Y" 时判定为走试算。
"105 IF Try cal | 是否走试算 | `IfTryCalcTag = "Y"`"
当 Crosta03TermRestraint ≤ 1 时判定为需要试算档位。
"108 need try cal | 是否需要试算档位 | `Crosta03TermRestraint ≤ 1`"
当客群标签属于 {A121, A122, A221} 时直接输出定价。
"104 pricing directly output | 是否直接输出定价 | `客群标签 ∈ {A121, A122, A221}`"
当 PriceEngineID 不匹配 DJ\d{3} 且 PayLater 满足开户时长窗口时判定为 MVP2 版本活动(有效期永久)。
"107 IF MVP2 | 是否 MVP2 版本活动 | `非(PriceEngineID~DJ\d{3})` 且 PayLater 满足开户时长窗口(有效期永久)"
当收单号="93600426" 且商户号属于白名单时判定为 CT 企业商户。
"ifctcorp | 是否 CT 企业商户 | `收单号="93600426"` 且 `商户号 ∈ {白名单…}`"
当 IfTryCalcTag≠"Y" 且 PriceEngineID 匹配 DJ\d{3} 时判定为贷后试算。
"106 IF Try cal After Loan | 是否贷后试算 | `IfTryCalcTag≠"Y"` 且 `PriceEngineID~DJ\d{3}`"
规则 100 IF MVR Free limit 条件被写死为 1=0(永假),真实逻辑被注释,当前 MVR 免息额度永不生效(强制停用)。
"**100 IF MVR Free limit** | 🔴 **强制停用** | 条件写死为 `1=0`(永假),真实逻辑(线下渠道号前3位∈{011,021,031} 且 PayLater 6 天内)被整段注释。当前 MVR 免息额度**永不生效**。"
规则 109 need try cal 2 price 条件被写死为 1=1(永真),真实日期/期数限制被注释,当前对全部命中强制生效(强制常开)。
"**109 need try cal 2 price** | 🟡 **强制常开** | 条件写死为 `1=1`(永真),注释原话"去掉范围限制,对全部生效",真实日期/期数限制被注释。当前对全部命中**强制生效**。"
规则 103 production PRT test 仅在 2024-09-26 当天(比对 SYSTEMDATE)为真,属生产测试残留,已过期失效。
"**103 production PRT test** | 🟣 **已过期** | 仅在 `2024-09-26` 当天为真(比 SYSTEMDATE),生产测试残留,早已失效。"
规则 998 TSM Cibubur 活动窗口为 2024-09-28~29(比对 SYSTEMDATE),已失效过期。
"**998 TSM Cibubur** | 🟣 **已过期** | 活动窗口 `2024-09-28~29`(比 SYSTEMDATE),已失效。"
999 Metro 鞋类活动与 107/801 MVP2 虽含硬编码日期,但比对的是输入字段(TestCurDate / PayLater)而非系统当天,属数据约束,不判为过期。
"另有 999 Metro 鞋类活动、107/801 MVP2 含硬编码日期,但它们比对的是**输入字段**(TestCurDate / PayLater)而非系统当天,属数据约束、不判过期。"
埋点与监控模块由三部分组成:H5 客户端行为埋点($report.stats)、对外/风控平台事件上报、GPS 定位上报;用途为功能响应率分析、风控和合规留痕。
"H5 客户端的行为埋点(`$report.stats`)+ 对外/风控平台事件上报 + GPS 定位上报。用于功能响应率分析、风控、合规留痕。"
埋点通过 this.$report.stats(EVENT, extraParams?) 调用;埋点事件是包含 label、category、action 三字段的对象,action 常带占位符。
"调用:`this.$report.stats(EVENT, extraParams?)`;事件是 `{label, category, action}` 对象,`action` 常带占位符(如 `..._${term}m.click`)。"
弹窗曝光/关闭埋点的归属分散:问卷/挽留类弹窗(如 PAYLATER_INVESTIGATION_POPUP)在 H5 侧,部分主页/原生壳弹窗在原生侧;逐事件归属须以代码为准。
"弹窗曝光/关闭埋点部分在 H5 侧(如 `PAYLATER_INVESTIGATION_POPUP` 等问卷/挽留弹窗),部分主页/原生壳弹窗在原生侧;逐事件归属以代码为准。"
文档所列埋点分区表仅为代表分区,不是 constants/stats/ 目录下埋点文件的全集。
"上表为代表分区,并非 `constants/stats/` 全集。"