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

R6-后台开关与配置项

原文 · 27 段(高亮 = 已被卡片引用)
p1# R6 · PayLater 后台开关与配置项
p2> 本篇汇总 PayLater **后台下发的功能开关与可配置项**,面向产品/运营查「哪些功能能配、配了影响什么」,面向数据团队对账。 > > 主要来源是 `/ams/common/get/page` 接口(`amsCommonGetPage`,desc「获取前端通用配置」,`constants/api.js:1815`)返回的 `ret_data`,整包写入 Vuex 模块 `payLaterSetting`(`store/modules/pay-later/setting.js`,action `getSetting` 在 `App.vue:71` 初始化时拉取)。各页面通过 `mapState('payLaterSetting', [...])` 取用这些字段去 gate 功能。 > > 开关现网取值由后台控制,本篇给出**开关名 / 控制的功能 / 取值 / 来源 / 消费点(file:line + 哪个 computed/页面)**。代码里能见到的默认值(state 初值或 mock)一并标注;标「现网值后台控制」的表示前端只有占位初值、真值随接口下发。 > > 来源:代码仓 `ifes-resm/src`(HEAD `fb597d5`),只读不改。出处列均为 `src/` 相对路径 `file:line`。 > > 注意:多数开关并非单独决定功能开关,而是与**业务码位段**(`flexCode`/`marketCode` 某一位)做「与」运算共同 gate;详见文末「三类门控辨析」与 [R1 业务码位段速查表](R1-业务码位段速查表.md)。
p3---
p4## 一、开关清单表(布尔/枚举型)
p5取值约定:除特别说明外,开关为字符串 `'Y'`(开)/ `'N'`(关);`creditLimitSwitch` 为字符串数组,含特定常量项即为开。
p6| 开关名 | 控制的功能 | 取值 | 来源 | 消费点(file:line + computed/页面) | 关联功能篇 | |---|---|---|---|---|---| | `minimumRepaymentSwitch` | 最低还款(最小还款)功能总开关 | `'Y'`/`'N'`,state 初值 `'N'` | payLaterSetting | `home/Index.vue:819` `isMinimumRepayAllow` (与 flexCode 第3位=1、非Y001、已出账未逾期、应还≥门槛 同时成立);`service/repayment/regular/Index.vue:366` `isMinimumRepaymentAllow` 与 `:375` `isCallMinimumRepaymentAPI`;`service/adjust-repayment-plan/Index.vue:194` | 还款 | | `repayByInstallmentSwitch` | 分期还款入口 | `'Y'`/`'N'`,state 初值 `'N'` | payLaterSetting | `home/Index.vue:805` `isRepayInstallmentAllow`(与 flexCode 第1位=1);`bill/components/BillFooter.vue:57` `isRepayInstallmentAllow`(与 marketCode 第15位=1);`service/repayment/regular/Index.vue:361`、`service/adjust-repayment-plan/Index.vue:194` | 还款 | | `loanRestructuringSwitch` | 贷款重组(结构化分期)入口 | `'Y'`/`'N'`,state 初值 `'N'` | payLaterSetting | `home/Index.vue:787`(与 flexCode 第19位∈{1,2});`bill/Index.vue:84`、`bill/OverDues.vue:119`、`bill/Detail.vue:58`、`bill/components/BillCard.vue:178` 多处同款 `['1','2'].includes(flexCode.
p7charAt(18)) && loanRestructuringSwitch==='Y'` | 账单/重组 | | `loanRestructuringOverdueSwitch` | 逾期场景是否允许贷款重组 | `'Y'`/`'N'`,state 初值 `'N'` | payLaterSetting | 逻辑为「`==='N'` 时在逾期下屏蔽重组」:`home/Index.vue:784`(`isOverDue && switch==='N'` → return);`bill/Index.vue:81`、`bill/OverDues.vue:116`、`bill/Detail.vue:55`、`bill/components/BillCard.vue:231` | 账单/重组 | | `reapplyCreditSwitch` | 重新申请额度(reapply)弹窗资格总开关 | `'Y'`/`'N'`,state 初值 `'N'` | payLaterSetting | `home/Home.vue:959` `isEligibleUser`(`isReapplyCreditSwitchOn`,与 isY001、marketCode 第14/19位∉{1,3}、未逾期、间隔天数>阈值 同时成立);`home/HomeV2.vue:459` 同款 | 额度/Reapply | | `referralCodeSwitch` | 申请页推荐码(referral code)输入入口 | `'Y'`/`'N'`,state 初值 `''` | payLaterSetting | `apply/Index.vue:81` 模板 `v-if="referralCodeSwitch==='Y' && isAllo"`;同文件 `:334`、`:339` 逻辑分支 | 申请 | | `cashLoanSceneSwitch` | 首次取现场景强制上报 GPS 开关 | `'Y'`/`'N'`,state 初值 `''` | payLaterSetting | `utils/report.js:82` `isCashScenes`(与 `accountFlagInfo.isClFirstPurchase==='Y'`、场景=CASH_POSITION 同时成立 → SDK≥1.0.6 请求定位权限);`service/withdraw/Index.
p8vue:804`(决定是否拉 `getAccountFlagInfo`) | 取现/风控上报 | | `openPaylaterScanFaceSwitch` | 开户/实名刷脸场景强制上报 GPS 开关 | `'Y'`/`'N'`,state 初值 `''` | payLaterSetting | `utils/report.js:76` `isFaceScenes`(与刷脸场景 REAL_NAME_FACE_SCANNING_POSITION/FACE_SCANNING_POSITION 同时成立 → SDK≥1.0.6 请求定位权限) | 实名/风控上报 | | `convertLeverageRatioSwitch` | 灵活额度「后端试算」(杠杆比转换额度)开关 | `'Y'`/`'N'`,state 初值 `'N'`(接口失败也兜底 `'N'`) | payLaterSetting(有专用 mutation `setconvertLeverageRatioSwitch`,`setting.js:76`) | `flexible-limit/EnterAmount.vue:1095` `_calculateLimitAmountBackend`(`!=='Y'` 则跳过后端试算、走前端计算) | 灵活额度 | | `increaseLimitSwitch` | 提额功能开关 | `'Y'`/`'N'`,state 初值 `'N'` | payLaterSetting | `home/Index.vue:625` `isIncreaseLimit`(直接 `increaseLimitSwitch==='Y'`) | 额度/提额 | | `creditLimitSwitch` | 额度相关入口的**多功能位集合**(数组) | 字符串数组,state 初值 `[]`;元素取值见下表「枚举项」 | payLaterSetting | 见下方「creditLimitSwitch 枚举项」 | 灵活额度/提额 |
p9### creditLimitSwitch 枚举项
p10`creditLimitSwitch` 是字符串数组,通过 `.includes('<常量>')` 判断单项是否开启。mock 示例值 `['INCREASE_ENTRANCE_SWITCH','FLEXIBLE_LIMIT_SWITCH','REPAYMENT_INCREASE_SWITCH']`(`mock/ams_common_get_page.js:15`)。
p11| 枚举项常量 | 控制的功能 | 消费点(file:line + computed/页面) | |---|---|---| | `INCREASE_ENTRANCE_SWITCH` | 提额/灵活额度入口(首页与额度页) | `home/Index.vue:605` `isFlexibleLimitUser`(与 isSubprimeUser/可提额可见 同时成立);`flexible-limit/MyLimit.vue:134` | | `FLEXIBLE_LIMIT_SWITCH` | 灵活额度(Add limit / Flexible limit 卡片)任务模块 | `flexible-limit/Mission.vue:20` 模板 `v-if`;`flexible-limit/Missions.vue:319` `isConvertTaskVisible` | | `REPAYMENT_INCREASE_SWITCH` | 还款提额(Bonus limit / 还款任务)模块 | `flexible-limit/Mission.vue:46` 模板 `v-if`、`:177` 逻辑分支;`flexible-limit/Missions.vue:377` 逻辑分支 |
p12---
p13## 二、数值配置项表(非布尔)
p14| 配置项 | 含义 | 默认值(代码可见) | 消费点(file:line) | |---|---|---|---| | `minimumRepaymentMinAmount` | 最低还款触发的最小应还门槛(金额,单位最小货币单位/分)。仅当应还金额 ≥ 此值才允许走最低还款 | state 初值 `500000`;mock 示例 `10000`(现网值后台控制) | `home/Index.vue:590,820`(`totalUnpaid >= minimumRepaymentMinAmount`);`service/repayment/regular/Index.vue:367,376`(`dueAmount >= minimumRepaymentMinAmount`);`service/adjust-repayment-plan/Index.vue:194` | | `reapplyCreditIntervalMinDays` | reapply 资格的**最小间隔天数**:上次核额日到当前系统日的天数需 > 此值 | 无 state 初值(接口下发;mock 示例 `'10000'`,现网值后台控制) | `home/Home.vue:967` 与 `home/HomeV2.vue:467` `isEligibleUser` 内 `intervalDays > minIntervalDays`(按 creditDate/currentSysDate 计算天数) | | `reapplyCreditDataConfirmDays` | reapply 资料确认天数:自上次核额起需达到此天数才符合 reapply(`isEligibleReapply`) | state 初值 `''`(接口下发;mock 示例 `'100000000'`,现网值后台控制) | `home/Home.vue:1620` `isEligibleReapply`(`daysSinceLastCredit >= creditDataConfirmDays`,注意该处 `creditDay - businessDay`);`apply/form/Reapply.vue:455,1104` `_initialize` | | `restructureOverdueMinDpd` / `restructureOverdueMaxDpd` | 逾期重组入口的 **DPD 窗口**上下界(账户逾期天数 `OVERDUE_DAYS` 须落在 `[min,max]` 双闭区间才展示逾期重组入口/预付;K-S-2607 加,仅 gate 逾期分支)| state 初值 `30` / `90`(`setting.js:42-43`;后台可覆盖,键名须逐字匹配)| `home/Index.
p15vue:808-816` `isAdjustRepayAllow` 内 `inDpdWindow`(DPD 缺失→NaN→fail-closed 隐藏);`bill/OverDues.vue:134-135` 同款;详见 [05 灵活还款](../功能说明/05-灵活还款.md) K-S-2607 增强小节 | | `restructureMaintenanceStartTime` / `restructureMaintenanceEndTime` | 逾期重组首页入口的**日终维护窗口**边界(`HHmm` 字符串,`[start,end)` 服务端时间,不支持跨午夜;窗口内点入口弹维护弹窗不进流程;推成 start≥end 即永不命中=免发版回滚)| state 初值 `'2330'` / `'2400'`(`setting.js:47-48`;后台经 `getCommonPage` 可覆盖)| `home/Index.vue` `onAdjustRepayClicked` 逾期分支顶部(`utils/maintenance-utils.js#isInMaintenanceWindow`);服务端时钟偏移来自 `getCommonPage.currentServerTime`(缺失 fail-open 退化设备时间,`serverTimeOffsetMs`);独立 PRD `docs/prd/K-S-2607-restructure-maintenance-window/` |
p16补充:`utils/report.js:65,86` 的 reapply/上报逻辑还依赖设备 `sdk_version` 阈值(`compareVersions(deviceInfo.sdk_version,'1.0.2')`、`'1.0.6'`)做能力门控——这是**客户端 SDK 版本**比较,非后台下发配置项,列此仅作辨析;GPS 强制上报需 SDK≥1.0.6 且对应 Switch 为 `'Y'`。
p17`locationReportScenes`(`setting.js:21`,state 初值 `[]`)为「需要上报位置的场景」数组(如 `CASH_POSITION`、`FACE_SCANNING_POSITION` 等),由后台下发控制哪些场景开启 GPS 上报,与 `cashLoanSceneSwitch`/`openPaylaterScanFaceSwitch` 配合使用(`report.js:67` 先判 `locationReportScenes.includes(scene)`)。注:`setting.js:77-82` 中 `setLocationReportScenes`/`setCreditLimitSwitch`/`setReferralCodeSwitch` 三条 commit 已注释,这些字段实际通过 `setSwitchs`(`setting.js:74` 整包 `Object.assign`)写入。
p18---
p19## 三、三类门控辨析
p20PayLater 的功能可见性由三类不同来源的门控**叠加**决定,三者口径与责任方不同:
p211. **后台开关(本篇,`payLaterSetting` 等下发)**——`/ams/common/get/page` 接口整包下发的 `*Switch` / 数值配置,作用是**功能级开/关与阈值**(全局或随接口配置),如「最低还款功能是否上线」「reapply 最小间隔多少天」。运营/产品可配,改一处影响所有命中用户。
p222. **业务码门控位(`flexCode`/`marketCode` 某一位,详见 [R1 业务码位段速查表](R1-业务码位段速查表.md))**——账户级标识,按**该用户**的产品/合约属性逐位编码,如 `flexCode` 第3位=1(允许最低还款)、第1位=1(允许分期还款)、第19位∈{1,2}(允许贷款重组)、`marketCode` 第15位=1(分期入口)。它决定「这个具体账户**有没有资格**用该功能」,与后台开关做「与」运算(开关开 **且** 该位命中才放行)。
p233. **灰度/客群(`riskCode` / `marketCode` 第20位)**——人群/灰度维度。`riskCode` 用 `|` 分隔、按客群类型枚举(如 `FlexibleLimitUser`、`ConvertInstallmentUser`,见 `home/Index.vue:610,621` `isSubprimeUser`/`isConvertInstallmentUser`);`marketCode` 第20位等为灰度位。它决定「**哪一批人**进入实验/新功能」,与功能是否上线(开关)、账户是否合规(业务码位)相互独立。
p24简记:**开关=功能开不开(产品配置)**;**业务码位=这个账户够不够资格(合约属性)**;**灰度/客群=放给哪批人(人群圈选)**。三者均成立时功能才对某用户可见。
p25---
p26## 附:来源与刷新
p27- 拉取时机:`App.vue:71` 在应用初始化时 `dispatch('payLaterSetting/getSetting')`。失败时 `settingImage` 重置、`locationReportScenes` 置 `[]`、`convertLeverageRatioSwitch` 兜底 `'N'`(`setting.js:85-90`),其余 `*Switch` 保持 state 初值(多为 `'N'`/`''`)。 - 写入方式:`getSetting` 把 `ret_data` 整包经 `setSwitchs`(`Object.assign(state, ...)`)写入,因此**接口新增字段会自动进 state**,但若 state 未声明初值则首屏读到 `undefined`。 - mock 参考:`plugins/request/mock/ams_common_get_page.js`(仅本地 mock 示例值,非现网)。
抽出的卡片 · 32
规则DOC-2026-023#p5pending_review

PayLater 后台开关取值约定:除特别说明外,开关为字符串 'Y'(开)/'N'(关);creditLimitSwitch 为字符串数组,包含特定常量项即视为该项开启。

"除特别说明外,开关为字符串 `'Y'`(开)/`'N'`(关);`creditLimitSwitch` 为字符串数组,含特定常量项即为开。"

定义DOC-2026-023#p6pending_review

minimumRepaymentSwitch 是最低还款(最小还款)功能的总开关。

"`minimumRepaymentSwitch` | 最低还款(最小还款)功能总开关"

动作条件DOC-2026-023#p6pending_review

允许走最低还款(isMinimumRepayAllow)需同时成立:minimumRepaymentSwitch 为开、flexCode 第3位=1、非 Y001、已出账未逾期、应还金额≥门槛。

"`isMinimumRepayAllow` (与 flexCode 第3位=1、非Y001、已出账未逾期、应还≥门槛 同时成立)"

定义DOC-2026-023#p6pending_review

repayByInstallmentSwitch 控制分期还款入口的开关。

"`repayByInstallmentSwitch` | 分期还款入口"

动作条件DOC-2026-023#p6pending_review

首页分期还款入口(isRepayInstallmentAllow)需 repayByInstallmentSwitch 为开与 flexCode 第1位=1 同时成立;账单页则与 marketCode 第15位=1 组合。

"`home/Index.vue:805` `isRepayInstallmentAllow`(与 flexCode 第1位=1)"

定义DOC-2026-023#p6pending_review

loanRestructuringSwitch 控制贷款重组(结构化分期)入口的开关。

"`loanRestructuringSwitch` | 贷款重组(结构化分期)入口"

动作条件DOC-2026-023#p6pending_review

贷款重组入口展示需 loanRestructuringSwitch==='Y' 且 flexCode 第19位(charAt(18))∈{1,2} 同时成立。

"(与 flexCode 第19位∈{1,2})"

规则DOC-2026-023#p7pending_review

loanRestructuringOverdueSwitch 控制逾期场景是否允许贷款重组:当取值为 'N' 时在逾期状态下屏蔽重组入口。

"逻辑为「`==='N'` 时在逾期下屏蔽重组」"

定义DOC-2026-023#p7pending_review

reapplyCreditSwitch 是重新申请额度(reapply)弹窗资格的总开关。

"`reapplyCreditSwitch` | 重新申请额度(reapply)弹窗资格总开关"

动作条件DOC-2026-023#p7pending_review

reapply 资格用户(isEligibleUser)需同时成立:reapplyCreditSwitch 为开、isY001、marketCode 第14/19位∉{1,3}、未逾期、间隔天数>阈值。

"`isEligibleUser`(`isReapplyCreditSwitchOn`,与 isY001、marketCode 第14/19位∉{1,3}、未逾期、间隔天数>阈值 同时成立)"

定义DOC-2026-023#p7pending_review

referralCodeSwitch 控制申请页推荐码(referral code)输入入口的开关。

"`referralCodeSwitch` | 申请页推荐码(referral code)输入入口"

定义DOC-2026-023#p7pending_review

cashLoanSceneSwitch 是首次取现场景强制上报 GPS 的开关。

"`cashLoanSceneSwitch` | 首次取现场景强制上报 GPS 开关"

动作条件DOC-2026-023#p7pending_review

取现场景强制定位(isCashScenes)触发条件:cashLoanSceneSwitch 为开、accountFlagInfo.isClFirstPurchase==='Y'、场景=CASH_POSITION 同时成立,且 SDK≥1.0.6 时请求定位权限。

"`isCashScenes`(与 `accountFlagInfo.isClFirstPurchase==='Y'`、场景=CASH_POSITION 同时成立 → SDK≥1.0.6 请求定位权限)"

定义DOC-2026-023#p8pending_review

openPaylaterScanFaceSwitch 是开户/实名刷脸场景强制上报 GPS 的开关。

"`openPaylaterScanFaceSwitch` | 开户/实名刷脸场景强制上报 GPS 开关"

定义DOC-2026-023#p8pending_review

convertLeverageRatioSwitch 是灵活额度「后端试算」(杠杆比转换额度)的开关。

"`convertLeverageRatioSwitch` | 灵活额度「后端试算」(杠杆比转换额度)开关"

动作条件DOC-2026-023#p8pending_review

灵活额度试算时,convertLeverageRatioSwitch 不等于 'Y' 则跳过后端试算、改走前端计算。

"`_calculateLimitAmountBackend`(`!=='Y'` 则跳过后端试算、走前端计算)"

定义DOC-2026-023#p8pending_review

increaseLimitSwitch 是提额功能的开关,isIncreaseLimit 直接由 increaseLimitSwitch==='Y' 决定。

"`increaseLimitSwitch` | 提额功能开关"

定义DOC-2026-023#p8pending_review

creditLimitSwitch 是额度相关入口的多功能位集合,为字符串数组,state 初值 [ ]。

"`creditLimitSwitch` | 额度相关入口的**多功能位集合**(数组)"

规则DOC-2026-023#p10pending_review

creditLimitSwitch 是字符串数组,通过 .includes('<常量>') 判断其中单项功能是否开启。

"`creditLimitSwitch` 是字符串数组,通过 `.includes('<常量>')` 判断单项是否开启。"

定义DOC-2026-023#p11pending_review

creditLimitSwitch 枚举项 INCREASE_ENTRANCE_SWITCH 控制提额/灵活额度入口(首页与额度页)。

"`INCREASE_ENTRANCE_SWITCH` | 提额/灵活额度入口(首页与额度页)"

定义DOC-2026-023#p11pending_review

creditLimitSwitch 枚举项 FLEXIBLE_LIMIT_SWITCH 控制灵活额度(Add limit / Flexible limit 卡片)任务模块。

"`FLEXIBLE_LIMIT_SWITCH` | 灵活额度(Add limit / Flexible limit 卡片)任务模块"

定义DOC-2026-023#p11pending_review

creditLimitSwitch 枚举项 REPAYMENT_INCREASE_SWITCH 控制还款提额(Bonus limit / 还款任务)模块。

"`REPAYMENT_INCREASE_SWITCH` | 还款提额(Bonus limit / 还款任务)模块"

规则DOC-2026-023#p14pending_review

minimumRepaymentMinAmount 为最低还款触发的最小应还门槛(单位为分);仅当应还金额≥此值才允许走最低还款。

"`minimumRepaymentMinAmount` | 最低还款触发的最小应还门槛(金额,单位最小货币单位/分)。仅当应还金额 ≥ 此值才允许走最低还款"

定义DOC-2026-023#p14pending_review

reapplyCreditIntervalMinDays 是 reapply 资格的最小间隔天数:上次核额日到当前系统日的天数需大于此值。

"`reapplyCreditIntervalMinDays` | reapply 资格的**最小间隔天数**:上次核额日到当前系统日的天数需 > 此值"

定义DOC-2026-023#p14pending_review

reapplyCreditDataConfirmDays 是 reapply 资料确认天数:自上次核额起需达到此天数才符合 reapply(isEligibleReapply)。

"`reapplyCreditDataConfirmDays` | reapply 资料确认天数:自上次核额起需达到此天数才符合 reapply(`isEligibleReapply`)"

规则DOC-2026-023#p14pending_review

restructureOverdueMinDpd/restructureOverdueMaxDpd 定义逾期重组入口的 DPD 窗口上下界,账户逾期天数须落在 [min,max] 双闭区间才展示逾期重组入口/预付;仅 gate 逾期分支。

"逾期重组入口的 **DPD 窗口**上下界(账户逾期天数 `OVERDUE_DAYS` 须落在 `[min,max]` 双闭区间才展示逾期重组入口/预付"

例外DOC-2026-023#p15pending_review

逾期重组入口在 DPD 缺失时,因 NaN 判定采取 fail-closed,隐藏入口。

"DPD 缺失→NaN→fail-closed 隐藏"

规则DOC-2026-023#p15pending_review

restructureMaintenanceStartTime/EndTime 定义逾期重组首页入口的日终维护窗口边界(HHmm 字符串,[start,end) 服务端时间,不支持跨午夜);窗口内点击入口弹维护弹窗不进流程,推成 start≥end 即永不命中。

"逾期重组首页入口的**日终维护窗口**边界(`HHmm` 字符串,`[start,end)` 服务端时间,不支持跨午夜;窗口内点入口弹维护弹窗不进流程"

规则DOC-2026-023#p16pending_review

GPS 强制上报的触发条件:设备 SDK 版本≥1.0.6 且对应场景 Switch 取值为 'Y'。

"GPS 强制上报需 SDK≥1.0.6 且对应 Switch 为 `'Y'`。"

定义DOC-2026-023#p17pending_review

locationReportScenes 为「需要上报位置的场景」数组(如 CASH_POSITION、FACE_SCANNING_POSITION 等),由后台下发控制哪些场景开启 GPS 上报,与 cashLoanSceneSwitch/openPaylaterScanFaceSwitch 配合使用。

"`locationReportScenes`(`setting.js:21`,state 初值 `[]`)为「需要上报位置的场景」数组"

规则DOC-2026-023#p17pending_review

位置上报逻辑先判断 locationReportScenes.includes(scene),即场景须在 locationReportScenes 数组内才继续上报。

"`report.js:67` 先判 `locationReportScenes.includes(scene)`"

规则DOC-2026-023#p20pending_review

PayLater 的功能可见性由三类不同来源的门控叠加决定,三者口径与责任方各不相同。

"PayLater 的功能可见性由三类不同来源的门控**叠加**决定,三者口径与责任方不同"