Ctrl K

PCE TW GUI — SuiteTax 支援規劃

狀態:銷項開立已在 SuiteTax 帳測過台幣發票與折讓。課稅別對應維持既有稅碼清單,定案不改(2026-11-04)。
最後更新:2026-11-04
對象:產品/顧問/開發
目的:讓模組在 SuiteTax 帳號上仍能正確把 NetSuite 明細稅資訊對到 PCE 課稅別 1/2/3,行為與現行 Legacy Tax(Sales Tax Item) 帳號一致。

導入假設(產品):客戶在 上線 PCE 前 即已在 NetSuite 決定 Legacy 或 SuiteTax;本規劃 不 涵蓋「營運中把同一帳號從 Legacy 改 SuiteTax」後的對應轉換、匯出/匯入或重新對應 SOP。

1. 為什麼需要

面向說明
業務台灣電子發票 MIG 要求 PCE 主檔/明細的 課稅別、稅率、稅額 與來源交易一致;銷項開立前必須完成 課稅別 ↔ NS 稅碼 對應。
平台SuiteTax 與 Legacy 的稅碼主檔、搜尋方式、部分交易欄位行為不同;現行程式假設 Legacy。
風險在 SuiteTax 帳號上:對應 UI 可能 稅碼清單為空、開立時 taxcode 反查失敗、或對到錯誤 internal id,導致無法開立或課稅別錯誤。

2. 現況(Legacy 假設)

2.1 資料模型(不變)

  • customrecord_pce_tax_type:custrecord_pce_taxtype_code_value(1/2/3)+ custrecord_pce_taxtype_ns_taxcode(MULTISELECT,存 NS 稅碼 internal id)。
  • 語意:同一 PCE 課稅別可對多個 NS 稅碼(例如不同稅率皆屬應稅)。

2.2 程式 touch points

區塊檔案現行做法
對應 UIcommon/PCE_SL_TaxTypeMapping.jssearch.Type.SALES_TAX_ITEM 載入下拉選項
反查 mapar/libraries/PCE_LIB_AR_Lookup.js讀 tax type CR 的 multiselect → nsTaxCodeId → PCE code
銷項開立ar/libraries/PCE_LIB_AR_Issue.jsInvoice/CM item 子列表 taxcode(value/text);驗證未對應稅碼
開立搜尋ar/libraries/PCE_LIB_AR_IssueSearch.js搜尋欄位含 taxcode
交易 CSar/clientscripts/PCE_CS_Trans_AR_Body.js讀 line taxcode
進項AP 程式未直接綁 NS taxcode;課稅別多來自 CSV/欄位,SuiteTax 影響較小(仍可能間接影響交易稅額)

2.3 帳上設定入口

  • PCE GUI Portal → 模組設定 → 課稅別稅碼對應(customscript_pce_sl_taxtype_mapping)。

3. SuiteTax vs Legacy(工作假設,需帳上驗證)

以下為實作前必須在 已啟用 SuiteTax 的 sandbox/客戶帳 核對的項目;細節以 Oracle Help/該帳 API 為準。

主題Legacy(現行支援)SuiteTax(待支援)
稅碼主檔sales tax item / SALES_TAX_ITEM search通常為 SuiteTax Tax Code(record type/search 路徑不同,不可再只搜 SALES_TAX_ITEM)
明細稅欄位item.taxcode(internal id + text)多數仍暴露 line tax code,但 id 命名空間不同;部分情境可能需 tax details 或額外欄位(需實測 Invoice/CM)
啟用判斷預設 Legacy建議 runtime.isFeatureInEffect/帳號 preference(確切 feature id 需查官方文件並在目標帳驗證)
子公司/nexus相對單純SuiteTax 常與 nexus、tax registration 連動;下拉稅碼可能需 依 subsidiary 過濾

原則:PCE 仍只關心「line 上選了哪個 NS 稅碼 id → 對到 1/2/3」;差異集中在 如何列舉合法稅碼 與 如何從交易讀出同一個 id**。

4. 目標與非目標

4.1 目標(MVP)

  1. 依帳號稅制(Legacy 或 SuiteTax)走對應 UI/開立分支;實作上以偵測或 上線時寫死的模組設定 二擇一(見 §5.1),不處理稅制中途切換。
  2. 銷項開立(含自訂明細、來源 Invoice/CM)在 SuiteTax 帳號可完成 taxcode 反查與未對應驗證,產出正確 PCE 課稅別。台幣發票與折讓已在帳上開立。
  3. Legacy 帳號行為不變(回歸測試必過)。
  4. 文件:使用說明、操作手冊 HTML 各加一段「SuiteTax 帳號注意事項」。

4.2 非目標(第一版不做)

  • 替 NetSuite 計算 稅額或改寫 SuiteTax engine 設定。
  • 完整 tax details 子表逐行同步到 PCE 明細(除非實測證明僅讀 taxcode 不足)。
  • 多國 VAT/US sales tax 通用化(仍以 台灣 PCE 課稅別 1/2/3 為範圍;他國稅碼若出現在清單,僅作映射,不保證報稅語意)。
  • AP Write/進項 CSV 全面重寫(除非發現 SuiteTax 導致 taxType 來源交易 不一致,再開子項)。
  • Legacy → SuiteTax 帳號稅制轉換 後的對應修補、資料匯出/匯入、專用 migration 文件(不在範圍)。
  • 改課稅別對應的稅碼清單。既有對應是正確的,SuiteTax 帳也沿用,不另做 SuiteTax 稅碼下拉。

5. 建議架構

5.1 稅制引擎抽象層(新建 library)

建議:common/PCE_LIB_NsTaxEngine.js(名稱可調),對外固定 API:

方法用途
getTaxEngineMode(context)回傳 LEGACY \SUITETAX(可帶 subsidiaryId)
listTaxCodesForMapping(options)對應 UI 下拉:{ value: internalId, text: label }[]
getLineTaxCodeId(record, { sublistId, line })統一從交易明細取稅碼 id
getLineTaxCodeLabel(record, …)顯示用;SuiteTax 若 text 格式不同在此對應調整
validateMappingIds(ids)儲存前確認 id 在該引擎仍有效

設定(可選):模組通用設定增加 NS 稅制 列舉 AUTO | LEGACY | SUITETAX(預設 AUTO),供 導入/建帳 時與 NetSuite 對齊;正常營運中不預期變更。

5.2 改接現有模組(薄改)

PCE_SL_TaxTypeMapping.js     → listTaxCodesForMapping()
PCE_LIB_AR_Lookup.js         → (map 仍讀 CR;可加引擎無關快取)
PCE_LIB_AR_Issue.js          → getLineTaxCodeId / 驗證未對應
PCE_LIB_AR_IssueSearch.js    → 確認 search column 在 SuiteTax 仍可用
PCE_CS_Trans_AR_Body.js      → 同上

5.3 資料相容

  • 不新增 第二套 multiselect 欄位;同一帳號內只會存在 一種 稅制下的稅碼 id。
  • 對應 UI 可選:儲存的 id 若在現行稅制搜尋不到則標示無效(設定錯誤或環境不一致時除錯用),非為稅制轉換流程設計。

6. 分期建議

階段內容交付/驗收
S0 探索在 SuiteTax 帳:列舉稅碼 API、Invoice/CM 明細欄位、feature 判斷;產出 帳上筆記(record type、範例 id、screenshot)1 頁技術備忘 + 測試交易 id
S1 對應 UI決議不做課稅別對應維持既有稅碼清單
S2 銷項開立Issue/Lookup/Search/CS 改接;錯誤訊息區分「未對應」vs「引擎不支援」台幣發票與折讓已在 SuiteTax 帳上開立
S3 硬化subsidiary/nexus 過濾、安裝後檢查、模組設定頁提示多子公司帳測試;npm test 新增 engine mock 單測
S4 文件user-guide、手冊 HTML、AR status 能力列顧問可照文件設定

7. 測試策略

類型做法
單元mock NsTaxEngine:Legacy/SuiteTax 各一組假稅碼 id + line 讀取
本機延伸 test/ar-*:反查 map、未對應驗證
帳上雙帳:TD2905095(Legacy?)+ SuiteTax sandbox;開立 smoke 寫入 test/results/
回歸現有 npm run test:ar-*、tax mapping 相關(若無則 S1 補 test/ns-tax-engine.test.js)

8. 風險與決策點

  1. 僅帳級 SuiteTax vs 子公司混用:若存在「部分子公司 Legacy」,getTaxEngineMode 必須 依 subsidiary 而非全帳一種。
  2. taxcode search column:SuiteTax 下 saved search 是否仍回傳相同 internal id;若否,Issue 查詢需改 join 或改載入方式。
  3. 對應 multiselect 儲存值:Legacy 與 SuiteTax 的 id 不可跨帳/跨稅制複製(僅防顧問誤拷 sandbox 設定)。
  4. Performance:SuiteTax 稅碼數量可能更大 → 對應 UI 考慮 subsidiary 篩選或分頁(第二版;對應表仍全帳共用,見 §9)。

9. 產品決策(已確認)

問題決策
SuiteTax 時程晚於「產營業稅檔」能力完成之後 再排 SuiteTax 實作與首個目標帳驗收;Legacy 帳仍須長期並行支援(不同客戶/不同帳 各走各的稅制,非同一帳轉換)。
對應表範圍全帳共用(維持現行 customrecord_pce_tax_type 一組 1/2/3 對應,不依子公司拆表)。
導入方式上線前 與 NetSuite 稅制(Legacy/SuiteTax)一次定案;完成 課稅別 NS 稅碼對應 後始用銷項開立。不規劃 營運中稅制切換的配套。
課稅別對應維持既有稅碼清單,定案不改。SuiteTax 帳沿用同一份 1/2/3 對應,不另做 SuiteTax 稅碼下拉。

10. 相關文件

文件關係
PCE TW GUI MODULE — 銷項(AR)實作進度(一頁式)實作後更新能力列
使用說明 § 課稅別對應操作步驟
銷項藍圖階段可併入 Phase 2/4 或獨立「平台」里程碑
Oracle SuiteTax/SuiteScript Records 說明S0 必查(Agent Skill:netsuite-suitescript-records-reference)

變更紀錄

日期摘要
2026-11-04課稅別對應維持既有稅碼清單,定案不改。SuiteTax 帳上已開立台幣銷項發票與折讓單
2026-10-29模組通用新增 suiteTax。勾選後銷項讀 Tax Details,進項與交易建立寫入 Tax Details。課稅別下拉仍列 Legacy 稅碼,帳上驗證未做
2026-09-17初版規劃:現況盤點、抽象層、分期與風險
2026-09-17產品決策:SuiteTax 排在產營業稅檔之後;對應表全帳共用;不做對應匯入匯出工具
2026-09-17導入假設:上線前定案 Legacy/SuiteTax;不涵蓋帳號稅制中途轉換