ระบบ POS ขายหน้าร้าน (BC Ai POS)
POS คือระบบขายหน้าร้านของ BC Ai Account: แคชเชียร์ยิงบาร์โค้ดหรือเลือกสินค้า รับเงิน ออกใบเสร็จ และบิลขายจะถูกส่งเข้าระบบบัญชีและสต็อกอัตโนมัติ จุดเด่นคือ ขายต่อได้แม้อินเทอร์เน็ตหลุด เพราะแอปเก็บสินค้า สมาชิก โปรโมชั่น และบิลไว้ในเครื่อง แล้วค่อยซิงก์ (ที่เก็บข้อมูลในเครื่อง POS ออฟไลน์ ObjectBox และ SharedPreferences (sys-pos-offline-storage))
ระบบนี้ประกอบด้วยอะไร
| ส่วน | ที่อยู่ในโค้ด | หน้าที่ | บันทึก |
|---|---|---|---|
| แอปแคชเชียร์ (Flutter) | frontend/pos (แพ็กเกจ pos 1.0.0+1) |
จอขาย ชำระเงิน ใบเสร็จ กะ ซิงก์ ทำงานออฟไลน์ | หน้านี้และ sys-pos-* |
เปลือกเว็บ /pos |
frontend/src/app/pos/page.tsx |
ตรวจล็อกอิน/ฐานข้อมูล แล้วฝังแอปแคชเชียร์ (Flutter Web) ใน iframe พร้อมแถบสลับไปหน้าตั้งค่า | พื้นที่ทำงาน POS จอขายแคชเชียร์ (PosDemoWorkspace, เส้นทาง /pos) |
| หน้าตั้งค่า POS บนเว็บ | หน้าจอตั้งค่าและควบคุม POS | กำหนดค่าเริ่มต้น เครื่อง POS โปรโมชั่น ออกรหัสเชื่อมเครื่อง | ตั้งค่าและควบคุมระบบขายหน้าร้าน POS (PosSetupAndControlScreen) จอประมวลผลระบบและ POS (System Process Workbench & POS Setup) |
| พร็อกซี API ของเว็บ | frontend/src/app/api/pos/[...path]/route.ts |
รับ /api/pos/* จากแอป แล้วส่งต่อไปหลังบ้าน /api/v1/pos/* |
การเชื่อมเครื่อง POS ด้วยรหัสเชื่อมเครื่อง ไม่มีหน้าล็อกอิน (sys-pos-device-pairing) |
| หลังบ้าน (Go) | backend/internal/adapter/inbound/http/pos, backend/internal/application/process/pos_sync.go |
รับบิล ดึง-ส่งส่วนต่าง กู้คืน รูปใบเสร็จ ลงบัญชี/สต็อก | API จุดขาย POS (POS endpoints /api/v1/pos) POS Sync API: เครื่อง POS เชื่อมกับ Account (POS device sync) POS รับบิลขายจากเครื่องแคชเชียร์ กล่องรับบิล/ประมวลผล/ยกเลิก/ตัดสต็อกเป็นชุด (POS Bill Inbox) POS ซิงก์ข้อมูลเครื่องแคชเชียร์ ผูกเครื่อง/ดึงส่วนต่าง/กู้คืน/รูปภาพ (POS Device Sync) POS ตั้งค่าร้าน/เครื่อง/โปรโมชัน และกะขาย รับ-ส่งเงิน (POS Config and Shift) |
เส้นทางหลังบ้านแบ่งสองกลุ่ม: กลุ่มที่เครื่อง POS เรียก (ดึงข้อมูล กู้คืน ส่งบิล ส่งรูป) และกลุ่มที่ผู้ใช้เว็บเรียก (ข้อมูลตั้งต้น บันทึกค่า รายชื่อเครื่อง ผูกเครื่อง ประมวลผลบิลค้างซ้ำ) ส่วนรับ-ส่งเงินกะและรูปสินค้ารับได้ทั้งสองแบบ (router.go:329-345)
เปิดใช้อย่างไร
- บนเว็บ: ไปที่
/posระบบพาไปล็อกอินและเลือกฐานข้อมูลก่อน จากนั้นแสดงจอแคชเชียร์ (page.tsx:11-15) แอปเว็บเชื่อมระบบด้วยเซสชันที่ล็อกอินอยู่ ไม่ต้องวางรหัสเครื่อง - บน Windows: เรียกไฟล์
frontend/pos/run-pos-windows.batหรือrun-pos.ps1ซึ่งเปิดpos.exeจากโฟลเดอร์ build แบบ Release ถ้าไม่มีใช้แบบ Debug (run-pos-windows.bat:4-8,run-pos.ps1:2-5) ต้องสร้าง (build) แอปไว้ก่อน - บนมือถือ: โปรเจกต์มีโฟลเดอร์ Android และ iOS แอปปรับสีแถบระบบเมื่อรันบนสองแพลตฟอร์มนี้ (
main.dart:13-21) - แอป Windows/มือถือไม่มีหน้าล็อกอิน ต้องวาง "รหัสเชื่อมเครื่อง" ที่ผู้ดูแลออกให้ และกรอกที่อยู่เว็บ BC Ai Account (การเชื่อมเครื่อง POS ด้วยรหัสเชื่อมเครื่อง ไม่มีหน้าล็อกอิน (sys-pos-device-pairing), ค่าเครื่อง POS ที่ซิงก์มา และการตั้งค่าในเครื่อง (sys-pos-app-config))
วงจรการขายหนึ่งบิล
- ยิงบาร์โค้ด/ค้นหา/แตะสินค้า → ใส่ตะกร้า ระบบคำนวณราคาตามระดับราคาและสมาชิก และโปรโมชั่น (ขั้นตอนขายสินค้าที่จอแคชเชียร์ ตั้งแต่ยิงบาร์โค้ดถึงปิดบิล (sys-pos-sale-flow), ระบบคำนวณโปรโมชั่นในแอป POS 10 ประเภท (sys-pos-promotion-engine))
- ชำระเงิน: เงินสด พร้อมเพย์ QR โอน หรือบัตร (การชำระเงินที่จอ POS: เงินสด พร้อมเพย์ QR โอน บัตร (sys-pos-payment-types))
- แอปออกเลขที่บิลในเครื่อง เก็บบิลลงคิว แล้วแสดงใบเสร็จ (ใบเสร็จ POS การพิมพ์ซ้ำ และการอัปโหลดรูปสลิป (sys-pos-receipt-printing))
- ซิงก์ส่งบิลขึ้นเซิร์ฟเวอร์ตามลำดับ ส่งซ้ำได้โดยไม่เกิดบิลซ้ำ (การซิงก์ฝั่งแอป POS ส่งบิลขึ้น ดึงข้อมูลลง และลองใหม่ (sys-pos-sync-client))
- หลังบ้านรับบิล ตัดสต็อกและลงบัญชี (POS รับบิลขายจากเครื่องแคชเชียร์ กล่องรับบิล/ประมวลผล/ยกเลิก/ตัดสต็อกเป็นชุด (POS Bill Inbox), บิลขาย POS เข้าบัญชีและตัดสต็อกอย่างไร)
- ต้นกะ/ท้ายกะ บันทึกรับเงินทอนและนำส่งเงิน ดูประวัติ พิมพ์ซ้ำ และยกเลิกบิล (กะแคชเชียร์ รับ-ส่งเงิน ยกเลิกบิล และกู้คืนข้อมูลเครื่อง POS (sys-pos-shift-cash))
แผนที่บันทึกของระบบ POS
ฝั่งแอปแคชเชียร์ (หมวดนี้)
- โครงสร้างแอปแคชเชียร์ BC Ai POS (Flutter) และหน้าจอขาย (sys-pos-app-structure) โครงสร้างแอป จอ และปุ่มคำสั่ง
- ขั้นตอนขายสินค้าที่จอแคชเชียร์ ตั้งแต่ยิงบาร์โค้ดถึงปิดบิล (sys-pos-sale-flow) ขั้นตอนขาย ลูกค้า ส่วนลด พักบิล ปิดบิล
- การชำระเงินที่จอ POS: เงินสด พร้อมเพย์ QR โอน บัตร (sys-pos-payment-types) ชนิดการชำระเงินและพร้อมเพย์ QR
- ใบเสร็จ POS การพิมพ์ซ้ำ และการอัปโหลดรูปสลิป (sys-pos-receipt-printing) ใบเสร็จ รูปสลิป และปุ่มพิมพ์
- ระบบคำนวณโปรโมชั่นในแอป POS 10 ประเภท (sys-pos-promotion-engine) โปรโมชั่น 10 ประเภทที่คำนวณในเครื่อง
- กะแคชเชียร์ รับ-ส่งเงิน ยกเลิกบิล และกู้คืนข้อมูลเครื่อง POS (sys-pos-shift-cash) กะ รับ-ส่งเงิน ยกเลิกบิล กู้คืนข้อมูล
- การซิงก์ฝั่งแอป POS ส่งบิลขึ้น ดึงข้อมูลลง และลองใหม่ (sys-pos-sync-client) การซิงก์ ส่งบิล ลองใหม่
- ที่เก็บข้อมูลในเครื่อง POS ออฟไลน์ ObjectBox และ SharedPreferences (sys-pos-offline-storage) ที่เก็บข้อมูลในเครื่อง
- การเชื่อมเครื่อง POS ด้วยรหัสเชื่อมเครื่อง ไม่มีหน้าล็อกอิน (sys-pos-device-pairing) การเชื่อมเครื่องแทนการล็อกอิน
- ค่าเครื่อง POS ที่ซิงก์มา และการตั้งค่าในเครื่อง (sys-pos-app-config) ค่าเครื่องที่ซิงก์มาและค่าที่แก้ในเครื่อง
- ข้อจำกัดของแอป POS ที่ควรรู้ก่อนใช้งานหน้าร้าน (sys-pos-known-limits) ข้อจำกัดที่ต้องรู้ก่อนใช้จริง
ฝั่งเว็บและหลังบ้าน (บันทึกเดิม): พื้นที่ทำงาน POS จอขายแคชเชียร์ (PosDemoWorkspace, เส้นทาง /pos) · ตั้งค่าและควบคุมระบบขายหน้าร้าน POS (PosSetupAndControlScreen) · จอประมวลผลระบบและ POS (System Process Workbench & POS Setup) · API จุดขาย POS (POS endpoints /api/v1/pos) · POS Sync API: เครื่อง POS เชื่อมกับ Account (POS device sync) · POS รับบิลขายจากเครื่องแคชเชียร์ กล่องรับบิล/ประมวลผล/ยกเลิก/ตัดสต็อกเป็นชุด (POS Bill Inbox) · POS ตั้งค่าร้าน/เครื่อง/โปรโมชัน และกะขาย รับ-ส่งเงิน (POS Config and Shift) · POS ซิงก์ข้อมูลเครื่องแคชเชียร์ ผูกเครื่อง/ดึงส่วนต่าง/กู้คืน/รูปภาพ (POS Device Sync) · บิลขาย POS เข้าบัญชีและตัดสต็อกอย่างไร ภาพรวมกว้าง: สารบัญหน้าจอทั้งหมดของ BC Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต) · โครงหน้าเว็บและการนำทาง (App shell & routing) · ภาพรวมแค็ตตาล็อก API (API overview — วงจรคำขอ middleware รูปแบบ response และดัชนี)
ตอบเร็วเรื่องที่ถามบ่อย
- ขายตอนเน็ตหลุดได้ไหม: ได้ บิลสะสมในเครื่องและส่งเองเมื่อกลับมาออนไลน์ (การซิงก์ฝั่งแอป POS ส่งบิลขึ้น ดึงข้อมูลลง และลองใหม่ (sys-pos-sync-client))
- ปุ่มพิมพ์ใบเสร็จสั่งเครื่องพิมพ์ไหม: ยังไม่สั่ง ดู ข้อจำกัดของแอป POS ที่ควรรู้ก่อนใช้งานหน้าร้าน (sys-pos-known-limits)
- พร้อมเพย์ตรวจเงินเข้าอัตโนมัติไหม: ไม่ แคชเชียร์ยืนยันเอง (การชำระเงินที่จอ POS: เงินสด พร้อมเพย์ QR โอน บัตร (sys-pos-payment-types))
- ยกเลิกบิลได้เมื่อไร: บิลต้องส่งขึ้นระบบแล้วและค่าร้านอนุญาต (กะแคชเชียร์ รับ-ส่งเงิน ยกเลิกบิล และกู้คืนข้อมูลเครื่อง POS (sys-pos-shift-cash))
- เครื่องใหม่หรือติดตั้งใหม่ เอาข้อมูลเดิมคืนอย่างไร: เชื่อมเครื่องด้วยรหัสเชื่อมเครื่อง ระบบกู้คืนให้อัตโนมัติเมื่อเครื่องว่าง หรือกดปุ่มกู้คืนเอง (กะแคชเชียร์ รับ-ส่งเงิน ยกเลิกบิล และกู้คืนข้อมูลเครื่อง POS (sys-pos-shift-cash))
ที่มาในโค้ด
frontend/pos/pubspec.yaml:1-22ชื่อแพ็กเกจ เวอร์ชัน และไลบรารีที่ใช้ (provider, http, shared_preferences, qr_flutter, uuid, objectbox, path_provider)frontend/pos/lib/main.dart:8-39จุดเริ่มต้นแอปและจอแรกfrontend/pos/run-pos-windows.bat,frontend/pos/run-pos.ps1ตัวเปิดบน Windowsfrontend/src/app/pos/page.tsx:11-15เพจ/posฝั่งเว็บbackend/internal/adapter/inbound/http/router.go:329-345กลุ่มเส้นทาง POS ของหลังบ้าน- ดูเพิ่ม: โครงสร้างแอปแคชเชียร์ BC Ai POS (Flutter) และหน้าจอขาย (sys-pos-app-structure) · ขั้นตอนขายสินค้าที่จอแคชเชียร์ ตั้งแต่ยิงบาร์โค้ดถึงปิดบิล (sys-pos-sale-flow) · ข้อจำกัดของแอป POS ที่ควรรู้ก่อนใช้งานหน้าร้าน (sys-pos-known-limits) · พื้นที่ทำงาน POS จอขายแคชเชียร์ (PosDemoWorkspace, เส้นทาง /pos) · API จุดขาย POS (POS endpoints /api/v1/pos)