สารบัญ

📘 คู่มือการใช้งาน MobileHub v2

ระบบจัดการร้านมือถือ Multi-Tenant SaaS

เวอร์ชัน 2.0 | อัปเดตล่าสุด: 2 ตุลาคม 2569 (⭐⭐ เพิ่มอุปกรณ์เสริม/อะไหล่ด้วยรหัสของสินค้าที่เคยลบไปแล้วได้ — ระบบกู้สินค้าเดิมกลับมาให้ แทนการแจ้งว่า "รหัสนี้มีอยู่แล้ว" ทั้งที่ค้นหาไม่เจอ · ปุ่มคัดลอกรายการไปสาขาอื่นก็กู้ของที่เคยลบให้ด้วย (ดู §3.2 · §5.4 · §16.5) / ⭐⭐ หน้าต้อนรับครั้งแรกพาไปทำงานจริงชิ้นแรก — เจ้าของร้าน/แอดมินร้านที่เข้าระบบครั้งแรกจะเห็นรายการ รับเครื่องซ่อมใบแรก · เพิ่มมือถือเข้าสต๊อก · เพิ่มอุปกรณ์เสริม · เพิ่มอะไหล่ · ขายบิลแรก แทนรายการตั้งค่าเดิม · ข้อมูลหลัก (ยี่ห้อ รุ่น สี ความจุ ประเภทซ่อม ฯลฯ) และสาขาแรก ระบบตั้งไว้ให้ตั้งแต่สมัครแล้ว ไม่ต้องตั้งค่าก่อนเริ่มใช้ · Tour แนะนำระบบ ก็พาไล่เมนูของ 5 งานนี้ตามลำดับเดียวกัน (ดู §2 "แนะนำระบบ") / ⭐⭐ ทำไมกำไรรายวันในรายงานสรุปการเงินไม่ตรงกับหน้า "ยอดรับเงินวันนี้" — 2 หน้าหักต้นทุนอะไหล่ซ่อมคนละวัน (สรุปการเงิน = วันที่ใส่อะไหล่ลงใบซ่อม · ยอดรับเงินวันนี้ = วันที่ลูกค้าจ่ายเงิน) ตัวเลขไม่ได้ผิดทั้งคู่ · หน้าสรุปการเงินมีหมายเหตุกำกับแล้ว (ดู §11) / ⭐⭐⭐ ติดต่อทีมงาน MobileHub ได้จากในระบบแล้ว — เจ้าของร้าน/แอดมินร้านเห็น ปุ่มลอยมุมขวาล่าง กดแล้วเลือกแชท LINE · Messenger · แจ้งปัญหา · คู่มือ ได้ทันที · พนักงานทุกคนเข้าได้จากเมนู ติดต่อ → ติดต่อทีมงาน · ปุ่มลอยไม่แสดงในหน้าขายสินค้า (POS) เพื่อไม่ให้บังปุ่มชำระเงิน · และ อีเมลเตือนช่วงทดลองใช้/ต่ออายุเริ่มส่งถึงร้านจริงแล้ว (ดู §13.A) / ⭐⭐⭐ ต้นทุนอะไหล่ที่ร้านใส่เอง ไม่ถูกทับตอนกด "ส่งงาน" อีกแล้ว — เดิมตอนกดส่งงาน ระบบตัดอะไหล่ออกจากคลังแล้วเอา ราคาทุนที่ตั้งไว้ในคลัง ไปเขียนทับต้นทุนที่ร้านแก้ไว้ (เช่น แก้เป็น 350 แต่กลับเป็น 660 · หรือถ้าในคลังตั้งไว้ 0 ต้นทุนก็หายเป็น 0) และหลังส่งงานแก้กลับไม่ได้ · ตอนนี้ ต้นทุนที่ร้านใส่คือตัวที่ระบบใช้ และ ส่งงานแล้วยังแก้ต้นทุนได้ · 🔴 งานที่ต้นทุนเพี้ยนไปแล้ว ร้านเปิดงานแล้วแก้ต้นทุนกลับเองได้เลย (ดู §5.3 "ช่องต้นทุน/ชิ้น") / ⭐⭐⭐ ช่อง "ค่าแรง" ที่หน้างานช่าง เริ่มต้นที่ 0 เสมอ — เดิมระบบเอา "ราคาประเมิน" มาใส่ให้ ทำให้พอใส่อะไหล่แล้ว ยอดบวกซ้ำ และลบค่าแรงออกแล้วมันเด้งกลับ · ราคาประเมินยังอยู่ครบ แค่ไม่ไหลเข้าช่องค่าแรงอีก · งานเก่าที่บันทึกค้างไว้ไม่ถูกแก้ย้อนหลัง (ดู §5.4) / ⭐⭐⭐ ใบรับประกันของลูกค้า หน้าตาเหมือนใบที่ร้านพิมพ์ครบ 10 จุดแล้ว — เจ้าของร้านทักว่ายังไม่เหมือน วัดแล้วต่างกันจริง 10 จุด — ป้ายส้มมุมขวา · ลำดับบล็อก · กล่องความคุ้มครอง/ข้อยกเว้นคู่กันพร้อม ✓/✗ · ท้ายใบ "ขอบคุณที่ใช้บริการ" · ช่องลงนาม · ป้ายในกล่องข้อมูล · 🔴 และคำว่า "ฟรี" ที่หายจากบล็อกวิธีเคลมบนใบ PDF ⇒ กระดาษกับไฟล์เคยสัญญากับลูกค้าคนละอย่าง · ใบยังพอดี 1 หน้า · ใบที่ร้านพิมพ์ไม่เปลี่ยนเลย (ดู §5.7) / ⭐⭐⭐ ใบรับประกันที่ลูกค้าโหลด เป็นใบเดียวกับที่ร้านพิมพ์แล้ว — เดิมใบที่ลูกค้าได้เป็น ขาวดำ และขาดหลายอย่าง · ตอนนี้มี สีครบ (หัวเอกสารส้ม · กล่องความคุ้มครองเขียว · กล่องข้อยกเว้นแดง · แถบระยะเวลาไล่สี) พร้อม โลโก้ร้าน · เงื่อนไขการรับประกันท้ายใบ · เวลาที่ออกใบ · อีเมลและที่อยู่ลูกค้า · ประเภทเครื่อง · 🔴 ร้านที่เคยตั้งข้อความเงื่อนไขท้ายเอกสารเองไว้ จะได้ข้อความของตัวเองบนใบ PDF ตั้งแต่วันนี้ (เดิมใบ PDF ไม่มีบล็อกนี้เลย) · ใบยังพอดี 1 หน้าเท่าเดิม แม้ใบที่มีรับประกัน 4 รายการ (ดู §5.7) / ⭐⭐⭐ ใบรับประกันที่ลูกค้าโหลดจากลิงก์ติดตาม มีข้อมูลร้านครบแล้ว — เดิมใบที่ลูกค้าได้ ไม่มีชื่อร้าน ที่อยู่ เบอร์โทร เลขประจำตัวผู้เสียภาษี และกล่อง "ข้อมูลลูกค้า" มีหัวข้อแต่ไม่มีค่าเลย · ที่สำคัญที่สุดคือบล็อก "วิธีเคลมประกัน" ไม่มีเบอร์ร้าน ⇒ ลูกค้าโทรกลับหาร้านไม่ได้ · ตอนนี้ใบที่ลูกค้าโหลด มีข้อมูลร้านและข้อมูลลูกค้าครบ (หน้าตาเท่ากันครบในรอบถัดมา) (ดู §5.7) / ⭐⭐⭐ ใบส่งคืนหลังเคลมประกัน พิมพ์เวลาที่ปิดเคลมจริงแล้ว — เดิมป้ายบนใบเขียนว่า "วันที่ส่งคืน" แต่พิมพ์ เวลาที่รับเครื่องเข้าเคลม (ร้านแจ้งจริง: ปิดเคลม 16:13 แต่ใบพิมพ์ 14:56) ⇒ กระดาษที่ลูกค้าถือกลับพูดไม่ตรงความจริง · ใบเก่าที่ยังไม่ได้ปิดเคลมจะขึ้น - แทนการเดาเวลา และยังพิมพ์ได้ตามปกติ · ใบรับเครื่องเข้าเคลมไม่เปลี่ยนเลย (ดู §5.8) / ⭐⭐ เวลาในกล่องรายละเอียดของ Audit Log อ่านง่ายแล้ว — เดิมกล่อง "ข้อมูลเก่า/ข้อมูลใหม่" แสดงเวลาดิบแบบ "2026-08-16T09:38:18.050Z" ซึ่ง ช้ากว่าเวลาไทย 7 ชั่วโมง ⇒ ร้านลบเองแล้วอ่านผิด · ตอนนี้แสดง "16 ส.ค. 2569 16:38 น." รูปแบบเดียวกับเวลาข้างบนเป๊ะ · ข้อมูลในระบบไม่ถูกแก้ เปลี่ยนแค่วิธีแสดงผล (ดู §14.5) / ⭐ หน้าต่าง "ผูกอะไหล่/อุปกรณ์เสริม" เปิดมาที่แท็บ "อุปกรณ์เสริม" แล้ว — ตามที่ร้านแจ้งว่าไม่ได้ใช้แท็บอะไหล่ที่ช่องค่าบริการ เพราะแถวอะไหล่มีปุ่ม "เพิ่มอะไหล่" ที่ตัดสต๊อกอยู่แล้ว · แท็บ "อะไหล่" ยังอยู่ครบ และคำใบ้ใต้ช่องค้นหาสลับด้านตามแท็บที่เปิดอยู่ (ดู §5.3) / ⭐⭐⭐ ผูก "อุปกรณ์เสริม" เข้ากับค่าบริการได้แล้ว — เดิมปุ่มค้นเฉพาะคลังอะไหล่ ร้านที่เก็บ ฟิล์ม · เคส · สายชาร์จ ไว้ที่คลังอุปกรณ์เสริมจึงหาของตัวเองไม่เจอเลย · ตอนนี้หน้าต่างเลือกมี 2 แท็บ และป้ายบอกว่ามาจากคลังไหน ⇒ ติดฟิล์มแล้วสต๊อกฟิล์มลดจริง (ดู §5.3) / ⭐⭐⭐ แชท LINE เพิ่ม 5 อย่าง — เส้นตัดวันที่ (วันนี้/เมื่อวาน/วันที่ พ.ศ.) · ตอบกลับข้อความ พร้อมกระโดดไปข้อความต้นทาง · ค้นหาข้อความในห้อง · คำใช้บ่อย ⚡ พร้อมหน้าตั้งค่า ⚙ ใส่ตัวแปร {ชื่อลูกค้า} ได้ · ปุ่มแทรกชื่อ · ช่องพิมพ์บนมือถือกว้างขึ้นจาก ~182 เป็น 246 พิกเซล (ดู §14.6C) / ⭐ ถอดปุ่มส่งสติกเกอร์ออกจากหน้าแชท LINE ตามที่เจ้าของร้านสั่ง — สติกเกอร์ที่ลูกค้าส่งเข้ามายังแสดงตามปกติทุกอย่าง · ปุ่มรูปและปุ่มไฟล์เอกสารยังอยู่ครบ (ดู §14.6C) / ⭐ ขายเครื่องที่ยกเลิกบิลหรือคืนเงินไปแล้วใหม่ได้ — เดิมระบบขึ้นข้อผิดพลาดและขายไม่ได้อีกเลยตลอดไป · รับซื้อเครื่องที่เคยขายออกไปกลับเข้ามาก็ได้แล้ว เมื่อบิลเดิมถูกยกเลิก / ⭐⭐ ยกเลิกรอบนับสต็อกที่เปิดผิดได้แล้ว — เดิมเปิดผิดสาขา/เปิดซ้ำแล้วเอาออกไม่ได้เลย และรอบที่ค้างจะล็อกสาขานั้นไม่ให้เปิดรอบใหม่ · ผู้จัดการขึ้นไปกดยกเลิกได้ ต้องระบุเหตุผล ≥ 10 ตัวอักษร · ไม่แตะจำนวนสต๊อกและไม่ลบตัวเลขที่นับไปแล้ว · ยกเลิกแล้วกู้คืนไม่ได้ (ดู §3.3) / ⭐ พิมพ์ใบรับประกันเก่าซ้ำ ได้รายการอะไหล่ "ฉบับที่ลูกค้าเซ็นรับไป" แล้ว — เดิมจอแสดงรายการฉบับปัจจุบันซึ่งไม่ตรงกับ PDF · ใบเก่าที่ระบบยังไม่ได้เก็บรายการไว้ แสดงเหมือนเดิมทุกอย่าง (ดู §5.6) / ⭐ เข้าเว็บครั้งแรกไม่กะพริบอีกแล้ว — เดิมหน้าโหลดใหม่ 1 รอบทุกครั้งที่เปิดเว็บจากเครื่องใหม่ / ⭐⭐ แชท LINE ส่งไฟล์เอกสารได้ · ผูกห้องแชทกับลูกค้าในระบบได้ · หน้า "ลูกค้าทั้งหมด" มีปุ่มแชท (แพ็คเกจเอ็นเตอร์ไพรส์ · ดู §14.6C) — ร้านที่แพ็คเกจไม่ถึงจะไม่เห็นเมนู "แชท LINE" แต่ยังเข้าเมนู "LINE OA" เพื่อปิด/ลบการเชื่อมต่อของตัวเองได้เสมอ / ⭐⭐ เอกสารที่พิมพ์ให้ลูกค้าแยก "ค่าอะไหล่" กับ "ค่าบริการ" แล้ว — ใบเสร็จเล็กพิมพ์ ชื่อรายการทีละบรรทัด (เดิมมีแต่ยอดรวม) · ใบรับประกัน ไม่แสดงค่าบริการ · หน้า "งานของฉัน" ของช่างแยกบรรทัดให้ · ใบเก่าพิมพ์ซ้ำได้เหมือนเดิมทุกตัวอักษร และยอดเงินไม่เปลี่ยน (ดู §5.6) / ⭐⭐ ลงค่าบริการที่ไม่ใช่อะไหล่ได้แล้ว — ปุ่ม "เพิ่มค่าบริการ" ในงานซ่อม (ติดฟิล์ม · ค่าล้างเครื่อง ฯลฯ) และหน้าติดตามของลูกค้าแยก ค่าอะไหล่ / ค่าบริการ ให้ชัด · งานเก่าทุกใบตัวเลขเท่าเดิม (ดู §5.3) / ⭐⭐ ระบบเตือนเมื่อเพิ่มลูกค้าด้วยเบอร์ที่มีอยู่แล้ว — เลือก "ใช้ลูกค้าคนนี้" หรือ "สร้างเป็นลูกค้าใหม่" · เตือน ไม่ห้าม (ดู §8) / ⭐ ช่อง "อาการที่แจ้ง (แสดงให้ลูกค้าเห็น)" — ช่องใหม่แยกจากช่องอาการเดิมที่เป็นบันทึกภายใน (ดู §5.3) / ⭐ ไฟล์รูป/วิดีโอในแชท LINE เก็บ 30 วัน แล้วระบบลบไฟล์ให้เอง ประวัติแชทยังอยู่ครบ (ดู §14.6C) / ⭐⭐ หน้าแชท LINE ขึ้นข้อความเองทันที ไม่ต้องรีเฟรช · แสดงชื่อ LINE จริงแทนรหัส · ส่งรูปได้ (ดู §14.6C) / ⭐ ปุ่มทดสอบการเชื่อมต่อ LINE OA แสดงคำตอบจริงจาก LINE เมื่อไม่ผ่าน (ดู §14.6) — และแก้บั๊กที่ทำให้ปุ่มนี้ปฏิเสธโทเคนที่ถูกต้อง / ⭐⭐ แยกรูปก่อนซ่อม / หลังซ่อม — หน้างานซ่อมมีช่องแนบรูปเพิ่มอีก 1 ช่องชื่อ รูปถ่ายเครื่อง (หลังซ่อม) (ไม่บังคับ · ทุกแพ็คเกจ) และหน้าติดตามของลูกค้าจะ แยกเป็น 2 กลุ่มให้เอง เมื่อร้านใส่รูปหลังซ่อมไว้ · งานเก่าที่ไม่มีรูปหลังซ่อม แสดงเหมือนเดิมทุกอย่าง และ ระบบไม่ย้ายรูปเก่าไปช่องใหม่ให้อัตโนมัติ (ดู §5.3B และ §5.7) / ⭐⭐ หน้าติดตามงานซ่อมของลูกค้าแสดงรูปเครื่อง · ปุ่มดาวน์โหลดเอกสาร · ประวัติสถานะ (แพ็คเกจโปรเฟสชันนอลขึ้นไป · ดู §5.7) — ร้านส่ง ลิงก์เดียว แทนการไล่ส่งไฟล์ทีละอันทางไลน์ · มี ปุ่มคัดลอกลิงก์ติดตาม ที่หน้างานซ่อมแล้ว (ทุกแพ็คเกจ) · ใบรับประกันงานซ่อมดาวน์โหลดเป็น PDF ได้แล้ว พร้อมฟอนต์ไทยฝังในไฟล์ / ⭐⭐ เมนูใหม่ LINE OA (/line-oa · แพ็คเกจเอ็นเตอร์ไพรส์ · ดู §14.6) — ผูก LINE Official Account ของร้านเข้าระบบ เพื่อเตรียมแจ้งสถานะงานซ่อมและส่งเอกสารหาลูกค้าทางไลน์ · แจ้งสถานะงานซ่อมอัตโนมัติทางไลน์ใช้งานได้แล้ว (ดู §14.6B) · มีหน้าแชท LINE ในระบบแล้ว (/line-chat · ดู §14.6C) / ⭐ 2 ก.ย. 2569 — แก้ตาม feedback ร้าน 3 ข้อ: ค้นหางานซ่อมด้วย เลขงานสั้นที่ลูกค้าคัดลอกจากหน้าติดตาม ได้แล้ว (§5.3) · ตั้ง ขั้นต่ำอะไหล่ = 0 = ไม่ติดตาม เพื่อไม่ให้ของรุ่นเก่าโผล่ในรายการสั่งซื้อ (§5.4) · แนบรูปเครื่องได้จากในเช็คลิสต์ก่อน/หลังซ่อม โดยตรง ไม่ต้องไปหน้าแก้ไข (§5.5) / ⭐⭐ ใบรับซ่อมมีรหัสผูกบัญชี LINE + QR แล้ว (ร้านเอ็นเตอร์ไพรส์ที่เชื่อม LINE OA · ดู §14.6D) — ลูกค้าสแกน/พิมพ์รหัสในแชทเพื่อรับแจ้งสถานะอัตโนมัติ · โซ่ LINE OA ครบวงจรแล้ว — อ่านและตอบข้อความลูกค้าได้จากในระบบ ไม่ต้องสลับไปแอป LINE OA / ⭐ ร้านที่อยู่ในช่วงทดลองใช้ จะเห็นคำเตือนก่อนแจกลิงก์หน้าเช็คราคา ที่ ตั้งค่า การ์ด หน้าเช็คราคาซ่อมสาธารณะ จะมีแถบเหลืองเหนือปุ่มบันทึกบอกว่า ตอนนี้เปิดได้เพราะอยู่ในช่วงทดลองใช้ — หน้านี้อยู่ในแพ็คเกจเอ็นเตอร์ไพรส์ ถ้าหมดทดลองแล้วเลือกแพ็คเกจอื่น ลิงก์ที่แจกลูกค้าไปแล้วจะเปิดไม่ได้ทันที · ขึ้น ทั้งตอนสวิตช์เปิดและปิด เพราะต้องรู้ก่อนตัดสินใจ ไม่ใช่รู้ทีหลัง · เป็นการบอก ไม่ใช่การห้าม ปุ่มบันทึกยังกดได้ปกติ · ร้านที่ซื้อแพ็คเกจแล้วไม่เห็นแถบนี้ / ⭐⭐ หน้าเช็คราคาซ่อมสาธารณะย้ายไปอยู่แพ็คเกจ เอ็นเตอร์ไพรส์ ร้านที่แพ็คเกจไม่ถึงจะเห็นการ์ดและตัวเลขของตัวเองตามเดิม แต่สวิตช์กดไม่ได้ พร้อมข้อความบอกว่าอยู่ในแพ็คเกจไหน (จงใจไม่ซ่อนการ์ด เพื่อให้รู้ว่ามีของให้เลือกซื้อ) · ร้านที่อยู่ในช่วงทดลองใช้ได้ครบเหมือนเดิม · 🔴 ถ้าเปิดหน้าไว้ตอนทดลองแล้วซื้อแพ็คเกจต่ำกว่าเอ็นเตอร์ไพรส์ ลิงก์ที่แจกลูกค้าไปแล้วจะเปิดไม่ได้ ให้ชั่งก่อนแจกลิงก์เป็นวงกว้าง / ⭐ Template ราคาซ่อม บอกแล้วว่าแถวไหนไม่โผล่บนหน้าเช็คราคา และเพราะอะไร เดิมทุกแถวขึ้นสถานะ ใช้งาน สีเขียวเหมือนกันหมด แม้แถวนั้นจะไม่แสดงบนหน้าสาธารณะ ⇒ ตอนนี้แถวที่ไม่แสดงจะมีบรรทัดสีเทาใต้ชื่อบอกเหตุผล 4 แบบ แยกกันเพราะแก้คนละทาง: ยังไม่ได้เลือกอาการ (กดแก้ไขแถวนั้น) · อาการที่ผูกไว้ถูกปิดใช้งาน · อาการยังไม่ได้ติ๊กให้แสดง (ไปติ๊กที่ ข้อมูลหลัก → ประเภทการซ่อม) · แถวปิดใช้งานอยู่ · ทุกข้อความบอกด้วยว่า แถวนั้นยังใช้ตอนรับเครื่องได้ตามปกติ ไม่ใช่แถวเสีย ไม่ต้องลบ · โมดัลเตือนตั้งแต่ตอนเลือกอาการ · ร้านที่ยังไม่ได้เปิดสวิตช์หน้าสาธารณะจะเห็นแถบบอกไว้เหนือตาราง / ⭐ ปุ่มคัดลอกลิงก์หน้าราคา + ตัวเลขให้ดูก่อนตัดสินใจเปิด ที่ ตั้งค่า การ์ด "หน้าเช็คราคาซ่อมสาธารณะ" ไม่ต้องพิมพ์ลิงก์เองแล้ว — ระบบแสดงลิงก์เต็มพร้อมปุ่ม "คัดลอกลิงก์" และ "เปิดดูหน้าจริง" · เหนือสวิตช์มีตัวเลข 3 ตัว (แถวราคาที่จะโชว์ · อาการที่มีราคาแล้ว · อาการที่ติ๊กไว้) พร้อมประโยคสรุปว่าตอนนี้หน้าสาธารณะจะโชว์อะไรบ้าง · 🔴 ตัวเลขนับด้วยกติกาเดียวกับที่หน้าสาธารณะใช้จริง เห็นเท่าไรลูกค้าเห็นเท่านั้น (แถวในสาขาที่ปิดใช้งานไม่ถูกนับ) · ไม่บล็อก แต่เตือนก่อน 3 สภาพคนละแบบเพราะแก้คนละทาง: ยังไม่ติ๊กอาการเลย · ติ๊กแล้วแต่ยังไม่มีราคา · สวิตช์ยังปิดอยู่ / ⭐ Google เก็บหน้าราคาเข้าสารบบได้แล้ว ร้านที่เปิดสวิตช์จะถูกใส่ใน sitemap.xml อัตโนมัติ และหน้ามีหัวข้อ/คำอธิบายที่มี ชื่อร้านของคุณ ⇒ แปะเฟซบุ๊ก/ส่งไลน์แล้วขึ้นพรีวิวเป็นชื่อร้าน · ร้านที่ปิดสวิตช์ไม่อยู่ใน sitemap · ⚠️ ต่างจากหน้าติดตามงานซ่อมโดยเจตนา (หน้านั้นกัน Google ไว้เพราะมีข้อมูลลูกค้ารายบุคคล) · ⏳ Google ใช้เวลาหลายวันถึงหลายสัปดาห์ ไม่ใช่เปิดวันนี้ค้นเจอพรุ่งนี้ / ⭐ ลูกค้าติ๊กหลายอาการเห็นยอดรวม + ปุ่มทักไลน์/โทร บนหน้าเช็คราคา เครื่องตกทีเดียวมักพังมากกว่า 1 อย่าง ⇒ แตะช่องราคาเพื่อเลือก ได้หลายอาการ (1 อาการเลือกได้เกรดเดียว ติ๊กเกรดอื่นในอาการเดิม = สลับ) แล้วมี แถบยอดรวมลอยล่างจอ บอกจำนวนรายการ+ยอดรวม · เอาติ๊กออกหมด แถบหายทั้งแถบ · เปลี่ยนยี่ห้อ/รุ่น/สาขา ระบบล้างการติ๊กให้เอง กันยอดค้างของรุ่นเก่า · 🔴 ปุ่มไลน์ขึ้นเฉพาะร้านที่กรอกลิงก์ไลน์ไว้แล้ว — ร้านที่ยังไม่กรอกจะเห็นแค่ปุ่มโทร เป็นสภาพปกติ ไม่ใช่ระบบพัง (ไปกรอกได้ที่ ตั้งค่า → ข้อมูลร้านค้า → ลิงก์ไลน์ของร้าน) · ไม่มีทั้งเบอร์และไลน์ → มีข้อความบอกให้สอบถามที่หน้าร้าน ไม่ใช่พื้นที่ว่าง · ทำไมไลน์เป็นปุ่มหลัก: ลูกค้าส่งรูปเครื่องที่พังให้ร้านดูก่อนได้ แต่โทรศัพท์ทำไม่ได้ ("จอแตก" อาจเป็นกระจกร้าวอย่างเดียวหรือจอในเสียด้วย ซึ่งราคาต่างกันมาก) / ⭐⭐ หน้าเช็คราคาซ่อมของลูกค้า "ใช้ได้จริงแล้ว" — ลิงก์คือ https://<โดเมนของระบบ>/repair-price/<รหัสร้าน> (รหัสร้าน = ชุดตัวอักษรเดียวกับที่เห็นในลิงก์ตอนลูกค้าติดตามงานซ่อม) · ลูกค้าเปิดแล้ว เลือกยี่ห้อ → เลือกรุ่น → เห็นตารางเดียวจบ แถวคืออาการ คอลัมน์คือเกรดอะไหล่ แต่ละช่องบอกราคาและระยะประกัน · พิมพ์ค้นหารุ่นได้ ไม่ว่าร้านจะมีกี่ร้อยรุ่น · ⭐ ไม่ต้องตั้งราคาครบทุกรุ่น รุ่นที่ยังไม่ตั้งจะใช้ราคาเหมาของยี่ห้อให้เอง (รุ่นที่ตั้งเจาะจงชนะเสมอ) · 🔴 ต้องเปิดสวิตช์ + ติ๊กอาการก่อน ไม่งั้นลูกค้าจะเห็นหน้า "ไม่พบหน้าราคาของร้านนี้" ซึ่งเป็นข้อความเดียวกับตอนพิมพ์ลิงก์ผิด · ⚠️ ปุ่มคัดลอกลิงก์ในหน้าตั้งค่ายังไม่มี จะตามมาในรุ่นถัดไป / ⭐ เปิด "หน้าเช็คราคาซ่อม" ให้ลูกค้าดูเองได้แล้ว — แต่ต้องกดเปิดเองก่อน ที่ ตั้งค่า มีการ์ดใหม่ "หน้าเช็คราคาซ่อมสาธารณะ" · 🔴 ค่าตั้งต้นคือปิด และ เห็นเฉพาะเจ้าของร้าน (ถ้าอยากให้ผู้ดูแลเปิดได้ด้วย ไปติ๊กที่ ตั้งค่า → สิทธิ์ตามบทบาท แถว "สิทธิ์เจ้าของร้าน" คอลัมน์ผู้ดูแล) · ⚠️ เปิดสวิตช์อย่างเดียวยังไม่พอ ต้องไปติ๊กด้วยว่าจะโชว์อาการไหนบ้าง ที่ ข้อมูลหลัก → ประเภทการซ่อม คอลัมน์ "โชว์หน้าราคา" — ค่าตั้งต้นคือไม่ติ๊กทุกอาการ ถ้าไม่ติ๊กเลย หน้าที่เปิดจะว่างเปล่า · เหตุผลที่ต้องติ๊กเอง: ชื่ออาการที่ร้านพิมพ์ไว้เองบางอันซ้ำความหมายกัน (เช่นมีทั้ง "เปลี่ยนจอ" และ "เปลี่ยนหน้าจอ") ระบบจะไม่ไปรวมให้เอง ร้านเลือกเองว่าอันไหนเหมาะให้คนนอกเห็น · 🔴 เปิดแล้วใครก็ตามที่มีลิงก์เปิดดูราคาได้ทันที ไม่ต้องล็อกอิน — รวมถึงร้านคู่แข่ง · และมีช่อง "ลิงก์ไลน์ของร้าน (LINE)" เพิ่มที่การ์ดข้อมูลร้านค้า (ผู้ดูแลขึ้นไป) สำหรับปุ่มทักแชทบนหน้านั้น — ต้องขึ้นต้นด้วย https:// เท่านั้น ให้คัดลอกจากแอปไลน์มาวาง / ⭐ ผู้ดูแลแก้ข้อมูลร้านได้แล้ว ถ้าเจ้าของอนุญาต เดิมหน้า ตั้งค่า ส่วน "ข้อมูลร้านค้า" ระดับร้าน (ชื่อร้าน · เบอร์ · ที่อยู่ · โลโก้ · นโยบายกะ · วิธีรับเงินค่าซ่อม) บันทึกได้เฉพาะเจ้าของร้านเท่านั้น ต่อให้ไปติ๊กสิทธิ์ให้ผู้ดูแลแล้วก็ยังกดไม่ผ่าน (เห็นปุ่มแต่กดแล้วขึ้นว่าไม่มีสิทธิ์) · ตอนนี้ระบบดูจาก ตั้งค่า → สิทธิ์ตามบทบาท จริง ๆ แล้ว ⇒ ติ๊ก "สิทธิ์เจ้าของร้าน" ให้ผู้ดูแล เขาจะบันทึกได้ทันที · ⚠️ ร้านที่ไม่เคยเข้าไปแก้หน้าสิทธิ์ จะไม่รู้สึกถึงความเปลี่ยนแปลงใด ๆ (ค่าตั้งต้นเหมือนเดิมทุกอย่าง) · และการ ถอน สิทธิ์ก็มีผลจริงเช่นกัน / 🔧 แก้บั๊ก: กราฟรายได้รายเดือนของแผงผู้ดูแลระบบ นับเดือนตามเวลาสากล ไม่ใช่เวลาไทย รายการที่เกิดวันที่ 1 ของเดือน ช่วง 00:00–06:59 น. จะถูกนับเข้าเดือนก่อนหน้า · แก้แล้วทั้ง 4 กราฟ (รายได้ · การเติบโต · ARPU · ยกเลิก) · ตัวเลขที่แสดงอยู่ตอนนี้ไม่เปลี่ยน เพราะยังไม่มีรายการไหนตกอยู่ในช่วงเวลานั้น / ⭐ ตั้งราคาซ่อมแยกตามเกรดอะไหล่ได้แล้ว ที่หน้า ข้อมูลหลัก → Template ราคาซ่อม มีช่อง "เกรดอะไหล่" เพิ่มมา เลือกได้ 4 ระดับ: แท้ศูนย์ · แท้ถอด / รีเฟอร์ · เทียบเกรดพรีเมียม · เทียบเกรดประหยัด ⇒ ตั้งราคาของรุ่นและอาการเดียวกันได้หลายแถว แยกตามเกรด เช่น iPhone 14 Pro เปลี่ยนจอ · แท้ศูนย์ · ฿9,000 · ประกัน 90 วัน กับ เทียบเกรดพรีเมียม · ฿4,500 · ประกัน 30 วัน เพื่ออธิบายให้ลูกค้าเข้าใจว่าทำไมราคาถึงต่างกัน · ช่องนี้ไม่บังคับ เว้นว่างไว้ก็ได้ ถ้าร้านคิดราคาเดียว และ แถวที่ตั้งไว้เดิมทุกแถวยังใช้งานได้เหมือนเดิมทุกประการ (จะขึ้นเป็น "-" ในคอลัมน์เกรด) · เกรดแสดงเป็นชิปสีทั้งบนตารางและบนการ์ดมือถือ / 🔧 แก้บั๊ก: แก้ราคาใน Template ราคาซ่อมแล้วไม่บันทึก เดิมถ้าเข้าไปกดแก้ไข template แล้วเปลี่ยน ค่าแรง · ค่าอะไหล่ · ยี่ห้อ · รุ่น · ระยะประกัน · เวลาที่ใช้ · อาการตั้งต้น ระบบจะขึ้นว่า "สำเร็จ" แต่ค่าไม่ได้ถูกบันทึกจริง — มีแต่ ชื่อ กับ สถานะเปิด/ปิด เท่านั้นที่บันทึกได้ ⇒ ร้านที่เคยตั้งราคาไว้แล้วอยากปรับราคา ทำไม่ได้เลยและไม่มีอะไรเตือน · ตอนนี้แก้แล้ว ทุกช่องบันทึกจริง ⚠️ ถ้าเคยพยายามแก้ราคาแล้วเหมือนไม่เปลี่ยน — ให้เข้าไปแก้ใหม่อีกครั้ง เพราะค่าเดิมยังเป็นค่าก่อนหน้าอยู่ / ⭐ สาขาที่ปิดใช้งานไว้ เปิดกลับมาใช้งานได้แล้ว เดิมถ้ากดลบสาขาแล้วระบบบอกว่าลบถาวรไม่ได้ (เพราะมีข้อมูลอ้างอิงอยู่) มันจะ ปิดใช้งานให้แทน แล้ว ไม่มีทางเปิดกลับเลยจากหน้าจอ · ตอนนี้แถวของสาขาที่ขึ้นป้าย "ปิดใช้งาน" จะมี ปุ่มไอคอนสีเขียว เพิ่มมา กดแล้วยืนยันเพื่อเปิดใช้งานอีกครั้งได้ทันที ข้อมูลเดิมของสาขายังอยู่ครบ (ชื่อ · ที่อยู่ · เบอร์ · ค่าภาษี) · มีทั้งบนตารางและบนการ์ดมือถือ · ⚠️ ของที่ค้างอยู่ในสาขาที่ปิด ยังโอนออกไม่ได้จากหน้าโอนสินค้า เพราะช่องเลือกสาขาแสดงเฉพาะสาขาที่เปิดอยู่ — ถ้าต้องการย้ายของออก ให้เปิดสาขากลับมาก่อน / ⭐ ปุ่ม "ชวนเพื่อน" อยู่บนแถบด้านบนทุกหน้าแล้ว ไม่ต้องเข้าไปหาในหน้าค่าบริการอีก — ปุ่ม 🎁 "ชวนเพื่อน · รับฟรี 30 วัน" อยู่มุมซ้ายบนติดกับชื่อร้าน กดแล้วจะเปิดกล่องเล็ก ๆ ที่มี ลิงก์ชวนเพื่อนพร้อมปุ่มคัดลอก ส่งต่อได้ทันที · และมี การ์ด "ชวนร้านอื่นมาใช้" เต็มรูปแบบที่หน้า ตั้งค่า ด้วย (ดูสถิติ ประวัติวันฟรีที่ได้ และโควตาที่เหลือ) · ⚠️ เห็นเฉพาะเจ้าของร้านและแอดมิน และ ซ่อนบนมือถือ เพราะแถบด้านบนแคบ — บนมือถือให้เข้าที่หน้า ตั้งค่า แทน / ⭐ ร้านที่กำลังทดลองใช้ ซื้อแพ็คเกจที่ทดลองอยู่ได้แล้ว เดิมถ้าคุณกำลังทดลองใช้แพ็คเกจไหนอยู่ การ์ดแพ็คเกจนั้นจะถูกล็อกกดไม่ได้ และปุ่ม "ดำเนินการชำระเงิน" เป็นสีเทา ⇒ อยากจ่ายเงินซื้อตัวที่ทดลองอยู่ก็ทำไม่ได้เลย ต้องรอให้หมดทดลองก่อน · ตอนนี้การ์ดขึ้นป้าย "กำลังทดลองใช้" และ กดเลือกได้ตามปกติ ทั้งรอบรายเดือนและรายปี · ระบบจะเก็บ เต็มราคา ไม่หักส่วนลดใด ๆ (เพราะช่วงทดลองยังไม่เคยจ่ายมาก่อน) และ นับวันต่อจากวันหมดทดลอง ⇒ ไม่เสียวันที่เหลือไปฟรี ๆ / ⭐ ชวนร้านอื่นมาใช้ แล้วได้วันใช้งานฟรีทั้งคู่ ที่หน้า ค่าบริการ ท้ายหน้ามีการ์ด "ชวนร้านอื่นมาใช้" — คัดลอกรหัสหรือลิงก์ชวนเพื่อนไปส่งให้ร้านอื่นได้เลย · ร้านที่ถูกชวนกรอกรหัสตอนสมัคร (หรือเปิดจากลิงก์แล้วระบบเติมให้เอง) · เมื่อร้านใหม่ชำระค่าบริการครั้งแรก คุณได้ +30 วัน และเขาได้ +15 วัน ต่อจากวันหมดอายุเดิม · ชวนได้สูงสุด 5 ร้านต่อปี · ⚠️ รหัสจะเปิดให้หลังร้านของคุณชำระค่าบริการครั้งแรกแล้วเท่านั้น — ร้านที่ยังอยู่ในช่วงทดลองใช้จะยังไม่มีรหัส · เฉพาะเจ้าของร้าน/แอดมินเท่านั้นที่เห็นส่วนนี้ · ระบบ ไม่เปิดเผยชื่อหรืออีเมลของร้านที่คุณชวน ให้เห็นแค่จำนวนครั้งและวันที่ได้รับรางวัล / ⚠️ ใบเสร็จที่ถูกยกเลิก จะดาวน์โหลดไม่ได้ ปุ่มจะเป็นสีเทาพร้อมบอกเหตุผล — เพราะใบที่ยกเลิกคือใบที่ยังไม่เคยรับเงิน การให้ดาวน์โหลดเป็น "ใบเสร็จรับเงิน" จึงเป็นเอกสารที่บอกความเท็จ · ถ้าต้องการใบใหม่ให้ติดต่อทีมงาน · ใบที่รอชำระยังดาวน์โหลดดูรายละเอียดได้ตามเดิม / ⭐ จ่ายค่าบริการแล้วได้ใบเสร็จทางอีเมลอัตโนมัติ เมื่อทีมงานอนุมัติการชำระเงิน ระบบจะออกใบเสร็จรับเงินให้เองทันที และแนบไฟล์ PDF ไปกับอีเมล "ชำระเงินสำเร็จ" — เดิมอีเมลมีแค่ตารางสรุป 4 บรรทัด ไม่มีใบเสร็จแนบ และร้านต้องรบกวนทีมงานทุกครั้งที่อยากได้ใบไปลงบัญชี · ทำงานเหมือนกันทุกช่องทางการชำระเงิน / ⭐ ดาวน์โหลดใบเสร็จค่าบริการเองได้แล้ว ที่หน้า ค่าบริการ มีส่วน "ใบเสร็จรับเงิน" เพิ่มมา — กดปุ่มดาวน์โหลดได้ไฟล์ PDF ทันที โหลดซ้ำกี่ครั้งก็ได้ ไม่ต้องแจ้งทีมงาน · เดิมระบบออกใบเสร็จให้อยู่แล้วแต่ไม่มีทางเข้าจากหน้าจอเลย ⇒ ร้านที่ต้องเอาไปลงบัญชีต้องรบกวนทีมงานทุกครั้ง · ⚠️ ใบเสร็จจะขึ้นหลังทีมงานอนุมัติการชำระเงินแล้ว / ⭐ หน้าแพ็คเกจ/ค่าบริการ — ถ้าโหลดข้อมูลไม่สำเร็จ จะบอกตรง ๆ พร้อมปุ่ม "ลองใหม่" เดิมหน้าเลือกแพ็คเกจอาจขึ้นมาไม่มีแพ็คเกจให้เลือกสักใบ โดยไม่มีข้อความอธิบายและไม่มีปุ่มให้กด · และหน้าค่าบริการอาจโชว์ "— ฿0/เดือน · รอดำเนินการ" หรือ "ยังไม่มีประวัติการชำระเงิน" ทั้งที่ความจริงคือดึงข้อมูลไม่สำเร็จ ⇒ ร้านที่เพิ่งโอนเงินอาจเข้าใจว่าเงินหายแล้วโอนซ้ำ · ตอนนี้ทั้ง 2 หน้าจะขึ้นแถบแดงค้างไว้ บอกว่าดึงส่วนไหนไม่ได้ พร้อมปุ่ม "ลองใหม่" และ "แจ้งทีมงาน" · แยกให้ชัดระหว่าง "โหลดไม่สำเร็จ" กับ "ไม่มีข้อมูลจริง ๆ" เพราะ 2 อย่างนี้แก้คนละทาง — กรณีหลังจะไม่มีปุ่มลองใหม่ เพราะกดแล้วไม่ช่วย · ถ้าโหลดสำเร็จตามปกติ หน้าจอเหมือนเดิมทุกจุด / 🔴 ต่ออายุ/เปลี่ยนแพ็คเกจ — ได้วันตรงกับที่หน้าจอบอกแล้วทุกเส้นทาง เดิมซื้อรายปีแล้วได้แค่ 1 เดือน และเปลี่ยนไปแพ็คเกจสูงกว่าแล้วไม่ได้วันเพิ่มเลย (วัดจริง: จ่าย ฿24,990 ได้ 4 วัน) — แก้ครบแล้ว · วันหมดอายุใหม่ = วันที่ระบุบนใบชำระ ไม่ใช่นับจากวันโอน / ⭐ แถบเตือนใกล้หมดอายุขึ้นทุกหน้าเมื่อเหลือ ≤ 7 วัน เหลือง 4–7 วัน · ส้ม 1–3 วัน · แดงและปิดไม่ได้เมื่อวันสุดท้าย/หมดแล้ว · เดิมไม่มีอะไรบอกเลย ร้านรู้ตัวตอนกดบันทึกไม่ได้ / ⭐ กดต่ออายุซ้ำไม่เกิดใบซ้ำ เดิมกด 5 ครั้ง = 5 ใบ · ตอนนี้บอกว่าติดใบไหนพร้อมทางออก / ⭐ ใบที่ยกเลิกเองแล้วปลุกกลับมาไม่ได้ (แนบสลิป/จ่ายบัตร/สร้าง QR ไม่ได้) / ⭐ สลิปที่ถูกปฏิเสธ ส่งใหม่แล้วแพ็คเกจสลับจริง เดิมอนุมัติผ่านแต่แพ็คเกจไม่เปลี่ยน / 🔴 ต่ออายุ/เปลี่ยนแพ็คเกจ/ยกเลิกใบชำระ เป็นสิทธิ์เจ้าของร้าน–ผู้ดูแลเท่านั้น (การแนบสลิปยังทำได้ทุกบทบาทโดยเจตนา ไม่งั้นร้านที่หมดอายุจ่ายเงินไม่ได้) / 🔴 ไฟล์ Excel ที่ส่งออก — ได้ครบทุกแถวของช่วงที่เลือกแล้ว เดิมรายงานยอดขาย ตัดที่ 200 แถวตายตัว และรายงานซ่อม/รับซื้อ/สต๊อก ตัดที่ 100 แถว ⇒ ร้านที่มีบิลเยอะกว่านั้นได้ไฟล์ไม่ครบ โดยหน้าจอขึ้นว่าสำเร็จ (วัดจริง: ร้านหนึ่งมี 523 บิลในเดือนเดียว แต่ไฟล์มีข้อมูล 200 แถว = 38%) · ตอนนี้ระบบดึงต่อจนครบทุกแถวเอง ไม่ต้องกดทีละหน้า · ไฟล์ใหญ่ขึ้นจึงใช้เวลาสร้างนานขึ้นเล็กน้อย ปุ่มจะหมุนรอ / ⭐ ถ้าไฟล์ยังไม่ครบด้วยเหตุใดก็ตาม ข้อความแจ้งจะเป็นสีส้มและค้างไว้ให้อ่าน (เดิมขึ้นเขียวว่า "N รายการ" เหมือนสำเร็จปกติ) — ให้ดูแถวคำเตือนสีแดงท้ายตารางในไฟล์ ว่าขาดไปกี่รายการ ก่อนนำตัวเลขไปทำบัญชีหรือยื่นภาษี / ⭐ ใบสั่งซื้ออะไหล่ที่ส่งคำสั่งไปแล้ว (SENT) กด "ยกเลิกใบสั่งซื้อ" ได้แล้ว — เดิมเหลือปุ่ม "รับเข้าอะไหล่" ปุ่มเดียว ร้านที่กดผิดหรือรายการยังไม่ครบ แก้เองไม่ได้เลย · การยกเลิก ไม่แตะสต๊อก / ⭐ ปุ่ม "รับเข้าอะไหล่" และ "ยกเลิกใบสั่งซื้อ" ต้องยืนยันก่อนทุกครั้ง เดิมกดปุ๊บทำงานปั๊บ — กดพลาดครั้งเดียวสต๊อกเพิ่มทันทีและ ยกเลิกไม่ได้อีก · กล่องยืนยันลิสต์ของที่จะเข้าคลังพร้อมจำนวนให้ดูก่อน ดู §5.4B.3 / 🔴 ไฟล์ Excel ที่โหลดไป — ช่องเงินเป็น ตัวเลขจริง แล้ว กด SUM() ได้ เดิมทุกช่องเงินถูกเขียนเป็น ข้อความ ⇒ รวมทั้งคอลัมน์ในโปรแกรมบัญชี ได้ 0 มาตลอดโดยไม่มีอะไรฟ้อง · และ หัวคอลัมน์ VAT บอกอัตราจริงของร้าน (ร้านที่ตั้ง 3% เคยได้ไฟล์ที่เขียน VAT 7% ไปยื่นสรรพากร) · ช่องที่ไม่ทราบค่าเว้นว่าง ไม่ใช่ 0 · ไฟล์ที่ข้อมูลถูกตัดมี แถวคำเตือนอยู่ในไฟล์ ไม่ตัดเงียบ · ตอนนี้ไฟล์สร้างที่เซิร์ฟเวอร์ จึงใช้เวลาสักครู่และปุ่มจะหมุนรอ · ปุ่มส่งออกของหน้าผลนับสต๊อกกลับมาใช้ได้แล้ว (เดิมส่งพารามิเตอร์ผิดชื่อ) / ⭐ กราฟยอดขายรายเดือนบนหน้า ภ.พ.30 หักเงินคืนแล้ว — เดิมสูงกว่ายอดสรุปบนจอเดียวกันเท่ายอดคืนเงินทั้งงวด ⇒ แจ้งภาษีขายเกิน ร้านเสียเงินเอง / ⭐ ภ.พ.30 — เงินคืนโผล่ในตารางแล้ว (แถว "ใบลดหนี้") เดิมการ์ดสรุปหักเงินคืนให้แล้ว แต่ตารางไม่มีแถวเงินคืนเลย ⇒ ร้านที่รวมคอลัมน์เองหรือรวมจากไฟล์ Excel จะได้ ภาษีขายสูงกว่าจริงเท่ายอดเงินคืนของเดือนนั้น · ตอนนี้มีแถว ใบลดหนี้ ยอดและ VAT ติดลบ ลงวันที่ วันคืนเงินจริง อ้างเลข CN-… + บิลเดิม + เหตุผล (ม.86/10) · 🔴 ตัวเลขบนการ์ดสรุปไม่ขยับสักช่อง ดู §11A.4 / ⭐ การส่งออก Excel ถูกบันทึกใน "บันทึกกิจกรรม" แล้ว — เดิมโหลดไฟล์ข้อมูลลูกค้า/ยอดขายออกไป ไม่มีร่องรอยที่ไหนเลย · 🔴 แต่บันทึกนี้บอกได้แค่ "ใครกดปุ่มบนจอ" ไม่ได้บอกว่า "ข้อมูลออกจากระบบทางไหนบ้าง" ดู §14.5 / 🔒 ส่วน "ต้นทุน/กำไร รายชิ้น" และปุ่ม Excel ของหน้า "ยอดรับเงินวันนี้" ย้ายไปอยู่แพ็คเกจ Professional ขึ้นไป — ร้าน Starter เห็นปุ่มเป็นสีเทาพร้อมป้าย (PRO+) ปุ่มยังอยู่ที่เดิมไม่ได้ถูกซ่อน · 🔴 ตัวเลขปิดร้านและ "ต้นทุนรวม / กำไรขั้นต้น" ของทั้งวัน ไม่ถูกจำกัด ทุกแพ็คเกจเห็นเหมือนเดิมทุกช่อง · ช่วงทดลองใช้เปิดครบทุกฟีเจอร์ตามเดิม ดู §14 / ⭐ หน้า "ยอดรับเงินวันนี้" กดที่บิลดู ต้นทุนและกำไรรายชิ้น ได้แล้ว — ต่อจากรอบที่ใส่ต้นทุนรวมไป ร้านถามต่อว่า "แยกเป็นรายการได้มั้ยครับ ให้รู้ว่าแต่ละชิ้นที่ขายไป ต้นทุนเท่าไหร่" · กดลูกศรหน้าแถวบิลแล้วเห็น ราคาขาย · ต้นทุน · กำไร ของแต่ละชิ้น · งานซ่อมแยกอะไหล่ออกจากค่าแรงคนละบรรทัด · มีปุ่ม "กางทั้งหมด" และปุ่ม Excel โหลดไฟล์รายชิ้นไปทำบัญชีต่อ · บนมือถือเป็นปุ่ม "ดูต้นทุนรายชิ้น" ในการ์ดแต่ละใบ · 🔴 หน้าจอแยก "ต้นทุน ฿0.00" (ร้านยังไม่กรอก) ออกจาก "ไม่ทราบต้นทุน" (ระบบไม่มีให้เลย) — อย่างหลังจะถูกนับเป็นกำไรเต็มจำนวน ⇒ กำไรจริงต่ำกว่าที่แสดง และระบบขึ้นแถบเตือนบอกไว้ · ⚠️ บิลที่รับเครื่องเก่าแลก ผลรวมรายชิ้นจะไม่เท่ายอดบิล เพราะยอดบิลคือเงินที่รับจริง ส่วนรายชิ้นคือราคาขาย — มีบรรทัดอธิบายส่วนต่างให้แล้ว ดู §6.11 / ⭐ หน้า "ยอดรับเงินวันนี้" แสดง ต้นทุน และ กำไรขั้นต้น แล้ว — ร้านแจ้งว่าเวลาสรุปยอด ไม่มีต้นทุนโชว์เลย ทั้งฝั่งยอดขายและหน้ายอดรับเงิน · ตอนนี้มี ต้นทุนสินค้า และ ต้นทุนงานซ่อม แยกก้อนกัน พร้อม กำไรขั้นต้น และ อัตรากำไร ของวันนั้น · 🔴 ตัวเลขคิดจากฐานเดียวกับยอดรับเงิน คือ "วันที่รับเงินจริง" ไม่ใช่วันที่ปิดงาน ⇒ งานซ่อมที่ปิดเมื่อวานแต่มาเก็บเงินวันนี้ ต้นทุนจะมาอยู่วันนี้ให้ตรงกับเงินที่รับ · ⚠️ ระบบจะขึ้น หมายเหตุใต้ตัวเลข เมื่อมีรายการที่ต้นทุนไม่แน่นอน เช่น "ต้นทุนอุปกรณ์เสริม N รายการ ใช้ราคาต้นทุนล่าสุดของสินค้า ไม่ใช่ต้นทุน ณ วันที่ขาย" หรือ "อะไหล่ N รายการ ไม่มีต้นทุนจากคลัง ระบบใช้ราคาที่คิดลูกค้าแทน" ⇒ อ่านหมายเหตุก่อนเอากำไรไปตัดสินใจ เพราะบางรายการระบบไม่มีต้นทุนจริงให้หัก · และ คอลัมน์ "เลขที่" กว้างขึ้น ไม่ตกบรรทัดอีกแล้ว ดู §14 / ⭐ หน้าคลังสินค้าแสดง "ซื้อจาก" และกรองได้แล้ว — เดิมช่อง "ซื้อจาก" มีเฉพาะตอน เพิ่ม/แก้ไขสินค้า แต่ในรายการมองไม่เห็นเลย ว่าเครื่องไหนซื้อมาจากใคร · ตอนนี้มี คอลัมน์ "ซื้อจาก" ในตาราง (พร้อมเบอร์โทรใต้ชื่อ) และ บรรทัด "ซื้อจาก" บนการ์ดมือถือ · แยกด้วยสีให้เห็นชัด: ร้านส่ง = ฟ้า · ลูกค้าที่เอามาขาย = ม่วง · ยังไม่ระบุ = เทา · และมี ตัวกรอง "ซื้อจาก" ให้เลือกได้ทั้งแบบกว้าง (ระบุแล้ว / ร้านส่ง / ลูกค้า / ยังไม่ระบุ) และ เจาะจงรายชื่อ — พิมพ์ค้นหาได้ ระบบค้นจากเซิร์ฟเวอร์จึงเจอครบแม้ร้านมีผู้จัดหาหรือลูกค้าหลายร้อยราย · เลือกแล้วมีแถบบอกว่ากำลังกรองใครอยู่ + ปุ่มล้าง ดู §3.1 / ⭐ ตัวเลขในหน้า "ผู้จัดหา (Suppliers)" กดดูรายละเอียดได้แล้ว — เดิมหน้านั้นบอกว่าผู้จัดหา "ผูกกับอะไหล่ มือถือ และอุปกรณ์เสริม" แต่เห็นได้แค่ จำนวน กดอะไรไม่ได้เลย (ร้านถามเข้ามาว่าต้องไปดูเมนูไหน) · ตอนนี้แตะที่ป้ายจำนวนได้เลย: อะไหล่ → พาไปหน้า คลังอะไหล่ ที่กรองเฉพาะร้านส่งรายนั้น · มือถือ / อุปกรณ์เสริม → พาไปหน้า ประวัติการซื้อเข้า ซึ่งมี ยี่ห้อ-รุ่น · IMEI · ต้นทุน · วันที่ · สาขา ครบ · หน้าปลายทางมี ทางกลับไปหน้าผู้จัดหา อยู่มุมบน (ไม่ต้องกด back ของเบราว์เซอร์) พร้อมแถบบอกว่ากำลังกรองร้านส่งรายไหน จำนวนเท่าไร และปุ่มล้างตัวกรอง · การ์ดบนมือถือแสดงจำนวนของที่ซื้อได้แล้ว — เดิมไม่แสดงเลยแม้แต่ตัวเลข · ถ้ารหัสผู้จัดหาผิดหรือถูกลบไปแล้ว จะขึ้นแถบสีส้มบอกตรง ๆ ไม่ใช่หน้าว่างเปล่า ดู §5.4B / ⭐ หน้า "ออกเอกสาร" ดูงานซ่อมย้อนหลังได้ครบทุกหน้าแล้ว — เดิมเปิดมาเห็นได้ แค่ 50 งานล่าสุดเท่านั้น งานที่เก่ากว่านั้นหาไม่เจอเลยถ้าจำชื่อลูกค้าหรือเบอร์ไม่ได้ และไม่มีอะไรบอกว่ายังมีงานเหลืออีก · ตอนนี้มีปุ่มเลขหน้าใต้ตาราง เลือก 10/25/50/100 ต่อหน้า ได้ และตัวเลขบอก จำนวนงานทั้งหมดจริง ๆ (เช่น "1–50 / 389") · เปลี่ยนคำค้น/สถานะ/สาขา แล้วเด้งกลับหน้า 1 ให้เอง · หน้าแรกที่เห็นตอนเปิดยังเหมือนเดิมทุกประการ ดู §5.6 / ⭐ ใบที่กดออกไม่สำเร็จ เลิกกินเลขที่เอกสารแล้ว — เดิมถ้ากดออก ใบเสร็จรับเงิน ให้งานที่ยังไม่ได้ลงค่าแรง/อะไหล่ ระบบจะปฏิเสธก็จริง แต่เลขที่เอกสารเดินไปแล้ว 1 เลข ⇒ เลขที่ใบเสร็จขาดหายเป็นช่วง ๆ ซึ่งเป็นปัญหาตอนตรวจบัญชี · ตอนนี้ใบที่ถูกปฏิเสธ ไม่กินเลขอีกแล้ว · และกดปุ่มออกใบรัว ๆ หรือกดพร้อมกัน 2 เครื่อง จะได้ ใบเดียว พร้อมข้อความไทยบอกว่าออกไปแล้ว แทนที่จะได้ใบซ้ำหรือข้อความ "เกิดข้อผิดพลาดภายในระบบ" · ใบที่ออกไปแล้วและเลขเดิม ไม่ถูกแตะเลย ดู §5.6 / ⭐ ให้ลูกค้าเซ็นรับทราบผลตรวจเช็คเครื่องบนหน้าจอได้แล้ว — ร้านแจ้งว่าช่างเทสต์เครื่องแล้วแจ้งลูกค้า แต่ไม่มีการลงชื่อของลูกค้าว่ารับทราบผลก่อน/หลังซ่อม · ตอนนี้ในหน้าต่าง "เปรียบเทียบก่อน/หลังซ่อม" มีช่องให้ ช่างและลูกค้าเซ็นบนจอ (ใช้นิ้วเซ็นบนแท็บเล็ตได้ ไม่ต้องพิมพ์กระดาษเพิ่ม) · กดบันทึกแล้ว ลายเซ็นถูกล็อกเป็นหลักฐาน แก้ไม่ได้ และได้เลขที่เอกสาร · มีปุ่ม "ดาวน์โหลด PDF" ที่มีลายเซ็นทั้ง 2 ฝ่ายอยู่บนกระดาษ ส่งให้ลูกค้าได้เลย · ถ้ามีคนแก้ผลเช็คทีหลัง จอจะยังแสดงฉบับที่ลูกค้าเซ็นรับ พร้อมแถบเตือน · เซ็นผิดยกเลิกได้ (เจ้าของร้าน/ผู้ดูแล + ต้องใส่เหตุผล) ดู §5.5 / ⭐ หน้า "บันทึกการตรวจสอบ" ดูย้อนหลังได้ครบทุกหน้าแล้ว — เดิมเปิดมาเห็นได้ แค่ 25 รายการล่าสุดเท่านั้น ปุ่มเลขหน้ากดแล้วไม่มีอะไรเกิดขึ้น และช่อง "ต่อหน้า" ตั้งเป็น 100 ก็ยังได้ 25 เท่าเดิม (ร้านแจ้งเข้ามา) · ตอนนี้กดเลขหน้าได้จริง เลือก 10/25/50/100 ต่อหน้าได้ และตัวเลขท้ายตารางบอกจำนวนทั้งหมดจริง ๆ · เปลี่ยนตัวกรองแล้วเด้งกลับหน้า 1 ให้เอง ดู §14.5 / ⭐ ร้านเปิดสิทธิ์ "ใบแจ้งหนี้ B2B" ให้ผู้จัดการเองได้แล้ว — งานเอกสาร (ดู/สร้าง/แก้/ออกใบ/ดาวน์โหลด PDF) เปิดให้ได้ แต่ งานเงิน (รับชำระ · คืนเงิน · ลบใบ) ยังเป็นเจ้าของร้าน/ผู้ดูแลเท่านั้น · ร้านที่ไม่ได้เข้าไปติ๊ก ไม่มีอะไรเปลี่ยน ดู §14.2 / ⭐ รอบนับสต๊อกเลิกลากรายการที่ปิดการนับสต๊อกเข้ามาแล้ว — เดิมเปิดรอบนับแล้วใบนับ มีของที่ร้านตั้งไว้ว่า "ไม่ต้องนับ" ปนมาด้วย พนักงานเดินนับแล้วกรอกเลขลงไป แต่ระบบข้ามทิ้งตอนกดปิดรอบโดยไม่บอกอะไร = เสียแรงฟรี ดู §3.3 / ⭐ เพิ่มลูกค้าใหม่ได้จากช่อง "ซื้อจาก" เลย — คนที่เอาเครื่องมาขายครั้งแรกยังไม่มีในระบบ เดิมต้องออกจากฟอร์มไปหน้าลูกค้าแล้วของที่กรอกค้างไว้หาย ตอนนี้กรอกชื่อ+เบอร์ตรงนั้นได้เลย ดู §3.1 / §3.2 / ⭐ เมนู "ผู้จัดหา (Suppliers)" เปิดถึงระดับผู้จัดการแล้ว — เท่ากับหน้า "ข้อมูลหลัก" และเลิกผูกกับสิทธิ์งานซ่อม เพราะผู้จัดหาใช้กับมือถือ/อุปกรณ์เสริมด้วยแล้ว ดู §5.4B / ⭐ บันทึกได้แล้วว่าซื้อมือถือ/อุปกรณ์เสริมชิ้นนี้มาจากใคร — ตอนเพิ่ม/แก้ไขสินค้าที่หน้าสต็อกมือถือและอุปกรณ์เสริม มีช่อง "ซื้อจาก" ให้เลือกเป็นชิป ไม่ระบุ / ผู้จัดหา (ร้านส่ง) / ลูกค้า (รับซื้อต่อจากลูกค้าโดยตรง) — เลือกได้อย่างมากทีละอย่าง และเพิ่มผู้จัดหาใหม่จากในช่องนี้ได้เลยไม่ต้องออกไปหน้าอื่น (ฝั่งลูกค้าเลือกจากรายชื่อที่มีอยู่แล้วในระบบ) · ดูย้อนหลังทั้งหมดได้ที่เมนูใหม่ "ประวัติการซื้อเข้า" ในแถบเมนูซ้าย ดู §3.1 / §3.2 / §5.4B.4 ⚠️ เก็บนับจากวันที่เปิดใช้ฟีเจอร์นี้เป็นต้นไปเท่านั้น สินค้าเก่าที่มีอยู่แล้วในระบบไม่มีข้อมูลผู้ขายให้ย้อนดู (ไม่ได้ backfill ย้อนหลังให้) / ⭐ ดาวน์โหลดใบแจ้งหนี้เป็นไฟล์ PDF ส่งให้ลูกค้าได้แล้ว — เดิมออกใบแล้วส่งให้ลูกค้าจากในระบบไม่ได้เลย ตอนนี้เปิดใบแล้วกด "ดาวน์โหลด PDF" ได้ไฟล์ที่แนบอีเมล/LINE หรือพิมพ์ได้ทันที · ใบที่ยกเลิกแล้วจะมีแถบบอกบนกระดาษว่าใช้เรียกเก็บเงินไม่ได้ · ร้านที่ไม่ได้จด VAT จะไม่มีบรรทัดภาษีบนเอกสาร ดู §6.9 / ⭐ ใบแจ้งหนี้เลือกได้เฉพาะเครื่องของสาขาที่ออกใบ — เดิมช่องค้นหามือถือในหน้าออกใบแสดงเครื่องของทุกสาขา พอออกใบแล้วเครื่องถูกตัดออกจากคลัง ของสาขาอื่น ทำให้มูลค่าสต๊อกสาขานั้นลดโดยไม่มีอะไรบอก · ตอนนี้เห็นเฉพาะเครื่องของสาขาที่เลือกอยู่ และถ้าเผลอใส่เครื่องข้ามสาขา ระบบจะบอกว่าต้องโอนเครื่องมาก่อน ดู §6.9 / ⭐ ปุ่มลัด "บันทึกเงินเข้าลิ้นชัก" กดซ้ำแล้วไม่บันทึกซ้ำ — เงินก้อนเดียวบันทึกเข้าลิ้นชักได้ครั้งเดียวเท่านั้น กดซ้ำจะขึ้นว่า "บันทึกไปแล้ว" แทนที่จะเพิ่มยอดอีกรอบ ดู §6.9 / ⭐ นัดวัน–เวลารับเครื่องได้ตั้งแต่ตอนรับซ่อม — แยกเป็น 2 ช่อง: วันนัด + เวลานัด (ช่องเวลาพิมพ์ตัวเลขล้วน 1430 → 14:30 · ใช้ได้ทั้งบนคอมและแท็บเล็ต) หรือแตะชิป วันนี้ / พรุ่งนี้ / +2 / +3 / +7 วัน · ไม่บังคับกรอก · พิมพ์ลงใบรับซ่อมและขึ้นที่หน้าติดตามงานออนไลน์ที่ลูกค้าเปิดดูเอง · เลื่อนนัดได้ตลอด (ใบที่ออกไปแล้วยังพิมพ์วันเดิม โดยตั้งใจ) · เลยนัดมีป้ายส้มเตือนเฉพาะงานที่ยังซ่อมไม่เสร็จ ดู §5.1** / ⭐ พิมพ์ฉลาก Barcode แล้วสแกนได้จริง — เดิมบาร์โค้ดที่พิมพ์ออกมาสแกนไม่ได้ (QR สแกนได้ปกติ) เพราะระบบย่อรูปบาร์โค้ดลงเงียบ ๆ จนแท่งแคบเกินและไม่มีขอบขาวรอบโค้ด · ตอนนี้ระบบคำนวณความกว้างแท่งให้ลงตัวกับหัวพิมพ์ และ ถ้ารหัสยาวเกินฉลากขนาดนั้น จะบอกก่อนพร้อมแนะนำขนาดที่ใช้ได้ แทนที่จะพิมพ์ของที่สแกนไม่ได้ออกมา · มีลิงก์ "พิมพ์แล้วสแกนไม่ได้?" ใต้ปุ่มพิมพ์ ดู §3.2A** / ⭐⭐ ใบแจ้งหนี้ B2B — ออกใบแล้วสต๊อกลดจริง และเงินที่รับเข้ารายงานรายได้/ภาษีแล้ว — เดิมออกใบขายมือถือไปแล้วเครื่องยังขึ้นว่า "พร้อมขาย" และขายซ้ำได้ · อุปกรณ์เสริมไม่ถูกตัดจำนวน · และเงินที่รับไม่โผล่ในรายงานการเงินเลยสักบาท · ตอนนี้ตัดสต๊อกตอนออกใบ · ของไม่พอออกใบไม่ได้ · ยกเลิกแล้วคืนของ (ติ๊กปิดได้) · รายได้เข้ารายงานตามเกณฑ์ของร้าน · VAT นับตอนออกใบเสมอ · เพิ่มยอด ลูกหนี้การค้า ดู §6.9** / ⭐ รายชื่อลูกค้าแสดงทั้งร้าน ไม่แยกสาขาแล้ว — เดิมกรองตามสาขาที่เลือกบนหัวจอ ทำให้ลูกค้าที่บันทึกไว้ที่สาขาอื่นหายจากรายการ (ร้านหนึ่งเห็น 214 จาก 328 คน) และเลือก "ทุกสาขา" แล้วหน้าว่างเปล่า · ยอดซื้อสะสมหักเงินคืนแล้ว ดู §8 / ⭐ รายงานสินค้าคงเหลือ — เลือกดูทีละสาขาได้แล้ว และใบที่พิมพ์ออกมาก็บอกสาขา · ช่องเลือกช่วงวันที่หายไปจากรายงานนี้ โดยตั้งใจ ดู §11.0A / ⭐⭐ ตั้งสิทธิ์ของแต่ละบทบาทได้เองจากหน้าจอแล้ว — ไปที่ ตั้งค่า → "สิทธิ์ตามบทบาท" (เจ้าของร้าน/ผู้ดูแลระบบ) ติ๊กได้ 10 กลุ่มงาน × 6 บทบาท · กดบันทึกแล้วมีหน้าต่างสรุปให้ตรวจก่อน** ว่ากำลังจะ ถอน สิทธิ์ใครบ้าง (กล่องส้ม) และ เพิ่ม ให้ใครบ้าง (กล่องเขียว) · ระบบไม่ยอมให้ตั้งจนล็อกตัวเองออก · ร้านที่ไม่เข้าไปแตะ = สิทธิ์เหมือนเดิมทุกอย่าง ดู §14.2** / 🔒 จำกัด "การสลับสาขา" ได้แล้ว — เดิมทุกบทบาทเปลี่ยนสาขาบนหัวจอได้ พนักงานที่เผลอเลือกสาขาอื่นค้างไว้จะบันทึกงานเข้าสาขานั้นโดยไม่รู้ตัว · ปิดสิทธิ์นี้แล้วเขาจะเห็นป้ายชื่อสาขาพร้อมแม่กุญแจแทนช่องเลือก (ยังรู้ว่าตัวเองอยู่สาขาไหน) และระบบดึงกลับสาขาตั้งต้นให้เอง** ถ้าเคยสลับไปค้างไว้ · ค่าเริ่มต้นยังเป็น "ทุกบทบาทสลับได้" เหมือนเดิม ดู §14.2** / ⭐ เพิ่ม/แก้ผู้ใช้ — คัดลอกสิทธิ์จากพนักงานคนอื่นได้ในคลิกเดียว เลือกชื่อคนที่ทำงานตำแหน่งเดียวกัน ระบบเติมช่อง "บทบาท" ให้ · เห็นก่อนว่าจะได้อะไร · สาขาไม่คัดลอกอัตโนมัติ (มีช่องติ๊กแยก) · คัดลอกบทบาทที่สูงกว่าสิทธิ์ตัวเองไม่ได้ ดู §14.2 / ⭐ หน้า "งานช่าง" — งานที่ช่างรับมาจากสาขาอื่น ไม่หายจากหน้าจออีกแล้ว — เดิมหน้านี้แสดงเฉพาะงานของสาขาที่เลือกอยู่บนหัวจอ ⮕ ช่างที่ไปช่วยอีกสาขาแล้วรับงานกลับมา งานนั้นหายจากหน้าจอเขาทั้งใบ · ตอนนี้แท็บ "งานของฉัน" ครอบทุกสาขาเสมอ และมีป้ายชื่อสาขากำกับทั้งบนการ์ดและในหน้าต่างรายละเอียด จะได้ไม่เดินไปหยิบเครื่องผิดสาขา · ใช้ได้ทันที ไม่ต้องตั้งค่า ดู §5.2 / ⭐ สิทธิ์ของแต่ละบทบาท ปรับให้เข้ากับร้านแต่ละร้านได้แล้ว — เดิมกำหนดตายตัวเหมือนกันทุกร้าน ตอนนี้กำหนดได้ว่าแต่ละบทบาทในร้านคุณเข้าถึงอะไรได้บ้าง (9 กลุ่มงาน) โดยไม่กระทบร้านอื่น · ⭐ ตั้งเองได้จากหน้าจอแล้ว (ตั้งค่า → สิทธิ์ตามบทบาท) · ร้านที่ยังไม่ได้แจ้งปรับ = สิทธิ์เหมือนเดิมทุกอย่าง ไม่มีใครได้หรือเสียสิทธิ์ · ปรับแล้วพนักงานเห็นผลตอนเปิดแอปครั้งถัดไป** ไม่ต้องออกจากระบบแล้วเข้าใหม่ ดู §1.4 และ §14.2** / 🔴 เพิ่ม/แก้ผู้ใช้ — "สาขา" กับ "บทบาท" เป็นช่องบังคับแล้ว เว้นว่างจะกดบันทึกไม่ผ่าน · เดิมเว้นได้ แล้วได้บัญชีที่รายการหายจากทุกหน้าจอที่กรองตามสาขา หรือเข้าระบบได้แต่เปิดเมนูไม่ได้เลยสักเมนู · ร้านที่มีสาขาเดียว ระบบเลือกสาขาให้อัตโนมัติ ไม่ต้องกด · บัญชีเก่าที่ยังไม่มีสาขา พอเปิดแก้ไขจะต้องเลือกสาขาก่อน (ตั้งใจให้เป็นแบบนั้น · บัญชีเดิมยังใช้งานได้ตามปกติ) ดู §14.2 / 🔒 หน้า "กะการขาย" จำกัดบทบาทแล้ว — เข้าได้เฉพาะ เจ้าของร้าน · ผู้ดูแลระบบ · ผู้จัดการ · แคชเชียร์ · พนักงานขาย (รวมช่างขาย) · ช่างซ่อมที่มีบทบาทช่างอย่างเดียวเข้าไม่ได้แล้ว เดิมเมนูซ่อนอยู่ แต่พิมพ์ที่อยู่หน้าเว็บเข้ามาตรง ๆ ยังเปิดกะได้จริง · ครอบทั้งการเปิด-ปิดกะและการบันทึกเงินเข้า-ออกลิ้นชัก ดู §10B (ผลต่อการรับเงินค่าซ่อมที่เคาน์เตอร์ ดู §5.9) / ⭐ เอกสาร A4 ที่พิมพ์ออกมาได้ 2 แผ่น มีลิงก์บอกวิธีแก้แล้ว — กดลิงก์ "พิมพ์แล้วได้ 2 แผ่น?" ที่มุมซ้ายล่างของหน้าต่างตัวอย่างเอกสาร (หน้าเอกสารงานซ่อม และใบเคลมประกัน) · เดิมมีคำแนะนำเฉพาะสลิปความร้อน ส่วนเอกสาร A4 ไม่มีเลยทั้งที่ใบรับซ่อมและใบส่งคืนหลังเคลมเป็น 2 ใบที่ล้นจริง ดู §12.2 / ⭐ สาขาที่สร้างผิดลบออกได้แล้ว — เดิมสาขาที่สร้างผ่านหน้าจอลบถาวรไม่ได้เลยสักสาขา แม้เพิ่งสร้างและยังไม่เคยใช้ กดลบกี่ครั้งก็ได้แค่ "ปิดใช้งาน" แล้วค้างในตารางตลอดไป · ตอนนี้กล่องยืนยันจะบอกล่วงหน้าว่าจะลบถาวรหรือปิดใช้งาน และบอกว่าติดอะไรอยู่ ดู §14.1 / ⏳ บันทึกการใช้งาน (Audit Log) เก็บย้อนหลัง 365 วัน แล้วระบบลบรายการเก่ากว่านั้นให้เองทุกวัน — เดิมไม่เคยลบเลย สะสมจนหน้าช้าลง · ตั้งสั้นกว่า 90 วันไม่ได้ (ขั้นต่ำตามกฎหมาย) · ถ้าต้องใช้ย้อนหลังเกิน 1 ปี ให้ส่งออกเก็บเองก่อนครบกำหนด ดู §14.5 / 🔴 หน้า "เงื่อนไขเอกสาร" เลิกโกหกตอนเลือก "ทุกสาขา" — เดิมจะโชว์ข้อความมาตรฐานของระบบทุกใบ ซึ่งอ่านได้ว่า "ร้านนี้ไม่เคยแก้เงื่อนไขเลย" ทั้งที่แก้ไว้ครบ · และกดบันทึกขึ้นว่า "ไม่พบสาขา" ซึ่งชวนให้คิดว่าสาขาถูกลบ · ตอนนี้บอกตรง ๆ ให้เลือกสาขาก่อน ดู §12.0A / 🔴 เลือก "ทุกสาขา" ค้างไว้แล้วกดพิมพ์เอกสาร จะมีป้ายเตือน — เดิมกระดาษออกเป็นข้อความมาตรฐานเงียบ ๆ ทั้งที่ร้านตั้งเงื่อนไขเองไว้แล้ว · ใบเสร็จขาย/ใบรับซื้อจะอ่านเงื่อนไขจากสาขาของบิลใบนั้นเอง ดู §12.0A / 🔴 ติ๊ก "ใช้ทุกสาขา" ในรายการเช็คสภาพ เลือกได้เฉพาะตอนสร้างใหม่ — เดิมสลับตอนแก้ไขได้ และขึ้นว่าบันทึกสำเร็จ แต่ไม่มีอะไรเปลี่ยนจริงสักอย่าง ดู §5.5 / ⭐ บันทึกการใช้งาน (Audit Log) ครอบคลุมมากขึ้นกว่าเดิมเท่าตัว — เดิมหลายอย่างทำไปแล้วไม่เหลือร่องรอยเลย เช่น จ่ายเงินเดือน · ปรับยอดสต๊อกด้วยมือ · เปลี่ยนสิทธิ์ผู้ใช้ · แก้ VAT · ปิดตารางสำรองข้อมูล · ลบบิลพักที่มียอดเงิน · และตัวกรองในหน้านั้นเลิกโชว์ตัวเลือกที่กดแล้วไม่มีอะไร ดู §14.5 / 🔴 หน้าจอเลิกโกหกเรื่องลบสาขา — เดิมกดลบแล้วขึ้นเขียวว่า "ลบสาขาเรียบร้อย" เสมอ แต่กด F5 แล้วสาขากลับมา · ตอนนี้บอกตรง ๆ ว่าลบถาวรหรือแค่ปิดใช้งาน และบอกว่าติดอะไรอยู่ ดู §14.1 / ⭐ ใบเช็คสภาพที่เช็คครบแล้ว เปิดกลับมาดูได้แล้ว — เดิมปุ่มหายทั้ง 2 ปุ่ม ใบที่บันทึกเสร็จเปิดดูไม่ได้เลย ทั้งที่เป็นหลักฐานที่ต้องหยิบให้ลูกค้าดู ดู §5.5 / ⭐ เลือก "ทุกสาขา" แล้วรายการงานซ่อมและช่องเลือกยี่ห้อ/รุ่น/สถานะไม่ว่างเปล่าอีกแล้ว — เดิมช่องยี่ห้อว่างจนอ่านได้ว่าร้านยังไม่ได้ตั้งค่า ทั้งที่มีข้อมูลอยู่ครบ · ปุ่ม + ข้างช่องเลือกจะกดไม่ได้พร้อมบอกให้เลือกสาขาก่อน แทนที่จะขึ้นว่า "ไม่พบสาขา" / ⭐ ใบส่งคืนหลังเคลมพิมพ์พอดี 1 หน้าแล้ว (เดิม 2 หน้า) / 🔴 แก้บั๊กที่ทำให้เคลมประกันรอบที่ 2 ไม่ได้ — ลูกค้ากลับมาเคลมซ้ำ ร้านออกใบเคลมใบแรกไปแล้ว พอจะออกใบที่สอง ปุ่มเคลมหายไปเลย และค้นหาใบนั้นก็ไม่เจอ ขึ้นว่า "ไม่พบใบประกัน" ซึ่งดูเหมือนพิมพ์เลขผิด · เกิดกับใบที่ไม่ได้ระบุรายการย่อย** ซึ่งเป็นค่าตั้งต้นของฟอร์ม = ใบส่วนใหญ่ · ตอนนี้ตัวตัดสินคือ วันหมดประกัน อย่างเดียว เคลมกี่รอบก็ได้จนกว่าจะหมดอายุ ใบที่ยกเลิกยังเคลมไม่ได้เหมือนเดิม ดู §5.8** / 🔴 ใบส่งคืนหลังเคลมเลิกสัญญาว่าจะ "ขยายระยะประกัน" — เดิมพิมพ์ว่าร้านจะขยายประกันเพิ่มให้ นับจากวันส่งคืนเครื่อง ซึ่งระบบไม่เคยขยายให้จริงเลย** และพิมพ์ใบเดิมซ้ำคนละวันจะได้วันหมดคนละวัน · วันหมดประกันยึดตามใบแรกเสมอ มาเคลมกี่รอบก็หมดวันเดิม ดู §5.8** / ⭐ เช็คหลังซ่อม: รายการที่ก่อนซ่อมเลือก "ไม่เกี่ยวข้อง" ระบบยกมาให้เอง ไม่ต้องไล่กดใหม่ — เช่น "การชาร์จไร้สาย" บนเครื่องที่ไม่มีฟีเจอร์นี้ · "ปกติ"/"ไม่ปกติ" ไม่ยกมา เพราะเป็นผลการทดสอบที่ต้องเช็คใหม่ทุกครั้ง · ใบที่บันทึกไปแล้วเปิดกลับมาแก้จะเห็นค่าเดิม ไม่ถูกทับ ดู §5.5 / ⭐ รหัสปลดล็อกเครื่องแสดงในโมดัลเช็คลิสต์แล้ว — เดิมเวลาเทสต์เครื่องต้องปิดโมดัลไปดูรหัสแล้วกลับมาเปิดใหม่ ซึ่งเสียสิ่งที่กรอกค้างไว้ · ตอนนี้ขึ้นด้านบนของโมดัลทั้งก่อนและหลังซ่อม พร้อมปุ่มคัดลอก · ยังไม่พิมพ์ลงเอกสารใด ๆ เหมือนเดิม ดู §5.5 / ⭐ รายการเช็คขึ้นตามสาขาที่เลือกอยู่จริง — เดิมยึดสาขาที่ผูกกับบัญชีตอนเข้าสู่ระบบ สลับสาขาบนหัวจอแล้วรายการยังเป็นของสาขาเดิม ทั้งการดูและการเพิ่มรายการใหม่ · ร้านสาขาเดียวไม่มีอะไรเปลี่ยน ดู §5.5 / 🔴 แก้บั๊กที่ทำให้ "รับเข้า" ในหน้าโอนสินค้าระหว่างสาขาพังทุกครั้ง — ถ้าสาขาปลายทางมีของ รหัสเดียวกันแต่ชื่อสะกดต่างกัน (เช่น จอ A05S กับ A05S) ระบบจะขึ้น "เกิดข้อผิดพลาดภายในระบบ" และกดกี่ครั้งก็พังเหมือนเดิม แก้เองไม่ได้เลย · ตอนนี้จับคู่ด้วย รหัสสินค้าอย่างเดียว ชื่อไม่ตรงก็รับเข้าได้ จำนวนไปรวมกับรายการเดิม โดยไม่เขียนทับชื่อ/ราคาที่ปลายทางตั้งไว้ และระบบบอกบนจอว่าไปรวมกับรายการชื่ออะไร · ของไม่เคยหาย ทุกครั้งที่พังระบบย้อนรายการกลับครบ ใบยังอยู่สถานะ "กำลังโอน" ดู §3.4 / ⭐ มีช่องใส่รหัสปลดล็อกเครื่องลูกค้าแล้วที่หน้ารับเครื่อง — เดิมไม่มีช่องให้ใส่ ร้านจึงพิมพ์รวมไว้ในช่อง "อาการเสีย" ซึ่งทำให้รหัสไปโผล่บนใบรับซ่อมที่ลูกค้าถือกลับบ้าน ในไฟล์ Excel ที่ export และบนหน้าติดตามงานซ่อมออนไลน์ · ช่องใหม่ เก็บให้ช่างดูบนจอเท่านั้น ไม่พิมพ์ลงเอกสารใด ๆ ใส่ได้ทั้ง PIN รหัสตัวอักษร และรูปแบบลากนิ้ว · ล้างช่องแล้วรหัสถูกลบจริง ดู §5.1 / ⭐ หน้าติดตามงานซ่อมออนไลน์ไม่แสดง "อาการที่แจ้ง" และเบอร์โทรเต็มอีกแล้ว — เพราะใครก็ตามที่รู้เลขใบ (พิมพ์อยู่บนกระดาษและใน QR) แล้วเดา 4 ตัวท้ายเบอร์ได้ จะเห็นทุกอย่างที่ร้านพิมพ์ไว้ในช่องอาการ รวมถึงรหัสปลดล็อกเครื่อง · ลูกค้ายังเห็นสถานะ ราคา และผลวินิจฉัยจากช่างครบเหมือนเดิม ดู §5.7 / ⭐ ช่างคนไหนก็เช็คลิสต์เครื่องได้แล้ว ไม่ต้องเป็นช่างที่ซ่อมเครื่องนั้น — เดิมช่างเปิดหน้าเช็คลิสต์ได้แต่เห็นเฉพาะงานตัวเอง งานของช่างคนอื่นจึงไม่มีให้กดเลย · ถ้ามีคนเช็คไว้แล้วระบบจะเตือนก่อนพร้อมบอกว่าใครเช็คเมื่อไร และทุกการบันทึกทับถูกบันทึกไว้ใน Audit Log ว่าใครทับของใคร · หน้า "งานของฉัน" ยังกรองเหมือนเดิมทุกประการ ดู §5.5 / ⭐ บันทึกเงินเข้า/ออกลิ้นชักแล้วพิมพ์สลิปให้ + ลิ้นชักเปิดออกมาเอง — เปิดสวิตช์ที่หน้าตั้งค่า (แยกรายสาขา ค่าตั้งต้นคือปิด) · ลิ้นชักเสียบอยู่กับเครื่องพิมพ์สลิป ไม่ใช่คอมพิวเตอร์ จึงต้องพิมพ์ถึงจะเปิดได้ และต้องเปิดตัวเลือก Cash drawer ที่ไดรเวอร์เครื่องพิมพ์ 1 ครั้ง · เปิดแล้วลิ้นชักจะเด้งทุกใบที่พิมพ์ออกเครื่องสลิป รวมการพิมพ์ใบเสร็จเก่าซ้ำ ดู §10B.5 / ⭐ ใบประกันงานซ่อมใบเดียวรับประกันหลายรายการที่ระยะไม่เท่ากันได้แล้ว — เช่นเปลี่ยนจอรับประกัน 30 วัน เปลี่ยนแบตเตอรี่รับประกัน 1 ปี ในใบเดียวกัน · เดิมมีช่องระยะเวลาช่องเดียว ร้านต้องใส่ค่าที่ยาวสุดแล้วพิมพ์ที่เหลือลงในช่องความคุ้มครองเอง ซึ่งเป็นแค่ตัวหนังสือ ระบบไม่รู้จัก · กดปุ่ม "เติมจากรายการอะไหล่" ดึงชื่อมาให้แล้วใส่แค่จำนวนวัน · ไม่ใส่รายการเลย = ใบประกันแบบเดิมทุกอย่าง และใบเก่าที่ออกไปแล้วไม่กระทบ ดู §5.8 และ §12.2 / ⭐ เคลมประกันเลือกได้ว่าเคลมรายการไหน และเคลมรายการหนึ่งแล้วรายการอื่นยังใช้ต่อได้ — เดิมพออนุมัติเคลม ใบทั้งใบถูกปิด ของที่เหลือประกันอีก 300 กว่าวันเคลมไม่ได้อีกเลย · รายการที่หมดอายุแล้วจะเลือกไม่ได้พร้อมบอกว่าหมดเมื่อไร ดู §5.8 / ⭐ ปิดช่องที่เคยเคลมของที่หมดประกันไปแล้วได้สำเร็จ — เดิมระบบยอมรับการเคลมรายการที่พ้นระยะประกันไปแล้วโดยไม่เตือนอะไรเลย และใบประกันที่ยกเลิกไปแล้วถูกปลุกกลับมาใช้ได้ผ่านปุ่มส่งเคลมใหม่ ดู §5.8 / ⭐ หน้ารายการประกันบอกชื่อรายการที่ใกล้หมดจริง ๆ — เดิมโชว์เลขเดียวจากระยะที่ยาวที่สุด จอที่หมดไปแล้ว 10 วันจึงยังขึ้นว่า "เหลืออีก 325 วัน" ทำให้ร้านรับเคลมผิด ดู §5.8 / ⭐ ปิดงานซ่อมแล้วระบบตัดอะไหล่ออกจากคลังให้เอง ไม่ต้องกดปุ่มเบิกอีก — เดิมไม่เคยตัดให้เลย ต้องกดเองทุกครั้งและปุ่มไม่แสดงตอนรับงานใหม่ ทำให้ร้านลงอะไหล่ครบแต่สต๊อกไม่ลด · ของไม่พอก็ยังปิดงานได้ ระบบบอกว่าตัดไม่สำเร็จตัวไหนเพราะอะไร · กดปุ่มเบิกเองไปแล้วปิดงานทีหลังไม่ตัดซ้ำ ดู §5.2 / ⭐ ตั้งเวลาเข้า-ออกงานของร้านได้แล้ว — เดิมระบบตัดสิน "สาย" ที่ 09:00 และ "ออกก่อนเวลา" ที่ 17:00 ตายตัวแก้ไม่ได้ ร้านที่เปิด 10 โมงจึงเห็นพนักงานสายทุกคนทุกวัน · ตั้งเป็นค่ากลางทั้งร้านหรือแยกรายสาขาก็ได้ · ไม่เคยตั้ง = ใช้ 09:00–17:00 เหมือนเดิม ดู §9.1A / ⭐ แก้เวลาเข้า-ออกที่บันทึกไปแล้วได้จากหน้าลงเวลา — เดิมคู่มือเขียนว่าแก้ได้แต่ไม่มีปุ่มบนหน้าจอจริง ๆ · เจ้าของ/แอดมินเท่านั้น และทุกการแก้ถูกบันทึกว่าใครทำ ค่าเดิมคืออะไร ดู §9.1B / ⭐ ลำดับตั้งต้นของคลังอะไหล่ · อุปกรณ์เสริม · สต็อกมือถือ เปลี่ยนเป็นเรียงตามชื่อ — เดิมเรียงตาม "แก้ไขล่าสุด" ของที่เพิ่งแก้จึงเด้งขึ้นบนสุดตลอดเวลา เดินนับสต๊อกตามลำดับบนจอไม่ได้ · เลือกลำดับอื่นเองได้และระบบจำให้ / ⭐ ใบแจ้งหนี้ B2B คิด VAT ถูกต้องตามกฎหมายแล้ว — เดิม "บวก" VAT ทับยอด (1,000 + 70 = 1,070) ทั้งที่ราคาที่กรอกรวม VAT อยู่แล้ว = เก็บซ้ำ · ตอนนี้ระบบ ถอด VAT ออกจากยอดให้เอง โดยอ่านอัตราจากสาขา · สาขาที่ยังไม่จด VAT จะไม่มีบรรทัด VAT เลย และช่องกรอก VAT เองถูกเอาออก ดู §6.9 / ⭐ เลขที่ใบแจ้งหนี้ B2B เปลี่ยนเป็นขึ้นต้น SINV- — เดิมใช้ INV- ซ้ำกับใบแจ้งหนี้งานซ่อม ทำให้เอกสารคนละประเภทมีเลขเดียวกันได้ · ใบที่ออกไปแล้วเลขไม่เปลี่ยน ยังเป็น INV- เหมือนเดิม ดู §6.9 / ⭐ หน้าใบแจ้งหนี้ B2B เดินดูได้ทุกหน้าแล้ว — เดิมแสดง 50 รายการแล้วจบ ใบเก่ากว่านั้นเปิดดูไม่ได้เลย · เพิ่มแท็บ "เกินกำหนด" ที่ใช้งานได้จริง และใบร่างไม่ถูกนับในยอดเงินรวมอีก ดู §6.9 / ⭐ ปุ่มเปลี่ยนหน้าในหน้าประวัติการขาย · ค่าใช้จ่าย · กะการขาย · การคืนเงิน กดได้แล้ว — เดิมกดเลขหน้าแล้วไม่มีอะไรเกิดขึ้นเลย ข้อมูลหน้า 2 เป็นต้นไปจึงเข้าถึงไม่ได้ / ⭐ ยอดขายช่วงเที่ยงคืนถึง 7 โมงเช้าถูกนับเข้าวันที่ถูกต้องแล้ว — เดิมตกไปเป็นยอดของเมื่อวาน ทำให้กราฟรายได้และรายงานคลาดเคลื่อน · ตัวเลขบนกราฟและรายงานจะขยับหลังอัปเดต เพราะยอดกลับไปอยู่วันที่ถูก / ⭐ คืนเงินแล้วใบลดหนี้เปิดขึ้นให้ทันที — เดิมหน้าต่างปิดไปพร้อมกันทำให้ไม่มีโอกาสพิมพ์ใบลดหนี้ให้ลูกค้าเลย (เป็นเอกสารที่ต้องยื่นตามกฎหมาย) · และยอดที่หน้าจอแสดงตรงกับเงินที่จ่ายจริงทุกบาทแล้ว ดู §6.6 / ⭐ กดการ์ด "สินค้าสต็อกต่ำ" บนแดชบอร์ดแล้วหน้าคลังกรองให้ทันที — เดิมเด้งไปหน้าคลังแบบไม่กรอง ต้องไปไล่หาเองว่ารุ่นไหนคือรุ่นที่การ์ดเพิ่งบอก ดู §3.1 / ⭐ หน้าประวัติสต๊อกแสดงทิศทางถูกต้องแล้ว — การขายหรือเบิกของออกขึ้นเป็นตัวเลขติดลบสีแดง (เดิมบางรายการขึ้นเป็นบวกสีเขียวเหมือนของเข้า) และการปรับยอดลงไม่ขึ้นเป็นบวกอีก · จำนวนสต๊อกจริงถูกต้องมาตลอด ผิดเฉพาะการแสดงผลบนหน้าประวัติ ดู §3.1 และ §5.4 / ⭐ สลับสาขาขณะที่ยังมีของค้างในตะกร้า ระบบจะถามก่อนว่าจะล้างตะกร้าไหม — เดิมตะกร้าค้างข้ามสาขาโดยไม่มีอะไรบอก ทำให้ขายของของสาขาเดิมด้วยบิลที่ออกในนามสาขาใหม่ได้ ดู §6.1 / ⭐ ใบรับซื้อที่ค้างสถานะ "เข้าสต็อก" แต่ไม่มีเครื่องเข้าคลังจริง กู้เองได้แล้ว — เดิมใบแบบนี้แก้เองไม่ได้เลยและถูกซ่อนจากรายการตั้งต้นด้วย ตอนนี้ขึ้นป้ายเตือนพร้อมปุ่มกู้ และบอกสาเหตุที่กู้ไม่สำเร็จเป็นภาษาไทยพร้อมทางแก้ ดู §4 / ⭐ ยกเลิกงานซ่อมที่เบิกอะไหล่ไปแล้ว เลือกได้ว่าจะคืนของเข้าคลังหรือไม่ — ติ๊กช่อง "อะไหล่ถูกใช้ไปกับเครื่องลูกค้าแล้ว" เมื่อของใส่เข้าเครื่องไปจริงและคืนไม่ได้ · ค่าตั้งต้นคือคืนเข้าคลังเหมือนเดิม และงานที่ไม่ได้เบิกอะไหล่จะไม่ถามอะไรเพิ่ม ดู §5.3A / ⭐ ตัวเลขสต๊อกเชื่อถือได้ขึ้นทั้งระบบ — ทุกการเปลี่ยนจำนวนมีบรรทัดในประวัติเสมอ (เดิมการโอนระหว่างสาขา · รับของจากใบสั่ง · ลบบิล ไม่ทิ้งร่องรอยเลย) · 2 คนขายหรือเบิกของชิ้นสุดท้ายพร้อมกันไม่ทำให้ติดลบอีก · คืนอะไหล่ได้ไม่เกินที่เบิกไป · ยกเลิกงานซ่อมแล้วอะไหล่กลับเข้าคลังให้เอง · ปิดรอบนับหักของที่ขายไประหว่างวันให้ถูก ดู §3.3 และ §5.4 / ⭐ นับสต๊อกด้วยการยิงบาร์โค้ดได้แล้ว — ยิง 1 ครั้งบวก 1 ชิ้น ไม่ต้องพิมพ์ตัวเลขเอง ใช้ได้ทั้งเครื่องยิง USB และกล้องมือถือ · มือถือยิงซ้ำเครื่องเดิมจะบอกว่า "ยิงไปแล้ว" ไม่บวกซ้ำ · ปิดรอบนับแล้วเลือกได้ว่าจะปรับสต๊อกจริงตามที่นับหรือไม่ โดยดูรายการที่จะเปลี่ยนก่อนยืนยัน ดู §3.3 / ⭐ คัดลอกรายการอุปกรณ์เสริมและอะไหล่จากสาขาหนึ่งไปอีกสาขาได้ในคลิกเดียว — ดูก่อนได้ว่าจะเพิ่มกี่รายการ และจำนวนสต๊อกเริ่มที่ 0 เสมอ ดู §16.5 / ⭐ ปุ่ม "คัดลอกข้อมูลหลัก" ที่หน้าสาขาใช้งานได้แล้ว — เดิมกดแล้วขึ้นว่าไม่สำเร็จทุกครั้งโดยที่คำขอไม่เคยถูกส่งออกจากเครื่องเลย ดู §16.5 / ⭐ หน้า Audit Log แยกให้เห็นแล้วว่ารายการไหนทีมงานผู้ให้บริการเป็นคนทำ — เดิมขึ้นเป็นชื่อพนักงานร้าน ทำให้เข้าใจผิดว่าพนักงานเป็นคนแก้ ดู §14.5 / ⭐ เอกสาร A4 ทุกใบพิมพ์ออกมาคมขึ้น — เดิมตัวหนังสือเป็นเทาอมน้ำเงินที่เครื่องอิงค์เจ็ทต้องผสมหมึกหลายสีทับ และฟอนต์ Kanit ไม่เคยถูกโหลดตอนพิมพ์เลย · ใบรับซ่อมตัวใหญ่ขึ้นด้วย ดู §12.2 / ⭐ แก้เงื่อนไขท้ายเอกสารแล้ว เครื่องหน้าเคาน์เตอร์ที่เปิดหน้าค้างไว้ได้ข้อความใหม่เองใน 45 วินาที ไม่ต้องกดรีเฟรช และมีป้ายเตือนถ้าโหลดเงื่อนไขไม่ได้ ดู §12.0A / ⭐ เน็ตหลุดแล้วรู้ตัวทันที — มีแถบเตือน และตอนกดบันทึกจะบอกชัดว่า "ยังไม่บันทึกแน่นอน กดใหม่ได้" หรือ "ไม่แน่ใจ อย่าเพิ่งกดซ้ำ" ดู §16.4 / ⭐ หน้านโยบายความเป็นส่วนตัวและเงื่อนไขการใช้บริการเป็นภาษาไทยทั้งฉบับแล้ว พร้อมเพิ่มหัวข้อขั้นตอนเมื่อเกิดเหตุข้อมูลรั่วไหล — เปิดอ่านได้ที่ /privacy และ /terms / ⭐ เลือก "ทุกสาขา" ค้างไว้แล้วกดเพิ่มอะไหล่/อุปกรณ์เสริม ระบบบอกให้เลือกสาขาก่อน แทนที่จะขึ้นหน้าขาว + กันของไปตกอยู่สาขาของอีกร้านเมื่อสลับบัญชี ดู §16.2 / ⭐ ใบเสร็จขายหน้า POS พิมพ์ออกเครื่องความร้อนแล้วอ่านออกทุกบรรทัด — เดิมบรรทัดเล็กเป็นสีเทาซึ่งเครื่องพิมพ์ความร้อนพิมพ์ไม่ได้ ดู §12.2 / ⭐ ร้านที่กรอกอีเมลลูกค้าไว้ จะได้รับแจ้งทางอีเมลทุกครั้งที่สถานะเปลี่ยน รวมตอนกดปุ่มเดินสถานะ (เดิมส่งเฉพาะตอนแก้ผ่านหน้าต่างแก้ไข) — แต่ลูกค้าร้านมือถือแทบไม่ให้อีเมล ช่องทางหลักยังเป็น QR ติดตามสถานะบนใบรับซ่อม ดู §5.3A / ⭐ ระบุชัดแล้วว่าประกันงานซ่อมเริ่มนับจาก "วันที่กดออกใบประกัน" ไม่ใช่วันที่ลูกค้ามารับเครื่อง — มีกล่องเตือนให้เองถ้าออกใบตอนที่ยังไม่ได้ส่งมอบ ดู §12.2 / ⭐ แก้คำอธิบายโหมดเก็บเงินค่าซ่อมที่หน้าตั้งค่าให้ตรงความจริง — โหมด "เก็บที่เคาน์เตอร์ซ่อม" เงินเข้ายอดปิดกะด้วย ดู §6.10 / ⭐ เดินสถานะงานซ่อมจากแถวรายการได้เลย ไม่ต้องเปิดหน้าต่างแก้ไข — ขั้นกลางกดทีเดียวเปลี่ยนทันที ส่วน "ส่งมอบแล้ว" ถามยืนยันเสมอ ดู §5.3A / ⭐ ใบเสร็จค่าบริการพิมพ์ภาษาไทยได้แล้ว และเปลี่ยนหัวเอกสารเป็น "ใบเสร็จรับเงิน/RECEIPT" ให้ตรงตามข้อกำหนดสรรพากร ดู §12.3B / ⭐ ข้อความตอนสร้างสาขา/ผู้ใช้/สินค้าเกินโควตา บอกชัดแล้วว่าเป็นเพราะยังทดลองใช้อยู่ และทางออกคืออะไร ดู §1.5 / ⭐ ยอดที่หน้าจอแสดงตอนเปลี่ยนแพ็คเกจ = ยอดที่เรียกเก็บจริง พร้อมแจกแจงที่มาของยอด + ยกเลิกรายการที่ยังไม่ได้ชำระเองได้ + แจ้งเตือนเมื่อทีมงานยกเลิกให้ ดู §13.0 / ⭐ บัญชีจะถูกสร้างหลังยืนยันอีเมลสำเร็จเท่านั้น + ช่วงทดลอง 14 วันเริ่มนับจากวันที่ยืนยัน ดู §2.1 / ⭐ ชำระค่าบริการด้วยบัตรเครดิตได้แล้ว — ยืนยันอัตโนมัติ ไม่ต้องแนบสลิป (PromptPay ยังเป็นค่าตั้งต้นเหมือนเดิม) ดู §12.3A / ⭐ ระบบสำรองข้อมูลครอบไฟล์ที่อัปโหลดแล้ว (รูปเครื่อง · สำเนาบัตร · ลายเซ็น) + เข้ารหัส + ส่งออกนอกเครื่อง + แจ้งเตือนเมื่อสำรองหยุดทำงาน ดู §17.4 / ⭐ รองรับแพ็คเกจแบบตกลงราคาเฉพาะร้าน — ซ่อนจากหน้าราคาสาธารณะแต่ต่ออายุได้ปกติ และกันการเผลอเปลี่ยนไปแพ็คเกจที่โควตาน้อยกว่า ดู §1.5 / ⭐ บันทึกเงินที่หยิบเข้า-ออกลิ้นชักได้แล้ว เช่นค่าส่ง — ปิดกะไม่ขึ้นว่าเงินขาดอีก ดู §10B.5 / ⭐ วิธีตั้งเบราว์เซอร์ก่อนพิมพ์สลิปครั้งแรก — ต้องเอาติ๊ก "ส่วนหัวและส่วนท้าย" ออก ไม่งั้นกระดาษยาวเกินทุกใบ ดู §12.2 / แก้ใบเสร็จสลิปพิมพ์กระดาษยาวเกิน — ตอนนี้พิมพ์เท่าเนื้อหาเท่านั้น / ตั้งความกว้างกระดาษใบเสร็จได้ 58 หรือ 80 มม. ที่หน้าตั้งค่า — ดู §12.2 / ช่วงทดลองใช้ 14 วันเปิดครบทุกฟีเจอร์ โควตาเท่าแพ็คเกจมืออาชีพ — ดู §1.5 / แก้หน้างานช่างขึ้นว่าไม่มีงานทั้งที่มีงานอยู่ / ใบกำกับภาษีงานซ่อมแสดง VAT แบบถอดออกจากยอด ตรงกับเงินที่รับจริง / จ่ายหลายช่องทางในบิลเดียว + รองรับโครงการรัฐร่วมจ่าย ไทยช่วยไทยพลัส 60/40 — ดู §6.13 / แก้ปุ่ม "งานซ่อมรอชำระ" ไม่ขึ้นทั้งที่ตั้งโหมด POS ไว้แล้ว — ระบบอ่านค่าจริงใหม่ทุกครั้งที่เข้าใช้งาน / ใบเสร็จพิมพ์ซ้ำแสดงชื่อรายการค่าซ่อมแล้ว ไม่ขึ้น "-" อีก / ตะกร้า POS ไม่มีแถบเลื่อนแนวนอนทุกความกว้างหน้าจอ / ปุ่มกลับขึ้นบนสุดใช้งานได้ครบทุกหน้ารวมฝั่งผู้ดูแลระบบ / หน้าตั้งค่าแยกปุ่มบันทึกเป็น 2 ปุ่มตามขอบเขต / แก้วันที่ลงเวลาทำงานถอยไป 1 วัน / ส่งคืนเครื่องโดยยังไม่ลงราคา ไม่ถูกนับว่าจ่ายแล้วอีกต่อไป / คืนเงินค่าซ่อมแล้วงานกลับเข้าคิวอัตโนมัติ / ของที่ไม่นับสต๊อกไม่โผล่ในลิสต์ใกล้หมด / ค่าซ่อมรู้วิธีรับเงินแล้ว — เงินสด/โอน/บัตร / ค่าซ่อมที่รับเองเข้ายอดปิดกะ / สินค้าที่ไม่นับสต๊อก / แตะการ์ดแล้วเคาะราคาที่จะคิด / แก้พักบิลแล้วค่าซ่อม-เทรดอินหาย / เตือนก่อนเปิดบิลพักทับตะกร้า / ช่องต้นทุน/ชิ้นของอะไหล่ที่พิมพ์เอง / กำไรขั้นต้นหักต้นทุนอะไหล่ซ่อมแล้ว / เพิ่มข้อมูลหลักได้จากหน้างาน 6 ชนิด / สาขาใหม่ได้ข้อมูลหลักอัตโนมัติ / ของแถม + ส่วนลดรายรายการในใบซ่อม / ปุ่มเบิกอะไหล่ตัดสต๊อกจากใบซ่อม / ช่อง SN สำหรับเครื่องที่ไม่มี IMEI / เงื่อนไขท้ายเอกสารแก้เองได้ 10 จุด / ยอดรับเงินวันนี้รวมงานซ่อม+งานขาย / ซ่อมเสร็จโยนเข้าหน้าขายเพื่อชำระเงิน / ⭐⭐ หน้าติดตามของลูกค้าบอกชัดแล้วว่ารายการไหนเป็น "ของแถม" หรือถูกลดราคา — เดิมโชว์ราคาเต็มทุกบรรทัดแล้วยอดรวมไม่ตรงกัน ลูกค้าอ่านว่าระบบคิดเงินผิด · ตอนนี้มีป้าย "ของแถม" ราคาเต็มขีดฆ่า และยอดจริง ⇒ บวกทุกบรรทัดแล้วเท่ากับ "ราคารวม" · ใบเก่าที่ไม่มีส่วนลดและไม่มีของแถม แสดงเหมือนเดิมทุกอย่าง (ดู §5.7) / ⭐ ปุ่ม "คัดลอกจากอาการเสีย" — ไม่ต้องพิมพ์ 2 รอบ กดแล้วแก้ก่อนบันทึกได้ (ดู §5.3) / ⭐ ปุ่ม "เพิ่มค่าบริการ" ใช้ได้ที่หน้า "งานของฉัน" ของช่างแล้ว (ดู §5.3) / ⭐⭐ ค่าบริการตัดสต๊อกได้แล้ว — กด "ผูกอะไหล่จากคลัง" ในแถวค่าบริการ แล้วปิดงาน ระบบตัดสต๊อกและลงต้นทุนจริงให้ · ชื่อและราคาที่กรอกไว้ไม่เปลี่ยน · รายการเก่าทุกใบไม่เปลี่ยน (ดู §5.3) / ⭐ ลำดับรายการอะไหล่ไม่สลับเองอีกแล้ว — เดิมสลับที่กันได้ทุกครั้งที่แก้แถวใดแถวหนึ่ง · เอกสารที่ออกไปแล้วไม่เปลี่ยน (ดู §5.3))

📋 สารบัญ

หัวข้อรายละเอียด
1. บทนำภาพรวมระบบ, ความสามารถหลัก, บทบาท, ตารางสิทธิ์
2. เริ่มต้นใช้งานสมัครใช้งาน, ยืนยัน OTP, เข้าสู่ระบบ, แดชบอร์ด, แนะนำระบบ (Tour), โปรไฟล์
3. คลังสินค้าสต็อกมือถือ, อุปกรณ์เสริม (+ สินค้าที่ไม่นับสต๊อก), พิมพ์ฉลาก QR/Barcode, รอบนับสต็อก, โอนระหว่างสาขา
4. รับซื้อ-ตีราคารับซื้อมือถือ, ตีราคา, Checklist อุปกรณ์, เกรด A/B/C/D
5. งานซ่อมรับเครื่อง, งานช่าง, รายการทั้งหมด, คลังอะไหล่, Template ราคาซ่อม, ผู้จัดหา + สั่งอะไหล่, Checklist, เอกสาร, ติดตามออนไลน์ลูกค้า, รับเงินค่าซ่อม + ระบุวิธีรับเงิน, ประกัน
6. ขายสินค้า (POS)ตะกร้าสินค้า, รับเทรดเครื่องเก่า, วิธีชำระเงิน, PromptPay, หน้าจอลูกค้า, พักบิล, ประวัติ + reprint + void + refund + Z report, ใบแจ้งหนี้ B2B, เก็บเงินค่าซ่อมที่หน้าขาย, ยอดรับเงินวันนี้ (แยกเงินสด/โอน), สินค้าไม่นับสต๊อก + เคาะราคา, จ่ายหลายช่องทางในบิลเดียว + โครงการรัฐ 60/40
7. ประกันสินค้าเพิ่มประกัน, ติดตามหมดอายุ, ประวัติ
8. ลูกค้าเพิ่ม/แก้ไข/ค้นหาลูกค้า, ประวัติการซื้อ
9. ลงเวลาทำงานบันทึกเวลาเข้า-ออก, QR Code Kiosk
10. เงินเดือนคำนวณเงินเดือน, อนุมัติ, บันทึกการจ่าย
10A. ค่าใช้จ่ายดำเนินงานบันทึก rent / utility / fuel / marketing — feed PIT ACTUAL + ภ.พ.30 input VAT + WHT
10B. กะการขาย (Cashier Shift)เปิด-ปิดกะ + ลิ้นชักเงินสด — variance ระหว่าง expected vs actual + บังคับเปิดกะก่อนขาย (CASHIER/SALES default, ปรับได้) + ค่าซ่อมที่รับสดเข้ายอดกะ + เงินเข้า/ออกลิ้นชัก (ค่าส่ง ซื้อของหน้าร้าน เติมเงินทอน) — §10B.5
11. รายงานยอดขาย, การซ่อม, การรับซื้อ, สินค้าคงเหลือ, การเงิน
11A. ภาษี (เมนูใหม่)ภาพรวม + ภ.ง.ด.94/90 (PIT) + ภ.ง.ด.50/51 (CIT) + ภ.พ.30 (VAT) + ภ.ง.ด.3/53 (WHT) + ตั้งค่าภาษี
12. เอกสารพิมพ์ในระบบตั้งเบราว์เซอร์ก่อนพิมพ์สลิปครั้งแรก (แก้กระดาษยาวเกิน), เงื่อนไขท้ายเอกสารแก้เองได้, ใบเสร็จขาย/รับซื้อ/ซ่อม, สลิปเงินเดือน, ใบเครม, ใบสรุปการมาทำงาน, ใบเบิก/รับเข้าอะไหล่
13. Portal (Tenant Self-Service)ติดต่อทีมงาน (LINE/Messenger) + อีเมลที่ร้านจะได้รับ, Support Tickets, ประกาศ, Billing (+ ชำระด้วยบัตรเครดิต — ยืนยันอัตโนมัติ), อัปเกรดแพ็กเกจ
14. การจัดการระบบ (Admin)สาขา, ผู้ใช้งาน, ข้อมูลหลัก, ตั้งค่า, Audit Log
15. การแจ้งเตือนNotification Center แบบ Real-time + Push Notifications แม้ปิดเว็บ + ติดตั้งเป็นแอป (PWA)
16. Multi-Tenant และ Multi-BranchTenant Isolation, Branch Selector, คัดลอกรายการสินค้าข้ามสาขา
17. ภาคผนวกAPI Endpoints, Tech Stack, Deployment, Backup & Restore, Security

1. บทนำ

1.1 ภาพรวมระบบ

MobileHub v2 เป็นระบบจัดการร้านมือถือแบบ Multi-Tenant SaaS ที่ออกแบบมาสำหรับร้านมือถือทุกขนาด ตั้งแต่ร้านสาขาเดียวจนถึงเชนร้านค้าหลายสาขา ระบบครอบคลุมการทำงานตั้งแต่การรับซื้อมือถือมือสอง การซ่อมบำรุง การขายสินค้าแบบ POS ไปจนถึงการจัดการบุคลากรและรายงานทางการเงิน

ระบบพัฒนาด้วย Next.js 16 + React 19 + Mantine v8 ทางฝั่งหน้า และ Fastify + Prisma + PostgreSQL ทางฝั่งหลัง รองรับการใช้งานแบบ Real-time ผ่าน Socket.IO และออกแบบตามมาตรฐาน Mobile-First เพื่อให้ใช้งานสะดวกบนมือถือ

โดเมน: mobilehub.ajsoftwaredev.com

1.2 ความสามารถหลัก

🔧 ความสามารถ📝 รายละเอียด
📦 คลังสินค้าจัดการสต็อกมือถือและอุปกรณ์เสริม พร้อมอัปโหลดรูปภาพ
🛒 รับซื้อ-ตีราคาบันทึกการรับซื้อมือถือมือสอง พร้อม Checklist อุปกรณ์
🔧 งานซ่อมระบบรับเครื่องซ่อม ติดตามสถานะ แจ้งลูกค้าแบบ Real-time
💰 POS ขายสินค้าระบบขายสินค้าพร้อม PromptPay QR, Credit Card, โอน
🛡️ ประกันสินค้าบันทึกและติดตามประกันสินค้าและงานซ่อม
👥 ลูกค้าจัดการฐานข้อมูลลูกค้า ประวัติการซื้อ-ซ่อม
⏰ ลงเวลาทำงานQR Code Kiosk สำหรับพนักงานลงเวลาเข้า-ออก
💵 เงินเดือนคำนวณ อนุมัติ และบันทึกการจ่ายเงินเดือน
📊 รายงานรายงานยอดขาย, ซ่อม, การเงิน, VAT ออก Excel ได้
🔔 การแจ้งเตือน Real-timeBell notification ทุก role พร้อม Socket.IO
🏢 Multi-Branchรองรับหลายสาขา กรองข้อมูลตามสาขา
🔒 Multi-Tenantแต่ละ Tenant มีข้อมูลแยกกัน (Tenant Isolation)
🎫 Support Ticketsยื่น Ticket สนับสนุนกับทีมงาน
📢 ประกาศรับข่าวสารประกาศจากทีมงาน
💳 Billingจัดการ Subscription และชำระค่าบริการ
📝 Audit Logบันทึกทุกการกระทำในระบบ (ใครทำอะไร เมื่อไหร่)
🖥️ Customer Displayหน้าจอแสดงราคาสำหรับลูกค้า (POS)
🏷️ ข้อมูลหลักจัดการ Master Data — ยี่ห้อ, รุ่น, สี, ความจุ ฯลฯ

1.3 บทบาทในระบบ (7 Roles)

บทบาทชื่อในระบบคำอธิบาย
👑 เจ้าของOWNERสิทธิ์สูงสุด เข้าถึงได้ทุกส่วน รวมถึง Billing
🛠️ ผู้ดูแลระบบADMINจัดการระบบ ผู้ใช้ สาขา ตั้งค่า
📋 ผู้จัดการMANAGERดูรายงาน จัดการสต็อก ดูแลพนักงาน
💰 แคชเชียร์CASHIERรับชำระเงิน ขายสินค้า
🏪 พนักงานขายSALESขายสินค้า ดูสต็อก
🔧 ช่างซ่อมTECHNICIANจัดการงานซ่อม คลังอะไหล่
🔧💰 ช่างขายSALESTECHมีสิทธิ์ทั้ง SALES และ TECHNICIAN

1.4 ตารางสิทธิ์การเข้าถึง

โมดูลOWNERADMINMANAGERCASHIERSALESTECHSALESTECH
แดชบอร์ด✅✅✅✅✅✅✅
สต็อกมือถือ✅✅✅✅✅❌✅
อุปกรณ์เสริม✅✅✅✅✅❌✅
รับซื้อ-ตีราคา✅✅✅✅✅❌✅
รับเครื่อง (ซ่อม)✅✅✅❌❌❌✅
งานช่าง✅✅✅❌❌✅✅
รายการซ่อมทั้งหมด✅✅✅❌❌❌✅
คลังอะไหล่✅✅✅❌❌✅✅
Repair Checklist✅✅✅❌❌❌✅
ออกเอกสารซ่อม✅✅✅❌❌❌✅
ประกันงานซ่อม✅✅✅❌❌❌✅
ขายสินค้า (POS)✅✅✅✅✅❌✅
กะการขาย + ลิ้นชักเงินสด✅✅✅✅✅❌✅
ประกันสินค้า✅✅✅✅✅❌✅
ลูกค้า✅✅✅✅✅❌✅
ลงเวลา✅✅✅❌❌❌❌
เงินเดือน✅✅❌❌❌❌❌
รายงาน✅✅✅❌❌❌❌
Portal Tickets✅✅✅✅✅✅✅
Portal ประกาศ✅✅✅✅✅✅✅
Portal Billing✅✅❌❌❌❌❌
สาขา✅✅❌❌❌❌❌
ผู้ใช้งาน✅✅❌❌❌❌❌
ข้อมูลหลัก✅✅✅❌❌❌❌
ตั้งค่า✅✅❌❌❌❌❌
Audit Log✅✅❌❌❌❌❌

⭐ ตารางนี้คือ "ค่าเริ่มต้น" — ปรับให้เข้ากับวิธีทำงานของร้านคุณได้ (19 ส.ค. 2569)

ทุกร้านเริ่มต้นด้วยสิทธิ์ตามตารางข้างบนเหมือนกันหมด แต่ตอนนี้ปรับเฉพาะร้านของคุณได้ โดยไม่กระทบร้านอื่น — เช่น ร้านที่แคชเชียร์ต้องช่วยรับงานซ่อมด้วย ก็เปิดสิทธิ์งานซ่อมให้แคชเชียร์ได้ ส่วนร้านที่แยกหน้าที่กันชัดเจนก็ปล่อยไว้ตามเดิม

ปรับได้ 10 กลุ่มงาน — สิทธิ์เจ้าของร้าน · จัดการระบบร้าน (ผู้ดูแล) · สิทธิ์ระดับผู้จัดการ · งานแคชเชียร์ (รับเงิน) · งานขาย · งานซ่อม · รายงาน · เงินเดือน · ตั้งค่าร้าน · สลับสาขาที่ทำงานอยู่ — กำหนดแยกได้ทีละบทบาท

⭐ ตั้งเองได้จากหน้าจอแล้ว (20 ส.ค. 2569) — ไปที่ ตั้งค่า → สิทธิ์ตามบทบาท (เจ้าของร้าน/ผู้ดูแลระบบเท่านั้น) ไม่ต้องแจ้งผู้ให้บริการอีกแล้ว ร้านที่ยังไม่ได้เข้าไปแตะ = ใช้สิทธิ์ตามตารางข้างบนทุกอย่าง ไม่มีใครได้หรือเสียสิทธิ์

เมื่อปรับแล้ว พนักงานจะเห็นเมนูชุดใหม่ ตอนเปิดแอปครั้งถัดไป — ไม่ต้องออกจากระบบแล้วเข้าใหม่ (ดูรายละเอียดที่ §14.2)

1.5 แพ็คเกจ (Plans) และฟีเจอร์

ระบบมี 3 แพ็คเกจ ต่างกันที่ ขีดจำกัด (limits) + ฟีเจอร์ขั้นสูง (advanced features)

แพ็คเกจราคา/เดือนราคา/ปีสาขาผู้ใช้สินค้า
เริ่มต้น (Starter)฿599฿5,99013500
มืออาชีพ (Professional) ⭐฿1,499฿14,9903102,000
องค์กร (Enterprise)฿2,499฿24,990ไม่จำกัดไม่จำกัดไม่จำกัด

ฟีเจอร์ตามแพ็คเกจ

ฟีเจอร์StarterProEnterprise
ระบบขายหน้าร้าน (POS)✅✅✅
คลังสินค้า✅✅✅
จัดการลูกค้า✅✅✅
ระบบรับซ่อม✅✅✅
ลงเวลา (พื้นฐาน)✅✅✅
รายงานพื้นฐาน✅✅✅
Export รายงาน Excel/PDF❌✅✅
จอแสดงผลลูกค้า (Customer Display)❌✅✅
โหมด Kiosk ลงเวลา QR❌✅✅
Dashboard หลายสาขา ("ทุกสาขา")❌✅✅
API access❌❌✅
ระบบเงินเดือน (Payroll)❌❌✅
ลบโลโก้ MobileHub (White-label)❌❌✅

💡 เมนูที่ไม่มีในแพ็คเกจของคุณจะถูกซ่อนอัตโนมัติ — ถ้าต้องการใช้งานต้องอัพเกรดแพ็คเกจที่หน้า Portal Billing

ช่วงทดลองใช้ฟรี 14 วัน — เปิดให้ใช้ครบทุกฟีเจอร์

ระหว่างทดลองใช้ คุณจะเห็นและใช้งานได้ทุกเมนู รวมถึงฟีเจอร์ของแพ็คเกจองค์กร (ระบบเงินเดือน · Export รายงาน · จอแสดงผลลูกค้า · โหมด Kiosk · Dashboard หลายสาขา ฯลฯ)

ทำไมถึงเปิดให้หมด — เพื่อให้ได้ลองของจริงครบทุกอย่างก่อนตัดสินใจว่าแพ็คเกจไหนเหมาะกับร้าน จะได้ไม่ต้องเดาหรือจ่ายแพงเกินจำเป็น

สิ่งที่ยังจำกัดอยู่คือ "จำนวน" ไม่ใช่ "ฟีเจอร์" — โควตาสาขา / ผู้ใช้ / สินค้า ถูกตรึงไว้ที่ระดับ มืออาชีพ (Professional) คือ 3 สาขา · 10 ผู้ใช้ · 2,000 สินค้า

ช่วงทดลอง 14 วันหลังสมัครแพ็คเกจ
ฟีเจอร์/เมนู✅ ครบทุกอย่างตามแพ็คเกจที่เลือก
จำนวนสาขา3ตามแพ็คเกจ
จำนวนผู้ใช้10ตามแพ็คเกจ
จำนวนสินค้า2,000ตามแพ็คเกจ

⚠️ เหตุผลที่ไม่ปล่อยโควตาไม่จำกัดในช่วงทดลอง — ถ้าย้ายข้อมูลเข้ามาเกินขนาดแพ็คเกจที่จะซื้อจริง พอหมดช่วงทดลองจะเกินเพดานทันที แล้วต้องเลือกระหว่างจ่ายแพงกว่าที่ตั้งใจ กับลบข้อมูลตัวเองทิ้ง

💡 เมื่อหมดช่วงทดลอง เมนูที่ไม่อยู่ในแพ็คเกจที่เลือกจะถูกซ่อนไป แต่ข้อมูลไม่หาย ถ้าอัพเกรดภายหลังจะกลับมาใช้ได้ทันที

พฤติกรรมเมื่อเกินขีดจำกัด

ถ้าสร้างสาขา / ผู้ใช้ / สินค้าเกินจำนวนที่กำหนด ระบบจะขึ้นข้อความแจ้งเตือน ข้อความจะต่างกัน 2 แบบ ตามสถานะร้าน เพราะทางแก้คนละทางกัน

ก) ร้านที่ชำระเงินแล้ว (ใช้งานจริง)

แพ็คเกจ "มืออาชีพ" เพิ่มได้สูงสุด 3 สาขา — ตอนนี้ใช้ครบแล้ว (3/3) · อัพเกรดแพ็คเกจเพื่อเพิ่ม

→ ต้องลบรายการเก่าออก หรือ อัพเกรดแพ็คเกจ

ข) ร้านที่ยังอยู่ในช่วงทดลองใช้ 14 วัน

ระหว่างทดลองใช้ จำกัดไว้ที่ 3 สาขา — ตอนนี้ใช้ครบแล้ว (3/3) · แพ็คเกจ "มืออาชีพ 4 สาขา"
ที่เลือกไว้ให้ 4 สาขา จะใช้ได้เต็มเมื่อชำระเงินเริ่มใช้งานจริง

→ อัพเกรดแพ็คเกจไม่ช่วย เพราะช่วงทดลองตรึงโควตาไว้ที่ระดับมืออาชีพเสมอ ทางออกคือ ชำระเงินเพื่อเริ่มใช้งานจริง แล้วโควตาของแพ็คเกจที่เลือกไว้จะมีผลทันที

💡 ทำไมตัวเลขในข้อความถึงไม่ตรงกับชื่อแพ็คเกจ — ชื่อบอก 4 สาขา แต่ตอนนี้ตันที่ 3 เพราะสองค่านี้มาคนละที่: 3 คือเพดานช่วงทดลอง ส่วน 4 คือเพดานของแพ็คเกจที่จะได้หลังชำระเงิน ข้อความจึงเขียนบอกทั้งสองค่าไว้ ไม่ใช่ระบบนับผิด

⚠️ ถ้าแพ็คเกจที่เลือกไว้ให้ น้อยกว่า เพดานช่วงทดลอง (เช่นเลือกแพ็คเกจเริ่มต้นที่ให้ 1 สาขา) ข้อความจะเตือนว่าต้อง เปลี่ยนแพ็คเกจก่อนชำระเงิน — เพราะชำระไปแล้วโควตาจะ ลดลง มาเท่าแพ็คเกจ ไม่ใช่เพิ่มขึ้น

แพ็คเกจแบบตกลงราคาเฉพาะร้าน

บางร้านตกลงเงื่อนไขกับทีมงานเป็นกรณีพิเศษ (เช่น ราคาเท่าแพ็คเกจมืออาชีพ แต่ได้ 4 สาขา) ร้านแบบนี้จะถือ แพ็คเกจเฉพาะของร้านตัวเอง ซึ่งมีพฤติกรรมต่างจากแพ็คเกจปกติดังนี้

แพ็คเกจปกติแพ็คเกจเฉพาะร้าน
แสดงบนหน้าราคาสาธารณะ✅❌ ซ่อน (ร้านอื่นไม่เห็นเงื่อนไขของคุณ)
เห็นในหน้า /portal/upgrade ของร้านตัวเอง✅✅ เห็นและติดป้าย "แพ็คเกจปัจจุบัน"
ต่ออายุเมื่อครบกำหนด✅✅ ทำได้ตามปกติ
สมัครใหม่ได้เองจากหน้าราคา✅❌ ต้องติดต่อทีมงาน

⚠️ ระบบจะกันไม่ให้คุณเผลอเปลี่ยนไปแพ็คเกจที่ราคาเท่ากันแต่โควตาน้อยกว่า ถ้ากดเลือกแพ็คเกจที่ทำให้จำนวนสาขา/ผู้ใช้/สินค้าลดลง จะขึ้นข้อความว่า เปลี่ยนไปแพ็คเกจนี้ไม่ได้ — ราคาเท่ากันแต่โควตาลดลง (สาขา 4 → 3) กรุณาติดต่อผู้ดูแลระบบ ด่านนี้มีไว้เพราะการเปลี่ยนแพ็คเกจที่ราคาเท่ากันจะมีผล ทันทีโดยไม่ต้องชำระเงิน — ถ้าไม่มีด่าน กดผิดครั้งเดียวจะเสียโควตาที่ซื้อไว้โดยไม่มีอะไรเตือน

💡 ช่วงทดลองใช้ยังตรึงโควตาที่ระดับมืออาชีพเสมอ (3 สาขา) แม้ร้านจะถูกตั้งเป็นแพ็คเกจ เฉพาะที่ให้ 4 สาขาแล้วก็ตาม — โควตาที่ตกลงไว้จะมีผลหลังเปลี่ยนสถานะเป็นใช้งานจริง ถ้ากดสร้างสาขาที่ 4 ระหว่างนี้จะขึ้นข้อความแบบ (ข) ในหัวข้อ พฤติกรรมเมื่อเกินขีดจำกัด ด้านบน ซึ่งบอกไว้ทั้งเพดานตอนนี้ (3) และเพดานที่ตกลงไว้ (4) พร้อมทางออก

2. เริ่มต้นใช้งาน

2.1 สมัครใช้งาน

📍 หน้า: /register 👤 สิทธิ์: สาธารณะ (ไม่ต้องเข้าสู่ระบบ)

วัตถุประสงค์: สร้าง Tenant ใหม่ (ร้านค้า) ในระบบ MobileHub

ขั้นตอน:

  1. เปิดเบราว์เซอร์ไปที่ https://mobilehub.ajsoftwaredev.com/register
  2. กรอกข้อมูลร้านค้า:
    • ชื่อร้าน — ชื่อธุรกิจของคุณ
    • อีเมล — ต้องเป็นอีเมลจริงที่เปิดอ่านได้ ใช้รับ OTP · เข้าสู่ระบบ · กู้รหัสผ่าน
    • เบอร์โทร — ไม่บังคับ (เบอร์บ้าน 9 หลัก / มือถือ 10 หลัก)
    • รหัสผ่าน — ขั้นต่ำ 8 ตัวอักษร
    • ยืนยันรหัสผ่าน — กรอกซ้ำให้ตรงกัน
  3. กดปุ่ม "สมัครใช้งาน"
  4. ระบบส่ง OTP 6 หลักไปยังอีเมลที่กรอก
  5. ไปยังหน้า ยืนยันอีเมล เพื่อกรอก OTP

⚠️ บัญชีจะถูกสร้างหลังยืนยันอีเมลสำเร็จเท่านั้น (ปรับปรุง 7 ส.ค. 2569) ตอนกด "สมัครใช้งาน" ระบบยังไม่สร้างร้านให้ — จะเก็บข้อมูลไว้ก่อนแล้วส่ง OTP ไปที่อีเมล ต่อเมื่อกรอก OTP ถูกต้อง ร้านและบัญชีเจ้าของถึงจะถูกสร้างขึ้นจริง

สิ่งที่ต้องรู้:

  • ช่วงทดลองใช้ 14 วันเริ่มนับจากวันที่ยืนยันอีเมล ไม่ใช่วันที่กรอกฟอร์ม — กรอกวันนี้ แล้วมายืนยันพรุ่งนี้ก็ยังได้ครบ 14 วันเต็ม
  • อีเมลที่รับ OTP ไม่ได้จะสมัครไม่ผ่าน (เช่น test.com หรือบริการอีเมลชั่วคราว) เพราะบัญชีที่รับ OTP ไม่ได้จะกู้รหัสผ่านคืนไม่ได้ในอนาคต
  • กรอกอีเมลผิดแล้วสมัครใหม่ได้ทันที ด้วยอีเมลเดิมหรืออีเมลใหม่ก็ได้ — ไม่ติดว่า "อีเมลถูกใช้แล้ว" เพราะยังไม่มีบัญชีถูกสร้าง

⚠️ หมายเหตุ: บัญชีที่สมัครใหม่จะได้รับสิทธิ์ OWNER โดยอัตโนมัติ และเป็น Tenant ใหม่แยกจากกัน

2.2 ยืนยันอีเมล OTP

📍 หน้า: /verify-email 👤 สิทธิ์: ผู้ที่เพิ่งสมัครใหม่

วัตถุประสงค์: ยืนยันความเป็นเจ้าของอีเมลก่อนเข้าใช้งานระบบ

ขั้นตอน:

  1. ตรวจสอบอีเมล (กล่อง Inbox หรือ Spam)
  2. พบอีเมลจาก MobileHub หัวข้อ "ยืนยันอีเมลของคุณ"
  3. คัดลอก OTP 6 หลักจากอีเมล
  4. กรอก OTP ในช่อง PinInput บนหน้า Verify Email
  5. ระบบยืนยันอัตโนมัติเมื่อกรอกครบ 6 หลัก
  6. เปลี่ยนหน้าไปยัง Dashboard โดยอัตโนมัติ
ตัวเลือกรายละเอียด
OTP หมดอายุOTP มีอายุ 10 นาที
ขอ OTP ใหม่กดปุ่ม "ส่งใหม่" ได้หลังจาก 60 วินาที
OTP ผิดระบบแจ้งเตือนและให้กรอกใหม่
กรอกผิดหลายครั้งกรอกผิดครบ 5 ครั้ง จะถูกกั้นไว้ ต้องกด "ส่งรหัสใหม่" ก่อนถึงจะกรอกต่อได้ (ป้องกันการสุ่มเดารหัส)
ยังไม่มีบัญชีจนกว่าจะยืนยันระหว่างนี้ยังเข้าสู่ระบบไม่ได้ เพราะบัญชีจะถูกสร้างหลังยืนยันสำเร็จ

💡 เคล็ดลับ: หาก OTP หมดอายุ กดปุ่ม "ส่งรหัสใหม่" เพื่อรับ OTP ชุดใหม่ได้ทันที

2.3 เข้าสู่ระบบ

📍 หน้า: /login 👤 สิทธิ์: สาธารณะ

วัตถุประสงค์: เข้าสู่ระบบด้วยอีเมลและรหัสผ่าน

ขั้นตอน:

  1. ไปที่ https://mobilehub.ajsoftwaredev.com/login
  2. กรอก อีเมล ที่ใช้สมัคร
  3. กรอก รหัสผ่าน
  4. กดปุ่ม "เข้าสู่ระบบ"
  5. ระบบตรวจสอบ JWT Token (อายุ 24 ชั่วโมง)
  6. เปลี่ยนหน้าไปยัง Dashboard

⚠️ หมายเหตุ: Login ใช้เพียง 2 ฟิลด์ (อีเมล + รหัสผ่าน) ไม่ต้องกรอก Tenant Slug

💡 เคล็ดลับ: Token มีอายุ 24 ชั่วโมง หากหมดอายุจะถูก Redirect ไปหน้า Login โดยอัตโนมัติ

2.4 แดชบอร์ด

📍 หน้า: /dashboard 👤 สิทธิ์: ทุก Role

วัตถุประสงค์: ภาพรวมสถิติและข้อมูลสำคัญของร้าน แสดงข้อมูลตาม Role ของผู้ใช้

การแสดงผลตาม Role:

Roleข้อมูลที่เห็น
OWNER / ADMINสถิติทั้งหมด + กราฟรายได้ + Top Products + งานซ่อมรอ + สินค้าใกล้หมด
MANAGERสถิติยอดขาย + รายงานสรุป + Top Products
TECHNICIANงานซ่อมของตัวเอง + สถิติการซ่อม
SALES / CASHIERยอดขายวันนี้ + สินค้าในสต็อก

การ์ดสถิติหลัก (Admin/Owner):

  • 💰 ยอดขายวันนี้ — รายได้จากการขายสินค้า
  • 🔧 งานซ่อมรอ — จำนวนงานซ่อมที่ยังไม่เสร็จ
  • 📦 สินค้าในสต็อก — จำนวนมือถือทั้งหมด
  • 👥 ลูกค้าใหม่ — ลูกค้าที่เพิ่มวันนี้
  • 📈 กราฟรายได้ — แสดงรายได้ย้อนหลัง
  • 🏆 สินค้าขายดี — Top Products ประจำเดือน
  • ⚠️ สินค้าใกล้หมด — สินค้าที่ Stock ต่ำ
  • 🕐 ประกันใกล้หมดอายุ — แสดง Expiring Warranties

💡 เคล็ดลับ: แดชบอร์ดกรองข้อมูลตาม สาขาที่เลือก ในส่วนบน เปลี่ยนสาขาได้จาก Branch Selector ด้านบน

2.5 แนะนำระบบ (Onboarding Tour)

📍 เปิดได้ที่: เด้งเองครั้งแรกหลังเข้าสู่ระบบ + ปุ่ม "แนะนำระบบ" ในเมนูซ้าย (มี Badge "ใหม่" สีฟ้า) 👤 สิทธิ์: ทุก Role (เนื้อหาแตกต่างกันตาม Role)

วัตถุประสงค์: ช่วยผู้ใช้ใหม่เริ่มต้นใช้งานเร็ว — ระบบจะแสดง Welcome Modal พร้อม Checklist สิ่งที่ควรทำก่อน + Guided Tour พาไล่ดูเมนูสำคัญทีละข้อ

Welcome Modal — เด้งครั้งเดียวต่อ User:

ครั้งแรกที่ Login จะเห็น Modal สีเทา-ฟ้า กลางจอ ประกอบด้วย:

  1. หัวข้อต้อนรับ + คำอธิบายตาม Role (เช่น OWNER เห็น "ข้อมูลหลักระบบตั้งไว้ให้แล้ว เริ่มงานจริงได้ทันที" / TECHNICIAN เห็น "รับงานซ่อม เบิกอะไหล่ และอัปเดตสถานะ")
  2. Checklist 2-5 รายการ — งานแรกที่ควรลองตาม Role
    • OWNER / ADMIN: รับเครื่องซ่อมใบแรก → เพิ่มมือถือเข้าสต๊อก → เพิ่มอุปกรณ์เสริม (ฟิล์ม เคส สายชาร์จ) → เพิ่มอะไหล่ (จอ แบต) → ขายบิลแรก
    • ไม่ต้องตั้งค่าอะไรก่อน — ข้อมูลหลัก (ยี่ห้อ รุ่น สี ความจุ ประเภทซ่อม สถานะต่าง ๆ) สาขาแรก และบัญชีเจ้าของร้าน ระบบสร้างให้ตั้งแต่สมัคร · ตั้งค่าร้าน/โลโก้/เพิ่มพนักงาน ทำทีหลังได้จากเมนูซ้าย
    • รายการที่แพ็คเกจหรือสิทธิ์ของคุณเข้าไม่ได้ (เช่น งานซ่อม) จะไม่แสดง
    • คลิกแต่ละรายการ → ระบบจะ navigate ไปหน้านั้นทันที + mark ว่า "เสร็จแล้ว" (Badge เขียว)
  3. 2 ปุ่ม:
    • "ข้ามไปก่อน" — ปิด Modal ชั่วคราว (ไม่เด้งซ้ำ)
    • "เริ่ม Tour แนะนำ" — เริ่ม Guided Tour พาไล่ดูเมนูทีละข้อ

Guided Tour — Spotlight แต่ละเมนู:

เมื่อเริ่ม Tour ระบบจะ:

  • ทำให้พื้นหลังดำลง (overlay)
  • Highlight เมนูทีละข้อ ตามลำดับ พร้อม Popover คำอธิบายภาษาไทย
  • มีปุ่ม ก่อนหน้า / ถัดไป / เสร็จสิ้น + แสดงความคืบหน้า "ขั้นตอน N จาก M"
  • ถ้า Role ของผู้ใช้ไม่มีเมนูนั้น (เช่น TECHNICIAN ไม่เห็น POS) ระบบจะ ข้าม step นั้นอัตโนมัติ

Tour ตาม Role (สรุป):

Roleจำนวน Stepsเมนูที่ Tour พาไล่
OWNER / ADMIN8 ข้อรับเครื่อง → สต็อกมือถือ → อุปกรณ์เสริม → คลังอะไหล่ → POS → รายงาน → ตั้งค่า → 🔔 (5 ข้อแรกเรียงเหมือนรายการในหน้าต้อนรับ)
MANAGER6-7 ข้อDashboard → POS → รายการซ่อม → ลงเวลา → รายงาน → ข้อมูลหลัก → 🔔
CASHIER4-5 ข้อDashboard → POS → สต็อก → ลูกค้า → 🔔
SALES5-6 ข้อDashboard → POS → สต็อก → รับซื้อ → ลูกค้า → 🔔
TECHNICIAN2-3 ข้องานช่าง → คลังอะไหล่ → 🔔

เปิดดูซ้ำได้ตลอด:

ถ้าปิดไปแล้วต้องการดูใหม่ — คลิก "แนะนำระบบ" ในเมนูซ้าย (อยู่ด้านล่างใกล้กับ "คู่มือการใช้งาน") → Welcome Modal เปิดอีก

💡 เคล็ดลับ: ระบบบันทึกว่าคุณดูแล้วลง localStorage ของเบราว์เซอร์ — ถ้าเปลี่ยนเครื่อง / เคลียร์ cache จะเด้งใหม่อีกครั้ง

2.6 โปรไฟล์ส่วนตัว

📍 หน้า: /profile 👤 สิทธิ์: ทุก Role

วัตถุประสงค์: ดูและแก้ไขข้อมูลส่วนตัว เปลี่ยนรหัสผ่าน อัปโหลดรูปโปรไฟล์

ฟิลด์ที่แก้ไขได้:

ฟิลด์คำอธิบาย
ชื่อ-นามสกุลชื่อที่แสดงในระบบ
เบอร์โทรเบอร์ติดต่อ
รูปโปรไฟล์อัปโหลดรูปภาพ (สูงสุด 5MB)
รหัสผ่านเก่าต้องกรอกเพื่อเปลี่ยนรหัสผ่าน
รหัสผ่านใหม่ขั้นต่ำ 8 ตัวอักษร

3. คลังสินค้า

3.1 สต็อกมือถือ

📍 หน้า: /stock 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: จัดการสินค้ามือถือในคลัง — เพิ่ม แก้ไข ดูสต็อก

คุณสมบัติหน้านี้:

  • ดูรายการสต็อกทั้งหมด พร้อมกรองตามสาขา
  • ค้นหาสินค้าด้วยชื่อ รุ่น บาร์โค้ด
  • เพิ่ม/แก้ไข/ลบสินค้า
  • อัปโหลดรูปภาพสินค้าหลายรูป (Carousel)
  • แสดง Badge สาขาเพื่อระบุที่อยู่ของสินค้า
  • ดู Cross-branch availability (สต็อกจากสาขาอื่น)

ขั้นตอนเพิ่มสินค้าใหม่:

  1. กดปุ่ม "+ เพิ่มสินค้า" มุมบนขวา
  2. กรอกข้อมูลสินค้า:
ฟิลด์คำอธิบายจำเป็น
ยี่ห้อเลือกจาก Master Brands (Apple, Samsung ฯลฯ)✅
รุ่นเลือกจาก Master Models✅
ความจุ64GB, 128GB, 256GB ฯลฯ✅
สีเลือกจาก Master Colors✅
IMEI/Serialหมายเลขเครื่อง✅
สภาพNEW (ใหม่) / LIKE_NEW (เหมือนใหม่) / GRADE_A (สภาพดีมาก) / GRADE_B (สภาพดี) / GRADE_C (มีตำหนิ) / GRADE_D (ตำหนิเยอะ — ราคาถูก)✅
ราคาทุนราคาที่รับซื้อมา✅
ราคาขายราคาที่ตั้งขาย✅
สถานะIN_STOCK, RESERVED, SOLD✅
สาขาเลือกสาขาที่เก็บสินค้า✅
ซื้อจากผู้จัดหา (ร้านส่ง) หรือ ลูกค้า (รับซื้อต่อ) — เลือกได้อย่างเดียว❌
หมายเหตุรายละเอียดเพิ่มเติม❌
รูปภาพอัปโหลดสูงสุดหลายรูป (5MB/ไฟล์)❌
  1. กดปุ่ม "บันทึก"

การสแกน Barcode:

  • กดไอคอน Barcode เพื่อเปิด Camera Scanner
  • สแกน IMEI/Serial Number โดยอัตโนมัติ
  • รองรับทั้ง QR Code และ Barcode

มุมมองมือถือ:

  • แสดงเป็น Card แทนตาราง
  • Card แสดงรูปภาพ, ยี่ห้อ/รุ่น, ราคา, สถานะ, สาขา
  • ปุ่มแก้ไข/ลบแสดงเป็นไอคอน

⚠️ หมายเหตุ: IMEI/Serial Number ต้องไม่ซ้ำกันในระบบ (Unique ต่อ Tenant)

บันทึกว่าซื้อจากใคร ⭐ ใหม่ 24 ส.ค. 2569

ตอนเพิ่ม/แก้ไขเครื่อง มีช่อง "ซื้อจาก" เป็นชิปให้เลือก: ไม่ระบุ / ผู้จัดหา (ร้านส่ง) / ลูกค้า (รับซื้อเครื่องต่อจากลูกค้าโดยตรง เช่น เทิร์นเครื่อง)

  • เลือกได้อย่างมากทีละอย่างเท่านั้น — สลับไปอีกชิปหนึ่ง ฝั่งที่เลือกไว้เดิมจะถูกล้างให้อัตโนมัติ
  • เลือก "ผู้จัดหา" แล้วไม่เจอในรายการ กดปุ่ม "+ เพิ่มผู้จัดหา" ในช่องนี้ได้เลย ไม่ต้องออกไปหน้า /suppliers
  • เลือก "ลูกค้า" เป็นการเลือกจากรายชื่อลูกค้าที่มีอยู่แล้วในระบบ (ค้นด้วยชื่อหรือเบอร์โทร) — ถ้ายังไม่เคยมีชื่อนี้ ต้องไปเพิ่มที่หน้า ลูกค้า (/customers) ก่อน · "ลูกค้าทั่วไป" (ลูกค้าที่ระบบสร้างให้อัตโนมัติสำหรับบิลที่ไม่ระบุตัวลูกค้า) จะไม่ปรากฏให้เลือกเลย เพราะไม่ใช่คนจริงที่ขายเครื่องให้ร้าน
  • ไม่บังคับกรอก — ไม่เลือกอะไรเลยก็บันทึกได้ตามปกติเหมือนเดิม

ดูย้อนหลังทุกรายการได้ที่เมนู "ประวัติการซื้อเข้า" (รายละเอียดที่ §5.4B.4)

⚠️ ข้อมูลนี้เริ่มเก็บตั้งแต่วันที่เปิดใช้ฟีเจอร์นี้ (24 ส.ค. 2569) เป็นต้นไป เครื่องที่มีอยู่แล้วในระบบก่อนหน้านั้นจะไม่มีข้อมูลผู้ขายให้ดู (ช่องว่างเปล่า) ระบบไม่ได้เดาหรือกรอกย้อนหลังให้ — ถ้าอยากมีประวัติของเครื่องเก่า ต้องเข้าไปแก้ไขแล้วเลือกเองทีละเครื่อง

ดูเฉพาะรุ่นที่สต็อกต่ำ ⭐ ใหม่ 14 ส.ค. 2569

กดการ์ด "สินค้าสต็อกต่ำ" บนแดชบอร์ด แล้วกด "ไปสต็อก" หน้าคลังจะกรองให้เหลือเฉพาะรุ่นที่การ์ดชี้ทันที พร้อมแถบบอกว่ากำลังกรองอยู่และปุ่มล้างตัวกรอง

⚠️ เดิมกดแล้วเด้งไปหน้าคลังโดยไม่กรองอะไรเลย — เห็นรายการทั้งหมดเหมือนไม่ได้กด ต้องไปไล่หาเองว่ารุ่นไหนคือรุ่นที่การ์ดเพิ่งเตือน

"สต็อกต่ำ" นับยังไง: ระบบจัดกลุ่มเครื่องตาม ยี่ห้อ + รุ่น แล้วนับเฉพาะเครื่องที่ สถานะ "พร้อมขาย" — รุ่นที่เหลือ 2 เครื่องหรือน้อยกว่า จะถูกนับว่าสต็อกต่ำ (การ์ดแสดงได้สูงสุด 10 รุ่น)

การเรียงลำดับ: รุ่นที่เหลือ น้อยที่สุดขึ้นก่อน เพราะเป็นรุ่นที่ต้องสั่งเพิ่มด่วนที่สุด

⚠️ เดิมถ้ามีรุ่นสต็อกต่ำเกิน 10 รุ่น การ์ดจะเลือกมาแสดง 10 รุ่นแบบไม่แน่นอน เปิดดูคนละครั้งอาจได้คนละชุด ทำให้รุ่นที่ใกล้หมดจริงหายไปจากการ์ดโดยไม่มีอะไรบอก ตอนนี้ได้ชุดเดิมทุกครั้งและเรียงตามความเร่งด่วนจริง

💡 เครื่องที่ขายแล้ว จองแล้ว หรืออยู่ระหว่างซ่อม ไม่ถูกนับ เพราะขายต่อไม่ได้

✅ เข้าหน้าคลังตรง ๆ จากเมนูด้านซ้าย ยังเห็นทุกรายการเหมือนเดิมทุกประการ การกรองจะเกิดเฉพาะตอนกดมาจากการ์ดเท่านั้น และกดปุ่มล้างเมื่อไรก็กลับมาเห็นทั้งหมด

3.2 อุปกรณ์เสริม

📍 หน้า: /accessories 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: จัดการสินค้าประเภทอุปกรณ์เสริม เช่น เคส สายชาร์จ หูฟัง กระจก

คุณสมบัติ:

  • จัดการสินค้าอุปกรณ์เสริมพร้อม Stock จำนวน
  • แบ่งหมวดหมู่ตาม Category
  • กำหนดยี่ห้อจาก Master Brands
  • ตั้งราคาทุน/ราคาขาย

ฟิลด์สินค้าอุปกรณ์เสริม:

ฟิลด์คำอธิบายจำเป็น
ชื่อสินค้าชื่อสินค้า✅
ยี่ห้อเลือกจาก Master Brands❌
หมวดหมู่เคส, สายชาร์จ, หูฟัง ฯลฯ✅
จำนวน (Stock)จำนวนชิ้นในคลัง✅
ราคาทุนต้นทุนสินค้า✅
ราคาขายราคาที่ตั้งขาย✅
สาขาสาขาที่เก็บสินค้า✅
สีสีของอุปกรณ์❌
บาร์โค้ดรหัสสินค้า❌
หมายเหตุรายละเอียดเพิ่มเติม❌
ซื้อจากผู้จัดหา (ร้านส่ง) หรือ ลูกค้า (รับซื้อต่อ) — เลือกได้อย่างเดียว❌

ประเภทธุรกรรมอุปกรณ์เสริม:

  • IN — รับสินค้าเข้าคลัง
  • OUT — ตัดสต็อกออก
  • SELL — ขายสินค้า (ผ่าน POS)

💡 เคล็ดลับ: Category เริ่มต้นของระบบ ได้แก่ เคส, ฟิล์ม/กระจก, สายชาร์จ, หูฟัง, Power Bank, อื่นๆ

สินค้าที่ไม่อยากนับจำนวน ⭐ NEW

ตอนเพิ่ม/แก้ไขสินค้า มีสวิตช์ "นับสต๊อกสินค้านี้" — ปิดสวิตช์แล้วสินค้านั้นจะขายได้เรื่อย ๆ ไม่ตัดจำนวน ไม่แจ้งเตือนของหมด และอยู่บนหน้าขายตลอดแม้จำนวนเป็น 0

เหมาะกับของเบ็ดเตล็ดที่ขายประจำแต่ไม่คุ้มจะนับ (ฟิล์ม สายชาร์จถูก ๆ ค่าบริการย่อย) รายละเอียดการใช้งานที่หน้าขาย + การเคาะราคา อยู่ที่ §6.12

ค่าเริ่มต้นคือ นับสต๊อก — สินค้าที่มีอยู่แล้วทั้งหมดทำงานเหมือนเดิมทุกประการ

บันทึกว่าซื้อจากใคร ⭐ ใหม่ 24 ส.ค. 2569

ช่อง "ซื้อจาก" ทำงานแบบเดียวกับหน้าสต็อกมือถือทุกประการ — เลือกผู้จัดหาหรือลูกค้าได้อย่างใดอย่างหนึ่ง พร้อมปุ่มเพิ่มผู้จัดหา/ลูกค้าใหม่ในตัว ดูรายละเอียดเต็มที่ §3.1

⚠️ เก็บนับจากวันที่เปิดใช้ฟีเจอร์นี้ (24 ส.ค. 2569) เป็นต้นไปเท่านั้น อุปกรณ์เสริมเก่าที่มีอยู่แล้วไม่มีข้อมูลผู้ขายให้ย้อนดู

เพิ่มสินค้าด้วยรหัสของสินค้าที่เคยลบไปแล้ว ⭐ ใหม่ 2 ต.ค. 2569

เวลากดลบอุปกรณ์เสริม ระบบ ซ่อนสินค้านั้นไว้ (ไม่ได้ลบทิ้ง เพื่อเก็บประวัติการขาย/การเคลื่อนไหวของสต๊อก)

  • ถ้ากด "เพิ่มอุปกรณ์เสริม" ด้วย รหัสสินค้า (SKU) เดิม ในสาขาเดียวกัน ระบบจะ กู้สินค้าเดิมกลับมา แล้วใส่ชื่อ ราคา และข้อมูลใหม่ที่กรอกทับให้ — จะเห็นข้อความ "กู้สินค้าเดิมกลับมาแล้ว"
  • จำนวนที่กรอกตอนเพิ่ม จะ บวกเข้ากับจำนวนที่เหลืออยู่เดิม (ถ้าตอนลบยังมีของเหลือ) และลงประวัติเป็นรายการรับเข้า
  • ถ้ารหัสนั้นเป็นของสินค้าที่ ยังใช้งานอยู่ ระบบยังแจ้งว่า "รหัสสินค้า (SKU) นี้มีอยู่แล้ว" เหมือนเดิม
  • ถ้า แก้ไขรหัส ของสินค้าอื่นไปตรงกับสินค้าที่ลบแล้ว ระบบจะบอกชื่อสินค้าที่ลบไป และให้ใช้ปุ่ม "เพิ่มอุปกรณ์เสริม" ด้วยรหัสนั้นแทน

เดิม (ก่อน 2 ต.ค. 2569) รหัสของสินค้าที่ลบไปแล้วจะ ใช้ใหม่ไม่ได้ และค้นหาก็ไม่เจอ — ตอนนี้แก้แล้ว ไม่ต้องทำอะไรเพิ่ม

3.2A พิมพ์ฉลาก QR / Barcode ⭐ ปรับปรุง 23 ส.ค. 2569

📍 เข้าจากไหน: หน้าอุปกรณ์เสริม /accessories → ปุ่มเมนู 3 จุดของแถว → "พิมพ์ฉลาก" · หน้าคลังอะไหล่ /spare-parts → ไอคอนเครื่องพิมพ์สีม่วง ในแถว

ฉลากที่พิมพ์มี 4 อย่างเสมอ: ชื่อสินค้า · โค้ด (QR หรือ Barcode) · รหัสสินค้า (SKU) · ราคาขาย โค้ดที่ฝังอยู่คือ SKU ตัวเดียวกับที่ใช้ยิงตอนนับสต๊อกและตอนขาย

เลือก QR หรือ Barcode

ใช้เมื่อไร
QR Code (ค่าเริ่มต้น)แนะนำสำหรับฉลากเล็ก — เก็บรหัสยาวได้ ทนการพิมพ์ที่ไม่คม ใช้ได้ทุกขนาดฉลาก
Barcode (Code 128)ใช้เมื่อเครื่องสแกนของร้านอ่านได้เฉพาะบาร์โค้ดเส้น — ต้องใช้ฉลากที่กว้างพอ (ดูตารางข้างล่าง)

⭐ รหัสยาวเท่าไรถึงจะพิมพ์เป็นบาร์โค้ดได้

บาร์โค้ดเส้นกินที่ตามความยาวรหัส และแคบกว่าค่าหนึ่งแล้วเครื่องสแกนอ่านไม่ออก ระบบจึงคำนวณให้แล้วว่ารหัสไหนใส่ลงฉลากขนาดไหน

ขนาดฉลากรหัสยาวได้ประมาณ
30 × 20 มม.~5 ตัวอักษร (สั้นมาก แทบใช้กับบาร์โค้ดไม่ได้)
40 × 25 มม.~8 ตัวอักษร
50 × 30 มม.~12 ตัวอักษร
70 × 40 มม.~19 ตัวอักษร ← ใช้ตัวนี้ถ้ารหัสร้านคุณยาว

⚠️ ถ้ารหัสยาวเกิน ระบบจะขึ้นกล่องสีส้มและ ปิดปุ่มพิมพ์ พร้อมบอกว่าต้องใช้ความกว้างเท่าไร มีที่ว่างเท่าไร และควรเลือกฉลากขนาดไหนแทน เดิมระบบยอมพิมพ์ให้โดยย่อบาร์โค้ดลงเงียบ ๆ จนสแกนไม่ได้ — ฉลากที่พิมพ์แล้วสแกนไม่ได้ เสียทั้งกระดาษและเวลาที่หน้าเคาน์เตอร์ จึงเปลี่ยนเป็นบอกก่อนพิมพ์

💡 รหัสที่มี ภาษาไทยหรืออักขระพิเศษ ทำเป็นบาร์โค้ดเส้นไม่ได้เลย (ข้อจำกัดของ Code 128) — ใช้ QR Code แทน

พิมพ์แล้วสแกนไม่ได้ ทำยังไง

ใต้ปุ่มพิมพ์ (เฉพาะโหมด Barcode) มีลิงก์ "พิมพ์แล้วสแกนไม่ได้?" กดแล้วจะมีขั้นตอนให้ตรวจ 5 ข้อ ข้อที่สำคัญที่สุดคือ มาตราส่วน (Scale) ต้องเป็น "ค่าเริ่มต้น" หรือ 100%

⚠️ Chrome ตั้งค่ามาตราส่วนเป็น "พอดีกับพื้นที่ที่พิมพ์ได้" มาตั้งแต่ต้น ซึ่งย่อ-ขยายหน้าเอง ระบบสั่งขนาดแท่งไปให้พอดีกับหัวพิมพ์แล้ว แต่ถ้าเบราว์เซอร์ย่อทับ ความกว้างของแท่งจะเพี้ยน ค่านี้แก้จากโปรแกรมไม่ได้ ต้องตั้งที่หน้าต่างพิมพ์เอง ครั้งเดียวต่อเครื่อง แล้วเบราว์เซอร์จำให้

โหมดพิมพ์

โหมดใช้กับ
เครื่องพิมพ์ฉลาก (ค่าเริ่มต้น)1 ฉลาก = 1 หน้า — ตั้งขนาดกระดาษในหน้าต่างพิมพ์ให้ตรงกับขนาดฉลาก
กระดาษ A4พิมพ์หลายฉลากต่อแผ่นแล้วตัดเอง มีเส้นประบอกรอยตัด

3.3 รอบนับสต็อก (Stock Count) — ⭐ ยิงบาร์โค้ดนับได้แล้ว

📍 หน้า: /stock-count (รายการรอบนับ) + /stock-count/[id] (หน้านับ) 👤 สิทธิ์: เปิดรอบ / ปิดรอบ = เจ้าของร้าน · ผู้ดูแล · ผู้จัดการ — ส่วน การเดินยิงนับ พนักงานทุกคนทำได้

วัตถุประสงค์: ตรวจของจริงเทียบกับตัวเลขในระบบ — หาของหาย ตรวจความถูกต้องของข้อมูล และเก็บหลักฐานไว้ให้ผู้สอบบัญชี

⭐ ของที่ปิด "นับสต๊อกสินค้านี้" ไว้ จะไม่ถูกลากเข้ารอบนับอีกแล้ว (24 ส.ค. 2569) เดิมเปิดรอบนับแล้วใบนับมีรายการพวกนี้ปนมาด้วย · พนักงานเดินนับ กรอกเลขลงไป แล้วระบบข้ามทิ้งเงียบ ๆ ตอนกดปิดรอบ โดยไม่มีอะไรบอกว่าทำไม = เสียแรงฟรี · ตัวอย่างที่วัดได้จริง: ร้านหนึ่งมี 48 จาก 240 รายการ ที่ไม่ควรอยู่ในใบนับ · 📌 รอบที่เปิดค้างไว้ก่อนหน้านี้ ไม่ต้องทำอะไร — กดปิดรอบได้ตามปกติ จำนวนสต๊อกไม่ถูกแตะ สิ่งที่เพี้ยนคือรายการบนใบนับเท่านั้น ไม่ใช่ตัวเลขของจริง

3 ประเภทการนับ:

ประเภทใช้เมื่อไหร่
FULLนับสิ้นปี — ทุกรายการในร้าน
CYCLEนับเฉพาะหมวด/ยี่ห้อ/ตำแหน่งเก็บ — ทำได้ทุกเดือน
SPOT_CHECKตรวจสุ่ม

⭐ ยิงบาร์โค้ดแทนการพิมพ์ตัวเลข

ยิง 1 ครั้ง = นับเพิ่ม 1 ชิ้น ยิงซ้ำชิ้นเดิมก็บวกไปเรื่อย ๆ (1 → 2 → 3) ไม่ต้องพิมพ์ตัวเลขเอง

ยิงได้ 2 ทาง:

ทางใช้ยังไง
เครื่องยิงบาร์โค้ด USB (แนะนำ)เสียบคอมแล้วยิงได้เลย ไม่ต้องตั้งค่าอะไร — ระบบจับ Enter ที่เครื่องยิงส่งท้ายให้เอง แล้ว ล้างช่องให้อัตโนมัติ ยิงชิ้นถัดไปต่อได้ทันที
กล้องมือถือกดปุ่ม "ใช้กล้องมือถือยิงแทน" — กล้องเปิดค้าง ยิงรัวได้ ไม่ต้องกดเปิดใหม่ทุกชิ้น มีเสียงและการสั่นบอกว่ายิงติด (ปิดเสียงได้)

💡 บาร์โค้ดที่ใช้ยิงคือ SKU (รหัสสินค้า) ซึ่งเป็นรหัสเดียวกับที่ปุ่ม "พิมพ์ฉลาก" ที่หน้าอุปกรณ์เสริมและหน้าอะไหล่พิมพ์ออกมา — ติดฉลากไว้ที่ของแล้วยิงได้เลย ส่วน มือถือ ยิงบาร์โค้ด IMEI บนกล่องหรือตัวเครื่อง

แถบบนสุดบอกว่าระบบพร้อมรับการยิงหรือยัง — ถ้าเผลอกดที่อื่นจนช่องเสียโฟกัส ระบบจะดึงกลับให้เอง เพราะถ้าโฟกัสหลุด การยิงจะหายไปเฉย ๆ โดยไม่มีอะไรเตือน

มือถือกับอุปกรณ์เสริม นับคนละแบบ

ชนิดยิงซ้ำเครื่อง/ชิ้นเดิม
อุปกรณ์เสริม · อะไหล่บวกเพิ่มทีละ 1 (นับจำนวนชิ้น)
มือถือขึ้นว่า "เครื่องนี้ยิงไปแล้ว" ไม่บวกเพิ่ม

⚠️ ทำไมมือถือไม่บวก — ในระบบ 1 รายการ = เครื่องจริง 1 เครื่อง ผูกกับเลข IMEI ถ้ายิงเครื่องเดิมซ้ำแล้วนับเป็น 2 เท่ากับนับเครื่องเดียวเป็นสองเครื่อง สต๊อกจะเพี้ยนทันที

ยิงแล้วไม่เจอ — ระบบบอกสาเหตุแยกกัน

ข้อความแปลว่า
ไม่มีรหัสนี้ในระบบยังไม่เคยบันทึกของชิ้นนี้เข้าร้าน
เป็นของสาขาอื่นมีในร้าน แต่อยู่คนละสาขากับรอบนับนี้ (บอกชื่อสาขาให้ด้วย)
มีในสาขานี้ แต่ไม่อยู่ในรอบนับเช่นเพิ่งขายไป หรือเพิ่งปิดใช้งานหลังเปิดรอบ
รหัสสั้นเกินไป / ไม่มีรหัสของชิ้นนั้นไม่มี SKU จึงยิงไม่ติด

⚠️ ของที่ไม่มีรหัสสินค้า (SKU) จะยิงไม่ติดตลอดกาล ต้องกรอกจำนวนเองทีละรายการ หน้านับจะขึ้นแถบเตือนบอกว่ามีกี่รายการ พร้อมปุ่มกรองให้ดูว่ารายการไหนบ้าง — อย่าข้ามแถบนี้ ไม่งั้นจะยิงจนจบแล้วเชื่อว่าครบ ทั้งที่มีของที่ไม่มีวันถูกยิงติดค้างอยู่ แล้วของพวกนั้นจะถูกบันทึกว่า "หาย" ตอนปิดรอบ

ขั้นตอนทั้งหมด

  1. เริ่มรอบ ที่ /stock-count → กด + เริ่มรอบนับใหม่ → เลือกประเภท
  2. ระบบถ่ายภาพนิ่งของสต็อก ณ ตอนนั้น แล้วสร้างรายการให้นับครบทุกชนิด (มือถือ + อุปกรณ์เสริม + อะไหล่) ของสาขานั้น
  3. เข้าหน้านับแล้ว ยิงบาร์โค้ดทีละชิ้น หรือกรอกจำนวนเองด้วยปุ่ม − / + ก็ได้
    • แต่ละแถวแสดงชื่อ + จำนวนที่ควรมี + จำนวนที่นับได้ + สีตามสถานะ
    • ถ้าจำนวนไม่ตรง ช่อง "เหตุผล" จะโผล่ให้กรอก (เช่น ของหาย / นับผิดรอบก่อน)
    • ชิปด้านบนกรองดูได้: ยังไม่นับ / ขาด / เกิน / ตรง / ไม่มีรหัส
  4. แถบความคืบหน้าบอกว่านับไปแล้วกี่จาก กี่รายการ
  5. กด ปิดรอบนับ แล้วเลือก 1 ใน 2 แบบ

📊 ส่งออกผลการนับเป็นไฟล์ Excel ⭐ ใหม่ 23 ส.ค. 2569

ปุ่ม "ส่งออก Excel" อยู่มุมขวาบนของหน้ารอบนับ — กดได้ทั้งตอนที่ยังนับไม่เสร็จและหลังปิดรอบแล้ว

ไฟล์มี 2 แผ่น

  • ผลการนับ — ทุกรายการในรอบ: ชื่อ · ชนิด (มือถือ/อุปกรณ์เสริม/อะไหล่) · ควรมี · นับได้ · ส่วนต่าง · สถานะ (ตรง/ขาด/เกิน/ยังไม่นับ) · เหตุผลส่วนต่าง · เวลาที่นับ
  • สรุป — ยอดรวมแต่ละสถานะ + สถานะรอบ + วันเวลาที่ส่งออก

จุดที่ควรรู้

  • ส่งออกทุกรายการ ไม่ใช่เฉพาะที่มีส่วนต่าง — ไฟล์นี้เป็นหลักฐานว่านับครบแล้ว ถ้าอยากดูเฉพาะที่ไม่ตรง ให้กรองคอลัมน์ "สถานะ" ใน Excel เอา
  • ช่อง "นับได้" ที่ว่างไว้ = ยังไม่ได้นับ ไม่ใช่นับแล้วได้ศูนย์ — ระบบจงใจเว้นว่าง ไม่เติมเลข 0 ให้ เพราะสองอย่างนี้คนละความหมายกัน
  • ถ้าส่งออกตอนรอบยังไม่ปิด แผ่น "สรุป" จะเขียนไว้ว่า "ยังนับไม่เสร็จ — ตัวเลขยังเปลี่ยนได้" ดูบรรทัดนั้นก่อนเอาไฟล์ไปใช้อ้างอิงเสมอ

⭐ นับตอนเช้า ขายตอนบ่าย ปิดรอบตอนเย็น — ระบบหักให้ถูก

ระบบ ไม่ได้เอาจำนวนที่นับได้ไปทับยอดตรง ๆ แต่เอา "ส่วนต่างที่พบตอนนับ" ไปปรับกับยอดปัจจุบัน

ตัวอย่าง เช้านับได้ 8 ชิ้น (ระบบบอกว่าควรมี 10 → ขาดอยู่ 2) → บ่ายขายไป 3 ชิ้น → เย็นกดปิดรอบ ระบบจะปรับด้วยส่วนต่าง −2 กับยอดปัจจุบัน (7) → เหลือ 5 ชิ้น ซึ่งตรงกับของจริง ถ้าเอาจำนวนที่นับได้ไปทับ จะกลายเป็น 8 ชิ้น = การขายตอนบ่ายหายไป และรอบนับครั้งหน้าจะรายงานว่า "หาย 3"

ไม่ต้องรีบปิดรอบให้ทันวันเดียว — นับค้างไว้แล้วกลับมาปิดวันหลังได้ ยอดยังถูก

⚠️ ถ้ามีคนขยับยอดของรายการเดียวกันในจังหวะที่กำลังกดปิดรอบพอดี ระบบจะไม่บันทึกอะไรเลยแล้วบอกให้กดปิดรอบอีกครั้ง — ปลอดภัยกว่าการเขียนตัวเลขที่ไม่ตรงกับที่แสดงให้ดูก่อนยืนยัน

⭐ ปิดรอบนับ — เลือกได้ว่าจะปรับสต๊อกจริงหรือไม่

ตัวเลือกผลลัพธ์
ปิดรอบอย่างเดียว ไม่แก้สต๊อก (ค่าตั้งต้น)บันทึกผลการนับไว้เป็นรายงาน ตัวเลขสต๊อกไม่ขยับ — เหมือนเดิมทุกประการ
ปิดรอบและปรับสต๊อกตามที่นับได้เขียนจำนวนจริงทับตัวเลขในระบบ พร้อมบันทึกการเคลื่อนไหวไว้ให้ตรวจย้อนหลังได้

ก่อนกดยืนยัน ระบบจะแสดงให้ดูก่อนเสมอว่าจะเปลี่ยนอะไรบ้าง — รายการไหน จาก 5 → 1 รวมกี่ชิ้น และของไหนที่ระบบ ข้ามไม่ปรับ พร้อมบอกว่าข้ามเพราะอะไร

ระบบข้ามไม่ปรับยอดใน 3 กรณี:

  • ยังไม่ได้นับ — "ไม่ได้นับ" ไม่เท่ากับ "นับได้ 0" ถ้าปรับให้เท่ากับ 0 คือลบสต๊อกทิ้งเพราะนับไม่ทัน
  • ยอดตรงอยู่แล้ว — ไม่มีอะไรต้องแก้
  • สินค้าที่ตั้งค่าไว้ว่าไม่นับสต๊อก (ดู §6.12) — ยังโชว์ในรายการให้นับ แต่ไม่ไปแตะยอด

⚠️ มือถือเป็นการรายงานอย่างเดียว — ระบบบอกว่าเครื่องไหนหาย/เกิน แต่ ไม่เปลี่ยนสถานะเครื่องให้อัตโนมัติ ต้องไปจัดการที่หน้าสต็อกมือถือเอง เพราะการตัดเครื่องออกจากสต๊อกเป็นเรื่องที่ต้องตัดสินใจทีละเครื่อง

"หายจริง" กับ "ยังไม่ได้นับ" ระบบแยกให้แล้ว

หน้าปิดรอบแยก 2 ตัวเลขนี้ออกจากกัน เพราะแก้คนละทาง:

  • นับแล้วขาดจริง — เดินไปนับแล้วพบว่าหายจริง ต้องหาสาเหตุ
  • ยังไม่ได้นับ — ยังนับไม่ถึง ถ้ายังไม่เสร็จให้ปิดหน้านี้แล้วกลับมานับต่อได้ ไม่ต้องรีบปิดรอบ

⚠️ ถ้าปิดรอบทั้งที่ยังนับไม่ครบ รายการที่เหลือจะถูกบันทึกว่าหายทั้งจำนวน ระบบเตือนเรื่องนี้ก่อนให้ยืนยันเสมอ

ข้อดีของการนับสต๊อก:

  • จับของที่ขายออกไปโดยไม่ได้บันทึกในระบบ
  • รู้อัตราของหายต่อเดือน
  • ใช้คุยกับผู้จัดจำหน่ายตอนรับของไม่ครบ

⚠️ ห้ามมีรอบนับเปิดพร้อมกัน 2 รอบในสาขาเดียวกัน — ระบบจะบอกว่ามีรอบเปิดอยู่ พร้อมปุ่มพาไปที่รอบนั้น ⚠️ ปิดรอบแล้วแก้ไม่ได้อีก (เก็บไว้เป็นหลักฐาน)

⭐ ยกเลิกรอบนับที่เปิดผิด (ใหม่ 6 ก.ย. 2569)

เปิดรอบผิดสาขา · ผิดชนิด · หรือเปิดซ้ำโดยไม่ตั้งใจ — เดิมเอาออกไม่ได้เลย ต้องกด "ปิดรอบนับ" ซึ่งทำให้รอบขยะกลายเป็นรอบที่ "เสร็จสิ้น" ปนอยู่ในประวัติ และรอบที่ค้างจะล็อกสาขานั้นไม่ให้เปิดรอบใหม่ได้

วิธีทำ — เปิดหน้ารอบนั้น (/stock-count/[id]) → กดปุ่มแดง "ยกเลิกรอบนับ" มุมขวาบน

ใครทำได้ผู้จัดการขึ้นไป (แคชเชียร์/ช่างไม่เห็นปุ่มนี้)
ต้องกรอกอะไรเหตุผล อย่างน้อย 10 ตัวอักษร — แตะชิปสำเร็จรูปได้ (เปิดผิดสาขา · เปิดรอบซ้ำ · ยกเลิกการตรวจ · อื่น ๆ) แล้วพิมพ์เพิ่ม
ก่อนกดยืนยันจะเห็นรอบนี้มีกี่รายการ · นับไปแล้วกี่รายการ

สิ่งที่เกิดขึ้น

  • ✅ จำนวนสต๊อกจริงไม่ถูกแตะเลยสักชิ้น — การยกเลิกไม่ใช่การปรับสต๊อก
  • ✅ ตัวเลขที่พนักงานเดินนับไปแล้วยังอยู่ครบทุกแถว เปิดดูย้อนหลังได้ว่านับไปถึงไหน
  • ✅ เปิดรอบใหม่ที่สาขาเดิมได้ทันที
  • ✅ มีร่องรอยใน บันทึกการตรวจสอบ (/audit-logs → ประเภท "รอบนับสต๊อก") ว่าใครยกเลิก เพราะอะไร เมื่อไร
  • 🔴 ยกเลิกแล้วกู้กลับไม่ได้ — รอบนั้นจะยิงบาร์โค้ด · คีย์จำนวน · ปิดรอบ ไม่ได้อีกตลอดไป ถ้าต้องนับใหม่ให้เปิดรอบใหม่
  • รอบที่ยกเลิกยัง แสดงในรายการตามปกติพร้อมป้ายเทา "ยกเลิก" (ไม่ซ่อน — เพื่อให้ตอบได้ว่าเดือนนั้นเกิดอะไรขึ้น)
  • ไฟล์ Excel ที่ส่งออกจากรอบที่ยกเลิก จะเขียนสถานะว่า "ยกเลิกรอบแล้ว — ไม่มีการปรับจำนวนสต๊อกจากรอบนี้"

3.4 โอนสินค้าระหว่างสาขา (Stock Transfer) ⭐ NEW

📍 หน้า: /stock-transfer 👤 สิทธิ์: ขอโอน = ทุก role; อนุมัติ/ยกเลิก = MANAGER+

วัตถุประสงค์: Multi-branch ใช้ได้แล้ว แต่ก่อนหน้านี้ โอนของระหว่างสาขาไม่ได้ — ของอยู่สาขา A ลูกค้าอยากซื้อที่สาขา B → ต้องลบ-สร้างใหม่ (ไม่มี audit trail). ระบบ Stock Transfer แก้ปัญหานี้

Workflow 3 stages:

สถานะคำอธิบายAction
PENDINGขอโอน รอ manager ของสาขาต้นทางอนุมัติmanager กด อนุมัติ + ส่ง → IN_TRANSIT
IN_TRANSITส่งของแล้ว — สาขาต้นทางตัดสต็อก/RESERVED ไว้manager ปลายทางกด รับเข้า เมื่อของมา → RECEIVED
RECEIVEDของมาถึงปลายทาง — สาขาปลายทางได้สต็อกเพิ่ม(จบ — เลขที่ใบโอน TR-XXX-XXXX-XXXX จบ lifecycle)
CANCELLEDยกเลิก (PENDING → cancel ได้ทันที / IN_TRANSIT → restore stock ที่ต้นทาง)(จบ)

สร้างคำขอโอน:

  1. ไป /stock-transfer → กด ขอโอนสินค้า (ต้องมี ≥ 2 สาขา)
  2. เลือกสาขาปลายทาง
  3. เพิ่มรายการจาก stock ที่สาขาปัจจุบัน — มี 3 tabs (อุปกรณ์ / อะไหล่ / มือถือ)
  4. กรอก qty (มือถือ = 1 เครื่อง = 1 row, อุปกรณ์/อะไหล่ปรับได้ตาม max stock)
  5. หมายเหตุ + บันทึก → status = PENDING
  6. ส่ง notification ไปที่ manager ของสาขาต้นทาง

Auto stock movement:

  • Approve (PENDING → IN_TRANSIT): มือถือ status=RESERVED, อุปกรณ์/อะไหล่ qty -= n
  • Receive (IN_TRANSIT → RECEIVED):
    • มือถือ: เปลี่ยน branchId + status=AVAILABLE
    • อุปกรณ์/อะไหล่: เพิ่มจำนวนที่สาขาปลายทาง — จับคู่ด้วยรหัสสินค้า (SKU)

⭐ แก้แล้ว 16 ส.ค. 2569: ชื่อสินค้าคนละแบบระหว่างสาขา ไม่ทำให้รับเข้าพังอีก

เดิมระบบจับคู่ด้วย ชื่อ + รหัส พร้อมกัน แต่ฐานข้อมูลบังคับห้ามรหัสซ้ำในสาขาเดียวกัน (ไม่สนชื่อ) → ถ้าสาขาปลายทางมีของ รหัสเดียวกันแต่ชื่อสะกดต่างกัน (เช่น จอ A05S กับ A05S) ระบบจะหาไม่เจอ แล้วพยายามสร้างรายการใหม่ → ชนกฎห้ามรหัสซ้ำ → ขึ้น "เกิดข้อผิดพลาดภายในระบบ" และกดกี่ครั้งก็พังเหมือนเดิม แก้เองไม่ได้เลย

ตอนนี้จับคู่ด้วย รหัสสินค้าอย่างเดียว ตรงกับกฎของฐานข้อมูล ทำให้:

  • ชื่อไม่ตรงกันก็รับเข้าได้ จำนวนไปรวมกับรายการเดิมที่รหัสตรงกัน
  • ชื่อ ราคา และจุดสั่งซื้อของสาขาปลายทางไม่ถูกเขียนทับ (ร้านอาจตั้งชื่อของตัวเองไว้โดยตั้งใจ)
  • ระบบแจ้งบนจอว่าไปรวมกับรายการชื่ออะไร เช่น อะไหล่ "จอ A05S" × 8 — รวมเข้ากับ "A05S" (รหัส 030031) จะได้ไม่งงว่าทำไมไม่เห็นชื่อใหม่โผล่มา
  • รายการที่เคย ปิดใช้งาน ไว้ที่ปลายทางจะถูกเปิดคืนให้ ไม่งั้นยอดเพิ่มจริงแต่มองไม่เห็นบนหน้าจอ
  • ของที่ ไม่มีรหัส SKU ใช้ชื่อจับคู่แทน (ตามเดิม)

ถ้าเจอปัญหานี้ก่อนอัปเดต — แก้ชื่อที่สาขาปลายทางให้ตรงกับต้นทางแล้วกดรับเข้าใหม่จะผ่านทันที · ของไม่หายระหว่างนั้น เพราะทุกครั้งที่พังระบบย้อนรายการทั้งหมดกลับ ใบยังอยู่สถานะ "กำลังโอน" ครบ

transferNumber format: TR-{branchCode}-{BEyear}-{seq:04} — running serial ตาม docSerial system

Tabs: ทั้งหมด / ขาเข้า (รับ) / ขาออก (ส่ง) — filter ดูตามทิศทาง

4. รับซื้อ-ตีราคา

📍 หน้า: /purchase 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: บันทึกการรับซื้อมือถือมือสองจากลูกค้า พร้อมตีราคา และออกใบรับซื้อ

ขั้นตอนรับซื้อมือถือ:

  1. กดปุ่ม "+ รับซื้อสินค้า"
  2. เลือกลูกค้า (หรือเพิ่มลูกค้าใหม่ในฟอร์มเดียวกัน)
  3. กรอกข้อมูลอุปกรณ์:
ฟิลด์คำอธิบายจำเป็น
ลูกค้าเลือกจากฐานข้อมูล หรือเพิ่มใหม่✅
ประเภทอุปกรณ์มือถือ, แท็บเล็ต ฯลฯ✅
ยี่ห้อยี่ห้อสินค้า✅
รุ่นรุ่นสินค้า✅
ความจุหน่วยความจำ✅
สีสีสินค้า✅
IMEI/Serialหมายเลขเครื่อง (สแกน Barcode ได้)✅
สภาพสภาพเครื่อง✅
ราคารับซื้อราคาที่จ่ายให้ลูกค้า✅
ราคาตั้งขายราคาที่จะขายต่อ✅
Checklist อุปกรณ์ตรวจสอบอุปกรณ์แนบมา❌
รูปภาพถ่ายรูปสภาพเครื่อง❌
หมายเหตุเงื่อนไขพิเศษ❌
  1. กรอก Checklist อุปกรณ์ เพื่อบันทึกว่ามาพร้อมอะไรบ้าง:
    • กล่อง, ที่ชาร์จ, หูฟัง, สายชาร์จ, คู่มือ ฯลฯ
  2. กดปุ่ม "บันทึกรับซื้อ"
  3. ระบบเพิ่มสินค้าเข้า Stock อัตโนมัติ

คุณสมบัติเพิ่มเติม:

  • สแกน IMEI ด้วยกล้อง Barcode Scanner
  • อัปโหลดรูปสภาพเครื่องหลายรูป
  • ดูประวัติการรับซื้อย้อนหลัง
  • กัน IMEI ซ้ำในร้าน — เครื่องที่เคยรับเข้าระบบแล้ว ระบบไม่ให้บันทึกซ้ำ (ภายในร้านตัวเองเท่านั้น)

⚠️ ข้อควรระวัง — ตรวจเครื่องด้วยตนเองก่อนรับ

ระบบ MobileHub ไม่ได้ ตรวจ iCloud lock / Find My iPhone / blacklist global โดยอัตโนมัติ — checklist "ปลด Apple ID แล้ว" / "Factory Reset แล้ว" ในฟอร์มเป็นการ ยืนยันจากผู้ขาย เท่านั้น (self-declaration)

กรุณาตรวจด้วยตนเองก่อนจ่ายเงินรับเครื่อง:

  1. Settings → Apple ID → กดออกจากระบบ (Sign Out) — ต้องสำเร็จไม่ติดรหัส
  2. Find My iPhone — ต้องปิด (status = Off)
  3. Settings → General → Transfer or Reset → Erase All Content and Settings — ลองเริ่ม flow แต่ไม่ต้องกดยืนยัน เพื่อยืนยันว่าไม่ติดล็อค
  4. ถ้ามีข้อสงสัย iCloud lock / สถานะ blacklist — ใช้บริการตรวจ IMEI ภายนอก (เช่น IMEI24, SickW) ก่อนตัดสินใจรับ

หลักฐานทางกฎหมาย: ใบรับซื้อมือถือมือสองมีคำรับรองผู้ขาย 5 ข้อ (ไม่ใช่ของโจร / ไม่ติด iCloud / ไม่ติดผ่อน / IMEI ไม่ blacklist / ยินยอมรับผิดทางอาญา ม.357 ถ้าเป็นเท็จ) + ลายเซ็น 3 ฝ่าย + สำเนาบัตรประชาชน — ใช้ป้องกันร้านจากข้อหา "รับของโจร" ได้

💡 เคล็ดลับ: หลังรับซื้อสำเร็จ สินค้าจะปรากฏในหน้า สต็อกมือถือ โดยอัตโนมัติ พร้อมข้อมูลครบถ้วน

4.9 ใบรับซื้อที่ค้าง "เข้าสต็อก" แต่ไม่มีเครื่องในคลัง ⭐ ใหม่ 14 ส.ค. 2569

อาการ: ใบรับซื้อขึ้นสถานะ "เข้าสต็อก" แล้ว แต่ค้นในคลังไม่เจอเครื่องนั้น

เกิดจาก: ตอนกด "เข้าสต็อก" ระบบสร้างเครื่องในคลังไม่สำเร็จ สาเหตุที่พบบ่อยคือ IMEI ซ้ำกับเครื่องที่มีอยู่แล้ว หรือ จำนวนสินค้าเต็มโควตาแพ็คเกจ

⚠️ เดิมแก้เองไม่ได้เลย — ใบที่ถึงสถานะนี้จะถูกล็อกไม่ให้เดินสถานะต่อ และยังถูกซ่อนจากรายการตั้งต้นของหน้าด้วย จึงมองไม่เห็นว่ามีใบค้างอยู่

ตอนนี้:

  1. ใบแบบนี้จะ โผล่ในรายการตั้งต้น พร้อมป้ายสีส้ม "ไม่มีเครื่องในคลัง" และมีตัวนับอยู่ด้านบนบอกว่ามีกี่ใบ พร้อมปุ่มกรองดูเฉพาะใบที่ค้าง
  2. กดปุ่มกู้ที่แถวนั้น ระบบจะ แสดงก่อนว่าจะสร้างเครื่องอะไร (รุ่น · IMEI · สาขา · สภาพ · ราคาทุน · ราคาขาย) ให้ตรวจก่อนกดยืนยัน
  3. ถ้ากู้ไม่สำเร็จ ระบบบอกสาเหตุเป็นภาษาไทยพร้อมทางแก้ เช่น
    • IMEI ซ้ำ → มีปุ่มพาไปแก้ IMEI ในใบนี้ แล้วกดใหม่ได้
    • โควตาเต็ม → บอกว่าต้องอัปเกรดแพ็คเกจหรือลบของเก่าออกก่อน
    • มีคนกดพร้อมกันจากอีกเครื่อง → ให้กดรีเฟรชรายการก่อน อย่ากดซ้ำ

✅ ใบที่เข้าสต็อกสำเร็จแล้ว (มีเครื่องในคลังจริง) ยังถูกซ่อนและล็อกเหมือนเดิมทุกประการ ปุ่มกู้จะขึ้นเฉพาะใบที่ไม่มีเครื่องผูกอยู่จริงเท่านั้น

5. งานซ่อม

5.1 รับเครื่อง (3-step guided flow) ⭐ ปรับปรุง 2026-05-14

📍 เส้นทาง: /repair-intake → /repair-checklist → /repair-documents (preview) 👤 สิทธิ์: OWNER, ADMIN, MANAGER, SALESTECH (ช่างธรรมดา ไม่เห็น เมนูรับเครื่อง)

วัตถุประสงค์: รับเครื่องจากลูกค้า บันทึกข้อมูล + เช็คสภาพก่อนซ่อม + ออกใบรับซ่อมพร้อมพิมพ์ ภายในชุดเดียวกัน (ไม่ต้องสลับหน้าหลายครั้ง)

ขั้นที่ 1 — รับเครื่อง (กรอกข้อมูล + เซ็น)

ที่ /repair-intake กด "+ รับเครื่อง" → modal เปิด

ฟิลด์ในฟอร์ม:

ฟิลด์คำอธิบายจำเป็น
ลูกค้าเลือกหรือเพิ่มใหม่ (ค้นหาด้วยชื่อ/เบอร์)✅
🚀 Quick-pick template(ไม่บังคับ) เลือก template งานยอดฮิต → auto-fill ยี่ห้อ/รุ่น/ค่าแรง/อาการ❌
ประเภทเครื่องมือถือ / แท็บเล็ต / สมาร์ทวอทช์ / หูฟัง / อื่นๆ✅
ยี่ห้อจาก Master Brands ของสาขา✅
รุ่นจาก Master Models (กรองตามยี่ห้อ)✅
IMEIตัวเลข 15 หลัก (มี 3-layer guard กันพิมพ์ตัวอักษร)❌ — เครื่องที่ไม่มี IMEI เว้นไว้แล้วกรอก SN แทน
Serial Number (SN)เลขซีเรียลของเครื่องที่ไม่มี IMEI เช่น แท็บเล็ต WiFi · สมาร์ทวอทช์ · หูฟัง (พิมพ์ได้ทั้งตัวเลขและตัวอักษร สูงสุด 64 ตัว เช่น F2LX1234ABCD)❌
🔒 รหัสปลดล็อกเครื่อง ⭐ ใหม่ 16 ส.ค. 2569รหัสที่ช่างต้องใช้เปิดเครื่องเพื่อทดสอบ — ใส่ได้ทุกแบบ: ตัวเลข PIN · รหัสตัวอักษร · รูปแบบลากนิ้ว (เช่น L → ↓ → →) · หรือแตะชิปสำเร็จรูป "ไม่มีรหัส" / "ลายนิ้วมือ"❌
📅 วันนัดรับเครื่อง ⭐ ใหม่ 23 ส.ค. 2569วันที่นัดลูกค้ามารับ — เลือกจากปฏิทิน พ.ศ. หรือ แตะชิปสำเร็จรูป: วันนี้ / พรุ่งนี้ / +2 วัน / +3 วัน / +7 วัน❌
🕐 เวลานัด ⭐ ใหม่ 23 ส.ค. 2569ช่องแยกข้าง ๆ วันนัด — พิมพ์ตัวเลขอย่างเดียว เช่นพิมพ์ 1430 ระบบใส่ทวิภาคให้เองเป็น 14:30 (ตัวอักษรพิมพ์ไม่ได้) · เลือกวันแล้วไม่พิมพ์เวลา ระบบใส่ 17:00 น. ให้❌

🔒 เรื่องรหัสปลดล็อกเครื่อง — สิ่งที่ระบบทำและไม่ทำ (ใหม่ 16 ส.ค. 2569)

เดิมไม่มีช่องให้ใส่ ร้านจึงพิมพ์รวมไว้ในช่อง "อาการเสีย" ซึ่งทำให้รหัสไปโผล่หลายที่โดยไม่ตั้งใจ — รวมถึงใบรับซ่อมที่ลูกค้าถือกลับบ้าน และ หน้าติดตามงานซ่อมออนไลน์ ที่ใครก็เปิดดูได้ถ้ารู้เลขใบ

  • เก็บไว้ให้ช่างดูบนจอเท่านั้น — ช่างเปิดดูได้ในหน้ารายละเอียดงานที่ งานของฉัน (มีปุ่มคัดลอก) และแก้ไข/ลบได้จากหน้า รายการงานซ่อมทั้งหมด
  • ❌ ไม่พิมพ์ลงเอกสารใด ๆ ทั้งใบรับซ่อม ใบเสร็จ ใบประกัน · ❌ ไม่ออกหน้าติดตามสาธารณะ
  • ล้างช่องแล้วรหัสถูกลบจริง — ใช้ตอนส่งมอบเครื่องเสร็จแล้วไม่อยากเก็บรหัสลูกค้าไว้
  • ระบบไม่ย้ายรหัสเก่าที่พิมพ์ค้างในช่องอาการให้อัตโนมัติ — เดาไม่ได้ว่าข้อความส่วนไหนคือรหัส ร้านที่ต้องการย้ายต้องแก้เอง (เปิดงานเก่า → ตัดรหัสจากช่องอาการ → วางในช่องใหม่)

📅 วัน–เวลานัดรับเครื่อง — ลูกค้าเช็คเองได้ ไม่ต้องโทรถาม (ใหม่ 23 ส.ค. 2569)

  • ไม่บังคับกรอก — ยังไม่รู้ว่าเสร็จเมื่อไหร่ก็เว้นว่างไว้ได้ตามปกติ ระบบไม่บังคับและไม่เตือน
  • 🖊️ หน้าต่างที่มีลายเซ็นลูกค้า จะถามยืนยันก่อนปิดเสมอ ⭐ ใหม่ 23 ส.ค. 2569 ใช้กับ รับเครื่อง · เช็คก่อนซ่อม · เช็คหลังซ่อม · ออกเอกสารงานซ่อม ถ้ากด ✕ ทั้งที่กรอกหรือให้ลูกค้าเซ็นไว้แล้ว จะมีหน้าต่างถามก่อน — เลือก "กลับไปกรอกต่อ" หรือ "ออกโดยไม่บันทึก" · เหตุผล: ลายเซ็นทำหายแล้วต้องเดินไปขอให้ลูกค้าเซ็นใหม่ ซึ่งช้าและเสียหน้ากับลูกค้า ต่างจากข้อมูลที่พิมพ์เองซึ่งพนักงานพิมพ์ใหม่ได้ (ยังไม่ได้แตะอะไรเลย ปิดได้ทันทีไม่ถาม)
  • แตะนอกกรอบไม่ปิดแล้ว — ครบทุกหน้าต่างกรอกข้อมูลในระบบแล้ว ⭐ ใหม่ 23 ส.ค. 2569 รอบแรกใช้กับ เช็คก่อน/หลังซ่อม · หน้าขาย · รับซื้อ · ลูกค้า · อะไหล่ · อุปกรณ์เสริม · งานซ่อม รอบนี้เก็บที่เหลือครบทั้งระบบ: ข้อมูลหลักทุกหน้า (ยี่ห้อ/รุ่น/สี/ความจุ/สถานะ/หมวดหมู่ ฯลฯ) · ผู้ใช้ · สาขา · ผู้จัดหา · ค่าใช้จ่าย · เงินเดือน · ลงเวลาทำงาน · เปิดกะ · ปิดกะ · เงินเข้า-ออกลิ้นชัก · โอนสินค้าระหว่างสาขา · นับสต๊อก · คัดลอกสินค้า · ประกันและการเคลม · ใบแจ้งหนี้ · รับเงิน · คืนเงิน · ยกเลิกบิล · เบิกอะไหล่ · สั่งซื้ออะไหล่ · เทิร์นเครื่อง · พิมพ์ฉลาก · เปลี่ยนรหัสผ่าน (หน้าต่างที่เป็นแค่ ยืนยัน / ดูตัวอย่างเอกสาร / ดูข้อมูล ยังปิดด้วยการแตะนอกกรอบได้เหมือนเดิม เพราะไม่มีข้อมูลอะไรให้หาย — เช่น ตัวอย่างใบเสร็จก่อนพิมพ์ และ จอปิดยอดสิ้นวัน (Z Report)) 💡 ทุกหน้าต่างยังปิดได้ตามปกติด้วยปุ่ม ✕ หรือ ยกเลิก — ไม่มีหน้าต่างไหนกลายเป็นทางตัน
  • ปิดหน้าต่างรับเครื่องแล้วข้อมูลไม่หายอีกแล้ว ⭐ ใหม่ 23 ส.ค. 2569 — แตะนอกกรอบไม่ปิดแล้ว และถ้ากด ✕ หรือ ยกเลิก ทั้งที่กรอกอะไรไว้ ระบบจะถามยืนยันก่อน (ฟอร์มที่ยังว่างเปล่าปิดได้เลยไม่ถาม) · กรอบให้ลูกค้าเซ็นเข้มขึ้นแล้ว มองเห็นชัดบนแท็บเล็ต
  • แยกเป็น 2 ช่อง: วันนัด กับ เวลานัด — ช่องเวลาพิมพ์ตัวเลขอย่างเดียว พิมพ์ 1430 ระบบใส่ทวิภาคให้เองเป็น 14:30 ไม่ต้องพิมพ์เครื่องหมาย · พิมพ์ตัวอักษรไม่เข้าเลย · ใส่เวลาเกินจริง (เช่น 25:99) ระบบเตือนใต้ช่องทันที 💡 ใช้ได้ทั้งบนคอมและแท็บเล็ต — เดิมช่องเวลาอยู่ในปฏิทิน ทำให้บนแท็บเล็ตแป้นพิมพ์ เด้งขึ้นแล้วหายทันที พิมพ์ไม่ได้ (แก้แล้ว 23 ส.ค. 2569 โดยแยกช่องออกมา)
  • แตะชิปแทนการพิมพ์ — วันนี้ / พรุ่งนี้ / +2 วัน / +3 วัน / +7 วัน (ใส่เวลา 17:00 น. ให้อัตโนมัติ แก้เป็นเวลาอื่นได้) เหมาะกับหน้าเคาน์เตอร์ที่ต้องรับเครื่องเร็ว
  • พิมพ์ลงใบรับซ่อมที่ลูกค้าถือกลับ — และ ขึ้นที่หน้าติดตามงานออนไลน์ ที่ลูกค้าสแกน QR เข้าไปดูเอง
  • เลื่อนนัดได้ตลอด — แก้ที่ รายการงานซ่อมทั้งหมด (§5.3) · ลบวันนัดทิ้งก็ได้ถ้ายกเลิกนัด
  • ⚠️ ใบที่ออกไปแล้วจะไม่เปลี่ยนตาม — ถ้าเลื่อนนัดหลังออกใบรับซ่อมไปแล้ว ใบเดิมยังพิมพ์วันเดิม (โดยตั้งใจ — ใบที่ลูกค้าถืออยู่ในมือต้องตรงกับที่พิมพ์ให้เขาไป) ต้องการให้ตรงต้องออกใบใหม่
  • เลยนัดแล้วมีป้ายส้ม "เลยนัด N วัน" ในรายการงานซ่อม — เตือนอย่างเดียว ไม่บล็อกอะไร และขึ้นเฉพาะงานที่ยังซ่อมไม่เสร็จ · งานที่ซ่อมเสร็จแล้วรอลูกค้ามารับ ดูที่การ์ด "พร้อมส่งมอบ — แจ้งลูกค้า" บนหน้าแรกแทน
  • งานเก่าก่อนวันนี้ไม่มีวันนัด — ระบบไม่เดาย้อนหลังให้ ขึ้นว่า "ไม่ได้นัด" จนกว่าจะมีคนกรอก

💡 ถ้ายังไม่มี "รุ่น" ในระบบ เพิ่มได้จากหน้านี้เลย ⭐ NEW — ไม่ต้องปิดฟอร์มไปเพิ่มที่ ข้อมูลหลัก › รุ่น ก่อนแล้วกลับมากรอกใหม่

  1. เลือก ยี่ห้อ ก่อน (ปุ่มจะยังกดไม่ได้ถ้ายังไม่เลือก เพราะรุ่นต้องผูกกับยี่ห้อเสมอ)

  2. กดปุ่ม + สีเขียว ข้างช่องรุ่น

  3. พิมพ์ชื่อรุ่น → กด เพิ่มรุ่น (หรือกด Enter)

  4. ระบบบันทึกเข้าข้อมูลหลักของสาขานั้น แล้วเลือกให้อัตโนมัติ กรอกต่อได้เลย ครั้งหน้าก็มีให้เลือกในดรอปดาวน์

  • ทำได้: เจ้าของร้าน · ผู้ดูแล · ผู้จัดการ · ช่าง (เท่ากับคนที่เข้าหน้ารับเครื่องได้อยู่แล้ว)
  • พิมพ์ชื่อซ้ำกับที่มีอยู่ ระบบจะเลือกตัวเดิมให้ ไม่สร้างซ้ำ (ไม่สนตัวพิมพ์ใหญ่-เล็ก)
  • ยี่ห้อ ก็มีปุ่ม + เหมือนกัน ถ้ายี่ห้อยังไม่มีในระบบ เพิ่มได้จากหน้านี้เลย แล้วค่อยเพิ่มรุ่นต่อ

ปุ่ม + นี้มีในหน้าอื่นด้วย — ทุกที่ที่ต้องเลือกข้อมูลหลักระหว่างทำงานกับลูกค้า

หน้าเพิ่มได้จากในฟอร์ม
รับเครื่องซ่อม · รายการงานซ่อมทั้งหมดยี่ห้อ · รุ่น
รับซื้อ-ตีราคายี่ห้อ · รุ่น · ความจุ · สี
สต็อกมือถือยี่ห้อ · รุ่น · สี · ความจุ
อุปกรณ์เสริมยี่ห้อ
คลังอะไหล่หมวดหมู่อะไหล่ · ตำแหน่งจัดเก็บ

⚠️ ที่ไม่มีปุ่ม + โดยตั้งใจ — สถานะงานซ่อม · สถานะสินค้า · วิธีชำระเงิน · ประเภทหักเงินเดือน · หมวดค่าใช้จ่าย · ระยะประกัน พวกนี้เป็นการตั้งค่าระบบที่กระทบรายงานและขั้นตอนการทำงานทั้งร้าน ต้องให้ผู้ดูแลตั้งที่ ข้อมูลหลัก เท่านั้น | รูปถ่ายเครื่อง | สูงสุด 10 รูป (ลาก-วาง ขนาด ≤ 5MB/รูป) | ❌ | | อาการเสีย / ปัญหาที่พบ | ลูกค้าแจ้ง (Textarea) | ✅ | | ราคาประเมิน (เบื้องต้น) | ช่างปรับภายหลังตามอาการจริง | ❌ | | หมายเหตุ | เงื่อนไขพิเศษ | ❌ | | ลายเซ็นลูกค้า | canvas เซ็น (mouse/touch) — เก็บใน Repair.intakeSignature | ❌ — แนะนำให้เซ็น |

Validation: ถ้าฟิลด์ที่บังคับขาด → toast แดง "ข้อมูลไม่ถูกต้อง" รวมทุกฟิลด์ที่ขาดเป็น bullet list + แต่ละ Select มี error message ใต้ label. แก้ไขฟิลด์ใดก็ตาม → error ของฟิลด์นั้นหายอัตโนมัติ

กด "บันทึก" → ระบบสร้างงานซ่อม → toast เขียว "รับเครื่องสำเร็จ — ต่อไปเช็คสภาพเครื่องก่อนซ่อม" → redirect อัตโนมัติไปขั้นที่ 2

ขั้นที่ 2 — เช็คสภาพเครื่อง (PRE_REPAIR checklist)

ระบบพาไป /repair-checklist?repairId=...&autoOpen=PRE_REPAIR — modal เปิดเองทันที (ไม่ต้องคลิก)

สิ่งที่ทำ:

  • 24 รายการ default (Bluetooth / WiFi / กล้อง / แบตเตอรี่ / ลำโพง / Face ID / สแกนลายนิ้วมือ ... ตาม master items ของสาขา)
  • แต่ละรายการเลือก: ✅ ปกติ / ❌ ไม่ปกติ / — ไม่เกี่ยวข้อง
  • ถ้าเลือก ไม่ปกติ ต้องกรอกหมายเหตุอธิบาย (ระบบบังคับ ห้าม save ทิ้งไว้)
  • หมายเหตุภาพรวม (ถ้ามี) — เช่น "เคสมีรอย", "หน้าจอมีรอยเล็กน้อย"
  • ลายเซ็นลูกค้า อีกครั้ง — ยืนยันสภาพที่เห็นด้วยกัน (เก็บใน RepairChecklist.customerSignature)

กด "บันทึก" → toast "บันทึกสำเร็จ — เช็คก่อนซ่อม + ออกใบรับซ่อมเรียบร้อย" → redirect ไปขั้นที่ 3

ขั้นที่ 3 — preview ใบรับซ่อม (พร้อมพิมพ์)

ระบบพาไป /repair-documents?repairId=...&autoPreview=intake — modal ตัวอย่างเอกสารเปิดเองพร้อมเนื้อหาครบ:

  • 🏪 logo + ชื่อร้าน + ที่อยู่ + เลขประจำตัวผู้เสียภาษี
  • 🏷️ Title bar "ใบรับซ่อม" (สี slate gray)
  • 👤 ข้อมูลลูกค้า + 📱 ข้อมูลเครื่อง 2-col
  • 📷 รูปถ่ายเครื่องตอนรับ (สูงสุด 6 รูป)
  • 📋 สภาพเครื่องตอนรับ (ลูกค้ายืนยัน) — 24-item checklist 3-col + badge สีเขียว/แดง + บรรทัดท้ายบล็อก "เช็คโดย {ชื่อผู้เช็ค} · {วันเวลา}" (ระบบเก็บชื่อคนที่กดบันทึกให้เอง — ใบที่ลูกค้าถือกลับจึงระบุได้ว่าใครเป็นคนตรวจเครื่อง)
  • ⚠️ Note "ราคาซ่อมจะแจ้งในใบเสนอราคาภายหลัง" (กล่องเหลือง)
  • 📜 เงื่อนไขและข้อตกลง 4 ข้อ
  • ✍️ ลายเซ็นพนักงาน + ลายเซ็นลูกค้า (รูปลายเซ็นจาก checklist embed อัตโนมัติ)
  • 📦 QR tracking code (Kerry-style) — สำหรับให้ลูกค้าติดตามสถานะออนไลน์
  • 🙏 footer "ขอบคุณที่ใช้บริการ"

ทั้งหมด อยู่ใน 1 หน้า A4 (ใช้ .intake-receipt CSS scope compactions) → กดปุ่ม "พิมพ์" → printer dialog เปิด

ทำไมต้อง 3 ขั้น:

  • ขั้น 1 = บันทึก identity ของงาน (ใคร / อะไร / ปัญหา)
  • ขั้น 2 = หลักฐานยืนยัน "สภาพที่รับมา" — ป้องกันข้อพิพาทตอนคืนเครื่อง ("ตอนนั้นแบตปกติ ตอนนี้แบตเสีย!")
  • ขั้น 3 = เอกสารส่งให้ลูกค้า — มีลายเซ็น 2 จุด (intake + checklist) + checklist embed = ลูกค้าและร้านมีหลักฐานชุดเดียวกัน

💡 Tip — Skip checklist: ถ้างานเร่งและไม่ต้องการ checklist (เช่น เปลี่ยนสาย charger 5 นาที) ขั้น 2 ปิด modal ทิ้งได้ — ระบบยังคงสร้างงานซ่อมไว้ที่ /repair แล้ว แค่ไม่มี checklist + ไม่ออกใบให้อัตโนมัติ. สามารถออกใบรับซ่อมเองภายหลังที่ /repair-documents (ใบจะไม่มี checklist section)

⚠️ หมายเหตุ: ช่างที่มี Role TECHNICIAN เท่านั้น ไม่เห็น เมนูรับเครื่อง — เห็นเฉพาะงานที่ถูกมอบหมายในเมนู งานช่าง

5.2 งานช่าง

📍 หน้า: /technician-repairs 👤 สิทธิ์: OWNER, ADMIN, MANAGER, TECHNICIAN, SALESTECH

วัตถุประสงค์: ดูงานซ่อมที่ได้รับมอบหมาย อัปเดตสถานะ เบิกอะไหล่

สถานะงานซ่อม:

สถานะสีความหมาย
PENDING (รับเครื่อง)เทารับเครื่องแล้ว รอดำเนินการ
QUOTED (เสนอราคาแล้ว)ม่วงประเมินราคา รอลูกค้าอนุมัติ
APPROVED (อนุมัติแล้ว)ส้มลูกค้าอนุมัติแล้ว พร้อมซ่อม
IN_PROGRESS (กำลังซ่อม)ฟ้ากำลังซ่อมอยู่
WAITING_PARTS (รออะไหล่)เหลืองรออะไหล่ส่งมาก่อนซ่อมต่อ
COMPLETED (เสร็จแล้ว)เขียวซ่อมเสร็จ รอลูกค้ามารับ
DELIVERED (ส่งมอบแล้ว)ฟ้าทะเลส่งคืนลูกค้าแล้ว
CANCELLED (ยกเลิก)แดงยกเลิก

💡 ระบบแสดง badge สถานะเป็นภาษาไทยทั้งระบบ (/repair, /repair-intake, /technician-repairs, /repair-documents, /repair-warranty, /reports ฯลฯ) — ทำผ่านไฟล์กลาง lib/statusLabels.js

ขั้นตอนอัปเดตงานซ่อม:

  1. คลิกที่รายการงานซ่อม
  2. เปลี่ยนสถานะตามความเป็นจริง
  3. เพิ่มรายละเอียดการซ่อม (อะไหล่ที่ใช้ ค่าใช้จ่าย)
  4. กดปุ่ม "บันทึก"
  5. ระบบแจ้งเตือน Real-time ไปยังเจ้าของร้านและ Manager

การเบิกอะไหล่:

  1. คลิกปุ่ม "เบิกอะไหล่" ในรายการงาน
  2. เลือกอะไหล่จากคลังอะไหล่
  3. กรอกจำนวนที่ใช้
  4. ระบบตัดจำนวนออกจากคลังอะไหล่ทันที

⭐ ใหม่ 16 ส.ค. 2569 — ปิดงานซ่อมแล้วระบบตัดอะไหล่ให้เอง ไม่ต้องกดปุ่มเบิกอีก

เมื่อเปลี่ยนสถานะเป็น "ซ่อมเสร็จ" หรือ "ส่งมอบแล้ว" ระบบจะตัดอะไหล่ที่ลงไว้ในใบงาน ออกจากคลังให้อัตโนมัติ พร้อมบันทึกลงประวัติว่าของไปกับใบซ่อมใบไหน

⚠️ เดิมระบบไม่เคยตัดให้เลย ต้องกดปุ่ม "เบิกอะไหล่" เองทุกครั้ง และปุ่มนั้นไม่แสดง ตอนรับงานใหม่ ต้องกลับเข้าไปกด "แก้ไข" อีกรอบถึงจะเจอ — ร้านที่ไม่รู้จึงลงอะไหล่ในใบงาน ครบแต่สต๊อกไม่เคยลด ถ้าร้านของคุณเคยเจอแบบนี้ ทีมงานมีรายการให้ว่าต้องปรับยอดตัวไหนบ้าง

สถานการณ์ระบบทำอะไร
ลงอะไหล่ในใบงาน แล้วปิดงานตัดให้เองตอนปิดงาน
กดปุ่ม "เบิกอะไหล่" ไปแล้ว แล้วปิดงานไม่ตัดซ้ำ ของหายไปครั้งเดียว
ปิดงานซ้ำ / แก้ใบงานแล้วบันทึกอีกไม่ตัดซ้ำ
ของในคลังไม่พอปิดงานได้ตามปกติ แล้วบอกว่าตัดสำเร็จกี่รายการ ไม่สำเร็จกี่รายการเพราะอะไร<br>รายการที่ตัดไม่ได้ยังค้างเป็น "ยังไม่เบิก" เติมของแล้วกดปุ่มเบิกเก็บตกได้

ปุ่ม "เบิกอะไหล่" ยังใช้ได้เหมือนเดิม ถ้าอยากตัดของออกจากคลังตั้งแต่ตอนหยิบของมาซ่อม — กดแล้วปิดงานทีหลังก็ไม่ตัดซ้ำ

⭐ งานที่รับมาจากสาขาอื่น ไม่หายจากหน้าจอช่างอีกแล้ว (19 ส.ค. 2569)

เดิมหน้านี้แสดงเฉพาะงานของสาขาที่เลือกอยู่บนหัวจอ — ช่างที่ถูกส่งไปช่วยอีกสาขา แล้วรับงาน จากสาขานั้นมาทำ พอกลับมาเปิดหน้า งานช่าง ที่สาขาตัวเอง งานนั้นหายไปทั้งใบ โดยไม่มีอะไรบอก ว่าหายไปไหน ต้องเดาเองแล้วไปสลับสาขาบนหัวจอถึงจะเจอ

ตอนนี้ "งานของฉัน" ครอบทุกสาขาเสมอ — ไม่ว่าจะเลือกสาขาไหนค้างไว้บนหัวจอ งานที่มอบหมาย ให้คุณจะขึ้นครบทุกใบ (ใช้ได้ทันที ไม่ต้องตั้งค่าอะไร)

สิ่งที่เห็นในหน้า งานช่างขอบเขตสาขา
แท็บ งานของฉัน (งานที่มอบหมายให้คุณ)ทุกสาขา
แท็บ รอรับ และงานอื่นในรายการสาขาที่เลือกอยู่บนหัวจอ

ป้ายสีม่วงบอกชื่อสาขา — งานที่อยู่คนละสาขากับที่เลือกอยู่ จะมีป้ายชื่อสาขากำกับไว้ ทั้ง บนการ์ดในรายการ และ ในหน้าต่างรายละเอียดงาน

💡 ที่ต้องบอกซ้ำในหน้าต่างรายละเอียดด้วย เพราะช่างมักเปิดงานจากการค้นหาโดยไม่ได้มองการ์ด ถ้าไม่บอก จะไม่รู้เลยว่าเครื่องไม่ได้อยู่สาขาที่ตัวเองยืนอยู่ แล้วเดินไปหยิบผิดสาขา

⚠️ ถ้าโหลดงานจากสาขาอื่นไม่สำเร็จ ระบบจะบอก — ไม่ปล่อยให้อ่านเป็น "ไม่มีงาน"

จะขึ้นแถบสีส้ม "รายการอาจไม่ครบ" พร้อมปุ่ม "ลองใหม่" งานในสาขาที่เลือกอยู่ยังแสดงครบตามปกติ แต่งานที่คุณรับมาจากสาขาอื่นอาจยังไม่ขึ้น ให้กดลองใหม่ก่อน อย่าเพิ่งสรุปว่างานหาย

💡 เคล็ดลับ: ช่างเห็นเฉพาะงานซ่อมที่มอบหมายให้ตัวเอง (บวกงานที่ยังไม่มีช่างรับในสาขาที่เลือกอยู่ ซึ่งอยู่ในแท็บ รอรับ) ส่วนผู้จัดการและผู้ดูแลระบบเห็นงานทั้งหมด

5.3 รายการทั้งหมด

⭐ 8 ก.ย. 2569 — หน้าต่าง "ผูกอะไหล่/อุปกรณ์เสริม" เปิดมาที่แท็บ "อุปกรณ์เสริม" แล้ว

ที่มา — ร้านแจ้งว่า "ตรงอะไหล่ผมไม่ได้ใช้งานครับ เพราะว่าอะไหล่จะไปตัดคำว่าเพิ่มอะไหล่อยู่แล้วครับ" ซึ่งถูกต้อง: แถวอะไหล่มีปุ่ม "เพิ่มอะไหล่" ที่ตัดสต๊อกให้อยู่แล้ว การผูกอะไหล่ซ้ำที่แถว ค่าบริการ จึงเป็นทางที่ซ้ำซ้อน ⇒ เดิมต้องกดสลับแท็บทุกครั้งที่จะผูกฟิล์ม/เคส/สายชาร์จ

ตอนนี้

  • หน้าต่างเปิดมาที่แท็บ "อุปกรณ์เสริม" ทันที
  • 🔴 แท็บ "อะไหล่" ยังอยู่ครบ — ร้านที่เก็บกาวติดจอ/น็อตไว้ในคลังอะไหล่ยังผูกได้เหมือนเดิม
  • เปิดแถวที่เคยผูกไว้แล้ว จะเปิดมาที่แท็บของคลังนั้นเสมอ ไม่ใช่แท็บตั้งต้น
  • คำใบ้ใต้ช่องค้นหาสลับด้านตามแท็บที่เปิดอยู่ — อยู่แท็บอุปกรณ์เสริมจะชี้ไป "อะไหล่" (จอ แบตเตอรี่ ก้นชาร์จ ลำโพง กล้อง แพรชาร์จ) · อยู่แท็บอะไหล่จะชี้ไป "อุปกรณ์เสริม" (ฟิล์มกระจก เคส สายชาร์จ หัวชาร์จ หูฟัง พาวเวอร์แบงก์)

⭐ 2 ก.ย. 2569 — ค้นหาด้วยเลขงานได้แล้ว · ช่องค้นหารับ เลขงานสั้น 8 ตัว ที่ลูกค้าคัดลอกจากหน้าติดตาม (เช่น 43CC1942 หรือ #43CC1942) และรหัสเต็มของงาน · พิมพ์แค่ 4 ตัวแรก ก็เริ่มค้นได้ · ใช้ได้ทั้งหน้ารายการงานซ่อมและคิวรอชำระที่หน้าขาย

⭐⭐ 4 ก.ย. 2569 — ลงค่าบริการที่ไม่ใช่อะไหล่ได้แล้ว · ในหน้าต่างแก้ไขงานซ่อม กล่องรายการอะไหล่มีปุ่ม "เพิ่มค่าบริการ" เพิ่มมา ใช้ลงรายการอย่าง ติดฟิล์มกระจก · ค่าบริการล้างเครื่อง · ค่าตรวจเช็ค ที่มีชื่อและราคา แต่ไม่ใช่อะไหล่

อะไหล่ค่าบริการ
ตัดสต๊อก / เบิกของได้ได้ ถ้ากด "ผูกอะไหล่/อุปกรณ์เสริม" (ดูบล็อก 7 ก.ย. ด้านล่าง)
ช่องต้นทุน/ชิ้นกรอกได้กรอกไม่ได้ — ถ้าผูกคลังไว้ ระบบเขียนต้นทุนจริงให้เองตอนเบิก
ลูกค้าเห็นบนหน้าติดตามอยู่กลุ่ม "อะไหล่"อยู่กลุ่ม "ค่าบริการ" แยกกัน

· รายการเก่าทุกใบยังเป็นอะไหล่เหมือนเดิมทุกบรรทัด ไม่มีอะไรเปลี่ยน · 🔴 เลิกพิมพ์ค่าบริการปนในช่องผลวินิจฉัยได้แล้ว — พิมพ์ปนไว้จะทำให้ ราคารวมบนหน้าติดตามน้อยกว่าที่เก็บจริง เพราะระบบไม่รู้ว่าเป็นเงิน · ✅ ใบเสร็จและใบเสนอราคาที่พิมพ์ออกกระดาษแยก "ค่าอะไหล่" กับ "ค่าบริการ" ให้แล้ว (ตั้งแต่ 4 ก.ย. 2569)

⭐ 4 ก.ย. 2569 — ช่อง "อาการที่แจ้ง (แสดงให้ลูกค้าเห็น)" · เป็นช่องใหม่แยกต่างหาก จากช่องอาการเดิม · ช่องเดิมยังเป็น บันทึกภายในของร้าน เหมือนเดิม — ลูกค้าไม่เห็น (ร้านบางแห่งจดรหัสปลดล็อกเครื่องไว้ในนั้น) · ช่องใหม่นี้ ลูกค้าเห็นบนหน้าติดตาม ⇒ พิมพ์เฉพาะสิ่งที่อยากให้ลูกค้าอ่าน เช่น "จอแตก ทัชไม่ติดมุมบนซ้าย" · ไม่บังคับ · เว้นว่างไว้ = หน้าติดตามไม่แสดงหัวข้อนี้เลย · 🔴 ระบบไม่คัดลอกข้อความจากช่องเดิมมาให้อัตโนมัติ โดยเจตนา — เพราะข้อความเก่าอาจมีรหัสเครื่องลูกค้าปนอยู่

⭐ 5 ก.ย. 2569 — ปุ่ม "คัดลอกจากอาการเสีย" · อยู่ข้างช่อง "อาการที่แจ้ง (แสดงให้ลูกค้าเห็น)" กดแล้วระบบ นำข้อความจากช่อง "อาการเสีย" ด้านบนมาใส่ให้ แล้วแก้ก่อนบันทึกได้ · ปุ่มจะกดไม่ได้เมื่อช่อง "อาการเสีย" ยังว่าง · ถ้าช่องปลายทางมีข้อความอยู่แล้ว ระบบจะถามก่อนพร้อมโชว์ข้อความเดิม — เลือก "ไม่เขียนทับ" หรือ "เขียนทับ" · ข้อความยาวเกิน 1,000 ตัวอักษร จะถูกตัด และระบบบอกให้ทราบ (ไม่ตัดเงียบ ๆ) · 🔴 ระบบยังไม่เติมให้อัตโนมัติเหมือนเดิม — ต้องกดปุ่มเอง เพราะคนกดจะได้เห็นข้อความก่อนว่ามีรหัสเครื่องลูกค้าปนอยู่ไหม · ⚠️ ใต้ช่องมีคำเตือนติดไว้ตลอด: "ตรวจข้อความก่อนบันทึกทุกครั้ง — บรรทัดนี้ลูกค้าเห็นบนหน้าติดตาม ห้ามมีรหัสปลดล็อกเครื่องหรือบันทึกภายในร้านปนอยู่"

⭐⭐ 5 ก.ย. 2569 — ค่าบริการตัดสต๊อกได้แล้ว (ปุ่ม "ผูกอะไหล่จากคลัง")

ที่ร้านขอมา — "ลูกค้าติดฟิล์มด้วย ระบบก็จะตัดสต๊อคฟิล์มตัวนั้นด้วย"

วิธีใช้ — ในแถวค่าบริการ พิมพ์ชื่อและราคาตามปกติ (เช่น ติดฟิล์มกระจกเต็มจอ ฿150) แล้วกด "ผูกอะไหล่จากคลัง" ใต้ชื่อรายการ → เลือกฟิล์มจากคลัง · 🔴 ชื่อรายการและราคาที่กรอกไว้จะไม่เปลี่ยน — การผูกมีผลกับ การตัดสต๊อก อย่างเดียว · ผูกแล้วเห็นป้าย "<ชื่ออะไหล่> · คงเหลือ N" และมีปุ่มเอาการผูกออก · แถวนั้นจะเข้าคิว "ยังไม่เบิก" เหมือนอะไหล่ ⇒ กดเบิกเองได้ หรือระบบตัดให้ตอนปิดงาน · ช่องต้นทุนกรอกเองไม่ได้ — ระบบเขียนต้นทุนจริงจากคลังให้เองตอนเบิก (ขึ้นว่า "— ระบบเขียนให้เองตอนเบิก") · ลบแถวออกจากใบซ่อม ⇒ ของคืนเข้าคลังอัตโนมัติ · ⚠️ แถวที่เบิกไปแล้วเปลี่ยนการผูกไม่ได้ — ถ้าจะแก้ต้องลบแถวนั้นเพื่อคืนสต๊อกก่อน · ของในคลังไม่พอ ⇒ ปิดงานยังสำเร็จเหมือนเดิม ระบบจะบอกว่าตัวไหนตัดสต๊อกไม่ได้

· 🔴 ไม่ผูกก็ใช้ได้เหมือนเดิมทุกอย่าง — ค่าบริการที่ไม่กินของจากคลัง (ค่าตรวจเช็ค · ค่าแรง) ปล่อยว่างไว้ · 🔴 รายการเก่าทุกใบไม่เปลี่ยน — ระบบไม่ผูกให้ย้อนหลังและไม่เดา ต้องกดผูกเองเท่านั้น

⭐⭐⭐ 7 ก.ย. 2569 — ผูก "อุปกรณ์เสริม" ได้แล้ว ไม่ใช่แค่อะไหล่

ที่ร้านแจ้งมา — "หน้าตรงนี้ให้ไปผูกอะไหล่ อุปกรณ์เสริมได้ไหมครับ"

🔴 ทำไมของเดิมใช้ไม่ได้กับฟิล์ม — ปุ่มเดิมค้นเฉพาะ คลังอะไหล่ อย่างเดียว แต่ร้านส่วนใหญ่เก็บ ฟิล์มกันรอย · เคส · สายชาร์จ ไว้ที่ คลังอุปกรณ์เสริม (คนละเมนูกัน) ⇒ กดปุ่มแล้วหาฟิล์มของตัวเองไม่เจอเลย และชื่อปุ่มที่เขียนว่า "อะไหล่" ยิ่งทำให้เข้าใจว่าไม่เกี่ยวกัน

ตอนนี้ — ปุ่มเปลี่ยนชื่อเป็น "ผูกอะไหล่/อุปกรณ์เสริม" และในหน้าต่างเลือกมี 2 แท็บ · แท็บ อะไหล่ — เหมือนเดิมทุกอย่าง · แท็บ อุปกรณ์เสริม — ค้นจากคลังอุปกรณ์เสริม (พิมพ์ชื่อหรือ SKU ค้นได้) · ป้ายหลังผูกบอกด้วยว่ามาจากคลังไหน เช่น "อุปกรณ์เสริม · ฟิล์มกระจกนิรภัย · คงเหลือ 9" ⇒ ตอนนี้ ติดฟิล์มให้ลูกค้าแล้วสต๊อกฟิล์มลดจริง และต้นทุนจริงเข้าบัญชี

· 🔴 ผูกได้อย่างมากอย่างเดียว — เลือกจากแท็บหนึ่งแล้วอีกแท็บจะถูกล้างให้เอง (ของชิ้นหนึ่งมาจากคลังเดียว ไม่ใช่ทั้งสอง) · 🔴 อุปกรณ์เสริมที่ตั้งไว้ว่า "ไม่นับสต๊อก" ผูกไม่ได้ — ระบบจะบอกให้ไปเปิด "นับสต๊อก" ที่หน้าคลังอุปกรณ์เสริมก่อน · เหตุผล: ผูกไปก็ตัดสต๊อกไม่ได้ แล้วจะได้ป้าย "ยังไม่เบิก" ค้างถาวรที่แก้ไม่ได้ · ลบแถวออกจากใบซ่อม ⇒ ของคืนเข้าคลังอุปกรณ์เสริมอัตโนมัติ เหมือนฝั่งอะไหล่ · ยกเลิกงานซ่อม ⇒ คืนของให้เช่นกัน · ช่องต้นทุนยังกรอกเองไม่ได้ — ระบบเขียนต้นทุนจริงจากคลังให้ตอนเบิก · ป้าย "ยังไม่เบิก (N)" นับรวมทั้ง 2 คลังแล้ว

· 🔴 รายการเก่าทุกใบไม่เปลี่ยนแม้แต่บรรทัดเดียว — ระบบไม่ผูกย้อนหลังและไม่เดา · 🔴 ยอดเงินและจำนวนสต๊อกของงานเก่าไม่ขยับสักบาทสักชิ้น

⭐ 6 ก.ย. 2569 — ลำดับรายการอะไหล่ไม่สลับเองอีกแล้ว · เดิมแถวอะไหล่ในใบซ่อม สลับที่กันเองได้ทุกครั้งที่มีคนแก้แถวใดแถวหนึ่ง และเอกสาร 2 ใบของงานเดียวกันอาจเรียงไม่เหมือนกัน · ตอนนี้เรียงตาม ลำดับที่กรอกเข้าไป และคงที่ทุกครั้งที่เปิดดูหรือพิมพ์ · ⭐ 6 ก.ย. 2569 — ตรงกับลำดับที่คีย์แม้เพิ่มหลายรายการรวดเดียว (เดิมมีโอกาสสลับกันเองราว 5%) · ⭐ จอ "คลังอะไหล่" รีเฟรชเองแล้วเมื่อ ปิดงาน · ยกเลิกงาน · ลบรายการออกจากใบซ่อม (เดิมต้องกดรีเฟรชเอง) · 🔴 เอกสารที่ออกไปแล้วไม่เปลี่ยน — ระบบเก็บรายการไว้ตั้งแต่วันออกใบ พิมพ์ซ้ำได้เหมือนเดิมทุกตัวอักษร

⭐ 5 ก.ย. 2569 — ปุ่ม "เพิ่มค่าบริการ" ใช้ได้ที่หน้า "งานของฉัน" ของช่างแล้ว · เดิมมีเฉพาะหน้ารายการงานซ่อม · ช่างลงค่าบริการได้จากหน้าที่ตัวเองทำงานอยู่ ไม่ต้องสลับหน้า · หน้านั้นแยกบรรทัด "รวมค่าอะไหล่" กับ "รวมค่าบริการ" ให้เห็นอยู่แล้ว · ยอดรวมไม่เปลี่ยนสักบาท

📍 หน้า: /repair 👤 สิทธิ์: OWNER, ADMIN, MANAGER, SALESTECH (ช่างธรรมดา ไม่เห็น)

วัตถุประสงค์: ดูรายการงานซ่อมทั้งหมด กรอง/ค้นหา สร้างงานซ่อมใหม่

ฟีเจอร์:

  • ดูรายการงานซ่อมทั้งหมดของสาขา
  • ค้นหาด้วยชื่อลูกค้า, เบอร์โทร, ยี่ห้อ, รุ่น, หมายเลขงาน, IMEI, Serial Number (SN), อาการที่แจ้ง
  • กรองตามสถานะ
  • อัปเดตสถานะและรายละเอียด
  • ดูประวัติการซ่อมย้อนหลัง
  • แนบรูปเครื่องได้ 2 ชุดแยกกัน — รูปถ่ายเครื่อง และ รูปถ่ายเครื่อง (หลังซ่อม) (ดู §5.3B)
  • ⚠️ การรับงานซ่อมใหม่อยู่ที่ /repair-intake ไม่ใช่หน้านี้ — หน้านี้ใช้แก้ไขงานที่มีอยู่แล้วเท่านั้น
  • เดินสถานะจากแถวรายการได้เลย ไม่ต้องเปิดหน้าต่างแก้ไข (ดู §5.3A)

5.3B รูปหลังซ่อม ⭐ ใหม่ 1 ก.ย. 2569

⭐ 2 ก.ย. 2569 — แนบรูปได้จากในเช็คลิสต์แล้ว · เปิดเช็คลิสต์ ก่อนซ่อม จะมีช่อง รูปถ่ายเครื่อง (ตอนรับ) · เปิดเช็คลิสต์ หลังซ่อม จะมีช่อง รูปถ่ายเครื่อง (หลังซ่อม) — ช่างแนบรูปได้ตรงจุดที่กำลังตรวจเครื่องอยู่ ไม่ต้องกลับไปหน้าแก้ไขงานซ่อม · รูปชุดเดียวกันกับที่แก้จากหน้างานซ่อม (ดู §5.5)

📍 ที่ไหน: /repair → ปุ่ม แก้ไข ของงานนั้น → เลื่อนลงไปใต้ช่อง รูปถ่ายเครื่อง

ในหน้าต่างแก้ไขงานซ่อมมีช่องแนบรูป 2 ช่อง:

ช่องใช้เมื่อไรบังคับไหม
รูปถ่ายเครื่องช่องเดิมที่ใช้อยู่ทุกวัน (ช่องเดียวกับที่พิมพ์ลงใบรับซ่อม)❌
รูปถ่ายเครื่อง (หลังซ่อม) ⭐ถ่ายตอนซ่อมเสร็จ ก่อนส่งคืนลูกค้า❌ ไม่บังคับ

ทำไมถึงคุ้มที่จะถ่าย — ถ้าใส่ไว้ ลูกค้าจะเห็นรูปเทียบก่อน/หลังบนหน้าติดตาม (ร้านที่แพ็คเกจโปรเฟสชันนอลขึ้นไป · ดู §5.7) ไม่ใส่ก็ใช้งานได้ตามปกติทุกอย่าง ไม่มีอะไรบล็อก

🔴 ระบบไม่ย้ายรูปเก่าไปช่อง "หลังซ่อม" ให้อัตโนมัติ รูปที่เก็บไว้ก่อนหน้านี้อยู่ในช่องเดียวกันหมด และ ไม่มีอะไรบอกได้ว่าใบไหนถ่ายตอนไหน ระบบจึงไม่เดาให้ — ถ้าอยากให้งานเก่าแสดงแบบแยก ต้องเข้าไปย้ายเอง

⚠️ ใบรับซ่อม A4 ไม่เปลี่ยน — ยังพิมพ์เฉพาะ รูปถ่ายเครื่องตอนรับ เหมือนเดิม เพราะใบนั้นพิมพ์ตอนรับเครื่อง ซึ่งยังไม่มีรูปหลังซ่อมโดยธรรมชาติ

5.3A ปุ่มเดินสถานะที่แถวรายการ ⭐ NEW (8 ส.ค. 2569)

📍 ปุ่ม: ปุ่มสีตามสถานะถัดไป อยู่ในแถวงานซ่อมที่ /repair (ทั้งแบบตารางบนคอมและแบบการ์ดบนมือถือ)

ปัญหาเดิม: จะเลื่อนงานจาก "รับเครื่อง" ไป "กำลังซ่อม" ต้องเปิดหน้าต่างแก้ไข → เลื่อนหาช่องสถานะ → เลือก → กดบันทึก ทั้งที่งานหนึ่งวันต้องกดแบบนี้หลายสิบครั้ง

ตอนนี้: กดปุ่มที่แถวได้เลย ระบบเปลี่ยนสถานะให้ทันที

กติกาของปุ่ม

กรณีระบบทำอะไรทำไม
ขั้นกลางที่ขั้นถัดไปชัดเจน (เช่น รับเครื่อง → กำลังซ่อม)กดครั้งเดียว เปลี่ยนทันที ไม่ถามยืนยันงานนี้กดวันละหลายสิบครั้ง กล่องยืนยันทุกครั้งจะกลายเป็นการกดผ่านโดยไม่อ่าน · ตัวที่กันพลาดจริงคือประวัติการแก้ไขที่ระบบบันทึกให้ ไม่ใช่กล่องยืนยัน
ขั้นถัดไปกำกวม (กำลังซ่อม / รออะไหล่)กดแล้วกางเมนูให้เลือก 2 ทาง1 คลิกเมื่อไม่กำกวม · 2 คลิกเฉพาะตอนที่มีทางเลือกจริง
ส่งมอบแล้วถามยืนยันเสมอเป็นขั้นเดียวที่แตะเรื่องเงิน — ในโหมด "เก็บที่เคาน์เตอร์ซ่อม" งานที่มียอดมากกว่า ฿0 จะถูกบันทึกว่าเก็บเงินแล้วไปในคำสั่งเดียวกัน
ยกเลิกงานไม่มีในปุ่มด่วน — ต้องเปิดหน้าต่างแก้ไขเป็นการทำลายข้อมูล ไม่ควรอยู่ห่างจากนิ้วแค่คลิกเดียว

หน้าต่างยืนยันตอนกด "ส่งมอบแล้ว" จะแตกต่างกันตามสภาพของงาน

สภาพงานสิ่งที่เห็นทางออกที่ให้มาในหน้าต่างเดียวกัน
ปกติสรุปลูกค้า · เครื่อง · ยอด แล้วให้กดยืนยัน—
ร้านเก็บเงินที่หน้าขาย + ยังไม่ได้ลงราคาบอกว่าส่งมอบไม่ได้เพราะยังไม่รู้ยอดปุ่ม "ลงราคาเลย" → เปิดหน้าต่างแก้ไขงานใบเดียวกันให้ทันที
ร้านเก็บเงินที่หน้าขาย + ยังไม่ได้เก็บเงินบอกว่าต้องเก็บเงินที่แคชเชียร์ก่อนปุ่ม "ไปหน้าขาย"
ร้านเก็บเงินที่หน้าขาย + ยอด ฿0บังคับกรอกเหตุผล (เคลมประกัน / ซ่อมฟรี)กรอกแล้วระบบบันทึกเหตุผลลงหมายเหตุของงานให้

💡 ทุกกรณีที่กดไม่ได้ จะมีทางออกให้เสมอ — ไม่ใช่แค่บอกว่าทำไม่ได้แล้วปล่อยให้ไปหาเอง

ถอยสถานะกลับได้ ถ้ากดผิด

ปุ่มด่วนออกแบบให้ เดินหน้าอย่างเดียว แต่ถ้ากดพลาด ให้เปิดหน้าต่างแก้ไขงาน แล้วเลือกสถานะย้อนกลับได้ทุกค่า — จงใจเปิดทางถอยไว้ ไม่ได้ล็อก เพราะถ้าล็อกทั้งสองทาง ร้านที่กดผิดจะตันถาวรและแก้เองไม่ได้

ℹ️ งานที่ออกบิลขายไปแล้ว ยังเดินสถานะได้ตามปกติ และยัง แก้หมายเหตุ · เปลี่ยนช่าง · แก้คำวินิจฉัย ได้ — สิ่งเดียวที่แก้ไม่ได้คือ ราคา (ค่าแรง / ค่าอะไหล่) เพราะใบกำกับภาษีที่ออกไปแล้วแก้ย้อนหลังไม่ได้ตามข้อกำหนดของกรมสรรพากร ถ้าต้องแก้ราคาจริง ๆ ต้องไปยกเลิกบิลที่ /sales-history ก่อน (ซึ่งต้องเรียกใบกำกับภาษีฉบับเดิมคืนจากลูกค้าด้วย)

แจ้งลูกค้าทางอีเมลเมื่อสถานะเปลี่ยน ⭐ (10 ส.ค. 2569)

⚠️ อ่านก่อน: ลูกค้าร้านมือถือแทบไม่ให้อีเมล

จากข้อมูลจริงบนระบบ (สิงหาคม 2569): ลูกค้า 217 คนจากทุกร้าน มีอีเมล 0 คน · มีเบอร์โทร 217 คน (100%)

ช่องทางที่ใช้ได้จริงกับลูกค้าทุกคนคือ QR ติดตามสถานะบนใบรับซ่อม (ดู §5.7) ซึ่งไม่ต้องใช้ข้อมูลติดต่ออะไรเลย ลูกค้าสแกนแล้วดูสถานะเองได้ตลอด

อีเมลด้านล่างนี้เป็น ช่องทางเสริม สำหรับร้านที่มีลูกค้าองค์กรหรือเก็บอีเมลไว้อยู่แล้วเท่านั้น

ถ้าลูกค้ามีอีเมลในระบบ ระบบจะส่งอีเมลแจ้งให้เองทุกครั้งที่สถานะเปลี่ยน — ทั้งตอนกดปุ่มเดินสถานะที่แถวรายการ และตอนแก้ผ่านหน้าต่างแก้ไข (เดิมส่งเฉพาะทางหลัง ซึ่งเป็นทางที่คนใช้น้อยกว่า)

เรื่องรายละเอียด
ส่งเมื่อไหร่เฉพาะตอนสถานะเปลี่ยนจริง — กดสถานะเดิมซ้ำไม่ส่ง
ส่งให้ใครลูกค้าที่มีอีเมลในระบบเท่านั้น ถ้าไม่มีก็ข้ามไปเงียบ ๆ งานยังบันทึกปกติ
สถานะที่มีอีเมลเสนอราคาแล้ว · อนุมัติแล้ว · กำลังซ่อม · รออะไหล่ · ซ่อมเสร็จ · ส่งมอบแล้ว · ยกเลิก
สถานะที่ไม่ส่งรับเครื่อง — ลูกค้าเพิ่งยื่นเครื่องให้กับมือ ไม่ต้องแจ้งซ้ำ
ส่งไม่สำเร็จจะเป็นอย่างไรไม่กระทบการบันทึก สถานะยังเปลี่ยนตามปกติ ระบบแค่บันทึกไว้ใน log

⚠️ ถ้ากดเปลี่ยนหลายสถานะรวดเดียว ลูกค้าจะได้อีเมลหลายฉบับ (1 ฉบับต่อ 1 การเปลี่ยนสถานะ) — ถ้าต้องการแก้ย้อนหลังหลายขั้น แนะนำให้ใช้หน้าต่างแก้ไขแล้วตั้งสถานะปลายทางทีเดียว

ยกเลิกงานซ่อมที่เบิกอะไหล่ไปแล้ว ⭐ ใหม่ 14 ส.ค. 2569

เมื่อยกเลิกงานซ่อมที่ เบิกอะไหล่ออกจากคลังไปแล้ว ระบบจะขึ้นหน้าต่างยืนยัน พร้อมรายชื่ออะไหล่และจำนวนที่จะถูกคืนเข้าคลัง และมีช่องให้ติ๊กว่า

☑️ "อะไหล่ถูกใช้ไปกับเครื่องลูกค้าแล้ว ไม่ต้องคืนเข้าคลัง"

กรณีติ๊กหรือไม่ผลที่เกิด
ยังไม่ได้ใส่อะไหล่ลงเครื่อง ของยังอยู่ไม่ติ๊ก (ค่าตั้งต้น)อะไหล่กลับเข้าคลังตามจำนวนที่เบิก
ใส่เข้าเครื่องลูกค้าไปแล้ว เอาคืนไม่ได้ติ๊กสต๊อกไม่เพิ่มกลับ ของถือว่าใช้ไปแล้วจริง

⚠️ ถ้าติ๊กผิด สต๊อกจะไม่ตรงกับของจริงบนชั้น — ติ๊กเมื่อของถูกใช้ไปแล้วเท่านั้น

✅ ค่าตั้งต้นคือ "คืนเข้าคลัง" เหมือนเดิมทุกประการ และงานซ่อมที่ ไม่ได้เบิกอะไหล่ จะไม่ถามอะไรเพิ่มเลย ยกเลิกได้ทันทีเหมือนก่อน

หลังยกเลิกเสร็จ ข้อความยืนยันจะบอก จำนวนที่ขยับจริง ไม่ใช่แค่คำว่า "สำเร็จ" รวมถึงกรณีที่อะไหล่บางตัวหาในคลังไม่เจอแล้วจึงคืนให้ไม่ได้

5.4 คลังอะไหล่

⭐ 2 ต.ค. 2569 — เพิ่มอะไหล่ด้วยรหัสของอะไหล่ที่เคยลบไปแล้วได้ · ระบบกู้อะไหล่เดิมกลับมาแล้วใส่ข้อมูลใหม่ทับ (ขึ้นข้อความ "กู้อะไหล่เดิมกลับมาแล้ว") · ทำงานแบบเดียวกับอุปกรณ์เสริม ดู §3.2 "เพิ่มสินค้าด้วยรหัสของสินค้าที่เคยลบไปแล้ว"

⭐ 2 ก.ย. 2569 — ตั้ง "จำนวนขั้นต่ำ" เป็น 0 = ไม่ติดตามขั้นต่ำ · ใช้กับอะไหล่รุ่นเก่าที่อยากมีชื่อติดร้านไว้แต่ ไม่ต้องการสั่งมาอีก (เช่นแบตเตอรี่รุ่นเก่า · จอแท้ที่เลิกสต๊อก) · ตั้ง 0 แล้วรายการนั้นจะ ไม่ขึ้น "ใกล้หมด" · ไม่โผล่ในหน้าสั่งอะไหล่ · ไม่นับบนแดชบอร์ด ไม่ว่าจะเหลือกี่ชิ้น · ป้ายในคลังจะเป็น "ไม่ติดตามขั้นต่ำ" สีเทา (ไม่ใช่ "หมด") · ของยังเบิกเข้างานซ่อมได้และเห็นจำนวนจริงเหมือนเดิม · ขั้นต่ำ 1 ขึ้นไปทำงานเหมือนเดิมทุกอย่าง

📍 หน้า: /spare-parts 👤 สิทธิ์: OWNER, ADMIN, MANAGER, TECHNICIAN, SALESTECH

วัตถุประสงค์: จัดการคลังอะไหล่สำหรับงานซ่อม — เพิ่ม, รับเข้า, เบิกออก

ฟิลด์อะไหล่:

ฟิลด์คำอธิบายจำเป็น
ชื่ออะไหล่ชื่อ Part✅
หมวดหมู่ประเภทอะไหล่✅
ยี่ห้อยี่ห้อที่รองรับ❌
รุ่นรุ่นที่รองรับ❌
จำนวนคงเหลือStock ปัจจุบัน✅
ราคาทุน (Unit Price)ราคาต้นทุนต่อชิ้น✅
ราคาขายราคาที่คิดลูกค้า✅
ตำแหน่งจัดเก็บLocation ในคลัง❌
หมายเหตุรายละเอียดเพิ่มเติม❌

การจัดการสต็อกอะไหล่:

  • รับเข้า: กดปุ่ม "รับอะไหล่เข้า" เพื่อเพิ่ม Stock (manual)
  • สั่งจาก Supplier: ใช้หน้า /reorders (§5.4B) — track DRAFT → SENT → RECEIVED + auto bump stock
  • เบิกออก: ระบบตัดอัตโนมัติเมื่อใช้ในงานซ่อม
  • แจ้งเตือน Stock ต่ำ: ระบบแจ้งเตือนเมื่อ Stock ต่ำกว่าขั้นต่ำ

⭐ ทุกการเปลี่ยนจำนวนมีบรรทัดในประวัติเสมอ

เปิดโมดัล "ประวัติการเคลื่อนไหว" ของอะไหล่หรืออุปกรณ์เสริมชิ้นไหนก็ได้ แล้วบวกลบตามรายการที่เห็น จะได้เท่ากับจำนวนคงเหลือเสมอ ถ้าของหายไป จะมีบรรทัดบอกได้ว่าไปไหน — ขายออก · เบิกใช้ซ่อม · โอนไปสาขาไหน · ปรับยอดจากรอบนับ · หรือลบบิล

ก่อนหน้านี้บางเส้นทางเปลี่ยนจำนวนโดยไม่ทิ้งบรรทัดไว้เลย (โอนระหว่างสาขา · รับของจากใบสั่ง · ลบบิล) ทำให้ยอดกับประวัติไม่ตรงกันและไล่ที่มาไม่ได้

สิ่งที่ระบบกันให้:

สถานการณ์ระบบทำอย่างไร
2 คนเบิกของชิ้นสุดท้ายพร้อมกันคนหนึ่งได้ อีกคนได้ข้อความบอกจำนวนคงเหลือจริงและทางแก้ — จำนวนไม่ติดลบ
คืนอะไหล่เข้าคลังคืนได้ไม่เกินที่เบิกไปจริง และกดปุ่มคืนซ้ำไม่ทำให้ของงอก
กดปุ่มรับของ/อนุมัติซ้ำ หรือ 2 คนกดพร้อมกันทำงานครั้งเดียว อีกครั้งได้ข้อความบอกว่ามีคนทำไปแล้ว
กรอกจำนวนเป็นทศนิยมปฏิเสธพร้อมบอกเหตุผล (เดิมปัดทิ้งเงียบ ๆ)
สร้างสินค้าด้วยจำนวนติดลบปฏิเสธ

⚠️ ยกเลิกงานซ่อมแล้วอะไหล่ที่เบิกไปจะกลับเข้าคลังให้อัตโนมัติ พร้อมข้อความบอกว่าคืนอะไรกลับมาบ้าง ถ้าอะไหล่ถูกใช้ไปกับเครื่องลูกค้าแล้วจริง ๆ (ไม่ควรคืน) ให้แจ้งทีมงาน — ตอนนี้ยังไม่มีช่องติ๊กบนหน้าจอ

5.4A Template ราคาซ่อม (Repair Pricing Template) ⭐ NEW

📍 หน้า: /masters/repair-price-templates (CRUD) + quick-pick ใน /repair-intake 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: ทุกร้านมีงานซ่อมยอดฮิต 20-30 รายการที่ทำซ้ำทุกวัน เช่น "iPhone 13 จอแตก = ฿2,500" — Template ทำให้ช่าง quick-pick แทนการพิมพ์ทุกครั้ง

สร้าง template:

  1. ไป /masters → กด Template ราคาซ่อม
  2. กดปุ่ม + เพิ่ม template
  3. กรอก: ชื่อ template (เช่น "iPhone 13 จอแตก") + ยี่ห้อ → รุ่น + ประเภทซ่อม + เกรดอะไหล่ + ค่าแรง + ค่าอะไหล่ + อาการ default + ระยะประกัน
    • ⭐ ยี่ห้อกับรุ่นเลือกจากรายการ ไม่ต้องพิมพ์เอง (ใหม่ 31 ส.ค. 2569) — เลือกยี่ห้อก่อน แล้วรุ่นจะขึ้นเฉพาะของยี่ห้อนั้น
    • เว้นว่างได้ทั้งคู่ — เว้นยี่ห้อ = ใช้ได้ทุกยี่ห้อ · เว้นรุ่น = ทุกรุ่นของยี่ห้อนั้น
    • 🔴 ทำไมถึงเลิกให้พิมพ์เอง: หน้าเช็คราคาซ่อมสาธารณะจับคู่ด้วย ชื่อที่ตรงกับข้อมูลหลักเป๊ะ ⇒ พิมพ์ ไอโฟน หรือ Aplle หรือมีเว้นวรรคเกิน แถวราคานั้นจะไม่โผล่ให้ลูกค้าเห็นเลย เงียบ ๆ ไม่มีข้อความเตือน
    • ไม่เจอยี่ห้อ/รุ่นที่ต้องการ → ไปเพิ่มที่ ข้อมูลหลัก → ยี่ห้อ / รุ่น ก่อน (ระบบบอกทางไว้ในช่องแล้ว)
  4. กด บันทึก

⭐ แถวไหนจะไม่โผล่บนหน้าเช็คราคาซ่อมสาธารณะ ระบบบอกให้แล้ว (ใหม่ 31 ส.ค. 2569)

เดิมทุกแถวขึ้นสถานะ ใช้งาน สีเขียวเหมือนกันหมด แม้แถวนั้นจะไม่แสดงบนหน้าสาธารณะ ⇒ ตั้งราคาไปแล้วเชื่อว่าเสร็จ แต่ลูกค้าไม่เห็น

ตอนนี้แถวที่ไม่แสดงจะมี บรรทัดสีเทาใต้ชื่อ บอกเหตุผล 4 แบบ แยกกันเพราะแก้คนละทาง:

เหตุผลที่ขึ้นทางแก้
ยังไม่ได้เลือกอาการกด แก้ไข แถวนั้นแล้วเลือกประเภทซ่อม
อาการที่ผูกไว้ถูกปิดใช้งานข้อมูลหลัก → ประเภทการซ่อม เปิดใช้งานคืน
อาการยังไม่ได้ติ๊กให้แสดงข้อมูลหลัก → ประเภทการซ่อม ติ๊กคอลัมน์ โชว์หน้าราคา
แถวนี้ปิดใช้งานอยู่เปิดใช้งานแถวนั้น
  • 🔴 แถวที่ติดป้ายยังใช้งานตอนรับเครื่องได้ตามปกติ ไม่ใช่แถวเสีย ไม่ต้องลบ — ป้ายบอกแค่ว่า ลูกค้าที่เปิดหน้าเช็คราคาจะไม่เห็นแถวนี้
  • ระบบเตือนตั้งแต่ ตอนเลือกอาการในโมดัล ไม่ต้องรอบันทึกแล้วมาไล่หาทีหลัง
  • ถ้ายังไม่ได้เปิดสวิตช์หน้าสาธารณะเลย จะมี แถบบอกไว้เหนือตาราง ว่าวันนี้ยังไม่มีแถวไหนแสดงให้ลูกค้าเห็น
  • ⚠️ ระบบจะไม่ตัดอาการที่ยังไม่ติ๊กออกจากช่องให้เลือก โดยเจตนา — เพราะ template ใช้ 2 งาน: quick-pick ตอนรับเครื่อง (ไม่เกี่ยวกับการติ๊ก) และแสดงราคาสาธารณะ (เกี่ยวกับการติ๊ก) ตัดออกจะทำให้ใช้ตอนรับเครื่องไม่ได้

ใช้งาน:

  • ไป /repair-intake รับเครื่อง
  • บนสุดของส่วน "ข้อมูลเครื่อง" → Select 🚀 Quick-pick template
  • เลือก template → ระบบ auto-fill: ยี่ห้อ + รุ่น + ค่าแรง + ค่าอะไหล่ + อาการ
  • ช่างยังแก้ field แต่ละช่องได้ก่อนบันทึก
  • ทุกครั้งที่ใช้ template → popularityScore += 1 (เรียงขึ้นบนใน list ครั้งถัดไป)
  • 🔥 Badge สำหรับ template ใช้ > 5 ครั้ง (popular)

ประโยชน์:

  • ลดเวลารับเครื่องจาก 2-3 นาที → 30 วินาที
  • ราคามาตรฐานทั้งร้าน (ลูกค้าไม่งง)
  • analytics: รู้งานยอดฮิตของร้านจาก popularityScore

⭐ เกรดอะไหล่ (ใหม่ 29 ส.ค. 2569):

เกรดหมายถึง
แท้ศูนย์อะไหล่แท้จากผู้ผลิต
แท้ถอด / รีเฟอร์อะไหล่แท้ที่ถอดจากเครื่องอื่น หรือผ่านการรีเฟอร์บิช
เทียบเกรดพรีเมียมอะไหล่เทียบคุณภาพสูง
เทียบเกรดประหยัดอะไหล่เทียบราคาประหยัด
  • เกรดอธิบาย ที่มาของอะไหล่ ไม่ใช่ชื่อชิ้นส่วน จึงใช้ได้เหมือนกันหมดทั้งจอ แบต กล้อง ก้นชาร์จ ลำโพง
  • ตั้งหลายแถวสำหรับรุ่น + อาการเดียวกันได้ โดยใส่เกรดต่างกัน แล้วตั้งราคาและระยะประกันคนละค่า (ชื่อ template ของแต่ละแถวต้องไม่ซ้ำกัน — แนะนำให้ใส่ชื่อเกรดต่อท้าย เช่น "iPhone 14 Pro เปลี่ยนจอ แท้ศูนย์")
  • ไม่บังคับกรอก — เว้นว่างไว้ถ้าร้านคิดราคาเดียว จะขึ้นเป็น "-" ในคอลัมน์เกรด
  • ⚠️ เลือกได้เฉพาะ 4 ค่านี้ พิมพ์เองไม่ได้ เพราะค่านี้ถูกออกแบบไว้ให้แสดงต่อลูกค้าได้ในอนาคต

⭐ ผูกอะไหล่จากคลังเข้ากับแถวราคา (ใหม่ 31 ส.ค. 2569):

ในโมดัลเพิ่ม/แก้ไข template มีช่อง "อะไหล่จากคลัง (ไม่บังคับ)" — เลือกแล้วระบบเติม ค่าอะไหล่ ให้จากราคาขายในคลัง จะได้ไม่ต้องพิมพ์ราคาซ้ำ 2 ที่

  • ไม่ผูกก็บันทึกได้ตามปกติ — การผูกเป็นตัวช่วย ไม่ใช่เงื่อนไข
  • 🔴 ราคาที่เติมมาให้ แก้ทับได้เสมอ และค่าที่แก้จะถูกบันทึก ไม่ถูกเขียนกลับ ⚠️ แปลว่าเมื่อร้านขึ้นราคาอะไหล่ในคลังทีหลัง ราคาในแถว template จะ ไม่ ขยับตาม — เป็นการตัดสินใจโดยเจตนา เพราะถ้าให้ขยับตาม ราคาที่ร้านตั้งเองไว้จะถูกทับหายทุกครั้งที่แก้ราคาคลัง · ถ้าต้องการให้ตรงกัน ให้เข้ามาเลือกอะไหล่ใหม่อีกครั้ง
  • อะไหล่ที่ยังไม่ได้ใส่ราคาขายก็ผูกได้ แล้วกรอกค่าอะไหล่เอง (ในระบบจริงอะไหล่ส่วนใหญ่ยังไม่มีราคาขาย)
  • 🔴 ผูกได้เฉพาะอะไหล่ของ "สาขาเดียวกับแถวนั้น" — เพราะสต๊อกของอีกสาขาไม่มีของชิ้นนั้นอยู่จริง และราคาก็เป็นของอีกสาขา · ตอนเลือก "ทุกสาขา" บนหัวเว็บ ช่องนี้จะปิดพร้อมบอกเหตุผล — ให้เลือกสาขาก่อนแล้วค่อยผูก
  • อะไหล่ที่ถูกปิดใช้งานไปแล้ว จะยังแสดงอยู่พร้อมป้ายบอกว่าเลิกใช้แล้ว — ระบบไม่ล้างให้อัตโนมัติ เพราะราคาที่ร้านตั้งไว้เป็นข้อมูลของร้าน
  • ช่องนี้ ค้นหาจากเซิร์ฟเวอร์ จึงหาอะไหล่ชิ้นที่ 101 ขึ้นไปเจอ (ร้านที่มีอะไหล่เป็นพันรายการก็ใช้ได้)

⭐ ตัวช่วยตั้งราคาครั้งแรก (ใหม่ 31 ส.ค. 2569) — ปุ่ม "ตัวช่วยตั้งราคา":

ร้านที่เพิ่งเริ่มมักไม่รู้ว่าจะตั้งราคาอะไรก่อน (อาการเป็นสิบ × รุ่นเป็นร้อย) — ตัวช่วยนี้ดูจาก อะไหล่ที่สาขานี้ใช้ในงานซ่อมจริงบ่อยที่สุด แล้วเสนอรายการให้ตั้งราคาเป็นชุด

  1. กดปุ่ม ตัวช่วยตั้งราคา ที่หัวหน้าจอ
  2. ระบบแสดงรายการที่เสนอ พร้อม จำนวนครั้งที่ใช้จริง เรียงจากมากไปน้อย
  3. กรอกค่าแรง/ค่าอะไหล่/ระยะประกัน แล้วกด ยืนยัน ทีละแถว · แถวไหนไม่ต้องการกด ข้าม
  • 🔴 กดเปิดตัวช่วยเฉย ๆ ไม่สร้างอะไรทั้งนั้น — แถวเกิดต่อเมื่อกดยืนยันเท่านั้น
  • 🔴 ระบบไม่เลือกเกรดอะไหล่ให้ล่วงหน้า เพราะชื่ออะไหล่ไม่ได้บอกว่าเป็นของแท้หรือของเทียบ — แต่เว้นว่างได้ ถ้าร้านคิดราคาเดียว (เหมือนฟอร์มปกติ)
  • แถวที่สร้างจากตัวช่วยเป็นแบบ "ทุกรุ่น" (ไม่ระบุยี่ห้อ/รุ่น) — เข้ามาแก้เป็นเจาะจงรุ่นทีหลังได้
  • กดตัวช่วยซ้ำ รายการที่ตั้งราคาไปแล้วจะขึ้นว่า "ตั้งราคาแล้ว" และกดยืนยันซ้ำไม่ได้
  • อะไหล่ชิ้นเดียวกันตั้งได้หลายแถวถ้าใส่เกรดต่างกัน (ชื่อ template ต้องไม่ซ้ำ) — เหมือนฟอร์มปกติทุกประการ
  • 🔴 นับจากงานซ่อมของ "สาขานี้" เท่านั้น ไม่ใช่ทั้งร้าน — สาขาที่เพิ่งเปิดจะยังไม่มีรายการเสนอ แม้สาขาอื่นจะมีงานซ่อมเยอะแล้วก็ตาม

เมื่อไม่มีรายการเสนอ ระบบจะบอกสาเหตุที่ต่างกัน 3 แบบ เพราะแก้คนละทาง

ข้อความที่เห็นแปลว่าต้องทำอะไร
สาขานี้ยังไม่เคยรับงานซ่อมยังไม่มีใบซ่อมในสาขานี้เลยรับงานซ่อมสัก 2-3 ใบก่อน หรือกด + เพิ่ม template เองได้เลย
มีงานซ่อมแล้ว แต่ยังไม่เคยบันทึกอะไหล่มีใบซ่อม แต่ไม่มีใบไหนลงรายการอะไหล่ไว้เข้าไปลงอะไหล่ในใบซ่อม แล้วกลับมากดตัวช่วยใหม่
ไม่มีรายการที่เสนอได้มีอะไหล่ในใบซ่อม แต่ใช้เสนอไม่ได้ (เช่นถูกลบไปแล้ว)ตั้งราคาเองด้วยปุ่ม + เพิ่ม template

⚠️ "ไม่มีรายการเสนอ" ไม่เท่ากับ "ตั้งราคาครบแล้ว" — ระบบจะบอกเหตุผลเสมอ ถ้าเห็นหน้าว่างโดยไม่มีคำอธิบาย แปลว่าโหลดไม่สำเร็จ ให้กดลองใหม่

⭐ หน้าเช็คราคาซ่อมสาธารณะ (ใหม่ 30 ส.ค. 2569) — เปิดให้ลูกค้าดูราคาเองได้

📍 หน้า: /settings (สวิตช์ + ลิงก์ไลน์) · /masters/repair-types (ติ๊กอาการที่จะโชว์)

🔴 ต้องทำ 2 อย่าง ไม่ใช่อย่างเดียว — เปิดสวิตช์แล้วยังไม่ติ๊กอาการ หน้าจะว่างเปล่า

ขั้นทำที่ไหนใครทำได้ค่าตั้งต้น
1. เปิดสวิตช์ "หน้าเช็คราคาซ่อมสาธารณะ"ตั้งค่าเจ้าของร้าน (หรือผู้ที่ได้ "สิทธิ์เจ้าของร้าน")ปิด
2. ติ๊กอาการที่จะโชว์ข้อมูลหลัก → ประเภทการซ่อมผู้ดูแลขึ้นไปไม่ติ๊กทุกอาการ
3. (ไม่บังคับ) ใส่ลิงก์ไลน์ของร้านตั้งค่า → ข้อมูลร้านค้าผู้ดูแลขึ้นไปว่าง
  • 🔴 เปิดแล้วใครก็ตามที่มีลิงก์เปิดดูได้ทันที ไม่ต้องล็อกอิน ไม่ต้องมีบัญชี — รวมถึงร้านคู่แข่ง ระบบถามยืนยันก่อนเปิดเสมอ เพราะเป็นการตัดสินใจที่ย้อนกลับได้แต่ข้อมูลที่คนเห็นไปแล้วเรียกคืนไม่ได้
  • ทำไมต้องติ๊กอาการเอง ไม่โชว์ทั้งหมด — ชื่ออาการที่ร้านพิมพ์ไว้เองบางอันซ้ำความหมายกัน (เช่นมีทั้ง "เปลี่ยนจอ" และ "เปลี่ยนหน้าจอ") · ระบบจะไม่ไปรวมแถวให้เอง เพราะอาจรวมผิด ⇒ ร้านเลือกเองว่าชื่อไหนเหมาะจะให้คนนอกเห็น
  • ลิงก์ไลน์ต้องขึ้นต้นด้วย https:// เท่านั้น — เปิดแอปไลน์ → โปรไฟล์ร้าน → คัดลอกลิงก์ มาวาง (ระบบไม่รับลิงก์รูปแบบอื่นเพื่อกันลิงก์ที่ไม่ปลอดภัยไปโผล่บนหน้าที่คนนอกกด)
  • สวิตช์อยู่ระดับร้าน (มีผลทุกสาขา) · ลิงก์ไลน์อยู่ระดับสาขา (แต่ละสาขาใส่ลิงก์ของตัวเองได้)
  • ⭐ ลิงก์ของหน้า (ใช้ได้แล้ว 30 ส.ค. 2569): https://<โดเมนของระบบ>/repair-price/<รหัสร้าน> เอาไปแปะเฟซบุ๊ก ส่งในไลน์ หรือทำเป็น QR ติดหน้าร้านได้เลย — รหัสร้านคือชุดตัวอักษรเดียวกับที่เห็น ในลิงก์ตอนลูกค้าติดตามงานซ่อม · ⚠️ ปุ่มคัดลอกลิงก์ในหน้าตั้งค่ายังไม่มี จะตามมาในรุ่นถัดไป
  • ลูกค้าที่เปิดลิงก์จะเห็น: โลโก้ + ชื่อร้าน → เลือกสาขา (เฉพาะร้านที่มีมากกว่า 1 สาขา ร้านสาขาเดียวไม่เห็นช่องนี้) → เลือกยี่ห้อ → เลือกรุ่น (พิมพ์ค้นหาได้ ไม่ว่าร้านจะมีกี่ร้อยรุ่นก็หาเจอ) → ตารางเดียวจบ แถวคืออาการที่ร้านติ๊กไว้ · คอลัมน์คือเกรดอะไหล่ · แต่ละช่องบอก ราคารวมกับระยะประกัน
  • 🔴 ช่องว่างในตารางมี 2 แบบ และเขียนไม่เหมือนกัน เพราะร้านต้องทำต่อคนละทาง · "ไม่มีเกรดนี้" = ร้านไม่ได้ตั้งเกรดนั้นไว้สำหรับอาการนี้ (ลูกค้าเลือกเกรดอื่นได้) · "ร้านยังไม่ได้ตั้งราคาอาการนี้ — สอบถามที่ร้าน" = ติ๊กอาการไว้แล้ว แต่ยังไม่เคยใส่ราคาเลย ⇒ ถ้าเห็นบรรทัดนี้บ่อย แปลว่ายังตั้งราคาไม่ครบ ไปเพิ่มที่ ข้อมูลหลัก → Template ราคาซ่อม
  • ⭐ ไม่ต้องตั้งราคาครบทุกรุ่น — รุ่นที่ยังไม่ได้ตั้งเจาะจง ระบบจะใช้ ราคาเหมาของยี่ห้อนั้น ให้อัตโนมัติ ถ้าไม่มีอีกจะใช้ ราคาเหมาทุกยี่ห้อ ⇒ ตั้งเฉพาะรุ่นที่ราคาต่างจากปกติก็พอ · รุ่นที่ตั้งเจาะจงไว้จะชนะราคาเหมาเสมอ (เว้นช่อง "ยี่ห้อ"/"รุ่น" ในตารางราคา = เหมา)
  • บนหน้ามีข้อความ "ราคาประเมิน — ยังไม่รวมกรณีที่พบความเสียหายเพิ่มตอนเปิดเครื่อง" อยู่ เหนือตารางเสมอ (ลูกค้าเห็นก่อนเห็นตัวเลข ไม่ใช่หมายเหตุตัวเล็กท้ายหน้า)
  • ร้านที่ยังไม่เปิดสวิตช์ หรือลิงก์พิมพ์ผิด → ลูกค้าเห็นหน้า "ไม่พบหน้าราคาของร้านนี้" เหมือนกันทั้ง 2 กรณี ระบบไม่บอกคนนอกว่าร้านนั้นมีอยู่จริงหรือไม่ โดยตั้งใจ
  • ⭐ ลูกค้าติ๊กหลายอาการแล้วเห็นยอดรวมได้ (ใหม่ 30 ส.ค. 2569) — เครื่องตกทีเดียวมักพังมากกว่า 1 อย่าง · แตะที่ช่องราคาเพื่อเลือก · เลือกได้หลายอาการ แต่ 1 อาการเลือกได้เกรดเดียว (ติ๊กเกรดอื่นในอาการเดิม = สลับ ไม่ใช่บวกเพิ่ม) · มี แถบยอดรวมลอยอยู่ล่างจอ บอกว่าเลือกไว้กี่รายการและรวมเท่าไร · เอาติ๊กออกหมด แถบหายไปทั้งแถบ · เปลี่ยนยี่ห้อ/รุ่น/สาขา ระบบจะล้างการติ๊กให้อัตโนมัติ (กันยอดค้างของรุ่นเก่า) · ช่อง "ไม่มีเกรดนี้" และแถวที่ยังไม่ตั้งราคา ติ๊กไม่ได้ (ไม่มีกล่องให้ติ๊ก)
  • ⭐ ปุ่มทักไลน์ + ปุ่มโทร อยู่ใต้ตาราง และในแถบยอดรวม · 🔴 ปุ่มไลน์จะขึ้นเฉพาะร้านที่กรอกลิงก์ไลน์ไว้แล้วเท่านั้น — ร้านที่ยังไม่กรอก จะเห็นแค่ปุ่มโทร ซึ่งเป็นสภาพปกติ ไม่ใช่ระบบพัง (ปุ่มที่กดแล้วไม่ไปไหน แย่กว่าไม่มีปุ่ม) · ร้านที่ไม่ได้กรอกทั้งเบอร์และไลน์ → ลูกค้าเห็นข้อความบอกให้สอบถามที่หน้าร้านแทน ไม่ใช่พื้นที่ว่าง · ⭐ ทำไมไลน์เป็นปุ่มหลัก: ราคาซ่อมประเมินจากรูปได้แม่นกว่าคำอธิบาย — "จอแตก" อาจเป็นกระจกร้าวอย่างเดียว (ลอกกระจก ถูกกว่า) หรือจอในเสียด้วย (เปลี่ยนยกจอ แพงกว่า) ⇒ ลูกค้าส่งรูปทางไลน์ได้ แต่โทรศัพท์ทำไม่ได้ และร้านตอบตอนว่างได้ ไม่ต้องรับสายกลางงานซ่อม · ปุ่มโทรบนมือถือกดแล้วเปิดแอปโทรศัพท์ให้เลย (เบอร์ที่กรอกมีขีดหรือเว้นวรรคก็ได้ ระบบจัดรูปให้เอง)
  • ⚠️ ยอดรวมยังเป็นราคาประเมินเหมือนเดิม — ข้อความ "ราคาประเมิน…" ยังอยู่เหนือตารางแม้ติ๊กหลายรายการแล้ว
  • ⭐ ปุ่มคัดลอกลิงก์ + ตัวเลขให้ดูก่อนตัดสินใจเปิด (ใหม่ 30 ส.ค. 2569) — อยู่ในการ์ดเดียวกันที่ ตั้งค่า · ไม่ต้องพิมพ์ลิงก์เองแล้ว — ระบบแสดงลิงก์เต็มของร้านคุณ พร้อมปุ่ม "คัดลอกลิงก์" และ "เปิดดูหน้าจริง" · เหนือสวิตช์มีตัวเลข 3 ตัว: แถวราคาที่จะโชว์ · อาการที่มีราคาแล้ว · อาการที่ติ๊กไว้ พร้อมประโยคสรุป เช่น "ตอนนี้หน้าสาธารณะจะโชว์ราคา 3 แถว ครอบ 2 อาการ" · 🔴 ตัวเลขนี้นับด้วยกติกาเดียวกับที่หน้าสาธารณะใช้จริง ⇒ เห็นเท่าไร ลูกค้าเห็นเท่านั้น · แถวที่อยู่ในสาขาที่ปิดใช้งานจะไม่ถูกนับ เพราะลูกค้าไม่มีทางเห็นอยู่แล้ว · ระบบไม่บล็อก แต่จะเตือนก่อน ถ้ายังไม่พร้อม — 3 สภาพเตือนคนละแบบเพราะแก้คนละทาง: ยังไม่ติ๊กอาการเลย (→ ไปติ๊กที่ ข้อมูลหลัก → ประเภทการซ่อม) · ติ๊กแล้วแต่ยังไม่มีราคา (→ ไปตั้งที่ ข้อมูลหลัก → Template ราคาซ่อม) · สวิตช์ยังปิดอยู่ (คนที่กดลิงก์ตอนนี้จะเห็นหน้า "ไม่พบข้อมูล")
  • ⭐ Google เก็บหน้าราคาเข้าสารบบได้แล้ว — ร้านที่ เปิดสวิตช์ไว้ จะถูกใส่ใน sitemap.xml ให้อัตโนมัติ และหน้ามีหัวข้อ/คำอธิบายที่มี ชื่อร้านของคุณ ⇒ เอาลิงก์ไปแปะเฟซบุ๊กหรือส่งไลน์แล้ว ขึ้นพรีวิวเป็นชื่อร้าน · ร้านที่ปิดสวิตช์จะไม่อยู่ใน sitemap และไม่ถูกเก็บเข้าสารบบ · ⚠️ ต่างจากหน้าติดตามงานซ่อมโดยเจตนา — หน้านั้นถูกกันไม่ให้ Google เก็บ เพราะมีข้อมูลลูกค้ารายบุคคล ส่วนหน้าราคามีแต่ราคาที่ร้านตั้งใจเปิดเผย · ⏳ Google ใช้เวลาเก็บข้อมูลหลายวันถึงหลายสัปดาห์ — เปิดวันนี้แล้วค้นเจอพรุ่งนี้เลยไม่ได้

5.4B ผู้จัดหา (Suppliers) + สั่งซื้ออะไหล่ (Reorders) ⭐ NEW

📍 หน้า: /suppliers (CRUD ผู้จัดหา) + /reorders (สั่งซื้อ + ติดตาม) 👤 สิทธิ์: OWNER, ADMIN, MANAGER (ทั้ง suppliers และ reorders)

⭐ เปิดถึงระดับผู้จัดการแล้ว (24 ส.ค. 2569) — เดิมเมนู "ผู้จัดหา" เห็นได้เฉพาะ เจ้าของร้านกับผู้ดูแล และยัง ผูกอยู่กับสิทธิ์งานซ่อม ตั้งแต่ตอนที่ผู้จัดหา ใช้กับอะไหล่อย่างเดียว · ตั้งแต่ 24 ส.ค. ผู้จัดหาผูกกับ มือถือและอุปกรณ์เสริม ด้วยแล้ว (ช่อง "ซื้อจาก") การผูกกับงานซ่อมจึงไม่ตรงกับความจริงอีกต่อไป · ระดับใหม่เท่ากับหน้า "ข้อมูลหลัก" ซึ่งเป็นข้อมูลตั้งต้นชนิดเดียวกัน

วัตถุประสงค์: ก่อนหน้านี้สั่งอะไหล่ต้องจดเองใน LINE → จำเลขส่งของไม่ได้ → ส่งมาแล้วลืมเช็ค → stockout ตอนช่างต้องการ. ระบบ Reorder ช่วย:

  1. Auto-detect อะไหล่ที่เหลือต่ำกว่า min stock
  2. Track lifecycle: DRAFT → SENT → RECEIVED + auto bump stock
  3. เก็บประวัติทุก order ผูกกับ supplier

5.4B.1 Suppliers (/suppliers)

จัดการ supplier ที่สั่งอะไหล่ประจำ:

  • ชื่อร้าน/บริษัท + ผู้ติดต่อ + เบอร์/email/LINE/ที่อยู่
  • เลขประจำตัวผู้เสียภาษี
  • เงื่อนไขการชำระ: เงินสด / net-7 / net-15 / net-30 / net-60
  • หมายเหตุ + active toggle

ลบ supplier ไม่ได้ถ้ายังมีอะไหล่ผูกอยู่ — ต้องตั้ง active=false แทน

5.4B.2 ผูก Supplier กับอะไหล่

ใน /spare-parts form:

  • เพิ่ม field: supplierId (Select), reorderQuantity (จำนวนที่ควรสั่งทุกครั้ง), leadTimeDays (กี่วันถึง), unitCost (ราคาต่อหน่วยจาก supplier)

5.4B.3 Reorders (/reorders) — Workflow

Tab "ใกล้หมด" — auto-detect:

  • list อะไหล่ที่ quantity ≤ minStock
  • แสดง suggested quantity = max(reorderQuantity, minStock × 2 - currentQty)
  • กด + สร้างคำสั่ง → modal เปิดพร้อมรายการ pre-fill

Workflow 3 stages:

สถานะคำอธิบายAction
DRAFTสร้างแล้ว ยังไม่ส่งกด ส่งคำสั่งซื้อ → SENT · หรือ ยกเลิกใบสั่งซื้อ
SENTส่ง LINE/email ให้ supplier แล้วกด รับเข้าอะไหล่ เมื่อของมาถึง → RECEIVED · หรือ ยกเลิกใบสั่งซื้อ ⭐
RECEIVEDของมาแล้ว — auto bump SparePart.quantity(จบ — ยกเลิกไม่ได้อีก)
CANCELLEDยกเลิกแล้ว(จบ — ย้อนกลับไม่ได้ ต้องสร้างใบใหม่)

⭐ ใบที่ส่งคำสั่งไปแล้ว (SENT) ยกเลิกได้ (ปรับปรุง 27 ส.ค. 2569) เดิมพอกด "ส่งคำสั่งซื้อ" ไปแล้ว หน้าจอเหลือปุ่ม รับเข้าอะไหล่ ปุ่มเดียว — ร้านที่กดผิดหรือสร้างรายการยังไม่ครบ แก้เองไม่ได้เลย ต้องปล่อยใบค้างไว้ ตอนนี้เปิดใบสั่งซื้อแล้วมีปุ่ม "ยกเลิกใบสั่งซื้อ" (สีแดง) ให้กดได้

การยกเลิกไม่แตะสต๊อก — จำนวนอะไหล่คงเหลือไม่เปลี่ยนแม้แต่ชิ้นเดียว เพราะของยังไม่เคยถูกรับเข้ามา · ใบที่ยกเลิกแล้ว ย้อนกลับไม่ได้ ต้องสร้างใบใหม่

⚠️ ใบที่กด "รับเข้าอะไหล่" ไปแล้ว ยกเลิกไม่ได้อีกเลย เพราะของเข้าคลังจริงไปแล้ว ⇒ ถ้ารายการยังไม่ครบหรือกดผิด ให้ ยกเลิกใบ แทนการรับเข้า

⭐ ต้องยืนยันก่อนทุกครั้งที่กดปุ่มที่ย้อนไม่ได้ (ปรับปรุง 27 ส.ค. 2569) รับเข้าอะไหล่ และ ยกเลิกใบสั่งซื้อ จะเปิดกล่องให้ยืนยันก่อนเสมอ ไม่ทำงานทันทีที่กดเหมือนเดิม · กล่องยืนยันของ รับเข้าอะไหล่ จะ ลิสต์ของทุกรายการที่จะเข้าคลังพร้อมจำนวน (เช่น หน้าจอ iPhone 12 +7) ⇒ เห็นก่อนว่าจะเพิ่มอะไรบ้าง แล้วค่อยตัดสินใจ · กด "ไม่ใช่ตอนนี้" ได้เสมอ — ไม่มีอะไรเกิดขึ้น สต๊อกไม่ขยับ · ปุ่ม ส่งคำสั่งซื้อ ไม่ต้องยืนยัน เพราะยังกดยกเลิกทีหลังได้

Create modal — มี search/picker แบบ:

  • เลือก supplier
  • list ที่ pre-fill จาก low-stock + สามารถเพิ่มอื่น ๆ จาก list ใต้
  • แต่ละ row: name + qty + unitCost + total (auto-calc)
  • หมายเหตุ
  • บันทึกเป็น DRAFT → ส่งทีหลัง

Performance: modal ใช้ uncontrolled refs (qty/unitCost) — ไม่ lag แม้มีหลายรายการ

5.4B.4 ประวัติการซื้อเข้า (/purchase-history) ⭐ ใหม่ 24 ส.ค. 2569

📍 หน้า: /purchase-history — อยู่ถัดจากเมนู "ผู้จัดหา (Suppliers)" ในแถบเมนูซ้าย

ดูรายการมือถือ + อุปกรณ์เสริมทั้งหมดที่บันทึกช่อง "ซื้อจาก" ไว้ (ผู้จัดหาหรือลูกค้า) ในที่เดียว — ไม่ต้องไล่เปิดทีละเครื่องที่หน้าสต็อก

💡 มองเห็นได้กว้างกว่าเมนูผู้จัดหา — เมนูนี้เปิดให้ทุกคนที่เข้าถึงงานขายได้ (OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH) ในขณะที่หน้า /suppliers (จัดการผู้จัดหา) เปิดเฉพาะ OWNER/ADMIN เพราะหน้านี้เป็นเรื่องมือถือ/อุปกรณ์เสริมซึ่งแคชเชียร์เห็นต้นทุนอยู่แล้วที่หน้าสต็อก ไม่ใช่เรื่องอะไหล่

ใช้ทำอะไรได้:

  • ค้นหา/กรองตามผู้ขาย (ผู้จัดหารายใดรายหนึ่ง หรือลูกค้ารายใดรายหนึ่ง)
  • ดูราคาต้นทุนของแต่ละชิ้นย้อนหลัง — ตอบคำถามเช่น "ซื้อจากร้านนี้ไปแล้วเท่าไรรวมทั้งหมด" หรือ "รับซื้อจากลูกค้าคนนี้กี่เครื่องแล้ว"
  • แยกดูเฉพาะมือถือ หรือเฉพาะอุปกรณ์เสริม

⚠️ แสดงเฉพาะของที่ถูกระบุ "ซื้อจาก" ไว้เท่านั้น สินค้าที่ไม่ได้เลือกช่องนี้ตอนเพิ่ม/แก้ไข (รวมของเก่าทั้งหมดก่อนวันที่ 24 ส.ค. 2569) จะไม่ปรากฏในหน้านี้ — ไม่ใช่ระบบตกหล่น แต่เพราะไม่มีข้อมูลให้แสดงจริง ๆ

5.5 Repair Checklist (เช็คสภาพก่อน/หลังซ่อม + ลายเซ็นลูกค้า)

⭐ 2 ก.ย. 2569 — มีช่องแนบรูปเครื่องในเช็คลิสต์แล้ว · เช็คลิสต์ ก่อนซ่อม → ช่อง รูปถ่ายเครื่อง (ตอนรับ) · เช็คลิสต์ หลังซ่อม → ช่อง รูปถ่ายเครื่อง (หลังซ่อม) · แนบได้สูงสุด 10 รูปต่อช่อง · ลูกค้าเห็นรูปเหล่านี้บนหน้าติดตามงานซ่อม (แยกก่อน/หลังให้เองเมื่อมีทั้ง 2 ชุด) · เป็นรูปชุดเดียวกับที่แก้จากหน้างานซ่อม แก้ที่ไหนก็เห็นตรงกัน · ไม่แตะช่องรูป = รูปเดิมไม่เปลี่ยน

📍 หน้า: /repair-checklist 👤 สิทธิ์: OWNER, ADMIN, MANAGER, SALESTECH และช่างทุกคน

วัตถุประสงค์: เก็บหลักฐานสภาพเครื่องก่อน/หลังซ่อม พร้อมลายเซ็นลูกค้า — ป้องกัน customer dispute ("ของผมก่อนเอามาซ่อมไม่เป็น พอซ่อมเสร็จกลับเป็น") + เป็นใบ QC ก่อนส่งมอบ

⭐ ช่างคนไหนก็เช็คเครื่องได้แล้ว ไม่ต้องเป็นช่างที่ซ่อมเครื่องนั้น (16 ส.ค. 2569)

เดิมช่างเปิดหน้านี้ได้ แต่เห็นเฉพาะงานที่ตัวเองรับผิดชอบกับงานที่ยังไม่มีเจ้าของ งานของช่างคนอื่น จึงไม่มีให้กดเลย ทั้งที่ในทางปฏิบัติใครว่างก็ควรช่วยเทสต์เครื่องได้ — ตอนนี้หน้าเช็คลิสต์แสดงงานทั้งหมด ของสาขา ส่วนหน้า งานช่าง ยังแสดงเฉพาะงานที่มอบหมายให้แต่ละคนเหมือนเดิม (ไม่ได้ทำให้ช่างเห็นงานคนอื่นปนในคิวตัวเอง) · ⚠️ แต่ขอบเขตสาขาของหน้า "งานช่าง" เปลี่ยนไปแล้วเมื่อ 19 ส.ค. 2569 — แท็บ งานของฉัน ครอบทุกสาขา ไม่ใช่เฉพาะสาขาที่เลือกอยู่อีกต่อไป (ดู §5.2)

ถ้ามีคนเช็คใบนั้นไว้แล้ว ระบบจะเตือนก่อน — ขึ้นกล่องบอกว่า ใครเช็คไว้ เมื่อไร แล้วให้ยืนยัน เพราะ 1 งานเก็บผลเช็คได้ใบเดียวต่อชนิด การบันทึกทับจะแทนที่ของเดิมทั้งใบ รวมถึงชื่อคนเช็ค · ระบบไม่ห้ามทับ (ช่างอาจเช็คผิดจริง ๆ) แต่ทุกครั้งที่ทับ จะมีบันทึกไว้ใน Audit Log ว่าใครทับของใคร พร้อมชื่อคนเช็คคนเดิมที่ถูกแช่แข็งไว้ในบันทึก — เปิดดูได้ที่ บันทึกการใช้งาน

🔄 Workflow ที่ถูกต้อง (ตามขั้นตอน — สำคัญมาก!)

ระบบบังคับลำดับการเช็คตามมาตรฐานร้านมือถือสากล — ห้ามข้ามขั้นตอน:

1. รับเครื่อง (status = รับเครื่อง / PENDING)
   ↓
2. ✅ เช็คก่อนซ่อม (PRE_REPAIR) ← ทำตอนนี้! ก่อนเริ่มซ่อม + ขอลายเซ็นลูกค้า
   ↓
3. ประเมินราคา (status = เสนอราคา)
   ↓
4. ลูกค้าอนุมัติ (status = อนุมัติ)
   ↓
5. ช่างซ่อม (status = กำลังซ่อม / รออะไหล่)
   ↓
6. ซ่อมเสร็จ (status = เสร็จแล้ว) ← ปุ่ม pre จะ lock ตอนนี้แล้ว!
   ↓
7. ✅ เช็คหลังซ่อม (POST_REPAIR) ← ทำตอนนี้ + ขอลายเซ็นลูกค้ารับเครื่อง
   ↓
8. ส่งเครื่อง (status = ส่งคืนแล้ว)
   ↓
9. ✅ ปุ่ม "เปรียบเทียบ" pre vs post จะโผล่ที่ตาราง

กฎเหล็ก 3 ข้อ:

  1. PRE check ทำได้เฉพาะก่อนงานเสร็จ — สถานะ รับเครื่อง / เสนอราคา / อนุมัติ / กำลังซ่อม / รออะไหล่ เท่านั้น. พอซ่อมเสร็จ (เสร็จแล้ว / ส่งคืนแล้ว) ปุ่ม pre จะกลายเป็นเทา (disabled) ตลอดกาล
  2. POST check ทำได้หลังงานเสร็จ — ต้องเปลี่ยนสถานะเป็น เสร็จแล้ว หรือ ส่งคืนแล้ว ก่อน ปุ่ม post ถึงจะกดได้
  3. เปรียบเทียบ ต้องครบทั้ง 2 ฝั่ง — ถ้าทำแค่ฝั่งเดียว (pre หรือ post อย่างเดียว) ปุ่มเปรียบเทียบจะไม่โผล่

เหตุผลของกฎ (ทำไมเข้มขนาดนี้):

  • กฎหมาย/หลักฐาน: ลายเซ็นลูกค้าใน PRE = สภาพเครื่อง "ตอนรับเข้า" → ถ้าให้แก้ย้อนหลังหลังซ่อมเสร็จ ลายเซ็นนี้จะไม่ valid (ลูกค้าไม่ได้อยู่ตอนนั้น)
  • กัน fraud: ช่างไม่สามารถ "เพิ่ม" รายการ NOT_OK ย้อนหลังเพื่อ avoid claim ได้
  • มาตรฐาน QC: PRE = baseline ก่อนแตะเครื่อง / POST = สภาพหลังแก้ — ต้องบันทึก pre ก่อนเริ่มซ่อม ถึงจะมี baseline เปรียบเทียบ

ผลถ้าลืมเช็ค PRE: ถ้าซ่อมเสร็จแล้วเพิ่งนึกได้ว่าลืมเช็ค PRE → ทำไม่ได้แล้ว ระบบ lock ตลอดกาล. แถวนี้จะไม่มีปุ่มเปรียบเทียบเลย เป็นบทเรียนให้ครั้งหน้าเช็คก่อน

💡 Guided flow จาก /repair-intake (ปรับปรุง 2026-05-14): เมื่อใช้ flow รับเครื่องที่หน้า /repair-intake ระบบจะ redirect มา /repair-checklist?autoOpen=PRE_REPAIR ทันที — modal PRE_REPAIR เปิดเองโดย user ไม่ต้องกดอะไร. เมื่อ save checklist เสร็จ ระบบจะ auto-issue ใบรับซ่อม + redirect ไป preview พิมพ์ — ไม่ต้องกลับมาที่ /repair-documents เอง. ดูรายละเอียดที่ §5.1

🖨️ พิมพ์ผลตรวจให้ลูกค้าถือกลับได้แล้ว ⭐ ใหม่ 23 ส.ค. 2569 (ลูกค้าร้านขอมาเอง)

เมื่อเช็คครบทั้งก่อนและหลังซ่อม กดปุ่ม "เปรียบเทียบ" → ในหน้าต่างจะมีปุ่ม "พิมพ์ให้ลูกค้า" ออกมาเป็น ใบ A4 "ผลตรวจเช็คก่อน–หลังซ่อม"

ในใบมีอะไร — ชื่อร้าน/สาขา · เลขที่งานซ่อม · ชื่อลูกค้า · รุ่นเครื่อง/IMEI/S/N · เวลาและชื่อคนที่เช็คทั้ง 2 รอบ · ตารางทุกรายการ พร้อมผลก่อน–หลังและหมายเหตุ · บรรทัดสรุป (ตรวจกี่รายการ / หลังซ่อมยังไม่ปกติกี่รายการ / ผลเปลี่ยนกี่รายการ) · ช่องเซ็นของช่างและของลูกค้า

🔒 รหัสปลดล็อกเครื่องและอาการที่แจ้ง ไม่ถูกพิมพ์ลงใบนี้ — ตั้งใจให้เป็นแบบนั้น เพราะเป็นใบที่ออกจากร้านไป

⚠️ ใบนี้ยาวได้หลายแผ่น ถ้าร้านตั้งรายการเช็คไว้เยอะ ซึ่งถูกต้องแล้ว — หัวตารางจะซ้ำให้ทุกหน้าและแถวจะไม่ถูกตัดครึ่ง · ถ้าเปลืองกระดาษเกินไป กดลิงก์ "พิมพ์แล้วเปลืองกระดาษ?" ที่มุมล่างซ้ายของหน้าต่างเพื่อดูวิธีตั้งค่า

💡 หัวกระดาษใช้สาขาของงานซ่อมใบนั้น ไม่ใช่สาขาที่เลือกอยู่บนหัวจอ (เลือก "ทุกสาขา" ค้างไว้แล้วพิมพ์ ก็ยังได้ชื่อสาขาที่ถูกต้อง)

⚠️ ตราบใดที่ยังไม่ได้ให้ลูกค้าเซ็นรับทราบ ใบนี้ยังไม่มีเลขที่เอกสาร และพิมพ์จากข้อมูล ณ ตอนที่กด — ถ้ามีการแก้ผลเช็คทีหลังแล้วพิมพ์ซ้ำ จะได้คนละใบกับที่ลูกค้าถืออยู่ · พอให้ลูกค้าเซ็นแล้วจะไม่เป็นแบบนั้นอีก (ดูหัวข้อถัดไป)

⭐ ให้ลูกค้าเซ็นรับทราบผลตรวจบนหน้าจอได้แล้ว — ล็อกเป็นหลักฐาน (25 ส.ค. 2569)

ร้านแจ้งเข้ามาว่า "ช่างเทสต์เครื่องแล้วแจ้งลูกค้า แต่ทางร้านไม่มีการลงชื่อของลูกค้า ว่ารับทราบผลของการเทสก่อนซ่อมและหลังซ่อมแล้ว"

ตอนนี้ในโมดัล "เปรียบเทียบก่อน/หลังซ่อม" มีกล่อง "ให้ลูกค้าเซ็นรับทราบผลตรวจ" อยู่ใต้ตาราง — เซ็นบนหน้าจอได้เลย ไม่ต้องพิมพ์กระดาษเพิ่ม (ใช้นิ้วเซ็นบนแท็บเล็ต ที่เคาน์เตอร์ได้)

ขั้นตอน

  1. เช็คให้ครบทั้ง ก่อนซ่อม และ หลังซ่อม ก่อน (ปุ่ม "เปรียบเทียบ" ถึงจะโผล่)
  2. กด "เปรียบเทียบก่อน/หลังซ่อม" → เลื่อนลงล่างสุด
  3. เซ็น 2 ช่อง: ลายเซ็นช่างผู้ตรวจ และ ลายเซ็นลูกค้า — ต้องมีทั้งคู่
  4. ใส่ หมายเหตุ ถ้าต้องการ (ไม่บังคับ · มีปุ่มข้อความสำเร็จรูปให้แตะแทนพิมพ์)
  5. กด "บันทึกการรับทราบ" → จะมีหน้าสรุปขึ้นมาบอกว่ากำลังจะแช่แข็งผลตรวจกี่รายการ มีกี่แถวที่ผลเปลี่ยน และ แก้ไขไม่ได้อีกหลังกดยืนยัน → กดยืนยัน

หลังบันทึกแล้ว

  • กล่องเปลี่ยนเป็นสีเขียว "ลูกค้ารับทราบผลตรวจแล้ว" พร้อม เลขที่เอกสาร (ขึ้นต้น CKA-) วันเวลา ชื่อคนที่บันทึก และ ลายเซ็นทั้ง 2 เป็นรูปที่แก้ไม่ได้
  • ปุ่ม "ดาวน์โหลด PDF" — ได้ไฟล์ที่มีลายเซ็นทั้งช่างและลูกค้าอยู่บนกระดาษ ส่งให้ลูกค้าทาง LINE ได้เลย
  • ปุ่ม "พิมพ์ให้ลูกค้า" จะพิมพ์ฉบับที่ลูกค้าเซ็นรับไปเสมอ ไม่ใช่ฉบับปัจจุบัน

🔒 ทำไมต้องล็อก — ใบนี้คือหลักฐานตอนมีข้อโต้แย้ง ถ้าแก้ได้ทีหลัง ลายเซ็นก็ไม่ได้พิสูจน์อะไร ⇒ ผลตรวจถูก แช่แข็ง ไว้ตั้งแต่วินาทีที่กดยืนยัน

✅ เช็คลิสต์ตัวจริงยังแก้ได้เหมือนเดิม — ไม่ได้ล็อกการทำงานประจำวันของร้าน แต่ถ้ามีคนแก้หลังลูกค้าเซ็นไปแล้ว จะมีแถบสีส้มเตือน ว่าใบที่ลูกค้าถืออยู่ เป็นฉบับวันไหน (เตือนอย่างเดียว ไม่บล็อก)

⚠️ เซ็นผิดคน / ผิดใบ แก้ได้ — ปุ่ม "ยกเลิกใบรับทราบ" ในกล่องเดียวกัน เจ้าของร้านและผู้ดูแลเท่านั้น และต้องกรอกเหตุผลอย่างน้อย 10 ตัวอักษร · ยกเลิกแล้วเซ็นใหม่ได้

🔒 รหัสปลดล็อกเครื่องและอาการที่แจ้ง ไม่ถูกเก็บและไม่ถูกพิมพ์ลงใบนี้เช่นเดิม

💡 เซ็นค้างไว้แล้วเผลอปิด — ระบบถามก่อน แตะนอกกรอบไม่ปิดหน้าต่างแล้ว และถ้ากด "ปิด" หรือ Esc ขณะมีลายเซ็นค้างอยู่ จะมีกล่องถามยืนยันก่อนทิ้ง

โครงสร้าง 2 แท็บ:

แท็บที่ 1: งานซ่อม

  • แสดงรายการงานซ่อมทั้งหมดในตาราง 9 คอลัมน์ (Desktop) / Card (Mobile):
    • เลขที่ + วันที่รับ — id + ตอนที่รับเครื่อง
    • ลูกค้า + เบอร์ — ชื่อ + เบอร์โทรกดเพื่อโทรได้ทันที
    • เครื่อง + IMEI — ยี่ห้อ/รุ่น + IMEI
    • อาการ — สิ่งที่ลูกค้าแจ้ง (มี Tooltip ดูเต็มถ้ายาว)
    • ช่าง — Avatar + ชื่อช่างที่รับผิดชอบ
    • สถานะ — Badge สีตามสถานะ
    • เช็คก่อนซ่อม — ปุ่ม + timestamp ที่เช็ค
    • เช็คหลังซ่อม — ปุ่ม + timestamp ที่เช็ค
    • เปรียบเทียบ — เปิด modal เทียบ pre vs post

⭐ ใบที่เช็คครบแล้ว เปิดกลับมาดูได้แล้ว (18 ส.ค. 2569) — เดิมพอเช็คครบทั้งก่อนและหลังซ่อม ปุ่มเปิดใบหายไปทั้ง 2 ปุ่ม เหลือแค่ "✓ เช็คแล้ว" กับปุ่ม "เปรียบเทียบ" ⇒ ใบที่บันทึกเสร็จแล้วเปิดกลับมาดูไม่ได้เลยจากหน้าจอ ซึ่งเป็นปัญหาเพราะใบนี้คือหลักฐานที่ร้านต้องหยิบมาให้ลูกค้าดูตอนมีข้อโต้แย้ง

ตอนนี้มีปุ่ม "ดู / แก้ไข" ทั้งบนตารางและการ์ดในมือถือ · ปุ่ม "เปรียบเทียบ" ยังอยู่เหมือนเดิม · การแก้ทับใบของช่างคนอื่นยังเตือนก่อนและบันทึกไว้เหมือนเดิม (จากงาน 17 ส.ค.) — เปลี่ยนแค่เรื่อง "เปิดดูได้" ไม่ได้ปลดการกันแก้หลักฐาน

แท็บที่ 2: รายการเช็ค (Master List — admin only)

  • จัดการรายการที่ต้องเช็ค (เช่น: หน้าจอ, ลำโพง, กล้อง, USB, Wi-Fi, แบตเตอรี่)
  • หมวดหมู่: DISPLAY, AUDIO, CAMERA, CONNECTIVITY, BATTERY, ฯลฯ
  • Sort order ปรับลำดับการแสดง
  • Active/Inactive toggle

🔴 ติ๊ก "ใช้ทุกสาขา" เลือกได้เฉพาะตอนสร้างหัวข้อใหม่ (แก้ 19 ส.ค. 2569) เปิดหัวข้อเดิมขึ้นมาแก้ ช่องนี้จะ กดไม่ได้ พร้อมบอกเหตุผลใต้ช่อง · เดิมกดสลับได้ และขึ้นว่า "แก้ไขรายการเรียบร้อย" — แต่ไม่มีอะไรเปลี่ยนจริงสักอย่าง (ระบบไม่เคยรับค่านี้ตอนแก้ไขเลย) ⇒ เชื่อว่าย้ายแล้วทั้งที่ยังอยู่ที่เดิม · เหตุผลที่ยังย้ายไม่ได้: ผลการเช็คที่บันทึกไว้ อ้างอิงชื่อหัวข้อเป็นข้อความ ถ้าย้ายขอบเขตแล้วชื่อไปซ้ำกับหัวข้อของอีกสาขา จะจับคู่ใบก่อนซ่อมกับใบหลังซ่อมไม่ได้ ซึ่งใบนี้คือหลักฐานที่ร้านใช้ตอนลูกค้าเคลม · ต้องการเปลี่ยนขอบเขต: ลบหัวข้อเดิม แล้วเพิ่มใหม่โดยติ๊ก/ไม่ติ๊กตั้งแต่ตอนสร้าง

ขั้นตอนการเช็ค (ใน modal):

  1. คลิกปุ่ม "เช็คก่อนซ่อม" หรือ "เช็คหลังซ่อม" → modal เปิดมาพร้อมรายการที่ admin ตั้งไว้ทั้งหมด
  2. แต่ละรายการมี 3 สถานะให้เลือก:
    • ปกติ (เขียว) — ทำงานได้
    • ไม่ปกติ (แดง) — มีปัญหา → บังคับใส่หมายเหตุ อธิบายว่าผิดปกติยังไง (เช่น "จอแตกที่มุมซ้ายบน") — กดบันทึกไม่ได้ถ้าเลือก NOT_OK แล้วไม่ใส่ note
    • ไม่เกี่ยวข้อง (เทา) — ไม่ตรวจรายการนี้

⭐ เช็คหลังซ่อม: รายการ "ไม่เกี่ยวข้อง" ยกมาจากใบก่อนซ่อมให้เอง (เพิ่ม 17 ส.ค. 2569) รายการที่ตอนเช็คก่อนซ่อมเลือกว่า "ไม่เกี่ยวข้อง" (เช่น "การชาร์จไร้สาย" บนเครื่องที่ไม่มีฟีเจอร์นี้) จะถูกเลือกให้อัตโนมัติตอนเปิดเช็คหลังซ่อม ไม่ต้องไล่กดใหม่ทีละรายการ · มีแถบบอกว่า ยกมากี่รายการ และแก้ได้ — ถ้าเลือกผิดตอนก่อนซ่อม กดเปลี่ยนได้ทันที · "ปกติ" กับ "ไม่ปกติ" ไม่ถูกยกมา — สองอันนั้นคือผลการทดสอบ ต้องเช็คใหม่ทุกครั้ง ส่วน "ไม่เกี่ยวข้อง" คือคุณสมบัติของตัวเครื่อง (ไม่มีฟีเจอร์นั้น ก่อนซ่อมหลังซ่อมก็ไม่มี) · หมายเหตุของรายการที่ไม่ปกติก็ไม่ถูกยกมา เพราะเป็นอาการก่อนซ่อม ซึ่งซ่อมไปแล้ว · ใบที่บันทึกไปแล้ว เปิดกลับมาแก้จะเห็นค่าเดิมของตัวเอง ไม่ถูกทับ

⭐ รหัสปลดล็อกเครื่องแสดงอยู่ในโมดัลเช็คลิสต์แล้ว (เพิ่ม 17 ส.ค. 2569) เดิมเวลาเทสต์เครื่องต้องปิดโมดัลไปดูรหัสแล้วกลับมาเปิดใหม่ ซึ่งเสียสิ่งที่กรอกค้างไว้ด้วย ตอนนี้รหัสที่บันทึกไว้ตอนรับเครื่องจะขึ้นอยู่ ด้านบนของโมดัล ทั้งเช็คก่อนซ่อมและหลังซ่อม พร้อมปุ่มคัดลอก · แสดงด้วยตัวอักษรที่แยก 0 กับ O และ 1 กับ l ออกจากกันได้ — รหัสที่อ่านผิดตัวเดียวคือปลดล็อกไม่ได้ · รองรับทุกรูปแบบ: PIN · ตัวอักษรผสม · ภาษาไทย · รูปแบบลากนิ้ว (L→↓→R) · อีโมจิ · มีช่องว่าง · ไม่ได้กรอกรหัสไว้ = ไม่มีอะไรขึ้นเลย ไม่มีช่องว่างหรือขีดค้าง 🔒 รหัสยังไม่ถูกพิมพ์ลงเอกสารใด ๆ เหมือนเดิม — ใบรับซ่อม · ใบส่งคืน · ไฟล์ Excel ที่ export และไม่ถูกส่งไปกับข้อมูลที่บันทึกผลเช็คลิสต์ · แสดงบนจอให้ช่างดูเท่านั้น ⚠️ ตอนเช็คก่อนซ่อมลูกค้ายืนอยู่หน้าเคาน์เตอร์และต้องเซ็นลายเซ็นในหน้านี้ รหัสจะอยู่บนจอตอนนั้นด้วย — เป็นรหัสของเจ้าของเครื่องเอง แต่ถ้าจอหันออกให้คนอื่นเห็นได้ ควรระวังจังหวะนี้

💡 รายการเช็คขึ้นตามสาขาที่เลือกอยู่ (แก้ 17 ส.ค. 2569) — เดิมระบบยึดสาขาที่ผูกกับบัญชีตอนเข้าสู่ระบบ สลับสาขาบนหัวจอแล้วรายการก็ยังเป็นของสาขาเดิม · ตอนนี้ทั้งการดูและการเพิ่มรายการใหม่ ใช้สาขาที่เลือกอยู่จริง และในโมดัลมีป้ายบอกว่ารายการชุดนี้เป็นของสาขาไหน · ร้านสาขาเดียวไม่มีอะไรเปลี่ยน

  1. กรอก หมายเหตุรวม (ถ้ามี — เช่น "ลูกค้าแจ้งว่าจอกระพริบเป็นช่วงๆ")
  2. ลายเซ็นลูกค้า — ลูกค้าเซ็นในกรอบบน touchscreen (มือถือ/iPad) หรือใช้เมาส์ (PC):
    • ลูกค้าจะ "เซ็นลายเซ็นจริง" หรือ "เขียนชื่อ" ก็ได้ — เก็บเป็นรูป PNG อัตโนมัติ
    • มีปุ่ม "ล้างลายเซ็น" ถ้าเซ็นผิดต้องการเซ็นใหม่
    • บันทึกแล้วลายเซ็นจะปรากฏในเอกสาร (ใบรับซ่อม, ใบเสร็จซ่อม, ใบส่งคืนหลังเครม)
  3. กด บันทึก → ระบบเก็บผลพร้อม timestamp + ชื่อช่างที่เช็ค

Compare modal (เทียบก่อน/หลัง):

  • ตารางเทียบรายการต่อรายการ — ก่อนซ่อม | หลังซ่อม | เปลี่ยนแปลง
  • รายการที่สถานะเปลี่ยน → highlight bg เหลือง + Badge "เปลี่ยนแปลง"
  • รายการที่ NOT_OK → แสดงหมายเหตุที่ช่างจดไว้ใต้ Badge (กรอบแดงอ่อน italic)

ของแถม · ส่วนลดรายรายการ · ตัดสต๊อกจากใบซ่อม ⭐ NEW

ในตารางรายการอะไหล่ (ทั้งจอช่างและหน้ารายการทั้งหมด) แต่ละแถวมีเพิ่ม 3 อย่าง

ช่องใช้ตอนไหน
ต้นทุน/ชิ้นราคาที่ร้านจ่ายไปต่อชิ้น — ใช้คิดกำไรและรายงานภาษี
ส่วนลด (บาท)ลดเฉพาะแถวนั้น เช่น สายชาร์จ 2 เส้น ฿600 ลดให้ ฿100 → คิด ฿500
สวิตช์ "ของแถม"แถมฟรี — คิดเงิน ฿0 แต่ ยังลงต้นทุนและตัดสต๊อกตามปกติ

ช่อง "ต้นทุน/ชิ้น" — ปล่อยว่าง ไม่เหมือน ใส่ 0 ⭐ NEW

⭐⭐⭐ 11 ก.ย. 2569 — ต้นทุนที่ร้านใส่เอง ไม่ถูกทับตอนกด "ส่งงาน" อีกแล้ว

อาการเดิมที่ร้านแจ้งมา — ช่างแก้ต้นทุนแบตเตอรี่เป็น 350 แล้วกด "ส่งงานเสร็จ" มาดูอีกทีกลับเป็น 660 · จออีกตัวใส่ต้นทุนไว้ 1,250 แต่กลายเป็น 0 เพราะตอนส่งงาน ระบบตัดอะไหล่ออกจากคลัง แล้วเอา ราคาทุนที่ตั้งไว้ในคลังอะไหล่ ไปเขียนทับ (แบตในคลังตั้งไว้ 660 · จอตัวนั้นในคลังตั้งไว้ 0) และหลังส่งงานแล้ว แก้กลับไม่ได้ กดบันทึกก็ไม่มีอะไรเตือน

ตอนนี้

เดิมตอนนี้
กดส่งงาน / กดเบิกอะไหล่ต้นทุนถูกทับด้วยราคาทุนในคลังต้นทุนที่ร้านใส่คงอยู่ — ใช้ราคาทุนในคลังเฉพาะแถวที่ยังไม่มีต้นทุน
แก้ต้นทุนหลังตัดสต๊อกแล้วแก้ไม่ได้ (บันทึกแล้วค่าหายเงียบ ๆ)แก้ได้ · ช่อง จำนวน ยังล็อกเหมือนเดิม
ค่าบริการที่ผูกคลัง (เช่นติดฟิล์ม)ได้ต้นทุนจากคลังตอนตัดสต๊อกเหมือนเดิมทุกอย่าง — ช่องต้นทุนของค่าบริการยังกรอกเองไม่ได้

🔴 งานที่ต้นทุนเพี้ยนไปแล้วก่อนอัปเดตนี้ — เปิดงานนั้น แก้ช่อง ต้นทุน/ชิ้น ให้ถูก แล้วกดบันทึก · ระบบไม่ได้แก้ย้อนหลังให้เอง

⚠️ ถ้าขึ้นข้อความ "ต้นทุนถูกแก้ไปแล้วจากที่อื่น" — แปลว่ามีคนแก้ต้นทุนรายการนั้นไปก่อนแล้ว ระหว่างที่หน้าจอนี้เปิดค้างไว้ ระบบ จะไม่เอาค่าบนจอนี้ไปทับ (กันต้นทุนที่เพิ่งแก้หายไป) · ทางแก้: ปิดหน้าต่าง แล้วเปิดงานซ่อมใหม่ แล้วแก้ต้นทุนอีกครั้ง · ถ้าหน้าจอเปิดค้างไว้ตั้งแต่ก่อนอัปเดต ให้กด F5 รีเฟรชก่อนแก้

💡 โมดัลปุ่มเบิกอะไหล่ (ไอคอนกล่องสีส้ม) — ยอดด้านล่างเปลี่ยนชื่อเป็น "มูลค่าที่ออกจากคลัง" คิดจาก ราคาทุนในคลัง ณ วันที่เบิก จึงอาจไม่เท่ากับต้นทุนในใบซ่อม — ต้นทุนของงานให้ดูที่รายการอะไหล่ในใบซ่อม

💡 ตั้งราคาทุนในคลังอะไหล่ให้ตรงความจริงไว้เสมอ — ระบบใช้ค่านี้เติมต้นทุนให้ตอนเลือกอะไหล่ ถ้าในคลังเป็น 0 ต้นทุนที่เติมให้ก็จะเป็น 0

⭐ อะไหล่ที่ช่างเพิ่ม "พร้อมกับ" กดส่งงานเสร็จ ถูกตัดสต๊อกทันทีแล้ว — เดิมอะไหล่ที่เพิ่มในการกดบันทึกครั้งเดียวกับ "ส่งงานเสร็จ" ยังไม่ถูกตัด ไปตัดตอนหน้าร้านกด "ส่งมอบ" แทน (ถ้างานนั้นไม่เคยถูกกดส่งมอบ สต๊อกจะเกินจริง) · ขั้นตอนของช่างเหมือนเดิมทุกอย่าง · ถ้าบันทึกรายการอะไหล่ไม่สำเร็จ งานจะ ยังไม่ถูกเปลี่ยนเป็น "เสร็จแล้ว" — อ่านข้อความแล้วกดใหม่ได้เลย

  • อะไหล่ที่เลือกจากคลัง ระบบเติมต้นทุนจาก ราคาทุนในคลัง ให้ตอนเลือก — แก้ได้ทุกเมื่อ แม้ส่งงานหรือตัดสต๊อกไปแล้ว และ ค่าที่ร้านแก้คือตัวที่ระบบใช้คิดกำไร
  • อะไหล่ที่พิมพ์ชื่อเอง (ปุ่ม "เพิ่มเอง (ไม่ตัดสต็อก)") ต้องกรอกต้นทุนเอง ไม่งั้นระบบไม่รู้ว่าร้านจ่ายไปเท่าไร
กรอกอะไรระบบเข้าใจว่า
ปล่อยว่าง (ขึ้นคำว่า "ไม่ระบุ")ยังไม่รู้ต้นทุน — ระบบจะถือว่าทุนเท่ากับราคาขาย คือกำไรจากอะไหล่ชิ้นนั้น = 0
ใส่ 0รู้แน่ว่าได้ของมาฟรี (เช่น ตัวแทนแถมมา) กำไรเต็มจำนวน
ใส่ตัวเลขทุนจริงต่อชิ้น เช่น ซื้อจอมา ฿1,200 ขาย ฿2,000 → กำไร ฿800

💡 แนะนำให้กรอกทุกครั้งที่พิมพ์อะไหล่เอง ถ้าไม่กรอก รายงานกำไรกับรายงานภาษีจะมองว่าอะไหล่ชิ้นนั้นไม่มีกำไร ทำให้ตัวเลขกำไรของร้านต่ำกว่าความจริง

ทำไมต้องใช้สวิตช์ "ของแถม" แทนการพิมพ์ราคา 0

  • ระบบเก็บราคาปกติของไว้ (เช่น ฿250) แล้วขึ้นบนใบเสร็จเป็น ฿250 แถมฟรี ลูกค้าเห็นว่าได้ของมูลค่าเท่าไร ต่างจากขึ้น ฿0 เฉย ๆ ที่ดูเหมือนระบบคิดเงินพลาด
  • ต้นทุนไม่หายจากงบ ถ้าพิมพ์ราคาเป็น 0 ระบบจะเข้าใจว่าของชิ้นนั้นไม่มีต้นทุน ทำให้กำไรและฐานภาษีสูงเกินจริง
  • เรื่องภาษี ของแถมจะไม่ต้องเสียภาษีขายก็ต่อเมื่อ ระบุรายการไว้ในใบกำกับภาษี และมูลค่าไม่เกินค่าสินค้า/บริการที่ขาย ระบบจึงพิมพ์บรรทัดของแถมออกมาเสมอ ไม่ซ่อนทิ้ง

⚠️ ห้ามลบแถวของแถมออกจากใบเสร็จ เพราะอยากให้เอกสารดูสั้นลง — ถ้าของแถมไม่ปรากฏบนใบกำกับภาษี จะไม่เข้าข้อยกเว้นและต้องเสียภาษีขายตามมูลค่าของนั้น

ปุ่ม "เบิกออกจากคลัง"

อะไหล่ที่เลือกมาจากช่องค้นหาคลัง (ไม่ใช่พิมพ์ชื่อเอง) จะขึ้นกล่องเขียว "ตัดสต๊อกอะไหล่" พร้อมปุ่มเบิก

  1. กด บันทึก งานก่อน (แถวที่ยังไม่บันทึกจะเบิกไม่ได้ ปุ่มจะเป็นสีเทา)
  2. กด เบิกออกจากคลัง (n) → ระบบตัดสต๊อกทุกแถวที่ผูกคลัง รวมของแถมด้วย และบันทึกต้นทุนจริงจากคลังลงในงาน
  3. แถวที่เบิกแล้วจะมีป้าย เบิกแล้ว และล็อกช่องจำนวนไว้ (สต็อกถูกตัดตามจำนวนนั้นไปแล้ว)
  • กดซ้ำไม่ตัดซ้ำ ระบบจำว่าแถวไหนเบิกไปแล้ว กดกี่รอบก็ตัดครั้งเดียว
  • ลบแถวที่เบิกแล้ว = คืนสต๊อกอัตโนมัติ พร้อมออกใบคืนอะไหล่เป็นหลักฐาน
  • ของไม่พอ ระบบไม่เบิกให้เลยสักแถว และบอกว่าตัวไหนขาดเท่าไร (ไม่เบิกไปครึ่งใบแล้วค้าง)
  • ไม่มีการตัดสต๊อกอัตโนมัติตอนกดบันทึก — ตั้งใจให้ต้องกดเอง เพราะช่างแก้ชื่อ/จำนวน/ลบแถวระหว่างซ่อมเป็นเรื่องปกติ ถ้าสต็อกขยับตามทุกครั้งที่บันทึกจะไล่ที่มาของยอดไม่ได้ และร้านที่ยังเบิกมือที่หน้า รายการทั้งหมด อยู่จะโดนตัดซ้ำ

ผลกับเอกสารที่พิมพ์:

เอกสารใช้ Checklist อะไร
ใบรับซ่อม (intake)PRE_REPAIR — แสดงสภาพเครื่องตอนรับ + ลายเซ็นลูกค้ายืนยัน
ใบเสร็จซ่อม / SMALL_RECEIPTPOST_REPAIR — แสดงผลตรวจ QC หลังซ่อม + ลายเซ็นลูกค้ารับเครื่อง
ใบส่งคืนหลังเครม (resolution)POST_REPAIR — แทนรายการ Final QC แบบ generic ด้วยรายการจริงที่ช่างเช็ค + ลายเซ็นลูกค้ารับเครื่อง

👤 ใบที่พิมพ์ระบุชื่อผู้เช็ค — ท้ายบล็อก checklist บนใบรับซ่อม/ใบเสร็จซ่อม จะมีบรรทัด "เช็คโดย {ชื่อ} · {วันเวลา}" ระบบดึงชื่อคนที่กดบันทึกมาให้เอง ไม่ต้องกรอก → เปิดใบเก่าย้อนหลังก็รู้ว่าใครเป็นคนตรวจเครื่องรอบนั้น (ถ้าเป็นใบเก่าที่ไม่มีข้อมูลผู้เช็ค จะแสดงเป็น "เช็คเมื่อ {วันเวลา}" เหมือนเดิม)

Mobile-friendly:

  • Modal เช็ครายการ: ปุ่ม 3 สถานะ stack vertically + full-width grow บนมือถือ (Desktop เป็น row)
  • ลายเซ็น canvas: รองรับนิ้วบน iPad/iPhone (touchAction: none กัน scroll ตอนเซ็น)
  • Card view บนมือถือ: ปุ่มอยู่ล่างเสมอ (consistent layout — ไม่กระโดดขึ้นบนเหมือน wrap)

5.6 ออกเอกสาร

📍 หน้า: /repair-documents 👤 สิทธิ์: OWNER, ADMIN, MANAGER, SALESTECH (ช่างธรรมดา ไม่เห็น)

วัตถุประสงค์: ออกเอกสารเกี่ยวกับงานซ่อม 5 ประเภท — รับเครื่อง / เสนอราคา / เสร็จรับเงิน / ใบเล็ก / ประกัน

ประเภทเอกสาร 5 แบบ:

เอกสารเลขที่ formataccentเนื้อหา
ใบรับซ่อม (INTAKE_RECEIPT)RCV-{branch}-{BEyear}-{seq:04}slate #475569ข้อมูลลูกค้า + เครื่อง + อาการ + checklist PRE_REPAIR + รูปถ่ายเครื่องตอนรับ + QR tracking. ⚠️ ความยาวขึ้นกับจำนวนรายการเช็ค — ร้านที่ตั้งรายการเช็คไว้เยอะ ใบจะยาวเกิน 1 หน้า A4 ซึ่งถูกต้องตามข้อมูล (ลิงก์ช่วยเหลือใต้ปุ่มพิมพ์จะขึ้นว่า "พิมพ์แล้วเปลืองกระดาษ?" ไม่ใช่ "ได้ 2 แผ่น?") · กดลิงก์นั้นจะบอกวิธีตั้งค่าหน้าต่างพิมพ์ให้ใช้กระดาษน้อยลง และบอกตรง ๆ ว่า ตัดหัวข้อตรวจเช็คออกจากใบนี้ไม่ได้ เพราะผลตรวจคือหลักฐานสภาพเครื่อง · ถ้าอยากให้ งานที่เช็คหลังจากนี้ ใช้กระดาษน้อยลง ผู้ดูแลระบบ ลบหัวข้อที่ไม่ได้ใช้ออกได้ที่ งานซ่อม → Checklist → แท็บ "รายการเช็ค" — ⚠️ ใบที่เช็คไปแล้วจะไม่สั้นลง เพราะผลที่บันทึกไว้ถูกเก็บแยกจากหัวข้อตั้งต้น
ใบเสนอราคา (QUOTATION)QUO-{branch}-{BEyear}-{seq:04}blue #2563ebรายการอะไหล่ + ค่าบริการ + ค่าแรง + ราคา (พร้อม/ไม่พร้อม VAT) — ขอลูกค้าอนุมัติก่อนเริ่มซ่อม · ⭐ ค่าบริการขึ้นเป็นบรรทัดของตัวเองพร้อมชื่อ ไม่ถูกนับรวมเป็นค่าอะไหล่อีกแล้ว
ใบเสร็จรับเงิน (RECEIPT)RCP-{branch}-{BEyear}-{seq:04}green #16a34aเอกสารทางการเงิน — A4 พร้อม VAT/ไม่ VAT
ใบเสร็จเล็ก (SMALL_RECEIPT)SLP-{branch}-{BEyear}-{seq:04}teal #0d9488ขนาด 80mm thermal สำหรับ POS slip printer + มี logo ร้าน · ⭐⭐ พิมพ์ชื่อรายการทีละบรรทัดแล้ว (เดิมมีแต่ยอดรวม ลูกค้าไม่เห็นว่าจ่ายค่าอะไรบ้าง) และแยกบรรทัด ค่าอะไหล่ / ค่าบริการ / ค่าแรง
ใบประกัน (WARRANTY_CARD)WRT-{branch}-{BEyear}-{seq:04}orange #ea580cbanner จำนวนวัน + รายการที่รับประกันแยกระยะได้ (จอ 30 วัน / แบต 365 วัน) + ความคุ้มครอง/ข้อยกเว้น + วิธีเคลม. ฟิตหน้า A4 เดียว · 🔴 ค่าบริการไม่ขึ้นบนใบนี้ — หัวข้อ "อะไหล่ที่เปลี่ยน / ซ่อม (อยู่ในประกัน)" แสดงเฉพาะอะไหล่ เพราะประกันครอบของที่เปลี่ยน ไม่ใช่บริการที่ทำครั้งเดียว (ถ้างานนั้นมีแต่ค่าบริการ หัวข้อนี้จะหายไปทั้งบล็อก)

⭐⭐ ค่าอะไหล่ กับ ค่าบริการ แยกกันบนเอกสารแล้ว (4 ก.ย. 2569)

เดิมค่าบริการที่ลงไว้ (ติดฟิล์ม · ล้างเครื่อง · ค่าตรวจ) ถูกนับรวมเข้าช่อง "ค่าอะไหล่" บนกระดาษ ⇒ ใบที่เปลี่ยนจอ ฿1,200 + ติดฟิล์ม ฿100 จะพิมพ์ว่า "ค่าอะไหล่ ฿1,300" ซึ่งไม่ตรงความจริง

ตอนนี้:

  • ใบเสร็จเล็ก พิมพ์ชื่อรายการทีละบรรทัด แล้วสรุปแยก ค่าอะไหล่ / ค่าบริการ / ค่าแรง
  • ใบเสนอราคา · ใบเสร็จ A4 · ใบแจ้งหนี้ แสดงค่าบริการเป็นบรรทัดของตัวเองพร้อมชื่อ
  • ใบรับประกัน ไม่แสดงค่าบริการ (ดูเหตุผลในตารางด้านบน)
  • หน้า "งานของฉัน" ของช่าง แยกบรรทัด "รวมค่าบริการ" ออกจาก "รวมค่าอะไหล่"

🔴 เอกสารที่ออกไปแล้วก่อนหน้านี้ พิมพ์ซ้ำได้เหมือนเดิมทุกตัวอักษร — ระบบเก็บเนื้อหาของใบไว้ตั้งแต่ตอนออกใบ จึงไม่ย้อนไปแก้ใบเก่า (ใบที่ลูกค้าถืออยู่กับใบที่พิมพ์ซ้ำต้องตรงกันเสมอ)

🔴 ยอดเงินไม่เปลี่ยน — เป็นการแยก ป้าย ไม่ใช่การคิดเงินใหม่ · ยอดรวมทั้งสิ้นของทุกใบเท่าเดิมทุกบาท

เปิดเอกสาร 2 วิธี:

  1. Auto จาก guided intake flow (default) — เมื่อ /repair-intake save + /repair-checklist save → ใบรับซ่อมออกเอง + preview เปิดทันที (ดู §5.1)
  2. Manual — ไปหน้า /repair-documents → กดแถว repair ที่ต้องการ → modal "ออกเอกสาร" เปิด → เลือกชนิดเอกสาร → กรอกข้อมูลเฉพาะ (VAT / ค่าแรง / ระยะประกัน) → กด "สร้างเอกสาร" → preview เปิดให้พิมพ์

Soft workflow ordering: ระบบมี order แนะนำ INTAKE → QUOTATION → RECEIPT → WARRANTY. ถ้าจะข้ามขั้น (เช่น ออก RECEIPT โดยยังไม่ได้ออก QUOTATION) → card จะเทาๆ + Badge "ข้ามลำดับ" + คลิกได้แต่ confirm modal ขึ้นก่อน. ใบรับซ่อมออกได้เสมอ (ไม่มี prereq)

สีพิมพ์: ทุก doc type ใช้ print-color-adjust: exact — สีพื้นหลัง title bar + table header + accent borders จะพิมพ์ออกสีครบแม้ผู้ใช้ไม่ติ๊ก "Background graphics" ใน print dialog ของ Chrome

ลายเซ็นลูกค้า (Priority chain — ใช้ตัวที่มีตามลำดับ):

  1. ลายเซ็นที่กรอกใน modal สร้างเอกสารตอนนั้น (ถ้ามี)
  2. ลายเซ็นจาก checklist (PRE สำหรับใบรับซ่อม / POST สำหรับใบเสร็จ)
  3. ลายเซ็น repair.intakeSignature (สำหรับใบรับซ่อม) / repair.deliverySignature (สำหรับใบเสร็จ)

💡 ลูกค้าเซ็นครั้งเดียวแล้วใช้ได้ทุกใบ — ระบบ resolve ลายเซ็นเองอัตโนมัติจาก priority chain ด้านบน. ในใช้งานจริง ลูกค้ามักเซ็น 2 ครั้ง: 1 ครั้งตอนรับเครื่อง (/repair-intake) + 1 ครั้งตอนเช็คสภาพ (/repair-checklist)

5.7 ติดตามสถานะออนไลน์สำหรับลูกค้า (Customer Tracking) — สาธารณะ

⭐⭐ 8 ก.ย. 2569 — แผง "ราคารวม" ตอนดูงานของช่างคนอื่น ขึ้นให้เห็นแม้ยอดจะเป็น ฿0.00

อาการเดิม งานที่คิดยอดแล้วได้ ฿0 (เช่น ซ่อมฟรีให้ลูกค้าประจำ) และไม่มีราคาประเมิน ⇒ แผงราคาหายทั้งแผง ช่างมองไม่เห็นว่ายอดเป็นเท่าไร

ตอนนี้ แผงขึ้นตามปกติและเขียนว่า ฿0.00 · งานที่ยังไม่เคยคิดยอด ยังโชว์ราคาประเมินเหมือนเดิม · ใบที่เพิ่งรับเข้ามายังไม่ขึ้นแผงเปล่าเหมือนเดิม

เป็นการแสดงผลล้วน — ไม่มีการเขียนข้อมูล และโมดัลแก้ไขของช่างไม่เปลี่ยน

⭐⭐⭐ 8 ก.ย. 2569 — ช่อง "ค่าแรง" ที่หน้างานช่าง เริ่มต้นที่ 0 เสมอแล้ว — ไม่ดึง "ราคาประเมิน" มาใส่ให้อีก

อาการเดิม (ร้านแจ้งเข้ามาเอง) ใส่ ราคาประเมิน ที่หน้ารับเครื่อง → มาเปิดหน้างานช่าง → ระบบเอายอดนั้นไปใส่ช่อง ค่าแรง ให้เอง ⇒ พอใส่อะไหล่เพิ่ม ยอดจึงบวกซ้ำ (ราคาประเมินรวมค่าอะไหล่อยู่แล้ว) · ร้านต้องมาลบค่าแรงออกเองทุกใบ และพอเปิดใหม่มันกลับมาเหมือนเดิม

ตอนนี้ ช่องค่าแรง เริ่มที่ 0 เสมอ ช่างกรอกเองตามจริง · ลบเป็น 0 แล้ว อยู่ที่ 0 ตลอด ไม่เด้งกลับ · ราคาประเมินยังอยู่ครบ ดูได้ที่หน้ารับเครื่องและการ์ดในรายการ แค่ไม่ไหลเข้าช่องค่าแรงอีก

ตัวอย่าง: รับเครื่อง ประเมิน ฿1,000 → ช่างใส่อะไหล่ ฿500 ⇒ เดิมยอดขึ้น ฿1,500 · ตอนนี้ขึ้น ฿500 ตามจริง

🔴 งานเก่าที่ค่าแรงถูกเติมไปแล้วและกดบันทึกค้างไว้ ค่านั้นยังอยู่เหมือนเดิม ระบบไม่ได้ไล่แก้ข้อมูลเก่าย้อนหลัง — การเปลี่ยนนี้มีผลกับ การเปิดโมดัลครั้งต่อไป ⇒ ใบที่เคยโดนบวกซ้ำไว้ หากตัวเลขยังไม่ถูก ให้เปิดงานนั้นแล้วแก้ค่าแรงใหม่อีกครั้ง

⭐⭐⭐ 8 ก.ย. 2569 (รอบที่ 3) — เจ้าของร้านทักว่า "ยังไม่เหมือน" — วัดแล้วต่างกันจริง 10 จุด

รอบก่อนเติม สี · โลโก้ · เงื่อนไขท้ายใบ เข้าไปแล้ว แต่ ไม่เคยเอา 2 ใบมาวางเทียบกันทีละบล็อก ⇒ เจ้าของร้านเปิดเทียบเองแล้วทักมา · รอบนี้จึงไล่ให้ครบทุกจุด

จุดที่ต่างใบที่ร้านพิมพ์ (ถูก)ใบ PDF ของลูกค้า (เดิม)
หัวเอกสารป้ายส้ม "ใบประกัน" มุมขวาบน ข้างเลขที่/วันที่แถบส้มเต็มความกว้างกลางหน้า
ลำดับเนื้อหาสรุปงานซ่อม → อะไหล่ → แถบ 30 วัน → ความคุ้มครอง/ข้อยกเว้นแถบ 30 วัน มาก่อน · สรุปงานซ่อมไปอยู่กลางใบ
ความคุ้มครอง / ข้อยกเว้น2 กล่องคู่กัน ซ้าย-ขวา · มีเครื่องหมาย ✓ / ✗เรียงลงล่างเต็มความกว้าง · ไม่มีเครื่องหมาย
ท้ายใบ"ขอบคุณที่ใช้บริการ" + "กรุณาเก็บเอกสารฉบับนี้ไว้เป็นหลักฐาน"ไม่มีเลย
ช่องลงนามผู้รับเครื่อง / พนักงาน · มีวงเล็บ (______) · ลูกค้า / ผู้มอบเครื่องพนักงานร้าน · ไม่มีวงเล็บ · ลูกค้า
ช่วงวันประกัน1 ก.ย. → **1 ต.ค.** (วันหมดเป็นตัวหนา)1 ก.ย. ถึง 1 ต.ค.
ป้ายในกล่องข้อมูลชื่อ โทรศัพท์ชื่อ: โทร:
บล็อก "หมายเหตุ"ไม่มีมี ⇒ ถอดออกแล้ว
หัวข้อของกล่อง "วิธีเคลมประกัน" และ "เงื่อนไขการรับประกัน"อยู่ ในกรอบอยู่ นอกกรอบ ⇒ ย้ายเข้าแล้ว
หัวข้อ "สรุปงานที่ซ่อม" · "อะไหล่ที่เปลี่ยน / ซ่อม"อยู่ นอกกรอบนอกกรอบอยู่แล้ว ⇒ ถูกแล้ว ไม่แตะ

🔴 ข้อ 10 มาจากเจ้าของร้านส่งภาพมาอีกรอบ — "ของร้าน หัวข้อจะอยู่ในกรอบ แต่ link ลูกค้า หัวข้อมันจะไม่อยู่ในกรอบ" ⇒ ⭐ ใบ HTML ไม่ได้ทำเหมือนกันทุกกล่อง — 2 กล่องนี้หัวข้ออยู่ข้างใน ส่วน"สรุปงานที่ซ่อม" กับ "อะไหล่" หัวข้ออยู่ข้างนอก ⇒ เกณฑ์ต้องแยกรายบล็อก ห้ามเหมารวมว่าทั้งใบเป็นแบบเดียวกัน

🔴 เรื่องที่ควรรู้ — คำว่า "ฟรี" หายจากใบของลูกค้า ใบที่ร้านพิมพ์เขียนว่า "ทางร้านจะตรวจสอบและซ่อมให้ ฟรี ตามข้อตกลง" แต่ใบ PDF เขียนว่า "ซ่อมให้ตามข้อตกลง" ⇒ กระดาษกับไฟล์สัญญากับลูกค้าคนละอย่าง · รอบนี้เติมคำว่า "ฟรี" ให้ตรงกันแล้ว

🔒 สิ่งที่ไม่เปลี่ยน · ใบยัง พอดี 1 หน้า — ที่จริงคือ โล่งขึ้นกว่าเดิม เพราะการจัด 2 กล่องคู่กันคืนพื้นที่มา ⇒ ไม่มีตัวอักษรไหนถูกย่อให้เล็กลง และไม่มีข้อความไหนถูกตัดออก · ใบที่ร้านพิมพ์จากหน้าจอ ไม่เปลี่ยนแม้แต่จุดเดียว · เอกสารชนิดอื่นได้ไฟล์เหมือนเดิมทุกไบต์ · อาการที่แจ้ง · รหัสปลดล็อกเครื่อง · เลขบัตรประชาชน · ต้นทุนอะไหล่ ยังไม่ออกไปกับใบของลูกค้า · เลขหน้าท้ายใบ PDF เก็บไว้โดยตั้งใจ (ใบที่พิมพ์จากจอไม่มี) — ไฟล์ยาวเกิน 1 หน้าได้อย่างถูกต้อง ⇒ เลขหน้าคือสิ่งที่บอกลูกค้าว่าได้ครบทุกแผ่นหรือยัง

⭐⭐⭐ 8 ก.ย. 2569 — ใบรับประกันที่ลูกค้าโหลด = ใบเดียวกับที่ร้านพิมพ์

ต่อจากรอบที่แล้วที่เติมข้อมูลร้านและข้อมูลลูกค้าให้ครบ รอบนี้ทำให้ หน้าตาเหมือนกันด้วย

สิ่งที่เพิ่มบนใบ PDF ของลูกค้า

เพิ่มอะไรเดิม
สีทั้งใบ — หัวเอกสารส้ม · กล่องความคุ้มครองเขียว · กล่องข้อยกเว้นแดง · แถบระยะเวลาไล่สีขาวดำล้วน
โลโก้ร้านไม่มี
เงื่อนไขการรับประกันท้ายใบไม่มีบล็อกนี้เลย
เวลาที่ออกใบมีแต่วันที่
อีเมล + ที่อยู่ลูกค้ามีแต่ชื่อกับเบอร์
ประเภทเครื่องไม่มี

🔴 ร้านที่เคยตั้งข้อความเงื่อนไขท้ายเอกสารเองไว้ (เมนู ข้อมูลหลัก → เงื่อนไขท้ายเอกสาร) จะได้ข้อความของตัวเองบนใบ PDF ตั้งแต่วันนี้ — เดิมใบ PDF ไม่มีบล็อกนี้เลย จึงไม่เคยเห็น · ร้านที่ไม่เคยตั้ง จะได้ข้อความค่าตั้งต้นชุดเดียวกับใบที่พิมพ์จากจอ · ควรเปิดดูสัก 1 ใบหลังอัปเดต เผื่อข้อความที่ตั้งไว้นานแล้วไม่ตรงกับที่ใช้จริงวันนี้

✅ ใบยังพอดี 1 หน้าเท่าเดิม — รวมใบที่ยาวที่สุด (รับประกัน 4 รายการ + ข้อความความคุ้มครองเต็ม) ไม่มีข้อความไหนถูกตัดออก และไม่มีตัวอักษรไหนถูกย่อให้เล็กลง

🔒 สิ่งที่ยังไม่หลุดออกไปเหมือนเดิม — อาการที่แจ้ง · รหัสปลดล็อกเครื่อง · เลขบัตรประชาชน · ต้นทุนอะไหล่ ยังไม่เคยและจะไม่ออกไปกับใบของลูกค้า · ใบที่ร้านพิมพ์จากหน้าจอ ไม่เปลี่ยนแม้แต่จุดเดียว · เอกสารชนิดอื่นได้ไฟล์เหมือนเดิมทุกไบต์

⭐⭐ 8 ก.ย. 2569 — ใบรับประกันที่ลูกค้ากดโหลด มีข้อมูลร้านและข้อมูลลูกค้าครบแล้ว

อาการเดิม — ลูกค้าเปิดลิงก์ติดตาม ใส่เลขท้ายเบอร์ 4 ตัว แล้วกด "ดาวน์โหลด" ใบรับประกัน ไฟล์ที่ได้ เปิดได้ปกติ ไม่มีข้อความผิดพลาดอะไรเลย แต่ข้างในขาดไปครึ่งใบ

สิ่งที่หายไปผลที่ลูกค้าเจอ
ชื่อร้าน · ที่อยู่ · เบอร์โทร · เลขประจำตัวผู้เสียภาษีไม่รู้ว่าใบนี้ออกโดยร้านไหน
กล่อง "ข้อมูลลูกค้า" (มีหัวข้อแต่ไม่มีค่า)ใบดูเหมือนกรอกไม่เสร็จ
เบอร์ร้านในบล็อก "วิธีเคลมประกัน"โทรกลับมาเคลมไม่ได้

ตอนนี้ — ใบที่ลูกค้าโหลด เหมือนกับใบที่ร้านพิมพ์เองทุกตัวอักษร

🔒 สิ่งที่ยังไม่หลุดออกไปเหมือนเดิม — อาการที่แจ้ง และ รหัสปลดล็อกเครื่อง ยังถูกตัดออกจากใบฝั่งลูกค้าเสมอ (ช่อง "อาการที่แจ้ง" เป็นช่องที่บางร้านเคยพิมพ์รหัสปลดล็อกปนไว้) · เลขบัตรประชาชนของลูกค้าก็ไม่เคยถูกส่งออกไป · เอกสารชนิดอื่นที่ลูกค้าโหลดได้ ได้ไฟล์เหมือนเดิมทุกไบต์ ไม่มีอะไรเปลี่ยน

⭐⭐ 5 ก.ย. 2569 — การ์ด "ค่าใช้จ่าย" บอกชัดแล้วว่ารายการไหนแถมหรือถูกลดราคา

อาการเดิมที่ร้านแจ้งมา — งานหนึ่งเปลี่ยนจอ ฿1,800 และ ติดฟิล์มแถม (ปกติ ฿150) การ์ดเดิมพิมพ์ว่า ค่าบริการ ฿150 · รวมค่าบริการ ฿150 แต่ ราคารวม ฿1,800 ⇒ ลูกค้าบวกเองแล้วได้ ฿1,950 ไม่ตรง จึงคิดว่าระบบคิดเงินไม่ถูก

ตอนนี้แสดงแบบนี้แทน · รายการที่แถม → มีป้าย "ของแถม" ท้ายชื่อรายการ · ราคาเต็ม ขีดฆ่า · ยอดจริง ฿ 0 · รายการที่ลดราคา → ราคาเต็มขีดฆ่า · ยอดจริงหลังลด · บรรทัดเล็กบอก "ลด ฿X" · ⇒ บวกยอดทุกบรรทัดที่เห็นแล้วเท่ากับ "ราคารวม" เสมอ

· 🔴 ใบเก่าที่ไม่มีของแถมและไม่มีส่วนลด แสดงเหมือนเดิมทุกอย่าง — ไม่มีป้าย ไม่มีขีดฆ่าโผล่มา · ร้านไม่ต้องตั้งค่าอะไร — ระบบอ่านจากช่อง "ของแถม" และ "ส่วนลด" ที่ร้านกรอกในรายการอะไหล่/ค่าบริการอยู่แล้ว

📍 หน้า (ลูกค้าใช้): /track และ /track/{slug}/{repairId} 👤 สิทธิ์: ลูกค้า — ไม่ต้องล็อกอิน (public, anyone with link)

วัตถุประสงค์: ให้ลูกค้าติดตามสถานะการซ่อมแบบเรียลไทม์เอง ไม่ต้องโทรถามร้าน — เหมือนติดตามพัสดุ Kerry/Flash

กลไก 3 ช่องทางที่ลูกค้ารู้ URL:

ช่องทางวิธีครอบคลุม
1. QR Code บนใบรับเครื่องสแกน QR ด้วยกล้องมือถือ95% case
2. กรอกเลขใน /trackกรอก เลขเดียว (8 ตัวอักษร เช่น F340-38A4) — เหมือนเช็คพัสดุไปรษณีย์ ไม่ต้องระบุชื่อร้านกรณีทำใบหาย

Single-field UX (เหมือน Kerry/Flash/ไปรษณีย์):

  • ใบรับซ่อมจะแสดง หมายเลขติดตาม ตัวใหญ่ (เช่น F340-38A4) ในกรอบ cyan/teal เด่นชัด
  • ลูกค้ากรอกเลขเดียวที่ /track → ระบบค้นข้าม tenant (UUID unique ทั้งระบบ) → redirect ไปหน้า detail อัตโนมัติ
  • ถ้าซ้ำ (rare) ระบบขอเลขเพิ่มจนกว่าจะ unique
  • รองรับทั้ง F34038A4, F340-38A4, f34038a4 (case + dash insensitive)

ข้อมูลที่ลูกค้าเห็น (ก่อนยืนยัน):

  • Timeline 6 ขั้นตอน (รับเครื่อง → เสนอราคา → อนุมัติ → ซ่อม → เสร็จ → ส่งมอบ) พร้อมเวลา + animation pulse ขั้นตอนปัจจุบัน
  • ยี่ห้อ/รุ่นเครื่อง + IMEI 4 ตัวท้าย (mask)
  • ชื่อช่างที่รับผิดชอบ
  • ชื่อลูกค้า masked (ส*****น) + เบอร์ masked (******1234)

ข้อมูลเพิ่ม (หลังยืนยันด้วย 4 ตัวท้ายเบอร์โทร):

  • ราคาประเมิน + รายการอะไหล่ + ค่าแรง
  • IMEI เต็ม + ชื่อลูกค้าเต็ม
  • การวินิจฉัยจากช่าง
  • ที่อยู่สาขา + เบอร์โทรร้าน (กดโทรได้)

🔒 ไม่แสดง "อาการที่แจ้ง" บนหน้านี้ (ปรับ 16 ส.ค. 2569) — เพราะหลายร้านใช้ช่องนั้นจดสิ่งที่ ไม่ควรออกสู่สาธารณะ เช่น รหัสปลดล็อกเครื่องลูกค้า ซึ่งจะหลุดออกไปทันทีที่ใครก็ตามรู้เลขใบ (พิมพ์อยู่บนกระดาษ + QR) แล้วเดา 4 ตัวท้ายเบอร์ได้ · ลูกค้าไม่เสียข้อมูลอะไร เพราะเขาเป็นคนแจ้ง อาการเองอยู่แล้ว ส่วนที่เขาอยากรู้จริงคือช่างวินิจฉัยว่าอะไรเสีย ซึ่งยังแสดงอยู่ · เบอร์โทรเต็มก็ถูกตัดออกด้วย — 4 ตัวท้ายคือ "รหัสผ่าน" ของด่านนี้ ถ้าผ่านด่านแล้วได้เบอร์ครบ ด่านจะกลายเป็นเครื่องขยายข้อมูลแทนที่จะเป็นเครื่องกัน · มีช่องเก็บรหัสปลดล็อกให้แล้วที่หน้ารับเครื่อง (ดู §5.1) — เก็บในระบบ ไม่พิมพ์ลงใบ ไม่ออกหน้านี้

การออกแบบใบรับซ่อม:

  • ใบรับซ่อม (INTAKE_RECEIPT) มี block QR + URL ที่ footer (cyan/teal gradient) แสดง:
    • QR encode https://โดเมน/track/{tenant.slug}/{repairId} (สแกนเปิดได้เลย)
    • 3 ขั้นตอน manual fallback (สแกน QR / เข้าเว็บ /track / กรอกชื่อร้าน + เลขใบ)
    • Note ว่าใส่ 4 ตัวท้ายเบอร์เพื่อดูราคา

ความปลอดภัย:

  • Rate limit: 30 req/นาที ต่อ IP — ป้องกัน scraping
  • Phone verify: 4 ตัวท้ายเบอร์เท่านั้น — ไม่ต้องเก็บ session/JWT
  • Generic error message — ไม่บอกว่าเลขใบมีหรือไม่ ป้องกัน enumeration
  • Backend exclude internal fields (cost basis, internal notes, signature)

💡 ข้อแนะนำ: ตอนรับเครื่อง ให้พนักงานบอกลูกค้าว่า "สแกน QR บนใบนี้เพื่อติดตามได้ตลอด 24 ชม." จะลดสายโทรเข้าได้มาก

⭐ ใหม่ 1 ก.ย. 2569 — หน้าติดตามแบบเต็ม: รูปเครื่อง · ดาวน์โหลดเอกสาร · ประวัติสถานะ (แพ็คเกจ โปรเฟสชันนอล ขึ้นไป)

ปัญหาที่แก้: ร้านหลายแห่งส่งของให้ลูกค้าทาง LINE ทีละไฟล์ — สลิป · ใบประกัน · ใบรับทราบผลตรวจ · รูปเครื่อง 10 ใบ · ข้อความขอบคุณ รวม ~15 ชิ้นต่อ 1 งานซ่อม ซึ่งกินเวลาจนไปเบียดงานอื่นหน้าร้าน

ทางแก้: ส่ง ลิงก์เดียว แล้วลูกค้าเปิดดูเองได้ทุกอย่างตลอดเวลา

การ์ดใหม่ในหน้าติดตามเห็นอะไร
รูปเครื่องจากร้านรูปที่ร้านถ่ายไว้ในใบงาน · แตะดูเต็มจอได้ · เลื่อนดูทีละใบ · ⭐ ถ้าร้านใส่รูปหลังซ่อมไว้ จะแยกเป็น "ก่อนซ่อม" / "หลังซ่อม"
เอกสารรายการเอกสารของงานนั้น + ปุ่มดาวน์โหลด PDF สำหรับใบที่ระบบสร้างไฟล์ได้
ประวัติสถานะไล่ตั้งแต่รับเครื่องจนส่งมอบ พร้อมวันเวลาและเลขที่เอกสาร

🔒 ทั้ง 3 การ์ดอยู่หลังด่านยืนยัน 4 ตัวท้ายเบอร์โทรเหมือนเดิม — คนที่รู้แค่เลขใบยังเปิดไม่ได้

⚠️ ป้ายที่ลูกค้าเห็น ขึ้นกับว่าร้านใส่รูปหลังซ่อมไว้หรือยัง — ระบบไม่เดาให้ ⭐ ปรับ 1 ก.ย. 2569 · ร้านยังไม่ได้ใส่รูปหลังซ่อม ⇒ การ์ดเดียว ป้าย "รูปเครื่องจากร้าน" เหมือนเดิมทุกประการ (รูปที่เก็บไว้ก่อนหน้านี้ แยกไม่ได้ว่าถ่ายก่อนหรือหลัง จึงไม่ติดป้ายที่ยืนยันไม่ได้) · ร้านใส่รูปหลังซ่อมแล้ว ⇒ แยกเป็น "ก่อนซ่อม" และ "หลังซ่อม" ให้ลูกค้าเทียบได้ · ร้านที่ถ่ายเฉพาะหลังซ่อม ⇒ เห็นกลุ่ม "หลังซ่อม" กลุ่มเดียว

🔴 งานเก่าทุกใบยังแสดงเหมือนเดิม — ระบบไม่ย้ายรูปเก่าไปช่องใหม่ให้อัตโนมัติ (ดู §5.3B)

เอกสารบางใบขึ้นว่า "ขอไฟล์ที่ร้าน" แทนปุ่มดาวน์โหลด — ใบชนิดนั้นระบบยังไม่ได้สร้างเป็นไฟล์ PDF (พิมพ์จากหน้าจอร้านอย่างเดียว) · ไม่ใช่ความผิดพลาด ลูกค้าขอจากร้านได้ตามปกติ

⭐ ปุ่ม "คัดลอกลิงก์ติดตาม" ที่หน้างานซ่อม (ทุกแพ็คเกจ) เดิมลิงก์นี้มีแต่ QR บนกระดาษ ⇒ ร้านพิมพ์เองไม่ได้ · ตอนนี้มีปุ่มคัดลอกทั้งใน การ์ดบนมือถือ และ ตารางบนเดสก์ท็อป กดแล้ววางลง LINE ได้ทันที · ลิงก์ที่คัดลอก เป็นเส้นเดียวกับที่ QR บนใบรับซ่อมชี้ไป ไม่ใช่คนละเส้น

⭐ ใบรับประกันงานซ่อมดาวน์โหลดเป็น PDF ได้แล้ว — เดิมพิมพ์จากหน้าจออย่างเดียว (ร้านต้องกด "บันทึกเป็น PDF" ของเบราว์เซอร์เอง) · ตอนนี้ระบบสร้างไฟล์ให้ พร้อมฟอนต์ไทยฝังในไฟล์ ⇒ เปิดที่เครื่องไหนก็อ่านออก · ใบนี้จึงโผล่เป็นปุ่มดาวน์โหลดในหน้าติดตามของลูกค้าด้วย

ร้านที่แพ็คเกจไม่ถึงโปรเฟสชันนอล — หน้าติดตามยังทำงานเหมือนเดิมทุกอย่าง (สถานะ · วันนัด · ข้อมูลเครื่อง) แค่ไม่มี 3 การ์ดใหม่ · ลูกค้าไม่เห็นข้อความผิดพลาดใด ๆ

5.9 รับเงินค่าซ่อมที่เคาน์เตอร์ (พร้อมระบุวิธีรับเงิน) ⭐ NEW

📍 ปุ่ม: ไอคอน 💵 สีเขียวในแถวงานซ่อมที่ /repair 👤 สิทธิ์: ทุกคนที่เข้าหน้างานซ่อมได้

ใช้เมื่อร้านตั้งโหมด "เก็บเงินที่เคาน์เตอร์ซ่อม" (ค่าเริ่มต้น — ดู §6.10) ถ้าร้านตั้งเป็นเก็บที่หน้าขาย ปุ่มนี้จะไม่ขึ้น เพราะเงินต้องผ่านแคชเชียร์เท่านั้น

ปุ่มจะโผล่เมื่อครบทุกข้อ

  • งานอยู่สถานะ เสร็จแล้ว หรือ ส่งคืนแล้ว
  • ยังไม่ได้เก็บเงิน และยังไม่ผูกกับบิลขาย
  • มียอดมากกว่า ฿0

ขั้นตอน

  1. กดไอคอน 💵 ที่แถวงาน → เด้งหน้าต่างสรุป ลูกค้า · เครื่อง · ยอดที่ต้องเก็บ
  2. เลือก วิธีรับเงิน — เงินสด / โอนเงิน / บัตร (บังคับเลือก)
  3. ติ๊ก "ส่งมอบเครื่องให้ลูกค้าพร้อมกัน" ถ้าลูกค้ารับเครื่องกลับเลย (ปลดติ๊กได้ถ้าจ่ายก่อนแล้วมารับทีหลัง)
  4. กด "ยืนยันรับเงิน"

ทำไมต้องเลือกวิธีรับเงินทุกครั้ง

เดิมระบบบันทึกแค่ว่า "เก็บเงินแล้ว" แต่ไม่เก็บว่ารับมาทางไหน ทำให้:

  • หน้า ยอดรับเงินวันนี้ ขึ้นค่าซ่อมเป็น "ไม่ระบุวิธี" ทุกก้อน — เอาไปเทียบเงินสดในลิ้นชักไม่ได้
  • เงินค่าซ่อม ไม่เคยถูกนับตอนปิดกะ เลย → ร้านที่เก็บเงินเองปิดกะแล้วขึ้น "เงินเกิน" ทุกวันที่มีงานซ่อม

ตอนนี้เมื่อระบุวิธีแล้ว:

วิธีผลต่อยอดปิดกะ
เงินสดเข้าลิ้นชัก → บวกใน "เงินที่ควรมี" ของกะที่กำลังเปิดอยู่
โอนเงิน / บัตรแยกเป็นยอดเข้าบัญชี ไม่บวกเข้าเงินสด

ℹ️ ผูกกับกะอัตโนมัติ — ถ้าคนที่กดรับเงินเปิดกะอยู่ เงินก้อนนี้จะเข้ากะนั้นทันที ถ้าไม่ได้เปิดกะ ระบบก็รับเงินให้ตามปกติแต่ไม่ผูกกะ (ร้านที่ไม่เคยเปิดกะจึงไม่มีอะไรเปลี่ยน)

⚠️ ช่างซ่อม (บทบาทช่างอย่างเดียว) เปิดกะไม่ได้แล้ว ตั้งแต่ 19 ส.ค. 2569 (ดู §10B)

เงินที่ช่างกดรับเอง ยังบันทึกได้ตามปกติ และยังขึ้นในหน้า "ยอดรับเงินวันนี้" แต่จะ ไม่ผูกกับกะไหน จึงไม่ไปโผล่ในยอด "เงินสดที่ควรมีในลิ้นชัก" ตอนปิดกะ

ร้านที่อยากให้ค่าซ่อมเข้ายอดปิดกะครบ ทำได้ 2 ทาง — (1) ให้คนที่เปิดกะอยู่เป็นคนกดรับเงิน (แคชเชียร์ / พนักงานขาย / ผู้จัดการ / เจ้าของร้าน) หรือ (2) เพิ่มบทบาท พนักงานขาย ให้ช่างคนนั้นที่หน้า ผู้ใช้งาน (§14.2) — เขาจะกลายเป็น ช่างขาย และเปิดกะได้

กรณีพิเศษ

สถานการณ์ระบบทำอะไร
กด "ส่งคืนแล้ว" ในฟอร์มแก้ไขงานถือว่าเก็บเงินแล้ว → ฟอร์มจะขึ้นช่อง "วิธีรับเงิน" ให้เลือกก่อนบันทึก
ส่งคืนเครื่องทั้งที่ยังไม่ได้ลงราคาส่งคืนได้ตามปกติ แต่ระบบจะยังไม่บันทึกว่ารับเงินแล้ว — ฟอร์มขึ้นกล่องส้มเตือนให้ทราบ พอลงค่าแรง/ค่าอะไหล่ทีหลัง ปุ่ม 💵 จะกลับมาให้เก็บเงินได้ตามปกติ
งานยอด ฿0 (เคลมประกัน / ซ่อมฟรี)ไม่ต้องเลือกวิธี เพราะไม่มีเงินเข้า แต่ต้องระบุเหตุผลในช่องหมายเหตุ
แก้ที่บันทึกผิด → กลับเป็นยังไม่จ่ายล้างวิธีรับเงินและถอนออกจากยอดปิดกะให้อัตโนมัติ
ยกเลิกงานซ่อมล้างการรับเงินทั้งหมด ไม่ค้างอยู่ในยอดกะ

⚠️ ทำไมงานที่ยังไม่ลงราคาถึงไม่ถูกนับว่ารับเงินแล้ว (แก้ 4 ส.ค. 2569) เดิมการกด "ส่งคืนแล้ว" จะบันทึกว่า จ่ายแล้ว ฿0 ทันทีแม้ยังไม่ได้ลงราคา ทำให้งานนั้นหลุดออกจากคิวรอชำระ ปุ่มรับเงินหายไป และสแกนที่หน้าขายก็ขึ้นว่า "จ่ายแล้ว" — เก็บเงินงานนั้นไม่ได้อีกเลย เกิดบ่อยเวลาหน้าร้านคืนเครื่องก่อนที่ช่างจะกรอกค่าแรง ตอนนี้งานจะค้างเป็น "ยังไม่จ่าย" ไว้ให้เก็บเงินย้อนหลังได้

⚠️ งานที่เก็บเงินก่อน ส.ค. 2569 จะขึ้นว่า "ไม่ระบุวิธี" ตลอดไป — ระบบไม่เคยเก็บข้อมูลนั้นไว้ และจงใจไม่เดาว่าเป็นเงินสด เพราะถ้าเดาผิดจะทำให้ตัวเลขเก่าดูน่าเชื่อถือทั้งที่มั่ว

5.8 ประกันงานซ่อม

⭐⭐ 8 ก.ย. 2569 — ใบส่งคืนหลังเคลม พิมพ์เวลาที่ปิดเคลมจริงแล้ว

อาการเดิมที่ร้านแจ้งมา — กดปิดเคลมตอน 16:13 แต่ใบส่งคืนพิมพ์ 14:56 เพราะใบไปอ่าน เวลาที่รับเครื่องเข้าเคลม ทั้งที่ป้ายบนใบเขียนว่า "วันที่ส่งคืน" ⇒ กระดาษที่ลูกค้าถือกลับพูดไม่ตรงความจริง ซึ่งมีน้ำหนักตอนมีข้อโต้แย้งเรื่องประกัน · ผิดทั้ง 4 จุดบนใบ (วันที่กับเวลาบนหัวใบ และวันที่ในช่องเซ็นอีก 2 ช่อง)

ตอนนี้

โหมดของใบอ่านเวลาจาก
ใบรับเครื่องเข้าเคลมเวลาที่รับเครื่อง — ไม่เปลี่ยนเลย เหมือนเดิมทุกอย่าง
ใบส่งคืนหลังเคลมเวลาที่กดปิดเคลม

⚠️ ใบเก่าที่ระบบยังไม่ได้บันทึกเวลาปิดเคลมไว้ จะขึ้น - ที่ช่องวันที่และเวลา และช่องเซ็นเป็นเส้นประให้เขียนด้วยมือ — ยังพิมพ์ใบได้ตามปกติ ไม่บล็อก เหตุผล: ระบบจะไม่เดาเวลาให้ เพราะถ้าเดาแล้วพิมพ์ใบเดิมซ้ำอีกครั้ง เวลาจะเปลี่ยนทุกครั้งที่พิมพ์ ซึ่งแย่กว่าการบอกตรง ๆ ว่าไม่มีข้อมูล · เคลมที่ปิดตั้งแต่นี้เป็นต้นไปจะมีเวลาครบเสมอ

📍 หน้า: /repair-warranty 👤 สิทธิ์: OWNER, ADMIN, MANAGER, SALESTECH (ช่างธรรมดา ไม่เห็น)

วัตถุประสงค์: บันทึกและติดตามประกันงานซ่อม รับเรื่องเคลมประกัน

ฟิลด์ประกันงานซ่อม:

ฟิลด์คำอธิบาย
งานซ่อมเชื่อมกับรายการซ่อมที่บันทึกไว้
วันเริ่มประกันวันที่เริ่มต้นประกัน — นับจากวันที่กดออกใบ ไม่ใช่วันที่ลูกค้ามารับเครื่อง
วันหมดประกันวันที่สิ้นสุดประกัน (ของระยะที่ยาวที่สุดในใบ)
รายการที่รับประกันแยกระยะรายรายการได้ เช่น จอ 30 วัน · แบตเตอรี่ 365 วัน ในใบเดียวกัน
เงื่อนไขประกันรายละเอียดความครอบคลุม / ข้อยกเว้น
สถานะใช้งานอยู่ (ACTIVE) · หมดอายุ (EXPIRED) · ยกเลิก (VOIDED)

⚠️ สถานะ "เคลมแล้ว" (CLAIMED) เลิกใช้แล้วตั้งแต่ 17 ส.ค. 2569 — ใบจะเป็น ใช้งานอยู่ ตราบใดที่ยังไม่ถึงวันหมด แล้วเปลี่ยนเป็น หมดอายุ เอง · ใบเก่าที่ค้างสถานะนี้อยู่จะถูกปรับให้ถูกต้องโดยผู้ดูแลระบบ

รับประกันหลายรายการในใบเดียว (ระยะไม่เท่ากัน)

งานซ่อมใบเดียวมักมีหลายรายการที่รับประกันไม่เท่ากัน — เช่นเปลี่ยนจอรับประกัน 30 วัน แต่เปลี่ยนแบตเตอรี่รับประกัน 1 ปี ระบบรองรับในใบเดียว ไม่ต้องพิมพ์รวมกันในช่องความคุ้มครองอีก

  1. ตอนออกใบประกัน (/repair-documents → ใบประกัน) จะมีส่วน "รายการที่รับประกัน"
  2. กดปุ่ม "เติมจากรายการอะไหล่" เพื่อดึงชื่ออะไหล่ของงานนั้นมาให้ทั้งหมด แล้วใส่จำนวนวันของแต่ละแถว · เพิ่มแถวเองได้สำหรับงานที่คิดค่าแรงล้วน (เช่น "เปลี่ยนหน้าจอ")
  3. ก่อนกดสร้าง ระบบแสดง วันหมดของแต่ละรายการ และ ประกันรวมของใบ ให้ตรวจก่อน
  4. ไม่ใส่รายการเลย = ใบประกันระยะเดียวแบบเดิมทุกอย่าง

บนใบที่พิมพ์: ตัวเลขใหญ่กลางใบคือ ระยะที่ยาวที่สุด ส่วนกล่องเขียว "ความคุ้มครอง" จะไล่รายการพร้อมวันหมดของแต่ละตัว แล้วตามด้วยข้อความความคุ้มครองเดิม

⚠️ ประกันเริ่มนับ ตั้งแต่วันที่กดออกใบ — ถ้าเครื่องยังไม่ส่งมอบ ลูกค้าจะเสียวันประกันเท่าที่เครื่องค้างที่ร้าน ควรออกใบตอนส่งมอบเครื่อง

การเคลมประกัน:

  1. ลูกค้าแจ้งปัญหาภายในระยะประกัน
  2. พนักงานค้นหาใบประกันด้วยเลขงานซ่อม / เบอร์โทร / IMEI
  3. ตรวจสอบวันหมดอายุและเงื่อนไข — ถ้าใบมีหลายรายการ ให้ดูรายการที่จะเคลมเป็นตัวตัดสิน
  4. กดเคลม → เลือกรายการที่จะเคลม (รายการที่หมดอายุแล้วจะเลือกไม่ได้ พร้อมบอกว่าหมดเมื่อไร)
  5. บันทึกการเคลมพร้อมรายละเอียด
  6. สร้างงานซ่อมใหม่แบบ "เคลมประกัน"

⭐ เคลมกี่รอบก็ได้จนกว่าจะถึงวันหมดประกัน (แก้ 17 ส.ค. 2569) เดิมใบที่ไม่ได้ระบุรายการย่อย พออนุมัติเคลมรอบแรกแล้วจะถูกปิด เคลมอีกไม่ได้เลยตลอดกาล และค้นหาใบนั้นไม่เจอด้วย ทำให้ขึ้นว่า "ไม่พบใบประกัน" ซึ่งดูเหมือนพิมพ์เลขผิด ตอนนี้ตัวตัดสินคือ วันหมดประกัน อย่างเดียว — เคลมซ้ำได้ทั้งใบระยะเดียวและใบหลายรายการ · ใบที่ ยกเลิก (VOIDED) ยังเคลมไม่ได้เหมือนเดิม · ใบหลายรายการ: เคลมจอไปแล้ว แบตเตอรี่ที่เหลืออีก 300 กว่าวันยังเคลมได้ตามปกติ · ใบจะขึ้นว่า "หมดอายุ" ก็ต่อเมื่อ หมดครบทุกรายการ

⭐ การเคลมไม่ขยายวันหมดประกัน (แก้ 17 ส.ค. 2569) วันหมดประกันยึดตาม ใบแรก เสมอ — เปลี่ยนแบตวันที่ 17/08/69 ประกัน 184 วัน หมดวันที่ 15/02/70 มาเคลมกี่รอบ ประกันก็หมดวันที่ 15/02/70 เหมือนเดิม เดิมใบส่งคืนหลังเคลมพิมพ์ข้อความว่าร้านจะขยายประกันเพิ่มให้ นับจากวันส่งคืนเครื่อง ซึ่ง ไม่ตรงกับที่ระบบทำจริง (ระบบไม่เคยขยายให้) และทำให้พิมพ์ใบเดิมซ้ำคนละวันได้วันหมดคนละวัน — ข้อความนั้นถูกเอาออกแล้ว

💡 ตัวกรอง "เคยเคลม" ในหน้ารายการ หมายถึงใบที่เคยมีการยื่นเคลม อย่างน้อย 1 ครั้ง — รวมเคลมที่ยังรออนุมัติและที่ถูกปฏิเสธด้วย ไม่ใช่เฉพาะที่อนุมัติแล้ว ป้ายบนการ์ดใช้เกณฑ์เดียวกัน ขึ้นว่า "เคยเคลม N ครั้ง" · รายละเอียดว่ารอบไหนผลเป็นอย่างไร ดูในใบ

6. ขายสินค้า (POS)

📍 หน้า: /sales 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: ระบบขายสินค้าหน้าร้าน (Point of Sale) รองรับสินค้าทั้งมือถือและอุปกรณ์เสริม

6.1 การขายสินค้า

⚠️ ก่อนเริ่มขาย — เปิดกะการขาย (ถ้าจำเป็น)

ตามมาตรฐาน POS สากล (Microsoft Dynamics, Shopify, Lightspeed) — แคชเชียร์ + พนักงานขาย (ค่าเริ่มต้น) ต้อง เปิดกะการขาย (กรอกเงินสดตั้งต้นในลิ้นชัก) ก่อนรับเงินจากลูกค้า. หน้าขายจะแสดงแถบสีส้ม + ปุ่ม "ไปเปิดกะการขาย" ถ้ายังไม่เปิด — กดเข้าไปกรอกเงินทอนเริ่มต้นแล้วกดเปิดกะ จากนั้นกลับมาขายได้.

เจ้าของร้าน / ผู้ดูแลระบบ / ผู้จัดการ ขายได้ตรง ไม่ต้องเปิดกะ (ค่าเริ่มต้น). เจ้าของร้านปรับนโยบายได้ที่ /settings → "นโยบายกะการขาย" — เลือกบทบาทที่ต้องบังคับ หรือเคลียร์ทั้งหมดเพื่อปิดการบังคับ.

🔒 ช่างซ่อม (บทบาทช่างอย่างเดียว) เข้าหน้ากะการขายไม่ได้แล้ว ตั้งแต่ 19 ส.ค. 2569 — ข้อความเดิมตรงนี้ที่เขียนว่าช่างซ่อม "ขายได้ตรง ไม่ต้องเปิดกะ" ตกรุ่นไปแล้ว · ช่างที่ต้องรับเงินค่าซ่อมที่เคาน์เตอร์เอง ดู §5.9

ดูรายละเอียดการเปิด-ปิดกะ + variance check ที่ §10B.

⭐ ใหม่ ส.ค. 2569 — แตะการ์ดสินค้าแล้วเคาะราคาที่จะคิดได้เลย ตั้งต้นเป็นราคาในระบบ กดแก้ผ่านคีย์แพดตัวเลขใหญ่ ปรับจำนวนในหน้าต่างเดียวกัน ถ้ากดต่ำกว่าราคาตั้งหรือต่ำกว่าทุน ระบบเตือนพร้อมบอกกำไรที่เหลือ (เตือนอย่างเดียว ไม่บล็อก) การกด Enter จากช่องค้นหาและการยิงบาร์โค้ดไม่เด้งหน้าต่างนี้ — เพิ่มลงตะกร้าทันทีตามราคาตั้ง เพื่อให้ยิงรัวได้ไม่สะดุด · รายละเอียดที่ §6.12

⭐ แก้ 4 ส.ค. 2569 — ตะกร้าไม่มีแถบเลื่อนแนวนอนอีกแล้ว เดิมเมื่อย่อหน้าต่างลงมาราว 1,130px (และบนแท็บเล็ตแนวนอน) แผงตะกร้าจะแคบเกิน จนคอลัมน์ "จำนวน" กับ "รวม" หลุดออกนอกจอ ต้องเลื่อนแนวนอนถึงจะเห็น และเครื่องหมาย ฿ ตกไปอยู่คนละบรรทัดกับตัวเลข

ตอนนี้แต่ละรายการเป็นการ์ดที่จัดใหม่:

  • บรรทัดบน = ชื่อสินค้า + ยอดรวมของรายการนั้น (ชิดขวา ไม่มีวันตกบรรทัด) + ป้ายกำกับ
  • บรรทัดล่าง = ปุ่ม − / จำนวน / + เรียงติดกันเป็นชุดเดียว แล้ว ปุ่มลบอยู่สุดขวา มีช่องว่างคั่นกลางกันกดพลาด (ทุกปุ่มขนาด 44×44 px ตามเกณฑ์การแตะด้วยนิ้ว)

แผงตะกร้าถูกขยายจาก 4/12 เป็น 5/12 ของความกว้าง และกริดสินค้าบนจอขนาดกลาง ลดเหลือ 2 คอลัมน์เพื่อให้การ์ดสินค้าใหญ่พออ่าน IMEI ได้

Layout — Split Screen (Shopify POS pattern):

หน้าจอแบ่งเป็น 2 คอลัมน์ — ตะกร้าอยู่ขวาเสมอ ไม่ต้อง scroll หาข้อมูล

┌─ ซ้าย (lg=8) ─────────────┐ ┌─ ขวา (lg=4) ──────┐
│ [ทั้งหมด][โทรศัพท์][อุปกรณ์] │ │ ตะกร้าสินค้า (3) [⛌][🗑]│
│ 🔍 ค้นหา...           [สแกน]│ │ ────────────────│
│ ┌──────────────────────┐ │ │ ► iPhone 13     │
│ │ 📱 iPhone 13 ┃ ฿17,900│ │ │ ► เคสกัน        │
│ │   IMEI ...   ┃ พร้อมขาย│ │ │ ────────────────│
│ │ 📱 iPhone 14 ┃ ฿24,900│ │ │ สรุปการชำระเงิน  │
│ │ 🎧 เคสกัน    ┃ ฿690   │ │ │ ลูกค้า: ...      │
│ │              ┃ 5 ชิ้น│ │ │ ยอดรวม ฿xxx     │
│ └──────────────────────┘ │ │ ส่วนลด: 0       │
│   (scroll ในกล่องผลค้นหา)  │ │ ─────────────── │
└──────────────────────────┘ │ ยอดชำระ ฿xxx    │
                              │ [เงินสด][PP][โอน]│
                              │ [ ยืนยันการขาย ] │
                              └─────────────────┘

ขั้นตอนการขาย:

  1. ค้นหาสินค้าด้วยชื่อ / IMEI / SKU หรือสแกน Barcode
  2. คลิกรายการในผลค้นหา → เพิ่มเข้าตะกร้า (เห็นทันทีในการ์ดขวา)
  3. ปรับจำนวน (อุปกรณ์เสริม) จากปุ่ม +/− ในตะกร้า
  4. เลือกลูกค้า หรือใช้ "ลูกค้าทั่วไป (Walk-in)" default
  5. ใส่ส่วนลดถ้ามี
  6. เลือกวิธีชำระ (เงินสด / PromptPay / โอน / บัตร)
  7. กรอกรับเงิน (ถ้าเงินสด) → ดูเงินทอน
  8. กด "ยืนยันการขาย" → ใบเสร็จเปิดอัตโนมัติให้พิมพ์

ค้นหาสินค้า — 3 ทาง:

  • พิมพ์ค้นหา — ชื่อสินค้า / IMEI / SKU / รหัส (debounce 300ms — debug ได้ทันทีไม่ต้องรอ Enter) + ปุ่ม × ล้างคำค้นหา
  • สแกน Barcode/QR — ปุ่ม "สแกน" ข้างช่องค้นหา → ใช้กล้องโทรศัพท์/แท็บเล็ต
  • Filter ประเภท — ทั้งหมด / โทรศัพท์ / อุปกรณ์เสริม (SegmentedControl ใต้ช่องค้นหา)

Visual Catalog Grid (โหลดสินค้าทั้งหมดไว้ตั้งแต่เริ่ม):

ระบบ pre-load สินค้าพร้อมขาย + อุปกรณ์เสริมทั้งหมดของสาขาไว้แล้ว แสดงเป็น การ์ดรูปภาพ ทันทีที่เปิดหน้า — cashier ไม่ต้องพิมพ์ก็เห็นทุกอย่าง — เลือกแตะได้เลย หรือพิมพ์เพื่อกรอง

Header แสดงจำนวน:

  • ก่อนค้นหา: สินค้าทั้งหมด N รายการ
  • ขณะค้นหา: ผลการค้นหา N รายการ

Card layout (compact 2-4 cols ตามขนาดจอ):

ส่วนสิ่งที่แสดง
รูปสินค้า (height 96px)รูปจริง (cover) / fallback IconDeviceMobile หรือ IconHeadphones บน gradient เทา
Badge ขวาบนจำนวนคงเหลือ (numeric เสมอ): 🟢 N ชิ้น (≥5) · 🟠 N ชิ้น (<5) · 🔴 หมด — คำนวณจาก stock − ที่อยู่ใน cart เห็นยอดที่ใส่ตะกร้าได้จริง
Badge ซ้ายล่างประเภทสินค้า: cyan "มือถือ" · grape "อุปกรณ์"
ชื่อสินค้า2-line clamp, dark.8 fw 600
IMEI/SKU9px monospace gray-6
ราคาsm fw 700 cyan-7 + tabular-nums

Interaction:

  • Hover การ์ด → border cyan-4 + bg cyan-0 (ไม่มี scale = ไม่ขยับ layout)
  • Click → addToCart ทันที, การ์ด cart ขวาอัพเดทเรียลไทม์
  • สินค้าหมด (สต็อก = 0) → opacity 55% + cursor not-allowed + กดไม่ได้
  • ↑↓ Enter — keyboard nav

ตะกร้าสินค้าขวา (Cart Card):

  • หัว: "ตะกร้าสินค้า (N ชิ้น)" + ActionIcon พักบิล (ส้ม) + ล้างตะกร้า (แดง)
  • Body: scrollable list ของรายการในตะกร้า (mah=320px) — ปรับจำนวนได้ + ลบทีละอัน
  • Empty state: "ไม่มีสินค้าในตะกร้า" + คำแนะนำ

สรุปการชำระเงิน (Summary Card — ใต้ตะกร้า):

  • ลูกค้า dropdown + ปุ่มเพิ่มลูกค้าใหม่
  • ยอดรวม (auto จากตะกร้า)
  • ส่วนลด (NumberInput)
  • ยอดชำระ (xl cyan)
  • ปุ่มเลือกวิธีชำระ 4 ปุ่ม
  • Cash: NumberInput รับเงิน + ปุ่ม +20/+50/+100/+500/+1000 + พอดี/ล้าง + กล่องเงินทอน
  • PromptPay: QR Code 200×200 + ยอดเงิน
  • ปุ่มใหญ่ "ยืนยันการขาย" (disabled ถ้าตะกร้าว่างหรือยังไม่เลือกวิธีชำระ)

Empty + Loading states:

  • กำลังโหลด catalog → Loader + "กำลังโหลดสินค้า..."
  • กำลังค้นหา → Loader + "กำลังค้นหา..."
  • ค้นหาแล้วไม่พบ → IconSearch + "ไม่พบสินค้าตรงกับ '{query}' — ลอง IMEI / SKU / ชื่อรุ่น หรือกดปุ่มสแกน"
  • สาขายังไม่มีสินค้า → IconInbox + "ไม่มีสินค้าในสาขานี้ — เพิ่มสินค้าได้ที่ สต็อกมือถือ หรือ อุปกรณ์เสริม"

Auto-refresh + Cart-aware:

  • หลังขายสำเร็จ (checkout) → catalog reload อัตโนมัติ — IMEI ที่ขายไปแล้วหายจาก grid ทันที
  • ระหว่างคีย์ (real-time): ใส่สินค้าลงตะกร้าแล้ว → grid hide รายการนั้นทันที (มือถือ unique IMEI หายเลย / อุปกรณ์ลดยอดเหลือ N − cart) — ไม่ขายซ้ำ + cashier เห็นยอดแม่นยำ
  • ลบจาก cart → กลับมาแสดงใน grid อีกครั้ง

Performance optimizations (สำหรับร้านที่สต็อกเยอะ):

  • โหลด 60 ตัวต่อประเภท สูงสุด (120 รวม) — สมัยใหม่หา IMEI/SKU ผ่าน search box ได้
  • รูปภาพ loading="lazy" — โหลดเฉพาะการ์ดที่อยู่ใน viewport (ลดภาระ network ลง 80% สำหรับร้านสต็อก 100+)
  • Hover ใช้ DOM mutation ไม่ผ่าน React state — ไม่ re-render การ์ดอื่นเวลา cursor เคลื่อนไหว

สลับสาขาขณะที่มีของค้างในตะกร้า ⭐ ใหม่ 14 ส.ค. 2569

⚠️ เดิมตะกร้าไม่ถูกล้างเมื่อสลับสาขา และไม่มีอะไรบอก — ของที่หยิบไว้ตอนอยู่สาขา ก ยังอยู่ในตะกร้าหลังสลับไปสาขา ข ทำให้ ขายของที่เป็นสต๊อกของสาขา ก ด้วยบิลที่ออก ในนามสาขา ข ได้ ซึ่งทำให้ทั้งยอดขายและจำนวนสต๊อกของทั้งสองสาขาผิดพร้อมกัน

ตอนนี้ถ้าสลับสาขาขณะที่ตะกร้ายังมีของ ระบบจะ ถามก่อนเสมอ โดยแสดง

  • สาขาปัจจุบัน → สาขาที่กำลังจะสลับไป
  • จำนวนรายการและยอดรวมที่จะถูกล้างทิ้ง (รวมส่วนลดและเทรดอินถ้ามี)
  • เหตุผลว่าทำไมถึงล้าง (ของถูกตัดจากสาขาเดิม แต่บิลจะออกในนามสาขาใหม่)

แล้วให้เลือก 2 ทาง

ปุ่มผล
ล้างตะกร้าแล้วสลับตะกร้าถูกล้าง แล้วสลับไปสาขาใหม่
ยกเลิกอยู่สาขาเดิมต่อ ตะกร้าไม่ถูกแตะ ขายต่อได้ทันที

✅ ถ้าตะกร้าว่างอยู่แล้ว จะสลับได้ทันทีโดยไม่ถามอะไร เหมือนเดิม

💡 บิลที่พักไว้ (Park) ไม่หายไปไหน — บิลพักผูกกับสาขาที่พักไว้ สลับกลับมาที่สาขานั้นเมื่อไรก็เปิดขึ้นมาขายต่อได้

6.2 วิธีชำระเงิน

วิธีไอคอนรายละเอียด
เงินสด (Cash)💵รับเงินสด — กรอกจำนวนรับ ระบบคำนวณเงินทอน
โอนเงิน (Transfer)🏦โอนผ่านธนาคาร — บันทึกเลขอ้างอิง
บัตรเครดิต (Credit Card)💳รูดบัตร — บันทึกเลขอนุมัติ
PromptPay📱สร้าง QR Code PromptPay อัตโนมัติ
โครงการรัฐ (เป๋าตัง)🏛️รับผ่านแอปถุงเงิน — ดู §6.13

💡 บิลเดียวจ่ายได้หลายช่องทาง เช่น รับผ่านเป๋าตัง ฿333 + เงินสดที่เหลือ — ดู §6.13

6.3 PromptPay QR Code

ขั้นตอน:

  1. เลือกวิธีชำระ "PromptPay"
  2. ระบบสร้าง QR Code จากหมายเลข PromptPay ของร้าน (ตั้งค่าใน Settings)
  3. แสดง QR Code บนหน้าจอ
  4. ลูกค้าสแกนด้วยแอป Banking
  5. ยืนยันการรับเงิน กดปุ่ม "ยืนยันชำระ"

⚠️ หมายเหตุ: ตั้งค่าเบอร์ PromptPay ได้ที่ ตั้งค่า → ข้อมูลร้านค้า → PromptPay Phone

6.4 หน้าจอแสดงราคาลูกค้า (Customer Display) — Pro+

📍 หน้า: /customer-display 📦 แพ็คเกจ: Professional หรือ Enterprise (ฟีเจอร์นี้ถูกล็อคในแพ็คเกจ Starter)

  • เปิดหน้าจอแยกบนจอที่หันหาลูกค้า
  • แสดงรายการสินค้าในตะกร้าแบบ Real-time (Socket.IO)
  • แสดงราคารวมและส่วนลด
  • แสดง QR Code PromptPay เมื่อเลือกชำระ

การใช้งาน:

  1. ที่หน้า ขายสินค้า (POS) → กดปุ่ม "เปิดจอลูกค้า" มุมขวาบน
  2. ระบบเปิดหน้าต่างใหม่ขนาดเต็มจอ
  3. ตั้งจอที่ 2 / แท็บเล็ตหันหาลูกค้า
  4. ระบบจะแสดงข้อมูลตะกร้าแบบ Real-time โดยอัตโนมัติ + Badge "เชื่อมต่อแล้ว"

⚠️ ถ้าแพ็คเกจของคุณยังไม่รวม ปุ่ม "เปิดจอลูกค้า" จะถูกซ่อนอัตโนมัติ — ต้องอัพเกรดเป็น Professional ขึ้นไป

💡 เคล็ดลับ: ใช้ได้ทั้งจอ Monitor เพิ่มเติม หรือแท็บเล็ตที่ตั้งหันหาลูกค้า

6.5 พักบิล (Park / Hold Bill)

📍 เปิดได้ที่: ปุ่ม "พักบิล" ในตะกร้า + ปุ่ม "บิลที่พักไว้ (N)" มุมขวาบน

วัตถุประสงค์: เก็บตะกร้าค้างไว้ก่อนชำระ — เช่น ลูกค้าเดินไปดูเคสเพิ่ม, หาเงินก่อน, ขอเปลี่ยนใจ → cashier กดพักบิลเพื่อรับลูกค้าคนถัดไปได้ทันที, ตอนกลับมาเปิด "บิลที่พักไว้" → restore cart → ชำระต่อ

ขั้นตอน:

  1. คีย์ตะกร้าตามปกติ → กดปุ่ม "พักบิล" (สีส้ม)
  2. ใส่ note (ไม่บังคับ) เช่น "ลูกค้าไปดู iPhone อีกอัน" หรือ "รอลูกค้ากลับมาจ่าย"
  3. กด "พักบิล" ยืนยัน → ตะกร้าเคลียร์ทันที พร้อมรับลูกค้าคนถัดไป
  4. ตอนลูกค้ากลับมา → กดปุ่ม "บิลที่พักไว้ (N)" มุมขวาบน → Drawer แสดงรายการ
  5. กด "เปิดบิลนี้" → ตะกร้าถูก restore ทุกรายการ + ลูกค้า + ส่วนลด → ชำระต่อตามปกติ

สิ่งที่บันทึก:

  • รายการสินค้าทั้งหมด (มือถือ + อุปกรณ์เสริม + ค่าซ่อม + รายการนอกสต็อก)
  • เครื่องเก่าที่ตีเทิร์น (ถ้ามี)
  • ส่วนลดที่กรอกไว้
  • ลูกค้าที่เลือก (ถ้ามี)
  • ผู้พักบิล + เวลา
  • Note

⭐ แก้แล้ว ส.ค. 2569: เดิมพักบิลที่มีค่าซ่อมหรือเครื่องเทรดอิน แล้วเปิดกลับมา รายการเหล่านั้นจะหายไป แต่ยอดเงินยังถูกหักค่าเครื่องเก่าอยู่ ทำให้ตัวเลขอธิบายไม่ได้และปิดบิลไม่ผ่าน ตอนนี้เก็บครบทุกอย่างแล้ว

⭐ แก้แล้ว ส.ค. 2569: เดิมกด "เปิดบิลนี้" ขณะที่ตะกร้ายังมีของอยู่ ระบบทับของเดิมทิ้งเงียบ ๆ โดยไม่ถาม ตอนนี้มีหน้าต่างยืนยันบอกจำนวนรายการที่จะหายก่อนเสมอ

สิ่งที่ ยังไม่ทำ ตอนพักบิล:

  • ไม่ตัดสต็อก — สินค้ายังขายให้คนอื่นได้ปกติ (ตัดเฉพาะตอน checkout จริง)
  • ไม่สร้าง Sale record — ไม่นับยอดในรายงาน

ข้อสังเกต:

  • จำนวนบิลที่พักไว้แสดงในปุ่มที่มุมขวาบนตลอดเวลา ([พัก 0] / [พัก 3])
  • บิลที่พักไว้ เห็นข้าม cashier — Cashier A พักไว้, Cashier B เปิดต่อได้
  • กรอง ตามสาขา อัตโนมัติ — สาขาอื่นไม่เห็นบิลของสาขานี้
  • Real-time refresh ผ่าน Socket.IO เมื่อ cashier อื่นพักหรือเปิดบิล
  • ลบบิลที่พักไว้โดยตรงได้จาก Drawer (กดถังขยะข้างปุ่ม "เปิดบิลนี้")

💡 เคล็ดลับ: ทุกคืนปิดร้านควรเช็ค "บิลที่พักไว้" → ถ้ามีค้างให้ตัดสินใจว่าจะ checkout หรือลบ ไม่ปล่อยค้างหลายวัน

6.6 ประวัติการขาย (Sales History)

📍 หน้า: /sales-history 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: รวมงาน post-checkout ทั้งหมดในที่เดียว — ดูประวัติบิล / พิมพ์ใบเสร็จซ้ำ / ยกเลิกบิล / คืนเงิน / ปิดยอดสิ้นวัน

⭐ แก้ 4 ส.ค. 2569 — พิมพ์ใบเสร็จซ้ำแล้วชื่อรายการค่าซ่อมขึ้นเป็น "-" เกิดเฉพาะ บรรทัดค่าบริการซ่อม ในบิลที่เก็บเงินค่าซ่อมผ่าน POS (§6.10) บรรทัดสินค้าและอุปกรณ์เสริมไม่เคยได้รับผลกระทบ

อาการ: ใบเสร็จที่เปิดทันทีหลังกดยืนยันการขาย แสดงชื่อถูกต้อง แต่พอกลับมาพิมพ์ซ้ำ จากหน้าประวัติการขาย ช่อง "รายการ" กลับเป็น - ส่วนจำนวนและยอดเงินยังถูกต้อง

ตอนนี้พิมพ์ซ้ำได้ชื่อเต็มเหมือนกันทุกครั้ง เช่น ค่าซ่อม Samsung Galaxy A54 พร้อมเลขที่งานและ IMEI ใต้ชื่อ — ใบเสร็จเก่าที่พิมพ์ไปแล้วไม่ต้องแก้อะไร เปิดพิมพ์ใหม่จะได้ชื่อที่ถูกต้องทันที (ข้อมูลในระบบไม่เคยหาย เป็นเรื่องการแสดงผลล้วน ๆ)

เลขที่ใบเสร็จ: ทุกบิลใหม่จะได้เลขรูปแบบ RC-{branchCode}-{BEyear}-{seq:04} (เช่น RC-HQ-2569-0001 = บิลใบแรกของสาขา HQ ปี พ.ศ. 2569) — เลขรันต่อเนื่อง ทั้งปีภาษี (reset 1 ม.ค.) แยกต่อสาขา ตามกฎสรรพากร (ประกาศอธิบดี ว.196/2553) ดูรายละเอียดที่ §12.0

หน้าหลัก /sales-history

ตัวกรอง:

  • ช่วงวันที่ (date range — Thai พ.ศ.)
  • สถานะบิล: ทุกสถานะ / ใช้งาน / ยกเลิก / คืนเงินทั้งบิล / คืนเงินบางส่วน
  • วิธีชำระ: ทุกวิธี / เงินสด / โอนเงิน / บัตรเครดิต
  • ค้นหา: เลขใบเสร็จ / IMEI / ชื่อลูกค้า / เบอร์โทรลูกค้า (debounce 300ms)

ตาราง (desktop) / Card (mobile):

  • เลขใบเสร็จ (cyan)
  • วันที่ + เวลา
  • ชื่อลูกค้า + เบอร์
  • จำนวนรายการ + ยอดรวม
  • วิธีชำระ + ผู้ขาย
  • Badge สถานะ: 🟢 ใช้งาน / 🔴 ยกเลิก / 🟠 คืนเงินทั้งบิล / 🟡 คืนเงินบางส่วน
  • กดแถว → SaleDetailModal

พิมพ์ใบเสร็จซ้ำ (Reprint)

ใน SaleDetailModal → ปุ่ม "พิมพ์ใบเสร็จ" (สีฟ้า) → เปิด Receipt modal เดียวกับตอนขาย → เลือก thermal 80mm หรือ A4 → พิมพ์

💡 ใช้กรณี: ลูกค้ากลับมาบอกว่า "หาใบเสร็จไม่เจอขอใหม่" → ค้นหาบิลด้วยเบอร์โทร / IMEI → กดพิมพ์ซ้ำ

ยกเลิกบิล (Void) — ADMIN เท่านั้น

📍 ปุ่ม "ยกเลิกบิล" (สีแดง) ใน SaleDetailModal — แสดงเฉพาะบิลสถานะ ใช้งาน + role ADMIN/OWNER

ขั้นตอน:

  1. กด "ยกเลิกบิล" → Modal เตือน
  2. กรอก เหตุผลการยกเลิก (บังคับ — เช่น "คีย์ผิดบิล", "ลูกค้าเปลี่ยนใจ")
  3. กด "ยืนยันยกเลิกบิล"
  4. ระบบ: คืนสต็อก (มือถือ → AVAILABLE, อะไหล่ → +quantity) + บันทึก audit log + Badge เปลี่ยนเป็น 🔴 "ยกเลิก"

บิลที่ยกเลิกแล้ว: ดูได้ตลอด แต่พิมพ์ใบเสร็จไม่ได้ + ไม่นับยอดในรายงาน + ไม่นับใน Z report

คืนเงิน / รับคืนสินค้า (Refund) — MANAGER+

📍 ปุ่ม "คืนเงิน" (สีส้ม) ใน SaleDetailModal — role MANAGER/ADMIN/OWNER

Wizard 3 ขั้นตอน:

Step 1 — เลือกรายการที่คืน:

  • Checkbox + จำนวน + ปุ่ม "คืนเข้าสต็อก" (toggle)
  • ถ้าสินค้าเสียหาย/ใช้แล้ว → ปิด toggle "คืนเข้าสต็อก" → ระบบจะคืนเงินแต่ไม่เพิ่มสต็อกกลับ

Step 2 — วิธี + เหตุผล:

  • เลือกวิธีคืน: เงินสด / โอนคืนเข้าบัญชี / เก็บเครดิตร้าน
  • กรอกเหตุผล (บังคับ)

Step 3 — ตรวจสอบ:

  • แสดงสรุปก่อนยืนยัน
  • กด "ยืนยันคืนเงิน" → ระบบสร้าง Refund record + คืนสต็อก + ออก ใบลดหนี้ (Credit Note) อัตโนมัติให้พิมพ์

สถานะหลังคืนเงิน:

  • คืนทุกชิ้น → 🟠 "คืนเงินทั้งบิล" (REFUNDED)
  • คืนบางชิ้น → 🟡 "คืนเงินบางส่วน" (PARTIALLY_REFUNDED) — ยังคืนเงินเพิ่มได้ในชิ้นที่เหลือ
  • รายการ Refund ปรากฏในประวัติของ SaleDetailModal (Alert สีส้ม)

⚠️ คืนเงินไม่ได้ถ้าบิลสถานะ: ยกเลิกแล้ว / คืนเงินทั้งบิลแล้ว

ปิดยอดสิ้นวัน (Z Report)

📍 ปุ่ม "ปิดยอดวันนี้" มุมขวาบนของหน้า /sales-history

ใช้ทำอะไร: สรุปยอดทุกอย่างของวันนั้น สำหรับเช็คเงินสดในลิ้นชัก / นำส่งหัวหน้า / เก็บเป็นหลักฐาน — มาตรฐาน retail ทั่วโลก เรียกว่า "Z Report"

เนื้อหา:

ส่วนรายละเอียด
3 KPIบิลทั้งหมด + บิลยกเลิก + ครั้งที่คืนเงิน
สรุปยอดยอดขายรวม − VAT − คืนเงิน = รายได้สุทธิ
แยกตามวิธีชำระ (รับเข้า)เงินสด / โอน / บัตร — แต่ละแบบ บิลกี่ใบ ยอดเท่าไหร่
แยกตามวิธีคืนเงิน (จ่ายออก)เงินสด / โอน / เครดิต — แต่ละแบบ ครั้งกี่ครั้ง ยอดเท่าไหร่
ยอดเงินสดคงเหลือในลิ้นชัก (คาดหมาย)= เงินสดเข้า − เงินสดคืน → ตัวเลขที่ควรนับเจอตอนปิดร้าน

พิมพ์ Z Report: A4 — มี 2 ช่องลายเซ็น (Cashier ผู้ปิดยอด + ผู้ตรวจสอบ) เก็บไว้เป็นเอกสารตอนปิดร้าน

เลือกวันได้: Default เป็นวันนี้ — เปลี่ยนวันที่เพื่อดู Z Report ย้อนหลังได้

💡 เคล็ดลับ: ปิดร้านทุกคืนให้พิมพ์ Z Report → นับเงินสดในลิ้นชัก → เทียบกับ "ยอดเงินสดคงเหลือคาดหมาย" → ถ้าไม่ตรง ต้องหาสาเหตุก่อนเลิกงาน

6.7 รับเทรดเครื่องเก่า (Trade-in) ⭐ NEW

📍 ตำแหน่ง: ปุ่มในหน้า /sales POS (ใต้ cart summary) 👤 สิทธิ์: ทุก role ที่ขายได้

วัตถุประสงค์: ลูกค้าที่ซื้อเครื่องใหม่มักอยากเอาเครื่องเก่ามาตีเครดิต. ก่อนหน้านี้ cashier ต้องทำ 2 transactions แยก (Purchase + Sale) → cashier งง + ตีเงินไปกลับไปกลับมา + ไม่มี link ระหว่างเครื่องเก่ากับ sale

Workflow ใหม่ — เซลเดียว:

  1. ขายเครื่องใหม่ → เพิ่มสินค้าลงตะกร้าตามปกติ (เช่น iPhone 15 ฿35,000)
  2. กดปุ่ม + รับเทรดเครื่องเก่า ใต้ summary
  3. Modal เปิด → กรอก:
    • ยี่ห้อ + รุ่นเครื่องเก่า (Select จาก master)
    • IMEI (ไม่บังคับ — ระบบ auto-gen ถ้าเว้น)
    • สภาพ (NEW / LIKE_NEW / GRADE_A/B/C/D)
    • ราคาตั้งต้น (basePrice) + หัก (deductions) → ราคาสุทธิ auto-calc
  4. Preview card สีฟ้าแสดง:
    • ยอดเครื่องใหม่ ฿35,000
    • − ตีเครดิตเครื่องเก่า ฿10,000
    • = ลูกค้าจ่ายเพิ่ม ฿25,000
    • (ถ้าตีเครดิตมากกว่าเครื่องใหม่ → Alert orange เตือนต้องคืนเงินส่วนต่าง)
  5. กด ใช้ตีเครดิต ฿X → modal ปิด → ใน cart มีบรรทัด violet "เครื่องเทรด" + ราคาติดลบ
  6. ยอดชำระ (total) แสดงเฉพาะ net amount due = สิ่งที่ลูกค้าต้องจ่ายเพิ่ม
  7. กด checkout → backend atomic transaction:
    • สร้าง Purchase (เครื่องเก่าเข้าระบบ)
    • สร้าง Product ใหม่จาก purchase (status=AVAILABLE in stock, source=TRADE_IN)
    • สร้าง Sale ของเครื่องใหม่ + เซ็ต tradeInPurchaseId, tradeInValue, netAmountDue
    • คืน sale record + เปิดใบเสร็จ

ข้อดี:

  • Cashier ทำขั้นตอนเดียว ไม่งง
  • Audit trail: ต้นทุน iPhone 12 เก่า = ฿10,000 (จาก trade-in) — ตอนขายต่อในอนาคต กำไรคิดถูกต้อง
  • Sale receipt มีทั้ง 2 รายการ (เครื่องใหม่ + ตีเครดิต) + net amount due
  • Reduce double-counting ในรายงานกำไร

ลบเครื่องเทรด: กดไอคอนถังขยะที่บรรทัด violet → ลบออกก่อน checkout (ก่อน save = แก้ได้)

6.8 การคืนเงิน — Analytics (Refunds list) ⭐ NEW

📍 หน้า: /refunds 👤 สิทธิ์: OWNER, ADMIN, MANAGER

วัตถุประสงค์: ระบบ Refund มีอยู่แล้วฝังใน /sales-history (refund per sale) แต่ไม่มีหน้า list รวม + analytics — ตอนนี้มี

Stat cards:

  • จำนวนรายการ refund
  • เงินที่คืนรวม

Filters:

  • ค้นหา: receipt number / customer name / phone
  • ช่วงวันที่ (default 30 วันล่าสุด)
  • วิธีคืน: ทุกวิธี / CASH / TRANSFER / CREDIT_CARD / STORE_CREDIT / EXCHANGE

List view:

  • แต่ละ row: badge วิธีคืน + receipt number + status (คืนเต็ม/บางส่วน) + customer + วันที่ + เหตุผล + ผู้ทำ refund + จำนวนเงินคืน
  • คลิก → modal detail แสดง returnedItems + เหตุผลเต็ม

ใช้สำหรับ:

  • Audit trail (auditor ขอ refund log บ่อย)
  • Detect fraud — cashier ทำ refund บ่อยผิดปกติ
  • Detect quality issues — มือถือยี่ห้อ X รุ่น Y refund เยอะ → อาจมีปัญหา

6.9 ใบแจ้งหนี้ B2B (SalesInvoice) ⭐ NEW

📍 หน้า: /invoices 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: ลูกค้าบุคคลจ่ายทันที — ลูกค้าบริษัท (ตัวแทน, ออฟฟิศซื้อยกล็อต) อยากได้ "ใบแจ้งหนี้" + เครดิต net-30/60 จ่ายภายหลัง. ระบบนี้รองรับ B2B workflow ครบ

Customer setup ก่อน: ใน /customers form เพิ่ม fields ใหม่:

  • type: INDIVIDUAL (default) / CORPORATE
  • taxId (13 หลัก)
  • contactPerson
  • paymentTerms: cash / net-7 / net-15 / net-30 / net-60
  • creditLimit (วงเงินเครดิต)
  • currentDebt — ยอดค้างทั้งหมด (auto-update)

สิ่งที่เปลี่ยนในใบแจ้งหนี้ B2B ⭐ ใหม่ 15 ส.ค. 2569

1. VAT คิดแบบ "ถอด" ไม่ใช่ "บวก"

⚠️ เดิมระบบบวก VAT ทับยอดที่กรอก — ใส่ราคา ฿1,000 แล้วกรอก VAT 70 ได้ยอดรวม ฿1,070 ทั้งที่ราคาสินค้าในระบบเป็น ราคารวม VAT อยู่แล้ว = เก็บ VAT ซ้ำสองรอบ

ตอนนี้ระบบคำนวณให้เอง: ยอด ฿1,000 → VAT ที่รวมอยู่แล้ว ฿65.42 · ยอดรวมยังเป็น ฿1,000

  • อัตรา VAT อ่านจาก การตั้งค่าสาขา ไม่ใช่ค่าตายตัว
  • สาขาที่ยังไม่จดทะเบียน VAT จะไม่มีบรรทัด VAT บนใบเลย
  • ช่องกรอก VAT เองถูกเอาออก เพราะเป็นตัวเลขที่ระบบต้องคำนวณ ไม่ใช่ให้พิมพ์

2. เลขที่เอกสารขึ้นต้นด้วย SINV-

⚠️ เดิมใช้ INV- ซ้ำกับใบแจ้งหนี้งานซ่อม ทำให้เอกสารคนละประเภทมีเลขเดียวกันได้ ในสาขาและปีเดียวกัน ซึ่งสืบย้อนไม่ได้

✅ ใบที่ออกไปแล้วเลขไม่เปลี่ยน ยังเป็น INV- เหมือนเดิมทุกใบ — ระบบไม่แก้เลขเอกสาร ที่ยื่นให้ลูกค้าไปแล้วย้อนหลัง

**3. เดินดูได้ทุกหน้า + แท็บ "เกินกำหนด" ใช้งานได้

เดิมหน้านี้แสดง 50 รายการแล้วจบ ใบเก่ากว่านั้นเปิดดูไม่ได้เลย ตอนนี้มีปุ่มเปลี่ยนหน้า และเลือกจำนวนต่อหน้าได้ (25/50/100) · แท็บ "เกินกำหนด" กรองจากวันครบกำหนดจริง

4. ใบร่าง (ยังไม่ออกเลข)

บันทึกใบไว้ก่อนโดยยังไม่ออกเป็นเอกสารจริงได้ · ใบร่าง ยังไม่กินเลขที่เอกสาร เลขจะออกตอนกด "ออกใบ" · และ ใบร่างไม่ถูกนับในยอดเงินรวมและยอดค้างชำระ

💡 กดสร้างตามปกติยังได้ใบที่ออกแล้วทันทีเหมือนเดิม — การบันทึกร่างเป็นทางเลือกเพิ่ม

5. ⭐ ออกใบแล้วสต๊อกลดจริง (ใหม่ 23 ส.ค. 2569)

⚠️ เดิมออกใบแจ้งหนี้แล้วสต๊อกไม่ขยับเลย — ขายมือถือผ่านใบแจ้งหนี้ไปแล้ว เครื่องนั้น ยังขึ้นว่า "พร้อมขาย" และขายซ้ำได้อีก · อุปกรณ์เสริมก็ไม่ถูกตัดจำนวน

ตอนนี้เมื่อกด "ออกใบ" ระบบจะ:

  • ตัดจำนวนอุปกรณ์เสริม พร้อมบันทึกประวัติการเคลื่อนไหว (ดูได้ในหน้าอุปกรณ์เสริม)
  • มาร์คมือถือว่า "ขายแล้ว" ⇒ ไม่ถูกขายซ้ำและหลุดออกจากมูลค่าสินค้าคงเหลือ
  • ของไม่พอ = ออกใบไม่ได้ ระบบบอกว่าตัวไหนขาดเท่าไร และไม่กินเลขที่เอกสาร
  • อุปกรณ์เสริมต้องอยู่สาขาเดียวกับใบ ถ้าคนละสาขาจะถูกปฏิเสธพร้อมบอกเหตุผล

ยกเลิกใบ → คืนของเข้าคลังให้อัตโนมัติ · แต่มี ช่องติ๊กปิดการคืน สำหรับกรณีที่ ลูกค้ารับของไปแล้วจริง ๆ (ติ๊กแล้วระบบจะบอกบนหน้าจอว่าไม่ได้คืนของ)

💡 ใบร่างไม่ตัดสต๊อก — แก้ไข/ลบได้อิสระเหมือนเดิม สต๊อกขยับตอนกด "ออกใบ" เท่านั้น

6. ⭐ เงินที่รับเข้ารายงานรายได้และภาษีแล้ว (ใหม่ 23 ส.ค. 2569)

⚠️ เดิมออกใบแจ้งหนี้และรับเงินไปแล้ว ยอดนั้นไม่โผล่ในรายงานการเงินเลยสักบาท — ยอดขายเชื่อจึงหายไปจากกำไร/ขาดทุนและจากรายงานภาษี

ตอนนี้:

นับเมื่อไร
รายได้ — ร้านบุคคลธรรมดาตอนรับเงินจริง (เกณฑ์เงินสด) · ออกใบแล้วยังไม่จ่าย = ยังไม่นับ
รายได้ — ร้านนิติบุคคลตอนออกใบ (เกณฑ์สิทธิ ตามที่กฎหมายกำหนดสำหรับนิติบุคคล)
VAT ขายตอนออกใบเสมอ ทั้ง 2 แบบ — ตามประมวลรัษฎากร ม.78
ต้นทุนขายตามเกณฑ์เดียวกับรายได้ของร้านนั้น

💡 VAT กับรายได้อยู่คนละเดือนได้ และนั่นถูกต้อง — ร้านบุคคลธรรมดาที่จด VAT จะยื่น ภ.พ.30 ในเดือนที่ออกใบ แต่นับเป็นรายได้ในเดือนที่ได้รับเงินจริง

เพิ่มยอด "ลูกหนี้การค้า" — ยอดที่ออกใบไปแล้วแต่ยังเก็บเงินไม่ได้ ทำให้เห็นว่า ของที่หายจากคลังไปนั้น กลายเป็นเงินที่ลูกค้ายังค้างอยู่ ไม่ใช่ของหาย

⚠️ ใบที่ระบบไม่มีบันทึกว่ารับเงินวันไหน จะยังไม่ถูกนับเป็นรายได้ (ระบบไม่เดาวันย้อนหลัง) ถ้าร้านเคยแก้ยอดชำระโดยไม่ผ่านปุ่ม "บันทึกรับเงิน" ให้บันทึกรับเงินใหม่ให้ถูกต้อง

🔴 หมายเหตุสำคัญ: เกณฑ์การรับรู้รายได้และ VAT ข้างต้นอ้างอิงประมวลรัษฎากร แต่ควรให้นักบัญชีของร้านตรวจสอบให้ตรงกับวิธีที่ร้านใช้ยื่นจริง โดยเฉพาะร้านนิติบุคคล

6.9.1 ออก Invoice (/invoices → ออก invoice)

Workflow:

  1. กด ออก invoice
  2. เลือกลูกค้า (B2B จะมี badge "B2B")
  3. เพิ่มรายการ — มี 2 modes:
    • ค้นหา product/accessory — type ≥2 chars → search → click result → auto-fill ชื่อ + ราคา + qty=1
    • + รายการเอง — สำหรับ service/labor ที่ไม่มีในสต็อก (พิมพ์เอง)
  4. ปรับ qty / unitPrice ที่ NumberInput (lag-free — uncontrolled refs)
  5. กรอก VAT (ถ้ามีใบกำกับเต็มรูป) + เลือก payment terms
  6. Subtotal / VAT / รวม auto-calc
  7. กด ออก invoice → ระบบ:
    • Auto-detect dueDate จาก paymentTerms (net-30 → +30 วัน)
    • ตั้ง status=ISSUED + เลขที่ INV-{branchCode}-{BEyear}-{seq:04}
    • Increment Customer.currentDebt
    • ตรวจ creditLimit — ถ้าเกิน → block + Alert (เฉพาะ CORPORATE)

6.9.2 รับเงิน (Payment)

ใน detail modal กด บันทึกรับเงิน:

  • กรอก: จำนวนเงิน + วันที่ + วิธีชำระ (cash/transfer/cheque/credit_card) + อ้างอิง (เลขที่เช็ค/slip)
  • ระบบ:
    • สร้าง InvoicePayment record
    • Update Invoice.paidAmount += amount
    • Auto status: PARTIAL_PAID (ถ้า paidAmount < totalAmount) / PAID (ถ้าเต็ม)
    • Decrement Customer.currentDebt
  • รับเงินได้หลายครั้ง — ทุกครั้งบันทึก

💵 รับเงินสดค่าใบแจ้งหนี้ที่เคาน์เตอร์ — อย่าลืมบันทึกเข้าลิ้นชักด้วย ⭐ ใหม่ 23 ส.ค. 2569

เงินที่รับผ่านหน้าใบแจ้งหนี้ ไม่ถูกนับเข้ากะโดยอัตโนมัติ — ตั้งใจให้เป็นแบบนั้น เพราะใบแจ้งหนี้เป็นงานหลังร้าน ลูกค้าส่วนใหญ่โอนเข้าบัญชีทีหลัง ไม่ได้จ่ายที่หน้าเคาน์เตอร์ (มาตรฐานเดียวกับระบบ POS ร้านซ่อมเจ้าอื่น — รายงานปิดยอดนับเฉพาะเงินที่รับ ที่เครื่องขาย)

🔴 แต่ถ้าลูกค้าจ่ายเงินสดที่เคาน์เตอร์แล้วเงินอยู่ในลิ้นชักจริง ต้องบันทึกเป็น "เงินเข้าลิ้นชัก" ด้วย ไม่งั้นตอนปิดกะจะ นับเงินได้เกินโดยไม่มีคำอธิบาย

ระบบช่วยแล้ว — เลือกวิธีชำระเป็น เงินสด ขณะที่คุณเปิดกะอยู่ จะมี:

  • คำเตือนสีส้ม ในหน้าต่างรับเงิน บอกตั้งแต่ก่อนกดบันทึก
  • ปุ่มลัดหลังบันทึก — กดครั้งเดียวบันทึกเข้าลิ้นชักให้เลย พร้อมเหตุผลที่ระบุเลขที่ใบแจ้งหนี้ (ไม่ต้องเดินไปหน้ากะแล้วพิมพ์ยอดเอง) · ถ้าเงินไม่ได้เข้าลิ้นชักจริง กด "ไม่ได้เก็บเข้าลิ้นชัก"

✅ กดซ้ำไม่ได้ ⭐ ใหม่ 24 ส.ค. 2569 — เงินก้อนเดียวบันทึกเข้าลิ้นชักได้ ครั้งเดียวเท่านั้น ถ้ากดซ้ำ (หรือเน็ตสะดุดแล้วกดใหม่) ระบบจะขึ้นว่า "บันทึกไปแล้ว" และไม่เพิ่มยอดให้อีก — ไม่ต้องกลัวว่าเงินในกะจะเกินเพราะกดหลายที

⚠️ ขึ้นเฉพาะ "เงินสด" เท่านั้น — โอน / เช็ค / บัตรเครดิต ไม่ใช่เงินในลิ้นชัก เอาไปบันทึกเป็นเงินเข้าจะทำให้ยอดที่ควรมีในลิ้นชักผิดไปอีกทาง · และขึ้นเฉพาะเมื่อ คุณมีกะเปิดอยู่ที่สาขานั้น — ไม่ได้เปิดกะก็ไม่มีอะไรให้เพี้ยน

📄 ดาวน์โหลดใบแจ้งหนี้เป็น PDF ⭐ ใหม่ 24 ส.ค. 2569

เปิดใบแจ้งหนี้ → ปุ่ม "ดาวน์โหลด PDF" → ได้ไฟล์ที่ส่งต่อทางอีเมล/LINE หรือพิมพ์ได้เลย

สิ่งที่อยู่บนเอกสาร: ชื่อ/ที่อยู่/เลขผู้เสียภาษีของร้าน · ข้อมูลลูกค้า · รายการทั้งหมด · ยอดรวม–ชำระแล้ว–คงเหลือ · เงื่อนไขการชำระเงิน · พร้อมเพย์ของสาขา (ถ้าตั้งไว้) · ช่องเซ็น 2 ช่อง

· ร้านที่ไม่ได้จด VAT จะไม่มีบรรทัดภาษีบนเอกสารเลย (ไม่ใช่แสดง 0%) · ใบที่ยกเลิกแล้ว ยังโหลดได้ และมีแถบบอกชัดว่า "ใช้เรียกเก็บเงินไม่ได้" พร้อมเหตุผล · ฉบับร่าง โหลดได้เช่นกัน และพิมพ์คำว่า "ฉบับร่าง" กำกับ — ส่งให้ลูกค้าดูก่อนออกใบจริงได้

⚠️ เอกสารนี้คือ "ใบแจ้งหนี้" ไม่ใช่ "ใบกำกับภาษี" แม้ร้านจะจด VAT แล้ว เพราะใบกำกับภาษีตามกฎหมายต้องมีข้อความระบุว่าผู้ซื้อเป็น "สำนักงานใหญ่" หรือ "สาขาที่ ..." ซึ่งระบบยังไม่มีช่องให้กรอก — ถ้าต้องออกใบกำกับภาษี ยังต้องออกนอกระบบไปก่อน

🏪 เลือกได้เฉพาะเครื่องของสาขาที่ออกใบ ⭐ ใหม่ 24 ส.ค. 2569

ช่องค้นหามือถือในหน้าออกใบ แสดงเฉพาะเครื่องที่อยู่ใน สาขาที่คุณเลือกอยู่บนหัวจอ (เดิมแสดงเครื่องของทุกสาขาปนกัน)

🔴 ทำไมถึงสำคัญ — ตั้งแต่ 23 ส.ค. 2569 การออกใบแจ้งหนี้ ตัดเครื่องออกจากคลังจริง ถ้าเผลอหยิบเครื่องของอีกสาขามาใส่ใบ มูลค่าสต๊อกของสาขานั้นจะลดลง ทั้งที่เครื่องยังอยู่ที่นั่น และไม่มีอะไรบอกเลยว่าเกิดอะไรขึ้น

ถ้าลูกค้าอยากได้เครื่องที่อยู่อีกสาขา ให้ โอนเครื่องมาที่สาขาที่จะออกใบก่อน (เมนู "โอนสาขา") แล้วค่อยออกใบ · ถ้าใส่ไปแล้ว ระบบจะปฏิเสธพร้อมบอกชื่อเครื่องและทางแก้

💡 ใบที่ บันทึกค้างไว้เป็นร่าง ก่อนวันนี้ ถ้ามีเครื่องข้ามสาขาอยู่ข้างใน จะกดออกใบไม่ผ่าน — แก้ได้โดยเปิดร่างนั้นแล้วเปลี่ยนเป็นเครื่องของสาขาที่ออกใบ

6.9.3 Status & Aging

สถานะคำอธิบาย
DRAFTร่าง (ปัจจุบันไม่ได้ใช้ — ออก invoice = ISSUED ทันที)
ISSUEDออกแล้ว รอจ่าย
PARTIAL_PAIDจ่ายแล้วบางส่วน
PAIDจ่ายเต็มแล้ว
OVERDUEเลยกำหนด (ระบบ flag color แดง — manual update หรือ cron)
CANCELLEDยกเลิก

4 Stat cards บน list: จำนวน / รวมยอด / รับเงินแล้ว / คงค้าง (สีส้มถ้า > 0)

Tabs: ทั้งหมด / รอจ่าย / เกินกำหนด / จ่ายแล้ว

UI hints:

  • ครบกำหนดในอีก ≤ 7 วัน → text สีส้ม "เหลือ X วัน"
  • Overdue → text สีแดง "เกิน X วัน"

💡 Tip: ตั้ง creditLimit ให้ลูกค้า CORPORATE ทุกราย — ป้องกันออก invoice ใหม่ตอน debt เกินวงเงิน → หลีกเลี่ยง bad debt

⚠️ หน้าตั้งค่ามี 2 ปุ่มบันทึก แยกตามขอบเขต (เปลี่ยน 4 ส.ค. 2569)

ปุ่มคุมอะไรขอบเขต
บันทึกข้อมูลสาขาชื่อร้าน · ที่อยู่ · เบอร์ · VAT · โลโก้ · เป้ายอดเฉพาะสาขาที่เลือกอยู่
บันทึกนโยบายร้านบทบาทที่ต้องเปิดกะ · วิธีรับเงินค่าซ่อมทุกสาขาในร้าน

เดิมเป็นปุ่มเดียวคุมทั้ง 2 อย่าง ทำให้ แก้แค่ชื่อร้านแล้วกดบันทึก อาจเผลอเปลี่ยนวิธีรับเงินค่าซ่อม กลับไปเป็น "เก็บที่เคาน์เตอร์" โดยไม่ได้ตั้งใจ แล้วปุ่ม "งานซ่อมรอชำระ" หายจากหน้าขาย ตอนนี้แยกปุ่มแล้ว การบันทึกข้อมูลสาขาจะไม่แตะนโยบายร้านอีก

6.10 เก็บเงินค่าซ่อมที่หน้าขาย (POS) ⭐ NEW

ร้านเลือกได้ว่าจะเก็บเงินค่าซ่อม ที่เคาน์เตอร์ซ่อม (แบบเดิม) หรือ ที่แคชเชียร์ เหมือนร้านอาหารที่ออกบิลแล้วไปจ่ายที่แคชเชียร์

📍 ตั้งค่า: /settings → หัวข้อ "การรับเงินค่าซ่อม" (เฉพาะเจ้าของร้าน · มีผลทุกสาขา)

โหมดใครเก็บเงินเงินเข้ากะไหม
เก็บที่เคาน์เตอร์ซ่อม (ค่าเริ่มต้น)ช่าง/พนักงานกด "ส่งมอบแล้ว" ที่หน้างานซ่อม แล้วเลือกวิธีรับเงิน (เงินสด / โอน / บัตร) — งานที่มียอดมากกว่า ฿0 ถูกบันทึกว่าเก็บเงินแล้วเข้ากะ ถ้าคนที่กดเปิดกะอยู่ (ถ้าไม่ได้เปิดกะ เงินยังถูกบันทึกแต่ไม่ผูกกับกะไหน)
เก็บที่หน้าขาย (POS)แคชเชียร์สแกน QR บนใบรับซ่อมแล้วรับเงินเหมือนขายสินค้าเข้ากะ ปิดยอดตรง

📌 ค่าซ่อมที่รับเป็นเงินสดจะไปโผล่ในสูตรปิดกะบรรทัด "+ ค่าซ่อม" ทั้งสองโหมด (ข้อมูลเดิมในคู่มือเคยเขียนว่าโหมดเคาน์เตอร์ซ่อม "เงินไม่เข้ากะ" ซึ่งตกรุ่นไปแล้ว)

⚠️ ยกเว้นกรณีเดียว — ถ้าคนที่กดรับเงินเป็นช่างซ่อมบทบาทเดียว เขาเปิดกะไม่ได้ตั้งแต่ 19 ส.ค. 2569 เงินจึงถูกบันทึกไว้ครบแต่ ไม่ผูกกับกะไหน · วิธีจัดการอยู่ที่ §5.9

⚠️ เลือกโหมดแล้วต้องกดปุ่ม "บันทึกนโยบายร้าน" ด้วย — ปุ่มนี้อยู่มุมขวาล่างของกล่อง "การรับเงินค่าซ่อม" และเป็นคนละปุ่มกับ "บันทึกข้อมูลร้าน" (ชื่อร้าน/ที่อยู่/VAT/โลโก้) ที่แยกออกจากกันเพราะ 2 อย่างนี้คนละขอบเขต — อันหนึ่งมีผล ทุกสาขา อีกอันมีผล เฉพาะสาขานี้

🔧 ถ้าเลือกโหมด POS แล้วบันทึกแล้ว แต่ปุ่ม "งานซ่อมรอชำระ" ยังไม่ขึ้นที่หน้าขาย (แก้ 4 ส.ค. 2569)

ก่อนหน้านี้ระบบจำค่าโหมดไว้ในเครื่องที่ใช้งาน แล้วไม่ยอมไปอ่านค่าใหม่อีกเลย เครื่องที่เคยเปิดหน้าขายไว้ตอนยังเป็นโหมดเดิม จึงไม่รู้ว่าเจ้าของร้านสลับโหมดไปแล้ว เกิดอาการ "เครื่องหนึ่งเห็นปุ่ม อีกเครื่องไม่เห็น" ทั้งที่เป็นร้านเดียวกัน

ตอนนี้แก้แล้ว — ระบบอ่านค่าจริงใหม่ทุกครั้งที่เข้าสู่ระบบและทุกครั้งที่เปิดหน้าขาย ถ้ายังเจออาการนี้บนเครื่องที่ยังไม่ได้ออกจากระบบตั้งแต่ก่อนอัปเดต ให้ออกจากระบบแล้วเข้าใหม่ 1 ครั้ง

ขั้นตอนเมื่อใช้โหมด POS

  1. ช่างกด "เสร็จแล้ว" ที่หน้างานซ่อม (ไม่ต้องกด "ส่งมอบ" แล้ว)
  2. งานเด้งเข้าคิว "งานซ่อมรอชำระ" ที่หน้าขาย — ปุ่มสีส้มบนหัวหน้า POS พร้อมตัวเลขจำนวนงาน
  3. ลูกค้ามารับเครื่อง → แคชเชียร์สแกน QR บนใบรับซ่อม (หรือกดเลือกจากคิว / พิมพ์เลขติดตาม F340-38A4)
  4. ค่าซ่อมเข้าตะกร้าเป็นบรรทัดสีส้ม — ขายอุปกรณ์เสริมเพิ่มในบิลเดียวกันได้
  5. รับเงิน → ใบเสร็จออกใบเดียวรวมทั้งค่าซ่อมและสินค้า
  6. งานเปลี่ยนเป็น "ชำระแล้ว" อัตโนมัติ

เครื่องยังอยู่ที่ร้านได้หลังจ่ายเงิน — ระบบแยก "จ่ายเงินแล้ว" กับ "รับเครื่องกลับแล้ว" ออกจากกัน

ป้ายเตือนในคิว

ป้ายหมายความว่า
ยังไม่ลงราคาช่างยังไม่ใส่ค่าแรง/ค่าอะไหล่ — เก็บเงินไม่ได้จนกว่าจะลงราคา
ยอด ฿0งานฟรี/เคลมประกัน — เก็บได้แต่ระบบจะถามยืนยัน
ส่งเครื่องไปแล้วเครื่องออกจากร้านแล้วแต่ยังไม่จ่าย — ตรวจสอบก่อน
ออกใบเสร็จแล้วเคยพิมพ์ใบเสร็จซ่อมไปแล้ว อาจเก็บเงินนอกระบบไปแล้ว
คนละสาขางานรับที่สาขาอื่น — ต้องให้ผู้จัดการยืนยันก่อนเก็บ
งานเก่าเสร็จก่อนวันที่เปิดโหมดนี้ (ดูหมายเหตุด้านล่าง)

⚠️ เรื่องที่ต้องรู้ก่อนเปิดโหมด POS

  • งานที่เสร็จก่อนวันเปิดโหมดจะไม่ขึ้นในคิวอัตโนมัติ — เพราะระบบเพิ่งเริ่มแยกสถานะการรับเงินเมื่อ ส.ค. 2569 งานก่อนหน้านั้นถูกบันทึกว่า "ยังไม่จ่าย" ทั้งหมดทั้งที่ลูกค้าจ่ายไปแล้ว ถ้าปล่อยขึ้นคิวจะเก็บเงินซ้ำ ผู้จัดการเปิดดูได้จากปุ่ม "แสดงงานเก่าด้วย" ในคิว
  • ยังไม่รองรับการรับมัดจำ / ชำระบางส่วน — ถ้าร้านมีเคสนี้บ่อย ให้ใช้โหมดเก็บที่เคาน์เตอร์ไปก่อน
  • แคชเชียร์ต้องเปิดกะก่อนรับเงินค่าซ่อม (ตามนโยบายกะที่ตั้งไว้)
  • ใบรับซ่อมที่พิมพ์ไปก่อนหน้านี้ ใช้สแกนได้เลย ไม่ต้องพิมพ์ใหม่

ถ้าเก็บเงินผิด

สถานการณ์ทำอย่างไร
เก็บเงินผิดบิลยกเลิกบิลที่ /sales-history → งานกลับเข้าคิวอัตโนมัติ
คืนเงินค่าซ่อมให้ลูกค้าคืนเงินที่บิล → งานกลับเข้าคิวรอชำระให้อัตโนมัติ สแกนเก็บเงินใหม่ได้ทันที
อยากแก้ราคางานที่ออกบิลแล้วต้องยกเลิกบิลก่อน ระบบล็อกไว้ไม่ให้แก้ (ไม่งั้นเอกสารกับตัวเลขไม่ตรงกัน)

ℹ️ การคืนเงินคืนงานเข้าคิวให้เองแล้ว (แก้ 4 ส.ค. 2569) เดิมคืนเงินไปแล้วงานยังผูกอยู่กับบิลเดิมและยังขึ้นว่า "จ่ายแล้ว" ปุ่ม "คืนงานเข้าคิว" ของผู้จัดการก็กดไม่ผ่าน (ระบบมองว่าบิลยังรับเงินอยู่) และบิลที่คืนเงินเต็มใบก็ยกเลิกไม่ได้แล้ว — งานติดค้างกับบิลนั้นถาวร ตอนนี้พอคืนเงินบรรทัดค่าซ่อม งานจะถูกปลดออกจากบิลและกลับเป็น "ยังไม่จ่าย" ให้เอง ถ้าบิลมีทั้งค่าซ่อมและสินค้า แล้วคืนเฉพาะสินค้า ค่าซ่อมจะยังผูกกับบิลอยู่ตามเดิม (เงินส่วนนั้นยังอยู่ที่ร้าน)

6.11 ยอดรับเงินวันนี้ (ปิดยอดรวมงานขาย + งานซ่อม) ⭐ NEW

📍 หน้า: /daily-takings — เมนู ขาย & ลูกค้า → ยอดรับเงินวันนี้ 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER

ปัญหาที่หน้านี้แก้: เก๊ะเงินมีใบเดียว แต่เงินมาจาก 2 ทาง (ขายสินค้า + ค่าซ่อม) เดิมต้องเปิดสองหน้ามาบวกกันเอง ตอนปิดร้านเลยเทียบกับเงินสดในลิ้นชักยาก หน้านี้รวมทุกอย่างเป็น ลิสต์รายการเดียว เรียงตามเวลาที่รับเงินจริง

หน้าตา

ส่วนแสดงอะไร
การ์ดบน 4 ใบขายสินค้า · งานซ่อม (เก็บเงินแล้ว) · คืนเงิน · รวมสุทธิ
ตัวเลือกวันที่เลือกย้อนหลังได้ (ปฏิทิน พ.ศ.) — default = วันนี้
ลิสต์รายการทีละบรรทัด: เวลา · ประเภท (ขาย/ซ่อม/คืนเงิน) · เลขที่อ้างอิง · ลูกค้า · พนักงาน · จำนวนเงิน
ปุ่มรีเฟรชดึงข้อมูลใหม่โดยไม่ต้องโหลดหน้าซ้ำ

กฎการนับเงินที่ต้องเข้าใจ (ไม่งั้นจะงงว่าทำไมตัวเลขไม่ตรงกับที่คิดไว้)

  • นับ "วันที่รับเงินจริง" เท่านั้น ไม่ใช่วันที่เปิดบิลหรือวันที่ซ่อมเสร็จ
  • งานซ่อมที่ยังไม่เก็บเงินจะไม่ขึ้น ไม่ว่าจะซ่อมเสร็จแล้วหรือยัง — งานค้าง / รออะไหล่ / ยกเลิก ไม่ถูกนับเป็นยอด
  • ค่าซ่อมที่เก็บผ่านหน้าขาย (§6.10) จะขึ้นเป็น บรรทัดของบิลขาย ไม่ใช่บรรทัดงานซ่อม — ป้องกันการนับซ้ำ
  • คืนเงินขึ้นเป็นยอด ติดลบ และถูกหักออกจากรวมสุทธิแล้ว
  • เลือก "ทุกสาขา" ได้ หรือกรองเฉพาะสาขาที่ยืนอยู่

แยกตามวิธีรับเงิน — ตัวเลขที่เอาไปนับกับลิ้นชักได้จริง

หน้านี้แยกให้ว่าเงินก้อนไหนเข้าทางไหน เพราะ "รวมสุทธิ" กับ "เงินสดในลิ้นชัก" ไม่ใช่เลขเดียวกัน

ช่องหมายความว่า
เงินสดเข้าลิ้นชักจริง — เอาไปเทียบกับเงินที่นับได้ตอนปิดร้าน
เงินโอน / บัตรเข้าบัญชีร้าน ไม่ได้อยู่ในลิ้นชัก
เครดิตร้านคืนเป็นเครดิตให้ลูกค้าใช้ครั้งหน้า ไม่ได้ควักเงินออกจากลิ้นชัก
ไม่ระบุวิธีค่าซ่อมที่เก็บก่อน ส.ค. 2569 ซึ่งระบบยังไม่เคยเก็บว่ารับทางไหน

⚠️ ถ้าเห็นยอด "ไม่ระบุวิธี" ให้ตรวจกับสมุดของร้านเอง — ระบบไม่เดาว่าเป็นเงินสด เพราะถ้าเดาผิดจะทำให้ปิดยอดไม่ตรงโดยไม่รู้ตัว งานที่เก็บเงินหลัง ส.ค. 2569 จะมีวิธีรับเงินครบทุกก้อน (ดู §5.9)

2 ยอดเงินสดที่หน้านี้แสดง — คนละความหมาย ห้ามสับสน ⭐ ใหม่ 19 ส.ค. 2569

ยอดคิดจากเอาไปทำอะไร
เงินสดที่ควรมีในลิ้นชักเงินทอนเริ่มต้น + เงินสดที่ขายได้ − คืนเงินสด + เติมเข้าลิ้นชัก − หยิบออกจากลิ้นชักนับเทียบกับเงินในเก๊ะจริง ตอนปิดร้าน
เงินสดที่ขายได้เฉพาะเงินสดที่รับเข้ามาในวันนั้น (ไม่มีเงินทอนเริ่มต้น)ดูว่าวันนี้ขายเป็นเงินสดได้เท่าไหร่

⚠️ เดิมหน้านี้แสดงยอดเดียว โดยใช้ป้ายว่า "เงินสดที่ควรมีในลิ้นชัก" แต่คำนวณแบบยอดที่สอง ⇒ ต่ำกว่าเงินจริงในเก๊ะเท่ายอดเงินทอนเริ่มต้นทุกวัน (ร้านแจ้งเข้ามาเอง) แก้แล้ว 19 ส.ค. 2569

💡 ยอด "เงินสดที่ควรมีในลิ้นชัก" คิดจาก กะล่าสุดของแต่ละสาขา และใช้สูตรเดียวกับหน้ากะ (/shift) ⇒ 2 หน้าจะไม่มีทางบอกเลขต่างกัน · ใต้ตัวเลขมีบรรทัดเล็กบอกที่มาให้ครบทุกก้อน เอาไว้ไล่หาส่วนต่างตอนนับเงินไม่ตรง

ร้านที่มี หลายกะในวันเดียว ระบบจะไม่บวกเงินทอนของทุกกะรวมกัน เพราะปิดกะแล้วร้านหยิบยอดขายออกแต่เหลือเงินทอนไว้ในเก๊ะ กะถัดไปจึงคีย์เงินทอนก้อนเดิมซ้ำ — บวกรวมกันจะได้เลขสูงเกินจริง

⚠️ วันที่ยังไม่มีการเปิดกะ ระบบจะไม่แสดงยอดนี้ แต่ขึ้นข้อความบอกว่ายังบอกไม่ได้ เพราะไม่รู้เงินทอนเริ่มต้น — ห้ามอ่านว่าเงินเป็นศูนย์

💡 ใช้คู่กับ "กะการขาย" — ถ้าปิดกะแล้วเงินไม่ตรง ให้เปิดหน้านี้ไล่ดูทีละรายการ

ต้นทุนและกำไรขั้นต้นของวันนั้น ⭐ ใหม่ 26 ส.ค. 2569

ร้านแจ้งเข้ามาว่า "เวลาสรุปยอดการขาย ไม่มีต้นทุนโชว์เลย" — ตอนนี้หน้านี้มีบล็อก "ต้นทุน & กำไรขั้นต้น" เพิ่มขึ้นมา

ยอดหมายความว่า
ฐานรายได้ (ตามราคาขาย)ราคาขายเต็ม + ค่าซ่อม − คืนเงิน · ไม่ใช่ "รวมเงินรับทั้งวัน" ถ้ามีเครื่องเทรดอิน
ต้นทุนมือถือ / อุปกรณ์เสริม / อะไหล่แยกเป็น 3 ก้อน จะได้รู้ว่ากำไรหายไปทางไหน
กำไรขั้นต้นฐานรายได้ − รวมต้นทุน · มี อัตรากำไร (%) กำกับ

🔴 ต้นทุนคิดจากฐานเดียวกับยอดรับเงิน คือ "วันที่รับเงินจริง" ไม่ใช่วันที่ปิดงาน ⇒ งานซ่อมที่ปิดเมื่อวานแต่มาเก็บเงินวันนี้ ต้นทุนจะมาอยู่วันนี้ให้ตรงกับเงินที่รับ ถ้าคิดคนละฐาน จะได้วันที่ "รายได้มี ต้นทุน 0" สลับกับวันที่ "ต้นทุนมี รายได้ 0" ทั้งที่ไม่มีอะไรผิด

กดที่บิลเพื่อดูต้นทุนและกำไรรายชิ้น ⭐ ใหม่ 26 ส.ค. 2569 · 🔒 แพ็คเกจ Professional ขึ้นไป

ร้านถามต่อว่า "แยกเป็นรายการได้มั้ยครับ ให้รู้ว่าแต่ละชิ้นที่ขายไป ต้นทุนเท่าไหร่" — กดลูกศรหน้าแถวบิลได้เลย

  • แต่ละชิ้นแสดง ราคาขาย · ต้นทุน · กำไร ของตัวเอง
  • งานซ่อมแยกอะไหล่ออกจากค่าแรงคนละบรรทัด (อะไหล่มีต้นทุน · ค่าแรงไม่มีต้นทุนสินค้า)
  • ปุ่ม "กางทั้งหมด" เปิดดูทุกบิลพร้อมกัน · บนมือถือเป็นปุ่ม "ดูต้นทุนรายชิ้น" ในการ์ดแต่ละใบ
  • ปุ่ม Excel ดาวน์โหลดเป็นไฟล์รายชิ้นไปทำบัญชีต่อได้

🔒 ส่วน "รายชิ้น" นี้อยู่ในแพ็คเกจ Professional ขึ้นไป (ตั้งแต่ 27 ส.ค. 2569) ร้านแพ็คเกจ Starter จะเห็นปุ่มกางและปุ่ม Excel เป็นสีเทาพร้อมป้าย (PRO+) — ปุ่มยังอยู่ที่เดิม ไม่ได้ถูกซ่อน 🔴 ตัวเลขปิดร้านและ "ต้นทุนรวม / กำไรขั้นต้น" ของทั้งวัน ไม่ถูกจำกัด — ทุกแพ็คเกจเห็นเหมือนเดิมทุกช่อง ที่จำกัดคือการแยกดูเป็นรายชิ้นกับการโหลด Excel รายชิ้นเท่านั้น 💡 ช่วงทดลองใช้ (TRIAL) เปิดให้ครบทุกฟีเจอร์ ⇒ ร้านที่กำลังทดลองอยู่จะเห็นรายชิ้นได้ตามปกติ แล้วจึงเจอป้าย (PRO+) หลังหมดทดลอง ถ้าเลือกแพ็คเกจ Starter

⚠️ "ต้นทุน ฿0.00" กับ "ไม่ทราบต้นทุน" คนละเรื่อง — หน้าจอแยกให้แล้ว ฿0.00 = ร้านยังไม่ได้กรอกต้นทุนของชิ้นนั้น (แก้ได้ที่หน้าคลังสินค้า) ไม่ทราบ = ระบบไม่มีต้นทุนให้เลย เช่นรายการที่พนักงานพิมพ์ชื่อเองตอนขาย ไม่ได้เลือกจากคลัง ⇒ ชิ้นที่ "ไม่ทราบ" จะถูกนับเป็นกำไรเต็มจำนวน ⇒ กำไรจริงจะต่ำกว่าที่แสดง ระบบขึ้นแถบเตือนบอกไว้ทุกครั้ง 💡 อยากให้ตัวเลขแม่น: ให้พนักงาน เลือกสินค้าจากคลังแทนการพิมพ์ชื่อเอง

⚠️ บิลที่รับเครื่องเก่าแลก (เทรดอิน) ผลรวมรายชิ้นจะไม่เท่ายอดบิล — เพราะยอดบิลคือ เงินที่รับจริง ส่วนรายชิ้นคือ ราคาขาย · ส่วนต่างคือมูลค่าเครื่องที่รับแลก ซึ่งกลายเป็นเครื่องในสต็อก ไม่ได้หายไปไหน · หน้าจอขึ้นบรรทัดอธิบายให้แล้ว

⚠️ ต้นทุนอุปกรณ์เสริมเป็นราคา ณ ปัจจุบัน ไม่ใช่ ณ วันที่ขาย — ระบบไม่ได้เก็บต้นทุนไว้ในบิล และการรับของเข้าจะทับต้นทุนทั้งกอง (ยังไม่ถัวเฉลี่ย) ⇒ ถ้าเพิ่งรับของราคาใหม่เข้ามา ต้นทุนของบิลเก่าจะขยับตาม · หน้าจอมีหมายเหตุกำกับทุกแถว

⚠️ อะไหล่ที่ไม่มีต้นทุนจากคลัง ระบบใช้ราคาที่คิดลูกค้าแทน (ค่าประมาณ) ⇒ กำไรของแถวนั้นจะเป็น ฿0 ทั้งที่จริงอาจมีกำไร · เกิดกับอะไหล่ที่ช่างพิมพ์ชื่อเองไม่ได้ผูกคลัง

💡 ของแถมมีต้นทุน — แถวของแถมจะขึ้น ขาย ฿0 · ทุน (ตามจริง) · กำไรติดลบ ซึ่งถูกต้อง ไม่ใช่ข้อผิดพลาด เพราะของแถมคือต้นทุนที่ร้านจ่ายไปจริง

💡 บรรทัด "ผลรวมต้นทุนของรายการที่กางดูได้ … ต่างจากรวมต้นทุนด้านบน" จะขึ้นเมื่อ 2 ยอดไม่เท่ากัน พร้อมบอกเหตุผลทุกก้อน — เหตุผลที่พบบ่อยคือ ของที่คืนเงินแล้วกลับเข้าคลัง ซึ่งยอดรวมหักต้นทุนคืนให้ แต่รายชิ้นไม่หัก เพราะใบคืนเงินผูกกับ ใบคืน ไม่ใช่ บิลขาย

💡 บิลที่ไม่มีลูกศรกาง = บิลที่ไม่มีรายการย่อยในระบบ ไม่ใช่ข้อมูลขาด

6.12 สินค้าที่ไม่นับสต๊อก + เคาะราคาหน้าขาย ⭐ NEW

ปัญหาที่แก้: ร้านมีของที่ขายประจำแต่ไม่อยากตามนับจำนวน (ฟิล์ม สายชาร์จเบ็ดเตล็ด ค่าบริการย่อย) เดิมถ้าไม่ลงจำนวนไว้ ของจะหายจากหน้าขายทันทีที่เหลือ 0 พนักงานจึงต้องไปเบียดยอดใส่บรรทัดอื่นแทน ทำให้ทั้งสต็อกและรายงานเพี้ยน

ตั้งค่า: ปิดการนับสต๊อกรายสินค้า

📍 /accessories → เพิ่ม/แก้ไขสินค้า → สวิตช์ "นับสต๊อกสินค้านี้"

สวิตช์ระบบทำอะไร
เปิด (ค่าเริ่มต้น)ตัดจำนวนทุกครั้งที่ขาย · เตือนเมื่อของใกล้หมด · ขายเกินจำนวนที่มีไม่ได้
ปิดไม่ตัดจำนวน · ไม่เตือนของหมด · ขายได้เรื่อย ๆ ไม่จำกัด · อยู่บนหน้าขายตลอด

เมื่อปิดสวิตช์ ช่อง "จำนวนเริ่มต้น" กับ "แจ้งเตือนเมื่อต่ำกว่า" จะถูกซ่อน เพราะไม่มีความหมายแล้ว

ℹ️ ไม่โผล่ในลิสต์ "ใกล้หมด" แล้ว (แก้ 4 ส.ค. 2569) ตอนแรกของที่ปิดการนับสต๊อกยังไปขึ้นในตัวกรอง "สินค้าใกล้หมด" และในตัวเลขบนป้ายเตือนทุกตัว เพราะจำนวนเป็น 0 ซึ่งต่ำกว่าเกณฑ์เตือนเสมอ ทำให้รายการของจริงที่ใกล้หมดถูกกลบจนสั่งของผิด ตอนนี้กรองออกให้แล้วทั้งลิสต์และตัวเลขบนป้าย ส่วนของที่ยังนับสต๊อกเตือนเหมือนเดิมทุกประการ ในรายการสินค้าจะขึ้นป้าย "ไม่นับสต๊อก" สีครามแทนตัวเลขคงเหลือ

✅ ของเดิมไม่กระทบสักชิ้น — สินค้าที่มีอยู่แล้วทั้งหมดถือว่า "นับสต๊อก" เหมือนเดิมทุกประการ ✅ สลับกลับได้ตลอด — วันหลังอยากเริ่มนับจำนวนก็เปิดสวิตช์ ระบบบังคับเพดานให้ทันที

เคาะราคาที่จะคิดกับลูกค้า

แตะการ์ดสินค้า ที่หน้าขาย → เด้งคีย์แพดตัวเลขใหญ่ขึ้นมา (ตั้งต้นเป็นราคาในระบบ)

  1. กดราคาที่จะคิดจริง — มีปุ่มลัด +50 +100 +500 และปุ่มลบทีละตัว
  2. ปรับจำนวนด้วยปุ่ม − / +
  3. กด "เพิ่มลงตะกร้า" → ลงตะกร้าตามราคาที่กด
ทางเข้าเด้งคีย์แพดไหม
แตะการ์ดสินค้า✅ เด้ง — สำหรับตอนต่อราคากับลูกค้า
พิมพ์ค้นหาแล้วกด Enter❌ ไม่เด้ง — เพิ่มทันทีตามราคาตั้ง
ยิงบาร์โค้ด❌ ไม่เด้ง — ยิงรัวต้องไม่สะดุด

ระบบเตือนอะไรบ้าง

กรณีสิ่งที่เห็น
กดต่ำกว่าราคาตั้งกล่องส้ม — บอกว่าลดไปเท่าไรต่อชิ้น และเหลือกำไรเท่าไร
กดต่ำกว่าทุนกล่องแดง — บอกว่าขาดทุนกี่บาทต่อชิ้น
ราคาติดลบไม่ให้ผ่าน
กดจำนวนเกินสต็อก (เฉพาะของที่นับสต๊อก)ไม่ให้ผ่าน พร้อมบอกจำนวนที่มีจริง

⚠️ เป็นการเตือน ไม่ใช่การบล็อก — พนักงานยังกดขายต่ำกว่าทุนได้ เพราะการต่อราคาเป็นเรื่องปกติของร้านมือถือ และการบล็อกกลางคันจะทำให้ปิดการขายไม่ได้ต่อหน้าลูกค้า ถ้าร้านอยากล็อกให้แข็งกว่านี้ (เช่น ต่ำกว่าทุนต้องให้ผู้จัดการอนุมัติ) แจ้งทีมงานเพิ่มให้ได้

เคล็ดลับ: ของที่ขายครั้งเดียว

ถ้าเจอของที่ขายนาน ๆ ครั้งจนไม่อยากตั้งเป็นสินค้าถาวร ให้สร้างสินค้ากลาง ๆ ไว้ตัวเดียว เช่นชื่อ "ของเบ็ดเตล็ด" แบบไม่นับสต๊อก แล้วเคาะราคาเอาตอนขายทุกครั้ง — ครอบเคสนี้ได้โดยไม่ต้องมี 2 ระบบให้พนักงานจำ

💡 ของที่ขายบ่อยควรตั้งเป็นสินค้าจริงแล้วเปิดนับสต๊อก จะได้รู้ว่าเหลือกี่ชิ้น รู้กำไรต่อชิ้น และรู้ว่าต้องสั่งเพิ่มเมื่อไร

6.13 จ่ายหลายช่องทางในบิลเดียว + โครงการรัฐร่วมจ่าย ⭐ NEW

ปัญหาที่แก้: เดิม 1 บิลบันทึกวิธีชำระได้แค่วิธีเดียว พอลูกค้าใช้สิทธิ์โครงการรัฐ (เช่น ไทยช่วยไทยพลัส 60/40) ซึ่งรัฐช่วยจ่ายได้สูงสุด 200 บาท/คน/วัน บิลมือถือ 13,900 บาทจึงรับผ่านเป๋าตังได้แค่ ฿333 ที่เหลือลูกค้าจ่ายเงินสด — บิลเดียว 2 ช่องทาง ซึ่งระบบเดิมเก็บไม่ได้

⚠️ ห้ามใช้ "ส่วนลด" แทนส่วนที่รัฐช่วยจ่าย

รัฐโอนเงินส่วนของรัฐ เข้าบัญชีร้านครบ ร้านได้เงินเต็มราคา ถ้าบันทึกเป็นส่วนลด:

บันทึกเป็นส่วนลด (ผิด)บันทึกเป็นช่องทาง (ถูก)
ยอดขายในระบบ฿13,567 ❌฿13,900 ✓
เงินที่ร้านได้จริง฿13,900฿13,900
VAT ขายต่ำกว่าจริง — ยื่น ภ.พ.30 ขาดถูกต้อง

วิธีใช้ที่หน้าขาย

  1. หยิบสินค้าลงตะกร้าตามปกติ
  2. กดปุ่ม "แยกจ่ายหลายช่องทาง" ในแถบสรุปด้านขวา
  3. แถวแรกจะตั้งยอดเต็มไว้ให้ — แก้ยอดแถวนี้ แล้วกด "+ เพิ่มช่องทาง" เพื่อเพิ่มแถวถัดไป
  4. แถวที่เป็น โครงการรัฐ (เป๋าตัง) จะมีช่องเพิ่มให้กรอก
    • ส่วนที่รัฐช่วยจ่าย — ดูตัวเลขจากแอปถุงเงิน (ไม่บังคับ)
    • เลขอ้างอิง — เลขรายการในถุงเงิน ใช้ตอนกระทบยอดกับบัญชี (ไม่บังคับ)
  5. ดูแถบสรุป — ต้องขึ้น "ครบแล้ว" ปุ่มยืนยันการขายจึงกดได้
    • ยังไม่ครบจะขึ้น "ยังขาดอีก ฿X" · เกินจะขึ้น "เกินไป ฿X"
    • ปุ่ม "เติมยอดที่เหลือ" ช่วยเติมส่วนที่ขาดให้แถวนั้นอัตโนมัติ
  6. กดยืนยันการขาย — ใบเสร็จจะพิมพ์แยกบรรทัดให้เห็นทุกช่องทาง

💡 ใส่ได้สูงสุด 6 ช่องทาง ต่อบิล · บิลที่จ่ายทางเดียวไม่ต้องเข้าโหมดนี้ ใช้ปุ่ม 4 ปุ่มเดิมได้เหมือนเดิมทุกอย่าง

เงินเข้าบัญชีเมื่อไหร่ (สำคัญตอนปิดยอด)

เงินที่รับผ่านแอปโครงการรัฐ ไม่ได้อยู่ในลิ้นชัก — เข้าบัญชี กรุงไทยของร้านวันถัดไป แยก 2 ก้อน

ก้อนเข้าเมื่อไหร่
ส่วนที่ลูกค้าจ่าย02:00 น. ของวันถัดไป
ส่วนที่รัฐช่วยจ่าย17:30 น. ของวันถัดไป

ระบบจึงแยกยอดนี้ออกจาก "เงินโอน" ทุกที่ ไม่ยุบรวมกัน เพื่อให้กระทบยอดกับสมุดบัญชีได้

เห็นยอดนี้ได้ที่ไหนบ้าง

หน้าแสดงอะไร
ปิดกะ (/shift)บรรทัด "โครงการรัฐ (เป๋าตัง)" ในกลุ่ม ยอดอื่น (ไม่นับในลิ้นชัก)
ยอดรับเงินวันนี้ (/daily-takings)การ์ดแยกช่องทาง — ไม่รวมในช่อง "เงินที่ควรมีในลิ้นชัก"
ประวัติการขายกรองด้วยวิธีชำระ "โครงการรัฐ" ได้ — เจอบิลแม้ช่องทางนี้จะเป็นก้อนเล็กของบิล
ใบเสร็จบรรทัดแยกทุกช่องทาง + วงเล็บบอก (รัฐช่วย ฿200 · ลูกค้า ฿133)

⚠️ เงินโครงการรัฐไม่ถูกนับใน "เงินที่ควรมีในลิ้นชัก" โดยตั้งใจ — ถ้านับเข้าไปจะปิดกะแล้วเงินขาดทุกกะ

คืนเงินบิลที่รับผ่านโครงการรัฐ

ตอนคืนเงินจะมีตัวเลือกวิธีคืน "ยกเลิกรายการในถุงเงิน" เพิ่มมา — เลือกอันนี้เมื่อยกเลิกรายการในแอป (เงินไม่ได้ออกจากลิ้นชัก) อย่าเลือกเงินสด ถ้าไม่ได้ควักเงินสดจริง ไม่งั้นปิดกะจะเงินเกิน

ข้อจำกัดที่ต้องรู้

  • โหมดแยกจ่าย ไม่มี QR PromptPay ให้สแกน (QR ผูกกับยอดเดียวทั้งบิล) — ถ้าลูกค้าจะโอน ให้โอนแล้วบันทึกเป็นช่องทาง "โอนเงิน" พร้อมเลขอ้างอิง
  • โหมดแยกจ่าย ไม่มีการทอนเงิน — ผลรวมทุกช่องทางต้องเท่ายอดที่ต้องชำระพอดี
  • พักบิลขณะแยกจ่ายจะไม่เก็บแถวการรับเงินไว้ ต้องคีย์ใหม่ตอนเปิดบิลกลับมา
  • ร้านต้องสมัครเข้าร่วมโครงการในแอป ถุงเงิน เอง ระบบไม่ได้เชื่อมกับเป๋าตัง/ถุงเงินโดยตรง

7. ประกันสินค้า

📍 หน้า: /warranty 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: บันทึกและติดตามประกันสินค้าที่ขายออกไป (มือถือและอุปกรณ์เสริม)

ขั้นตอนเพิ่มประกัน:

  1. กดปุ่ม "+ เพิ่มประกัน"
  2. เลือกลูกค้า
  3. เลือกประเภท: มือถือ หรือ อุปกรณ์เสริม
  4. เลือกสินค้าที่ต้องการออกประกัน
  5. เลือกระยะเวลาประกัน (เลือกจาก Master Warranty Periods)
  6. วันเริ่มต้น — วันหมดอายุ (คำนวณอัตโนมัติ)
  7. กรอกหมายเหตุเงื่อนไขประกัน
  8. กดปุ่ม "บันทึก"

สถานะประกัน:

สถานะสีความหมาย
ACTIVEเขียวยังอยู่ในระยะประกัน
EXPIREDแดงหมดอายุแล้ว
CLAIMEDส้มมีการเคลมแล้ว
VOIDเทายกเลิกประกัน

Expiring Warranties Widget:

  • แสดงอยู่ใน Dashboard
  • แจ้งเตือนประกันที่จะหมดอายุใน 30 วัน
  • คลิกเพื่อดูรายละเอียดและติดต่อลูกค้า

8. ลูกค้า

📍 หน้า: /customers 👤 สิทธิ์: OWNER, ADMIN, MANAGER, CASHIER, SALES, SALESTECH

วัตถุประสงค์: จัดการฐานข้อมูลลูกค้า ค้นหา เพิ่ม แก้ไข และดูประวัติ

ขั้นตอนเพิ่มลูกค้าใหม่:

  1. กดปุ่ม "+ เพิ่มลูกค้า"
  2. กรอกข้อมูล:
ฟิลด์คำอธิบายจำเป็น
ชื่อชื่อ-นามสกุล✅
เบอร์โทรหมายเลขโทรศัพท์✅
อีเมลอีเมลลูกค้า❌
ที่อยู่ที่อยู่สำหรับส่งของ❌
LINE IDสำหรับติดต่อ❌
วันเกิดสำหรับโปรโมชั่นวันเกิด❌
หมายเหตุข้อมูลเพิ่มเติม❌
  1. กดปุ่ม "บันทึก"

⭐⭐ ระบบเตือนเมื่อเบอร์โทรซ้ำกับลูกค้าเดิม (4 ก.ย. 2569)

เดิมถ้าจำลูกค้าไม่ได้แล้วกดเพิ่มใหม่ ระบบจะสร้างซ้ำเงียบ ๆ ⇒ ยอดซื้อสะสมแตกเป็น 2 ก้อน ประวัติแยกกัน (เกิดขึ้นจริง: เบอร์เดียวกันมีทั้ง คุณโล ยอด ฿800 และ คุณโร ยอด ฿1,000 — คนเดียวกัน พิมพ์ชื่อพลาด)

ตอนนี้เมื่อกดบันทึกแล้วเบอร์ตรงกับลูกค้าที่มีอยู่ จะมีหน้าต่างขึ้นเตือนพร้อมรายชื่อคนที่ซ้ำ ให้เลือก 2 ทาง:

ปุ่มใช้เมื่อ
ใช้ลูกค้าคนนี้เป็นคนเดิม — ระบบผูกงาน/บิลเข้ากับลูกค้าเดิมให้ ยอดสะสมไม่แตก
สร้างเป็นลูกค้าใหม่คนละคนจริง ๆ (เช่น พ่อแม่ลูกใช้เบอร์เดียวกัน · ใช้เบอร์ร้านให้ลูกค้าที่ไม่มีมือถือ)

· เป็นการเตือน ไม่ใช่การห้าม — ยืนยันแล้วสร้างได้เสมอ · ระบบเทียบเบอร์แบบตัดขีดและเว้นวรรคออก ⇒ 081-234-5678 กับ 0812345678 ถือว่าเบอร์เดียวกัน · เตือนเฉพาะภายในร้านเดียวกัน และไม่นับ "ลูกค้าทั่วไป" ที่ระบบสร้างให้ · ใช้ได้ทุกหน้าที่เพิ่มลูกค้าได้ (รายชื่อลูกค้า · รับเครื่องซ่อม · งานซ่อม · ขายหน้าร้าน · รับซื้อ · ใบแจ้งหนี้) · การแก้ไขลูกค้าเดิมแล้วเปลี่ยนเบอร์ไปชนคนอื่น ก็เตือนเหมือนกัน — แต่ถ้าไม่ได้แก้เบอร์จะไม่เตือน (ลูกค้าคู่ที่ซ้ำอยู่แล้วจึงยังแก้ชื่อได้ตามปกติ)

⭐ รายชื่อลูกค้าแสดง "ทั้งร้าน" ไม่แยกตามสาขา (21 ส.ค. 2569)

หน้านี้แสดงลูกค้า ทุกคนของร้าน ไม่ว่าจะถูกบันทึกไว้ที่สาขาไหน และไม่เปลี่ยนตามสาขา ที่เลือกอยู่บนหัวจอ — เพราะลูกค้าคนหนึ่งมีสิทธิ์ไปใช้บริการสาขาไหนก็ได้

เดิมหน้านี้กรองตามสาขา ทำให้ลูกค้าที่ถูกบันทึกไว้ที่สาขาอื่นหายไปจากรายการ ทั้งที่เขามาใช้บริการที่สาขานี้ประจำ (ร้านหนึ่งเห็น 214 คน จากที่มีจริง 328 คน) และถ้าเลือก "ทุกสาขา" หน้าจะว่างเปล่า — แก้ทั้งสองอย่างแล้ว

การเลือกสาขาบนหัวจอยังมีผลกับหน้าอื่นตามเดิม และลูกค้าที่เพิ่มใหม่ยังถูกบันทึกว่า อยู่สาขาไหนเหมือนเดิม เปลี่ยนเฉพาะ "รายการที่แสดง" เท่านั้น

ฟีเจอร์ค้นหาลูกค้า:

  • ค้นหาด้วยชื่อ, เบอร์โทร, อีเมล
  • Debounce Search (รอ input หยุดก่อนค้นหา)
  • ค้นหาจากตัวอักษรแรก

ประวัติลูกค้า:

  • คลิกที่ลูกค้าเพื่อดูประวัติ
  • ประวัติการซื้อ (Sales)
  • ประวัติการซ่อม (Repairs)
  • ประกันที่ยังใช้งาน
  • ยอดซื้อสะสม — รวมทั้งการขายและงานซ่อม ทุกสาขา ทุกช่วงเวลา และ หักยอดที่คืนเงินไปแล้วออกให้ (ตั้งแต่ 21 ส.ค. 2569 — เดิมนับยอดเต็ม ทั้งที่คืนเงินไปแล้ว ทำให้ยอดของลูกค้าที่เคยคืนสินค้าสูงเกินจริง)

9. ลงเวลาทำงาน

9.1 หน้าลงเวลา

📍 หน้า: /attendance 👤 สิทธิ์: OWNER, ADMIN, MANAGER

วัตถุประสงค์: ดูรายการการลงเวลาของพนักงาน กรอง ค้นหา และแก้ไข

ฟีเจอร์:

  • ดูรายการการลงเวลาทั้งหมดตาม Branch
  • กรองตามวันที่, พนักงาน
  • ดูเวลาเข้า-ออกงาน
  • ตรวจสอบ Late (สาย) และ Early Leave (ออกก่อนเวลา)
  • แก้ไขการลงเวลาด้วยตนเอง (เมื่อระบบผิดพลาด) — เจ้าของ/แอดมินเท่านั้น ดู §9.1B
  • ตั้งเวลาเข้า-ออกงานมาตรฐานของร้านหรือของสาขา ดู §9.1A
  • Export รายงานการลงเวลา

⚠️ แก้แล้ว 4 ส.ค. 2569 — วันที่ในตารางเคยถอยไป 1 วัน เดิมพนักงานลงเวลาเข้างานตอนเช้า แต่คอลัมน์ "วันที่" แสดงเป็นเมื่อวาน ทุกแถวทุกคน (ส่วนคอลัมน์ "เวลาเข้างาน" ถูกต้องมาตลอด) เกิดจากระบบเก็บวันที่ผิดตั้งแต่ตอนบันทึก ไม่ใช่แค่แสดงผลผิด จึงกระทบทั้งตัวกรองวันที่ · รายงานรายเดือน · ใบสรุปการมาทำงานที่พิมพ์ให้เซ็น

ข้อมูลเก่าถูกซ่อมย้อนหลังให้แล้ว โดยยึด "เวลาเข้างาน" ที่บันทึกไว้ถูกต้องเป็นหลัก ถ้าเห็นวันที่ไหนยังดูไม่ถูก ให้แจ้งทีมงานพร้อมชื่อพนักงานและช่วงวัน

การลงเวลาผ่านระบบ (Admin):

  1. กดปุ่ม "เปิดสแกน QR" เพื่อสแกน QR Code พนักงาน
  2. เลือก ลงเวลาเข้า หรือ ลงเวลาออก
  3. ระบบบันทึกเวลาอัตโนมัติพร้อม Timestamp

ฟิลด์การลงเวลา:

ฟิลด์คำอธิบาย
พนักงานชื่อ-นามสกุล
เวลาเข้างานCheck-in Time
เวลาออกงานCheck-out Time
ชั่วโมงทำงานคำนวณอัตโนมัติ
สายisLate flag
ออกก่อนเวลาisEarlyLeave flag พร้อม leaveReason
หมายเหตุRemark

9.1A ตั้งเวลาเข้า-ออกงานของร้าน ⭐ ใหม่ 16 ส.ค. 2569

📍 หน้า: /settings → หัวข้อ "เวลาทำงานมาตรฐาน" 👤 สิทธิ์: OWNER, ADMIN

เดิมระบบตัดสิน "สาย" ที่ 09:00 และ "ออกก่อนเวลา" ที่ 17:00 ตายตัว แก้ไม่ได้เลย ร้านที่เปิด 10 โมงจึงเห็นพนักงานขึ้นว่า "สาย" ทุกคนทุกวัน — ตอนนี้ตั้งเองได้แล้ว

  1. เข้า ตั้งค่า → เลื่อนหาหัวข้อ "เวลาทำงานมาตรฐาน"
  2. กรอกเวลาเข้างานและเวลาออกงาน (รูปแบบ 24 ชั่วโมง เช่น 10:00 / 19:30)
  3. เลือกขอบเขตว่าจะตั้งเป็น ค่ากลางทั้งร้าน หรือ เฉพาะสาขานี้
  4. กด บันทึก
ตั้งแบบไหนใช้กับใคร
ค่ากลางทั้งร้านทุกสาขาที่ไม่ได้ตั้งค่าของตัวเอง
เฉพาะสาขาสาขานั้นสาขาเดียว — ทับค่ากลางเสมอ
ไม่เคยตั้งเลยใช้ค่าเริ่มต้น 09:00 – 17:00 (เหมือนพฤติกรรมเดิมทุกประการ)

หน้าจอจะบอกให้เห็นว่าค่าที่ใช้อยู่มาจากไหน และเตือนถ้าค่ากลางของร้านกำลังถูกค่าของสาขาบังอยู่ มีปุ่มล้างกลับไปใช้ค่าเริ่มต้นได้

ℹ️ เปลี่ยนเวลาแล้ว มีผลกับการลงเวลาครั้งถัดไป รายการที่บันทึกไปแล้วไม่ถูกคำนวณใหม่

9.1B แก้เวลาเข้า-ออกที่บันทึกไปแล้ว ⭐ ใหม่ 16 ส.ค. 2569

📍 หน้า: /attendance 👤 สิทธิ์: OWNER, ADMIN เท่านั้น (ผู้จัดการสาขาไม่เห็นปุ่มนี้)

เดิมคู่มือเขียนว่าแก้ได้ แต่ไม่มีปุ่มบนหน้าจอจริง ๆ — ตอนนี้มีแล้ว

  1. หาแถวที่ต้องการแก้ในตาราง (บนมือถือดูที่การ์ด)
  2. กดปุ่ม แก้ไข ท้ายแถว
  3. แก้เวลาเข้า / เวลาออก / หมายเหตุ / เหตุผลการออกก่อนเวลา
  4. กด บันทึก

สิ่งที่ระบบกันไว้ให้

กรณีระบบทำอะไร
กรอกเวลาออก ก่อน เวลาเข้าปฏิเสธพร้อมบอกเหตุผล (เดิมรับไว้แล้วได้ชั่วโมงทำงานติดลบไหลเข้าเงินเดือน)
กรอกเวลาที่อ่านไม่ออกปฏิเสธพร้อมข้อความภาษาไทย (เดิมขึ้นข้อผิดพลาดของระบบ)
แก้เวลาออกงานคำนวณธง "ออกก่อนเวลา" ใหม่ให้ตามเวลาออกงานของสาขา (เดิมธงค้างค่าเก่า ทำให้รายงานนับผิดเงียบ ๆ)
ล้างเวลาออกงานปล่อยว่างได้ สำหรับกรณีลืมลงเวลาออก

⚠️ ทุกการแก้และการลบถูกบันทึกไว้ว่าใครทำ เมื่อไร ค่าเดิมคืออะไร ดูได้ที่ Audit Log (§14.5) เพราะเวลาเข้างานผูกกับการคำนวณเงินเดือนโดยตรง

9.2 Kiosk Attendance (QR Code) — Pro+

📍 หน้า: /kiosk/login → /kiosk 👤 สิทธิ์: ระบบแยกสำหรับพนักงาน (ไม่ต้อง Login หลัก) 📦 แพ็คเกจ: Professional หรือ Enterprise (ฟีเจอร์นี้ถูกล็อคในแพ็คเกจ Starter)

วัตถุประสงค์: หน้าจอ Kiosk สำหรับพนักงานสแกน QR Code เพื่อลงเวลาเข้า-ออก โดยไม่ต้องล็อกอินระบบหลัก — เหมาะกับ tablet/iPad วางหน้าร้าน

การเปิดใช้งาน Kiosk:

  1. ไปที่หน้า ลงเวลา (/attendance) ในฐานะ Admin/Manager
  2. ดูแถบ "โหมด Kiosk ลงเวลา" ด้านบนของหน้า
  3. กดปุ่ม "คัดลอก URL" เพื่อ copy ลิงก์ Kiosk (เช่น https://shop.com/kiosk/login)
  4. หรือกดปุ่ม "เปิด Kiosk" เปิดในแท็บใหม่
  5. นำ URL ไปเปิดบนแท็บเล็ตที่หน้าร้าน → login ครั้งเดียวด้วยบัญชีร้าน

⚠️ ถ้าแพ็คเกจของคุณยังไม่รวม Kiosk panel จะแสดง badge "PRO+" + ปุ่ม "อัพเกรด" → คลิกไปหน้า Billing

ขั้นตอนลงเวลาพนักงาน:

  1. เปิดหน้า /kiosk บนแท็บเล็ตหรือคอมพิวเตอร์หน้าร้าน
  2. พนักงานสแกน QR Code ส่วนตัว (ดูได้จากหน้าผู้ใช้งานหรือโปรไฟล์)
  3. ระบบแสดงชื่อพนักงาน
  4. กดปุ่ม "ลงเวลาเข้า" หรือ "ลงเวลาออก"
  5. ระบบบันทึกเวลาและแจ้งผล (เสียงและ Visual)

QR Code พนักงาน:

  • แต่ละพนักงานมี QR Code เฉพาะตัว
  • ดูได้จากหน้า ผู้ใช้งาน → คลิกพนักงาน → QR Code
  • พิมพ์ QR Code เป็นบัตรลงเวลาได้

💡 เคล็ดลับ: ตั้งแท็บเล็ตไว้ที่ทางเข้าออกร้าน ให้พนักงานสแกนเองทุกวัน ประหยัดเวลาและแม่นยำกว่าการลงเวลาแบบกระดาษ

10. เงินเดือน

📍 หน้า: /payroll 👤 สิทธิ์: OWNER, ADMIN เท่านั้น 📦 แพ็คเกจ: ENTERPRISE (PAYROLL feature)

หมายเหตุ (อัปเดต 1 ส.ค. 2569): เดิมข้อมูลเงินเดือนฝั่ง "อ่าน" เปิดให้พนักงานทุกระดับเรียกผ่าน API ได้ (ตัวเมนูซ่อนไว้ แต่ API ไม่ได้กัน) ตอนนี้ปิดให้เหลือเฉพาะ เจ้าของร้าน + แอดมิน ตรงกับฝั่งบันทึกข้อมูลแล้ว หากผู้จัดการสาขา (MANAGER) เคยเปิดหน้านี้ได้ จะเข้าไม่ได้อีกต่อไป

วัตถุประสงค์: คำนวณเงินเดือนพนักงาน เพิ่ม/หักรายการ อนุมัติ บันทึกการจ่าย และพิมพ์สลิป

10.1 การเตรียมข้อมูล (ทำก่อนใช้งานครั้งแรก)

  1. ตั้งเงินเดือนพื้นฐานของพนักงาน ที่ /users → แก้ไข → ช่อง "เงินเดือนพื้นฐาน" → บันทึก. ระบบจะสร้าง EmployeeSalary record อัตโนมัติเมื่อ baseSalary > 0

  2. (แนะนำ) ตั้งค่าประเภทรายการเงินเดือน ที่ /masters/deduction-types:

    • รายได้เพิ่ม (toggle "เป็นรายการหัก" = ปิด): OT, ค่าคอมมิชชั่น, โบนัส, ค่าเดินทาง, เบี้ยขยัน
    • รายการหัก (toggle "เป็นรายการหัก" = เปิด): ภาษีหัก ณ ที่จ่าย, ประกันสังคม, กองทุนสำรอง, มาสาย, ขาดงาน

10.2 ขั้นตอนคำนวณเงินเดือน

  1. กดปุ่ม "คำนวณเงินเดือน" มุมขวาบน
  2. เลือก เดือน + ปี (พ.ศ.) + พนักงาน (เว้นว่าง = คำนวณทุกคน)
  3. กด "คำนวณ" → ระบบสร้าง record Payroll สำหรับพนักงานที่ยังไม่มีรอบนี้
  4. Toast จะรายงานสาเหตุ ถ้าพนักงานบางคนถูกข้าม (ยังไม่ตั้งเงินเดือนพื้นฐาน · มีรอบนี้แล้ว) — ตามเหตุผลแล้วลองใหม่

10.3 เพิ่ม/หักรายการ (Adjustments) — สถานะ PENDING เท่านั้น

ตาราง 4 columns: เงินเดือนพื้นฐาน · รายได้เพิ่ม · รายการหัก · รวมสุทธิ — ค่าจริงดึงจาก totalAdditions / totalDeductions

  1. กด ไอคอน 📊 "รายละเอียด" ในแถวพนักงาน
  2. ใน Modal:
    • Hero card — ชื่อ + รอบเดือน + status badge
    • 3 KPI cards — เงินเดือนพื้นฐาน / รายได้เพิ่ม / รายการหัก
    • Form เพิ่ม adjustment (เห็นเฉพาะ PENDING):
      • ประเภท — เลือกจาก master ที่ตั้งใน /masters/deduction-types (auto-detect รายได้เพิ่ม/หัก จาก isDeduction ของประเภท)
      • รายละเอียด — เช่น "OT 8 ชม. วันที่ 15"
      • จำนวนเงิน — บาท
      • กด "+ เพิ่ม" → backend recompute totalAdditions/totalDeductions/netSalary ทันที
    • List แยก 2 sections — ▲ รายได้เพิ่ม (เขียว) · ▼ รายการหัก (แดง) — แต่ละ row มีปุ่ม 🗑️ ลบ (PENDING เท่านั้น)
    • Net Pay box — สีฟ้าเข้ม + จำนวนเงินใหญ่ + breakdown formula

10.4 สถานะเงินเดือน + Workflow

สถานะสีความหมายทำได้พิมพ์สลิป?
PENDINGเหลืองรอดำเนินการ — ตัวเลขแก้ได้เพิ่ม/ลบ adjustment, อนุมัติ❌ disabled (กันสับสน)
APPROVEDน้ำเงินอนุมัติแล้ว รอจ่าย — lockedบันทึกการจ่าย, พิมพ์สลิป preview✅
PAIDเขียวจ่ายแล้ว — finalพิมพ์สลิป official (ใช้ขอ visa/loan)✅

ขั้นตอน:

  1. ตรวจ adjustments ใน detail modal → กด "อนุมัติ" → status APPROVED (ตัวเลข lock)
  2. หลังจ่ายเงินจริง (โอนเข้าบัญชีพนักงาน) → กด "จ่ายเงิน" → ใส่ note (เลขอ้างอิง/วันที่จริง) → status PAID
  3. กด ไอคอน 🖨️ "พิมพ์สลิปเงินเดือน" ในแถว → เปิด Modal preview สลิป A4 → กด "พิมพ์"

10.5 พิมพ์สลิปเงินเดือน (Payslip)

  • เปิดผ่านปุ่ม 🖨️ ในแถว หรือใน detail modal (ปุ่ม "พิมพ์สลิป")
  • รูปแบบ A4 — Hero header + ข้อมูลพนักงาน + 2-col earnings/deductions + Net Pay พร้อมข้อความไทย ("สามหมื่นห้าพันบาทถ้วน") + 2 ลายเซ็น (HR/พนักงาน)
  • บนมือถือ — เลื่อนแนวนอนได้ (slip เป็น A4 width — ห้ามบีบเป็น mobile)

⚠️ กฎทั่วไป: PENDING ปุ่มพิมพ์ disabled — เพราะตัวเลขยังเปลี่ยนได้ พิมพ์ตอนนี้พนักงานเซ็นรับ แล้วแก้ ทำให้สลิปไม่ตรงกับเงินที่จ่ายจริง

10A. ค่าใช้จ่ายดำเนินงาน (Operating Expenses)

📍 เส้นทาง: เมนูซ้าย → "พนักงาน & การเงิน" → ค่าใช้จ่าย (/expenses) 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: บันทึกค่าใช้จ่ายดำเนินงาน (ค่าเช่าร้าน, ค่าน้ำ-ไฟ, ค่าน้ำมัน, marketing, ฯลฯ) ที่ไม่ใช่ค่าซื้อสินค้าหรือเงินเดือน — เพื่อให้:

  1. PIT ACTUAL deduction ครบถ้วน — ภ.ง.ด.94/90 วิธี ACTUAL ต้องบวก expense รายการนี้เข้าด้วย ไม่งั้นหักได้น้อยเกินจริง
  2. ภาษีซื้อใน ภ.พ.30 — ค่าใช้จ่ายที่มีใบกำกับเต็มรูป (เช่น ค่าน้ำ-ไฟ-เน็ต) ใช้เป็น input VAT ลด net VAT ที่ต้องส่ง
  3. WHT (ภ.ง.ด.3/53) — ถ้าจ่ายค่าจ้าง freelance / outsource → กรอก hasWht + อัตรา → ระบบเก็บข้อมูลเตรียม export ภ.ง.ด.3
  4. CIT (ภ.ง.ด.50/51) — บริษัทใช้คำนวณกำไรสุทธิ (รายได้ − รายจ่าย)

10A.1 หมวดเริ่มต้น (9 หมวด)

ระบบ auto-seed 9 หมวดเมื่อสร้าง tenant ใหม่:

Codeชื่อตัวอย่าง
RENTค่าเช่าร้าน/สำนักงานค่าเช่าตึก, ค่าเช่าโกดัง
UTILITYค่าน้ำ-ค่าไฟ-ค่าน้ำประปาบิลค่าไฟทุกเดือน
INTERNETค่าอินเทอร์เน็ต/โทรศัพท์True/3BB, ค่ามือถือพนักงาน
FUELค่าน้ำมันเชื้อเพลิงปั๊ม PTT, BCP, ส่งของ
MARKETINGค่าโฆษณา/การตลาดFacebook Ads, ป้ายไวนิล
SUPPLIESค่าวัสดุสิ้นเปลือง/ออฟฟิศกระดาษ, หมึก, ถุงพลาสติก
OUTSOURCEค่าจ้างซ่อม/Outsourceส่งศูนย์ซ่อม mainboard
PROFESSIONALค่าทำบัญชี/ที่ปรึกษาสำนักงานบัญชี, ทนาย
OTHERอื่นๆกรณีไม่เข้าหมวดใด

จัดการเพิ่ม/แก้ไข/ลบหมวดได้ที่ /masters/expense-categories

10A.2 บันทึกค่าใช้จ่ายใหม่

  1. กดปุ่ม + เพิ่มค่าใช้จ่าย
  2. กรอกข้อมูล:
ฟิลด์คำอธิบายจำเป็น
วันที่วันที่จ่ายเงินจริง (หรือวันที่ในใบกำกับภาษี)✅
หมวดเลือกหมวด (RENT/UTILITY/...)✅
ผู้ขายชื่อร้าน/บริษัท เช่น "การไฟฟ้านครหลวง"❌
จำนวนเงิน (ก่อน VAT)ราคาก่อนภาษีมูลค่าเพิ่ม✅
ภาษีซื้อ (VAT)ใส่เฉพาะใบกำกับเต็มรูป — ใช้ใน ภ.พ.30❌
เลขที่ใบกำกับสำหรับใบกำกับเต็มรูป❌
วิธีชำระเงินสด / โอน / PromptPay / บัตร❌
รายละเอียดบันทึกเพิ่มเติม❌
ใบเสร็จ/สลิปถ่ายรูปแนบ (jpg/png)❌
หัก ณ ที่จ่ายtoggle เปิด-ปิด❌
  1. ถ้าเปิด หัก ณ ที่จ่าย → กรอกเพิ่ม:
    • อัตรา WHT: 1% ดอกเบี้ย / 3% บริการ / 5% เช่า / 15% วิชาชีพอิสระ
    • ชื่อผู้รับเงิน + เลขประจำตัวผู้เสียภาษี — ใช้สำหรับกรอก ภ.ง.ด.3/53
    • ระบบคำนวณ whtAmount อัตโนมัติ (amount × rate ÷ 100)
  2. กด บันทึก

10A.3 รายงาน + Export

  • Stat cards 4 ใบบนหน้า /expenses — จำนวนรายการ / รวมก่อน VAT / ภาษีซื้อ / WHT รวม
  • Filter — ค้นหา + หมวด + เดือน/ปี + WHT toggle
  • Export to /tax/pit — ค่าใช้จ่ายในช่วงเวลานั้นถูกรวมเข้า "ACTUAL deduction" อัตโนมัติเมื่อ tenant ใช้วิธี ACTUAL
  • Export to /tax/vat — ค่าใช้จ่ายที่มี vatAmount > 0 ถูกรวมเข้า "ภาษีซื้อ" ของ ภ.พ.30 อัตโนมัติ

💡 เคล็ดลับ: บันทึกทันทีหลังจ่ายเงินทุกครั้ง — ไม่ต้องรอสิ้นเดือน. แนบรูปใบเสร็จด้วยจะใช้เป็น audit trail ตอน RD มาตรวจ

⚠️ คำเตือน: ค่าใช้จ่ายที่หมวด isDeductible=false (ลดหย่อนไม่ได้) จะ ไม่ ถูกรวมใน ACTUAL deduction — ใช้สำหรับค่าใช้จ่ายส่วนตัว/นอกธุรกิจที่อยากบันทึกแต่ไม่อยากให้กระทบภาษี

10B. กะการขาย + ลิ้นชักเงินสด (Cashier Shift)

📍 เส้นทาง: เมนูซ้าย → "ขาย & ลูกค้า" → กะการขาย (/shift) 👤 สิทธิ์: เจ้าของร้าน · ผู้ดูแลระบบ · ผู้จัดการ · แคชเชียร์ · พนักงานขาย · ช่างขาย — เปิด-ปิดกะของตัวเอง (เจ้าของร้าน / ผู้ดูแลระบบ / ผู้จัดการ ดูประวัติกะของพนักงานคนอื่นได้ด้วย)

🔒 ช่างซ่อม (ที่มีบทบาทช่างอย่างเดียว) เข้าหน้านี้ไม่ได้ — ปรับปรุง 19 ส.ค. 2569

เดิมเมนูไม่ขึ้นให้เห็นก็จริง แต่ถ้าพิมพ์ที่อยู่หน้าเว็บเข้ามาตรง ๆ ยังเปิดได้ และเปิดกะได้จริง ตอนนี้จะเจอหน้า "ไม่มีสิทธิ์เข้าถึง" พร้อมปุ่มพาไปหน้างานซ่อม

⚠️ ครอบทั้ง การเปิด-ปิดกะ และ การบันทึกเงินเข้า-ออกลิ้นชัก (§10B.5) 💡 พนักงานที่เป็น ช่างขาย (ถือทั้งบทบาทขายและบทบาทช่างในคนเดียว) ยังเข้าได้ตามปกติ ถ้าช่างคนไหนจำเป็นต้องเปิดกะ ให้เจ้าของร้านเพิ่มบทบาท พนักงานขาย ให้เขาที่หน้า ผู้ใช้งาน (§14.2)

วัตถุประสงค์: ทุกร้าน POS ต้องนับเงินสดในลิ้นชักตอนเปิด-ปิดงาน เทียบกับยอดที่ระบบบันทึก เพื่อ:

  • จับ cashier ที่นับผิด/ทอนผิด/ลืมรับ → variance
  • จับการขโมยเงินจากลิ้นชัก
  • มี audit trail ละเอียด ตามข้อกำหนดของผู้สอบบัญชี (CIT/PIT)

10B.0 นโยบายการบังคับเปิดกะ (Shift Enforcement)

ตามมาตรฐาน POS สากล (Microsoft Dynamics 365 Commerce, Shopify POS, Lightspeed) — "POS requires that users have an active and open shift to perform any operations that produce a financial transaction"

กฎ default ใน MobileHub:

บทบาทต้องเปิดกะก่อนขาย?เหตุผล
แคชเชียร์✅ ใช่คนรับเงินหลัก — ต้องรับผิดชอบเงินในลิ้นชัก + ตรวจเงินขาด/เกิน
พนักงานขาย✅ ใช่ขายแล้วรับเงินเองด้วย — ความรับผิดชอบเดียวกัน
ผู้จัดการ❌ ไม่ผู้รับผิดชอบสาขา — ข้ามได้
ผู้ดูแลระบบ❌ ไม่ผู้ดูแลระบบ — ข้ามได้
เจ้าของร้าน❌ ไม่เจ้าของร้าน — ข้ามได้ (ร้านเล็กมักทำเองคนเดียว)
ช่างขาย❌ ไม่ถือบทบาทช่างซ่อมอยู่ด้วย ซึ่งอยู่นอกรายชื่อที่บังคับ ระบบจึงยกเว้นให้ — แต่ เข้าหน้ากะและเปิดกะได้ ถ้าร้านอยากให้เปิด
ช่างซ่อม—เข้าหน้ากะการขายไม่ได้เลย (ปรับปรุง 19 ส.ค. 2569) จึงไม่มีกะให้เปิด — ดูกล่องบนสุดของ §10B

💡 คนที่ถือหลายบทบาทพร้อมกัน ให้ดูที่บทบาท "ที่ไม่ถูกบังคับ" เป็นหลัก ถ้าพนักงานคนหนึ่งมีบทบาทใดก็ตามที่อยู่นอกรายชื่อที่ร้านตั้งให้บังคับ ระบบจะยกเว้นให้ทั้งคน เช่น คนที่เป็นทั้ง แคชเชียร์ + ผู้จัดการ จะขายได้เลยโดยไม่ต้องเปิดกะ (เจตนาคือ ร้านเล็กที่หัวหน้ามาช่วยหน้าเคาน์เตอร์เป็นครั้งคราวจะได้ไม่ติดขัด) ถ้าอยากบังคับคนกลุ่มนี้จริง ๆ ต้องเพิ่มบทบาทที่เขาถืออยู่เข้าไปในรายชื่อบังคับให้ครบทุกอัน

ปรับแก้นโยบายได้ที่ /settings → "นโยบายกะการขาย (POS Shift)" — MultiSelect ให้เลือกบทบาทใดบ้างที่ต้องบังคับ. เคลียร์ทั้งหมด = ปิดการบังคับ (ทุก role ขายได้ตรง).

สิ่งที่เกิดถ้าบังคับ + ยังไม่เปิดกะ:

  • หน้า /sales แสดง banner สีส้ม + ปุ่ม "ไปเปิดกะการขาย" → กดเข้า /shift
  • ปุ่ม "ยืนยันการขาย" ถูกซ่อน (Grid ของ POS UI ถูก hide)
  • ถ้ายิง POST /sales ตรง API → backend ตอบ 403 SHIFT_REQUIRED พร้อม message ภาษาไทย
  • การคืนเงิน (refund) ก็ถูก block เหมือนกัน (เงินออกจากลิ้นชัก → ต้อง audit)

10B.1 Workflow 3 ขั้นตอน

(1) เปิดกะ — ตอนเริ่มงาน

  1. นับเงินสดในลิ้นชัก ณ ตอนเริ่มงาน
  2. ไป /shift → กดปุ่ม เปิดกะ
  3. กรอก เงินทอนเริ่มต้น (จำนวนเงินสดที่นับได้) → Submit
  4. ระบบสร้าง CashierSession (status=OPEN) — sale ใหม่ที่ user นี้ขายในสาขานี้จะ link เข้า session อัตโนมัติ

(2) ระหว่างกะ — POS ทำงานปกติ

  • ขายผ่าน /sales ตามปกติ — ไม่ต้องคิดเรื่อง shift
  • ทุก checkout จะถูก link เข้า session ของ user (ถ้ามีกะที่เปิดอยู่)
  • บทบาทที่อยู่ใน list บังคับ (default = CASHIER/SALES) — ถ้ายังไม่เปิดกะจะขายไม่ได้ ตามนโยบาย §10B.0
  • บทบาทที่ bypass (OWNER/ADMIN/MANAGER) — ขายได้ตรง; ถ้าบังเอิญเปิดกะไว้ก็ link เข้า session ของตัวเองอัตโนมัติ; ถ้าไม่เปิด — sale ลอย (ไม่ link)

(3) ปิดกะ — ตอนเลิกงาน

  1. ไป /shift → กดปุ่ม ปิดกะ ที่ card "กะที่เปิดอยู่"

  2. ระบบโชว์ ยอดที่ควรจะมี (Expected) — breakdown:

    เงินทอนเริ่มต้น              ฿  2,000.00
    + เงินสดที่ขาย (15 ออเดอร์)   ฿ 18,500.00
    + ค่าซ่อมที่รับสด (2 งาน)     ฿  1,800.00   ← ใหม่
    − เงินสดที่ refund           ฿    500.00
    ─────────────────────────
    = ที่ควรจะมี                 ฿ 21,800.00
    

    พร้อมยอดอื่น (โอน/PromptPay/บัตร) ที่ ไม่ต้องนับในลิ้นชัก

    ⭐ ใหม่ ส.ค. 2569 — ค่าซ่อมที่รับเองที่เคาน์เตอร์เข้ายอดกะแล้ว เดิมเงินค่าซ่อมอยู่ในลิ้นชักจริงแต่ไม่เคยถูกนับ ร้านที่เก็บเงินซ่อมเองจึงปิดกะแล้วขึ้น "เงินเกิน" ทุกวันที่มีงานซ่อม ตอนนี้งานที่กดรับเงินระหว่างกะเปิดอยู่จะถูกผูกเข้ากะอัตโนมัติ (ดู §5.9) และแยกช่องจากยอดขาย เพื่อให้ประวัติเก่ากับใหม่ยังเทียบกันได้ ค่าซ่อมที่รับเป็น โอน/บัตร ไปอยู่กลุ่ม "ยอดอื่น" ไม่บวกเข้าเงินสด งานที่ไม่ระบุวิธีรับเงิน (ข้อมูลก่อน ส.ค. 2569) ไม่ถูกนับเข้าช่องไหนเลย — ระบบไม่เดา

  3. นับเงินสดในลิ้นชักจริง → กรอกในช่อง "เงินสดที่นับจริง"

  4. ระบบคำนวณ variance อัตโนมัติ:

    • variance = 0 → 🟢 OK ยอดตรง
    • ±฿1 ขึ้นไป → 🟠 ต้องระบุเหตุผล
    • >฿100 → 🔴 alert สีแดง (อาจมีปัญหาจริง)
  5. กรอกเหตุผล (ถ้ามี variance) → ยืนยันปิดกะ

  6. ระบบบันทึก expected/actual/variance + snapshot ของ totalCashSales/totalTransferSales/totalCardSales/totalCashRefunds + saleCount และค่าซ่อมแยกอีก 3 ช่อง (สด/โอน/บัตร) + จำนวนงานซ่อมในกะ — เก็บ snapshot ไว้เพื่อให้กะที่ปิดไปแล้วอธิบายที่มาของ "เงินที่ควรมี" ได้ครบทุกบาท

10B.2 ความสัมพันธ์กับ Z Report

กะ (Shift)Z Report (end-of-day)
ระดับper cashier (ของพนักงาน 1 คน)ทั้งร้าน (รวมทุกคน)
เปิดต่อวันหลายคนเปิดคนละเวลาได้1 ครั้งสิ้นวัน
ที่อยู่/shift/sales-history?type=z-report
ทำงานคู่กันใช่ — Z Report รวมยอดของทุก shift ในวัน

10B.3 Variance threshold

ระบบเตือนเมื่อ variance > ฿1 แต่ไม่ block — ยังปิดกะได้ถ้ากรอกเหตุผล. เหตุผลทั่วไป:

  • ลูกค้าจ่ายเกินไม่รับเงินทอน
  • เงินทอนเริ่มต้นกะก่อนนับผิด
  • ลืมบันทึก sale ในระบบ (จ่ายเงินสดแต่ไม่ออกใบเสร็จ — discouraged)
  • เก็บเงินไว้ในกระเป๋าตัวเอง (เคยมีกรณีที่ใช้คำนี้ → admin ต้องสอบสวน)

10B.4 Best practices

  • เปิด-ปิดกะ ทุกวัน 1 ครั้ง — ไม่ใช่หลายวันต่อกะ (variance สะสมยากตรวจ)
  • นับเงินจริงด้วยตา — อย่า assume = expected (ระบบ pre-fill เพื่อความเร็ว แต่ต้องนับจริง)
  • Variance > ฿100 → admin ต้องเรียกมาคุย ไม่ปล่อย
  • Audit trail ไม่สามารถลบ/แก้กะที่ปิดแล้ว — ต้องสร้าง adjustment entry ภายหลัง

10B.5 เงินเข้า/ออกลิ้นชัก (ค่าส่ง, ซื้อของหน้าร้าน, เติมเงินทอน) ⭐ NEW

ปัญหาที่แก้: ระหว่างวันร้านหยิบเงินสดออกจากลิ้นชักเป็นเรื่องปกติ — จ่ายค่าส่งของ ซื้อน้ำ/ของใช้หน้าร้าน นำเงินไปฝากธนาคาร — และเติมเงินเข้าเมื่อเงินทอนไม่พอ

ถ้าไม่บันทึก ตอนปิดกะระบบจะบอกว่า "เงินขาด" เท่ายอดที่หยิบออกไปทุกครั้ง แคชเชียร์ต้องพิมพ์เหตุผลอธิบายทุกกะ จนตัวเลข variance ใช้จับเงินหายจริงไม่ได้อีกต่อไป

วิธีบันทึก — เข้าได้ 2 ทาง

ทางอยู่ตรงไหนเหมาะกับ
1. ตอนหยิบเงินเลยปุ่ม "เงินเข้า/ออก" บนการ์ดกะที่เปิดอยู่ (ข้างปุ่มปิดกะ)บันทึกทันทีที่จ่าย — แนะนำที่สุด
2. ตอนปิดกะแล้วเลขไม่ตรงในหน้าปิดกะ เมื่อยอดขาด จะมีกล่องถามว่า "หยิบเงินออกไปจ่ายอะไรหรือเปล่า?" พร้อมปุ่มบันทึกนึกขึ้นได้ตอนปิดกะ — บันทึกแล้วเด้งกลับมาพร้อมยอดใหม่

ขั้นตอน

ใส่ได้หลายรายการพร้อมกัน — ปลายวันมีสลิปค้างหลายใบก็ใส่รวดเดียว ไม่ต้องบันทึกทีละใบแล้วเปิดหน้าต่างใหม่

  1. เลือกทิศทางของแถวนั้น — เงินออก (ส้ม) หรือ เงินเข้า (เขียวน้ำทะเล) · แถบสีซ้ายของแถบจะเปลี่ยนตาม กันเลือกผิด
  2. ใส่จำนวนเงิน
  3. เลือกเหตุผลจากรายการแนะนำ (ค่าส่ง / ซื้อของหน้าร้าน / นำฝากธนาคาร / ค่าน้ำ-ค่าไฟ / ค่าอาหารพนักงาน) หรือพิมพ์เองก็ได้ — บังคับกรอก
  4. (ไม่บังคับ) เลือกหมวดค่าใช้จ่าย → ระบบสร้างใบที่ ค่าใช้จ่ายดำเนินงาน ให้อัตโนมัติ ไม่ต้องคีย์ซ้ำ และเข้ารายงานภาษีตามปกติ
  5. มีอีกใบ → กด "เพิ่มรายการ" แล้วทำข้อ 1-4 ซ้ำ · กดถังขยะที่มุมแถวเพื่อลบแถวที่ไม่ต้องการ
  6. แถบล่างสรุปยอดรวมทุกแถว + บอกว่า หลังบันทึกลิ้นชักควรมีเท่าไหร่ → กดบันทึกครั้งเดียวจบ

ถ้ามีแถวใดกรอกไม่ครบ ระบบจะไม่บันทึกอะไรเลยทั้งชุด พร้อมบอกว่าแถวที่เท่าไหร่ผิด — ที่ทำแบบนี้เพราะถ้าบันทึกแถวที่ถูกไปก่อนแล้วค่อยแจ้ง error ผู้ใช้จะกดใหม่ทั้งชุด แล้วได้รายการซ้ำ เงินในรายงานจะเกินจริง

พิมพ์สลิป + ให้ลิ้นชักเด้งออกมา ⭐ ใหม่ 16 ส.ค. 2569

เปิดที่ ตั้งค่า → สวิตช์ "พิมพ์สลิปเงินเข้า/ออกอัตโนมัติ" (แยกรายสาขา · ค่าตั้งต้นคือปิด) เมื่อเปิดแล้ว กดบันทึกเงินเข้า/ออก → ระบบเปิดหน้าต่างพิมพ์ให้ทันที → กดพิมพ์ → ได้สลิป และลิ้นชักเปิด

ทำไมต้องพิมพ์ถึงจะเปิดลิ้นชักได้ — ลิ้นชักเก็บเงินไม่ได้ต่อกับคอมพิวเตอร์ มันเสียบอยู่กับ เครื่องพิมพ์สลิป (ช่อง RJ11 ท้ายเครื่อง) และเครื่องพิมพ์เป็นคนจ่ายไฟไปเปิดสลัก โปรแกรมบนเว็บ จึงสั่งลิ้นชักตรง ๆ ไม่ได้ ต้องสั่งผ่านงานพิมพ์เท่านั้น

ต้องตั้งที่เครื่องพิมพ์ด้วย 1 ครั้ง — เข้า Windows → Printer properties ของเครื่องพิมพ์สลิป → เปิดตัวเลือก Cash drawer / Open drawer · แก้จากโปรแกรมไม่ได้ และถ้าไดรเวอร์ของเครื่องนั้น ไม่มีตัวเลือกนี้ จะใช้ไม่ได้

⚠️ เปิดสวิตช์ที่ไดรเวอร์แล้ว ลิ้นชักจะเด้งทุกใบที่พิมพ์ออกเครื่องพิมพ์สลิปตัวนั้น — รวม ใบเสร็จขายที่ POS (ปกติก็ต้องการอยู่แล้ว) และ การพิมพ์ใบเสร็จเก่าซ้ำ (มักไม่ต้องการ) แยกกรณีไม่ได้เพราะสวิตช์อยู่ที่เครื่องพิมพ์ ไม่ใช่ที่โปรแกรม — เครื่องพิมพ์ไม่รู้ว่าใบที่ได้รับ เป็นใบใหม่หรือใบพิมพ์ซ้ำ · เอกสาร A4 (ใบรับซ่อม/ใบประกัน) ไปเครื่องพิมพ์คนละตัว ไม่เด้ง · ถ้ารับไม่ได้ ให้ปิดสวิตช์ที่ไดรเวอร์แล้วเปิดลิ้นชักด้วยกุญแจเหมือนเดิม — สลิปยังพิมพ์เป็นหลักฐานได้ตามปกติ

เรื่องที่ควรรู้เกี่ยวกับสลิป

  • บันทึกหลายรายการพร้อมกัน = สลิปใบเดียว (ไม่ใช่ใบต่อรายการ) — เบราว์เซอร์เปิดหน้าต่างพิมพ์ได้ ครั้งเดียวต่อการกด 1 ครั้ง ถ้าแยกใบ ใบที่ 2 เป็นต้นไปจะถูกบล็อกทิ้ง และลิ้นชักเด้งครั้งเดียวก็พอ
  • สลิปมีป้าย "เอกสารภายใน — ไม่ใช่ใบเสร็จรับเงิน" · ใบที่กดพิมพ์ซ้ำมีป้าย "พิมพ์ซ้ำ" กันนับเป็นเงิน 2 รอบตอนตรวจ
  • ยอดเงินคงเหลือในลิ้นชักพิมพ์เฉพาะตอนบันทึก — ใบพิมพ์ซ้ำไม่พิมพ์ เพราะยอดย้อนหลังคำนวณไม่ได้ (ไม่เดาตัวเลขลงเอกสารที่ใช้กระทบยอด)
  • ปุ่มพิมพ์ซ้ำอยู่ที่รายการในตาราง และแสดงเสมอแม้ปิดสวิตช์ — ร้านที่ปิดไว้จะได้ยังเปิดลิ้นชักได้ โดยไม่ต้องคีย์รายการปลอม
  • ความกว้างกระดาษอ่านจากค่าตั้งค่าของสาขา (57/58 หรือ 80 มม.) · สลิป 1 รายการยาวประมาณ 8.6 ซม.

ดูย้อนหลังว่าเงินไปไหนบ้าง

เปิด ประวัติกะ → คลิกกะที่ต้องการ → นอกจากยอดรวมในส่วน "สรุปยอด" แล้ว จะมีส่วน "รายการเงินเข้า/ออกลิ้นชัก" แจกแจงทีละรายการ พร้อม เหตุผล · เวลา · ชื่อคนที่บันทึก และป้ายบอกว่ารายการไหนสร้างใบค่าใช้จ่ายไว้แล้ว — ใช้ตรวจย้อนหลังหรือให้ผู้สอบบัญชีดูได้

สูตรที่เปลี่ยนไป

ยอดที่ควรมีในลิ้นชัก
  = เงินทอนเริ่มต้น + ขายเงินสด + ค่าซ่อมที่รับสด − คืนเงินสด + เงินเข้า − เงินออก

ตัวอย่างจริง: เงินทอนเริ่ม ฿1,330 + ขายสด ฿1,090 − ค่าส่ง ฿48 = ควรมี ฿2,372

⚠️ 3 เรื่องที่ต้องรู้

1. อย่าพิมพ์ "จ่ายค่าส่ง 48" ลงช่องเหตุผลของ variance ถ้าทำแบบนั้น เงินก้อนนั้นจะถูกบันทึกเป็น "เงินขาดที่อธิบายแล้ว" ไม่ใช่ "รายจ่ายที่ถูกต้อง" → ไม่เข้าค่าใช้จ่าย ไม่เข้ารายงานภาษี และกะนั้นจะมี variance ติดลบค้างอยู่ถาวร ให้ใช้ปุ่ม "บันทึกเงินออก" แทนเสมอ

2. เลือกหมวดค่าใช้จ่ายเฉพาะเมื่อเป็น "รายจ่าย" จริง นำฝากธนาคาร หรือ ส่งเงินทอนไปสาขาอื่น คือการย้ายเงิน ไม่ใช่รายจ่าย — ถ้าบันทึกเป็นค่าใช้จ่ายด้วย กำไรจะต่ำกว่าความจริงและฐานภาษีผิด · เว้นช่องหมวดว่างไว้ (ส่วนเงินเข้า เลือกหมวดไม่ได้เลย เพราะการเติมเงินทอนไม่ใช่รายจ่ายแน่นอน)

3. กะที่ปิดแล้วเพิ่ม/ลบรายการย้อนหลังไม่ได้ ตอนปิดกะระบบบันทึกยอดสรุปไว้เป็นหลักฐาน ถ้าแก้ย้อนหลังได้ ตัวเลขที่บันทึกไว้จะอธิบายตัวเองไม่ได้อีก — ถ้าลืมบันทึกจริง ๆ ให้ใส่ไว้ในหมายเหตุปิดกะแล้วแจ้งผู้จัดการ

ลบรายการที่คีย์ผิด

กดไอคอนถังขยะที่แถวนั้น (ทำได้เฉพาะตอนกะยังเปิดอยู่) — ยอดคำนวณใหม่ทันที และถ้ารายการนั้นสร้างใบค่าใช้จ่ายไว้ ใบนั้นจะถูกลบตามไปด้วย ไม่ค้างเป็นต้นทุนที่ไม่มีที่มา

11. รายงาน

📍 หน้า: /reports 👤 สิทธิ์: OWNER, ADMIN, MANAGER

วัตถุประสงค์: ดูรายงานสรุปในรูปแบบต่างๆ เลือกช่วงวันที่ Export Excel ได้

ประเภทรายงาน:

รายงานคำอธิบาย
📊 รายงานยอดขายสรุปยอดขายสินค้า ยอดรวม จำนวนรายการ
🔧 รายงานการซ่อมสรุปงานซ่อม ค่าซ่อม สถิติตามช่าง
🛒 รายงานการรับซื้อสรุปการรับซื้อสินค้า ต้นทุน
📦 รายงานสินค้าคงเหลือStock มือถือและอุปกรณ์เสริมปัจจุบัน — ดูแยกรายสาขาได้แล้ว (ดู §11.0A)
💰 สรุปการเงินกำไร-ขาดทุน รายรับ-รายจ่ายรวม
🧾 สรุปภาษี VAT (ภ.พ.30)ยอด VAT ที่เก็บได้ สำหรับร้านที่จด VAT
🧮 ภาษีเงินได้ (ภ.ง.ด.94/90)คำนวณภาษีบุคคลธรรมดา + ตารางอัตราก้าวหน้า 8 ขั้น

กำไรขั้นต้นคิดจากอะไร ⭐ อัปเดต

กำไรขั้นต้น = รายได้ − ต้นทุน โดยต้นทุนมี 3 ก้อนที่ไม่ทับกัน

ก้อนมาจากไหน
ต้นทุนมือถือที่ขายไปต้นทุนของเครื่องที่ขายออกในช่วงนั้น (เครื่องที่รับซื้อมา ต้นทุนคือราคาที่จ่ายตอนรับซื้อ)
ต้นทุนอุปกรณ์เสริมที่ขายไปต้นทุนของอุปกรณ์เสริมที่ขายออกในช่วงนั้น
ต้นทุนอะไหล่ซ่อมช่อง ต้นทุน/ชิ้น ในใบซ่อม (ถ้าไม่ได้กรอก ระบบใช้ราคาขายแทน)

ℹ️ การ์ด "ต้นทุนการรับซื้อ" แสดงเงินที่จ่ายรับซื้อเครื่องเข้าร้านในช่วงนั้น แต่ไม่ได้ถูกหักในกำไรขั้นต้นทันที — เครื่องที่รับซื้อมายังอยู่ในสต๊อก ต้นทุนจะถูกหักตอนขายเครื่องนั้นออกไป (ถ้าหักทั้ง 2 ตอน ต้นทุนจะถูกนับซ้ำ)

ทำไมกำไรรายวันไม่ตรงกับหน้า "ยอดรับเงินวันนี้" ⭐ ใหม่

2 หน้านี้ หักต้นทุนอะไหล่ซ่อมคนละวัน — ตัวเลขไม่ได้ผิดทั้งคู่ แค่นับคนละวัน

หน้าหักต้นทุนอะไหล่ซ่อมในวันไหน
รายงาน → สรุปการเงินวันที่ใส่อะไหล่ลงใบซ่อม (รวมงานที่ยังไม่ได้เก็บเงิน)
ยอดรับเงินวันนี้วันที่ลูกค้าจ่ายเงิน ของงานซ่อมนั้น

ตัวอย่าง: ใส่จอต้นทุน 320 บาทลงใบซ่อมตอน 18:40 วันที่ 15 แต่ลูกค้ามารับเครื่องและจ่ายเงินเช้าวันที่ 16

  • สรุปการเงินของ วันที่ 15 หักต้นทุน 320 แล้ว
  • ยอดรับเงินวันนี้หักต้นทุน 320 ใน วันที่ 16 แทน

⇒ งานที่ใส่อะไหล่กับเก็บเงิน วันเดียวกัน จะถูกหักต้นทุนในวันเดียวกันทั้ง 2 หน้า · หน้าสรุปการเงินมีหมายเหตุนี้กำกับไว้ใต้การ์ดกำไรแล้ว

⚠️ ก่อนหน้านี้กำไรขั้นต้นไม่ได้หักต้นทุนอะไหล่ซ่อม ทำให้ค่าอะไหล่ทั้งก้อนถูกนับเป็นกำไร ตัวเลขจึงสูงกว่าความจริง ตอนนี้แก้แล้ว — ถ้าเทียบกับรายงานเดือนก่อน ๆ ตัวเลขกำไรจะลดลง เพราะของเดิมสูงเกินจริง ไม่ใช่ร้านกำไรน้อยลง

ตัวเลขบน แดชบอร์ด (การ์ด "กำไรขั้นต้นเดือนนี้") ใช้วิธีคิดเดียวกันกับหน้ารายงานแล้ว เดิม 2 ที่นี้คิดคนละแบบจึงไม่เคยตรงกัน

ขั้นตอนดูรายงาน:

  1. เลือก ประเภทรายงาน จาก Dropdown
  2. เลือก ช่วงวันที่ ด้วย CustomDatePicker (ปฏิทินพุทธศักราช) · ℹ️ รายงานสินค้าคงเหลือไม่มีช่องนี้ — มันตอบคำถามว่า "ตอนนี้มีของอยู่เท่าไหร่" จึงไม่ขึ้นกับช่วงเวลา (มีช่องเลือกสาขาแทน)
  3. กดปุ่ม "โหลดรายงาน"
  4. ดูข้อมูลในตาราง (Desktop) หรือ Card (Mobile)
  5. กดปุ่ม "Export Excel" เพื่อดาวน์โหลดไฟล์ .xlsx (📦 Pro+ เท่านั้น)

📦 Export Excel/PDF เป็นฟีเจอร์ของแพ็คเกจ Professional ขึ้นไป — ในแพ็คเกจ Starter ปุ่มจะ disable แสดงข้อความ "PRO+ เท่านั้น"

💡 เคล็ดลับ: เลือกช่วงวันที่เป็น "เดือนปัจจุบัน" เพื่อดูยอดรวมประจำเดือน

11.0A รายงานสินค้าคงเหลือ — เลือกสาขา และช่องวันที่ที่หายไป ⭐ ใหม่

📍 เลือก: /reports → รายงานสินค้าคงเหลือ

สิ่งที่เปลี่ยน

เดิมตอนนี้
เลือกสาขาเลือกได้ แต่ตัวเลขไม่เปลี่ยนเลือกแล้วได้เฉพาะเครื่องของสาขานั้นจริง
ช่วงวันที่มีช่องให้เลือก แต่ไม่มีผลกับรายงานนี้เอาออกแล้ว (ดูเหตุผลข้างล่าง)
ใบพิมพ์ได้ทุกสาขาเสมอ · ไม่บอกว่าเครื่องไหนอยู่สาขาไหนตรงกับที่เลือกบนจอ · โหมดทุกสาขามีคอลัมน์ "สาขา"
หัวใบพิมพ์โหมดทุกสาขาพิมพ์คำว่า "ทุกสาขา" เป็นชื่อร้านพิมพ์ชื่อร้านจริง แล้วบอกขอบเขตแยกบรรทัด

ℹ️ ทำไมเอาช่องวันที่ออก — รายงานนี้ตอบคำถามว่า "ตอนนี้มีของอยู่เท่าไหร่" ซึ่งเป็นสภาพ ณ ปัจจุบัน ไม่ใช่ยอดของช่วงเวลา เดิมมีช่องให้เลือกแต่ระบบไม่ได้เอาไปใช้ จึงเป็นช่องที่กดแล้วไม่มีอะไรเกิดขึ้น — ปล่อยไว้จะทำให้เข้าใจผิดว่าตัวเลขถูกกรองแล้ว ถ้าอยากดูของที่รับเข้ามาในช่วงหนึ่ง ให้ใช้ รายงานการรับซื้อ แทน

⚠️ เครื่องที่ยังไม่ได้ระบุสาขา (ข้อมูลเก่าที่บันทึกไว้ก่อนระบบมีหลายสาขา) จะขึ้นว่า "ไม่ระบุสาขา" — ไม่ใช่ข้อผิดพลาด แต่ถ้าอยากให้ตัวเลขรายสาขาครบ ให้เข้าไปแก้สาขาของเครื่องเหล่านั้นที่หน้า สต๊อก

🔧 เครื่องที่กำลังซ่อมอยู่ เคยขึ้นเป็นตัวอักษรอังกฤษ IN_REPAIR บนตาราง ตอนนี้แสดงเป็น "กำลังซ่อม" แล้ว

🖨️ ใบพิมพ์รายงานนี้ยาวหลายหน้าตามจำนวนเครื่อง ซึ่งถูกต้อง — ถ้ารู้สึกว่าเปลืองกระดาษ ให้กดลิงก์ "พิมพ์แล้วเปลืองกระดาษ?" ใต้ปุ่มพิมพ์

11.1 ภาษีเงินได้บุคคลธรรมดา (ภ.ง.ด.94/90) ⭐ ใหม่

📍 เลือก: /reports → ภาษีเงินได้บุคคลธรรมดา (ภ.ง.ด.94/90) 👤 สำหรับ: ร้านที่ไม่ได้จดเป็นนิติบุคคล (บุคคลธรรมดา) — ทั้งร้านที่จด VAT และไม่จด VAT

วัตถุประสงค์: คำนวณภาษีเงินได้สำหรับเจ้าของกิจการที่เป็น<strong>บุคคลธรรมดา</strong> ภายใต้มาตรา 40(8) (เงินได้จากการพาณิชย์) — ครอบคลุมทั้ง ภ.ง.ด.94 (กลางปี) และ ภ.ง.ด.90 (เต็มปี)

ก่อนใช้งาน — ตั้งค่าที่ /settings → ภาษีเงินได้ (ภ.ง.ด.):

  1. ประเภทผู้เสียภาษี — เลือก "บุคคลธรรมดา" (นิติบุคคลยังไม่รองรับ)
  2. วิธีหักค่าใช้จ่าย — เลือก:
    • หักเหมา 60% (แนะนำ) — ระบบหักให้อัตโนมัติ ไม่ต้องเก็บใบเสร็จรายจ่าย
    • หักตามจริง — ใช้ต้นทุนจริง (รับซื้อ + อะไหล่ที่เบิก + เงินเดือนพนักงาน) เหมาะถ้ารายจ่าย > 60%
  3. เลขผู้เสียภาษี 13 หลัก (ใช้บัตรประชาชนเจ้าของ — optional แต่จะแสดงในเอกสาร)
  4. ค่าลดหย่อน — แบ่ง 4 กลุ่ม ตามแบบ ภ.ง.ด.90 ปี 2568:
    • กลุ่ม 1 ส่วนตัวและครอบครัว: ส่วนตัว 60k, คู่สมรส, จำนวนบุตร, จำนวนพ่อแม่
    • กลุ่ม 2 การออมและการลงทุน: ประกันสังคม, ประกันชีวิต/สุขภาพ, RMF, SSF, กองทุนสำรองเลี้ยงชีพ
    • กลุ่ม 3 สินทรัพย์และมาตรการรัฐ: ดอกเบี้ยบ้าน, Thai ESG, ช้อปดีมีคืน/Easy E-Receipt, Solar rooftop
    • กลุ่ม 4 เงินบริจาค: บริจาคทั่วไป, บริจาคการศึกษา (×2), พรรคการเมือง

ขั้นตอนดูรายงาน:

  1. เลือก ประเภทรายงาน: "ภาษีเงินได้บุคคลธรรมดา (ภ.ง.ด.94/90)"
  2. เลือก ช่วงเวลา: ครึ่งปีแรก (ภ.ง.ด.94) / ทั้งปี (ภ.ง.ด.90) / ช่วงที่กำหนด
  3. เลือก ปีภาษี (ปฏิทินพุทธ-คริสต์)
  4. กด "โหลดรายงาน"

ผลลัพธ์ที่แสดง:

  • 4 การ์ดสรุป — รายได้รวม / หักค่าใช้จ่าย / หักค่าลดหย่อน / ภาษีต้องชำระ (สีฟ้าเด่น)
  • คอลัมน์ซ้าย — math chain: รายได้ → หักค่าใช้จ่าย → หักค่าลดหย่อน → เงินได้สุทธิที่ต้องเสียภาษี
    • ค่าลดหย่อนแสดงแบ่งตาม 4 กลุ่ม ตามแบบ ภ.ง.ด.90 ราชการ
    • กรณีรายได้เกิน 1 ล้าน — มีกล่องเปรียบเทียบ ม.48(2) (วิธีก้าวหน้า vs 0.5%) แสดงว่าใช้วิธีไหน
  • คอลัมน์ขวา — ตารางอัตราภาษีก้าวหน้า 8 ขั้น (0/5/10/15/20/25/30/35%) แต่ละช่วงแสดงฐาน + ภาษีในช่วงนั้น
  • กล่องสรุปสุดท้าย — ภาษีรวมสีฟ้า cyan-7 + ฉลาก ภ.ง.ด.94/90 ปีภาษี + วิธีคำนวณที่ใช้

📜 กฎ ม.48(2): ผู้มีรายได้จาก ม.40(8) เกิน <strong>1,000,000 บาท/ปี</strong> ต้องเปรียบเทียบ 2 วิธี และเสียภาษีตามวิธีที่<strong>ได้ตัวเลขสูงกว่า</strong>: (a) อัตราก้าวหน้า 8 ขั้น vs (b) 0.5% × รายได้รวม ระบบเปรียบเทียบและเลือกวิธีที่ถูกต้องให้อัตโนมัติ

พิมพ์เอกสาร ภ.ง.ด. (ใหม่):

  1. กดปุ่ม "พิมพ์ ภ.ง.ด.94" หรือ "พิมพ์ ภ.ง.ด.90" ที่มุมขวา
  2. หน้าต่าง Modal preview เปิดขึ้น — A4 portrait, accountant-summary style
  3. มี 4 sections: ก. รายได้ / ข. ค่าใช้จ่าย / ค. ค่าลดหย่อน / ง. การคำนวณภาษีก้าวหน้า
  4. กล่องสรุปสุดท้าย "ภาษีที่ต้องชำระ" สีฟ้า + ลายเซ็น 2 ช่อง (ผู้เสียภาษี / ผู้ทำบัญชี)
  5. กด "พิมพ์" → เปิด print dialog ของเบราว์เซอร์

⚠️ ข้อสำคัญ: เอกสารฉบับนี้เป็น<strong>เอกสารอ้างอิง</strong>เท่านั้น — การยื่นภาษีจริงต้องผ่าน <strong>e-Filing</strong> ของกรมสรรพากรที่ <a href="https://efiling.rd.go.th/">efiling.rd.go.th</a> ตัวเลขในเอกสารคำนวณจากข้อมูลในระบบ MobileHub และต้องตรวจสอบโดยผู้เสียภาษีอีกครั้งก่อนยื่น

กำหนดการยื่นจริง:

  • ภ.ง.ด.94 (ครึ่งปีแรก ม.ค.–มิ.ย.) — ยื่นช่วง 1 ก.ค. – 30 ก.ย.
  • ภ.ง.ด.90 (เต็มปี) — ยื่นช่วง 1 ม.ค. – 31 มี.ค. ของปีถัดไป

ทำไมเหมาะกับร้านมือถือ?

  • ร้านส่วนใหญ่รายได้ต่ำกว่า 1.8 ล้าน/ปี ไม่ต้องจด VAT แต่<strong>ยังต้องยื่นภาษีเงินได้</strong>
  • การหักเหมา 60% ช่วยให้คำนวณง่าย ไม่ต้องเก็บใบเสร็จรายจ่ายแยก
  • ใช้ข้อมูลจากระบบ MobileHub ที่มีอยู่แล้ว (Sale + Repair → รายได้, Purchase + Parts + Payroll → รายจ่าย)
  • ตารางอัตราก้าวหน้าโชว์ให้เห็นชัด: คุณจ่าย 35% เฉพาะส่วนเกิน 5 ล้าน ไม่ใช่ทั้งก้อน

11A. ภาษี (เมนูใหม่ — /tax) ⭐ NEW

📍 เมนูใหม่บน sidebar: "ภาษี" — section header + 4 sub-items 👤 สิทธิ์: ADMIN, OWNER

วัตถุประสงค์: รวบรวมเมนูที่เกี่ยวกับ<strong>ภาษี</strong>ทั้งหมดไว้ที่เดียว — ตั้งค่า, คำนวณ, พิมพ์เอกสาร เพื่อใช้งานในช่วงเตรียมยื่นภาษี

โครงสร้างเมนู

📊 ภาษี
├── 🏛 ภาพรวม                /tax           — Dashboard + กำหนดยื่น + Quick stats
├── 🧮 ภ.ง.ด.94/90 (PIT)      /tax/pit       — คำนวณภาษีเงินได้บุคคลธรรมดา (8-tier progressive + ม.48(2))
├── 🏢 ภ.ง.ด.50/51 (CIT)      /tax/cit       — คำนวณภาษีเงินได้นิติบุคคล (SME 0/15/20% หรือ Non-SME 20%)
├── ⚖️  ภ.พ.30 (VAT)           /tax/vat       — สรุปภาษีมูลค่าเพิ่มรายเดือน
├── 💰 ภ.ง.ด.3/53 (WHT)       /tax/wht       — สรุปหัก ณ ที่จ่ายตามผู้รับ + Export CSV
└── ⚙️  ตั้งค่าภาษี              /tax/settings  — entityType + วิธีหักค่าใช้จ่าย + ค่าลดหย่อน 4 กลุ่ม

11A.1 ภาพรวมภาษี (/tax)

หน้าศูนย์กลางสำหรับงานภาษี แสดง:

  • Status alert — แจ้งเตือนถ้าตั้งค่ายังไม่ครบ (entityType / taxId / ค่าลดหย่อน)
  • 4 stat cards — รายได้ YTD / ภาษีเงินได้ประมาณการ / VAT สุทธิเดือนนี้ / สถานะการตั้งค่า
  • กำหนดยื่นถัดไป — รายการ ภ.พ.30 / ภ.ง.ด.94 / ภ.ง.ด.90 พร้อมวันที่ + จำนวนวันที่เหลือ (สีแดงถ้า ≤ 7 วัน)
  • เครื่องมือภาษี 4 cards — คลิกไป sub-page ตามต้องการ

11A.2 ภ.ง.ด.94/90 (/tax/pit)

หน้าคำนวณภาษีเงินได้บุคคลธรรมดา (รายละเอียดเดียวกับ §11.1 ก่อนแยกเมนู) — กดปุ่มภายในหน้าเพื่อพิมพ์เอกสารอ้างอิง

11A.3 ภ.ง.ด.50/51 — ภาษีเงินได้นิติบุคคล (/tax/cit) ⭐ NEW

📍 เส้นทาง: /tax/cit (sub-menu ของ /tax) 👤 เงื่อนไข: tenant.entityType = CORPORATION เท่านั้น (เปลี่ยนได้ที่ /tax/settings)

คำนวณภาษีจากกำไรสุทธิ (Net Profit = รายได้ − รายจ่าย) ตามอัตรา:

ประเภทเกณฑ์อัตรา
SMEรายได้ ≤ 30,000,000 บาท/ปี0–300k = 0% · 300k–3M = 15% · เกิน 3M = 20%
Non-SMEรายได้ > 30 ล้านflat 20% ทั้งหมด

Workflow:

  1. ไปที่ /tax/cit
  2. เลือกรอบบัญชี (H1 = ภ.ง.ด.51 ครึ่งปี / FULL = ภ.ง.ด.50 ทั้งปี) + ปี
  3. ระบบโหลดข้อมูลและแสดง:
    • 4 stat cards: รายได้รวม / รายจ่ายรวม / กำไรสุทธิ (เขียวถ้า > 0, แดงถ้าขาดทุน) / ภาษีต้องชำระ + SME badge
    • งบกำไรขาดทุน (P&L) — แยก revenue 2 ตัว (ขาย + ซ่อม) − expense 4 ตัว (ต้นทุนสินค้า + อะไหล่ + เงินเดือน + operating)
    • Tax bracket table — แสดงทุก bracket พร้อม taxable + tax — เห็นชัดว่าเสียในแต่ละช่วงเท่าไร
  4. ถ้าขาดทุน → Alert แจ้งว่าไม่ต้องเสียภาษี + ข้อแนะนำ loss carry forward 5 ปี
  5. ถ้าครึ่งปี (ภ.ง.ด.51) → Alert แจ้งว่าใช้เป็นเครดิตหักจาก ภ.ง.ด.50 ตอนสิ้นปี

Deadline:

  • ภ.ง.ด.51: ภายใน 2 เดือนหลังสิ้นรอบครึ่งปีบัญชี (ปกติ 31 ส.ค.)
  • ภ.ง.ด.50: ภายใน 150 วันหลังสิ้นรอบบัญชี (ปกติ 30 พ.ค.)

⚠️ คำเตือน: ผลคำนวณนี้เป็นการประมาณการเบื้องต้น — รายการค่าใช้จ่ายบางตัวอาจเป็น "ค่าใช้จ่ายต้องห้าม" ตาม ม.65 ทวิ (เช่น ค่ารับรองเกิน 0.3% ของรายได้, ค่าเสื่อมราคารถยนต์ส่วนเกิน 1 ล้าน, ฯลฯ) ต้อง บวกกลับ ในการคำนวณภาษีจริง — ปรึกษาผู้สอบบัญชีก่อนยื่น

⚠️ ข้อจำกัด: ระบบยังไม่รองรับ:

  • Loss carry forward อัตโนมัติ (ขาดทุนยกมาจากปีก่อน)
  • Add-back ค่าใช้จ่ายต้องห้าม (ม.65 ทวิ) อัตโนมัติ
  • BOI / IBC / RD privilege rates
  • Half-year prepayment credit (ต้องบันทึกเอง)

11A.4 ภ.พ.30 (/tax/vat)

หน้าสรุปภาษีมูลค่าเพิ่มรายเดือน สำหรับร้านที่จดทะเบียน VAT — เลือกช่วงเดือน + ปุ่มพิมพ์ ภ.พ.30 + Card รายเดือน

⭐ ใหม่ 27 ส.ค. 2569 — เงินคืนโผล่ในตารางแล้ว (แถว "ใบลดหนี้")

เดิม การ์ดสรุปหักเงินคืนให้แล้ว แต่ตารางด้านล่างไม่มีแถวเงินคืนเลย ⇒ ร้านที่รวมคอลัมน์ในตารางเอง (หรือรวมจากไฟล์ Excel ที่โหลดไป) จะได้ ภาษีขายสูงกว่าความจริงเท่ายอดเงินคืนของเดือนนั้น

  • ตอนนี้มีแถวชนิด ใบลดหนี้ เพิ่มขึ้นมา · ยอดและ VAT เป็นค่าติดลบ
  • ลงวันที่ วันที่คืนเงินจริง ไม่ใช่วันที่ออกใบกำกับเดิม (ใบลดหนี้ออกในเดือนที่เหตุการณ์เกิด)
  • อ้างอิง เลขใบลดหนี้ (CN-…) + เลขบิลเดิม + เหตุผลที่คืน (ป.รัษฎากร ม.86/10 บังคับให้ระบุสาเหตุ)

✅ ผลรวมของคอลัมน์ในตาราง = ตัวเลขบนการ์ดสรุป โดยไม่ต้องจำว่าต้องลบแถวไหนออกเอง 🔴 ตัวเลขบนการ์ดสรุปไม่ได้เปลี่ยนเลยสักช่อง — มันถูกอยู่แล้ว สิ่งที่เปลี่ยนคือตารางและไฟล์ Excel ⚠️ บิลของ สาขาที่ไม่ได้จดทะเบียน VAT จะได้แถวใบลดหนี้ที่ VAT = 0 ไม่ใช่เปอร์เซ็นต์ที่ระบบแต่งขึ้น

11A.5 ภ.ง.ด.3/53 — หัก ณ ที่จ่าย (/tax/wht) ⭐ NEW

📍 เส้นทาง: /tax/wht 👤 สิทธิ์: ADMIN, OWNER

สรุปการหัก ณ ที่จ่ายรายเดือน สำหรับยื่น ภ.ง.ด.3 (จ่ายให้บุคคลธรรมดา) และ ภ.ง.ด.53 (จ่ายให้นิติบุคคล)

ใช้ข้อมูลจาก: /expenses ที่กรอก hasWht=true + whtRate + whtPayeeName + whtPayeeTaxId

การจำแนกแบบ:

มี taxId 13 หลักตัวเลขแรกแบบ
ใช่"0"ภ.ง.ด.53 (นิติบุคคล)
ใช่อื่นๆภ.ง.ด.3 (บุคคลธรรมดา)
ไม่มี—ภ.ง.ด.3 (default)

Workflow:

  1. ไป /tax/wht → เลือก เดือน + ปี + กรองแบบ (ทั้งหมด/ภ.ง.ด.3/ภ.ง.ด.53)
  2. ระบบแสดง:
    • 4 stat cards: จำนวนรายการ / เงินที่จ่าย / ภาษีที่หัก (สีส้มเด่น) / จำนวนผู้รับ unique
    • สรุปตามอัตรา (1% / 3% / 5% / 15%)
    • Tab "ตามผู้รับเงิน" — group by payee + taxId พร้อม badge แบบ
    • Tab "รายการทั้งหมด" — transaction list
  3. กดปุ่ม CSV → ดาวน์โหลด CSV format ที่ใช้กรอก e-Filing ได้
  4. ยื่นที่ https://efiling.rd.go.th ภายในวันที่ 7 ของเดือนถัดไป

💡 เคล็ดลับ: กรอก whtPayeeTaxId ในรูปแบบ 13 หลัก ขีด/ไม่ขีดก็ได้ — ระบบ strip non-digit ก่อนเก็บ

11A.6 ตั้งค่าภาษี (/tax/settings)

หน้าฟอร์มตั้งค่าภาษี (entityType + deduction method + 4-group allowance) — เดิมอยู่ใน /settings ย้ายมาที่นี่เพื่อให้เป็นกลุ่มเดียวกัน

📝 ประวัติการ migration:

  • ก่อน 11 พ.ค. 2569: PIT + VAT อยู่ใน /reports dropdown และ tax settings อยู่ใน /settings
  • หลัง: ทุกอย่างย้ายมาอยู่ใน /tax — URL เก่าจะ redirect อัตโนมัติ (/reports?type=pit → /tax/pit)

12. เอกสารพิมพ์ในระบบ

ระบบ MobileHub ออกเอกสารพิมพ์ A4/Thermal ได้ทั้งหมด 12 ประเภท ใช้รูปแบบ design system เดียวกัน (header 2-col + accent color cascade ผ่าน CSS variable + ลายเซ็นมาตรฐาน + ฟอนต์ Kanit). ทุกเอกสารพิมพ์ผ่านเบราว์เซอร์ — ไม่ต้องลง driver พิเศษ

12.0 เลขที่เอกสาร (Document Numbering)

ทุกเอกสารทางการเงินในระบบใช้เลขที่ running serial ต่อเนื่องตลอดปีภาษี ตามประกาศอธิบดีสรรพากร ว.196/2553 (ใบกำกับภาษีต้องมีเลขเรียงต่อเนื่อง)

Format มาตรฐาน: {PREFIX}-{branchCode}-{BEyear}-{seq:04}

ช่องคำอธิบายตัวอย่าง
PREFIXรหัสประเภทเอกสารRC (ใบเสร็จขาย), RCV (รับซ่อม), QUO (เสนอราคา), INV (ใบแจ้งหนี้ซ่อม), RCP (ใบเสร็จซ่อม), SLP (สลิปย่อ), WRT (ใบประกัน), CLM (ใบเคลม)
branchCodeรหัสสาขา (จาก Branch.code)HQ, CM01, BKK01
BEyearปี พ.ศ.2569, 2570
seqลำดับ 4 หลัก0001, 0023, 1547

ตัวอย่าง:

  • RC-HQ-2569-0001 — ใบเสร็จขายใบแรกของสาขา HQ ปี 2569
  • RCV-CM01-2569-0042 — ใบรับซ่อมใบที่ 42 ของสาขาเชียงใหม่ ปี 2569
  • WRT-HQ-2569-0015 — ใบประกันใบที่ 15 ของสาขา HQ ปี 2569

กฎการ reset:

  • Counter reset อัตโนมัติทุก 1 มกราคม (เริ่ม 0001 ใหม่ในปี พ.ศ. ถัดไป)
  • แยก counter ต่อสาขา — สาขา HQ กับ CM01 มีลำดับเลขของตัวเอง ไม่กวนกัน
  • แยก counter ต่อประเภทเอกสาร — RC กับ RCV คนละ counter

ป้องกัน race condition:

  • ใช้ Postgres INSERT ... ON CONFLICT DO UPDATE RETURNING (atomic upsert) → 2 POS เปิดพร้อมกันไม่ได้เลขซ้ำกันเลย
  • ตาราง DocumentSerial (tenantId + branchId + docType + year พ.ศ.) เก็บ counter ปัจจุบัน

⚠️ ใบเก่าก่อน 12 พ.ค. 2569 ใช้ format เดิม RC-YYYYMMDD-NNNN (ค.ศ. + reset รายวัน) — ระบบยังเก็บไว้ใน DB เหมือนเดิม ไม่ rewrite. ใบใหม่ตั้งแต่ 12 พ.ค. 2569 ใช้ format ใหม่ทั้งหมด

12.0A เงื่อนไขท้ายเอกสาร — แก้เองได้ (/masters/document-terms) ⭐ NEW

ข้อความ "เงื่อนไขและข้อตกลง" ที่พิมพ์ท้ายเอกสารแต่ละใบ ร้านแก้เองได้ ไม่ต้องแจ้งผู้พัฒนา — ร้านหนึ่งรับประกัน 30 วัน อีกร้าน 90 วัน บางร้านไม่รับประกันจอแตก เงื่อนไขพวกนี้ต่างกันทุกร้าน

เข้าใช้งาน: ข้อมูลหลัก → เงื่อนไขเอกสาร (เฉพาะ OWNER / ADMIN)

แก้ได้ 10 จุด:

กลุ่มรายการพิมพ์ตรงไหน
งานซ่อมใบรับซ่อมท้ายใบรับซ่อม (A4)
ใบเสนอราคาท้ายใบเสนอราคา
ใบเสร็จรับเงิน (งานซ่อม)ท้ายใบเสร็จ A4
ใบเสร็จเล็ก (สลิป 80mm)เหนือ "ขอบคุณที่ใช้บริการ" — ควรสั้น 1-2 บรรทัด
การรับประกันใบรับประกันการซ่อมท้ายใบประกัน
ความคุ้มครอง (กล่องเขียว)ค่าตั้งต้นของช่อง "ความคุ้มครอง" ตอนออกใบประกัน
ข้อยกเว้น (กล่องแดง)ค่าตั้งต้นของช่อง "ข้อยกเว้น" ตอนออกใบประกัน
ขาย / รับซื้อใบเสร็จขายสินค้า (POS)ทั้งแบบ A4 และสลิป
ใบรับซื้อเครื่องมือสองท้ายสัญญาซื้อขาย

วิธีใช้:

  1. เลือกเอกสารจากรายการทางซ้าย (มือถือ = เลือกจาก dropdown)
  2. พิมพ์เงื่อนไข 1 บรรทัด = 1 ข้อ — ระบบใส่เลขข้อ (1. 2. 3.) ให้เอง
  3. ดู "ตัวอย่างที่จะพิมพ์บนเอกสาร" ใต้ช่องพิมพ์ — ตรงกับที่ออกมาบนกระดาษจริง
  4. กด บันทึก

ปุ่ม / สวิตช์ที่มี:

ตัวทำอะไร
แสดงบนเอกสาร (สวิตช์)ปิด = ไม่พิมพ์บล็อกเงื่อนไขบนเอกสารใบนั้นเลย (ข้อความเดิมยังเก็บไว้)
ใช้กับทุกสาขา (ติ๊ก)บันทึกข้อความเดียวกันให้ทุกสาขาพร้อมกัน (แสดงเมื่อมีมากกว่า 1 สาขา)
คืนค่าเริ่มต้นลบข้อความที่แก้ไว้ กลับไปใช้เงื่อนไขมาตรฐานของระบบ

ข้อควรรู้:

  • เงื่อนไข แยกตามสาขา — สาขาที่กำลังแก้แสดงอยู่ในกล่องฟ้าด้านบน (เปลี่ยนสาขาที่มุมขวาบน)
  • 🔴 ต้องเลือกสาขาก่อน — ตัวเลือก "ทุกสาขา" ใช้กับหน้านี้ไม่ได้ (แก้ 19 ส.ค. 2569) เพราะเงื่อนไขเก็บ 1 ชนิดเอกสาร = 1 ข้อความต่อสาขา จึงไม่มีคำตอบเดียวว่า "ทุกสาขา" ควรแสดงข้อความของสาขาไหน · เดิมเลือก "ทุกสาขา" แล้วหน้านี้จะโชว์ข้อความมาตรฐานของระบบทุกใบ ซึ่งอ่านได้ว่า "ร้านนี้ไม่เคยแก้เงื่อนไขเลย" ทั้งที่แก้ไว้ครบทุกสาขา · และกดบันทึกก็ขึ้นว่า "ไม่พบสาขา" ซึ่งชวนให้เข้าใจว่าสาขาถูกลบไปแล้ว · ตอนนี้จะขึ้นกล่องส้มบอกให้เลือกสาขาก่อน · ถ้าต้องการให้ข้อความเดียวกันมีผลทุกสาขา ให้ เลือกสาขาใดสาขาหนึ่ง แล้วติ๊ก "ใช้กับทุกสาขา" ตอนกดบันทึก (ทำได้เหมือนเดิมทุกประการ)
  • 🔴 ถ้าเลือก "ทุกสาขา" ค้างไว้แล้วกดพิมพ์เอกสาร จะมีป้ายส้มเตือน (เพิ่ม 19 ส.ค. 2569) เดิมกระดาษจะออกเป็นข้อความมาตรฐานของระบบเงียบ ๆ ทั้งที่ร้านตั้งเงื่อนไขของตัวเองไว้แล้ว · ใบเสร็จขายและใบรับซื้อจะ อ่านเงื่อนไขจากสาขาของบิลใบนั้นเอง แล้ว — พิมพ์บิลเก่าของอีกสาขาซ้ำก็ได้ข้อความที่ถูก
  • แก้แล้ว มีผลกับเอกสารที่พิมพ์ใหม่ทันที — เอกสารที่ออกไปแล้วไม่เปลี่ยนตาม
  • ⭐ เครื่องอื่นที่เปิดหน้าค้างไว้จะได้ข้อความใหม่เองภายใน 45 วินาที ไม่ต้องกดรีเฟรช — เจ้าของแก้ที่เครื่องหลังร้าน แล้วเครื่องหน้าเคาน์เตอร์ที่เปิดหน้าเอกสารค้างอยู่จะพิมพ์ข้อความใหม่ได้เอง (เดิมต้องกด F5 ที่เครื่องนั้นก่อน ไม่งั้นจะพิมพ์ข้อความชุดเก่าออกมาโดยไม่มีอะไรบอก)
  • ⭐ ถ้าโหลดเงื่อนไขไม่ได้ จะมีป้ายแดงเตือนบนจอ ว่ากระดาษกำลังจะออกเป็นข้อความมาตรฐานของระบบ ไม่ใช่ของร้าน — เกิดตอนเน็ตสะดุด ให้ตรวจอินเทอร์เน็ตแล้วรีเฟรชก่อนพิมพ์เอกสารให้ลูกค้า (เดิมพิมพ์ข้อความมาตรฐานออกไปเงียบ ๆ โดยไม่มีอะไรบอก)
  • ร้านที่ยังไม่เคยแก้ ใช้ข้อความมาตรฐานของระบบเหมือนเดิม — ไม่ต้องทำอะไร
  • รับเฉพาะ ข้อความธรรมดา ไม่รองรับ HTML/ตัวหนา/สี (เพื่อความปลอดภัย — ถ้าพิมพ์ <b> ลงไป จะพิมพ์ออกมาเป็นตัวอักษร <b> ตรง ๆ)
  • จำกัด 2,000 ตัวอักษร และ 15 ข้อต่อเอกสาร

12.1 เอกสารฝั่งขาย-รับซื้อ

เอกสารที่หน้ารูปแบบสีธีม
ใบเสร็จขายสินค้า (POS)/sales (auto-open หลัง checkout)thermal 80mm + A4 toggleเขียว
ใบรับซื้อโทรศัพท์มือสอง/purchase (ปุ่มพิมพ์ในแต่ละ row)A4 + คำรับรอง 5 ข้อ + ลายเซ็น 3 ฝ่าย + ช่องสำเนาบัตร ปชช.ส้ม-แดง (เน้นกฎหมาย)

12.2 เอกสารงานซ่อม (/repair-documents)

เอกสารเมื่อใช้รูปแบบ
ใบรับซ่อม (INTAKE_RECEIPT)ตอนรับเครื่องเข้าซ่อมA4 — แสดงรูปถ่ายเครื่อง + อาการ + คำเตือน "ราคาแจ้งภายหลัง"
ใบเสนอราคา (QUOTATION)หลังตรวจสอบ ก่อนซ่อมA4 — รายการอะไหล่ + ค่าแรง + VAT
ใบเสร็จรับเงิน (RECEIPT)หลังซ่อมเสร็จ ลูกค้ารับเครื่องA4 — items table + totals + payment + signatures
ใบเสร็จเล็ก (SMALL_RECEIPT)สลิปย่อ (เครื่องพิมพ์ความร้อน)สลิป — ความกว้างตามที่ตั้งไว้ที่สาขา (58 หรือ 80 มม.)
ใบประกัน (WARRANTY_CARD)ออกพร้อมส่งคืนเครื่องA4 — banner ระยะประกัน + ✓ ความคุ้มครอง / ✗ ข้อยกเว้น

⚠️ ประกันเริ่มนับจาก "วันที่กดออกใบประกัน" ไม่ใช่วันที่ลูกค้ามารับเครื่อง

วันเริ่มกับวันหมดถูกพิมพ์ลงใบตอนกดออก และ แก้ย้อนหลังไม่ได้ ถ้าออกใบตั้งแต่วันที่ซ่อมเสร็จ แต่ลูกค้ามารับอีก 3 วันถัดมา ลูกค้าจะเสียประกันไป 3 วัน

ถ้าอยากให้ประกันเริ่มนับวันที่ลูกค้ารับเครื่องจริง ให้กด "ส่งมอบแล้ว" ก่อน แล้วค่อยออกใบประกัน (ระบบจะขึ้นกล่องเตือนสีเหลืองให้เองถ้ากดออกใบตอนที่ยังไม่ได้ส่งมอบ)

⚙️ ตั้งค่าความกว้างกระดาษใบเสร็จ

ไปที่ ตั้งค่า → ข้อมูลสาขา → เครื่องพิมพ์ใบเสร็จ แล้วเลือกให้ตรงกับม้วนกระดาษที่ร้านใช้จริง

ขนาดใช้กับ
58 มม.ม้วนเล็ก (ที่ขายทั่วไปคือ 57–58 มม.)
80 มม.ม้วนใหญ่ — ค่าเริ่มต้นของระบบ
  • ใต้ตัวเลือกมี แถบกระดาษจำลองตามสัดส่วนจริง เอาม้วนกระดาษมาทาบเทียบดูได้
  • ค่านี้ใช้กับ ทั้งใบเสร็จขายหน้าร้าน และใบเสร็จเล็กของงานซ่อม
  • ตั้งแยกได้ราย สาขา (แต่ละสาขาใช้เครื่องพิมพ์คนละเครื่องได้)
  • ถ้าตั้งไม่ตรงกับม้วนจริง ข้อความจะตกขอบกระดาษ

🖨️ ตั้งค่าเบราว์เซอร์ก่อนพิมพ์ครั้งแรก — ทำครั้งเดียวต่อเครื่อง (สำคัญมาก)

ระบบสั่งพิมพ์ยาวเท่าเนื้อหาในใบเสร็จอยู่แล้ว แต่เบราว์เซอร์จะทำตามก็ต่อเมื่อตั้งค่าตามนี้ครบ ถ้าไม่ตั้ง เครื่องจะป้อนกระดาษเปล่ายาวต่อท้ายทุกใบ (ร้านจริงเคยเสียกระดาษยาวเป็นเมตร)

เมื่อกดปุ่มพิมพ์ จะมีหน้าต่างพิมพ์ของเบราว์เซอร์ขึ้นมา — ตั้งตามนี้:

#ตั้งอะไรตั้งเป็นหมายเหตุ
1ส่วนหัวและส่วนท้ายเอาติ๊กออก ⭐อยู่ใต้ "การตั้งค่าเพิ่มเติม" ต้องกดขยายก่อนถึงเห็น — ข้อนี้สำคัญที่สุด
2ระยะขอบค่าเริ่มต้นห้ามตั้ง "ไม่มี" หรือ "กำหนดเอง"
3ขนาดกระดาษมีคำว่า Roll / 58mm / 80mmห้ามเป็น A4
4มาตราส่วนค่าเริ่มต้น (100%)ถ้าย่อ/ขยาย ความสูงที่ระบบคำนวณจะไม่ตรง
5ปลายทางเครื่องพิมพ์สลิปไม่ใช่ "บันทึกเป็น PDF"

⚠️ ทำไมข้อ 1 ถึงสำคัญที่สุด เบราว์เซอร์เปิด "ส่วนหัวและส่วนท้าย" ไว้ตั้งแต่แรก และเมื่อเปิดอยู่ มันต้องกันพื้นที่ขอบ ไว้พิมพ์ที่อยู่เว็บ/วันที่/เลขหน้า จึงไม่สนใจขนาดกระดาษที่ระบบสั่ง ผลคือใบเสร็จที่ควรพอดี 1 หน้า ล้นไปหน้าที่ 2 แล้วเครื่องเดินกระดาษอีกเต็มหน้า ซึ่งเกือบทั้งหน้าเป็นกระดาษเปล่า

  • เบราว์เซอร์จะจำค่าเหล่านี้ไว้ ไม่ต้องตั้งใหม่ทุกครั้งที่พิมพ์
  • แต่ ต้องตั้งแยกทุกเครื่องที่ใช้พิมพ์ เพราะเป็นค่าของเครื่อง ไม่ใช่ของร้าน (เปลี่ยนเครื่อง / เปลี่ยนเบราว์เซอร์ / ล้างข้อมูลเบราว์เซอร์ = ต้องตั้งใหม่)
  • ดูขั้นตอนนี้ซ้ำได้ตลอดที่ ตั้งค่า → เครื่องพิมพ์ใบเสร็จ หรือกดลิงก์ "พิมพ์แล้วกระดาษยาวเกินไป?" ใต้ปุ่มพิมพ์ในหน้าต่างใบเสร็จ

🖨️ เอกสาร A4 พิมพ์ออกมาได้ 2 แผ่น — แก้ที่หน้าต่างพิมพ์ ⭐ (19 ส.ค. 2569)

เอกสาร A4 ทุกใบถูกจัดให้พอดี 1 แผ่น อยู่แล้ว แต่ถ้าเครื่องไหนยังไม่เคยเอาติ๊ก "ส่วนหัวและส่วนท้าย" ออก เบราว์เซอร์จะกันพื้นที่ขอบบน-ล่างไว้พิมพ์ที่อยู่เว็บ/วันที่/เลขหน้า เหลือที่ให้เนื้อหาจริงแค่ 276.7 มม. จาก 297 มม. — ใบที่สูงกว่านั้นจะล้นไปแผ่นที่ 2 (แผ่นที่ 2 มีเนื้อหานิดเดียว)

เป็นสวิตช์ตัวเดียวกับที่แก้เรื่องสลิปกระดาษยาวข้างบน ปิดครั้งเดียวต่อเครื่อง แก้ได้ทุกใบพร้อมกัน

#ตั้งอะไรตั้งเป็นหมายเหตุ
1ส่วนหัวและส่วนท้ายเอาติ๊กออก ⭐อยู่ใต้ "การตั้งค่าเพิ่มเติม" ต้องกดขยายก่อนถึงเห็น — ข้อนี้สำคัญที่สุด
2ขนาดกระดาษA4ห้ามเป็น Letter ซึ่งสั้นกว่า A4 ราว 18 มม. — เลือกผิดล้นแน่นอน
3ระยะขอบค่าเริ่มต้นเอกสารกำหนดขอบมาในตัวแล้ว ตั้ง "กำหนดเอง" ให้กว้างขึ้นจะล้น
4มาตราส่วนค่าเริ่มต้น (100%)ตั้งเกิน 100% จะล้นทันที
  • ดูขั้นตอนนี้ซ้ำได้ตลอดโดยกดลิงก์ "พิมพ์แล้วได้ 2 แผ่น?" ที่มุมซ้ายล่างของหน้าต่าง ตัวอย่างเอกสาร — มีทั้งที่หน้า เอกสารงานซ่อม และหน้า ประกันงานซ่อม
  • ใบที่สูงที่สุดในระบบคือ ใบส่งคืนหลังเคลม (290.9 มม.) และ ใบรับซ่อม (284.3 มม.) → 2 ใบนี้จะได้กระดาษ 2 แผ่นแน่นอนถ้ายังไม่ได้เอาติ๊กออก
  • ถ้าตั้งครบทั้ง 4 ข้อแล้วยังได้ 2 แผ่น แปลว่าเนื้อหาในใบนั้นยาวเกิน 1 หน้าจริง (ชื่อ-ที่อยู่ยาว หรือมีรายการเยอะ) ลองย่อข้อความในช่องที่แก้เองได้ เช่น เงื่อนไขท้ายเอกสาร ที่หน้าตั้งค่า

ตัวอักษรบนใบเสร็จขายอ่านง่ายขึ้น ⭐ (10 ส.ค. 2569)

ร้านแจ้งว่าพิมพ์แล้ว "อ่านออกเฉพาะตัวหนังสือพิมพ์เข้ม" ส่วนบรรทัดเล็ก ๆ เช่นเลขติดตาม ที่อยู่ร้าน และเงื่อนไขท้ายใบ อ่านไม่ออก

สาเหตุคือเครื่องพิมพ์ความร้อนพิมพ์สีเทาไม่ได้ มันมีแค่ "จุดร้อน" กับ "ไม่ร้อน" ตัวอักษร สีเทาจึงถูกแตกเป็นลายจุด พอตัวเล็กด้วยก็เละจนอ่านไม่ออก แก้แล้วโดยเปลี่ยนทุกตัวอักษร บนใบเสร็จขายเป็นสีดำสนิท + ขยายตัวเล็กสุดขึ้น + เพิ่มความหนาเส้น ไม่ต้องตั้งอะไรเพิ่ม

⚠️ ผลข้างเคียงที่ต้องรู้: ใบเสร็จจะสูงขึ้นเล็กน้อย (ราว 7–11%)

ระบบวัดความสูงจริงก่อนสั่งพิมพ์อยู่แล้ว จึงไม่ล้นหน้า 2 โดยตัวมันเอง แต่ถ้าเครื่องไหนยังไม่ได้เอาติ๊ก "ส่วนหัวและส่วนท้าย" ออกตามตารางข้างบน จะเสี่ยงล้นมากกว่าเดิม — เครื่องที่ยังไม่ได้ตั้ง ควรตั้งให้เรียบร้อยก่อน

ตอนนี้ครอบ ทั้งใบเสร็จขายหน้า POS และใบเสร็จอย่างย่อของงานซ่อม แล้ว ทั้งสองใบใช้มาตราส่วนตัวอักษรชุดเดียวกัน จะได้ไม่มีใบไหนอ่านง่ายกว่าอีกใบ

ใบเสร็จงานซ่อมจะยาวขึ้นราว 5 มม. ต่อใบ ที่กระดาษ 80 มม. (จาก 190 เป็น 195 มม.) เพราะแถวข้อมูลตัวโตขึ้น — แลกกับการที่อ่านออก

เอกสาร A4 ทุกใบพิมพ์ออกมาคมขึ้น ⭐ (12 ส.ค. 2569)

ร้านแจ้งว่าพิมพ์ใบรับซ่อมด้วยเครื่องอิงค์เจ็ทแล้ว "ตัวหนังสือเบลอ" ทั้งที่หัวพิมพ์ปกติดี (ร้านส่งผลตรวจหัวพิมพ์มาแล้ว คมทุกเส้น ไม่ตัน) ตรวจแล้วพบว่าเป็นที่ระบบเรา ไม่ใช่ที่เครื่องพิมพ์ และมี 2 สาเหตุซ้อนกัน

1. ตัวหนังสือบนเอกสาร A4 ไม่เคยเป็นสีดำจริงเลยสักจุด — เป็นเทาอมน้ำเงิน ซึ่งเครื่องอิงค์เจ็ท พิมพ์ด้วยหมึกดำล้วนไม่ได้ ต้องผสมหมึกฟ้ากับชมพูทับลงไปทุกจุด ขอบตัวอักษรจึงเหลื่อมและฟุ้ง (ผลตรวจหัวพิมพ์ที่ร้านส่งมาแล้วขึ้นหมึกสีเต็มทุกช่อง กลายเป็นหลักฐานยืนยันข้อนี้พอดี)

2. ฟอนต์ Kanit ไม่เคยถูกโหลดในหน้าต่างพิมพ์เลย — เครื่องจึงพิมพ์ด้วยฟอนต์สำรองของ Windows ที่เส้นบางกว่า และทำให้การตั้ง "ตัวหนา" ในระบบไม่มีผลจริง

แก้แล้ว ครอบเอกสาร A4 ทุกใบในระบบ ไม่ต้องตั้งอะไรเพิ่มที่เครื่อง:

  • ตัวหนังสือเป็นสีดำจริง และสีเทาที่ใช้เป็นเทาไม่ผสมสี — เครื่องพิมพ์ด้วยหมึกดำล้วนได้
  • ใช้ฟอนต์ Kanit จริงทุกใบ ความหนาของตัวอักษรมีผลตามที่ตั้งไว้
  • ใบรับซ่อม: ตัวอักษรบรรทัดเล็กสุดขยายจาก 9 เป็น 11 — เงื่อนไขท้ายใบซึ่งเป็นส่วนที่ร้านถ่ายรูปมาให้ดูอ่านง่ายขึ้นชัดเจน
  • หัวเอกสารที่เป็นตัวอักษรขาวบนแถบสี (เช่น "ใบเสร็จรับเงิน / ใบกำกับภาษี" · "ใบลดหนี้ / Credit Note" · "แบบ ภ.พ.30" · หัวตารางในใบสรุปการมาทำงาน) เดิมพิมพ์ออกมาจางมากจนแทบอ่านไม่ออกบนเครื่องที่ไม่ได้ติ๊ก "กราฟิกพื้นหลัง" ในหน้าต่างพิมพ์ ตอนนี้ระบบบังคับพิมพ์แถบสีให้เสมอ ตัวอักษรจึงอ่านออกทุกเครื่อง

สิ่งที่ร้านจะสังเกตเห็น: หน้าตาตัวอักษรบนเอกสารเปลี่ยนไป (จากฟอนต์สำรองของ Windows เป็น Kanit) และเข้มขึ้นทุกใบ

ใบรับซ่อมจะยาวขึ้นราว 5 มม. เพราะตัวอักษรโตขึ้น — วัดแล้วยังอยู่ 1 หน้าเท่าเดิม เอกสารใบอื่นความสูงเท่าเดิมทุกใบ (เทียบก่อน/หลังการเปลี่ยนฟอนต์รอบนี้)

⚠️ "อยู่ 1 หน้า" ข้างบนหมายถึงเครื่องที่เอาติ๊ก "ส่วนหัวและส่วนท้าย" ออกแล้ว เครื่องที่ยังไม่ได้ปิด จะเหลือที่ให้เนื้อหาแค่ 276.7 มม. ซึ่งใบรับซ่อม (284.3 มม.) เกินอยู่ — ดูหัวข้อ "เอกสาร A4 พิมพ์ออกมาได้ 2 แผ่น" ข้างบน

แบบ ภ.พ.30 เลิกพิมพ์กระดาษหน้าที่ 2 เปล่า ๆ ⭐ (12 ส.ค. 2569)

เดิม ภ.พ.30 ล้นไปหน้าที่ 2 บนเครื่องที่ยังไม่ได้เอาติ๊ก "ส่วนหัวและส่วนท้าย" ออก (ดูตารางตั้งค่าเบราว์เซอร์ด้านบน) เพราะเนื้อหาสูงกว่าพื้นที่ที่เหลืออยู่ 13 มม.

หมายเหตุ (19 ส.ค. 2569): ตอนนั้น ภ.พ.30 เป็นใบเดียวที่วัดแล้วเกิน — วัดใหม่ทั้งชุด 14 ใบ พบว่ายังมีอีก 2 ใบที่เกินเช่นกัน (ใบส่งคืนหลังเคลม 290.9 มม. · ใบรับซ่อม 284.3 มม.) ทั้ง 2 ใบแก้ได้ด้วยการเอาติ๊กออกเหมือนกัน ดูหัวข้อ "เอกสาร A4 พิมพ์ออกมาได้ 2 แผ่น" ข้างบน

แก้แล้วโดยบีบระยะห่างระหว่างส่วนให้แน่นขึ้น — ตอนนี้พิมพ์ 1 หน้าทุกเครื่อง ไม่ว่าจะตั้งค่าเบราว์เซอร์ไว้แบบไหน

เนื้อหาครบเท่าเดิมทุกบรรทัด ไม่มีอะไรถูกตัดออก และขนาด ความเข้ม สีของตัวอักษรเท่าเดิมทุกจุด สิ่งที่ร้านจะสังเกตเห็นคือช่องไฟระหว่างส่วนแน่นขึ้น และเส้นสำหรับเซ็นชื่อสั้นลงเล็กน้อย (ยังเซ็นได้ปกติ)

ใครแก้ราคาค่าซ่อมได้บ้าง — เปลี่ยนแล้ว ⭐ (11 ส.ค. 2569)

เดิมทุกบทบาทแก้ราคางานซ่อมและตีตรา "รับเงินแล้ว" ได้ ตอนนี้จำกัดให้เฉพาะ เจ้าของ · ผู้ดูแล · ผู้จัดการ · ช่าง เท่านั้น

  • ช่างยังทำได้ทุกอย่างเหมือนเดิม — ลงราคา เบิกอะไหล่ เดินสถานะ ยกเลิกงาน
  • แคชเชียร์และพนักงานขายยังเดินสถานะและแก้หมายเหตุได้ตามปกติ แต่จะแก้ราคา · เบิกอะไหล่ · ยกเลิกงานที่รับเงินไปแล้ว ไม่ได้ (การยกเลิกงานที่ยังไม่ได้รับเงิน ยังทำได้ตามปกติ — เป็นงานประจำวันหน้าเคาน์เตอร์)
  • ถ้ากดแล้วขึ้นว่าไม่มีสิทธิ์ ให้ช่างหรือผู้จัดการเป็นคนทำแทน

สแกนใบรับซ่อมเก่าเก็บเงินไม่ได้แล้ว ⭐ (11 ส.ค. 2569)

งานที่ซ่อมเสร็จก่อนวันที่ร้านเปิดโหมดเก็บเงินผ่านหน้าขาย จะสแกนเก็บเงินไม่ได้ เพราะงานยุคนั้นระบบยังไม่ได้บันทึกว่าจ่ายหรือยัง — ส่วนใหญ่คือจ่ายไปแล้ว ถ้าไม่กันไว้จะกลายเป็นเก็บเงินซ้ำจากลูกค้า

ถ้ามีงานเก่าที่ค้างจ่ายจริง ผู้จัดการขึ้นไปกดข้ามได้ จากปุ่มในหน้าคิวรอชำระ

สำเนาบัตรประชาชนและสลิปโอนเงินถูกปิดไม่ให้เข้าถึงจากภายนอก ⭐ (11 ส.ค. 2569)

เดิมรูปพวกนี้เปิดดูได้ถ้ารู้ลิงก์ ตอนนี้ต้องเข้าสู่ระบบก่อนเสมอ และร้านอื่นเปิดของร้านเราไม่ได้ ไม่ต้องทำอะไรเพิ่ม รูปเครื่องซ่อม รูปสินค้า และโลโก้ร้าน ยังแสดงเหมือนเดิมทุกอย่าง

ตัวอักษรบนสลิปเปลี่ยนเป็นฟอนต์ของระบบเอง ⭐ (10 ส.ค. 2569)

เดิมหน้าต่างพิมพ์ดึงฟอนต์จากอินเทอร์เน็ตซึ่งโหลดไม่สำเร็จ เครื่องจึงพิมพ์ด้วยฟอนต์สำรอง ของ Windows ตอนนี้ระบบส่งฟอนต์ให้เองแล้ว ไม่ต้องตั้งค่าอะไรเพิ่ม

  • ตัวหนังสือจะหน้าตาไม่เหมือนเดิมเล็กน้อย และเข้มขึ้น อ่านง่ายขึ้นบนกระดาษความร้อน
  • สลิปไม่ยาวขึ้น — บางใบสั้นลงราว 4 มม. เพราะตัวอักษรแคบกว่าจึงตัดบรรทัดน้อยลง
  • ถ้าเน็ตร้านมีปัญหา ระบบจะพิมพ์ด้วยฟอนต์สำรองเหมือนเดิม ไม่มีกรณีที่พิมพ์ไม่ออก

🔧 ตั้งครบทั้ง 5 ข้อแล้วยังยาวอยู่ — ให้ไปตรวจที่ไดรเวอร์เครื่องพิมพ์: Windows → การตั้งค่า → เครื่องพิมพ์ → เลือกเครื่องพิมพ์สลิป → การกำหนดลักษณะการพิมพ์ → ดูช่อง ขนาดกระดาษ / Paper Length ว่าตั้งค้างเป็น A4 (297 มม.) หรือยาวกว่านั้นอยู่หรือไม่ เครื่องพิมพ์สลิปบางรุ่นต้องเลือกเป็น "Roll Paper" หรือเพิ่มขนาดกำหนดเองในไดรเวอร์ก่อน

📌 หมายเหตุเรื่อง VAT บนใบเสร็จ — ราคาค่าซ่อมที่กรอกในระบบเป็น ราคารวม VAT แล้ว ใบเสร็จจึงแสดงแบบ ถอด VAT ออกจากยอด (เช่น ยอด ฿4,000 → ก่อน VAT ฿3,738.32 + VAT 7% ฿261.68) ไม่ใช่บวกเพิ่มบนยอด ทำให้ยอดบนใบกำกับภาษีตรงกับเงินที่รับจริงเสมอ

12.3 ใบเครมประกัน (/repair-warranty)

โหมดเมื่อใช้สีธีม
ใบรับเครื่องเข้าเครม (intake)ตอนลูกค้านำเครื่องมาเครม — ออกได้ทุกสถานะของ claimส้ม
ใบส่งคืนหลังเครม (resolution)ตอนเครมเสร็จส่งคืนลูกค้า — ออกได้เฉพาะ status COMPLETEDเขียว

ทั้ง 2 ใบมี: warranty linkbox + days-remaining badge สี dynamic, ลายเซ็น 2-3 ฝ่าย, QC checklist 6 ข้อ (resolution mode)

12.4 สลิปเงินเดือน (Payslip)

📍 หน้า: /payroll (ปุ่ม 🖨️ "พิมพ์สลิปเงินเดือน" ในแถว + ในปุ่ม detail modal) 👤 สิทธิ์: OWNER, ADMIN, MANAGER 🎨 ธีม: cyan (ตรงกับสีแบรนด์ของแอป)

  • Block: header → ข้อมูลพนักงาน → 2-col earnings/deductions → net pay box (สีฟ้าเข้ม + จำนวนเงินเป็นข้อความไทย เช่น "สามหมื่นห้าพันบาทถ้วน") → ลายเซ็น HR + พนักงาน
  • รายการเพิ่ม/หัก ดึงจาก PayrollAdjustment (split อัตโนมัติด้วย isDeduction)
  • รูปแบบ A4 — บนมือถือเลื่อนแนวนอนได้ (ScrollArea scrollbars="xy")
  • Gate การพิมพ์: ปุ่มจะ disabled เมื่อ status = PENDING (ตัวเลขยังเปลี่ยนได้) — ต้องอนุมัติก่อนถึงพิมพ์ได้ (ดูรายละเอียดเพิ่มในหัวข้อ 10.4-10.5)

12.5 ใบสรุปการมาทำงานรายเดือน (Attendance Summary)

📍 หน้า: /attendance (ปุ่ม "ใบสรุปรายเดือน" ใน header) 👤 สิทธิ์: ADMIN, MANAGER

  • เลือกพนักงาน + เดือน + ปี (พ.ศ.) → ดึง /attendance/report API → พิมพ์ A4 1 หน้า
  • Block: header → KPI 5 cards (วันทำงาน/ชั่วโมง/มาสาย/เลิกก่อน/ขาด) → ตาราง 28-31 rows (1 row = 1 วัน) → ลายเซ็น 3 ฝ่าย (พนักงาน/หัวหน้า/HR)
  • เสาร์-อาทิตย์มี bg เทา, สาย/ขาดแสดงสีแดง bold

12.6 ใบเบิก/รับเข้าอะไหล่ (Spare Part Movement)

📍 หน้า: /spare-parts → Modal "ประวัติการเคลื่อนไหว" (ปุ่มพิมพ์ในแต่ละ transaction row)

โหมดTriggerสีธีม
ใบเบิกอะไหล่ (issue)transaction type = OUT (เบิกใช้กับงานซ่อม)teal
ใบรับสินค้าเข้าคลัง (receive)transaction type = IN (ซื้อมาจาก supplier)indigo
  • Block: header → reference linkbox (issue: REP-xxx + customer + device + IMEI / receive: supplier + ผู้รับเข้า) → items table (1 row) → totals → reason note → inspection checklist 5 ข้อ (receive only) → ลายเซ็น 3 ฝ่าย

12.7 ใบลดหนี้ (Credit Note) — มาตรา 86/10

📍 เปิดได้ที่: เปิดอัตโนมัติหลังกด "ยืนยันคืนเงิน" ใน RefundWizard (§6.6)

สีธีม: แดง (#dc2626) — แสดงการคืนเงิน/เงินไหลออก ฐานทางกฎหมาย: มาตรา 86/10 แห่งประมวลรัษฎากร (ส่วนที่ 10 ใบกำกับภาษี ใบเพิ่มหนี้ ใบลดหนี้)

ใบลดหนี้ออกได้เมื่อ:

  • ผู้ขายเป็น ผู้จดทะเบียน VAT (ถ้าสาขาไม่จด VAT — เอกสารใช้เป็นหลักฐานภายในร้านเท่านั้น ไม่มีผลทางภาษี)
  • เคยออกใบกำกับภาษีไปแล้ว (มี receiptNumber อ้างอิง)
  • เกิดเหตุการณ์ที่เป็นเหตุให้ ภาษีขายลดลง เช่น ลูกค้าคืนสินค้า / สินค้าชำรุด / ตกลงลดราคา

โครงสร้างเอกสาร (compliance ตามมาตรา 86/10):

  1. คำว่า "ใบลดหนี้" — Banner ใหญ่สีแดง gradient + ระบุ "ออกตามมาตรา 86/10"
  2. เลขที่ใบลดหนี้ (CN-xxxxxxxx) + วันที่ออก
  3. อ้างอิงใบกำกับภาษีเดิม: เลขใบ + วันที่เดิม (กรอบแดงเด่น)
  4. ผู้ออก (ผู้ขาย): ชื่อ + ที่อยู่ + เบอร์ + เลขประจำตัวผู้เสียภาษี (จาก branch.taxId, format X-XXXX-XXXXX-XX-X)
  5. ผู้รับ (ผู้ซื้อ): ชื่อ + ที่อยู่ + เบอร์ + เลขประจำตัวผู้เสียภาษี (จาก customer.idCard 13 หลัก)
  6. รายการที่ลดหนี้ — ตาราง: ชื่อสินค้า/IMEI + จำนวน + ราคา/หน่วย + รวม (ค่าลบ)
  7. โครงสร้าง 3-cell บังคับ:
    • มูลค่าเดิม (ก่อนลด)
    • มูลค่าที่ถูกต้อง (หลังลด)
    • ผลต่าง (ยอดที่คืน)
  8. VAT split (ถ้าสาขาจด VAT):
    • มูลค่าผลต่างก่อน VAT
    • VAT 7% ของผลต่าง (ใช้สูตร amount × rate / (100 + rate) สำหรับราคา VAT-inclusive)
    • ยอดเงินที่คืนรวม (กล่องแดงใหญ่เด่น)
  9. วิธีคืนเงิน (เงินสด/โอน/เครดิตร้าน — pill เขียว)
  10. เหตุผลในการออกใบลดหนี้ (กล่องเหลือง + ข้อความที่ user กรอกใน RefundWizard)
  11. ลายเซ็น 2 ฝ่าย: ลูกค้า + ผู้รับคืนสินค้า (พร้อมช่องวันที่)
  12. Legal note (เฉพาะ VAT-registered): "ผู้ซื้อต้องนำใบลดหนี้นี้ไปใช้ภายในเดือนที่ได้รับ" + "เก็บ 5 ปี (paper) / 10 ปี (electronic)"

💡 สำคัญ: ผู้ซื้อ (ลูกค้าที่จด VAT) ต้องนำใบลดหนี้ไปใช้ ภายในเดือนที่ได้รับ เท่านั้น ไม่สามารถใช้ข้ามเดือนได้

⚠️ ถ้าสาขายังไม่จด VAT — ระบบแสดง Alert "ใบลดหนี้นี้ใช้เป็นเอกสารภายในร้านเท่านั้น" ไม่มีผลทางภาษี

12.8 Z Report (ปิดยอดสิ้นวัน)

📍 เปิดได้ที่: ปุ่ม "ปิดยอดวันนี้" มุมขวาบน /sales-history (§6.6)

สีธีม: ฟ้า (#0891b2) + กล่องเงินสดเขียว มาตรฐาน: Retail Z Report (ทั่วโลก) + Thai VAT compliance สำหรับ ภ.พ.30

โครงสร้างเอกสาร (เรียงลำดับการอ่าน):

  1. Banner — "รายงานปิดยอดสิ้นวัน (Z Report)" + ชื่อร้าน + สาขา
  2. Meta strip — เลขที่รายงาน Z-YYYYMMDD-{branchCode} + วันที่ (ภาษาไทย, พ.ศ.)
  3. กล่องเงินสดในลิ้นชัก (คาดหมาย) — เด่นที่สุด เพราะนี่คือเหตุผลหลักของการปิดยอด:
    • ตัวเลขใหญ่ 32px สีเขียว
    • Breakdown: เงินสดเข้า − เงินสดคืน = ยอดคาดหมาย
    • Reminder: "นับเงินสดในลิ้นชักจริง แล้วเทียบกับตัวเลขนี้"
  4. 3 KPI cards — บิลที่ใช้งาน / บิลยกเลิก / ครั้งที่คืนเงิน (พร้อมจำนวน + ยอด)
  5. สรุปยอดเงิน — running total style:
    • ยอดขายรวม (รวม VAT)
    • − VAT รวมในราคา (ถ้าจด VAT)
    • − คืนเงินรวม (ถ้ามี)
    • = รายได้สุทธิ (กล่องฟ้าเด่น)
  6. VAT compliance section (เฉพาะสาขาจด VAT) — สำหรับ ภ.พ.30 reconciliation:
    • มูลค่าก่อน VAT (taxable sales)
    • VAT ขาย (Output VAT)
    • − VAT ของยอดคืน (จากใบลดหนี้ในวันนั้น)
    • = VAT สุทธิที่ต้องนำส่ง (ตรงกับยอดที่ใส่ใน ภ.พ.30)
  7. รายรับ — แยกตามวิธีชำระ — ตาราง: เงินสด/โอน/บัตร พร้อมจำนวนบิล + ยอด + subtotal
  8. จ่ายออก — แยกตามวิธีคืนเงิน — ตาราง: เงินสด/โอน/เครดิตร้าน พร้อมจำนวนครั้ง + ยอด (สีส้ม)
  9. ลายเซ็น 2 ฝ่าย: Cashier ผู้ปิดยอด + ผู้จัดการ/ผู้ตรวจสอบ
  10. Footer note — "เก็บ 5 ปี (paper) / 10 ปี (electronic)"

Workflow ปิดร้านมาตรฐาน:

  1. ก่อนปิดร้าน → กด "ปิดยอดวันนี้" บน /sales-history
  2. ตรวจตัวเลขในระบบ (ทุกบิล/ยกเลิก/คืน) ว่าถูกต้อง
  3. นับเงินสดจริงในลิ้นชัก
  4. เทียบกับ "ยอดเงินสดในลิ้นชัก (คาดหมาย)" สีเขียว
  5. ถ้าตรง → กดพิมพ์ → ลายเซ็น Cashier → เก็บเอกสาร
  6. ถ้าไม่ตรง → ตรวจหาสาเหตุก่อนเลิกงาน (อาจมีบิลยังไม่ปิด, ใบ refund หาย, ฯลฯ)

💡 ภ.พ.30 friendly: VAT section ของ Z Report ตรงกับ map ใน /reports VAT (§11) — ใช้คู่กันได้ตอนยื่นภาษีรายเดือน

⚠️ Z Report ดูย้อนหลังได้ — เลือกวันที่ที่ DatePicker แล้วเรียกข้อมูลใหม่ (เก็บถาวรในระบบ)

12.9 รายงาน Export Excel (/reports)

นอกเหนือจากเอกสารพิมพ์ ระบบยัง export รายงานเป็น Excel ได้ 6 ประเภท:

  • รายงานยอดขาย / การซ่อม / การรับซื้อ / สินค้าคงเหลือ / สรุปการเงิน / ภาษี VAT

💡 เคล็ดลับการพิมพ์

  • ตั้งค่า browser ก่อนพิมพ์ครั้งแรก: Chrome/Edge → ปิด "Headers and footers" + เปิด "Background graphics" (เพื่อให้ accent color + กล่องสีพิมพ์ออก)
  • Thermal printer 80mm (สำหรับ POS): ตั้ง paper size = "80mm × auto" + Margin = "None"
  • A4 documents: ตั้ง paper size = A4, Margin = Default (ระบบมี @page margin: 12mm ในตัวเอง)
  • PDF export: ทุกเอกสารกด "Save as PDF" ใน print dialog ได้

🏷️ White Label (ลบโลโก้ MobileHub) — Enterprise

📦 แพ็คเกจ: Enterprise เท่านั้น

ในแพ็คเกจ Enterprise ระบบจะ ลบเครื่องหมาย "MobileHub" / "AJ Software Dev." อัตโนมัติ จาก:

  • Sidebar footer ("Powered by AJ Software Dev." → ซ่อน)
  • ใบเสร็จขายสินค้า (POS) — A4 footer ลบ "เอกสารนี้พิมพ์โดยระบบ MobileHub POS"
  • ใบรับซื้อโทรศัพท์ — footer เหลือแค่เลขเอกสาร (ลบ "พิมพ์โดยระบบ MobileHub")

→ เอกสารและหน้าจอทั้งหมดจะเหมือน "ระบบของร้านคุณเอง" ไม่มี branding ของ MobileHub ปรากฏให้ลูกค้าเห็น

💡 เหมาะกับธุรกิจขนาดใหญ่ที่ต้องการแบรนด์ดิ้งของตัวเอง (เช่น Aj Mobile Group ใช้ pos.ajmobile.com แทน mobilehub.ajsoftwaredev.com)

13. Portal (Tenant Self-Service)

13.0 ต่ออายุ / เปลี่ยนแพ็คเกจ (อัปเดต 7 ส.ค. 2569)

📍 หน้า: /portal/billing → ปุ่ม "ต่ออายุ" หรือ "อัพเกรด" → /portal/upgrade

⭐ ยอดที่หน้าจอแสดง = ยอดที่ระบบเรียกเก็บจริง (แก้ 7 ส.ค. 2569)

เดิมหน้าเลือกแพ็คเกจแสดง ราคาเต็มของแพ็คเกจ ทุกกรณี รวมถึง QR พร้อมเพย์ที่สร้างขึ้น แต่เวลาอัพเกรดกลางรอบบิลระบบเรียกเก็บเฉพาะส่วนต่างของวันที่เหลือ ซึ่งน้อยกว่า → ลูกค้าที่สแกน QR จะโอนเกินโดยที่ระบบไม่รู้ว่าต้องคืนเท่าไหร่

ตอนนี้ทุกตัวเลขบนหน้าจอ (ยอดรวม · QR · ยอดโอน · ปุ่มคัดลอกยอด · ยอดบนแท็บบัตรเครดิต) มาจากยอดเดียวกับที่จะอยู่ในใบชำระ และระบบจะไม่ให้กดชำระเงินจนกว่าจะคำนวณยอดได้

ที่มาของยอด — อ่านได้ก่อนกดจ่าย

เมื่อยอดไม่เท่าราคาเต็ม หน้าจอจะแจกแจงให้เห็นว่าหักอะไรออกไป:

ราคาเอ็นเตอร์ไพรส์                  ฿2,499 /เดือน
หักส่วนที่ชำระไว้แล้ว                  −฿1,999
  เหลืออีก 15 วันในรอบบิลปัจจุบัน
─────────────────────────────────────────────
ยอดที่ต้องชำระตอนนี้                     ฿500

พร้อมข้อความอธิบายว่า รอบถัดไปจะกลับไปเป็นราคาเต็ม และเก็บวันไหน — กันความเข้าใจผิดว่าได้ราคาที่ลดแล้วไปตลอด

สถานการณ์ยอดที่เรียกเก็บเหตุผล
อัพเกรดกลางรอบบิลเฉพาะส่วนต่างของวันที่เหลือจ่ายค่าแพ็คเกจเดิมของรอบนี้ไปแล้ว ไม่เก็บซ้ำ
อยู่ในช่วงทดลองใช้เต็มจำนวนช่วงทดลองไม่เคยมีการเรียกเก็บเงิน จึงไม่มีส่วนลดจากรอบก่อน
ต่ออายุหลังหมดอายุเต็มจำนวนรอบเดิมจบไปแล้ว
ลดแพ็คเกจ฿0ไม่เก็บเงินและไม่คืนเงินส่วนต่าง

💡 ร้านที่ซื้อระหว่างช่วงทดลองใช้ ไม่เสียวันที่เหลือ — รอบใหม่นับต่อจากวันหมดทดลอง

ลดแพ็คเกจ — เห็นผลกระทบก่อนกด

นอกจากบอกวันที่จะเริ่มมีผลแล้ว หน้าจอจะแสดงโควตาที่จะลดลงพร้อมจำนวนที่ใช้อยู่จริง

โควตาที่จะลดลง
สาขา          ไม่จำกัด → 1     ใช้อยู่ 2
ผู้ใช้งาน      ไม่จำกัด → 3     ใช้อยู่ 8

ถ้าใช้เกินโควตาใหม่ ระบบจะเตือนเป็นกล่องแดงว่า ข้อมูลเดิมจะไม่ถูกลบ แต่จะเพิ่มรายการใหม่ไม่ได้จนกว่าจะลดลงมาอยู่ในโควตา

⭐ ยกเลิกรายการที่ยังไม่ได้ชำระ (ใหม่ 7 ส.ค. 2569)

เดิมถ้ามีใบชำระค้างอยู่ (กดผิดแพ็คเกจ · เปลี่ยนใจ) จะเปลี่ยนแพ็คเกจไม่ได้อีกเลย เพราะระบบกันไม่ให้มีรายการค้าง 2 ใบพร้อมกัน และไม่มีปุ่มให้ยกเลิกทั้งฝั่งร้านและฝั่งทีมงาน

ตอนนี้ยกเลิกเองได้ 2 ทาง:

  • /portal/billing → คลิกรายการในประวัติการชำระเงิน → ปุ่ม "ยกเลิกรายการนี้"
  • /portal/upgrade → ถ้ามีใบค้าง หน้าจอจะบอกพร้อมปุ่มยกเลิกให้ตรงนั้นเลย

⚠️ ยกเลิกได้เฉพาะรายการที่ยังไม่ได้แนบสลิป — รายการที่แนบสลิปแล้วต้องให้ทีมงานตรวจ เพื่อไม่ให้หลักฐานการโอนหายไปในกรณีที่โอนเงินมาแล้วจริง

ถ้าทีมงานเป็นฝ่ายยกเลิกให้ (เช่นพบว่ารายการนั้นยอดไม่ถูกต้อง) คุณจะได้รับ การแจ้งเตือนในระบบ ทันที ไม่ต้องเข้ามาเช็คเอง — ข้อความจะบอกชัดว่า "รายการชำระเงินถูกยกเลิก ... ยังไม่มีการเรียกเก็บเงิน"

💡 ข้อความนี้ต่างจาก "สลิปไม่ผ่านการตรวจสอบ" ซึ่งใช้กับกรณีที่คุณโอนเงินมาแล้ว แต่สลิปมีปัญหา (กรณีนั้นจะบอกให้อัพโหลดสลิปใหม่) — ถ้าเห็นข้อความ "ถูกยกเลิก" แปลว่ายังไม่มีเงินออกจากบัญชีคุณ ไม่ต้องตามหาสลิป

ในประวัติการชำระเงิน รายการที่ถูกยกเลิกจะขึ้นป้าย "ยกเลิกแล้ว" สีเทา ส่วนรายการที่สลิปไม่ผ่านจะขึ้น "ไม่ผ่านการตรวจสอบ" สีแดง — คนละความหมายกัน

แพ็คเกจที่ไม่มีวันหมดอายุ

ร้านที่ทีมงานตั้งค่าไว้เป็นแบบ ไม่มีกำหนดหมดอายุ (เช่นร้านสาธิต หรือข้อตกลงพิเศษ) จะเห็นคำว่า "ไม่หมดอายุ" แทนวันที่ในหน้า Billing และหน้ารายละเอียดการชำระเงิน

ก่อนหน้านี้หน้าจอแสดงเป็นวันที่จริงในระบบ (เช่น "ต่ออายุ 1 ม.ค. 43" หรือ "สิ้นสุด 1 มกราคม 10543") ซึ่งอ่านแล้วเข้าใจผิดว่าเป็นข้อมูลเก่าหรือระบบผิดพลาด — แก้ให้แสดงเป็นข้อความตรงไปตรงมาแล้วเมื่อ 7 ส.ค. 2569

ต่ออายุเมื่อแพ็คเกจหมดอายุแล้ว

เดิมร้านที่หมดอายุ (รวมถึงร้านที่หมดช่วงทดลองใช้) กดปุ่มต่ออายุแล้วระบบแจ้งว่าไม่พบแพ็คเกจ ต้องติดต่อทีมงานให้ออกใบชำระให้ ตอนนี้ต่ออายุเองได้แล้ว ทั้งกรณีหมดอายุ ค้างชำระ และถูกระงับชั่วคราว

  • เลือกแพ็คเกจ + รอบบิล → ระบบออกใบชำระ ราคาเต็ม (ไม่ใช่ราคาเฉลี่ยตามวันที่เหลือ เพราะรอบเดิมจบไปแล้ว)
  • ถ้าเลือกแพ็คเกจใหม่ไปพร้อมกัน ระบบจะเปลี่ยนแพ็คเกจให้ตอนที่แอดมินอนุมัติสลิป
  • รอบใหม่เริ่มนับจากวันหมดอายุเดิม (ถ้ายังไม่เลยมา) — ไม่เสียวันที่เหลือ

ลดแพ็คเกจ (Downgrade) — ไม่ต้องโอนเงิน

เดิมหน้าจอบังคับให้แนบสลิปทุกกรณีรวมถึงตอนลดแพ็คเกจ ทั้งที่การลดแพ็คเกจไม่มีค่าใช้จ่าย ทำให้มีลูกค้าโอนเงินมาโดยไม่จำเป็น ตอนนี้เมื่อเลือกแพ็คเกจที่ถูกกว่า ระบบจะไม่ขอสลิป และแจ้งชัดเจนว่า:

  • ไม่มีค่าใช้จ่ายเพิ่มเติม
  • ยังใช้สิทธิ์แพ็คเกจเดิมได้จนถึงวันสิ้นรอบบิลปัจจุบัน
  • ระบบจะเปลี่ยนแพ็คเกจให้อัตโนมัติเมื่อถึงวันนั้น (ยกเลิกได้ที่ /portal/billing)

ระบบไม่ระงับร้านที่จ่ายเงินแล้ว

เดิมถ้าแอดมินตรวจสลิปไม่ทันภายใน 7 วันหลังหมดอายุ ระบบจะระงับร้านอัตโนมัติแม้ลูกค้าจะโอนเงินและแนบสลิปแล้ว ตอนนี้ระบบจะ ข้ามการระงับ ถ้ายังมีสลิปค้างรอตรวจ และแจ้งเตือนทีมงานให้รีบตรวจแทน

อีเมลแจ้งผลการชำระเงิน

หลังแอดมินอนุมัติหรือปฏิเสธสลิป ระบบจะส่งอีเมลแจ้งผลไปที่อีเมลของร้าน (กรณีปฏิเสธจะระบุเหตุผลและวิธีแก้ไข) ไม่ต้องเข้ามาเช็คในระบบเอง

13.A ติดต่อทีมงาน MobileHub ⭐ ใหม่ 15 ก.ย. 2569

📍 หน้า: /portal/contact (เมนู ติดต่อ → ติดต่อทีมงาน) 👤 สิทธิ์: ทุก Role

ใช้งานไม่เป็น ติดตรงไหน อยากขอเวลาทดลองใช้เพิ่ม หรือถามเรื่องแพ็คเกจ — ทักทีมงานได้จากในระบบ

ช่องทาง

ช่องทางเหมาะกับ
แชท LINE @052bzovk (มี QR ให้สแกน + ปุ่มคัดลอก ID)ถาม-ตอบเร็ว คุยต่อเนื่องในแชทเดิมบนมือถือ
แชท Messenger (เพจ Facebook ของทีมงาน)ถ้าสะดวกคุยทาง Facebook
แจ้งปัญหา / ติดตามเรื่อง (Support Tickets — §12.1 ด้านล่าง)ปัญหาที่ต้องมีเลขอ้างอิงและติดตามสถานะในระบบ
คู่มือการใช้งานหาวิธีทำด้วยตัวเอง

ปุ่มลอย "ติดต่อเรา" (มุมขวาล่าง)

  • แสดงเฉพาะ เจ้าของร้าน / แอดมินร้าน — พนักงานบทบาทอื่นใช้เมนู "ติดต่อทีมงาน" แทน
  • ช่วงทดลองใช้ บนคอมพิวเตอร์ปุ่มจะมีข้อความ "มีคำถาม? ทักเรา" · บนมือถือเป็นไอคอน
  • ไม่แสดงในหน้าขายสินค้า (POS) เพื่อไม่ให้บังช่องส่วนลด/ปุ่มชำระเงิน — ใช้เมนู "ติดต่อทีมงาน" แทน
  • ซ่อนเองชั่วคราวตอนอินเทอร์เน็ตหลุด (ทุกช่องทางต้องใช้อินเทอร์เน็ต)

อีเมลที่ร้านจะได้รับจากระบบ (ส่งไปที่อีเมลหลักของร้าน)

เมื่อไรเนื้อหา
วันที่ 1 และวันที่ 3 หลังสมัคร ถ้ายังไม่ได้เริ่มบันทึกอะไรเลยวิธีเริ่มใช้ 3 ขั้น + ช่องทางทักทีมงาน (ส่งแต่ละฉบับครั้งเดียว)
ช่วงทดลองใช้เหลือ 3 วัน และ 1 วันแจ้งวันหมด · ร้านที่ยังไม่ได้เริ่มใช้จะได้ข้อความชวนลอง/ขอขยายเวลา · ร้านที่ใช้แล้วจะได้ข้อความเลือกแพ็คเกจ
วันที่ช่วงทดลองใช้สิ้นสุดระบบหยุดให้บันทึกข้อมูลใหม่ ข้อมูลเดิมยังอยู่ครบ ชำระเงินแล้วใช้ต่อได้
แพ็คเกจจะหมดอายุในอีก 7 · 3 · 1 วันเตือนต่ออายุ — หากเลยวันหมดอายุโดยยังไม่ชำระ บัญชีจะถูกระงับชั่วคราวภายใน 7 วัน (ข้อมูลไม่หาย)

💡 ตอบกลับอีเมลจากระบบได้เลย ข้อความจะถึงทีมงาน — แต่ถ้าต้องการคำตอบเร็ว ทักทาง LINE จะเร็วกว่า 📭 ไม่เห็นอีเมล — ตรวจโฟลเดอร์ อีเมลขยะ (Spam/Junk) แล้วกด "ไม่ใช่สแปม"

12.1 Support Tickets

📍 หน้า: /portal/tickets 👤 สิทธิ์: ทุก Role

วัตถุประสงค์: ยื่น Ticket เพื่อขอความช่วยเหลือหรือรายงานปัญหาไปยังทีมงาน MobileHub

ขั้นตอนสร้าง Ticket:

  1. กดปุ่ม "+ สร้าง Ticket ใหม่"
  2. กรอก:
    • หัวข้อ — สรุปปัญหาสั้นๆ
    • ประเภท — Bug Report, Feature Request, ขอความช่วยเหลือ
    • ระดับความสำคัญ — LOW, MEDIUM, HIGH, CRITICAL
    • รายละเอียด — อธิบายปัญหาอย่างละเอียด
  3. กดปุ่ม "ส่ง Ticket"

สถานะ Ticket:

สถานะสีความหมาย
OPENน้ำเงินรอทีมงานรับเรื่อง
IN_PROGRESSเหลืองทีมงานกำลังดำเนินการ
RESOLVEDเขียวแก้ไขแล้ว
CLOSEDเทาปิด Ticket

12.2 ประกาศ

📍 หน้า: /portal/announcements 👤 สิทธิ์: ทุก Role

วัตถุประสงค์: รับข่าวสารประกาศจากทีมงาน MobileHub — อัปเดต, การบำรุงรักษา, โปรโมชั่น

ฟีเจอร์:

  • ดูประกาศล่าสุดจากทีมงาน
  • กรองตามประเภทประกาศ
  • ทำเครื่องหมายว่า "อ่านแล้ว"
  • ประกาศสำคัญแสดงไฮไลท์สีแดง

12.3 Billing

📍 หน้า: /portal/billing 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: ดูสถานะ Subscription ปัจจุบัน ประวัติการชำระเงิน ดาวน์โหลดใบเสร็จ

ข้อมูลที่แสดง:

  • แพ็กเกจปัจจุบัน (Plan Name)
  • วันหมดอายุ Subscription
  • Storage ที่ใช้/ที่มี
  • จำนวนผู้ใช้งาน/ที่อนุญาต
  • ประวัติ Invoice และการชำระเงิน

ขั้นตอนชำระค่าบริการ:

  1. คลิกที่ Invoice ที่ต้องการชำระ
  2. เลือกวิธีชำระ
  3. อัปโหลด Slip การโอนเงิน
  4. ระบบส่งเรื่องให้ Admin ตรวจสอบ

12.3A ช่องทางชำระเงิน — เลือกได้ 3 ทาง ⭐ NEW

หน้า /portal/payment/{id} และ /portal/upgrade มีแท็บช่องทางชำระเงินให้เลือก โดย PromptPay QR เป็นค่าตั้งต้น และอยู่แท็บแรกเสมอ

ช่องทางยืนยันอย่างไรเหมาะกับ
PromptPay QR (ค่าตั้งต้น)สแกน → โอน → แนบสลิป → รอตรวจสอบทุกกรณี — ไม่มีค่าธรรมเนียม
โอนผ่านบัญชีโอนเอง → แนบสลิป → รอตรวจสอบผู้ที่โอนผ่านแอปธนาคารเอง
บัตรเครดิต (ตัวเลือกเสริม)จ่ายบนหน้าของ Stripe → ยืนยันอัตโนมัติ ไม่ต้องแนบสลิปผู้ที่อยากให้เปิดใช้งานทันที ไม่อยากรอตรวจสลิป

แท็บ "บัตรเครดิต" จะแสดงก็ต่อเมื่อผู้ดูแลระบบตั้งค่าครบและ เปิดใช้งาน ช่องทางนี้ไว้เท่านั้น ถ้ายังไม่เปิด จะไม่เห็นแท็บนี้เลย (ไม่ใช่เห็นแล้วกดไม่ได้) — และผู้ดูแลระบบ ปิดชั่วคราวได้ตลอดเวลา เช่นช่วงปรับปรุงระบบชำระเงิน ไม่ว่าจะเปิดหรือปิด PromptPay กับการโอนผ่านบัญชีก็ใช้งานได้ตามปกติเสมอ

ขั้นตอนชำระด้วยบัตรเครดิต:

  1. เลือกแท็บ บัตรเครดิต → กด "ไปหน้าชำระเงิน"
  2. ระบบพาไปยังหน้าชำระเงินของ Stripe (กรอกข้อมูลบัตรที่นั่น — ระบบเราไม่เก็บเลขบัตร)
  3. ชำระเสร็จ ระบบพากลับมาที่หน้าเดิมอัตโนมัติ
  4. หน้าจะขึ้น "กำลังยืนยันการชำระเงิน" สักครู่ แล้วเปลี่ยนเป็น "ชำระเงินสำเร็จ" เอง

⚠️ ถ้าจ่ายแล้วแต่หน้ายังไม่ขึ้นว่าชำระแล้ว — อย่าชำระซ้ำ การยืนยันวิ่งคนละทางกับเบราว์เซอร์ จึงอาจช้ากว่าหน้าจอเล็กน้อย ให้กด "รีเฟรช" อีกครั้งใน 1-2 นาที · ถ้าเกิน 10 นาทีแล้วยังไม่ขึ้น ให้ติดต่อทีมงานพร้อมแจ้งเวลาที่ชำระ (เงินไม่หาย — ระบบแจ้งเตือนทีมงานให้อัตโนมัติอยู่แล้ว)

ถ้าเห็นป้าย "โหมดทดสอบ" แปลว่าผู้ดูแลระบบกำลังตั้งค่าอยู่ — จะไม่มีการเรียกเก็บเงินจริง กรุณาใช้ PromptPay แทนจนกว่าป้ายนี้จะหายไป

สถานะการชำระ:

สถานะคำอธิบาย
PENDINGรอชำระเงิน
SLIP_UPLOADEDอัปโหลด Slip แล้ว รอตรวจสอบ
APPROVEDยืนยันแล้ว
REJECTEDปฏิเสธ (Slip ไม่ถูกต้อง)
REFUNDEDคืนเงินแล้ว

การแจ้งเตือน (real-time bell + Web Push):

เมื่อ admin ตรวจสลิปแล้ว — ระบบจะส่ง notification ไปที่ OWNER + ADMIN ของ tenant ทันที (Socket.IO real-time + Web Push ถ้า subscribe):

เหตุการณ์ข้อความที่ tenant ได้รับ
✅ Admin อนุมัติ"การชำระเงินได้รับการอนุมัติ — แพ็คเกจ X ฿Y พร้อมใช้งาน"
⚠️ Admin ปฏิเสธ"สลิปไม่ผ่านการตรวจสอบ — จำนวน ฿Y — เหตุผล + กรุณาอัพโหลดใหม่"
🤖 OCR auto-verify ผ่านtoast "✓ ตรวจสลิปสำเร็จ — แพ็คเกจของคุณพร้อมใช้งาน" + status APPROVED ทันที
🤖 OCR auto-verify ไม่ผ่านtoast "อัพโหลดสำเร็จ แต่ตรวจอัตโนมัติไม่ผ่าน (เหตุผล) — รอแอดมินตรวจ"

คลิก notification จาก bell → deep link ไป /portal/billing ดูสถานะใหม่ + เหตุผลปฏิเสธ (ถ้ามี)

OCR Auto-verify (admin ตั้งค่าได้ที่ /admin/settings → Slip Verify):

ถ้า admin เปิดโหมด ocr_auto ระบบจะส่งสลิปไป EasySlip API ตรวจอัตโนมัติ — ถ้า:

  • ✓ amount ตรงกับ payment.amount + receiver account ตรง → APPROVED ทันที
  • ✗ ไม่ตรง → status SLIP_UPLOADED + admin เห็นเหตุผลใน reviewNote เช่น OCR easyslip: amount_mismatch (slip ฿657.43 ≠ expected ฿1499) แล้วตัดสินใจ approve/reject เอง

12.3B ใบเสร็จค่าบริการ (ไฟล์ PDF) ⭐ ปรับปรุง 8 ส.ค. 2569

เอกสารที่ระบบออกให้หลังท่านชำระค่าบริการรายเดือน/รายปีเรียบร้อยแล้ว

สิ่งที่เปลี่ยนในรอบนี้

เดิมตอนนี้
หัวเอกสารพิมพ์ว่า INVOICE"ใบเสร็จรับเงิน / RECEIPT"
ภาษาไทยพิมพ์ไม่ออก — ชื่อร้าน ที่อยู่ ชื่อแพ็คเกจ กลายเป็นตัวอักษรขยะพิมพ์ภาษาไทยได้ครบทุกบรรทัด
คอลัมน์ "จำนวนเงิน" ขึ้น ฿0 ทั้งที่ราคา/หน่วยและยอดรวมมีตัวเลขตัวเลขบนใบ บวกลงตัวทุกบรรทัด
ข้อมูลผู้ออกใบเสร็จถูกฝังไว้ในโปรแกรม (เป็นข้อมูลตัวอย่าง ไม่ใช่ของจริง)อ่านจากค่าที่ทีมงานตั้งไว้ในระบบ

ทำไมถึงเปลี่ยนหัวเอกสาร — "ใบแจ้งหนี้" (Invoice) ตามความหมายคือเอกสารที่ออก ก่อน รับเงิน แต่ไฟล์นี้ออกให้ หลัง รับเงินแล้ว เอกสารที่ถูกต้องจึงเป็น ใบเสร็จรับเงิน (ใบรับ ตามมาตรา 105) และตามมาตรา 105 ทวิ เอกสารต้องมีอักษรไทย ใช้ภาษาอังกฤษล้วนไม่ได้

ข้อมูลบนใบเสร็จ

  • ชื่อร้าน · ชื่อ-นามสกุลผู้ให้บริการ · เลขประจำตัวผู้เสียภาษี · ที่อยู่ · เบอร์โทร · อีเมล
  • เลขที่ใบเสร็จ · วันที่รับเงินจริง (แสดงเป็น พ.ศ.) · รายการ · จำนวน · ราคา/หน่วย · จำนวนเงิน · ยอดรวมทั้งสิ้น
  • ช่องไหนที่ทีมงานเว้นว่างไว้ ใบเสร็จจะไม่พิมพ์บรรทัดนั้นเลย — ไม่พิมพ์ค้างไว้เป็นขีด - หรือช่องว่าง เอกสารจึงดูสมบูรณ์ทั้งกรณีกรอกครบและกรอกไม่ครบ

ℹ️ บรรทัด "โดย [ชื่อ-นามสกุล]" มีไว้ทำไม — ถ้าร้านของท่านเป็นนิติบุคคลและต้องหักภาษี ณ ที่จ่าย ท่านต้องออกหนังสือรับรองการหักภาษี (50 ทวิ) ในชื่อบุคคลที่ผูกกับเลขประจำตัวผู้เสียภาษี 13 หลัก ถ้าใบเสร็จมีแต่ชื่อร้าน ฝ่ายบัญชีของท่านจะจับคู่เอกสารไม่ได้

⚠️ ใบเสร็จนี้ไม่มีบรรทัด VAT และไม่ใช่ใบกำกับภาษี — ผู้ให้บริการยังไม่ได้จดทะเบียนภาษีมูลค่าเพิ่ม จึงไม่มีสิทธิ์เรียกเก็บ VAT และออกใบกำกับภาษีไม่ได้ · ใบเสร็จรับเงินนี้ใช้เป็นหลักฐานลงบัญชีรายจ่ายของท่านได้ตามปกติ และไฟล์ PDF ที่ได้รับทางอิเล็กทรอนิกส์ใช้เป็นหลักฐานได้ตามกฎหมาย (พ.ร.บ.ธุรกรรมทางอิเล็กทรอนิกส์) ไม่ต้องพิมพ์ลงกระดาษเก็บ

⚠️ ยังทำไม่ได้ในรอบนี้ (อยู่ระหว่างดำเนินการ)

ไฟล์ใบเสร็จ ยังไม่ถูกแนบไปกับอีเมล "ชำระเงินสำเร็จ" และหน้า /portal/billing ยังกดดาวน์โหลดเองไม่ได้ ระหว่างนี้ถ้าท่านต้องการใบเสร็จเพื่อใช้ลงบัญชี กรุณาแจ้งทีมงาน แล้วจะส่งให้ทางอีเมล

12.4 อัปเกรดแพ็กเกจ

📍 หน้า: /portal/upgrade 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: ดูและเปรียบเทียบแพ็กเกจ เลือกอัปเกรดหรือดาวน์เกรด

แพ็กเกจที่ให้บริการ:

แพ็กเกจผู้ใช้BranchesStorageราคา
STARTER5 คน1 สาขา1 GBติดต่อ
PROFESSIONAL20 คน5 สาขา10 GBติดต่อ
ENTERPRISEไม่จำกัดไม่จำกัด100 GBติดต่อ

12.5 ต่ออายุ — สิ่งที่เปลี่ยนไป (27 ส.ค. 2569)

⭐ แถบเตือนใกล้หมดอายุ โผล่บนทุกหน้า

เดิม ไม่มีอะไรในระบบบอกเลยว่าใกล้หมดอายุ — ร้านรู้ตัวตอนกดบันทึกแล้วไม่ได้ ซึ่งสายไปแล้ว

ตอนนี้เมื่อเหลือ ไม่เกิน 7 วัน จะมีแถบขึ้นด้านบนของทุกหน้า สีบอกความเร่งด่วน:

เหลือสีปิดได้ไหม
4–7 วันเหลืองปิดได้
1–3 วันส้มปิดได้
วันนี้วันสุดท้าย / หมดแล้วแดงปิดไม่ได้
  • ปิดแล้วกลับมาเองเมื่อข้ามวัน — ปิดวันที่เหลือ 3 วัน พรุ่งนี้เหลือ 2 วันแถบขึ้นใหม่
  • เจ้าของร้าน/ผู้ดูแลเห็นปุ่ม "ต่ออายุ / เปลี่ยนแพ็คเกจ" · พนักงานคนอื่นเห็นข้อความให้แจ้งเจ้าของร้านแทน (กันปุ่มโผล่แล้วกดไม่ได้)
  • ข้อความบอกตรง ๆ ว่าเกิดอะไรขึ้นเมื่อหมดอายุ: บันทึกข้อมูลใหม่ไม่ได้ทั้งร้าน (ขายของ · รับซ่อม · รับเงิน) และระบบจะพาไปหน้าต่ออายุ — ข้อมูลเดิมทั้งหมดยังอยู่ครบ ไม่มีการลบ
  • ร้านที่ทีมงานตั้งเป็น "ไม่หมดอายุ" ไม่เห็นแถบนี้เลย

⭐ กดต่ออายุซ้ำ ไม่เกิดใบซ้ำอีกแล้ว

เดิมกดปุ่มต่ออายุ/เปลี่ยนแพ็คเกจซ้ำ ๆ จะได้ ใบชำระใบใหม่ทุกครั้ง (กด 5 ครั้ง = 5 ใบ) ตอนนี้ระบบจะบอกว่ามีใบค้างอยู่ใบไหน พร้อมบอกทางออกที่ตรงกับสถานะของใบนั้น:

สถานะใบที่ค้างระบบบอกว่า
ยังไม่แนบสลิปยกเลิกใบเดิมก่อน แล้วเลือกใหม่ได้ทันที (มีปุ่มให้ตรงนั้น)
แนบสลิปแล้วรอทีมงานตรวจ หรือติดต่อทีมงาน — ยกเลิกเองไม่ได้ เพื่อไม่ให้หลักฐานการโอนหาย

💡 ถ้าใกล้หมดอายุแล้วระบบสร้างใบต่ออายุให้ล่วงหน้าอัตโนมัติ (7/3/1 วันก่อนหมด) ใบนั้นก็นับเป็นใบค้างเหมือนกัน — จะเปลี่ยนแพ็คเกจต้องยกเลิกใบนั้นก่อน

⭐ ใบที่ยกเลิกเองแล้ว ปลุกกลับมาไม่ได้

เดิมถ้ายกเลิกใบ ฿14,990 แล้วเลือกแพ็คเกจถูกกว่า การอัปโหลดสลิปยังปลุกใบเก่ากลับมาได้ ตอนนี้ใบที่ คุณยกเลิกเอง จะแนบสลิปไม่ได้ · เปิดหน้าจ่ายบัตรไม่ได้ · และ ไม่สร้าง QR ให้

⭐ สลิปที่ถูกปฏิเสธ ส่งใหม่แล้วแพ็คเกจสลับจริง

เดิมถ้าทีมงานปฏิเสธสลิปครั้งหนึ่ง แล้วคุณส่งใหม่จนได้รับอนุมัติ แพ็คเกจจะไม่เปลี่ยน (ระบบทำใบใหม่โดยลืมพกข้อมูล "จะเปลี่ยนไปแพ็คเกจไหน" ไปด้วย) — แก้แล้ว

🔴 ต่ออายุ / เปลี่ยนแพ็คเกจ เป็นสิทธิ์ของเจ้าของร้านและผู้ดูแลเท่านั้น

เมนูนี้ซ่อนจากพนักงานคนอื่นอยู่แล้ว แต่เดิมยังเรียกใช้ผ่านช่องทางตรงได้ ตอนนี้ปิดครบทั้ง 3 อย่าง: เปลี่ยนแพ็คเกจ · ยกเลิกใบชำระ · ยกเลิกนัดลดแพ็คเกจ

✅ การแนบสลิปยังทำได้ทุกบทบาทโดยเจตนา — เพราะร้านที่หมดอายุแล้วจะถูกพาไปหน้าต่ออายุ ทุกบทบาท ถ้าปิดด้วยจะกลายเป็นทางตัน จ่ายเงินไม่ได้

วันหมดอายุใหม่ = วันที่ระบุไว้บนใบชำระ

ระบบจะให้ ตรงกับวันที่หน้าจอบอกไว้ก่อนกดจ่ายเสมอ ไม่ใช่นับจากวันที่โอนเงิน เช่นใบระบุว่าครอบคลุมถึง 30 ก.ย. ต่อให้จ่ายวันที่ 5 ก.ย. ก็ได้ถึง 30 ก.ย. ตามที่ใบเขียน (เป็นวิธีเดียวกับผู้ให้บริการรายเดือนทั่วไป — จ่ายค่ารอบนั้น ไม่ใช่เริ่มนับใหม่จากวันจ่าย)

⚠️ ก่อนหน้านี้บางเส้นทางให้วันไม่ตรงกับที่หน้าจอบอก เช่นซื้อ รายปี แล้วได้แค่ 1 เดือน หรือเปลี่ยนไปแพ็คเกจสูงกว่าแล้ว ไม่ได้วันเพิ่มเลย — แก้ครบทุกเส้นทางแล้ว

14. การจัดการระบบ (Admin)

14.1 สาขา

📍 หน้า: /branches 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: เพิ่ม แก้ไข จัดการสาขาของร้าน

⭐ การลบสาขา — สาขาที่สร้างผิดลบออกได้แล้ว (19 ส.ค. 2569)

เดิมสาขาที่สร้างผ่านหน้าจอ ลบถาวรไม่ได้เลยแม้แต่สาขาเดียว — แม้เพิ่งสร้างเมื่อกี้และยังไม่เคยใช้งาน เพราะระบบคัดลอกข้อมูลหลัก (ยี่ห้อ · รุ่น · สี ฯลฯ) และสร้าง "ลูกค้าทั่วไป" เข้าสาขาใหม่ให้ตั้งแต่วินาทีแรก ระบบจึงมองว่า "มีข้อมูลผูกอยู่" ทุกครั้ง ⇒ กดลบกี่ครั้งก็ได้แค่ปิดใช้งาน แล้วแถวค้างในตารางตลอดไป

ตอนนี้ระบบแยกให้แล้วว่าอะไรคือ "ของที่ระบบเตรียมให้" กับ "ข้อมูลที่ร้านทำเอง" ⇒ สาขาที่ยังไม่มีข้อมูลของร้านผูกอยู่เลย ลบออกได้จริง โดยข้อมูลหลักที่ระบบคัดลอกให้จะถูกลบตามไปด้วย

พอกดปุ่มลบ ระบบจะตรวจให้ก่อนเสมอ แล้วบอกในกล่องยืนยันว่าจะเกิดอะไรขึ้นจริง:

กล่องยืนยันบอกว่ากดยืนยันแล้วได้อะไร
"สาขานี้จะถูกลบถาวร — กู้คืนไม่ได้" พร้อมรายการข้อมูลหลักที่จะถูกลบตามแถวหายไปจริง
"ลบถาวรไม่ได้ — มีข้อมูลอ้างอิงอยู่ N รายการ (…)"ปิดใช้งานให้แทน · ข้อมูลอยู่ครบ · แถวยังอยู่พร้อมป้าย "ปิดใช้งาน"
"ตรวจล่วงหน้าไม่สำเร็จ" (เน็ตมีปัญหา)กดได้ ระบบจะตัดสินให้เองตามกติกาข้างบน

สิ่งที่ทำให้ลบถาวรไม่ได้ (ต้องย้ายหรือลบออกจากสาขานั้นก่อน): สินค้า · ลูกค้าที่ร้านบันทึกเอง · งานซ่อม · การขาย · ใบคืนเงิน · ใบรับซื้อ · ผู้ใช้ที่สังกัดสาขานี้ · อะไหล่ · อุปกรณ์เสริม · ใบเบิกอะไหล่ · ประวัติสต๊อก · การโอนย้ายระหว่างสาขา · รอบนับสต๊อก · กะแคชเชียร์ · รายการเงินในลิ้นชัก · ใบแจ้งหนี้ · ค่าใช้จ่าย · เงินเดือน · การลงเวลา · ใบประกัน · ราคาซ่อมที่ร้านตั้งเอง · ตั้งค่าเฉพาะสาขา

📌 2 อย่างที่ไม่ขวางการลบ เพราะระบบเป็นคนสร้างให้เอง · ข้อมูลหลักที่คัดลอกมาตอนสร้างสาขา (ยี่ห้อ · รุ่น · สี · ความจุ · ประเภทซ่อม · วิธีชำระ · สถานะต่าง ๆ · หมวดอะไหล่ · ตำแหน่งจัดเก็บ · รายการเช็คสภาพ · เงื่อนไขท้ายเอกสาร) — ถูกลบตามไปกับสาขา · "ลูกค้าทั่วไป" ที่ระบบสร้างไว้ให้หน้าขายเลือก — ถูกลบตามไปด้วย ส่วนลูกค้าที่ร้านบันทึกเอง ยังขวางการลบตามปกติ

⚠️ สาขาที่เคยออกเอกสารไปแล้ว จะลบถาวรไม่ได้ตลอดไป แม้จะลบบิลทิ้งหมดแล้วก็ตาม — เพราะระบบเก็บ ตัวนับเลขเอกสาร ของสาขานั้นไว้ ถ้าลบทิ้งแล้วสร้างสาขาใหม่ด้วยรหัสเดิม เลขเอกสารจะเริ่มที่ 1 ใหม่ ซ้ำกับใบที่ลูกค้าถืออยู่ในมือ ⇒ กรณีนี้ให้ใช้ "ปิดใช้งาน" แทน

⚠️ ลบสาขาหลักไม่ได้ — ตั้งสาขาอื่นเป็นสาขาหลักก่อน · สาขาที่ปิดใช้งานจะไม่โผล่ในช่องเลือกสาขาและไม่รับข้อมูลใหม่ แต่ข้อมูลเก่ายังอยู่ครบ และ เปิดใช้งานกลับได้ที่หน้าแก้ไขสาขา · การลบถาวร กู้คืนไม่ได้ แต่ยังเหลือร่องรอยใน บันทึกการใช้งาน (§14.5) ว่าใครลบเมื่อไร พร้อมสำเนาข้อมูลสาขาที่หายไป

ขั้นตอนเพิ่มสาขาใหม่:

  1. กดปุ่ม "+ เพิ่มสาขา"
  2. กรอกข้อมูล:
ฟิลด์คำอธิบายจำเป็น
ชื่อสาขาชื่อสาขา (เช่น HQ, สาขาลาดพร้าว)✅
ที่อยู่ที่อยู่สาขา✅
เบอร์โทรเบอร์ติดต่อสาขา✅
อีเมลอีเมลสาขา❌
เป็นสาขาหลักตั้งเป็น HQ❌
  1. กดปุ่ม "บันทึก"

ข้อมูลหลักของสาขาใหม่ — ระบบเตรียมให้อัตโนมัติ ⭐ NEW

พอกดบันทึก ระบบจะ คัดลอกข้อมูลหลักจากสาขาที่มีอยู่ มาให้สาขาใหม่ทันที (ยี่ห้อ · รุ่น · สี · ความจุ · ประเภทซ่อม · วิธีชำระเงิน · สถานะต่าง ๆ · หมวดอะไหล่ · ตำแหน่งจัดเก็บ · รายการเช็คสภาพเครื่อง · เงื่อนไขท้ายเอกสาร · ลูกค้าทั่วไป) แล้วแจ้งจำนวนรายการที่คัดลอกมาในข้อความยืนยัน

  • คัดลอกจาก สาขาหลัก ก่อน ถ้าสาขาหลักยังไม่มีข้อมูลจะไล่หาสาขาที่มีข้อมูลถัดไป
  • เป็นการ คัดลอกสิ่งที่ร้านใช้จริง ไม่ใช่ยัดชุดมาตรฐานทับ — ยี่ห้อ/รุ่นที่ร้านเพิ่มเองก็ตามไปด้วย
  • ถ้ายังไม่มีสาขาไหนมีข้อมูลเลย ระบบจะใส่ชุดมาตรฐานให้แทน

ปุ่ม "คัดลอกข้อมูลหลัก" (ไอคอนสีเขียวอมฟ้าที่การ์ดสาขา)

ใช้กับ สาขาที่สร้างไว้ก่อนหน้านี้แล้วข้อมูลหลักว่าง — กดครั้งเดียวระบบจะดึงข้อมูลจากสาขาอื่นมาเติมให้

  • กดซ้ำได้ ไม่ทำให้ข้อมูลซ้ำ (รายการที่มีอยู่แล้วจะถูกข้าม)
  • ถ้าสาขานี้มีข้อมูลครบอยู่แล้ว ระบบจะบอกว่าไม่มีรายการใหม่ที่ต้องคัดลอก

💡 ทำไมต้องมี — ก่อนหน้านี้สาขาที่ 2 เป็นต้นไปเกิดมาพร้อมข้อมูลหลักว่างทั้งหมด ทำให้ทุก dropdown ในระบบไม่มีตัวเลือกให้เลือกตั้งแต่วันแรก ต้องนั่งพิมพ์ใหม่เองทีละตัว

⚠️ หมายเหตุ: จำนวนสาขาที่สร้างได้ขึ้นอยู่กับแพ็กเกจ Subscription

14.2 ผู้ใช้งาน

📍 หน้า: /users 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: เพิ่ม แก้ไข จัดการบัญชีผู้ใช้งานและกำหนด Role

ขั้นตอนเพิ่มผู้ใช้ใหม่:

  1. กดปุ่ม "+ เพิ่มผู้ใช้"
  2. กรอกข้อมูล:
ฟิลด์คำอธิบายจำเป็น
อีเมลอีเมลสำหรับ Login✅
ชื่อชื่อพนักงาน✅
นามสกุลนามสกุลพนักงาน✅
เบอร์โทรเบอร์ติดต่อ❌
บทบาทเลือกได้หลายบทบาทในคนเดียว✅ บังคับ
สาขาสาขาที่พนักงานคนนี้สังกัด✅ บังคับ
รหัสผ่านรหัสผ่านเริ่มต้น✅
อัตราค่าแรง/ชั่วโมงสำหรับคำนวณเงินเดือน❌
  1. ระบบสร้าง QR Code สำหรับลงเวลาอัตโนมัติ

⭐ "สาขา" กับ "บทบาท" เป็นช่องบังคับแล้ว (ปรับปรุง 19 ส.ค. 2569)

เดิม 2 ช่องนี้เว้นว่างแล้วกดบันทึกผ่าน — ได้บัญชีที่ใช้งานจริงไม่ได้ โดยไม่มีอะไรเตือนสักคำ

ถ้าเว้นว่างสิ่งที่เกิดกับบัญชีนั้น
ไม่เลือกสาขาทุกอย่างที่พนักงานคนนี้บันทึก (บิลขาย งานซ่อม ฯลฯ) ไม่ถูกนับเข้าสาขาไหนเลย และหายจากทุกหน้าจอที่กรองตามสาขา รวมถึงรายงานและยอดปิดวัน
ไม่เลือกบทบาทเข้าสู่ระบบได้ แต่ เปิดเมนูใดไม่ได้เลยสักเมนู

ตอนนี้ถ้าไม่เลือก จะกดบันทึกไม่ผ่าน — ระบบขึ้นข้อความสีแดงใต้ช่องที่ยังขาด บอกทีละช่องว่าต้องเติมอะไร

ร้านที่มีสาขาเดียว ไม่ต้องกดเลือกเอง — ระบบเติมสาขาให้อัตโนมัติ พร้อมข้อความใต้ช่องบอกว่าเลือกสาขาไหนให้ (ร้านที่ยังไม่มีสาขาเลย ระบบจะบอกให้ไปสร้างสาขาที่หน้า "สาขา" ก่อน)

⚠️ บัญชีเก่าที่ยังไม่มีสาขา — พอเปิดแก้ไข จะต้องเลือกสาขาก่อนจึงบันทึกได้

เป็นความตั้งใจ ไม่ใช่ข้อผิดพลาด · หน้าต่างแก้ไขจะขึ้นกล่องสีส้ม "บัญชีนี้ยังไม่สังกัดสาขา" อธิบายเหตุผลไว้ให้ บัญชีเดิมยังเข้าสู่ระบบและทำงานได้ตามปกติ ระบบไม่ได้ปิดกั้นอะไร — แต่ถ้าอยากให้รายการของเขา โผล่ในรายงานรายสาขา ให้เปิดแก้ไขแล้วเลือกสาขาให้เรียบร้อยสักครั้ง

การจัดการบทบาท:

  • แต่ละบัญชีถือได้หลายบทบาทพร้อมกัน (ช่องเดียวเลือกได้หลายรายการ)
  • ตัวอย่าง: พนักงานคนหนึ่งเป็นทั้ง พนักงานขาย และ ช่างซ่อม ได้ (= ช่างขาย)
  • คนที่ถือหลายบทบาท จะได้สิทธิ์ของทุกบทบาทรวมกัน

⭐ ปรับสิทธิ์ของแต่ละบทบาทให้เข้ากับร้านคุณได้แล้ว (19 ส.ค. 2569)

เดิมสิทธิ์ของแต่ละบทบาทถูกกำหนดตายตัวเหมือนกันทุกร้าน — ร้านที่ทำงานไม่เหมือนคนอื่นจึงต้อง ยอมใช้ตามที่ระบบให้มา หรือไม่ก็ต้องเพิ่มบทบาทเกินจำเป็นให้พนักงาน (ซึ่งเปิดสิทธิ์กว้างกว่าที่ตั้งใจ)

ตอนนี้กำหนดได้ว่าแต่ละบทบาทในร้านคุณเข้าถึงอะไรได้บ้าง โดยไม่กระทบร้านอื่นในระบบ

กลุ่มงานที่ปรับได้ (10 กลุ่ม)ครอบอะไร
สิทธิ์เจ้าของร้านงานระดับเจ้าของร้าน
จัดการระบบร้าน (ผู้ดูแล)สาขา · ผู้ใช้งาน · บันทึกการใช้งาน · หน้าตั้งค่าสิทธิ์นี้เอง
สิทธิ์ระดับผู้จัดการดูแลสต็อกและงานระดับผู้จัดการ
งานแคชเชียร์ (รับเงิน)รับชำระเงิน
งานขายหน้าขาย · กะการขาย · ลิ้นชักเงินสด
งานซ่อมงานช่าง · คลังอะไหล่ · เช็คสภาพเครื่อง
รายงานเมนูรายงาน
เงินเดือนเมนูเงินเดือน
ตั้งค่าร้านเมนูตั้งค่า
สลับสาขาที่ทำงานอยู่ ⭐ ใหม่ช่องเลือกสาขาบนแถบหัว (ดูหัวข้อถัดไป)

ตัวอย่างที่ใช้จริง — ร้านที่แคชเชียร์ต้องช่วยรับงานซ่อมด้วย: เปิด งานซ่อม ให้บทบาทแคชเชียร์ แล้วเมนูงานช่างกับคลังอะไหล่จะขึ้นให้แคชเชียร์ของร้านนั้น โดยร้านอื่นไม่เปลี่ยนอะไรเลย

⭐ ตั้งเองได้จากหน้าจอแล้ว (20 ส.ค. 2569) — ดูวิธีที่หัวข้อ "หน้าจอตั้งค่าสิทธิ์" ถัดไป

ร้านที่ยังไม่ได้เข้าไปแตะ ไม่ต้องทำอะไร — ใช้สิทธิ์ชุดเดิมทุกอย่างตาม §1.4 ไม่มีพนักงานคนไหนได้สิทธิ์เพิ่มหรือถูกถอดสิทธิ์จากการเปลี่ยนแปลงครั้งนี้

💡 ปรับแล้วพนักงานเห็นผลเมื่อไร — ตอนเปิดแอปครั้งถัดไป ระบบจะถามสิทธิ์ล่าสุดให้เอง ไม่ต้องสั่งให้พนักงานออกจากระบบแล้วเข้าใหม่ (ถ้าเขากำลังเปิดหน้าค้างอยู่ ให้รีเฟรชหน้า 1 ครั้ง)

⚠️ การปรับสิทธิ์เป็นคนละเรื่องกับ สาขา ที่พนักงานสังกัด — สิทธิ์บอกว่า "ทำอะไรได้" ส่วนสาขาบอกว่า "รายการที่บันทึกจะเข้าสาขาไหน" ต้องตั้งให้ถูกทั้งคู่

⭐ หน้าจอตั้งค่าสิทธิ์ (ใหม่ 20 ส.ค. 2569)

📍 หน้า: ตั้งค่า → การ์ด "สิทธิ์ตามบทบาท" (หรือเข้าตรงที่ /settings/permissions) 👤 สิทธิ์: เจ้าของร้าน · ผู้ดูแลระบบ

หน้าจอเป็นตาราง 11 กลุ่มงาน × 6 บทบาท ติ๊กเปิด/ปิดได้ทุกช่อง (บนมือถือเป็นการ์ดทีละกลุ่มงาน)

⭐ กลุ่มงานใหม่: "ใบแจ้งหนี้ B2B" (24 ส.ค. 2569) — ร้านที่อยากให้ผู้จัดการ ออกใบแจ้งหนี้ได้เอง ติ๊กช่องนี้ให้บทบาท "ผู้จัดการ" ได้เลย

🔒 เปิดแล้วผู้จัดการทำได้แค่งานเอกสาร — ดูรายการ · สร้างใบ · แก้ใบร่าง · ออกใบ · ดาวน์โหลด PDF · ส่วนงานเงิน (บันทึกรับชำระ · คืนเงิน · ลบใบ) ยังเป็นเจ้าของร้าน/ผู้ดูแลเท่านั้น และติ๊กเปิดให้ไม่ได้ เพราะการบันทึกว่า เงินเข้าแล้ว/คืนไปแล้ว ย้อนกลับยากและกระทบยอดบัญชีโดยตรง

ร้านที่ไม่ได้เข้ามาติ๊ก ไม่มีอะไรเปลี่ยน — ค่าตั้งต้นยังเป็นเจ้าของร้าน+ผู้ดูแล เหมือนเดิมทุกประการ

สิ่งที่เห็นบนจอความหมาย
ช่องพื้นขาวค่าจากระบบ — สิทธิ์มาตรฐานที่ทุกร้านได้เหมือนกัน
ช่องพื้นฟ้าร้านคุณปรับเอง — ต่างจากค่าระบบ
ป้ายมุมขวาบนนับให้ว่าปรับเองไปกี่ช่องจากทั้งหมด 60 ช่อง
ปุ่มลูกศรหมุนท้ายแถวคืนค่าตั้งต้นเฉพาะแถวนั้น

ขั้นตอน:

  1. ติ๊ก/เอาติ๊กออกในช่องที่ต้องการ (ยังไม่บันทึกจนกว่าจะกดปุ่ม)
  2. กด "ตรวจแล้วบันทึก" — ระบบขึ้นหน้าต่างสรุปว่ากำลังจะเปลี่ยนอะไรบ้าง แยกเป็น กล่องส้ม = ถอนสิทธิ์ และ กล่องเขียว = เพิ่มสิทธิ์
  3. อ่านแล้วกด "ยืนยันบันทึก"

⚠️ ดูกล่องส้มให้ดีก่อนกดยืนยัน — การถอนสิทธิ์มีผลกับ พนักงานทุกคนที่ถือบทบาทนั้น และเขาจะกดใช้งานส่วนนั้นไม่ได้ทันทีที่เปิดแอปครั้งถัดไป

🔒 ระบบไม่ยอมให้คุณล็อกตัวเองออก — ถ้าตั้งค่าจนไม่เหลือใครมีสิทธิ์ "จัดการระบบร้าน (ผู้ดูแล)" หรือการตั้งค่านั้นจะถอดสิทธิ์ผู้ดูแลออกจากบัญชีของคุณเอง ปุ่มบันทึกจะถูกปิด พร้อมข้อความสีแดงอธิบายเหตุผลอยู่เหนือปุ่ม — เพราะถ้าบันทึกไปแล้ว จะไม่มีใครกลับมาแก้หน้านี้ได้อีกเลย

⭐ จำกัดการสลับสาขา (ใหม่ 20 ส.ค. 2569)

ช่องเลือกสาขาบนแถบหัว เดิมทุกบทบาทเปลี่ยนได้ — พนักงานที่เผลอเลือกสาขาอื่นค้างไว้ จะบันทึกงานเข้าสาขานั้นโดยไม่รู้ตัว (เกิดขึ้นจริงมาแล้ว)

ตอนนี้ปิดสิทธิ์ "สลับสาขาที่ทำงานอยู่" ของบทบาทไหนก็ได้จากหน้าตั้งค่าสิทธิ์

คนที่ถูกปิด จะเห็นอะไร:

  • ช่องเลือกสาขาเปลี่ยนเป็น ป้ายชื่อสาขาพร้อมไอคอนแม่กุญแจ — ยังเห็นชัดว่าตัวเองอยู่สาขาไหน (จงใจไม่ซ่อนทิ้ง เพราะถ้าไม่รู้ว่าอยู่สาขาไหน จะบันทึกงานโดยไม่รู้ว่าเข้าที่ใด)
  • ระบบดึงกลับมาที่สาขาตั้งต้นของเขาให้เอง ถ้าก่อนหน้านี้เคยสลับไปค้างที่สาขาอื่น
  • ชี้ที่ป้ายจะมีคำอธิบายว่าต้องแจ้งผู้ดูแลระบบของร้านถ้าต้องทำงานที่สาขาอื่น

⚠️ ค่าเริ่มต้นคือ "ทุกบทบาทสลับได้" เหมือนเดิม — ร้านที่ไม่ได้เข้าไปปิด ไม่มีอะไรเปลี่ยน

💡 ก่อนปิดสิทธิ์นี้ ให้ตรวจว่าพนักงานทุกคน มีสาขาตั้งต้นครบแล้ว (ช่อง "สาขา" ในหน้าผู้ใช้งาน) คนที่ยังไม่มีสาขา ระบบจะไม่ดึงกลับไปไหน เพราะไม่รู้ว่าบ้านของเขาคือสาขาอะไร

⭐ คัดลอกสิทธิ์จากพนักงานคนอื่น (ใหม่ 20 ส.ค. 2569)

ในหน้าต่างเพิ่ม/แก้ไขผู้ใช้ มีกล่อง "คัดลอกสิทธิ์จากพนักงานคนอื่น" — เลือกชื่อคนที่ทำงานตำแหน่งเดียวกัน แล้วระบบเติมช่อง "บทบาท" ให้ ไม่ต้องนั่งจำว่าคนนั้นถือบทบาทอะไรบ้าง

กติกาเหตุผล
เห็นก่อนว่าจะได้บทบาทอะไร (โหมดแก้ไขแสดง "ก่อน → หลัง")กันเผลอเปลี่ยนสิทธิ์คนที่ทำงานอยู่
สาขาไม่คัดลอกให้อัตโนมัติ — มีช่องติ๊กแยกคนละสาขากันเป็นเรื่องปกติ · สาขาผิด = รายการหายจากรายงาน
คัดลอกบทบาทที่สูงกว่าสิทธิ์ของคุณเองไม่ได้เช่นผู้ดูแลระบบคัดลอกจากเจ้าของร้านไม่ได้ ระบบบอกเหตุผลไว้บนจอ
เตือนสีแดงเมื่อกำลังจะให้สิทธิ์ระดับสูง (เจ้าของ/ผู้ดูแล)บัญชีระดับนั้นแก้สิทธิ์คนอื่นได้ทั้งร้าน
แตะเฉพาะบทบาท — ไม่แตะอีเมล รหัสผ่าน QR เงินเดือนคัดลอกสิทธิ์ ไม่ใช่ทำสำเนาพนักงาน
คัดลอกครั้งเดียว ไม่ผูกกันแก้สิทธิ์ของต้นทางทีหลัง จะไม่ตามมาถึงคนนี้

💡 ยังต้องกด "บันทึก" เอง — การคัดลอกแค่เติมช่องให้ ตรวจอีกครั้งแล้วค่อยบันทึก และระบบบันทึกไว้ใน บันทึกการใช้งาน (Audit Log) ด้วยว่าสิทธิ์ชุดนี้ลอกมาจากใคร

QR Code พนักงาน:

  • ระบบสร้าง QR Code unique ให้ทุก User
  • กดปุ่ม "ดู QR" หรือ "พิมพ์ QR"
  • ใช้สำหรับสแกนลงเวลาที่ Kiosk

เปิด/ปิดบัญชี:

  • Toggle Switch เพื่อปิดใช้งานชั่วคราว
  • ผู้ใช้ที่ปิดใช้งานจะ Login ไม่ได้

14.3 ข้อมูลหลัก (Master Data)

📍 หน้า: /masters 👤 สิทธิ์: OWNER, ADMIN, MANAGER

วัตถุประสงค์: จัดการข้อมูลอ้างอิงที่ใช้ทั่วทั้งระบบ เช่น ยี่ห้อ รุ่น สี ประเภทการซ่อม ฯลฯ

รายการ Master Data:

หัวข้อURLคำอธิบาย
ยี่ห้อสินค้า/masters/brandsApple, Samsung, OPPO ฯลฯ
รุ่นสินค้า/masters/modelsiPhone 15, Galaxy S24 ฯลฯ
สี/masters/colorsดำ, ขาว, ทอง ฯลฯ (พร้อม Color Picker)
ความจุ/masters/storages64GB, 128GB, 256GB, 512GB ฯลฯ
ตำแหน่งจัดเก็บ/masters/storage-locationsShelf A1, ตู้ B ฯลฯ
หมวดหมู่อะไหล่/masters/spare-part-categoriesจอ, แบตเตอรี่, ชาร์จพอร์ต ฯลฯ
ประเภทการซ่อม/masters/repair-typesเปลี่ยนจอ, เปลี่ยนแบต, ซ่อมบอร์ด ฯลฯ
สถานะการซ่อม/masters/repair-statusesRECEIVED, IN_PROGRESS, COMPLETED ฯลฯ
สภาพสินค้า/masters/product-conditionsNEW, LIKE_NEW, เกรด A, B, C, D (ตำหนิเยอะ ราคาถูก)
สถานะสินค้า/masters/product-statusesIN_STOCK, RESERVED, SOLD
สถานะเงินเดือน/masters/payroll-statusesPENDING, APPROVED, PAID
สถานะประกัน/masters/warranty-statusesACTIVE, EXPIRED, CLAIMED
เงื่อนไขเอกสาร ⭐/masters/document-termsข้อความท้ายใบรับซ่อม/ใบเสนอราคา/ใบเสร็จ/ใบประกัน/ใบรับซื้อ — แก้เองได้ (ดู §12.0A) · เฉพาะ OWNER/ADMIN

ขั้นตอนเพิ่ม Master Data:

  1. คลิกที่ Card ของ Master Data ที่ต้องการ
  2. กดปุ่ม "+ เพิ่ม"
  3. กรอกชื่อและรายละเอียด
  4. กดปุ่ม "บันทึก"

⚠️ หมายเหตุ: ข้อมูลหลักเป็น Tenant-specific — แต่ละร้านมีรายการของตัวเอง ไม่แชร์กับร้านอื่น

14.4 ตั้งค่า

📍 หน้า: /settings 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: ตั้งค่าข้อมูลร้านค้า, เป้าหมายยอดขาย, PromptPay, VAT

ส่วนที่ตั้งค่าได้:

ส่วนฟิลด์
ข้อมูลร้านชื่อร้าน, ที่อยู่, เบอร์โทร, อีเมล, Logo
ภาษีจด VAT หรือไม่ (Toggle), อัตรา VAT (ค่าเริ่มต้น 7%)
PromptPayเบอร์โทร PromptPay สำหรับสร้าง QR
เลขประจำตัวผู้เสียภาษีTax ID
เป้าหมายเป้าหมายยอดขายต่อเดือน (บาท)
เป้าหมายซ่อมเป้าหมายจำนวนงานซ่อมต่อเดือน

💡 เคล็ดลับ: ตั้งค่า PromptPay Phone ก่อนเริ่มขาย เพื่อให้ระบบสร้าง QR Code ได้อัตโนมัติ

การ์ด "สิทธิ์ตามบทบาท" ⭐ ใหม่ 20 ส.ค. 2569 — อยู่บนสุดของหน้านี้ กดเข้าไปตั้งได้ว่า แต่ละบทบาทในร้านคุณเข้าถึงอะไรได้บ้าง (รายละเอียดที่ §14.2)

⚠️ การ์ดนี้ขึ้นเฉพาะ เจ้าของร้าน / ผู้ดูแลระบบ — ร้านที่เปิดหน้าตั้งค่าให้ผู้จัดการด้วย ผู้จัดการจะไม่เห็นการ์ดนี้ (จงใจ — กันเห็นปุ่มแล้วกดไม่ได้)

14.5 Audit Log

⭐ 8 ก.ย. 2569 — เวลาในกล่อง "ข้อมูลเก่า / ข้อมูลใหม่" อ่านเป็นเวลาไทยแล้ว

อาการเดิม — กดดูรายละเอียดรายการหนึ่ง หัวโมดัลขึ้น "7 ก.ย. 2569 17:36" (เวลาไทย) แต่ในกล่องข้างล่างขึ้น "endDate": "2026-10-07T10:36:00.279Z" ซึ่งเป็นเวลาสากล ช้ากว่าไทย 7 ชั่วโมง ⇒ ร้านลบ 7 ชั่วโมงเองทุกครั้ง และเคยแจ้งบั๊กที่ไม่มีจริงเข้ามาเพราะเรื่องนี้

🔴 และบางค่าไม่มีทางตรงกับเวลาข้างบนอยู่แล้ว — เช่น endDate (วันหมดประกัน) · dueDate (วันครบกำหนด) · openedAt (เวลาเปิดกะ) เพราะมันคือ ข้อมูลของรายการนั้น ไม่ใช่ เวลาที่เกิดเหตุการณ์ (ตัวอย่างจริง: กล่องบอก 7 ต.ค. หัวโมดัลบอก 7 ก.ย. — ห่างกัน 1 เดือน)

ตอนนี้ กล่องแสดงเป็น "endDate": "7 ต.ค. 2569 17:36 น." รูปแบบเดียวกับเวลาข้างบนเป๊ะ ⇒ เทียบกันได้ตรง ๆ ไม่ต้องคำนวณในหัว

⚠️ ข้อมูลในระบบไม่ถูกแก้แม้แต่แถวเดียว — เปลี่ยนเฉพาะวิธีแสดงผลบนจอ · ต้องการค่าดิบเพื่อเทียบกับ log ดูได้จาก Record ID ในโมดัลเดียวกัน · หัวโมดัล คอลัมน์วันที่/เวลา ตัวกรอง และการแบ่งหน้า ไม่เปลี่ยนเลย

📍 หน้า: /audit-logs 👤 สิทธิ์: OWNER, ADMIN

วัตถุประสงค์: ดูบันทึกกิจกรรมทั้งหมดในระบบ — ใครทำอะไร เมื่อไหร่

🔴 แก้แล้ว: เดิมหน้านี้ดูได้แค่ 25 รายการล่าสุด (24 ส.ค. 2569 — ร้านแจ้งเข้ามา) อาการที่เจอ: ปุ่มเลขหน้าขึ้นบนจอ แต่กดแล้วไม่มีอะไรเกิดขึ้น · ตั้งช่อง "ต่อหน้า" เป็น 100 แล้วก็ยังได้ 25 รายการเท่าเดิม · ตัวเลขท้ายตารางขึ้นว่า "1-25 / 25" ซึ่งอ่านได้ว่า "ร้านมีบันทึกอยู่แค่ 25 รายการ" ทั้งที่ของจริงมีหลายพัน · ตอนนี้: กดเลขหน้าได้จริง · เลือก 10/25/50/100 ต่อหน้าได้ · ตัวเลขท้ายตาราง บอกจำนวนทั้งหมดจริง และเปลี่ยนตัวกรองแล้วเด้งกลับหน้า 1 ให้เอง (ไม่งั้นจะค้างอยู่หน้าเดิมแล้วเห็นตารางว่าง ซึ่งอ่านผิดว่า "ไม่มีข้อมูล")

⭐ ใหม่ 27 ส.ค. 2569 — การส่งออก Excel ถูกบันทึกแล้ว (ประเภท "ส่งออก")

เดิม การโหลดไฟล์ Excel ข้อมูลลูกค้า / ยอดขาย / ผลนับสต๊อก ไม่ถูกบันทึกที่ไหนเลย ⇒ ตัวเลือก "ส่งออก" ในช่องกรองจึงไม่เคยโผล่ ซึ่งอ่านได้ว่า "ไม่เคยมีใครส่งออกข้อมูลเลย"

ตอนนี้ทุกครั้งที่กดปุ่ม Excel ที่ รายงาน · ยอดรับเงินวันนี้ · ผลการนับสต๊อก ระบบจะบันทึกว่า ใครกด · เมื่อไร · รายงานอะไร · กี่แถว · ช่วงวันที่ไหน · สาขาไหน

🔴 บันทึกนี้บอกอะไรได้และบอกไม่ได้ — อ่านให้ครบก่อนใช้อ้างอิง บอกได้: ใครกดปุ่มส่งออกบนหน้าจอ และส่งออกอะไรไป บอกไม่ได้: "ข้อมูลออกจากระบบทางไหนบ้าง" — เพราะไฟล์ถูกสร้างในเบราว์เซอร์ แล้วหน้าจอเป็นฝ่ายแจ้งเซิร์ฟเวอร์ ⇒ คนที่ดึงข้อมูลด้วยวิธีอื่นแล้วทำไฟล์เอง จะไม่ปรากฏในบันทึกนี้ ⇒ ใช้เป็น หลักฐานว่าใครทำอะไรบนระบบ ได้ · ใช้เป็น หลักประกันว่าข้อมูลไม่รั่ว ไม่ได้ 💡 ระบบไม่ได้เก็บ เนื้อข้อมูล ที่ส่งออกไว้ในบันทึก — เก็บแค่ว่าส่งออกอะไรไปเท่าไร (ถ้าเก็บเนื้อไว้ด้วย ตารางที่มีไว้ตรวจสอบจะกลายเป็นสำเนาข้อมูลลูกค้าอีกชุด)

✅ อัปเดตวันเดียวกัน — ตอนนี้ไฟล์ถูกสร้างที่เซิร์ฟเวอร์แล้ว บันทึกจึงเชื่อถือได้เต็มที่ ข้อจำกัดข้างบน ("หน้าจอเป็นคนบอกเซิร์ฟเวอร์") หมดไปแล้ว — เซิร์ฟเวอร์เป็นคนสร้างไฟล์เอง จึงรู้ทุกครั้งที่มีการส่งออกจริง ไม่ต้องรอให้เบราว์เซอร์รายงานตัว

ข้อมูลที่บันทึก:

ฟิลด์ตัวอย่าง
ผู้กระทำadmin@shop.com
การกระทำCREATE_PRODUCT, UPDATE_REPAIR, DELETE_USER
โมดูลProduct, Repair, User, Sale
รายละเอียดข้อมูลก่อน-หลังการเปลี่ยนแปลง
เวลาวัน-เวลาตาม Timezone Asia/Bangkok
IP AddressIP ของผู้ใช้

⭐ การเปิดร้านมีบันทึกในประเภท "ข้อมูลร้าน" แล้ว — เดิมเหตุการณ์แรกสุดของร้าน (วันที่เปิดใช้งาน · แพ็คเกจที่เลือก · ทดลองใช้ถึงวันไหน) ถูกบันทึกไว้ในประเภท "ผู้ใช้งาน" อย่างเดียว ⇒ กรองด้วยประเภท "ข้อมูลร้าน" แล้วได้ผลว่างเปล่า ซึ่งอ่านได้ว่า "ไม่เคยมีอะไรเกิดขึ้นกับร้านนี้"

⏳ ระบบเก็บบันทึกย้อนหลัง 365 วัน แล้วลบรายการที่เก่ากว่านั้นให้อัตโนมัติ (เริ่ม 19 ส.ค. 2569) เดิม ไม่มีการลบเลย บันทึกสะสมไปเรื่อย ๆ จนหน้านี้ช้าลงเมื่อข้อมูลเยอะ · ระบบล้างให้เองทุกวันตอนตี 3 — ร้านไม่ต้องกดอะไร · ทำไมต้อง 365 วัน: มาตรฐานสากล (PCI DSS) กำหนด 12 เดือน และสูงกว่าขั้นต่ำ ตามกฎหมายไทยเกือบ 4 เท่า (พ.ร.บ.คอมพิวเตอร์ ม.26 กำหนดไม่น้อยกว่า 90 วัน) · 🔒 ตั้งให้เก็บสั้นกว่า 90 วันไม่ได้ — เป็นขั้นต่ำตามกฎหมาย ระบบจะปฏิเสธ · 📌 ถ้าต้องใช้บันทึกเป็นหลักฐานย้อนหลังเกิน 1 ปี (เช่นข้อพิพาทเก่า) กรุณาส่งออกเก็บไว้เองก่อนครบกำหนด หรือแจ้งผู้ให้บริการล่วงหน้า

การใช้งาน:

  • กรองตามผู้ใช้, การกระทำ, โมดูล
  • ค้นหาด้วย keyword
  • Export เป็น CSV ได้

🟠 รายการที่ทีมงานผู้ให้บริการเป็นผู้ทำ — ดูแยกได้แล้ว ⭐ NEW (12 ส.ค. 2569)

เวลาทีมงานผู้ให้บริการต้องเข้ามาดูหน้าจอของร้านเพื่อช่วยแก้ปัญหา ระบบจะให้ทีมงานเข้าในนามผู้ใช้ของร้าน เดิมรายการที่ทีมงานทำจะขึ้นเป็นชื่อพนักงานคนนั้นในหน้านี้ ทำให้เจ้าของร้านเข้าใจผิดว่าพนักงานเป็นคนทำ

ตอนนี้แยกออกจากกันชัดเจนแล้ว:

จุดที่เห็นแสดงอะไร
แถบด้านบนของหน้าเตือนเป็นสีส้มเมื่อช่วงเวลาที่กำลังดูมีรายการของทีมงานอยู่
ป้ายในแถวป้ายส้ม "ทีมงานผู้ให้บริการ" พร้อมบรรทัด "ไม่ใช่พนักงานร้าน · เข้าใช้งานในนาม …"
หน้าต่างรายละเอียดกล่องส้มระบุชื่อผู้ดูแลที่เข้ามาและรหัสอ้างอิงของการเข้าถึงครั้งนั้น
ตัวกรอง "ผู้ทำรายการ"เลือกดูเฉพาะ พนักงานของร้าน หรือเฉพาะ ทีมงานผู้ให้บริการ ได้

ข้อควรทราบ — ป้ายนี้จะขึ้นเฉพาะรายการที่เกิดตั้งแต่วันที่ติดตั้งฟีเจอร์นี้เป็นต้นไป รายการเก่ากว่านั้นระบบย้อนไปตรวจสอบไม่ได้ จึงไม่มีป้าย

รายการของพนักงานร้านตามปกติ ไม่มีป้ายนี้ — ถ้าเห็นทุกแถวมีป้าย แปลว่าผิดปกติ ให้แจ้งผู้ให้บริการ

⭐ บันทึกครอบคลุมมากขึ้นกว่าเดิมเท่าตัว (18 ส.ค. 2569)

เดิมมีหลายอย่างที่ทำไปแล้ว ไม่เหลือร่องรอยในหน้านี้เลย ตอนนี้บันทึกครบแล้ว สิ่งที่ร้านจะเริ่มเห็นในหน้านี้ (ที่เมื่อก่อนไม่เคยมี):

กลุ่มตัวอย่างที่เริ่มบันทึกแล้ว
เงินจ่ายเงินเดือน · อนุมัติ/เพิ่ม/ลบรายการหักเงินเดือน · พักบิลและลบบิลพัก
คลังปรับยอดอุปกรณ์เสริมด้วยมือ · เบิกอะไหล่เข้างานซ่อม · ยกเลิกใบโอนสาขา · ยกเลิกใบสั่งซื้อ · แก้/ยิงนับรอบนับสต๊อก
สิทธิ์เปลี่ยนสิทธิ์ผู้ใช้ (เห็นชุดสิทธิ์เดิม → ชุดใหม่เป็นชื่อไทย) · เพิ่ม/ลบ/ปิดใช้งานผู้ใช้ · รีเซ็ตและเปลี่ยนรหัสผ่าน
ค่าตั้งค่าแก้ VAT และข้อมูลที่พิมพ์บนเอกสาร · สร้าง/แก้/ปิดสาขา · เปลี่ยนสาขาหลัก · คัดลอกข้อมูลหลักไปสาขาอื่น · สร้าง/แก้/ลบตารางสำรองข้อมูล
งานซ่อม-ประกันออกและลบเอกสารทุกชนิด · เพิ่ม/แก้/ลบอะไหล่ในใบซ่อม · มอบหมายช่าง · รับ/อนุมัติ/ปฏิเสธ/ปิดเคลมประกัน · แก้รายการเช็คลิสต์
ลงเวลาเข้า-ออกงาน · สแกน QR (บันทึกว่าใครเป็นคนสแกน และใช่ตัวเองหรือไม่) · แก้เวลาย้อนหลัง
ไฟล์และบัญชีร้านอัปโหลด/ลบไฟล์แนบ · ต่ออายุและเปลี่ยนแพ็คเกจ · แจ้งชำระเงิน · สร้าง/เพิกถอนกุญแจ API · แก้ข้อมูลร้าน
บันทึกเองการล้างบันทึกเก่าออกจากหน้านี้ ก็ถูกบันทึกไว้ด้วยแล้ว (ใครสั่ง ลบไปกี่แถว ถึงวันไหน)

ตัวกรองบอกความจริงแล้ว — เดิมช่อง "ประเภทข้อมูล" กับ "การกระทำ" มีตัวเลือกที่กดแล้วไม่มีอะไรเลยเสมอ (เช่น "ส่งออกข้อมูล" ซึ่งอ่านได้ว่า "ไม่เคยมีใครส่งออกข้อมูลลูกค้า" ทั้งที่ความจริงคือ ระบบไม่เคยบันทึกเรื่องนี้) ตอนนี้ ตัวเลือกสร้างจากข้อมูลจริงของร้านคุณ ⇒ ทุกตัวเลือกที่เห็น กดแล้วมีข้อมูลเสมอ · และเพิ่มชื่อไทยของตารางอีก 43 รายการ ⇒ แถวที่เคยขึ้นเป็นชื่ออังกฤษและกรองไม่ได้ ตอนนี้อ่านออกและกรองได้ทั้งหมด

ข้อมูลอ่อนไหวถูกปิดบังแล้ว — เลขบัตรประชาชน · รหัสผ่าน · OTP · โทเค็น · กุญแจ API จะไม่ถูกเก็บลงบันทึกอีก รวมถึงกรณีที่ค่านั้นซ่อนอยู่ข้างในข้อมูลชั้นลึก ซึ่งเดิมหลุดออกมาได้ · เลขผู้เสียภาษี ของร้านเอง ยังเก็บไว้ตามเดิม เพราะเป็นหลักฐานว่าใครแก้เลขบนเอกสาร · ⚠️ แถวเก่าที่บันทึกไว้ก่อนหน้านี้ยังคงอยู่เหมือนเดิม — กติกาใหม่มีผลกับรายการที่เกิดตั้งแต่วันนี้เป็นต้นไป

14.6 เชื่อมต่อ LINE OA ของร้าน ⭐ ใหม่ 1 ก.ย. 2569

📍 หน้า: /line-oa (เมนู LINE OA — เป็นหน้าของตัวเอง ไม่ได้อยู่ใน "ตั้งค่า") 👤 สิทธิ์: เจ้าของร้าน / แอดมิน 💳 แพ็คเกจ: เอ็นเตอร์ไพรส์ เท่านั้น (ร้านช่วงทดลองใช้ได้ครบ)

วัตถุประสงค์: ผูก LINE Official Account ของร้านเข้ากับระบบ เพื่อให้ต่อไปแจ้งสถานะงานซ่อมและส่งเอกสารหาลูกค้าทาง LINE ได้จากในระบบ แทนการพิมพ์ส่งเองทีละคน

🔴 ต้องตั้งค่าหน้านี้ให้เสร็จก่อน การแจ้งสถานะอัตโนมัติ (§14.6B) จึงจะทำงาน — เดิมหน้านี้ทำเฉพาะ "หน้าตั้งค่า + รับข้อความเข้า"** — ยังไม่มีหน้าแชทและยังไม่แจ้งเตือนอัตโนมัติ การกรอกค่าตอนนี้คือการเตรียมช่องทางไว้ให้พร้อม

สิ่งที่ต้องเตรียมจาก LINE Developers Console

ค่าที่ต้องกรอกไปเอาจากไหน
Channel IDแท็บ Basic settings → หัวข้อ Channel ID
Channel Secretแท็บ Basic settings → หัวข้อ Channel secret
Channel Access Tokenแท็บ Messaging API → Channel access token (long-lived)
Basic ID (@xxxxx)หน้า LINE OA Manager — ใช้ประกอบลิงก์เพิ่มเพื่อน
ชื่อบัญชีชื่อที่ร้านตั้งเองไว้ดูในหน้านี้ ไม่ต้องตรงกับชื่อ OA จริง

ขั้นตอน

  1. เข้าเมนู LINE OA → กรอกค่าทั้ง 5 ช่อง → บันทึก
  2. คัดลอก Webhook URL ที่ระบบแสดงให้ → ไปวางใน LINE Console (Messaging API → Webhook URL) → กด Verify → เปิดสวิตช์ Use webhook
  3. กลับมาที่หน้านี้ → กด ทดสอบการเชื่อมต่อ

🔴 Webhook URL ต้องคัดลอกจากหน้านี้เท่านั้น ห้ามพิมพ์เอง — ระบบเป็นคนประกอบให้และมีรหัสประจำร้านอยู่ในนั้น

ผลการทดสอบ — 4 แบบ แก้คนละทาง

ผลที่ขึ้นแปลว่าต้องทำอะไร
สำเร็จค่าถูกต้องทั้งชุดเสร็จแล้ว — ระบบเติมชื่อ OA และ Basic ID ให้เอง
ยังไม่ได้ตั้งค่ายังไม่เคยบันทึกกรอกแล้วบันทึกก่อน
โทเคนไม่ถูกต้องหรือหมดอายุAccess Token ใช้ไม่ได้แล้วไปออกใหม่ที่ Console แล้วบันทึกทับ
โทเคนเป็นของ Channel อื่นโทเคนใช้ได้ แต่คนละ channel กับ Channel ID ที่กรอกตรวจว่าคัดลอกมาจาก channel เดียวกัน
ติดต่อ LINE ไม่ได้เน็ตหรือ LINE ขัดข้องชั่วคราวไม่ใช่ความผิดของค่าที่กรอก — รอแล้วลองใหม่

ℹ️ ตั้งแต่ 2 ก.ย. 2569 ถ้าผลไม่ผ่านเพราะ LINE ตอบกลับมา ข้อความจะต่อท้ายด้วยสิ่งที่ LINE ตอบจริง (เช่น LINE ตอบ HTTP 400: …) — ถ้าแก้ตามตารางแล้วยังไม่ผ่าน ให้ส่งข้อความบรรทัดนั้นให้ทีมงานทั้งบรรทัด · อย่ากด Reissue โทเคนซ้ำเพื่อลองใหม่ — LINE ทำให้โทเคนเก่าใช้ไม่ได้ทันทีที่ออกใหม่ ต้องนำโทเคนใหม่มาบันทึกทับทุกครั้ง

เรื่องความปลอดภัยที่ต้องรู้

  • Channel Secret และ Access Token จะไม่ถูกแสดงเต็มอีกเลยหลังบันทึก — หน้าจอขึ้นแค่ "ตั้งค่าไว้แล้ว" กับ 4 ตัวท้าย
  • เว้นช่องความลับว่างไว้ = ไม่เปลี่ยนค่าเดิม ⇒ แก้แค่ชื่อบัญชีได้โดยไม่ต้องกรอกโทเคนใหม่
  • แก้ Channel ID / Secret / Access Token เมื่อไร สถานะจะกลับไปเป็น "ยังไม่ได้ทดสอบ" — เพราะค่าที่เคยยืนยันเป็นของชุดเก่า ต้องกดทดสอบใหม่
  • ทุกการสร้าง/แก้/ลบถูกบันทึกใน Audit Log (ประเภท การเชื่อมต่อ LINE OA) แต่ ไม่มีการเก็บค่าโทเคนลงบันทึก

ถ้าแพ็คเกจไม่ถึงเอ็นเตอร์ไพรส์

หน้านี้ ยังเปิดดูได้และยังเห็นค่าที่เคยตั้งไว้ (แบบปิดบัง) — จงใจไม่ซ่อน เพื่อให้รู้ว่ามีของให้เลือกซื้อ

ทำได้ทำไม่ได้
ดูค่าที่ตั้งไว้ · ปิดใช้งานการเชื่อมต่อ · ลบการเชื่อมต่อแก้ค่า · เปิดใช้งาน · ทดสอบการเชื่อมต่อ

🔴 ป้ายสถานะจะขึ้นว่า "หยุดส่งข้อความ (แพ็คเกจไม่รองรับ)" สีส้ม ไม่ใช่ "พร้อมใช้งาน" เพราะระบบ หยุดส่งข้อความหาลูกค้าทั้งหมด ในสภาพนั้น · ข้อความที่ลูกค้าทักเข้ามา ยังถูกเก็บไว้ให้ · ปุ่มปิดใช้งานและปุ่มลบเปิดไว้เสมอ เพื่อให้ร้านถอด Webhook ของตัวเองออกจาก LINE Console ได้ ไม่ใช่ค้างผูกไว้ตลอดกาลแล้วแก้เองไม่ได้

⭐ ร้านช่วงทดลองใช้ จะเห็นแถบเตือนว่าเปิดได้เพราะอยู่ในช่วงทดลอง — เป็นการบอก ไม่ใช่การห้าม ปุ่มยังกดได้ปกติ

14.6B แจ้งสถานะงานซ่อมอัตโนมัติทางไลน์ ⭐ ใหม่ 1 ก.ย. 2569

💳 แพ็คเกจ: เอ็นเตอร์ไพรส์ (ต่อจาก §14.6) · 👤 ไม่ต้องตั้งค่าเพิ่ม ทำงานเองอัตโนมัติ

เมื่อร้านเชื่อม LINE OA เรียบร้อยแล้ว (§14.6) ระบบจะ ส่งการ์ดแจ้งสถานะให้ลูกค้าเองทุกครั้งที่งานซ่อมเปลี่ยนสถานะ โดยร้านไม่ต้องกดอะไร

เงื่อนไขที่ต้องครบ ถึงจะส่ง

เงื่อนไขถ้าไม่ครบจะเป็นยังไง
ร้านเชื่อม LINE OA แล้วและเปิดสวิตช์อยู่ไม่ส่ง และไม่มีอะไรค้างในระบบ
แพ็คเกจเป็นเอ็นเตอร์ไพรส์ไม่ส่ง แต่ระบบจดไว้ว่าส่งไม่ได้เพราะแพ็คเกจ
ลูกค้าคนนั้นผูกบัญชี LINE กับร้านแล้วไม่ส่ง (เงียบ ไม่ใช่ข้อผิดพลาด)
ลูกค้าไม่ใช่ "ลูกค้าทั่วไป"ไม่ส่ง

🔴 การส่งไม่สำเร็จจะไม่ทำให้การเปลี่ยนสถานะล้มเหลว — งานซ่อมบันทึกสำเร็จเสมอ ไม่ว่าไลน์จะส่งได้หรือไม่

แจ้ง 4 สถานะเท่านั้น — ไม่ใช่ทุกสถานะ

สถานะทำไมถึงแจ้ง
เสนอราคาแล้วลูกค้าต้องตัดสินใจ — เป็นเหตุผลเดียวที่งานค้างอยู่
รออะไหล่ช้ากว่าที่นัด ลูกค้าต้องรู้ ไม่งั้นมาถึงร้านแล้วเก้อ
ซ่อมเสร็จมารับเครื่องได้แล้ว
ยกเลิกงานจบแบบไม่ได้ซ่อม

ที่จงใจไม่แจ้ง — ส่งมอบแล้ว (ลูกค้ายืนรับเครื่องอยู่ตรงนั้นแล้ว) · ลูกค้าอนุมัติ (เขาเป็นคนอนุมัติเอง) · รอดำเนินการ (ลูกค้าอยู่ที่ร้านตอนนั้น) · กำลังซ่อม (ลูกค้าทำอะไรไม่ได้ และเปลืองโควตาข้อความเพิ่มเกือบครึ่ง)

⚠️ ทุกข้อความที่ส่งออกใช้โควตาแบบเสียเงินของ LINE OA ระบบจึงเลือกส่งเฉพาะเรื่องที่ลูกค้าต้องลงมือทำอะไรหรือแผนของเขาเปลี่ยน

หน้าตาการ์ดที่ลูกค้าได้รับ

เป็นการ์ดสีที่แถบหัวเปลี่ยนตามสถานะ (ซ่อมเสร็จ = เขียว · เสนอราคา = ฟ้า · รออะไหล่ = ส้ม · ยกเลิก = เทา) ข้างในมี ชื่อร้าน · ชื่อสถานะ · เลขที่งาน · รุ่นเครื่อง และปุ่ม ดูรายละเอียดงานซ่อม ที่พาไปหน้าติดตาม (§5.7)

🔴 ระบบไม่ส่งอาการที่แจ้ง รหัสปลดล็อกเครื่อง ราคา หรือเบอร์ลูกค้า ออกไปทางไลน์เด็ดขาด — แม้แต่ในข้อความตัวอย่างที่โผล่บนแถบแจ้งเตือนมือถือ

⚠️ แถวที่แจ้งไม่สำเร็จจะถูกจดเหตุผลไว้ เช่นลิงก์หน้าติดตามยังไม่พร้อม (ระบบจะตัดปุ่มออกแทนที่จะใส่ปุ่มที่กดแล้วไปไหนไม่ได้)

14.6C แชท LINE ⭐ ใหม่ 1 ก.ย. 2569

📍 หน้า: /line-chat (เมนู แชท LINE) · 👤 สิทธิ์: เจ้าของร้าน / แอดมิน · 💳 แพ็คเกจ: เอ็นเตอร์ไพรส์

อ่านและตอบข้อความที่ลูกค้าทักเข้ามาทาง LINE OA ของร้าน จากในระบบได้เลย ไม่ต้องสลับไปแอป LINE OA

ส่วนทำอะไร
รายชื่อห้อง (ซ้าย)ลูกค้าที่ผูกบัญชี LINE กับร้านแล้ว · มีป้าย รอตอบ บอกจำนวนข้อความที่ยังไม่ได้อ่าน · ช่องค้นหาเป็นการค้นที่เซิร์ฟเวอร์ จึงหาเจอแม้ลูกค้าเยอะมาก
ห้องแชท (ขวา)ข้อความของลูกค้าอยู่ซ้าย ของร้านอยู่ขวา · ข้อความที่ส่งไม่สำเร็จมีกรอบแดงพร้อมเหตุผล
ช่องพิมพ์พิมพ์แล้วกด ส่ง · มีตัวนับตัวอักษรกันยาวเกินที่ LINE รับได้ · ปุ่ม รูป และ ไฟล์เอกสาร อยู่ทางซ้ายของช่องพิมพ์

⭐ ใหม่ 2 ก.ย. 2569 — ข้อความขึ้นเองทันที ไม่ต้องรีเฟรช

เดิมตอนนี้
ลูกค้าทักมาแล้วหน้าเงียบ ต้องกดรีเฟรชเองข้อความใหม่ขึ้นเองทันที · ห้องเด้งขึ้นบนสุด · ป้าย รอตอบ ขยับเอง
ห้องขึ้นเป็นรหัสยาว ๆ (U1234…)แสดงชื่อ LINE จริงของลูกค้า — ระบบดึงชื่อและรูปโปรไฟล์ให้เองเมื่อลูกค้าทักเข้ามาครั้งแรก
ส่งได้แต่ข้อความล้วนส่งรูปและไฟล์เอกสารได้

· รูป — กดปุ่มรูป → เลือกไฟล์ → เห็นตัวอย่างก่อน → กดส่ง · รองรับ ไฟล์รูปไม่เกิน 5 MB · ไฟล์เอกสาร — กดปุ่มคลิปหนีบ → เลือกไฟล์ → กดส่ง (PDF · DOC · DOCX · XLS · XLSX · TXT · CSV · ZIP · ไม่เกิน 5 MB) · ℹ️ ส่งสติกเกอร์จากหน้านี้ไม่ได้ (เจ้าของร้านสั่งถอดปุ่มออก 6 ก.ย. 2569) — แต่ สติกเกอร์ที่ลูกค้าส่งเข้ามายังแสดงตามปกติ · ถ้าเลื่อนขึ้นไปอ่านข้อความเก่าอยู่ ระบบจะไม่กระชากจอลงล่าง แต่จะขึ้นปุ่ม "ข้อความใหม่" ให้กดเอง · วิดีโอและไฟล์เสียงที่ลูกค้าส่งเข้ามา ระบบเก็บให้แล้ว (mp4 / m4a · ไม่เกิน 10 MB) — เดิมเก็บได้เฉพาะรูป · ไฟล์ที่ใหญ่เกินจะเห็นเป็นข้อความบอกว่ารับไม่ได้ ไม่หายเงียบ · ⭐ ไฟล์รูป/วิดีโอ/เสียงในแชท เก็บไว้ 30 วัน แล้วระบบลบไฟล์ให้เองทุกคืน (ตี 3 ครึ่ง) — ประวัติแชทและชื่อไฟล์ยังอยู่ครบ เปิดไฟล์เก่ากว่านั้นไม่ได้อย่างเดียว โดยจะขึ้นว่า "ไฟล์หมดอายุแล้ว · เปิดดูไม่ได้" · เหตุผล: ไฟล์แชทถูกสำรองขึ้นคลาวด์ทุกคืนและเก็บย้อนหลัง 30 ชุด ⇒ ไฟล์ 1 MB กินพื้นที่สำรองราว 30 MB ถ้าไม่มีกำหนดลบ พื้นที่จะโตไม่มีเพดาน · ต้องการเก็บนานกว่านี้หรือปิดการลบ แจ้งผู้ให้บริการได้ (ตั้งค่าได้ที่เซิร์ฟเวอร์) · 💡 ไฟล์สำคัญที่ต้องเก็บถาวร ให้บันทึกลงงานซ่อมแทน (แนบเป็นรูปเครื่อง) — รูปในงานซ่อมไม่ถูกลบตามกำหนดนี้ · ℹ️ ห้องเก่าที่ยังขึ้นเป็นรหัส U… จะเปลี่ยนเป็นชื่อจริงเองเมื่อลูกค้าทักเข้ามาครั้งถัดไป — หากต้องการให้เปลี่ยนทันทีทั้งหมด แจ้งผู้ให้บริการได้

บนมือถือจะแสดงทีละฝั่ง — แตะห้องเพื่อเข้าไปอ่าน แล้วกดลูกศรย้อนกลับเพื่อกลับไปรายชื่อ

🔴 ข้อความที่ส่งออกไปแล้วเรียกคืนไม่ได้ และนับเป็นโควตาแบบเสียเงินของ LINE OA — บรรทัดนี้แสดงอยู่ใต้ช่องพิมพ์ตลอดเวลา

⚠️ ส่งไม่สำเร็จจะขึ้นกรอบแดงพร้อมเหตุผลจาก LINE เสมอ ไม่มีการหายเงียบ · ถ้าเน็ตหลุด ก่อน ส่ง ระบบจะบอกว่ายังไม่ได้ส่ง (กดใหม่ได้) · ถ้าส่งไปแล้วไม่ได้คำตอบกลับ ระบบจะบอกว่า ไม่แน่ใจ ให้เลื่อนดูในห้องก่อนกดซ้ำ เพื่อไม่ให้ลูกค้าได้ข้อความ 2 ครั้ง

⚠️ ยังไม่มี: ข้อความตั้งเวลาส่ง (เจ้าของร้านแจ้งว่าไม่ใช้ จึงไม่ได้ทำ)

⭐⭐ เพิ่ม 5 ก.ย. 2569 — ส่งไฟล์เอกสาร · ผูกห้องแชทกับลูกค้า · ปุ่มแชทที่หน้าลูกค้า

① ส่งไฟล์เอกสารได้แล้ว (ปุ่มคลิปหนีบข้างปุ่มรูป) — รองรับ PDF · Word · Excel · ข้อความ · CSV · ZIP ไม่เกิน 5 MB · 🔴 LINE ไม่มีชนิดข้อความแบบ "ไฟล์" ⇒ ระบบส่งเป็น ข้อความที่มีชื่อไฟล์และลิงก์ ให้ลูกค้ากดดาวน์โหลด นี่คือวิธีเดียวที่ทำได้ ไม่ใช่ของชั่วคราว · ไม่รับไฟล์รูปแบบที่รันสคริปต์ได้ (SVG · HTML) โดยเจตนา

② ผูกห้องแชทกับลูกค้าในระบบ — ในห้องแชทมีปุ่ม "ผูกกับลูกค้า" · ผูกแล้วจะเห็นชื่อและเบอร์ลูกค้าบนหัวห้อง · เปลี่ยนหรือยกเลิกผูกได้ตลอด (มีหน้าต่างยืนยันก่อน) · ลูกค้า 1 คนผูกได้หลายบัญชี LINE (ลูกค้าบางคนมีหลายบัญชีจริง) — หน้าลูกค้าจะบอกเมื่อมีมากกว่า 1 ห้อง · ⚠️ ผูกกับ "ลูกค้าทั่วไป" ไม่ได้ — เป็นแถวที่ระบบสร้างให้ทุกสาขา ไม่ใช่คนจริง · ทุกครั้งที่ผูกหรือยกเลิก ระบบบันทึกไว้ใน Audit Log ว่าใครทำเมื่อไร

③ ปุ่มแชทที่หน้า "ลูกค้าทั้งหมด" — ลูกค้าที่ผูกบัญชี LINE ไว้แล้วจะมี ไอคอนแชท ในแถว กดแล้วเข้าห้องนั้นทันที · ลูกค้าที่ยังไม่ผูก ไม่มีปุ่ม และมีแถบอธิบายอยู่บนหน้าว่าปุ่มจะขึ้นเมื่อผูกแล้ว

🔴 ทั้ง 3 ข้อนี้อยู่ในแพ็คเกจเอ็นเตอร์ไพรส์ — ร้านแพ็คเกจอื่นจะไม่เห็นเมนู "แชท LINE" และหน้า /customers จะเหมือนเดิมทุกอย่าง (ไม่มีปุ่ม ไม่มีช่องว่างเพิ่ม) · เมนู "LINE OA" ยัง เห็นได้ทุกแพ็คเกจ โดยเจตนา — ร้านที่ลดแพ็คเกจลงมาต้องเข้าไป ปิดหรือลบการเชื่อมต่อของตัวเองได้เสมอ

⭐⭐⭐ เพิ่ม 7 ก.ย. 2569 — เส้นตัดวันที่ · ตอบกลับข้อความ · ค้นหาในห้อง · คำใช้บ่อย · แทรกชื่อ

① เส้นตัดวันที่ — ข้อความไม่ไหลติดกันข้ามวันอีกแล้ว มีเส้นคั่นบอกว่าเป็นของวันไหน · ป้ายบนเส้น: วันนี้ · เมื่อวาน · 5 กันยายน (ปีนี้) · 5 กันยายน 2567 (ปีก่อน · เป็น พ.ศ.) · นับวันตาม เวลาไทย ⇒ ข้อความช่วง 00:00–06:59 ไม่ถูกจัดเป็นเมื่อวานอีกต่อไป

② ตอบกลับข้อความ (reply) — ทุกฟองมี ปุ่มลูกศร ในช่องว่างข้างฟอง (ฟองร้านอยู่ซ้าย · ฟองลูกค้าอยู่ขวา) · เห็นตลอดเวลา ไม่ต้องเอาเมาส์ไปชี้ — บนมือถือเป้าแตะ 44×44 พิกเซล · กดแล้วขึ้นแถบ "กำลังตอบกลับ…" เหนือช่องพิมพ์ พร้อมปุ่ม ✕ ยกเลิก · ส่งแล้วฟองใหม่จะมี บล็อกอ้างอิง ด้านบน — แตะบล็อกนั้นเพื่อกระโดดไปข้อความต้นทาง (มีกรอบเหลืองไฮไลต์ให้ ~2 วินาที) · ส่งไม่สำเร็จ เป้าหมายที่เลือกไว้ไม่หาย ⇒ กดส่งซ้ำได้เลย ไม่ต้องเลือกใหม่ · ใช้กับ รูปและไฟล์ ได้ด้วย · ข้อความต้นทางถูกลบไปแล้ว ฟองก็ยังแสดงตามปกติ ไม่พัง · 🔴 เป็นการอ้างอิงในระบบร้านเท่านั้น — ลูกค้าบน LINE จะไม่เห็นเครื่องหมายอ้างอิง   บรรทัดนี้แสดงอยู่บนแถบตอบกลับตลอดเวลา เพื่อไม่ให้เข้าใจผิด

③ ค้นหาข้อความในห้อง — ปุ่ม แว่นขยาย ที่หัวห้อง · พิมพ์คำแล้วระบบพาไปที่ข้อความนั้นพร้อมไฮไลต์ให้เอง · ป้ายบอก ลำดับที่ / ทั้งหมด · ลูกศรขึ้น = เก่ากว่า · ลูกศรลง = ใหม่กว่า · ถ้าเจอข้อความที่ยังไม่ได้โหลด จะขึ้นแถบเหลืองบอกตรง ๆ พร้อมปุ่ม "โหลดข้อความเก่ากว่านี้" แล้วพาไปให้เอง   (จงใจให้กดเอง ไม่โหลดวนอัตโนมัติ เพื่อไม่ให้ชนเพดานจำนวนคำขอของระบบ) · ปิดแถบค้นหา ⇒ ไฮไลต์ถูกล้างให้เอง

④ คำใช้บ่อย ⚡ + ตั้งค่า ⚙ — ข้อความสำเร็จรูปที่กดใส่ช่องพิมพ์ได้ทันที · ⚡ เปิดรายการ กดข้อความที่ต้องการ ⇒ ใส่ลงช่องพิมพ์ ที่ตำแหน่งเคอร์เซอร์ ไม่ทับสิ่งที่พิมพ์ค้างไว้ · ⚙ เปิดหน้าตั้งค่า เพิ่ม / แก้ / ลบ / ปิดใช้ชั่วคราว / จัดลำดับ ได้ · ในข้อความใส่ ตัวแปร ได้: {ชื่อลูกค้า} · {ชื่อร้าน} · {ชื่อพนักงาน} ⇒ ระบบแทนค่าจริงให้ตอนกดใส่ช่องพิมพ์ · 🔴 แทนค่าตั้งแต่ตอนใส่ช่องพิมพ์ ไม่ใช่ตอนส่ง ⇒ พนักงาน เห็นข้อความจริงก่อนกดส่งเสมอ · 🔴 คำใช้บ่อยเป็นของทั้งร้าน ไม่แยกตามสาขา — พนักงานย้ายสาขาแล้วยังเจอชุดเดิม · 👤 ทุกคนที่เข้าหน้าแชทได้ใช้คำใช้บ่อยได้ · แต่ต้องเป็นผู้จัดการขึ้นไปจึงจะเพิ่ม/แก้/ลบได้   คนที่ไม่มีสิทธิ์จะ ไม่เห็นปุ่มเพิ่ม/แก้ ตั้งแต่แรก พร้อมข้อความบอกเหตุผล (ไม่ใช่กดแล้วเด้ง error) · ชื่อซ้ำกันไม่ได้ ⇒ ระบบบอกที่ช่องชื่อทันที

⑤ ปุ่มแทรกชื่อ — ใส่ ชื่อลูกค้า / ชื่อร้าน / ชื่อพนักงาน ลงข้อความที่กำลังพิมพ์ · ใส่ ค่าจริง ลงไปเลย ไม่ใช่รหัส {ชื่อลูกค้า} ⇒ เห็นก่อนส่งเสมอ · ห้องที่ยังไม่ผูกลูกค้า จะใช้ ชื่อที่แสดงบน LINE แทน (ไม่มีช่องว่างเปล่า)

⑥ แถวปุ่มย้ายมาอยู่บรรทัดของตัวเอง — ปุ่ม 5 ตัว (รูป · ไฟล์ · ⚡ · ⚙ · แทรกชื่อ) อยู่เหนือช่องพิมพ์ · ผลที่ได้: ช่องพิมพ์บนมือถือกว้างขึ้นจาก ~182 เป็น 246 พิกเซล (วัดที่จอกว้าง 390)

สิ่งที่ไม่เปลี่ยน — การส่งรูป/ไฟล์และเพดาน 5 MB · สติกเกอร์ที่ลูกค้าส่งมายังแสดงเหมือนเดิม · ปุ่ม "ข้อความใหม่" และกติกาการเลื่อนจอ · การผูก/ยกเลิกผูกลูกค้า · ฟองที่ส่งไม่สำเร็จยังขึ้นเหตุผลเหมือนเดิม

14.6D รหัสผูกบัญชี LINE บนใบรับซ่อม ⭐ ใหม่ 2 ก.ย. 2569

💳 แพ็คเกจ: เอ็นเตอร์ไพรส์ + เชื่อม LINE OA แล้ว (§14.6) · 👤 ไม่ต้องตั้งค่าเพิ่ม

เมื่อพิมพ์ ใบรับซ่อม ระบบจะเติมกล่อง "รับแจ้งสถานะงานซ่อมทาง LINE ของร้าน" ท้ายใบให้เอง มี รหัส 6 ตัว + QR เพิ่มเพื่อน + ขั้นตอน 2 ข้อ

ขั้นลูกค้าทำอะไร
1สแกน QR (หรือกดลิงก์) เพื่อเพิ่มเพื่อน LINE OA ของร้าน
2พิมพ์รหัส 6 ตัวส่งเข้าแชท → ระบบผูกบัญชีให้ทันที

จากนั้นลูกค้าจะได้รับการ์ดแจ้งสถานะอัตโนมัติ (§14.6B) และร้านตอบแชทได้จาก §14.6C

⚠️ รหัสเดิมใช้ซ้ำได้จนกว่าจะหมดอายุ (7 วัน) — พิมพ์ใบซ้ำได้รหัสเดิม ลูกค้าที่ถือใบไปแล้วจึงใช้ได้ · ผูกแล้วพิมพ์ใบซ้ำ กล่องนี้จะ ไม่โผล่ (ไม่ต้องผูกอีก)

🔴 กล่องนี้จะไม่โผล่เลย ถ้า: ร้านยังไม่เชื่อม LINE OA · แพ็คเกจไม่ถึง · ลูกค้าเป็น "ลูกค้าทั่วไป" · หรือ LINE OA ยังไม่ได้ตั้ง Basic ID — ใบรับซ่อมยังพิมพ์ได้ตามปกติ ไม่มีช่องว่างค้าง

15. การแจ้งเตือน

📍 ไอคอน: Bell 🔔 ด้านบนขวาของหน้าจอ 👤 สิทธิ์: ทุก Role

วัตถุประสงค์: รับการแจ้งเตือนแบบ Real-time สำหรับเหตุการณ์สำคัญในระบบ

ประเภทการแจ้งเตือน:

ประเภทผู้รับตัวอย่าง
งานซ่อมใหม่ADMIN, MANAGER, OWNER"รับเครื่องซ่อมใหม่: iPhone 15 ลูกค้า สมชาย"
สถานะซ่อมเปลี่ยนผู้มอบหมายงาน"งานซ่อม #123 เสร็จแล้ว"
ยอดขายใหม่ADMIN, MANAGER"ขายสินค้า: Samsung S24 ฿25,000"
เงินเดือนรออนุมัติOWNER, ADMIN"มีเงินเดือนรออนุมัติ 5 รายการ"
Stock ต่ำADMIN, MANAGER"อะไหล่ 'แบตเตอรี่ iPhone 13' เหลือ 2 ชิ้น"
ประกันใกล้หมดอายุADMIN, MANAGER"ประกัน iPhone 14 ของ สมหญิง จะหมดใน 7 วัน"
ประกาศจากระบบทุก Role"📢 ประกาศใหม่: กำหนดอัพเดท..." (จากทีมงาน MobileHub)

วิธีใช้งาน:

  1. คลิกไอคอน Bell มุมบนขวา (Bell ringing 🔔 เมื่อมี unread)
  2. ดูรายการแจ้งเตือน — items ยังไม่อ่านมี เส้นขอบซ้ายสีฟ้า + ตัวหนา
  3. คลิกแต่ละรายการ → mark-as-read + navigate ไปหน้าที่เกี่ยวข้อง (เช่น คลิก "ประกาศใหม่" → ไปหน้า /portal/announcements)
  4. Header actions (3 ปุ่มมุมขวาบนของ dropdown):
    • ✓ อ่านทั้งหมด — mark-as-read ทุก unread (แสดงเฉพาะตอนมี unread)
    • 🗑 ลบที่อ่านแล้ว — ลบเฉพาะ items ที่ isRead=true (แสดงเมื่อมี read item)
    • ↻ รีเฟรช — โหลด list + count ใหม่จาก server
  5. Per-item × delete — กดเครื่องหมาย × ที่ขวาสุดของแต่ละ item → ลบทันที (กัน accidentally — มี stopPropagation ไม่ให้ navigate)
  6. Items ที่อ่านแล้วแสดง stamp "✓ อ่านแล้ว" สีเทาที่แถวเวลา

💡 เคล็ดลับ: การแจ้งเตือนทำงานแบบ Real-time ผ่าน Socket.IO และบันทึกลง Database เพื่อดูย้อนหลังได้

15.1 แจ้งเตือนทันที แม้ปิดเว็บอยู่ (Push Notifications)

📍 เปิดได้ที่: Banner ที่ Dashboard (ครั้งแรก) หรือหน้า Profile → การแจ้งเตือน Push 👤 สิทธิ์: ทุกแพ็คเกจ STARTER+ (รวมทั้ง Super Admin)

วัตถุประสงค์: รับแจ้งเตือนเหตุการณ์สำคัญทันที แม้ปิดแท็บหรือปิดเบราว์เซอร์อยู่ — เด้งเหมือน notification ของ LINE/Facebook

อุปกรณ์ที่รองรับ:

  • ✅ Desktop — Chrome / Edge / Firefox / Safari (Mac)
  • ✅ Android — Chrome / Edge / Firefox
  • ✅ iPhone / iPad — Safari 16.4 ขึ้นไป แต่ต้องติดตั้งเป็นแอป (Add to Home Screen) ก่อน

วิธีเปิดใช้งาน:

  1. เข้า Dashboard ครั้งแรก → จะเห็น Banner สีฟ้า ด้านบนพร้อมไอคอนระฆัง
  2. คลิกปุ่ม "เปิดการแจ้งเตือน"
  3. เบราว์เซอร์ขึ้นถาม "Allow notifications?" → กด Allow
  4. เสร็จ — ทดลองได้โดยปิดแท็บแล้วให้เพื่อนสร้างงานซ่อมใหม่ (จะเด้งบนเครื่องคุณ)

สำหรับ iPhone / iPad:

  1. เปิดเว็บใน Safari → กดปุ่ม Share (ลูกศรขึ้น)
  2. เลื่อนหา "Add to Home Screen" → กด Add
  3. เปิดแอปจากไอคอนบน Home Screen (ไม่ใช่จาก Safari)
  4. Login → เปิด Push Notifications ตามขั้นตอนปกติ

เปิด-ปิดเองได้ตลอดเวลา:

ไปที่หน้า Profile → การ์ด "การแจ้งเตือน Push" → เลื่อน Switch เปิด/ปิด

กรณี blocked:

ถ้าเผลอกด "Block" → คลิกไอคอน 🔒 ข้างซ้ายของ URL ในเบราว์เซอร์ → การตั้งค่าไซต์ → การแจ้งเตือน → Allow → รีเฟรชหน้า

Multi-device:

Login จาก 3 เครื่อง (เช่น Desktop ที่ร้าน + มือถือคุณ + แท็บเล็ตช่าง) แล้วเปิด Push ทั้ง 3 เครื่อง — ระบบจะส่งแจ้งเตือนทุกเครื่องพร้อมกัน

💡 เคล็ดลับ: Push notifications ทำงานคู่กับ Bell ในระบบ — ถ้าเปิดเว็บอยู่จะได้ทั้ง bell + push (อาจซ้อนกัน), ถ้าปิดเว็บได้แค่ push. ระบบใช้ tag-based grouping ทำให้ notification เหตุการณ์เดียวกันรวมเป็นรายการเดียว ไม่รก

15.2 ติดตั้งเป็นแอป (PWA Install)

📍 เปิดได้ที่: Banner สีฟ้าด้านล่างจอใน Dashboard (เด้งเองตอน browser พร้อม) หรือเมนู "ติดตั้งแอป" ใน Chrome · Banner จะ รอจนปิดหน้าต้อนรับและจบ Tour แนะนำระบบก่อน แล้วค่อยขึ้น (ไม่เด้งซ้อนกันตอนเข้าครั้งแรก) 👤 สิทธิ์: ทุก Role

วัตถุประสงค์: ติดตั้ง MobileHub เป็นแอปบน Home Screen / Desktop เพื่อให้:

  • เปิดเร็วเหมือนแอปจริง (ไม่ต้องเปิดเบราว์เซอร์)
  • มีไอคอนแยกบนหน้าจอ
  • รับ Push Notifications ได้แม้ปิดเว็บ
  • ใช้ Shortcut ลัดเข้าฟีเจอร์หลัก (POS / รับเครื่อง / งานช่าง / ติดตามซ่อม)

Banner ที่เด้งเอง — Chrome / Edge / Android:

หลังเปิด Dashboard ใช้งาน 2-3 นาที จะเห็น Paper สีฟ้า fixed ด้านล่างจอ ประกอบด้วย:

  • ไอคอนระบบ (gradient ฟ้า-เขียว) + หัวข้อ "ติดตั้งเป็นแอป"
  • คำอธิบาย: "ติดตั้ง MobileHub บนมือถือ เปิดเร็วเหมือนแอป และรับการแจ้งเตือน"
  • ปุ่ม "ติดตั้งเลย" — เปิด install dialog ของเบราว์เซอร์ → ยืนยัน → ติดตั้งทันที
  • ปุ่ม "ไว้ก่อน" หรือ × ปิด — ซ่อน Banner 24 ชั่วโมง (วันถัดไปเด้งใหม่)

iPhone / iPad — ติดตั้งผ่าน Safari:

ปุ่ม "ติดตั้งเลย" จะเปลี่ยนเป็น "ดูวิธีติดตั้ง" เมื่อตรวจพบว่าเปิดผ่าน Safari → กดเพื่อเปิด Modal คำแนะนำ 3 ขั้นตอน:

  1. กดปุ่ม Share ที่แถบล่างของ Safari (รูปสี่เหลี่ยม + ลูกศรชี้ขึ้น)
  2. เลื่อนหา "Add to Home Screen" → กด Add
  3. กด "เพิ่ม" ที่มุมขวาบน → ไอคอน MobileHub ปรากฏบนหน้าโฮม

⚠️ iOS ต้องใช้ Safari เท่านั้น ไม่รองรับ Chrome/Firefox บน iOS (ข้อจำกัดของ Apple)

Shortcuts บน Home Screen (Android / iOS):

หลังติดตั้งแล้ว — กดค้างที่ไอคอน MobileHub บน Home Screen → จะเห็น 4 ทางลัด:

  • 🛒 POS → เปิด /sales ขายสินค้าทันที
  • 🔧 รับซ่อม → เปิด /repair-intake รับเครื่อง
  • 🔨 งานช่าง → เปิด /technician-repairs ดูงานที่มอบหมาย
  • 📋 ติดตาม → เปิด /track ค้นหาสถานะใบรับซ่อม

ตอนติดตั้งแล้ว:

  • เปิดจากไอคอนบน Home Screen → จะเห็นเป็นแอปเต็มจอ (ไม่มี URL bar)
  • Banner ติดตั้งจะหยุดเด้งอัตโนมัติ (ตรวจจาก display-mode: standalone)
  • iOS user ต้องเปิดจากไอคอนแอป (ไม่ใช่ Safari) ถึงจะรับ Push Notifications ได้

ถอนการติดตั้ง:

  • Android / Desktop Chrome / Edge — กดค้างที่ไอคอน → "Uninstall app" / "Remove from Chrome"
  • iOS — กดค้างที่ไอคอน → "Remove App" → "Delete App"

💡 เคล็ดลับ: ติดตั้งบนหลายเครื่องได้ — ที่ร้าน 1, ที่บ้าน 1, มือถือ 1 — ใช้บัญชีเดียวกัน Login จะเข้าถึงข้อมูลเดียวกันทุกเครื่อง

16. Multi-Tenant และ Multi-Branch

16.1 Tenant Isolation

MobileHub ใช้สถาปัตยกรรม Multi-Tenant SaaS ที่ข้อมูลของแต่ละร้านถูกแยกกันอย่างสมบูรณ์ (Tenant Isolation)

หลักการสำคัญ:

  • ข้อมูลทุกประเภทมี tenantId กำกับ
  • ผู้ใช้งานไม่สามารถเข้าถึงข้อมูลของ Tenant อื่นได้
  • Unique Constraint เป็นแบบ Compound: เช่น (tenantId, username) ไม่ใช่แค่ username
  • JWT Token บรรจุ tenantId เพื่อตรวจสอบทุก Request

สิ่งที่แยกกันตาม Tenant:

  • ลูกค้า, สินค้า, การขาย, งานซ่อม, อะไหล่
  • ผู้ใช้งาน, สาขา
  • Master Data (ยี่ห้อ, รุ่น, สี ฯลฯ)
  • ตั้งค่าร้าน, Subscription

16.2 Branch Selector

ตำแหน่ง: Header ด้านบนของหน้า (ทุกหน้า)

วัตถุประสงค์: เลือกสาขาที่ต้องการดูข้อมูล

วิธีใช้:

  1. คลิก Dropdown Branch ด้านบน
  2. เลือกสาขาที่ต้องการ — หรือเลือก "ทุกสาขา" (📦 Pro+) เพื่อดู aggregate
  3. ข้อมูลทั่วทั้งระบบกรองตามสาขาที่เลือกอัตโนมัติ

⚠️ ข้อยกเว้น 1 จุด — แท็บ "งานของฉัน" ในหน้า งานช่าง ครอบทุกสาขาเสมอ (19 ส.ค. 2569)

งานซ่อมที่มอบหมายให้ช่างคนนั้นจะขึ้นครบทุกใบ ไม่ว่าจะเลือกสาขาไหนค้างไว้ เพราะช่างมักถูกส่ง ไปช่วยอีกสาขาแล้วรับงานกลับมาทำ — งานที่อยู่คนละสาขาจะมีป้ายชื่อสาขากำกับไว้ (ดู §5.2)

option "ทุกสาขา" (Multi-Branch Dashboard) — Pro+:

📦 แพ็คเกจ: Professional หรือ Enterprise

  • เงื่อนไขแสดง option นี้: ต้องมีฟีเจอร์ MULTI_BRANCH_DASHBOARD และ มีสาขา ≥ 2 (สาขาเดียวจะไม่เห็นเพราะ redundant)
  • มี badge "รวม" สีฟ้าเพื่อแยกออกจากสาขาทั่วไป
  • เมื่อเลือก "ทุกสาขา" → Dashboard / Reports / etc. แสดงข้อมูลรวมของ tenant ทั้งหมด

💡 STARTER ฿599 มีแค่ 1 สาขา อยู่แล้ว — option นี้จึงเป็นของ Pro/Enterprise ที่มีหลายสาขาเท่านั้น

หมายเหตุ:

  • OWNER/ADMIN เห็นทุกสาขา
  • พนักงานทั่วไปเห็นเฉพาะสาขาที่ตัวเองสังกัด
  • บางรายงานสามารถ "รวมทุกสาขา" ได้

⚠️ "ทุกสาขา" ใช้สำหรับ ดูรายการ เท่านั้น — เพิ่มของใหม่ไม่ได้ (ปรับปรุง 11 ส.ค. 2569)

ถ้าเลือก "ทุกสาขา" ค้างไว้แล้วกดเพิ่ม อะไหล่ หรือ อุปกรณ์เสริม ระบบจะขึ้นข้อความ ให้เลือกสาขาก่อน เพราะของทุกชิ้นต้องรู้ว่าเก็บอยู่สาขาไหน ให้เลือกสาขาที่ต้องการจากตัวเลือกด้านบน แล้วกดบันทึกอีกครั้ง

ก่อนหน้านี้กรณีนี้ขึ้นเป็นหน้าขาว (ข้อผิดพลาดของระบบ) โดยไม่บอกสาเหตุ ตอนนี้บอกชัดแล้ว

⚠️ ถ้าใช้บัญชีของหลายร้านบนเบราว์เซอร์เดียวกัน (ปรับปรุง 11 ส.ค. 2569)

ระบบจำสาขาที่เลือกไว้ล่าสุดในเครื่อง เมื่อสลับไปเข้าอีกร้าน ค่าที่จำไว้อาจยังเป็นสาขาของร้านเดิม ถ้ากดบันทึกในสภาพนั้น ระบบจะปฏิเสธพร้อมบอกให้แก้ แก้ได้ 2 ทาง: เลือกสาขาใหม่จากตัวเลือกด้านบน หรือรีเฟรชหน้า (การออกจากระบบแล้วเข้าใหม่ ไม่ช่วย เพราะไม่ได้ล้างค่าสาขาที่จำไว้)

เดิมกรณีนี้บันทึกสำเร็จเงียบ ๆ แล้วของไปอยู่สาขาของอีกร้าน ทำให้หายจากทุกหน้าจอที่กรองตามสาขา

16.3 ปุ่ม "กลับขึ้นบนสุด" ⭐ ปรับปรุง 4 ส.ค. 2569

ปุ่มวงกลมลูกศรขึ้นที่ลอยอยู่ มุมขวาล่าง ของทุกหน้าที่มีเนื้อหายาว

เรื่องพฤติกรรม
เมื่อไหร่ถึงโผล่เลื่อนลงเกินประมาณ 1 หน้าจอ (400px) ค่อยจาง ๆ ขึ้นมา
กดแล้วเป็นยังไงเลื่อนกลับขึ้นบนสุดแบบนุ่มนวล — ถ้าอยู่ลึกมาก (เกิน 8,000px) จะกระโดดทันทีเพื่อไม่ให้เสียเวลา
หน้าที่ไม่มีปุ่มนี้จอแสดงราคาลูกค้า (/customer-display) และจอลงเวลาหน้าร้าน (/kiosk) — เป็นจอที่ตั้งโชว์ ไม่ควรมีปุ่มลอย
บังปุ่มอื่นไหมไม่บัง — ระบบเว้นที่ว่างใต้เนื้อหาไว้ให้แล้ว ปุ่มจัดการของแถวสุดท้ายในตารางยังกดได้ตามปกติ
อยู่เหนือหน้าต่างป๊อปอัพไหมไม่ — ปุ่มจะอยู่ใต้กล่องข้อความ กล่องยืนยัน และแถบแจ้งเตือนเสมอ

สิ่งที่แก้ในรอบนี้: เดิมปุ่มนี้ ไม่เคยทำงานเลยในหน้าฝั่งผู้ดูแลระบบ (/admin) และในหน้าที่ ข้อมูลโหลดเสร็จช้า ปุ่มก็จะไม่โผล่ทั้งหน้านั้นแม้จะเลื่อนไปไกลแค่ไหน ตอนนี้ทำงานครบทุกหน้าแล้ว พร้อมรองรับการใช้แป้น Tab (ตอนซ่อนอยู่จะไม่ถูก Tab ไปโดน) และเคารพการตั้งค่า "ลดการเคลื่อนไหว" ของเครื่องผู้ใช้

16.4 เมื่ออินเทอร์เน็ตหลุด ⭐ ใหม่ 11 ส.ค. 2569

ระบบทำงานผ่านอินเทอร์เน็ต ไม่รองรับการใช้งานแบบออฟไลน์ เมื่อเน็ตของร้านหลุด จะเปิดขายหรือบันทึกรายการไม่ได้จนกว่าสัญญาณจะกลับมา — แต่ ข้อมูลที่บันทึกไว้แล้วไม่หาย เพราะเก็บอยู่บนเซิร์ฟเวอร์ ไม่ได้เก็บในเครื่องที่ร้าน

แถบเตือนมุมซ้ายล่าง จะขึ้นเองทันทีที่เน็ตหลุด และหายเองเมื่อกลับมา คลิกทะลุผ่านได้ จึงไม่บังปุ่มไหน และไม่มีปุ่มปิด (เพราะไม่ควรปิดข้อมูลนี้ทิ้ง)

ข้อความตอนกดบันทึกแล้วเน็ตหลุด มี 2 แบบ อ่านให้ดีก่อนกดซ้ำ:

ข้อความขึ้นว่าแปลว่าต้องทำอะไร
"ยังไม่ได้บันทึก คำขอไม่ได้ถูกส่งออกจากเครื่องนี้เลย"ระบบรู้แน่นอนว่าข้อมูลยังไม่ถึงเซิร์ฟเวอร์เช็คสัญญาณแล้ว กดบันทึกใหม่ได้เลย ไม่ซ้ำแน่นอน
"ส่งข้อมูลออกไปแล้วแต่ไม่ได้รับคำตอบกลับ — ไม่แน่ใจว่าบันทึกสำเร็จหรือไม่"เน็ตหลุดระหว่างทาง ระบบไม่รู้ว่าเซิร์ฟเวอร์รับไปแล้วหรือยังอย่าเพิ่งกดซ้ำ ให้ไปเปิดดูรายการนั้นก่อนว่ามีแล้วหรือยัง ถ้ายังไม่มีจึงบันทึกใหม่

⚠️ ทำไมต้องแยก 2 แบบ — ถ้าระบบบอกว่า "ยังไม่บันทึก" ทั้งที่จริง ๆ บันทึกไปแล้ว แล้วพนักงานกดซ้ำ จะได้บิลซ้ำ 2 ใบ เงินเพี้ยน และไปโผล่ตอนปิดกะโดยหาสาเหตุไม่เจอ ระบบจึงพูดเฉพาะสิ่งที่รู้จริง และบอกตรง ๆ เมื่อไม่รู้

ทางออกที่ใช้ได้ทันทีเมื่อเน็ตร้านหลุด: เปิดฮอตสปอตจากโทรศัพท์มือถือ ระบบออกแบบมาให้ใช้บนมือถือได้เต็มรูปแบบอยู่แล้ว จึงเปิดขายต่อได้ด้วยเน็ตมือถือเครื่องเดียว แนะนำให้เตรียมวิธีนี้ไว้ล่วงหน้า ไม่ใช่รอให้เกิดก่อน

16.5 คัดลอกรายการสินค้าไปสาขาอื่น ⭐ ใหม่ 13 ส.ค. 2569

เปิดสาขาใหม่แล้วต้องมานั่งสร้างรายการอุปกรณ์เสริมกับอะไหล่ใหม่ทีละตัวเป็นร้อยรายการ ตอนนี้คัดลอกรายการทั้งชุดจากสาขาที่มีอยู่แล้วได้ในคลิกเดียว

กดได้ 3 ที่ แล้วแต่ว่าตอนนั้นอยู่หน้าไหน

หน้าปลายทางคัดลอกอะไรได้
สาขา — ปุ่มอยู่ข้าง "คัดลอกข้อมูลหลัก"สาขาในแถวที่กดอุปกรณ์เสริม · อะไหล่ (เลือกได้)
อุปกรณ์เสริมสาขาที่เลือกอยู่บนแถบเลือกสาขาอุปกรณ์เสริม
อะไหล่สาขาที่เลือกอยู่อะไหล่

ลำดับการทำงาน — เลือกสาขาต้นทาง → ระบบคำนวณให้ดูก่อนว่า จะเพิ่มกี่รายการ ข้ามกี่รายการ → ตรวจตัวเลขแล้วค่อยกดยืนยัน → คัดลอกจริง ขั้นดูก่อนนี้ยังไม่เขียนข้อมูลลงระบบเลย กดออกได้โดยไม่มีอะไรเปลี่ยน

⚠️ จำนวนสต๊อกของทุกรายการที่คัดลอกมาจะเป็น 0 เสมอ ระบบคัดลอกให้เฉพาะ รายการสินค้า (ชื่อ · รหัส · หมวด · ยี่ห้อ · ราคาทุน · ราคาขาย · จุดสั่งซื้อขั้นต่ำ) ไม่คัดลอกจำนวน เพราะของจริงยังไม่ได้ถูกย้ายไปสาขาใหม่ ให้ไปนับของจริงที่สาขานั้นแล้วปรับจำนวนเองที่หน้ารายการ ถ้าระบบคัดลอกจำนวนมาให้ด้วย ยอดสต๊อกรวมของร้านจะกลายเป็น 2 เท่าทันที และไปโผล่ผิดทั้งในรายงานและต้นทุนขาย

สิ่งที่ควรรู้

  • ของที่สาขาปลายทางเคยลบไปแล้ว จะถูกกู้กลับมา ⭐ 2 ต.ค. 2569 — ใช้ชื่อ/ราคาจากสาขาต้นทาง · จำนวนคงเดิม · หน้าจอแสดงแยกเป็น "กู้คืนที่เคยลบ N" (เดิมรายการพวกนี้ถูกนับเป็น "ข้ามที่มีอยู่แล้ว" ทั้งที่มองไม่เห็นในหน้ารายการ)
  • ของที่สาขาปลายทางมีอยู่แล้ว จะถูกข้าม ไม่ถูกเขียนทับ ราคาที่สาขานั้นตั้งไว้เองจึงไม่หาย
  • กดซ้ำได้ปลอดภัย รอบที่สองจะขึ้นว่ามีครบอยู่แล้วและไม่เพิ่มอะไรซ้ำ
  • ต้องเลือกสาขาให้ชัดก่อน ถ้าแถบเลือกสาขาค้างอยู่ที่ "ทุกสาขา" ปุ่มจะกดไม่ได้พร้อมบอกเหตุผล
  • เฉพาะเจ้าของร้านและผู้ดูแล เท่านั้นที่เห็นปุ่มนี้
  • อะไหล่จะมีให้เลือกเฉพาะร้านที่แพ็คเกจรวมงานซ่อม ถ้าแพ็คเกจไม่มีงานซ่อม จะเห็นเฉพาะอุปกรณ์เสริม
  • ถ้ารายการที่จะคัดลอกทำให้จำนวนสินค้าเกินโควตาของแพ็คเกจ ระบบจะบอกตั้งแต่ขั้นดูก่อน ไม่ปล่อยให้กดยืนยันแล้วค่อยล้มเหลว

เครื่องมือถือคัดลอกไม่ได้ และไม่ควรคัดลอก — เครื่อง 1 รายการในระบบ = เครื่องจริง 1 เครื่องที่ผูกกับ IMEI ถ้าคัดลอกไปสาขาอื่นจะกลายเป็นมีเครื่องเดียวกันอยู่ 2 ที่ ซึ่งไม่ตรงกับของจริง การย้ายเครื่องระหว่างสาขาให้ใช้ โอนย้ายสินค้าระหว่างสาขา ซึ่งย้ายของจริงพร้อมจำนวน

17. ภาคผนวก

17.1 API Endpoints หลัก

Prefix: /api/v1

ModuleEndpointMethodคำอธิบาย
Auth/auth/loginPOSTเข้าสู่ระบบ
Auth/auth/registerPOSTสมัครใช้งาน
Auth/auth/verify-emailPOSTยืนยัน OTP
Products/productsGET/POSTดู/เพิ่มสินค้า
Sales/salesGET/POSTดู/สร้างการขาย
Repairs/repairsGET/POSTดู/สร้างงานซ่อม
Customers/customersGET/POSTดู/เพิ่มลูกค้า
Payroll/payrollGET/POSTดู/คำนวณเงินเดือน
Expenses/expensesGET/POST/PUT/DELETEดู/บันทึก/แก้ไข/ลบค่าใช้จ่ายดำเนินงาน
Expenses/expenses/summary/by-categoryGETสรุป expense ตามหมวด (สำหรับ chart)
Shift/shift/currentGETดูกะที่เปิดอยู่ของ user
Shift/shiftGETประวัติกะ (admin/manager: ทั้งสาขา; cashier: ของตัวเอง)
Shift/shift/openPOSTเปิดกะใหม่ — body: openingFloat
Shift/shift/:id/live-totalsGETpreview totals ของกะ OPEN ก่อนปิด
Shift/shift/:id/closePOSTปิดกะ — body: actualCash + varianceReason
POS/sales/preflight?branchId=...GETเช็คว่า user ขายได้ไหม — returns {shiftRequired, hasOpenShift, canSell, ...}
Tax CIT/reports/cit?period=H1|FULL&year=YYYYGETคำนวณภาษีนิติบุคคล (CORPORATION only)
Tax WHT/reports/wht?year=YYYY&month=MMGETสรุปหัก ณ ที่จ่าย — group by payee + Export CSV
Suppliers/suppliersGET/POST/PUT/DELETEดู/เพิ่ม/แก้/ลบผู้จัดหา
Reorders/reordersGET/POSTดู/สร้างคำสั่งซื้ออะไหล่
Reorders/reorders/low-stockGETอะไหล่ที่ต่ำกว่า min stock + suggestedQty
Reorders/reorders/:id/send|receive|cancelPOSTส่งคำสั่ง/รับเข้า/ยกเลิก
Stock Count/stock-countGET/POSTดู/เริ่มรอบนับ (เริ่มรอบ = ผู้จัดการขึ้นไป)
Stock Count/stock-count/:id/items/:itemIdPUTบันทึก countedQty ของ item
Stock Count/stock-count/:id/scanPOSTยิงบาร์โค้ด 1 ครั้ง = นับเพิ่ม 1 (มือถือ = ยืนยันว่าเจอ ไม่บวกซ้ำ)
Stock Count/stock-count/:id/cancelPOSTยกเลิกรอบที่เปิดผิด (ผู้จัดการขึ้นไป) — body: reason ≥ 10 ตัวอักษร · ไม่แตะสต๊อกและไม่ลบตัวเลขที่นับไว้ · กู้คืนไม่ได้
Stock Count/stock-count/:id/completePOSTปิดรอบนับ + คำนวณ totals + ปรับสต๊อกจริง (ตัวเลือก)
Stock Transfer/stock-transferGET/POSTดู/ขอโอน
Stock Transfer/stock-transfer/:id/approve|receive|cancelPOSTอนุมัติ + ส่ง/รับเข้า/ยกเลิก
Sales Invoice (B2B)/sales-invoicesGET/POSTดู/ออก invoice — body: customerId + items + paymentTerms
Sales Invoice (B2B)/sales-invoices/:id/paymentPOSTบันทึกรับเงิน — body: amount + paymentMethod
Sales Invoice (B2B)/sales-invoices/:id/cancelPOSTยกเลิก invoice (ถ้ายังไม่ PAID)
Refunds/sales/refunds/listGETlist refund ทั้งหมด — filter date/method/search
Reports/reports/:typeGETดูรายงาน
Dashboard/dashboard/statsGETสถิติ Dashboard
Public Tracking/public/repairs/track/:slug/:repairIdGETติดตามสถานะ (ไม่ต้อง auth, masked PII)
Public Tracking/public/repairs/track/:slug/:repairId/verifyPOSTยืนยันด้วย 4 ตัวท้ายเบอร์ → full info
Public Tracking/public/repairs/lookup?code=GETค้นด้วยเลขเดียว ข้าม tenant (Kerry-style) → redirect
Public Tracking/public/tenants/search?q=GETautocomplete ชื่อร้าน (deprecated — เหลือไว้สำหรับ Phase 2)
Billing (Stripe)/tenant/billing/stripe/statusGETระบบเปิดให้จ่ายด้วยบัตรหรือยัง (คืนแค่ธง ไม่มีคีย์)
Billing (Stripe)/tenant/billing/stripe/checkout/:paymentIdPOSTสร้างหน้าชำระเงิน → คืน URL ของ Stripe
Webhook/webhooks/stripePOSTStripe แจ้งผลการชำระเงิน — ยืนยันด้วยลายเซ็น ไม่ใช่ JWT

17.2 Tech Stack

ส่วนเทคโนโลยีเวอร์ชัน
FrontendNext.js16
FrontendReact19
FrontendMantine UIv8.3
FrontendZustandState Management
FrontendSocket.IO ClientReal-time
BackendFastifyNode.js Framework
BackendPrisma ORMPostgreSQL Client
DatabasePostgreSQL
Real-timeSocket.IO
AuthJWT24h tenant, 12h admin
File UploadFastify Multipartสูงสุด 5MB
FontKanitThai Font
TimezoneAsia/Bangkokdayjs

17.3 Deployment

Docker Compose

ไฟล์: docker-compose.yml (root)

# Start production
docker-compose up -d

# View logs
docker-compose logs -f

Services:

  • backend — Fastify API (port 3001)
  • frontend — Next.js App (port 3000)
  • postgres — PostgreSQL Database
  • nginx — Reverse Proxy (port 80/443)

PM2 (Node.js Process Manager)

# Backend
cd backend
pm2 start ecosystem.config.js

# Frontend
cd frontend
pm2 start ecosystem.config.js

Config:

  • backend/ecosystem.config.js — Cluster mode
  • frontend/ecosystem.config.js — Cluster mode

Environment Variables

Backend (backend/.env):

DATABASE_URL=postgresql://...
JWT_SECRET=your-secret-key
PORT=3001
ALLOWED_ORIGINS=https://mobilehub.ajsoftwaredev.com
UPLOAD_DIR=/app/uploads

Frontend (.env.production):

NEXT_PUBLIC_API_URL=https://api.mobilehub.ajsoftwaredev.com
NEXT_PUBLIC_SOCKET_URL=wss://api.mobilehub.ajsoftwaredev.com

17.4 Backup & Restore

สร้าง Backup

💡 หมายเหตุ: การ backup จัดการโดยทีมสนับสนุนระบบ (Super Admin) สามารถติดต่อผ่าน Support Ticket ได้

ผ่าน Command Line (สำหรับผู้ดูแลระบบที่มีสิทธิ์ SSH):

cd /opt/mobilehub
bash scripts/backup.sh

สิ่งที่ถูกสำรองในแต่ละรอบ (ตั้งแต่ 6 ส.ค. 2569):

ไฟล์เนื้อหาทำไมสำคัญ
mobilehub_<วันเวลา>.sql.gz.encฐานข้อมูลทั้งหมดข้อมูลขาย/ซ่อม/สต็อก/ลูกค้า
mobilehub-uploads_<วันเวลา>.tar.gz.encไฟล์ที่อัปโหลดรูปเครื่อง · โลโก้ร้าน · สำเนาบัตรประชาชนและลายเซ็นในใบรับซื้อ ซึ่งเป็นหลักฐานทางกฎหมายที่สร้างใหม่ไม่ได้

⚠️ ก่อน 6 ส.ค. 2569 ระบบสำรองเฉพาะฐานข้อมูล — กู้กลับแล้วข้อมูลครบแต่เปิดรูปไม่ขึ้นสักรูป เพราะฐานข้อมูลเก็บแค่ที่อยู่ของไฟล์ ไม่ได้เก็บตัวไฟล์

ทดสอบว่ากู้คืนได้จริง (ควรทำอย่างน้อยเดือนละครั้ง)

cd /opt/mobilehub
bash scripts/verify-restore.sh          # ใช้ไฟล์ล่าสุด

สคริปต์จะถอดรหัส → กู้ลง ฐานข้อมูลชั่วคราว → เทียบจำนวนตารางและจำนวนแถวกับฐานข้อมูลจริง → ลบฐานข้อมูลชั่วคราวทิ้ง · ไม่แตะฐานข้อมูลจริงเลย รันบน production ได้อย่างปลอดภัย

💡 ไฟล์สำรองที่ไม่เคยถูกกู้กลับ ไม่ใช่ไฟล์สำรอง — เป็นแค่ไฟล์ที่เราหวังว่าจะใช้ได้ จะรู้ว่าใช้ไม่ได้ก็ตอนที่ต้องใช้จริง ซึ่งสายเกินแก้แล้ว

Restore จาก Backup (ตอนเกิดเหตุจริง)

cd /opt/mobilehub
set -a; source .env.production; set +a          # โหลดคีย์ + ชื่อฐานข้อมูล

# ── 1. ฐานข้อมูล ──────────────────────────────────────────────
openssl enc -d -aes-256-cbc -pbkdf2 -pass env:BACKUP_ENCRYPTION_KEY \
  -in backups/mobilehub_XXXXXXXX_XXXXXX.sql.gz.enc | gunzip > /tmp/restore.sql

docker compose -f docker-compose.prod.yml stop backend frontend   # หยุดแอปก่อน
docker exec -i mobilehub-postgres psql -v ON_ERROR_STOP=1 \
  -U "$POSTGRES_USER" -d "$POSTGRES_DB" < /tmp/restore.sql
rm -f /tmp/restore.sql                            # ลบทันที เป็นข้อมูลดิบทั้งร้าน

# ── 2. ไฟล์ที่อัปโหลด ─────────────────────────────────────────
openssl enc -d -aes-256-cbc -pbkdf2 -pass env:BACKUP_ENCRYPTION_KEY \
  -in backups/mobilehub-uploads_XXXXXXXX_XXXXXX.tar.gz.enc \
  | docker run --rm -i -v mobilehub-uploads:/dst alpine:3 tar xzf - -C /dst

docker compose -f docker-compose.prod.yml --env-file .env.production up -d

⚠️ 3 จุดที่พลาดบ่อยและทำให้กู้ไม่สำเร็จ

  1. ต้องมี -pbkdf2 และ -pass env:... — คำสั่งที่ขาด 2 ตัวนี้ (แบบที่คู่มือเขียนไว้ก่อน 6 ส.ค. 2569) จะค้างรอให้พิมพ์รหัสผ่านจากแป้นพิมพ์ตลอดไป ไม่ใช่ error ที่มองเห็น
  2. ต้องมี -v ON_ERROR_STOP=1 — ถ้าไม่ใส่ psql จะข้ามคำสั่งที่พังแล้วจบด้วยสถานะ "สำเร็จ" ทั้งที่ตารางหายไปครึ่งหนึ่ง
  3. ตัวแปรคือ BACKUP_ENCRYPTION_KEY — คู่มือเวอร์ชันก่อนหน้าเขียนว่า BACKUP_ENCRYPTION_SALT ซึ่งไม่มีอยู่จริงในระบบ

⚠️ คีย์ต้องอยู่ 2 ไฟล์ ค่าเดียวกัน — .env.production (สคริปต์ backup.sh ใช้) และ backend/.env (ฟีเจอร์สำรองข้อมูลในหน้าเว็บใช้) · ถ้าขาดที่ .env.production ไฟล์สำรองจะถูกเขียนเป็น plaintext ทุกวันโดยพิมพ์แค่ WARNING ลง log

สำรองออกนอกเครื่อง

ไฟล์สำรองที่อยู่ดิสก์เดียวกับฐานข้อมูล จะหายพร้อมกันตอนดิสก์พัง — ตั้ง RCLONE_REMOTE ใน .env.production (เช่น gdrive:mobilehub-backups) แล้ว backup.sh จะส่งขึ้นให้เองทุกคืน

ไฟล์ถูกเข้ารหัสตั้งแต่อยู่ในเครื่องแล้ว คีย์ไม่เคยออกจาก VPS ปลายทางจึงเป็นแค่ที่เก็บ ไม่ต้องเชื่อถือผู้ให้บริการ

💡 ระบบจะแจ้งเตือนแอดมินอัตโนมัติเมื่อ ไฟล์สำรองล่าสุดเก่าเกิน 36 ชั่วโมง หรือ ยังไม่ได้ส่งออกนอกเครื่อง — ตัวนี้จับกรณีที่อันตรายที่สุดคือ สคริปต์ไม่ได้รันเลย ซึ่งจะไม่มีอะไรส่งเสียงร้องออกมาให้ได้ยิน

17.5 Security Rules (สรุปสำหรับผู้ดูแล)

กฎรายละเอียด
JWT TokenTenant: 24h, Admin: 12h
OTPHash ด้วย SHA-256 + สร้างด้วย crypto.randomInt
CORSProduction ห้าม Wildcard (*)
Body Limitสูงสุด 1MB (ไฟล์ Upload 5MB แยก)
Pagination Capสูงสุด 100 รายการต่อหน้า
Rate Limit100 req/min (global), 10/min (auth), 5/min (register)
Upload PathValidate branchId + path.resolve check
Admin Authใช้ adminToken แยกจาก Tenant Token
Socket.IOJWT Auth ก่อน connect, emit เฉพาะ Tenant Room
Mass AssignmentWhitelist fields ก่อน Prisma update
Error Responseไม่ expose error.message ใน 500 response

17.6 การแก้ปัญหาเบื้องต้น

ปัญหาสาเหตุวิธีแก้
Login ไม่ได้Token หมดอายุออกจากระบบแล้วเข้าใหม่
ข้อมูลไม่แสดงBranch ไม่ถูกเปลี่ยน Branch ใน Selector
QR Kiosk ไม่ทำงานCamera Permissionอนุญาตกล้องในเบราว์เซอร์
PromptPay QR ว่างยังไม่ได้ตั้งค่าเบอร์ตั้งค่าใน Settings → PromptPay Phone
Export Excel ช้าข้อมูลมากลดช่วงวันที่
Notification ไม่มาSocket.IO disconnectรีเฟรชหน้า
Upload ไม่ได้ไฟล์ใหญ่เกินขนาดสูงสุด 5MB ต่อไฟล์
หน้าขาว (Error)JavaScript ErrorF5 หรือ Clear Cache

คู่มือนี้จัดทำสำหรับ MobileHub v2 เวอร์ชัน 2.0 อัปเดตล่าสุด: 10 สิงหาคม 2569 สอบถามเพิ่มเติม: support@mobilehub.ajsoftwaredev.com

MobileHub v2.0 | คู่มือการใช้งาน | © 2026 AJ Software Dev.

ดาวน์โหลด PDF