Ctrl K

換加值中心 — 修改範圍

用途:評估從現行汎宇改接另一家加值中心時,哪些要改、哪些不用動。
現況:Phase 3 已對汎宇定案(sFTP+MIG 4.1 中介 TXT+汎宇 ACK XML)。規格見 Phase 3 — 加值中心上傳(TXT+sFTP)與進階控管。
最後更新:2026-10-07
對象:產品/顧問/開發

本文不選下一間加值中心,也不改程式。對方契約(檔案格式、傳輸、回覆檔)到手後,用下面三檔對照再估工時。

1. 結論

不是只改「把檔案送上 sFTP」那一步。 開立、取號、折讓、作廢、上傳佇列與主檔上傳狀態可以留著。要動的是加值中心契約:出站檔、傳輸、回覆檔。這三塊都在 Vac* 程式,沒有散進開立主流程。

對方契約修改量
仍收同一份 MIG 4.1 中介 TXT,且仍走 sFTP小。連線設定為主;檔名、目錄、ACK 碼若不同再改解析
仍走 sFTP,但出站檔或 ACK 不同中。組檔或 ACK 解析要換,上傳 MR 骨架可留
不走 sFTP(例如 REST/API),或出站檔完全不同大。組檔、連線、回覆三塊都要換。開立主流程仍不用重寫

三支 password GUID 是 NetSuite N/sftp 的限制(每支 MR 各一組 Credential),不是汎宇規定。對方若不用 sFTP,模組設定上的 GUID/HostKey/目錄可以不再使用。

2. 不用改

這些只負責「發票已開、待送出、送完後的狀態」,不認識汎宇主機或 ACK 碼。

區塊代表
開立、折讓、自訂明細、取號、發票本PCE_LIB_AR_Issue.js、PCE_LIB_AR_BookAllocate.js、PCE_LIB_AR_CustomLines.js
作廢業務(含「須先上傳成功才能作廢」)PCE_LIB_AR_Void.js
上傳佇列(action=開立/作廢)PCE_LIB_AR_VacUploadQueue.js
主檔上傳狀態(待上傳/上傳中/成功/失敗/不上傳)PCE_LIB_AR_UploadStatus.js
Portal:上傳監控、上傳錯誤、重送PCE_SL_AR_UploadMonitor.js、PCE_SL_AR_UploadErrors.js、PCE_LIB_AR_VacUploadRetry.js
背景自動開立Phase 7;只把單據標成待上傳

狀態機若仍是「送出 → 等回覆 → 成功或失敗」,監控與錯誤清單的畫面可以留。回覆欄位名稱若變了,錯誤訊息的寫入點要對一下 PCE_LIB_AR_VacAckApply.js。

3. 要改的分層

flowchart LR
  issue[開立與作廢]
  queue[上傳佇列]
  txt[出站檔 VacTxtPayload]
  sftp[傳輸 VacSftpClient]
  ack[回覆 VacAckParser]
  status[上傳狀態]
  issue --> queue --> txt --> sftp --> ack --> status

流程圖原文

開立寫入佇列之後才進入加值中心。換中心從 出站檔 開始看。

3.1 出站檔(對方規格不同就必改)

檔案現在綁死的契約
ar/libraries/PCE_LIB_AR_VacTxtPayload.jsMIG 4.1 中介 TXT:分隔 `@\@\、發票 I/ID、折讓 A/AD、檔名 INVTEXT_{統編}_{YYMMDDHHMMSS}.txt`
ar/libraries/PCE_LIB_AR_VacUploadOutbound.js每一筆主檔一個 INVTEXT 再上傳;同一檔只能一個賣方統編
ar/libraries/PCE_LIB_AR_VacUploadBatch.js批次組檔與出站
PCE 銷項欄位對照 — MIG 4.1 中介文字檔主檔/明細對到 MIG 欄位。欄位本身可留,對照表要依新規格改

主檔與明細欄位是台灣電子發票資料,多半還用得上。變的是匯出格式(TXT、XML 或 API 本文)。

3.2 傳輸(仍是 sFTP 就改設定;換協定就要改程式)

檔案現在
ar/libraries/PCE_LIB_AR_VacSftpClient.jsN/sftp:主機、埠、HostKey、passwordGuid、上傳/ACK/已處理目錄
ar/mapreduce/PCE_MR_AR_VacUploadIssue.js開立上傳排程
ar/mapreduce/PCE_MR_AR_VacUploadVoid.js作廢上傳排程
ar/mapreduce/PCE_MR_AR_VacAckPoll.js從 ACK 目錄抓回覆
common/PCE_LIB_ModuleSettings.js預設主機 sftp.einvoice.com.tw/sftp-t.einvoice.com.tw、使用者 53530703
PCE_SL_InstallLookupData.js正式區/測試區種子寫入上述主機與使用者。HostKey 安裝後為空白
common/PCE_SL_SFTP_Connections.js建置用:產生 GUID、抓 Host Key、試連

模組設定欄位(主機、使用者、埠、HostKey、上傳/ACK/已處理目錄、三支 GUID、啟用)在 customrecord_pce_module_sys_setting。對方仍用 sFTP 時,這些欄位可沿用,種子與說明要改成新主機。啟用時必填的是三支 GUID 與 HostKey,這條規則是為現行 sFTP 寫的。

3.3 回覆(幾乎一定要改)

檔案現在綁死的契約
ar/libraries/PCE_LIB_AR_VacAckParser.js只認檔名 ACK*、XML 標籤 StatusCode/StatusDesc/FileName。同一個檔內每個 ElcInvData 各回寫一筆。S0002 略過、C 成功、E9001/E9002/E9003 失敗
ar/libraries/PCE_LIB_AR_VacAckApply.js把解析結果寫回上傳狀態與錯誤訊息
ar/libraries/PCE_LIB_AR_VacAckIdempotency.js同一 ACK 不重複套用
docs/reference/汎宇ACK回覆檔案說明.pdf汎宇文件,不能當另一家的規格

新中心若回 JSON、Email 或另一種 XML,解析與套用要重寫。成功/失敗仍應落在既有上傳狀態,監控頁才不用重做。

3.4 診斷與測試(契約一變就要重跑)

檔案用途
ar/libraries/PCE_LIB_AR_VacUploadSmoke.js、ar/suitelets/PCE_SL_AR_VacUploadSmoke.js連線、GUID、HostKey、目錄是否就緒。不在 Portal 側欄
test/ar-vac-*.js、docs/samples/vac-sftp/對照現行 TXT/ACK 範例

4. 換之前先問對方

  1. 出站檔是不是 MIG 4.1 中介 TXT(INVTEXT、@|@|)?不是的話,PCE_LIB_AR_VacTxtPayload.js 要換。
  2. 傳輸是不是 sFTP?不是的話,PCE_LIB_AR_VacSftpClient.js 與三支 GUID 不適用。
  3. 回覆檔長什麼樣、成功與失敗的代碼是什麼?對照 PCE_LIB_AR_VacAckParser.js。
  4. 檔名、目錄、一個檔能否混多家賣方統編?現在同一 INVTEXT 不可混統編。
  5. 開立與作廢是不是兩次上傳、各等一次回覆?現在是兩支 MR 加一支 ACK 輪詢。
  6. 正式區與測試區的主機、帳號、目錄是否分開?現在種子各一筆。

5. 相關文件