綠界電子發票串接實務:開立時機、作廢規則與折讓流程的三個關鍵決策
串接綠界的電子發票 API 在技術上並不複雜——呼叫開立 API、傳入發票資訊、收到回應就完成了。但電子發票真正的挑戰不在技術,而在業務邏輯的設計。錯誤的開立時機、錯誤的作廢操作、錯誤的折讓流程,都可能讓你在營業稅申報時面臨麻煩。
第一個關鍵決策:發票應該在什麼時候開立?最常見的做法是「付款成功時立即開立」,但這不一定是最佳選擇。如果你的商品需要出貨,而出貨後才發現缺貨需要退款,你就必須作廢已開立的發票。更穩健的做法是將發票開立的時機延後到「確認出貨」或「訂單完成」時。這樣可以大幅減少因取消訂單而需要作廢發票的情況。不過要注意,根據統一發票使用辦法,發票應在「交易完成時」開立,如果你延後太久可能會有合規風險。實務上,在付款成功後 24 小時內開立是一個常見且安全的做法。
第二個關鍵決策:什麼時候用作廢,什麼時候用折讓?簡單來說,「作廢」是讓整張發票失效,適用於全額退款或發票資訊錯誤(例如統編打錯)的情境。「折讓」則是部分金額的抵減,適用於部分退款的情境。但作廢有嚴格的時間限制:每年奇數月的 13 日 23:59:59 之後,已申報至財政部的發票就無法再作廢。例如,一張 3 月 1 日開立的發票,在 5 月 13 日之後就不能作廢了,此時只能用折讓來處理。這代表你的退款流程必須考慮時間因素:如果退款發生在申報期限內,優先使用作廢;如果已超過期限,就必須改用折讓。
第三個關鍵決策:折讓的發動方式。根據財政部電子發票 MIG 規定,B2B(公司對公司)的折讓只能由賣方發動。在綠界的 API 中,你需要呼叫「開立折讓發票」API 來建立折讓單,折讓單會被上傳至財政部電子發票整合服務平台。如果折讓後又需要取消(例如折讓金額算錯),你可以呼叫「作廢折讓發票確認」API 來作廢折讓單——但同樣受限於申報期限。
實作建議如下。在資料庫中為每筆訂單維護一個 invoice_status 欄位,記錄發票的生命週期狀態:未開立、已開立、已作廢、已折讓。在退款流程中,程式應自動判斷該筆發票是否仍在可作廢期限內,決定使用作廢或折讓。同時,將每一次發票操作(開立、作廢、折讓、折讓作廢)寫入獨立的 log 表,包含呼叫時間、API 回應和操作人員。這些紀錄在稅務查核時是你的護身符。
最後提醒一個容易被忽略的細節:綠界測試環境的電子發票連接的是財政部的 Stage 系統,這個系統並不穩定,經常會出現上傳失敗的情況。如果你在測試時遇到發票開立失敗,先確認是不是財政部 Stage 系統的問題,再排查自己的程式。