◆ wport | pm_49

KYB 企業自動化審核與 OCR 文件辨識系統 Mockup PRD(給後端 API 規格產生器使用)

KYB 企業自動化審核與 OCR 文件辨識

來源 doc/feature/pm_49/kyb-ocr-auto-verification-mockup.md

KYB 企業自動化審核與 OCR 文件辨識系統 Mockup PRD(給後端 API 規格產生器使用)

此文件為 wport 平台「企業身分驗證(KYB)自動化與文件 OCR 審核」模組的完整需求規格書。 backend-api-spec-generator 會讀取這份文件與 Storybook mockups 來產生後端 API 規格。


1. 文件資訊

  • 文件類型:Mockup 需求規格書(前後端共用視圖)
  • 適用對象:前端開發、後端開發、AI/資料工程師、UI/UX 設計師、產品、QA、客服營運
  • 最後更新:2026/07/22
  • 版本:1.0.0
  • PRD 識別碼pm_49
  • 對應 Storybookstorybook/src/stories/mockups/company/KybOcrAutoVerification.stories.ts(企業端;待產)
  • Admin-Web mockupW101-Admin-Web 分支 feature/pm-49-kyb-ocr-review/members/kyb-reviews
  • Storybook(local-prd)file:///Users/Eric/Documents/Github/prd/doc/feature/pm_49/kyb-ocr-auto-verification-mockup.md
  • Storybook(online)https://storybook.wport.me/?path=/docs/mockups-company-kybocrautoverification—docs(待 mockup 產出後替換實際 Story ID)
  • 建立日期:2026/07/22
  • 關聯 PRDpm_38(公司註冊 2.0)、business-rules.md BR-005

1.1 修訂紀錄

版本日期摘要
1.0.02026/07/22初版:KYB 自動化審核流水線、OCR 提取、經濟部 API 比對、客服人工覆核後台

2. 開發進度與設計來源

開發進度

  • 前端 PR #:[TBD / 待開發後補上]
  • 後端 PR #:[TBD / 待開發後補上]
  • AI/OCR 服務 PR #:[TBD / 待開發後補上]

設計來源

  • Figma 連結:[待補上]
  • 既有 FE 參照
    • 公司驗證文件上傳區(production,incremental 擴充)
    • pm_38 公司註冊 2.0 精靈 Step 後段之 BR-005 驗證入口
  • SaaS Benchmark
    • Stripe Connect KYB(文件上傳 + 自動/人工分層)
    • 104 企業認證(全人工審核 baseline)
    • LinkedIn Company Page Verification(文件 + 官方資料比對)

3. 模擬頁面摘要(Mockup Summary)

3.1 功能概述

  • 功能名稱:KYB 企業自動化審核與 OCR 文件辨識系統
  • 主要使用者角色
    • Employer(Owner / Admin):上傳公司變更登記表、查看審核結果
    • KYB 客服(Site Admin):人工覆核模糊案件、核准/退件
    • 平台(系統):自動 OCR + 政府 API 比對流水線
  • 核心目標
    • 取代現行「全人工核對變更登記表 vs 經濟部登記資訊」流程,實現 ≥ 80% 台灣案件秒級自動通過
    • 降低客服人力成本,縮短 BR-005 公司驗證 SLA(目標:自動通過即時、人工案件 1 個工作天內)
    • 異常時精準引導企業修正或轉交人工,保留稽核軌跡與 C 端信任(BR-005 gate 不變)
  • 戰略對齊(WPORT)
    • 強化 合規自動化 差異化能力,服務企業付費轉化與 7 人團隊槓桿
    • 台灣(tw) v1 啟用;VN/TH 維持 pm_38 D4「文件 + iCan 人工審核」

3.2 範圍界定

v1(必含,本次交付)

用戶端(Employer)

  • 公司驗證流程中上傳/拍攝「公司設立登記表/變更登記表」(BR-005 可接受文件類型之子集)
  • 前端照片品質預檢(亮度、清晰度、格式、大小)
  • 相機拍攝 A4 比例虛線框 overlay
  • 即時審核結果回饋:自動通過 / 即時退件(含原因)/ 轉人工(「專人審核中」)
  • 審核狀態查詢與重新上傳(限退件後)

後端流水線

  • 統編格式驗證(台灣 checksum)+ 上傳統編 vs 註冊統編一致性
  • 輕量化 OCR 文字提取(目標欄位 5 項)
  • 經濟部商業司 API 查詢與登記狀態判斷
  • 資料正規化 + 模糊比對(地址 Levenshtein、日期轉換、代表人精確比對)
  • 自動決策:通過 / 駁回 / 轉人工
  • 經濟部 API 失敗時 Retry + 非同步降級人工

後台(Site Admin / KYB 客服)

  • 待審清單(含轉人工原因標籤)
  • 左右對照檢視:原圖(OCR 疑慮紅框)vs 政府 API vs OCR 提取
  • 一鍵核准 / 退件 + Email 通知

v2(Phase 2,本次不交付)

  • 多文件類型:商業登記抄本、統一編號編配通知書
  • OCR 失敗時 LLM 多模態二次辨識 Fallback
  • VN/TH 文件 OCR(待官方 API 可行性確認)
  • 審核 SLA 儀表板、客服工作量分派

Out of scope

  • 取代 BR-005 其他五類文件之全自動審核(v1 僅涵蓋設立/變更登記表)
  • 統編 API 帶入(pm_38 D1)— 本功能專注公司驗證文件審核,與註冊時 GCIS lookup 獨立
  • 求職者端 C 端徽章變更(維持 pm_38 D20:信任訊號以 BR-005 公司認證為準)
  • 直接修改 business-rules.md(新規則先記於 §4,由人決定是否回寫)

3.3 成功條件

KPI目標量測方式
台灣變更登記表自動通過率≥ 80%自動 approved / 總送審數(排除用戶主動撤回)
自動審核端到端延遲(P95)≤ 3 秒上傳完成 → 回傳最終決策
前端品質預檢攔截率追蹤(無硬性目標 v1)預檢失敗 / 總上傳嘗試
人工覆核 SLA≤ 1 個工作天pending_manualapproved/rejected 中位數
客服人均審核工時下降≥ 50%(基線待上線後校正)上線前後同案件量之客服工時比較
誤通過率(False Positive)< 0.5%事後稽核抽樣 + 客訴回溯

4. 商業規則對齊(Business Rules Alignment)

4.1 本功能使用到的既有業務規則

規則 ID規則摘要是否關鍵備註
BR-001只有信箱認證後才能登入✅ 是上傳驗證文件須已登入
BR-004只有信箱認證的使用者可新增公司✅ 是公司 Owner/Admin 才能發起 KYB
BR-005公司未驗證可增職缺但無法上架;驗證需上傳擇一公司文件✅ 是本功能自動化 BR-005 中「設立/變更登記表」路徑
BR-007成員角色權限✅ 是僅 Owner/Admin 可上傳驗證文件;Manager 不可
BR-008職缺發布前須公司驗證✅ 是自動通過即更新 BR-005 狀態為「已通過」
BR-016Manager 不可編輯公司資訊✅ 是含驗證文件上傳

4.2 本功能新增/補充規則(待回寫 business-rules)

規則 ID(提案)規則摘要是否關鍵備註
BR-005-KYB-01台灣公司驗證:上傳「設立/變更登記表」時,系統先執行自動審核;僅 country_code=tw 啟用✅ 是VN/TH 不走本流水線
BR-005-KYB-02自動審核通過等同 BR-005「已通過」;無需再經人工二次確認✅ 是須留存完整稽核 log
BR-005-KYB-03同一公司同時僅允許 1 筆 pending / processing / pending_manual 驗證案件✅ 是防重複送審
BR-005-KYB-04退件後用戶可重新上傳;每月最多 5 次送審(含自動+人工路徑)✅ 是防濫用
BR-005-KYB-05上傳文件統編必須與公司 tax_id 一致✅ 是對齊 pm_38 D10 統編鎖定精神

4.3 與 pm_38 的關係

項目pm_38本功能(pm_49)
時機註冊 Step 1 統編查詢帶入 derived公司驗證(BR-005)文件審核
資料源GCIS live → 稅籍資料集 fallback經濟部商業司 API(登記狀態 + 欄位比對)
市場tw / vn / thv1 僅 tw
人工審核VN/TH 全人工TW 模糊案件轉人工
C 端信任BR-005 公司認證不變;自動通過 = 已通過 BR-005

無硬衝突:統編 API 帶入 ≠ 公司驗證通過;本功能強化驗證環節,不改變 lifecycle 分層(draft → profile_complete → BR-005)。


5. 資料實體與欄位(Data Entities & Fields)

本節描述業務上需要追蹤的資訊與用途,不預先鎖定 JSON 欄位名、hash 演算法或 DB schema(RD 於 OpenAPI Spec 決策)。

5.1 實體列表

實體名稱說明業務用途
KybVerificationCase單次公司驗證送審案件狀態機、稽核、SLA 追蹤
KybUploadedDocument用戶上傳之登記表影像/PDF證據留存、OCR 輸入、客服對照
KybOcrExtractionOCR 提取結果比對來源、紅框標註座標
KybRegistrySnapshot經濟部 API 查詢快照比對基準、事後爭議舉證
KybFieldComparison逐欄比對結果決策依據、人工覆核提示
KybManualReviewAction客服人工操作紀錄合規稽核、問責

5.2 各實體須追蹤的資訊

KybVerificationCase

  • 與(公司、發起成員)的綁定關係
  • 案件狀態與狀態轉換時間戳(見 §5.3)
  • 決策結果:auto_approved | auto_rejected | manual_approved | manual_rejected | pending_manual | processing | failed
  • 轉人工原因碼列表(可多選)
  • 對外顯示文案代碼(error copy mapping)
  • 本月送審次數累計(配合 BR-005-KYB-04)
  • Idempotency 金鑰(防重複提交)
  • 建立/更新/完成時間

KybUploadedDocument

  • 原始檔案儲存位置(加密靜態儲存)
  • 檔案類型(image/jpeg、image/png、application/pdf)
  • 檔案大小、頁數(PDF 取第一頁為主)
  • 前端品質預檢結果(通過/失敗及原因)
  • 上傳來源(相機 / 相簿 / 檔案)

KybOcrExtraction

  • 提取欄位:統一編號、公司名稱、代表人姓名、公司所在地、最近一次核准變更日期
  • 各欄位信心分數(confidence)
  • 辨識失敗區域座標(供後台紅框)
  • OCR 引擎版本與處理耗時

KybRegistrySnapshot

  • API 回應原始快照(含查詢時間)
  • 公司登記狀態(核准設立 / 停業 / 解散 / 廢止 / 撤銷)
  • 比對用欄位:統編、名稱、代表人、地址、核准日期(AncDate)
  • API 來源標記與快取 TTL

KybFieldComparison

  • 欄位名稱、OCR 值、Registry 值、正規化後值
  • 比對方式(精確 / 模糊相似度)
  • 相似度分數(地址適用)
  • 單欄決策:match | mismatch | uncertain

KybManualReviewAction

  • 操作者(客服帳號)
  • 操作類型:approve | reject
  • 退件原因(自由文字 + 原因碼)
  • 操作時間
  • 是否觸發 Email 通知

5.3 案件狀態機

[用戶上傳] → processing
    ├── 前端預檢失敗 → (不建立案件,僅 UI 提示)
    ├── 後端格式/統編攔截 → auto_rejected(即時)
    ├── OCR + API + 比對全過 → auto_approved(即時)
    ├── 比對確定失敗 → auto_rejected(即時)
    ├── 模糊地帶 → pending_manual
    │       ├── 客服核准 → manual_approved
    │       └── 客服退件 → manual_rejected
    └── 經濟部 API 逾時/不可用 → pending_manual(原因:registry_api_unavailable)

終態auto_approved | manual_approved | auto_rejected | manual_rejected | failed(系統異常且無法降級)

BR-005 對應auto_approvedmanual_approved → 公司驗證狀態「已通過」;其餘終態 → 「未通過」或維持「待審核」。


6. 畫面區塊與資料需求(UI Sections & Data Needs)

6.1 區塊列表

區塊 ID區塊名稱說明所在頁面
SEC-U1驗證狀態摘要顯示 BR-005 狀態、上次結果、重新上傳入口公司編輯 / 驗證引導
SEC-U2文件上傳區拖曳/選檔/開啟相機公司驗證流程
SEC-U3品質預檢回饋即時錯誤文案上傳區內嵌
SEC-U4相機 OverlayA4 虛線框 + 對齊提示全螢幕相機 Modal
SEC-U5審核進行中Loading + 禁止重複提交上傳後
SEC-U6審核結果通過/退件/人工中上傳後
SEC-A1待審清單篩選、排序、原因標籤Site Admin KYB
SEC-A2對照檢視左圖右表Site Admin 詳情
SEC-A3人工操作列核准/退件 + 原因Site Admin 詳情

6.2 各區塊資料需求

SEC-U2 文件上傳區

  • 顯示條件country_code === 'tw' 且公司驗證狀態非「已通過」;角色為 Owner/Admin
  • 接受格式:JPG、PNG、PDF
  • 大小上限:10 MB
  • 數量上限:每次送審 1 份文件;案件進行中禁用上傳
  • 文案:「請上傳最新版公司設立登記表或變更登記表(需含統一編號、公司名稱、負責人、地址及核准日期)」

SEC-U3 品質預檢回饋

  • 觸發時機:檔案選定後、正式上傳前(< 0.5 秒)
  • 檢測項:亮度、清晰度、格式、大小
  • 失敗文案(固定,見 §9 Error Handling)

SEC-A1 待審清單

  • 資料需求:分頁、篩選(狀態、轉人工原因、送審日期)、排序(最舊優先)
  • 標籤範例[地址比對相似度 80%][日期無法明確識別][經濟部 API 暫不可用]

SEC-A2 對照檢視

  • 左側:原圖 + OCR 疑慮區域紅框 overlay
  • 右側:三欄對照表(欄位名 | OCR 值 | 經濟部 API 值 | 比對結果)

7. 使用者動作與後端需求(User Actions & Backend Needs)

動作 ID動作名稱類型需要後端涉及實體說明
ACT-1前端品質預檢UI/本地❌ 否瀏覽器端輕量檢測,失敗不呼叫 API
ACT-2送出驗證文件Write✅ 是KybVerificationCase, KybUploadedDocument觸發完整流水線;需 idempotency key
ACT-3查詢驗證狀態Read✅ 是KybVerificationCase輪詢或 WebSocket(v1 允許 polling 2s interval)
ACT-4重新上傳(退件後)Write✅ 是KybVerificationCase檢查月限 5 次;前一案件須已終態
ACT-5客服取得待審清單Read✅ 是KybVerificationCaseSite Admin 權限
ACT-6客服開啟案件詳情Read✅ 是全部 KYB 實體含圖片 signed URL(短 TTL)
ACT-7客服核准Write✅ 是KybManualReviewAction更新公司 BR-005 為已通過
ACT-8客服退件Write✅ 是KybManualReviewAction附原因;觸發 Email

建立/送審上限(mandatory)

資源限制超限行為
同公司進行中案件1拒絕並提示「已有審核進行中」
每月送審次數(每公司)5拒絕並提示聯絡客服
單次上傳檔案大小10 MB前端阻擋 + 後端二次驗證
客服批次核准v1 不支援單筆操作

8. API Hints(提示用,非最終 API 設計)

8.1 資料讀取需求(Read)

  • HINT-GET-1:取得公司當前 KYB / BR-005 驗證狀態

    • 對應區塊:SEC-U1
    • 條件:已登入、公司成員
    • 回傳:狀態、最近案件摘要、剩餘本月送審次數、是否可重新上傳
  • HINT-GET-2:輪詢案件處理進度

    • 對應區塊:SEC-U5、SEC-U6
    • 輸入:案件 ID
    • 回傳:狀態、決策、對外文案代碼、轉人工原因(若適用)
  • HINT-GET-3:客服待審清單

    • 對應區塊:SEC-A1
    • 條件:Site Admin + KYB 權限
    • 篩選:status、manual_reason、date_range
  • HINT-GET-4:客服案件詳情(含 signed URL)

    • 對應區塊:SEC-A2
    • 圖片 URL TTL:15 分鐘(過期須重新請求)

8.2 資料寫入需求(Write)

  • HINT-MUTATION-1:提交驗證文件

    • 輸入:檔案(multipart)、idempotency_key、document_type=establishment_or_amendment_form
    • 行為:建立案件 → 執行 §3 流水線 → 回傳決策或 pending_manual
    • Idempotency:相同 key 24 小時內重複請求回傳相同結果,不重跑 OCR
    • Auth:須為公司 Owner/Admin;Session 須有效
  • HINT-MUTATION-2:客服核准

    • 輸入:case_id、optional_note
    • 行為:狀態 → manual_approved;同步 BR-005;發送通過 Email
  • HINT-MUTATION-3:客服退件

    • 輸入:case_id、reject_reason_code、reject_reason_text
    • 行為:狀態 → manual_rejected;發送退件 Email

8.3 Token / 合約必要欄位(不可 TBD)

項目規格
Idempotency key TTL24 小時
案件 processing 逾時60 秒後標記 failed 或降級 pending_manual
Signed URL TTL15 分鐘
經濟部 API Retry最多 3 次,指數退避(1s、2s、4s);仍失敗 → pending_manual
Session 過期上傳中若 401 → 導登入;登入後若案件仍 processing 可恢復輪詢
Real-time auth re-check每次 mutation 重新驗證角色與公司綁定

9. 異常處理與錯誤提示對照表(Error Handling)

異常類型判斷時間點處理方式對外顯示文案
圖片太暗前端預檢阻擋上傳照片光線不足或有反光,請在明亮處重新拍攝。
圖片模糊前端預檢阻擋上傳照片對焦模糊,請確保文字清晰後重新拍攝。
格式/大小不符前端 + 後端阻擋僅支援 JPG、PNG、PDF,檔案大小請小於 10MB。
統編格式錯誤前端 + 後端即時阻擋請輸入有效的 8 位數統一編號。
統編與註冊不符後端 OCR/比對即時退件上傳文件的統編與註冊資料不符,請重新確認。
經濟部狀態非核准設立後端 API即時拒絕該公司登記狀態非核准設立,無法通過驗證。
經濟部停業後端 API轉人工資料已成功送出,專人將於 1 個工作天內完成審核。
地址/日期疑義後端比對轉人工資料已成功送出,專人將於 1 個工作天內完成審核。
經濟部 API 不可用後端 Retry 後轉人工資料已成功送出,專人將於 1 個工作天內完成審核。
月送審次數超限後端拒絕本月驗證次數已達上限,請聯絡客服協助。
重複提交後端 idempotency回傳原結果(不重複顯示錯誤,恢復原狀態 UI)
Session 過期任意 API401 導登入登入已過期,請重新登入後繼續。

9.1 Email 範本(mandatory)

EM-KYB-01 自動審核通過

  • 觸發auto_approved
  • 主旨:【WPORT】公司驗證已通過
  • 內文:您好,{company_name} 之公司驗證文件已自動審核通過。您現在可以上架職缺,開始招募人才。
  • CTA 按鈕:前往發布職缺
  • CTA URLhttps://wport.me/companies/{enc_company_id}/jobs/new

EM-KYB-02 自動審核退件

  • 觸發auto_rejected
  • 主旨:【WPORT】公司驗證未通過 — 請重新上傳
  • 內文:您好,{company_name} 之驗證文件未通過審核。原因:{reject_reason_text}。請依提示重新拍攝並上傳最新登記表。
  • CTA:重新上傳驗證文件
  • CTA URLhttps://wport.me/companies/{enc_company_id}/verification

EM-KYB-03 轉人工審核中

  • 觸發pending_manual
  • 主旨:【WPORT】公司驗證資料已收到
  • 內文:您好,我們已收到 {company_name} 的驗證文件,專人將於 1 個工作天內完成審核,結果將以 Email 通知您。
  • CTA:查看審核狀態
  • CTA URLhttps://wport.me/companies/{enc_company_id}/verification

EM-KYB-04 人工核准

  • 觸發manual_approved
  • 主旨:【WPORT】公司驗證已通過
  • 內文:同 EM-KYB-01

EM-KYB-05 人工退件

  • 觸發manual_rejected
  • 主旨:【WPORT】公司驗證未通過 — 請重新上傳
  • 內文:同 EM-KYB-02(原因由客服填寫)

10. 非功能需求(Non-Functional Requirements)

10.1 效能

階段目標
前端品質預檢< 0.5 秒
OCR 單頁提取< 1.5 秒
端到端自動審核(含 API)P95 ≤ 3 秒
後台清單載入P95 ≤ 2 秒(50 筆/頁)

10.2 資安與隱私

  • 傳輸:TLS 1.3
  • 靜態儲存:AES-256 加密
  • 後台:僅 KYB 授權客服可存取;所有操作留 audit log(不可篡改)
  • 文件保留:通過後至少 7 年(合規稽核);退件文件 90 天後可排程刪除(可設定)

10.3 可用性

  • 經濟部 API:Retry + 降級人工,禁止前端無限 loading
  • OCR 服務:單節點故障時佇列化處理,逾時降級人工
  • 目標可用性:99.5%(月)

10.4 技術選型備註(RD 可調整)

  • OCR 引擎:建議方向為 PaddleOCR 或同等輕量模型,部署於自有 GPU/CPU,不消耗大模型 Token(v1)
  • LLM Fallback:僅 v2;v1 不寫死特定多模態供應商
  • 經濟部 API:對齊 pm_38 D1 之 GCIS 資料源精神;endpoint 由 RD 依現行可用品項實作,PRD 不寫死 URL

11. 導航 / Storybook Map

  • Storybook 標題Mockups/Company/KYB OCR Auto Verification
  • Stories 路徑storybook/src/stories/mockups/company/KybOcrAutoVerification.stories.ts
  • Storybook(local-prd)file:///Users/Eric/Documents/Github/prd/doc/feature/pm_49/kyb-ocr-auto-verification-mockup.md
  • Storybook(online)https://storybook.wport.me/?path=/docs/mockups-company-kybocrautoverification—docs
  • 情境控制(建議 args)
    • scenario: idle | uploading | quality_fail_dark | quality_fail_blur | processing | auto_approved | auto_rejected | pending_manual
    • countryCode: tw(非 tw 隱藏自動 KYB,顯示既有人工上傳)
  • 對應 production 路由(參考)
    • /companies/:id/verification(incremental 擴充現有驗證頁)
    • Site Admin:/siteadmin/kyb/reviews

12. Flowcharts(User / System / Navigation)

12.1 User Flow(企業用戶)

flowchart TD
    Start([進入公司驗證頁]) --> CheckCountry{country_code = tw?}
    CheckCountry -->|否| ManualVNTH[顯示 VN/TH 人工上傳流程 pm_38 D4]
    CheckCountry -->|是| CheckRole{Owner/Admin?}
    CheckRole -->|否| NoPerm[顯示無權限]
    CheckRole -->|是| CheckPending{已有進行中案件?}
    CheckPending -->|是| ShowPending[顯示審核中/輪詢狀態]
    CheckPending -->|否| Upload[選擇檔案或開啟相機]
    Upload --> QualityGate{前端品質預檢}
    QualityGate -->|失敗| QualityErr[顯示光線/模糊提示]
    QualityErr --> Upload
    QualityGate -->|通過| Submit[送出至後端]
    Submit --> Wait[顯示處理中 最長 60s]
    Wait --> Result{決策結果}
    Result -->|auto_approved| Pass[顯示通過 + 可上架職缺 CTA]
    Result -->|auto_rejected| Reject[顯示退件原因 + 重新上傳]
    Result -->|pending_manual| Manual[顯示專人審核中]
    Reject --> Upload
    Manual --> EmailWait[等待 Email 通知]

12.2 System Flow(自動審核流水線)

sequenceDiagram
    participant U as Employer FE
    participant API as WPORT API
    participant OCR as OCR Service
    participant MOEA as 經濟部 API
    participant Admin as KYB 後台

    U->>API: POST 驗證文件 + idempotency_key
    API->>API: 統編格式 + 與註冊統編比對
    alt 統編不符
        API-->>U: auto_rejected
    end
    API->>OCR: 提取 5 欄位
    OCR-->>API: OCR 結果 + 信心分數
    API->>MOEA: 以統編查登記資料
    alt API 失敗 after retry
        API->>API: pending_manual registry_unavailable
        API-->>U: pending_manual
        API->>Admin: 進入待審佇列
    else API 成功
        API->>API: 狀態檢查 + 正規化比對
        alt 登記狀態解散/廢止/撤銷
            API-->>U: auto_rejected
        else 停業或模糊比對
            API->>Admin: pending_manual
            API-->>U: pending_manual
        else 100% 比對通過
            API->>API: 更新 BR-005 已通過
            API-->>U: auto_approved
            API->>U: Email 通過通知
        end
    end
    Admin->>API: 核准/退件
    API->>U: Email 結果通知

12.3 Navigation Flow

flowchart LR
    CompanyEdit[公司編輯頁] --> Verification[公司驗證頁 SEC-U1~U6]
    JobPublish[發布職缺] -->|未 BR-005| Verification
    Verification -->|通過| JobNew[新增職缺]
    SiteAdmin[Site Admin] --> KybList[KYB 待審清單 SEC-A1]
    KybList --> KybDetail[案件詳情 SEC-A2/A3]

12.4 比對決策子流程(共用)

flowchart TD
    N[欄位正規化] --> D{欄位類型}
    D -->|代表人姓名| Exact{完全一致?}
    Exact -->|是| M1[match]
    Exact -->|否| MM[mismatch → auto_reject 或 manual]
    D -->|日期| DateNorm[民國轉西元] --> DateCmp{與 AncDate 一致?}
    DateCmp -->|是| M1
    DateCmp -->|無法解析| U1[uncertain → manual]
    DateCmp -->|否| MM
    D -->|地址| AddrNorm[臺→台 樓層格式統一] --> Fuzzy{相似度}
    Fuzzy -->|>90%| M1
    Fuzzy -->|70-90%| U1
    Fuzzy -->|<70%| MM

12.5 Edge Case Coverage(必填)

類別情境系統行為UI 回饋可重試資料一致性策略備註
Network & Performance上傳逾時 > 30s取消請求上傳逾時,請檢查網路後重試Yes未建立案件或標記 failed
Network & Performance審核流水線 > 60s標記 pending_manual 或 failed專人審核中或系統忙碌Yes以案件狀態為準
Network & Performance雙擊送出idempotency 去重按鈕 disabled + 單一結果Yes不重跑 OCR
Data & Input非 JPG/PNG/PDFFE+BE 拒絕格式錯誤文案N/A不建立案件
Data & InputPDF 多頁僅 OCR 第一頁提示「請上傳含完整資訊之首頁」Yesv1
Data & InputOCR 全欄位空白auto_rejected 或 manual無法辨識文件內容Yes保留原檔
User Interruption審核中離開頁面後端繼續處理返回後輪詢恢復Yesjob status 為準
User Interruption審核中重新整理以 case_id 恢復顯示 processing/結果Yes
Auth & LifecycleSession 過期401 導登入登入已過期Yes登入後回跳return URL
Auth & Lifecycle同公司兩分頁同時上傳第二筆拒絕已有審核進行中Yes單一 pending case
Logical Inconsistency部分欄位 OCR 失敗依欄位權重決策轉人工或退件Yes逐欄標記 uncertain
Logical Inconsistency自動通過後政府資料變更不回溯自動撤銷 v1N/AN/A客訴人工處理v2 考慮定期複驗

13. Mock Data Schema(Mock 資料結構)

  • 資料來源:Storybook mock only
  • 建議情境資料
    • mockCaseAutoApproved:全欄位 match
    • mockCaseAddressUncertain:地址相似度 82%
    • mockCaseTaxIdMismatch:OCR 統編 vs 註冊統編不符
    • mockCaseRegistryDissolved:經濟部狀態解散
    • mockAdminQueue:5 筆待審含不同 reason tag
  • CRUD:mock 內狀態變更僅存在元件內,重新整理還原

14. 實作備註(Implementation Notes)

14.1 Incremental vs 新頁

  • 用戶端Incremental — 擴充現有「公司驗證文件上傳」區塊;tw 時啟用品質預檢 + 即時審核 UX
  • 後台新頁 — Site Admin KYB 待審模組(可掛於現有 siteadmin 導航下)

14.2 禁止事項

  • ❌ 本文件不直接定義最終 API path/method
  • ❌ v1 不將 VN/TH 接入自動 OCR
  • ❌ 不修改 C 端「統編驗證徽章」(pm_38 D20)

14.3 Migration / 相容性

項目策略
既有「待審核」人工案件維持原流程;新送審走 KYB 流水線
既有「已通過」公司不受影響;無需重新驗證
BR-005 狀態欄位擴充 verification_method: legacy_manual | kyb_auto | kyb_manual(語意層,RD 定欄位)
回滾Feature flag kyb_auto_tw_enabled;關閉時回到全人工上傳

15. 一致性表(Consistency Tables)

15.1 欄位對照表

業務欄位用戶端顯示OCR 提取經濟部 API比對方式SoT版本
統一編號間接(註冊資料)精確 + 與註冊比對Registry + 註冊 tax_idv1
公司名稱精確(正規化後)Registryv1
代表人姓名精確Registryv1
公司所在地模糊 ≥90%Registryv1
核准變更日期AncDate西元日期精確Registryv1

15.2 常數表

常數SoT版本
檔案大小上限10 MBPRD §6v1
支援格式JPG, PNG, PDFPRD §6v1
地址相似度通過閾值> 90%PRD §12.4v1
地址相似度人工閾值70%–90%PRD §12.4v1
每月送審上限5 次/公司PRD §7v1
Idempotency TTL24hPRD §8.3v1
Signed URL TTL15 minPRD §8.3v1
端到端延遲 P95≤ 3sPRD §10.1v1
人工 SLA1 工作天PRD §3.3v1

15.3 事件字典

事件名稱觸發時機消費者Payload 要點SoT版本
kyb.case.submitted用戶送出文件流水線、稽核company_id, case_idPRDv1
kyb.case.auto_approved自動通過BR-005 更新、Emailcase_idPRDv1
kyb.case.auto_rejected自動退件Emailcase_id, reason_codesPRDv1
kyb.case.pending_manual轉人工後台佇列、Emailcase_id, reason_codesPRDv1
kyb.case.manual_resolved客服核准/退件BR-005、Emailcase_id, action, reviewer_idPRDv1

15.4 術語字典

術語定義SoT版本
KYBKnow Your Business 企業身分驗證PRDv1
變更登記表BR-005 可接受文件類型之一business-rules BR-005v1
自動通過auto_approved,等同 BR-005 已通過PRDv1
模糊地帶比對不確定或停業等需人工案件PRDv1
GCIS政府資料開放平臺公司登記 API 族pm_38 D1v1

15.5 版本凍結表

項目v1/v2Blocking?理由決策者日期
TW 設立/變更登記表自動審核v1MVPPM2026-07-22
商業登記抄本 OCRv2No擴充文件類型PM2026-07-22
LLM OCR Fallbackv2No成本與複雜度PM2026-07-22
VN/TH 自動 KYBv2No無可靠 API(pm_38 D4)PM2026-07-22
經濟部 API 具體 endpointv1 RD 定Yes(實作前)不寫死於 PRDRDTBD

16. PRD 問題清單

#PRD sectionIssueSuggested fixCategoryImpactSoT
1§8.3經濟部 API 實際 endpoint 與欄位對照尚未由 RD 確認RD 實測後補充 OpenAPI Spec 附錄TechnicalBlocking 實作RD Spec
2§6Production 驗證頁 FE 路徑待確認開工前由 FE 提供 incremental 基準檔案清單ProcessMediumFE
3§15.2地址 70%/90% 閾值為建議值,未經離線標註集驗證上線前以 200 份歷史案件調參QualityMediumPM+AI
4§4.2BR-005-KYB-* 尚未回寫 business-rules.md評審通過後由 PM 回寫ProcessLowbusiness-rules

17. Sync-Fix List(跨產物同步)

#產物動作OwnerBlocking
1Storybook建立 KybOcrAutoVerification.stories.ts 涵蓋 §11 情境FEYes
2business-rules.md評審後新增 BR-005-KYB-01~05PMMedium
3pm_38交叉引用 pm_49 於 BR-005 驗證段落PMLow
4OpenAPI Spec依本 PRD 產出 KYB endpointsRDYes
5Site Admin新增 KYB 導航與權限角色FE+RDYes
6doc/feature/README.md新增 pm_49 索引列PMLow

18. 下一步(Next Steps)

  1. 與 RD 確認經濟部 API 可用欄位與 停業 狀態處理政策
  2. 使用 gen-storybook-mockup-gen 產出 SEC-U1U6、SEC-A1A3 mockup
  3. 離線標註 200 份歷史登記表,校準 OCR 與地址相似度閾值
  4. backend-api-spec-generator 產出 OpenAPI
  5. Feature flag 灰度:先內部測試公司 → 10% TW 新送審 → 全量

文件結束