為什麼我們要自主開發這個模組?
市售 ERP 的電子發票模組有很多問題:
- 昂貴:每年要額外付費 2-5 萬元
- 封閉:無法客製調整,只能等原廠更新
- 不符合台灣需求:國外 ERP 的電子發票功能在台灣根本不能用
- 整合差:發票和 ERP 核心流程是割裂的
我們開發這個模組的初衷很簡單:讓台灣中小企業能夠用免費、開源、完全符合財政部規範的方式處理電子發票。
核心特色:
- ✅ 完全自主開發:源碼公開,可自由修改
- ✅ 符合 MIG 4.1 規範:100% 符合財政部最新規範
- ✅ 整合 Dolibarr:發票資料直接從 ERP 訂單產生
- ✅ 無額外費用:開源免費,沒有年費、張數費
模組功能概覽
| 功能 | 說明 | MIG 格式 |
|---|---|---|
| 銷售發票開立 | 從訂單/出貨單自動產生電子發票 | C0401 |
| 銷售發票作廢 | 發票開立錯誤時進行作廢 | C0401 + C0501 |
| 折讓單開立 | 部分退貨或折讓時使用 | D0401 |
| 批次匯出 ZIP | 大量發票批次產生 XML 並壓縮 | C0401/D0401/C0501 |
| 單張下載 XML | 單一發票即時下載 | 依類型 |
| 發票狀態追蹤 | 開立、已上傳、作廢等狀態管理 | 內部狀態 |
| 發票查詢報表 | 依日期、客戶、狀態篩選查詢 | - |
安裝與設定
系統需求
- Dolibarr V22 或以上版本
- PHP 7.4 或以上
- 啟用 PHP XML 擴展
- 台灣公司統一編號(開立電子發票必要)
安裝步驟
步驟 1:下載並安裝模組
將 taiwaneinvoice 資料夾放置於:
[你的 Dolibarr 路徑]/custom/taiwaneinvoice/
步驟 2:啟用模組
- 登入 Dolibarr 管理員帳號
- 進入「首頁 → 設定 → 模組/應用程式」
- 找到「璦閣-臺灣電子發票模組」並啟用
步驟 3:基本設定
進入「電子發票設定」頁面(custom/taiwaneinvoice/setup.php):
| 設定項目 | 說明 | 範例 |
|---|---|---|
| 發票類型 | 預設開立的發票類型 | 一般稅額計算(02) |
| 捐贈標記 | 是否為捐贈發票 | 否(0) |
| 載具類型 | 預設載具(如手機條碼) | 一般紙本(0) |
| 公司統編 | 開立發票的公司統一編號 | 12345678 |
使用方法
情境一:從訂單開立電子發票
Step 1:建立標準發票
- 進入「帳務 → 客戶發票」
- 點擊「建立發票」
- 選擇客戶、填入商品明細
- 關鍵:在發票備註欄填入買方統一編號(如有)
- 確認無誤後「建立草稿」
Step 2:產生電子發票 XML
- 在發票卡片頁面,找到「電子發票」區塊
- 點擊「產生 C0401 XML」按鈕
- 系統會自動:
- 檢查發票資料完整性
- 驗證統編格式
- 產生符合 MIG 4.1 的 XML 檔案
Step 3:下載並上傳
- 點擊「下載 XML」
- 登入財政部電子發票整合服務平台
- 上傳 XML 檔案
- 發票狀態自動更新為「已上傳」
情境二:批次處理大量發票
適合月底一次處理整月發票:
- 進入「電子發票管理」頁面(
manage_invoice.php) - 選擇日期範圍(如 2026/04/01 ~ 2026/04/30)
- 系統列出該期間所有未產生電子發票的發票
- 勾選要處理的發票(或全選)
- 點擊「批次產生 ZIP」
- 下載 ZIP 檔,內含所有 C0401 XML
批次處理優勢:
- 一次上傳到財政部平台,節省時間
- ZIP 內檔案依發票號碼命名,容易對照
- 自動跳過已作廢或已開立的發票
情境三:發票作廢
當發票開立錯誤需要作廢時:
- 進入原發票卡片
- 點擊「產生 C0501 作廢 XML」
- 系統會:
- 檢查原發票是否已上傳財政部(未上傳可直接刪除)
- 產生 C0501 作廢 XML
- 標記原發票為「待作廢」狀態
- 上傳 C0501 XML 到財政部平台
- 確認作廢成功後,系統自動更新狀態
情境四:折讓單開立
當客戶部分退貨需要折讓時:
- 進入「電子折讓單管理」(
manage_allowance.php) - 點擊「建立折讓單」
- 選擇原發票
- 填入折讓明細(品名、數量、金額)
- 產生 D0401 折讓單 XML
- 上傳財政部平台並通知客戶確認
MIG 4.1 規範完整支援
什麼是 MIG 4.1?
MIG(Message Implementation Guide)是財政部定義的電子發票資料交換標準。4.1 版是目前最新版本,規範了:
- XML 檔案結構
- 欄位格式與長度
- 驗證規則
- 傳輸協定
我們的實現方式
1. XML 產生核心(lib/taiwaneinvoice_xml.lib.php)
// 範例:C0401 銷售發票 XML 結構
$xml = generateC0401XML($invoice_data);
// 自動處理:
// - 發票基本資料(發票號碼、日期、買賣方統編)
// - 商品明細(品名、數量、單價、金額、稅額)
// - 總計資訊(未稅金額、稅額、總計)
// - 驗證碼計算
2. 資料驗證機制
- 統一編號格式檢查(8 碼數字,含檢查碼)
- 發票號碼格式(2 碼英文 + 8 碼數字)
- 金額計算驗證(未稅 × 稅率 = 稅額)
- 必填欄位檢查
3. 完整 XML 範例結構
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:GEINV:eInvoiceMessage:C0401:3.2">
<Main>
<InvoiceNumber>AB-12345678</InvoiceNumber>
<InvoiceDate>20260501</InvoiceDate>
<InvoiceTime>143000</InvoiceTime>
<Seller>
<Identifier>12345678</Identifier>
<Name>璦閣數位科技有限公司</Name>
</Seller>
<Buyer>
<Identifier>87654321</Identifier>
<Name>範例科技股份有限公司</Name>
</Buyer>
<InvoiceType>07</InvoiceType>
<DonateMark>0</DonateMark>
<PrintMark>Y</PrintMark>
</Main>
<Details>
<ProductItem>
<Description>ERP 軟體授權</Description>
<Quantity>1</Quantity>
<UnitPrice>50000</UnitPrice>
<Amount>50000</Amount>
<TaxType>1</TaxType>
</ProductItem>
</Details>
<Amount>
<SalesAmount>50000</SalesAmount>
<TaxType>1</TaxType>
<TaxRate>0.05</TaxRate>
<TaxAmount>2500</TaxAmount>
<TotalAmount>52500</TotalAmount>
</Amount>
</Invoice>
技術架構說明
檔案結構
taiwaneinvoice/
├── core/
│ ├── modules/
│ │ └── modTaiwanEInvoice.class.php # 模組定義
│ └── triggers/
│ └── interface_500_modTaiwanEInvoice_TaiwanEInvoiceTriggers.class.php
├── class/
│ └── actions_taiwaneinvoice.class.php # 動作處理
├── lib/
│ └── taiwaneinvoice_xml.lib.php # XML 產生核心
├── sql/
│ └── llx_taiwaneinvoice_data.sql # 資料表結構
├── manage_invoice.php # 發票管理頁面
├── manage_allowance.php # 折讓單管理
├── setup.php # 設定頁面
└── README.md
資料庫結構
模組建立以下資料表:
-- 電子發票附加資料表
CREATE TABLE llx_taiwaneinvoice_data (
rowid INT AUTO_INCREMENT PRIMARY KEY,
fk_object INT NOT NULL, -- 關聯發票 ID
einvoice_type VARCHAR(10), -- C0401, D0401, C0501
status INT DEFAULT 0, -- 0=待開立, 1=已開立, 2=作廢
einvoice_number VARCHAR(20), -- 電子發票號碼
track_code VARCHAR(10), -- 發票追蹤碼
upload_date DATETIME, -- 上傳日期
xml_content TEXT -- XML 內容備份
);
觸發器機制(Triggers)
模組透過 Dolibarr 的觸發器系統,在以下事件自動執行:
INVOICE_CREATE:發票建立時,初始化電子發票記錄INVOICE_MODIFY:發票修改時,檢查是否影響電子發票INVOICE_DELETE:發票刪除時,清理相關電子發票資料INVOICE_VALIDATE:發票確認時,允許產生電子發票
常見問題 FAQ
Q1:這個模組真的可以免費使用嗎?
是的。這是我們自主開發並以 GPL-3 授權公開的模組,任何人都可以:
- 免費下載使用
- 自由修改客製
- 用於商業用途
但請注意:電子發票上傳財政部平台,財政部不會收取費用(不像第三方平台會收張數費)。
Q2:和第三方電子發票平台有什麼不同?
| 比較項目 | 第三方平台 | 我們的模組 |
|---|---|---|
| 費用 | 每月 500-3000 元(依張數) | 免費 |
| 整合度 | 需手動匯入/匯出 | 與 Dolibarr 無縫整合 |
| 客製化 | 無法調整 | 開源碼可自由修改 |
| 資料安全 | 資料在第三方伺服器 | 資料在自己的伺服器 |
| 統編驗證 | 不一定有 | 即時驗證 |
Q3:發票 XML 上傳財政部失敗怎麼辦?
常見原因與解決:
-
統編格式錯誤
- 檢查買方統編是否為 8 碼數字
- 模組會自動驗證並提示
-
發票號碼重複
- 檢查是否已開立過此發票
- 查詢財政部平台確認
-
XML 格式錯誤
- 下載 XML 後用財政部驗證工具檢查
- 聯絡我們協助除錯
Q4:可以產生 B2C 發票嗎?
可以。支援以下類型:
- B2B 發票(買方有統編):一般稅額計算(07)
- B2C 發票(買方無統編):特種稅額(08)
- 零稅率發票:零稅率(01)
- 免稅發票:免稅(02)
在發票設定或個別發票可選擇稅率類型。
Q5:發票開立後可以修改嗎?
電子發票一旦上傳財政部,不能修改內容(這是財政部規定)。
如果發現錯誤:
- 未上傳前:可刪除重開
- 已上傳後:必須作廢後重新開立
模組會在產生 XML 前再次確認資料,減少錯誤機會。
客製化與進階功能
API 介面
模組提供以下內部函數供客製開發:
// 產生 C0401 XML
$result = generateC0401XML($invoice_id, $options);
// 產生 C0501 作廢 XML
$result = generateC0501XML($original_invoice_id, $reason);
// 產生 D0401 折讓 XML
$result = generateD0401XML($allowance_data);
// 驗證統一編號
$isValid = validateGUINumber('12345678');
// 取得發票狀態
$status = getEInvoiceStatus($invoice_id);
工作流程自動化
可搭配 Dolibarr 的工作流程模組:
- 出貨自動開票:出貨單確認時自動產生發票草稿
- 付款自動上傳:收到款項後自動批次上傳發票
- 定期作廢檢查:每日檢查是否有待作廢發票需處理
下一步?
需要我們協助導入這個模組?
我們提供:
- 模組安裝與設定
- 財政部平台帳號申請指導
- 員工教育訓練
- 客製化調整(如特殊報表、API 整合)
完全免費諮詢,沒有推銷壓力。
P.S. 這個模組是我們團隊自主開發的成果,完全符合台灣財政部規範。我們相信:台灣企業應該要有真正適合自己的工具,而不是被國外軟體或第三方平台綁架。
版本資訊: V1.0.1 | 開發公司: 璦閣數位科技 | 授權: GPL-3