MPOS開發SPEC
===
[toc]
---
# 裝置啟用
[參考文件](https://hackmd.io/d0AyPmyRRlCCQXKRgB5jlg)
# 登入
## 流程

| api | description |
|:--------------------------------------------------------------------------------------------------------------- |:----------- |
| [Login](https://hackmd.io/VivUv2sHQgSFlcO2hf72kg?view#POST-employeelogin-%E7%99%BB%E5%85%A5-%E6%9C%89%E7%B4%80%E9%8C%84) | 登入 |
| [settlement](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-employeesettlement) | 日結 |
## 畫面說明

| name | element type | description |
| ---- |:------------ |:----------- |
| 薪號 | input | 6碼數字 |
| 密碼 | input | 4碼數字 |
| 登入 | button | |

| name | element type | description |
| ------ |:------------ |:-------------------------- |
| 店號 | text | |
| 機號 | text | |
| 營業日 | text | 顯示未日結的營業日(非今日) |
| 確認 | button | |
| 取消 | button | |
## 操作說明
1. 輸入登入帳號密碼
2. call api login
3. 處理api回傳結果
4. 登入成功進入系統
5. 登入失敗依error message判斷是否進入其它操作
6. error message=未日結,顯示日結dialog並以目前登入者當作日結人員
# 系統Layout
## 畫面說明

1. [功能Menu](https://hackmd.io/BiHIrctyThuW_vfeaUj8bA#%E5%8A%9F%E8%83%BDMenu)
2. 功能View
3. Info:放入簡單且必要的資訊
4. [系統功能](https://hackmd.io/BiHIrctyThuW_vfeaUj8bA?both#%E7%B3%BB%E7%B5%B1%E5%8A%9F%E8%83%BD): 交班(登出)、畫面鎖定
# 系統功能

## 鎖定
### 流程

| api | description |
|:------------------------------------------------------------------------------------------------------------- | ----------- |
| [auth](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-employeeauth-%E9%A9%97%E8%AD%89-%E7%84%A1%E7%B4%80%E9%8C%84) | 登入帳密驗證 |
### 畫面說明

| name | element type | description |
|:-------- |:------------ |:-------------------- |
| 姓名 | text | 目前登入使用者 |
| 密碼 | input | 4碼數字(POS登入密碼) |
| 清除 | button | 快速清除input |
| 解除鎖定 | button | |
### 操作說明
1. 按下鎖定
2. 在原操作畫面上加上遮蔽,並顯示解除鎖定Dialog
3. Dialog無法使用解除鎖定以外的方式關閉(Dialog關閉按鈕、按Dialog外的畫面)
4. 解除鎖定密碼為POS登入密碼
5. 解除鎖定的驗證透過api auth
6. 解除鎖定需回到鎖定前的畫面且保留資料
---
## 交班
### 流程
```plantuml
@startuml
|front|
:交班;
|#AntiqueWhite|api|
:logout;
|front|
:回登入畫面;
@enduml
```
| api | description |
| -------- | -------- |
| [logout](https://hackmd.io/@chhuang/Hkc1A9Ilw#%E4%BA%A4%E7%8F%AD) | user登出 |
---
# Menu功能
## POS
### 銷貨
#### 流程

:::info
**相關流程說明**
[分期](#分期)
[選擇售貨員](#售貨員)
[統一編號](#統一編號)
[會員](#會員)
[輸入商品](#商品輸入)
[促銷](#促銷)
[發票](#發票)
[結帳](#結帳)
:::
| api | description |
|:---------------------------------------------------------------------------------------------- |:------------------------------------ |
| [currentSerial](https://hackmd.io/@chhuang/Hkc1A9Ilw#GET-transactioncurrentSerialtermNotermNo) | 依POS機號取序號 |
| [invocie](https://hackmd.io/@chhuang/Hkc1A9Ilw#%E7%99%BC%E7%A5%A8%E8%99%9F%E7%A2%BC) | 依POS機號取發票號 |
| [CreditCardCancel](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-prcancel) | 信用卡取消授權 |
| [useFB](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-memberuseFB) | 產生還原金使用紀錄,退款金額使用負值 |
#### 畫面說明

| 編號 | 說明連結 |
|:---- |:----------------------- |
| 1 | [分期](#分期) |
| 2 | [選擇售貨員](#售貨員) |
| 3 | [統一編號](#統一編號) |
| 4 | [會員](#會員) |
| 5 | [新增商品](#商品輸入) |
| 6 | [商品快捷列](#商品輸入) |
| 7 | [促銷](#促銷) |
| 8 | [發票](#發票) |
| 9 | [結帳](#結帳) |
---
### 配達
#### 流程
```plantuml
@startuml
start
:配達;
:選擇配達功能;
fork
#LightSkyBlue:配達啟單;
fork again
#LightSkyBlue:配達結帳;
end fork
stop
@enduml
```

---
### 配達起單
#### 流程
:::info
流程同[銷貨](#銷貨)
:::
#### 畫面說明

#### 操作說明
1. 自動帶入配達單號(店號3碼開頭)
2. 付款別會多出賒帳
---
### 配達結帳
#### 流程

#### 畫面說明

| name | element type | description |
|:-------- |:------------ |:-------------------- |
| 配達單號 | number | 長度必為13 |
##### 操作說明
1. 輸入配達單號,會檢查是否符合店號
2. 單號錯誤會回傳錯誤訊息
3. 自動帶入單號的購物車資訊
4. 帶出的商品資訊皆不可修改
---
### FoodPanda
使用ParaStore流程紀錄FoodPanda單號
#### 流程
```plantuml
@startuml
start
:自動帶入FoodPanda會員;
:自動帶入FoodPanda貨號;
#LightSkyBlue:序號管理;
:輸入FoodPanda訂單號;
if (單號檢查是否符合規則?) then (YES)
else(NO)
:顯示錯誤訊息;
:停留原畫面;
end
endif
#LightSkyBlue:銷售;
stop
@enduml
```
:::info
* 訂單號規則:XXXX-XXXX
* 結帳付款別只有賒帳
:::
#### 畫面說明


::: info
1. 自動帶入foodpanda貨號(215840)
2. 自動帶入foodpanda會員編號(2990779789962)
3. 商品輸入觸發[ParaStore](#序號管理)
:::

::: info
訂單規則:XXXX-XXXX
訂單編號長度為9碼且第五碼是"-"
:::


---
### 維修
#### 流程

| api | description |
| -------------------------------------------------------------------------------- |:-------------- |
| [repair](https://hackmd.io/@chhuang/Hkc1A9Ilw#GET-repairrepairNo) | 維修單狀態 |
#### 畫面說明



| name | element type | description |
|:-------- |:------------ |:-------------------- |
| 單號 | number | 長度必為13 |
#### 操作說明
1. 輸入維修單號,長度限制13碼純數字
2. 如查詢不到,則會再次詢問是否正確
3. 選擇右邊的商品加入購物車
4. 商品金額由維修單為準不考慮原商品價格
5. 每次只能選擇一個商品
---
### 代收
#### 流程

| api | description |
| -------------------------------------------------------------------------------- |:-------------- |
| [collect](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#GET-collectbar1bar1ampbar2bar2ampbar3bar3) | 代收資訊 |
#### 畫面說明

| name | element type | description |
|:-------- |:------------ |:-------------------- |
| 第一段 | text | 無限制長度 字母為大寫 |
| 第二段 | text | 無限制長度 |
| 第三段 | text | 無限制長度 |
#### 操作說明
1. 輸入三段條碼 皆不可為空值
2. 如有錯誤,根據頁面顯示訊息調整輸入代碼
3. 如檢核過會自動加入購物車
---
### 退貨
#### 流程

| api | description |
| -------------------------------------------------------------------------------- |:-------------- |
| [checkvoid](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#GET-transactioncheckvoidtermNoserialNo) | 取得交易資料 |
| [void](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#POST-transactionvoid) | 確認銷退 |
| [useFB](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#POST-memberuseFB) | 退還還元金 |
#### 畫面說明



#### 操作說明
1. 輸入交易序號(僅限本機台結帳及當日結帳)
2. 秀出該筆序號的交易資料
3. 選擇退貨原因
4. 完成退貨
---
### 列印
#### 流程
```plantuml
@startuml
|front|
|#AntiqueWhite|api|
:so;
|front|
:列出期限內配達單;
:可利用單號模糊查詢;
#palegreen:秀出配達單資訊;
:選擇列印;
@enduml
```
#### 畫面說明



#### 操作說明
1. 自動列出可重印單據(期限內及)
2. 如有錯誤,根據頁面顯示訊息調整輸入代碼
3. 如檢核過會自動加入購物車
| api | description |
| -------------------------------------------------------------------------------- |:-------------- |
| [reprint](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#POST-transactionsoreprint) | 重印單據 |
| [so](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#GET-transactionso) | 單日未結單據 |
---
## 查價
### 流程

### 畫面說明


| name | element type | description |
|:-------- |:------------ |:-------------------- |
| 貨號/國際碼/店內碼 | number | |
---
## 讀帳/日結
### 流程
```plantuml
@startuml
|front|
start
|#AntiqueWhite|api|
:dailyAccount;
|front|
:顯示當日結帳資料;
stop
@enduml
```
### 畫面說明

---
# 共用元件
## 售貨員
### 流程
```plantuml
@startuml
|front|
:開啟售貨員輸入;
:取回SC員工列表;
note left
SC只有該店員工資料
end note
|api|
:userList;
|front|
:輸入員工編號;
if(有此員工?) then(yes)
else(no)
end
endif
:關閉輸入;
stop
@enduml
```
### 畫面說明


---
## 統一編號
### 流程
```plantuml
@startuml
:開啟統編輸入;
:檢查輸入統編;
if(總公司統編?) then(yes)
:不可輸入總公司統編;
end
else(no)
if(符合統編規則?) then(yes)
else(no)
if(詢問是否使用此統編?) then(yes)
if(確定使用?) then(yes)
else(no)
end
endif
else(no)
endif
endif
endif
:關閉輸入;
stop
@enduml
```
### 畫面說明


---
## 會員
### 流程
#### Login

| api | description |
| -------------------------------------------------------------------------------- |:-------------- |
| [member](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#POST-member) | 查詢會員 |
### 畫面說明


### 操作說明
1. 輸入會員號碼8or13碼或是可以使用手機及身分字號及市話
2. 如符合規則但查無資料則會顯示離線認證
3. 查詢後回傳會員資料,包含還元金
---
## 商品輸入
### 流程
```plantuml
@startuml
|front|
start
:\n{{\n salt \n{+\n"貨號/國際碼/店內碼" | [ 清除 ] \n[ 確定 ]}\n}}\n;
:輸入商品;
|#AntiqueWhite|api|
:product;
|front|
:ParaStore;
:促銷;
note: 非滿額促銷
:加進購物車;
stop
@enduml
```
| api | description |
| -------------------------------------------------------------------------------- |:-------------- |
| [product](https://hackmd.io/@chhuang/Hkc1A9Ilw#GET-productpromotionpluNobarcode) | 商品檔包含促銷 |
### 畫面說明

**component type: drawer**
---
## AMG
### 流程
```plantuml
@startuml
|front|
start
#lightblue:輸入商品;
if(商品可加購AMG?) then(yes)
:點選AMG圖示加購;
:選擇欲加購合約;
:\n{{\n salt \n{+\n 有賞條碼 |" input " | [ 清除 ] \n[ 確定 ]}\n}}\n;
if(檢查是否有輸入或重複) then(yes)
else(no)
:畫面停留;
end
endif
|front|
:callback;
else(no)
endif
stop
@enduml
```
:::: info
會員才可加購AMG
::::
> API參考:[Product](https://hackmd.io/c2D649hCTuW0DV2J8ntrIw?view#GET-productpluNobarcode)(property: warranty)
### 畫面說明




#### 操作說明
1. 需在有輸入會員卡號狀態才會顯示AMG
2. 點選AMG圖示會跳出該商品可加購AMG(綠色為可加購)
3. 加購商品已合約上的價格為主,不考慮原商品價格
4. 選擇後須輸入有賞條碼(必填)(同筆訂單內部可有相同條碼)
5. 如果刪除主商品AMG商品會一併刪除
6. 可加購數量不可超過主商品
---
## 序號管理
### 流程

| api | description |
|:-------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| [checkSeq](https://hackmd.io/@chhuang/Hkc1A9Ilw#%E5%BA%8F%E8%99%9F%E7%AE%A1%E7%90%86-%E6%AA%A2%E6%9F%A5%E5%95%86%E5%93%81%E5%BA%8F%E8%99%9F) | 檢查商品序號 |
### 畫面說明

**component type:dialog**
| name | element type | description |
|:---------- |:------------ |:------------ |
| RenderWord | text | 輸入欄位描述 |
| input | input | 輸入欄位 |
| 清除 | button | |
| 確認 | button | |
---
## 促銷
### 促銷組合邏輯

### 資料結構

### 流程
#### 一般促銷

#### 滿額促銷

### 畫面說明
#### 一般促銷


#### 滿額促銷


---
## 變價
### 流程

| api | description |
| ----------------------------------------------------------------------------------------------------------- |:----------- |
| [barginReason](https://hackmd.io/@chhuang/Hkc1A9Ilw#%E9%80%80%E8%B2%A8%E8%AE%8A%E5%83%B9%E5%8E%9F%E5%9B%A0) | 變價資料 |
* 可變價條件:
1. 非組合促銷加購商品
2. 未變價
3. 非促銷商品
4. 特價商品可變價
* 價格檢查:
1. 變價最低價格計算依據變價選項
2. 競爭廠商變價以輸入的廠商售價-1為最低變價價格
### 畫面說明
**變價價格輸入**

| name | element type | description |
| -------- |:------------ |:----------- |
| 輸入價格 | input | 數字 |
| 確認 | button | |
**權限驗證**

| name | element type | description |
| -------- |:------------ |:----------- |
| 輸入價格 | input | fixed |
| 店長帳號 | input | POS登入帳號 |
| 店長密碼 | input | POS登入密碼 |
**選擇變價原因**


| name | element type | description |
| -------- |:------------ |:----------- |
| 輸入價格 | input | fixed |
| 變價原因 | select | |
**競爭變價**


| name | element type | description |
| -------- |:------------ |:----------- |
| 輸入價格 | input | fixed |
| 變價原因 | select | |
| 競爭廠商 | select | |
| 廠商價格 | input | |
---
## 付款
### 流程

### 畫面說明

### 還元金
#### 流程

#### 畫面說明

### 信用卡
Ref:
[MPOS信用卡](https://hackmd.io/Ua-MJJcGQXqLGMf1ZaERdg)
#### 流程

| api | description |
|:------------------------------------------------------------------------------------------------------------------------------------------ |:------------ |
| [bankList](https://hackmd.io/@chhuang/Hkc1A9Ilw#GET-installment) | 銀行列表 |
| [installment](https://hackmd.io/@chhuang/Hkc1A9Ilw#%E5%88%86%E6%9C%9F---%E9%8A%80%E8%A1%8C%E5%88%86%E6%9C%9F%E8%A8%AD%E5%AE%9A) | 銀行分期設定 |
| [creditCardIssuer](https://hackmd.io/@chhuang/Hkc1A9Ilw#%E6%9F%A5%E8%A9%A2%E4%BF%A1%E7%94%A8%E5%8D%A1%E6%89%80%E5%B1%AC%E9%8A%80%E8%A1%8C) | 發卡行查詢 |
| [payment](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-prpayment) | 請求授權 |
| [query](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-prquery) | 交易查詢 |
#### 畫面說明
##### 一次付清


#### 分期


#### 3D驗證



---
## 結帳
### 流程
* [付款](#付款)

| api | description |
| ---------------------------------------------------------------------------------- |:-------------- |
| [useWishFB](https://hackmd.io/@chhuang/Hkc1A9Ilw#POST-memberuseWishFB) | 還元金扣款 |
| [transaction](https://hackmd.io/@chhuang/Hkc1A9Ilw#Transaction-%E4%BA%A4%E6%98%93) | SC寫入交易資料 |
---
## 發票
### 流程

### 畫面說明
**捐贈發票**

| name | element type | description |
| -------- |:------------ |:----------- |
| 捐贈碼 | text | |
**列印發票**

| name | element type | description |
| -------- |:------------ |:----------- |
| 護照號碼 | text | |
**手機條碼載具**

| name | element type | description |
| -------- |:------------ |:----------- |
| 載具碼 | text | 必填 |
**自然人憑證**

| name | element type | description |
| -------- |:------------ |:----------- |
| 自然人憑證 | text | 必填 |
---
# 系統LOG
# Ref
> [MPOS使用手冊](https://hackmd.io/0A1CEitXRBOv6NwMrbGyxA#MPOS%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8A)
[MPOS設計](https://hackmd.io/fc0uZaFyQL2LTSKB407v-g#MPOS-modules-amp-views-design)
[MPOS信用卡](https://hackmd.io/Ua-MJJcGQXqLGMf1ZaERdg)
{"metaMigratedAt":"2023-06-15T23:19:01.801Z","metaMigratedFrom":"YAML","title":"MPOS開發SPEC","breaks":true,"contributors":"[{\"id\":\"6b8673ce-8d13-4832-ad5c-65313cb14564\",\"add\":35138,\"del\":13896},{\"id\":\"957c3c55-8933-49b5-a6c4-6a11205d71b3\",\"add\":12816,\"del\":6907}]"}