客人在線上付款時可以直接打賞特定員工 / 主廚, 錢直接進員工個人收款帳戶(LINE Pay / 台灣 Pay)。 老闆有 toggle 設定「直接進員工帳戶 vs 先入餐廳代收」(預設前者,推薦)。 老闆已於 2026-05-25 答完 7 問,Phase 1 可開做。
後續討論補充需求:
| 工具 | 個人能申請? | 限制 |
|---|---|---|
| LINE Pay Money 個人收款 | ✅ 大部分人可 | 需綁 LINE Pay Money 帳號(2025 升級後)+ 實名認證,有單日/單月限額 |
| 台灣 Pay 個人收款 QR | ✅ 有銀行帳戶都可 | 用各銀行 App 開啟「我要收款」,綁本人銀行帳戶,等於是 ATM 轉帳收款 |
| 街口支付 個人收款 | ✅ 個人帳號可 | 月收款額有上限,超過要升商戶 |
| LINE Pay 商戶 / 子商戶 split | ❌ | 需要公司營業登記,個人不行 |
機制:員工綁定 LINE Pay / 台灣 Pay / 街口 個人收款連結, 客人付小費時 ChefsMate 把客人 redirect 到該員工的收款連結 → 錢直接進員工帳戶。 ChefsMate 只做 audit 記錄「誰打了多少給誰」,不經手錢。
| 老闆能拿錢? | ❌ 完全不能(錢從沒進過餐廳系統) |
|---|---|
| 員工幾時收到 | 即時 |
| 技術難度 | ⭐⭐ 中 |
| 法律 / 稅 | 員工自己處理(免稅額內可不報) |
| 限制 | 員工要自己有 LINE Pay Money / 台灣 Pay 收款設定 |
機制:小費跟主餐一起付給餐廳,
ChefsMate 在 staff_tip_balances 表記錄該員工該月應得 N 元,
月底老闆 batch 匯款給員工。
| 老闆能拿錢? | ⚠️ 理論上可以(錢實際進老闆帳戶,系統只 enforce 帳目透明) |
|---|---|
| 員工幾時收到 | 月底 / 看老闆心情 |
| 技術難度 | ⭐⭐⭐ 中高 |
| 適合 | 老闆值得信任 / 員工不想處理稅 / 集團模式 |
機制:用 TapPay 子商戶 split API, 客人付 $1100 → $1000 進老闆,$100 直接打到員工銀行。
| 老闆能拿錢? | ❌ 完全不能 |
|---|---|
| 技術難度 | ⭐⭐⭐⭐ 高 — 員工要簽 TapPay 子商戶合約 |
| 適合 | 連鎖店 / 員工有正職身分 / 規模大才划算 |
老闆 Q6 已答:客人選打賞員工的畫面要顯示所有員工(含老闆), 並讓員工自己在 StaffsMate App 內維護「給客人看的自我介紹 + 頭貼 + 工作崗位 + 職稱」, 避免客人賞錯人 / 認不出來。
老闆視角同步:老闆也是員工的一種(role=owner), 一樣可以在 StaffsMate App 內填這些欄位,並選擇是否要顯示給客人(可不參與打賞)。
進入點 1:結帳完成頁加「為您服務」section
客人桌邊結帳頁
└─ 看到帳單
└─ 帳單下方出現「為您服務 ❤️」section
├─ 服務生 王小明 [打賞]
├─ 主廚 陳大華 [打賞]
└─ (老闆 Q5 已答:不做整桌均分)
點任一「打賞」按鈕:
1. 選金額($100/$200/$500/自填) ← Q3 已拍板
2. (選填)留言鼓勵員工「謝謝,服務很棒」 ← Q4 已拍板
3. 點「確認打賞」
4. ChefsMate redirect → 該員工的 LINE Pay/台灣 Pay 收款連結
5. 客人在該工具完成付款
6. 回到 ChefsMate 顯示「已送出 ❤️」+ 留言會同步到員工 App
7. audit log INSERT 一筆 tip_events
進入點 2:菜單頁加「員工小費」項目
客人桌邊瀏覽菜單
└─ 滑到最底
└─ 「為員工加油」section
├─ 員工卡片 (照片 + 名字 + 工作崗位 + 職稱 + 自我介紹)
│ 點卡片 → 跳金額選擇 → 加入購物車
└─ 主廚卡片 / 老闆卡片(若有開啟)
(作為 cart 內的「項目」,結帳時跟主餐分流)
結帳:
- 主餐金額照 normal flow 結帳(進餐廳)
- 員工小費項目 → ChefsMate 偵測 → redirect 到對應員工連結
★ 進入點 3:桌邊主頁面加「打賞員工」section(老闆 Q1 新增)
客人在桌邊主頁面(用餐中)
└─ 看到 quadrant icons:
├─ 📋 訂單 (查看點過的菜)
├─ 💳 結帳 (準備結帳)
├─ 🛎️ 服務鈴 (呼叫服務)
├─ 🔗 分享這一桌 (傳給其他客人加菜)
└─ ❤️ 打賞員工 ← ★ 新增(Q1)
點「打賞員工」:
1. 進入「選擇打賞對象」頁
- 顯示「所有員工(含老闆)」每張卡片有:
頭貼 + 名字 + 工作崗位 + 職稱 + 自我介紹
- 老闆 Q6 已答:全顯示,讓客人好決定
2. 點員工卡片 → 進入打賞流程(同進入點 1 的步驟 1~7)
-- 員工小費設定
CREATE TABLE staff_tip_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
staff_id UUID NOT NULL REFERENCES staff(id) ON DELETE CASCADE,
restaurant_id UUID NOT NULL,
enabled BOOLEAN NOT NULL DEFAULT FALSE,
payment_tool TEXT, -- 'line_pay' / 'taiwan_pay' / 'jko_pay'
payment_link TEXT, -- 該工具的個人收款連結
qr_code_url TEXT, -- 可選,QR image
display_name TEXT, -- 給客人看的名字
show_in_checkout BOOLEAN DEFAULT TRUE,
show_in_menu BOOLEAN DEFAULT FALSE,
show_in_table_main BOOLEAN DEFAULT TRUE, -- ★ Q1 進入點 3
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- ★ Q6 員工 staff 表擴充(staffsmate App 維護)
ALTER TABLE staff ADD COLUMN customer_intro TEXT; -- 給客人看的自我介紹(最多 100 字)
ALTER TABLE staff ADD COLUMN customer_photo_url TEXT; -- 給客人看的頭貼
ALTER TABLE staff ADD COLUMN job_position TEXT; -- 工作崗位 e.g. 服務生 / 主廚 / 吧台
ALTER TABLE staff ADD COLUMN job_title TEXT; -- 職稱 e.g. 資深主廚 / 店長 / 實習生
ALTER TABLE staff ADD COLUMN show_to_customer BOOLEAN DEFAULT FALSE;
-- 是否在客人選打賞員工頁顯示(老闆也可開,Q6:含老闆)
-- 餐廳級設定
ALTER TABLE restaurant_settings ADD COLUMN tip_system_enabled BOOLEAN DEFAULT FALSE;
ALTER TABLE restaurant_settings ADD COLUMN tip_distribution_mode TEXT DEFAULT 'direct_to_staff';
-- 'direct_to_staff' (方案A 預設) / 'restaurant_collect_then_distribute' (方案B 備援)
ALTER TABLE restaurant_settings ADD COLUMN tip_amount_options JSONB DEFAULT '[100,200,500]';
-- ★ Q3 老闆拍板 100/200/500
-- ★ Q5 不做整桌均分,移除 tip_allow_table_split,不增此 column
-- 打賞事件 audit(不存實際金額,只 client estimate)
CREATE TABLE tip_events (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
restaurant_id UUID NOT NULL,
reservation_id UUID REFERENCES reservations(id),
staff_id UUID NOT NULL REFERENCES staff(id),
customer_phone TEXT,
customer_email TEXT,
estimated_amount INTEGER, -- client 端 estimate(實際進員工帳戶我們不知)
payment_tool TEXT, -- 客人實際選的工具
entry_point TEXT, -- 'checkout' / 'menu' / 'table_main' (Q1 三個進入點)
message TEXT, -- 客人留言(選填,鼓勵員工 Q4)
redirect_url TEXT, -- 我們導出去的 URL(audit 用)
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- RLS:員工只看自己的,老闆只看次數不看金額(Q2 已答)
| Phase | 內容 | 工時 |
|---|---|---|
| 1 | DB schema(staff_tip_settings + tip_events + restaurant_settings 擴充 + staff 表加 4 個欄位) | 1 天 |
| 2 | StaffsMate App 設定 UI(綁 LINE Pay link / 上傳 QR / 自我介紹 / 頭貼 / 工作崗位 / 職稱) | 3 天 +1 天 |
| 3 | 老闆 App 全餐廳開關 + 分潤模式 picker + per-staff 啟用 | 1 天 |
| 4 | 客人結帳完成頁加「為您服務」section + 打賞 button(進入點 1) | 2 天 |
| 5 | 菜單頁「員工小費」項目(進入點 2) | 2 天 |
| 6 | ★ 桌邊主頁面加「打賞員工」icon + 員工選擇頁(進入點 3,Q1 新增) | 2 天 |
| 7 | tip_events audit log + StaffsMate App「打賞紀錄」tab(含留言顯示) | 1 天 |
| 8 | 老闆 App「員工小費報表」(只顯示次數,Q2) | 1 天 |
| 9 | (Phase 2 — 備援)方案 B「餐廳代收 + 月底分潤」實作(老闆 Q7 已答:做) | 3 天 |
| 合計 Phase 1 | 3 個進入點 + 完整 audit + StaffsMate 員工檔案擴充 | ~13 天 |
| 合計 + Phase 2 | + 餐廳代收模式(備援) | ~16 天 |
tip_amount_options DEFAULT '[100,200,500]' 已更新。tip_allow_table_split column、
§3.3 流程也刪掉「整桌一起」按鈕。Spec 建立 2026-05-25 · 老闆同日答完 7Q · Phase 1 可直接開做(~13 天)