---
# System prepended metadata

title: 點子數位 - 電子發票導入
tags: [Draft, MIS, 需求]

---

# 點子數位 - 電子發票導入概念驗證(POC)

參考文件：[財政部北區國稅局導入電子發票模式自我評估](https://www.ntbna.gov.tw/download/163de82cc8d00000e426127ad0b70c2f)

## 導入模式

依自我評估 P.5 之圖，導入分為不需要內部整合及需要內部整合二類。其下又分為：

1. 不需內部整合
  - 大平台 WEB 系統開立模式：適用規模較小、量少、月結彙開、不需要與內部系統整合。
  - 系統外包開立模式

2. 需要內部整合 

### 不需要內部整合 

需要與內部整合，又可區分為以下二種：

1. 高穩私模式
2. 低隱私模式 (***暫定採用此模式***)

```graphviz
digraph {
rankdir=LR;
營業人 -> 開立發票系統[label="開立發票"]
    開立發票系統 -> 易發票[label="API 呼叫"];
    易發票 -> "大平台" 
}
```

### 


## 銷售單建立作業 
```graphviz
digraph {
  銷售作業 -> 開立發票[label="API 呼叫"];
  開立發票 -> 取得發票資訊[label="API 回覆"];
  取得發票資訊 -> 建立銷售單;
  取得發票資訊 -> 取得發票PDF[label="API 呼叫"];
  取得發票PDF -> 呼叫列印代理[label="本地 API 呼叫"];
}
```
## 發票重印 
```graphviz
digraph {
  
}
```

### 發票生命週期
```graphviz
digraph {
  開立 -> { 註銷重開, 折讓, 作廢 }
}
```
開立 
作廢
折讓


## 開發進度

### 測試 API 界接
- [x] 登入測試 API 取得 AccessToken，回應如下，其中 validTo 為 token 有效時間為60天。
```json 
{
  "code": 0,
  "message": "Ok",
  "value": {
    "accName": "A50852742",
    "dspName": null
  },
  "token": {
    "token": "9bb58eaaf0b0d8c59b2e96951f641d0c12035746002cabbc",
    "validTo": 1710510536656
  }
}
```
- [x] 將 token 存入供未來備用，目前放在 /var/app/syu3c/mis/invoice_poc
```php 
$token_file = ./tmp/token.json
```

- [x] 測試取得指定週期的發票清單。
```json 
// 測試名稱：取得 202401 期的已開立的發票資料
// URL is https://tryapi.ezreceipt.cc/eInvoice/invoice/list
// STATUS 200
// BODY 
{
    "code": 0,
    "message": "Ok",
    "value": {
        "list": [
            {
                "invID": 21555,
                "invNo": "AA10000000",
                "invType": 7,
                "soID": 51442,
                "orderNo": "ID2024011500022",
                "salesAmount": 1504,
                "taxAmount": 75,
                "taxType": 1,
                "taxRate": 0.05,
                "msgType": 0,
                "invoiceTime": "2024-01-15 20:05:00",
                "lotStatus": -10,
                "carrierType": 10,
                "carrierInfo": "",
                "charity": null,
                "cdc4": null,
                "notifyEmail": null,
                "remarks": "",
                "uploadCode": null,
                "procState": 11,
                "allowance": [],
                "prodList": [
                    {
                        "title": "iPhone 8 64G 黑",
                        "qty": 1
                    }
                ]
            }
        ],
        "entries": 1
    }
}
```

### 單獨列印發票 POC

> 取得發票不是以發票號碼，而是以 invID

- [x] 取得發票 PDF 檔。
  - 樣本網頁： https://dev.idea3c.com.tw/pg/invoice/proof/2
- [x] 列印發票測試，
```graphviz
digraph {
  rankdir=LR;
  取得發票PDF -> 主機暫存 -> 呼叫列印代理 -> 抓取暫存PDF -> "進行列印(lq)"
}
```
發票列印代理指令：
```shell
lp -o media=Custom.57x90mm -o PaperType=Continue 1.pdf
```

### 開立發票 POC
- [ ] 測試開立發票(純 API 測試，未與流程整合)
- [ ] 測試開立發票後、透過標籤機列印發票。
  - [ ] 設計發票列印代理。
  - [ ] 
```
開立發票
```