老闆 wish:「要有管道讓用戶可以接出單機、收銀機等等常用的 POS 硬體設備」。完整 5 Phase Plan,需老闆採購硬體 + 回 5 問題才能動 code。
POS app 目前沒有任何硬體 integration:
範圍:結帳完成 → 印 receipt + 開錢箱
Tech stack:
EpsonEpos2SDK for iOS(EPSON 官方,免費 BLE 支援)ReceiptPrinterenabledPrinters: [PrinterConfig](BLE address / model / paper width)新檔案:
Apps/ChefsMatePOS/Hardware/ ReceiptPrinter.swift ← 抽象介面 EpsonPrinter.swift ← EPSON 實作 ESCPOSBuilder.swift ← 命令組裝 (cash drawer kick) Features/Settings/ PrinterSettingsView.swift ← BLE 搜尋 / 配對 / 測試列印
新 DB:
CREATE TABLE printer_configs (
id UUID PK, restaurant_id UUID,
name TEXT, kind TEXT ('receipt' | 'kitchen'),
protocol TEXT ('ble' | 'ethernet'),
device_identifier TEXT, -- BLE peripheral UUID / IP
paper_width INT, -- 58 or 80mm
enabled BOOLEAN
);
Integration points:
SettlementSheet.performClose() 結帳 → 呼叫 ReceiptPrinter.print(receipt)PaymentService.processCashPayment() 現金結帳 → 同時 kick cash drawer範圍:KDS 收到新訂單 → 自動印一張到指定廚房印表機
邏輯:
kitchen_printer_idKDSService.dispatchToKitchen() 額外 fork KitchenReceiptPrinter.print(items)範圍:接 USB / BLE scanner,結帳輸入會員 ID / SKU
Tech:HID keyboard wedge mode 不需 SDK,直接接到 TextField focus 用 keystroke 模擬
範圍:結帳時讓客人看金額 + 找零
Tech:USB-C HDMI 接 secondary display,Swift 用 UIScreen.screens API
範圍:同店多印表機(廚房 + 結帳 + 飲料吧)走 LAN
Tech:TCP socket port 9100,raw ESC/POS command
| Phase | 時間 | 老闆要先做的 |
|---|---|---|
| 0 商業決策 | 0(老闆 1 天) | 拍板品牌 + 採購機器 |
| 1 Receipt + Cash | 2-3 週 | 主要 MVP |
| 2 Kitchen | 1-2 週 | 廚房體驗 |
| 3 Scanner | 1 週 | 加分 |
| 4 Customer display | 2 週 | 加分 |
| 5 LAN multi printer | 1 週 | scale 用 |
總計: ~ 2 個月認真做(全職)
2026-05-17 #W8 spec · 等老闆 confirm 採購 + 5 問題才動 code