本体协作平台
M 2 · DOC-2026-027 · extracted

定价引擎知识文档

原文 · 35 段(高亮 = 已被卡片引用)
p1# NY 定价引擎(CtPrice)知识文档
p2> 引擎版本:`CtPrice_202606040001` | 整理日期:2026-07-21 | 可视化平台:AERO(aero-tawny.vercel.app → 速查资料 › 决策树 / 规则路径图) > > 本文基于规则包 `price_code`(58 个文件:37 脚本 + 12 判断条件 + 4 变量 Schema + 4 自定义函数 + 流程图/文档)与两张权威流程图(main_flow、1TryCalc_Loan_Sub)逐条核对整理。
p3---
p4## 一、引擎概述
p5- **性质**:定价 **DSL 规则源码**(语法类 Java,由定价引擎解释执行,不可当普通 Java 编译)。 - **运行方式**:将 `script/` 下规则**按流程图顺序执行**(编号段 = 执行阶段)。 - **业务目标**:根据客户、商户、场景等输入,输出**多档期数**下的产品号、期数、各类费率、利率与 TagLabel(每档为数组下标,最多 20 档)。 - **两条产品线**:CL 基础定价(产品 9022)与 PL 定价(CT / Non-CT / MVP,产品 9012)。
p6---
p7## 二、输入 / 输出字段(Schema)
p8### 关键输入(`定价输入.*`) | 字段 | 含义 | |---|---| | `PriceEngineID` | 定价活动码(DJ001…DJ089),最核心的分流字段 | | `客群标签` | 客群风险分层(A000…A145 等),基础定价表按它出多档费率 | | `IfTryCalcTag` | 是否走试算标记("Y"=试算) | | `收单号 / 商户号 / UniqueOffLineId` | 商户 / 渠道识别(CT 企业商户、白名单、线下渠道判断) | | `PayLater` | 开户 / 下单日期串(前 8 位 YYYYMMDD),活动时效判断用 | | `CreditlLimit` | 授信额度(注意源码拼写 Creditl,非 Credit) | | `LoanBalance / LoanInitPrin` | 在贷余额 / 初始本金(算用额率、试算可用额度) | | `PledgedFixedDepositLimit` 等 | 质押额度(质押高额客户场景替代授信额度算额) |
p9### 关键输出(`定价输出.*`,多档数组) `产品号`、`期数`、`分期手续费 月费率`、`管理费率`、`最低管理费金额`、`利息年利率`、`罚息年利率`、`砍头费率`、`提前结清违约金费率 / 剩余利息收取比例`、`TryCalcLevel*`(试算档位系列)、`引擎版本`。
p10### 试算档位中间变量(`中间变量.*`) `TryCalcLevel`(档位标识,如 DJ35/L20)、`TryCalcLevelPer`(额度比例系数)、`TryCalcLevelMonthFeeRate`(档位月费率)、`TryCalcLevelMaxTerm`(最大期数)、`TryCalcLevelMaxLimit`(可用额度上限)。 > 试算额度公式:`可用额度 = 授信额度(或质押额度) × TryCalcLevelPer − 已用余额(LoanBalance)`
p11---
p12## 三、主决策流程(照权威流程图还原)
p13``` 000 版本校验 → 000 数据预处理 → 015 DJ003 处理 → 【105 是否走试算?(IfTryCalcTag="Y")】 │ ├─ True(走试算)→ 【108 是否需要试算档位?(Crosta03TermRestraint ≤ 1)】 │ ├─ True → 004 试算档位定价 → 032 输出标签打标 → 结束 │ └─ False → 结束(未走试算) │ └─ False(不走试算)→ 010 前置处理 → 001 CL 基础定价 → 207 商户客户专项规则 → 【104 是否直接输出定价?(客群标签 ∈ {A121,A122,A221})】 │ ├─ True → 【IF CT CORP1 是否 CT 企业商户?】→ 002 CT / 003 Non-CT PL 定价 → 结束 │ └─ False → 【107 是否 MVP2 版本活动?】 ├─ True → 005 MVP PL 定价 → 202 MVP 单期活动费 → 结束 └─ False → 【100 是否 MVR 免息额度?】⚠️当前停用 ├─ False → 【IF CT CORP】→ 002 CT / 003 Non-CT PL 定价 ┐ └─ True → 【MVP 客群分段】 │ ├─ MVP CTBU → 002 CT PL 定价(CTBU) → 201 一期免息 ┤ └─ MVP Non-CTBU → 003 Non-CT PL 定价 → 201 一期免息 ┤ │ 汇聚 ← ─────────────────────────────────────────────────────────────────────┘ → 011 功能标签 → 012 展期功能 → 014 高价客户规则 → 209 活动改价 → 206 CC/NCC 单期V2 → 211 高用额加收月费 → 【贷后试算子流程】→ 结束 ```
p14### 贷后试算子流程(1TryCalc_Loan_Sub) ``` 【106 是否贷后试算?(IfTryCalcTag≠"Y" 且 PriceEngineID~DJ\d{3})】 ├─ True → 【109 是否需要试算(双价)?】⚠️当前强制常开 │ ├─ True → 004 试算档位定价 → 030 质押高价客户定价 → 031 输出原始价格 → 结束 │ └─ False → 033 未执行DJ规则补Tag → 031 输出原始价格 → 结束 └─ False → 结束 ```
p15---
p16## 四、定价表与价格档
p17四张主定价表均**按「客群标签」分块**,每客群内按期数出多档费率:
p18| 定价表 | 脚本 | 客群档数 | 产品 | 月费率区间 | 期数 | |---|---|---|---|---|---| | CL 基础定价 | 001 cl pricing | 146 | 9022 | 0% – 9% | 1/3/6/12/18/24/36/48/60 | | CT 企业商户 PL | 002 CT crop pl | 138 | 9012 | 0% – 9% | 1/3/6/12/18/24/36/48/60 | | Non-CT PL | 003 non CT pl | 138 | 9012 | 0% – 9% | 1/3/6/12/18/24/36/48/60 | | MVP PL | 005 mvp ctbu pl | 136 | 9012 | 0% – 9% | 1/3/6/12/18/24/36/48/60 | | 试算档位定价 | 004 Try calc result | 按活动码(25) | — | 0% – 1.6% | 1/3/36(额度比例 0–100%) |
p19> **区间说明**:上表为该脚本内跨所有客群的价格总区间(含免息档 0% 与封顶档 9%)。同一脚本内不同客群费率差异很大,例如 CL 表:客群 A000 = `1期5%/3期4.5%/6期4%/12期3.5%`;A001–A003 = `月费率1.95%`;A004 = `2.45%`;A005–A008 = `3.45%`;A009+ = `4.95%`。逐客群逐档明细可在 AERO 决策树 › 点定价节点 › 价格明细查看。
p20---
p21## 五、关键判断条件(if_func)
p22| 条件文件 | 业务含义 | 真实判断 | |---|---|---| | 105 IF Try cal | 是否走试算 | `IfTryCalcTag = "Y"` | | 108 need try cal | 是否需要试算档位 | `Crosta03TermRestraint ≤ 1` | | 104 pricing directly output | 是否直接输出定价 | `客群标签 ∈ {A121, A122, A221}` | | 107 IF MVP2 | 是否 MVP2 版本活动 | `非(PriceEngineID~DJ\d{3})` 且 PayLater 满足开户时长窗口(有效期永久) | | ifctcorp | 是否 CT 企业商户 | `收单号="93600426"` 且 `商户号 ∈ {白名单…}` | | 106 IF Try cal After Loan | 是否贷后试算 | `IfTryCalcTag≠"Y"` 且 `PriceEngineID~DJ\d{3}` |
p23---
p24## 六、⚠️ 需要关注的异常规则(重点)
p25审查全量脚本后,发现 4 条规则被人为"钉死"或已过期,建议业务侧确认是否符合预期:
p26| 规则 | 状态 | 说明 | |---|---|---| | **100 IF MVR Free limit** | 🔴 **强制停用** | 条件写死为 `1=0`(永假),真实逻辑(线下渠道号前3位∈{011,021,031} 且 PayLater 6 天内)被整段注释。当前 MVR 免息额度**永不生效**。 | | **109 need try cal 2 price** | 🟡 **强制常开** | 条件写死为 `1=1`(永真),注释原话"去掉范围限制,对全部生效",真实日期/期数限制被注释。当前对全部命中**强制生效**。 | | **103 production PRT test** | 🟣 **已过期** | 仅在 `2024-09-26` 当天为真(比 SYSTEMDATE),生产测试残留,早已失效。 | | **998 TSM Cibubur** | 🟣 **已过期** | 活动窗口 `2024-09-28~29`(比 SYSTEMDATE),已失效。 |
p27> 说明:另有 999 Metro 鞋类活动、107/801 MVP2 含硬编码日期,但它们比对的是**输入字段**(TestCurDate / PayLater)而非系统当天,属数据约束、不判过期。
p28---
p29## 七、文件清单(按编号段)
p30| 编号段 | 职责 | 代表文件 | |---|---|---| | 000 | 版本、数据预处理 | 000 package version、000 data prerocess | | 001–005 | 基础定价表 | CL / CT / Non-CT / 试算结果 / MVP | | 010–019 | 预处理与扩展 | 010 pre handle、011 Function Tag、014 高价客户、015 DJ003、016–019 期数/费率标记 | | 030–034 | 输出增强 | 030 质押高价客户、031 原始价格、032 TagLabel、033 补Tag、034 风险原始月费率 | | 201–211 | 活动 / 特殊规则 | 一期免息、MVP活动费、CC/NCC、Metro/海底捞免息、费率上限、商户规则、FlexCode、月费加收 | | if_func | 流程分支条件 | 100/103/104/105/106/107/108/109/801/998/999/ifctcorp | | self_func | 自定义函数 | MyMax / MyMin / MyMinMax / Concatenate |
p31---
p32## 八、可视化查阅
p33AERO 平台已把本引擎完整数字化,可交互查阅: - **决策树**(速查资料 › 决策树):左侧判断骨架 + 右侧详情(条件 / 价格档 / 逐客群明细 / 分支走向),停用/常开/过期规则均有标记。 - **规则路径图**(速查资料 › 规则路径图):主流程 + 贷后试算子流程节点图,点节点看代码。 - **AI 规则问答**:按客群 / 活动码问具体价格。
p34访问:aero-tawny.vercel.app
p35--- *本文档由 AERO 平台数据自动整理,如引擎版本更新请以最新 `price_code` 规则包为准。*
抽出的卡片 · 26
定义DOC-2026-027#p5pending_review

NY 定价引擎(CtPrice)的规则源码是定价 DSL 规则源码,语法类似 Java,由定价引擎解释执行,不可当作普通 Java 编译。

"**性质**:定价 **DSL 规则源码**(语法类 Java,由定价引擎解释执行,不可当普通 Java 编译)"

规则DOC-2026-027#p5pending_review

定价引擎根据客户、商户、场景等输入,输出多档期数下的产品号、期数、各类费率、利率与 TagLabel,每档为数组下标,最多 20 档。

"根据客户、商户、场景等输入,输出**多档期数**下的产品号、期数、各类费率、利率与 TagLabel(每档为数组下标,最多 20 档)"

定义DOC-2026-027#p5pending_review

定价引擎有两条产品线:CL 基础定价(产品 9022)与 PL 定价(含 CT / Non-CT / MVP,产品 9012)。

"**两条产品线**:CL 基础定价(产品 9022)与 PL 定价(CT / Non-CT / MVP,产品 9012)"

定义DOC-2026-027#p8pending_review

PriceEngineID 是定价活动码,取值 DJ001…DJ089,是最核心的分流字段。

"`PriceEngineID` | 定价活动码(DJ001…DJ089),最核心的分流字段"

定义DOC-2026-027#p8pending_review

客群标签表示客群风险分层(取值如 A000…A145 等),基础定价表按客群标签出多档费率。

"`客群标签` | 客群风险分层(A000…A145 等),基础定价表按它出多档费率"

定义DOC-2026-027#p8pending_review

IfTryCalcTag 是是否走试算的标记,取值 "Y" 表示试算。

"`IfTryCalcTag` | 是否走试算标记("Y"=试算)"

定义DOC-2026-027#p8pending_review

CreditlLimit 字段表示授信额度,源码拼写为 Creditl(非 Credit)。

"`CreditlLimit` | 授信额度(注意源码拼写 Creditl,非 Credit)"

规则DOC-2026-027#p10pending_review

试算可用额度按公式计算:可用额度 = 授信额度(或质押额度)× TryCalcLevelPer − 已用余额(LoanBalance)。

"可用额度 = 授信额度(或质押额度) × TryCalcLevelPer − 已用余额(LoanBalance)"

动作条件DOC-2026-027#p13pending_review

主流程在阶段 105 判断是否走试算:当 IfTryCalcTag="Y" 时走试算。

"【105 是否走试算?(IfTryCalcTag="Y")】"

动作条件DOC-2026-027#p13pending_review

走试算后在阶段 108 判断是否需要试算档位:当 Crosta03TermRestraint ≤ 1 时需要试算档位。

"108 是否需要试算档位?(Crosta03TermRestraint ≤ 1)"

动作条件DOC-2026-027#p13pending_review

在阶段 104 判断是否直接输出定价:当客群标签属于 {A121, A122, A221} 时直接输出定价。

"104 是否直接输出定价?(客群标签 ∈ {A121,A122,A221})"

状态DOC-2026-027#p13pending_review

主流程阶段 100「是否 MVR 免息额度」判断当前处于停用状态。

"【100 是否 MVR 免息额度?】⚠️当前停用"

动作条件DOC-2026-027#p14pending_review

贷后试算子流程在阶段 106 判断是否贷后试算:当 IfTryCalcTag≠"Y" 且 PriceEngineID 匹配 DJ 加三位数字时进入贷后试算。

"【106 是否贷后试算?(IfTryCalcTag≠"Y" 且 PriceEngineID~DJ\d{3})】"

状态DOC-2026-027#p14pending_review

贷后试算子流程阶段 109「是否需要试算(双价)」当前为强制常开状态。

"【109 是否需要试算(双价)?】⚠️当前强制常开"

规则DOC-2026-027#p17pending_review

四张主定价表均按「客群标签」分块,每个客群内按期数出多档费率。

"四张主定价表均**按「客群标签」分块**,每客群内按期数出多档费率"

动作条件DOC-2026-027#p22pending_review

当 IfTryCalcTag = "Y" 时判定为走试算。

"105 IF Try cal | 是否走试算 | `IfTryCalcTag = "Y"`"

动作条件DOC-2026-027#p22pending_review

当 Crosta03TermRestraint ≤ 1 时判定为需要试算档位。

"108 need try cal | 是否需要试算档位 | `Crosta03TermRestraint ≤ 1`"

动作条件DOC-2026-027#p22pending_review

当客群标签属于 {A121, A122, A221} 时直接输出定价。

"104 pricing directly output | 是否直接输出定价 | `客群标签 ∈ {A121, A122, A221}`"

动作条件DOC-2026-027#p22pending_review

当 PriceEngineID 不匹配 DJ\d{3} 且 PayLater 满足开户时长窗口时判定为 MVP2 版本活动(有效期永久)。

"107 IF MVP2 | 是否 MVP2 版本活动 | `非(PriceEngineID~DJ\d{3})` 且 PayLater 满足开户时长窗口(有效期永久)"

动作条件DOC-2026-027#p22pending_review

当收单号="93600426" 且商户号属于白名单时判定为 CT 企业商户。

"ifctcorp | 是否 CT 企业商户 | `收单号="93600426"` 且 `商户号 ∈ {白名单…}`"

动作条件DOC-2026-027#p22pending_review

当 IfTryCalcTag≠"Y" 且 PriceEngineID 匹配 DJ\d{3} 时判定为贷后试算。

"106 IF Try cal After Loan | 是否贷后试算 | `IfTryCalcTag≠"Y"` 且 `PriceEngineID~DJ\d{3}`"

状态DOC-2026-027#p26pending_review

规则 100 IF MVR Free limit 条件被写死为 1=0(永假),真实逻辑被注释,当前 MVR 免息额度永不生效(强制停用)。

"**100 IF MVR Free limit** | 🔴 **强制停用** | 条件写死为 `1=0`(永假),真实逻辑(线下渠道号前3位∈{011,021,031} 且 PayLater 6 天内)被整段注释。当前 MVR 免息额度**永不生效**。"

状态DOC-2026-027#p26pending_review

规则 109 need try cal 2 price 条件被写死为 1=1(永真),真实日期/期数限制被注释,当前对全部命中强制生效(强制常开)。

"**109 need try cal 2 price** | 🟡 **强制常开** | 条件写死为 `1=1`(永真),注释原话"去掉范围限制,对全部生效",真实日期/期数限制被注释。当前对全部命中**强制生效**。"

状态DOC-2026-027#p26pending_review

规则 103 production PRT test 仅在 2024-09-26 当天(比对 SYSTEMDATE)为真,属生产测试残留,已过期失效。

"**103 production PRT test** | 🟣 **已过期** | 仅在 `2024-09-26` 当天为真(比 SYSTEMDATE),生产测试残留,早已失效。"

状态DOC-2026-027#p26pending_review

规则 998 TSM Cibubur 活动窗口为 2024-09-28~29(比对 SYSTEMDATE),已失效过期。

"**998 TSM Cibubur** | 🟣 **已过期** | 活动窗口 `2024-09-28~29`(比 SYSTEMDATE),已失效。"

边界DOC-2026-027#p27pending_review

999 Metro 鞋类活动与 107/801 MVP2 虽含硬编码日期,但比对的是输入字段(TestCurDate / PayLater)而非系统当天,属数据约束,不判为过期。

"另有 999 Metro 鞋类活动、107/801 MVP2 含硬编码日期,但它们比对的是**输入字段**(TestCurDate / PayLater)而非系统当天,属数据约束、不判过期。"