Flow ตั้งแต่เปิดแอปของ Mobile และ Terminal
หน้านี้สรุป flow การใช้งานตั้งแต่เปิดแอปจนเข้าถึงเมนูหลักของทั้ง apps/mobile และ apps/pos-terminal โดยอิงจากโค้ดปัจจุบันใน repository
ขอบเขต
- Mobile:
apps/mobile/App.tsx,RootNavigator,loginScreen,branchScreen,homeScreen - POS Terminal:
apps/pos-terminal/App.tsx,BranchScreen,UserSelectionScreen,HomeScreen,StorefrontPosStack - Shared behavior: auth token, login date, selected branch/warehouse, tax cache, required app update, alcohol check
ภาพรวมความต่างหลัก
| เรื่อง | Mobile | POS Terminal |
|---|---|---|
| ลำดับเริ่มต้น | Login ก่อน แล้วเลือกสาขา/คลัง | เลือกสาขา/คลังก่อน แล้วเลือก/เข้าสู่ระบบพนักงาน |
| หน้าล็อกอิน | กรอก username/password โดยตรง | แสดงรายชื่อพนักงานขายตามคลังที่เลือก และมี employee login fallback |
| การเลือกสาขา | หลัง login ถ้ายังไม่มี branch ใน storage | ก่อน login เพื่อผูกเครื่องกับสาขา/คลัง |
| Home | Grid menu แยก section | Split-pane menu/list/detail สำหรับจอใหญ่ |
| POS หน้าร้าน | ไม่มี screen POS แยก | มี StorefrontPos เต็มจอเฉพาะ Terminal |
เปรียบเทียบขั้นตอนเริ่มต้น
Guard ร่วมก่อนเข้าระบบ
ทั้ง Mobile และ POS Terminal ใช้ guard หลักเหมือนกัน:
- Required app update: อ่าน native app version และเทียบกับ Firestore
version/vapp - Auth API: เรียก
signIn - Alcohol check: เรียก
verifyAlcoholCheckBeforeLoginก่อนยอมให้ login สำเร็จ - Token/session storage: เก็บ auth token, user, และ
login_dateรูปแบบDD-MM-YYYY - FCM token: refresh แล้ว patch กลับไปที่ user เมื่อทำได้
- Password reset: ถ้า login response แจ้ง missing required values จะพาเข้า flow ตั้งรหัสผ่านใหม่
Mobile flow ทีละขั้น
1. Login
Mobile เปิดหน้า Login เมื่อยังไม่มี session หรือ session หมดอายุ
- ผู้ใช้กรอก username/password
- ระบบตรวจ required app update
- ระบบ login และตรวจ alcohol rule
- ระบบบันทึก token, user, login date
- ถ้ายังไม่เคยตั้งรหัสผ่าน จะสลับไป reset password
2. Select branch
หลัง login ถ้ายังไม่มี branch ใน storage จะเข้า SelectBranch
Payload ที่เก็บใน branch storage:
{
BranchId: string | number;
BranchCode: string;
whsGrpName: string;
whsGrpCode: string;
isMain: boolean;
}
3. Home
Mobile Home ทำหน้าที่เป็นทั้ง landing page และ permission gate:
- โหลด
userและbranchจาก storage เมื่อ focus - ถ้า
login_dateไม่ใช่วันนี้ จะ logout - กรองเมนูด้วย
deptCode,branch.isMain, และบางกรณีด้วยuserCode - แสดง shortcut สร้างเอกสารเฉพาะเมนูที่อนุญาต
POS Terminal flow ทีละขั้น
1. Select branch ก่อน login
Terminal ต้องเลือกสาขา/คลังก่อน เพื่อให้เครื่อง POS รู้ context ของคลังที่จะใช้งาน
- Step 1: เลือกสาขาหลัก
- Step 2: เลือกคลังจริง
- บันทึก branch payload แบบเดียวกับ Mobile
- โหลด tax แบบ best effort หลังบันทึก branch
2. User selection / login
หลังเลือกคลัง Terminal จะโหลดรายชื่อพนักงานขายจาก whsGrpCode ของคลังที่เลือก
Terminal จึงต่างจาก Mobile ตรงที่ branch context มาก่อน user context และรายชื่อ login ถูกจำกัดด้วยคลังที่เลือก
3. Terminal Home
Terminal Home เป็น layout แบบ split-pane:
- ซ้าย: เมนูและปุ่ม
POS หน้าร้าน - กลาง: list ของเมนูที่เลือก
- ขวา: detail/form/action ของรายการที่เลือก
เมนูหลักเกือบตรงกับ Mobile แต่ใช้ terminalMenus และ canAccessMenu ใน HomeScreen/config.ts สำหรับคำนวณสิทธิ์
4. POS หน้าร้าน เฉพาะ Terminal
StorefrontPos เป็น flow เต็มจอเฉพาะ Terminal สำหรับขายหน้าร้าน:
- เปิดจากปุ่ม
POS หน้าร้านใน menu pane - ไม่ใช่เมนู grid ของ Mobile
- เริ่มจากระบุ/ค้นหาลูกค้า หรือขายสดไม่ระบุชื่อ
- ต่อไปยังขั้นเลือกสินค้าและ checkout สำหรับหน้าร้าน
การหมดอายุของ session
- Mobile ตรวจ
login_dateเมื่อ Home focus ถ้าไม่ใช่วันปัจจุบันจะ clear session และกลับไป Login - POS Terminal ใช้ login date เช่นกันใน Home context และพาออกจาก session เมื่อข้อมูลไม่พร้อมหรือหมดอายุ
- การ logout จะ clear session storage เพื่อบังคับให้เริ่ม flow ใหม่ตามประเภทแอป
Checklist การดูแล
เมื่อเปลี่ยน startup/auth/branch behavior ให้ตรวจเอกสารเหล่านี้ด้วย:
workflows/mobile-terminal-end-to-endworkflows/login-branch-homeworkflows/complete-menu-mapworkflows/home-menu-and-permissionsgovernance/change-log