釐清 plans-plus.html 續費查詢頁「上次訂閱資訊」中的 KYC 欄位到底代表什麼、KYC 功能是否受「有沒有租設備」限制、以及是否每個租戶預設開啟;並記錄本次為此做的文案修正。
| 問題 | 答案 | 說明 |
|---|---|---|
| 「上次訂閱資訊」的 KYC 應該是「是否租用 KYC 設備」嗎? | 基本是 | 該值 = TenantProperty.EnableKYC,而它由「下單方案是否含 Tag1Code = KYC 的方案行」決定;此方案行在 plans-plus 對應加購項「KYC 讀卡設備租用」。故它實質表示「上次訂閱有無租 KYC 讀卡設備」。 |
| 有沒有租 KYC 設備,會影響用戶在系統中使用 KYC 功能嗎? | 只影響掃描入口 | enableKYC 在前端只控制「ID Scan/機器掃描」按鈕的顯隱。「上傳」與「手動錄入」兩條路徑始終可用;後端 KYCService/KYCController 完全不校驗 EnableKYC。 |
| 「能否使用 KYC 功能」是每個租戶預設開啟的嗎? | 不是 | EnableKYC 對一般租戶預設 false,僅在下單方案含 KYC 加購時為 true(續費沿用上次值)。唯一預設 true 的是 Host 宿主租戶。但因前端僅擋掃描按鈕,所有租戶預設仍可用「上傳/錄入」做 KYC。 |
plans-plus 續費頁「上次訂閱資訊」卡片的「已購增值 / Add-ons」列,經由這條鏈路取得 KYC 標記:
previousAddonText() → currentSubscription.addons.kyc → BFF 直通 → CurrentSubscriptionAddonsDto.Kyc ← tp.EnableKYC| 層 | 內容 |
|---|---|
| 前端顯示 plans-plus.js:570-581 / plans-plus.html:347 |
showTenantInfo() 把 previousAddonText(s) 寫入 #ppTiAddons;當 addons.kyc === true 時,列表加入一個 KYC 標籤。 |
| 續費查詢 DTO RenewableTenantByEmailDto.cs:46-54 |
CurrentSubscriptionAddonsDto.Kyc,欄位註解明寫「是否已購 KYC(TenantProperty.EnableKYC)」。 |
| 後端聚合 OrderService.cs:2460 |
Addons = new CurrentSubscriptionAddonsDto { Kyc = tp.EnableKYC }——直接取當前生效 TenantProperty.EnableKYC。 |
| 底層欄位 TenantProperty.cs:69-71 |
public bool EnableKYC,註解「是否啟用了 KYC 功能」。命名雖是「功能開關」,但賦值來源只綁定「有沒有買 KYC 設備加購」(見下節)。 |
加購項對應:plans-plus 第 4 步的 KYC 加購項在 plans-plus.html:468 標題為「KYC ID Reader Rental / KYC 身份讀取設備租用」——一台實體讀卡機,按訂閱期租用。這正是產生 Tag1Code = KYC 方案行、進而把 EnableKYC 置 true 的東西。
EnableKYC 全庫僅有 3 種寫入來源(其餘皆為 EF 遷移快照),沒有任何「按功能開關」的入口:
| 場景 | 代碼 | 取值 |
|---|---|---|
| 新租戶下單 | OrderService.cs:763 | EnableKYC = checkHasEnableKYCInPlan(purchasePlanDetailList) |
| 續費(新開訂單路徑) | OrderService.cs:2633 | EnableKYC = checkHasEnableKYCInPlan(purchasePlanDetailList) |
| 續費(事件隊列生效路徑) | OrderService.cs:872 | EnableKYC = lastTenantProperty.EnableKYC(沿用上一份) |
| Host 宿主初始化 | TenantPropertyDataSeeder.cs:63-79 | EnableKYC = true(僅當 currentTenant.Id == null,即 Host) |
判定函式只看方案的 Tag1:
// OrderService.cs:2694-2697
private bool checkHasEnableKYCInPlan(List<PlanDetail> purchasePlanDetailList)
{
return purchasePlanDetailList
.Where(a => a.Plan.Tag1Code == PlanTag1Enums.KYC.ToString()).Any();
}
推論:EnableKYC 語義上等同「該訂閱是否含 KYC 讀卡設備租用」,而不是一個獨立的「KYC 功能總開關」。所以把「上次訂閱資訊」裡的它讀作「是否租用 KYC 設備」是準確的。
AML_Frontend 的 KYC section 讀取當前租戶的 enableKYC:
// kyc-section.component.ts:147-148
this.amlTenant.getCurrentTenantProperty$().subscribe(res => {
this.enableKYC = res?.enableKYC ?? false
})
而它只作用在「ID Scan(機器讀卡掃描)」這一個按鈕上(switchType === 1):
| 按鈕 | switchType | 受 enableKYC 控制? | 說明 |
|---|---|---|---|
| ID Scan(機器掃描) | 1 | 是(*ngIf="enableKYC") | 插實體讀卡機掃描證件;未租設備則隱藏。kyc-section.component.html:10 |
| Upload2(上傳) | 2 | 否 · 始終顯示 | 上傳證件圖片走 OCR/校驗。kyc-section.component.html:18-24 |
| Input(手動錄入) | 3 | 否 · 始終顯示 | 手動輸入證件資訊。kyc-section.component.html:26-32 |
後端 KYCService / KYCController 從不讀取 EnableKYC。全庫對該欄位的非遷移讀取僅有兩處:續費沿用(OrderService.cs:872)與續費查詢上報(OrderService.cs:2460)。因此它純粹是前端那顆掃描按鈕的顯隱旗標,不構成服務端鑑權。
結論:沒租設備的租戶照樣能用完整 KYC(上傳 / 手動錄入 → OCR、校驗、檢索),只是看不到「插讀卡機掃證件」這個入口。
「租 KYC 設備」= 解鎖前端硬體掃描按鈕,而非解鎖 KYC 功能本身。
EnableKYC 預設 false,僅當下單方案含 KYC 設備加購才為 true;續費時沿用上一份的值(OrderService.cs:872)。true 的(TenantPropertyDataSeeder.cs:63-79,currentTenant.Id == null),並非每個業務租戶。一句話:廣義 KYC(上傳/錄入)對所有租戶預設可用;EnableKYC(=是否租了 KYC 讀卡設備)預設關閉,它只額外解鎖前端「機器掃描證件」按鈕。
原本 plans-plus「上次訂閱資訊」把 KYC 加購項顯示為含糊的「KYC/KYB」(易被誤解成一種核查功能)。已改為與加購項一致的「KYC 設備租用」表述,以準確反映「是否租用 KYC 設備」。後端無改動。
| 位置 | 修改前 | 修改後 |
|---|---|---|
| plans-plus.js:575 ( previousAddonText,「已購增值」列) |
parts.push('KYC/KYB') |
parts.push(tr('ppx_addon_kyc_label')) |
| plans-plus.html:579 (訂單摘要 #ppSumKyc 靜態回退文字) |
KYC/KYB Verification |
KYC ID Reader Rental |
改用的 i18n 鍵 ppx_addon_kyc_label 三語皆已是租用表述:繁中「KYC 身份讀取設備租用」/ EN「KYC ID Reader Rental」/ 日「KYC IDリーダー機器レンタル」,故翻譯本體無需改動。訂單摘要 ppx_sum_kyc 的翻譯值原本就已是租用表述,本次僅同步修正其過期的 HTML 靜態回退文字。
驗證:本地以 npm run start:local 啟動 justsolutionsWebV2 即可看到「上次訂閱資訊 → 已購增值」與訂單摘要處的 KYC 顯示為「KYC 設備租用」表述。
| 角色 | 檔案 : 行 |
|---|---|
| 底層欄位定義 | AML_Backend/modules/iCON.Abp.AMLPortal/…/Domain/DbEntity/TenantProperty.cs:69-71 |
| 賦值:新租戶 / 續費 / 判定函式 | …/AMLPortal.Application/OrderService.cs:763、2633、872、2694-2697 |
| 續費查詢上報 KYC | …/AMLPortal.Application/OrderService.cs:2460 |
| 續費查詢 DTO | …/AMLPortal.Application.Contracts/OrderAppLayer/RenewableTenantByEmailDto.cs:46-54 |
| Host 預設 true | …/AMLPortal.Domain/Seeders/TenantPropertyDataSeeder.cs:63-79 |
| 前端讀 enableKYC / 掃描按鈕門檻 | AML_Frontend/…/kyc-section/kyc-section.component.ts:147-148、.html:10 |
| AML DTO 映射 | …/iCON.Abp.AML.Application/AMLAppAutoMapperProfile.cs:78 · …/TenantConfigLayer/TenantPropertyDto.cs:118 |
| plans-plus 顯示 / 加購項 | justsolutionsWebV2/public/js/plans-plus.js:570-581 · public/plans-plus.html:468、579 |
本文為程式碼閱讀分析結論,隨代碼演進可能變動;引用行號以撰寫時的倉庫狀態為準。