วันหนึ่งระบบบอกว่าขายได้ 815 บาท แอปธนาคารบอกว่าเงินเข้า 725 บาท ไม่มีใครผิด — อีก 90 บาทคือบิลเงินสดใบเดียวที่ไม่มีใครนับ เรื่องนี้เกิดกับร้านจริง และเป็นที่มาของหน้า "กระทบยอด" กับกฎ "ต้องนับเงินสดก่อนปิดยอด" ในระบบของเรา บทความนี้เล่าว่าทำไมยอดขายกับเงินเข้าบัญชีถึงไม่เท่ากันโดยธรรมชาติ และกิจวัตร 5 นาทีที่ทำให้ไม่ต้องเดาอีก
เคสจริง: ขาย 815 โอนเข้า 725
ร้านหนึ่งปิดวันบริการด้วยตัวเลข 8 บิล 815 บาท คนที่ถือแอปธนาคารเห็นพร้อมเพย์เข้า 725 บาท และบอกว่า "เงินสดไม่มี" ส่วนต่าง 90 บาทถูกอ่านว่าเป็นบั๊กอยู่หนึ่งวัน จนไล่ดูทีละบิลแล้วพบว่ามีบิลหนึ่งที่แคชเชียร์กด "เงินสด" ตอนบ่ายสามโมง และลิ้นชักเปิดจริงตามบันทึก ระบบคำนวณถูกทุกบาท แต่ไม่มีหน้าจอไหนที่วางตัวเลข "ขาย 815" ไว้ข้าง "โอน 725 · สด 90" ให้เห็นในที่เดียว
เมื่อย้อนดู 30 วันก่อนหน้า พบช่องโหว่สามข้อที่ร้านส่วนใหญ่มีเหมือนกัน:
- ข้ามการนับเงินสดทุกครั้ง ใบปิดยอดมีช่อง "เงินสดที่นับได้" แต่เป็นช่องที่ไม่บังคับ และไม่มีใครกรอกเลยเก้าครั้งจากเก้าครั้ง ตัวเลขเดียวที่จับเงินสดเดินออกจากลิ้นชักได้ คือตัวเลขที่ไม่มีใครถูกบังคับให้เขียน
- สรุปสิ้นวันบอกแค่ยอดขาย คนที่ถือแอปธนาคารจึงเอาตัวเลขนั้นไปเทียบกับยอดโอน ซึ่งเทียบกันไม่ได้ตั้งแต่ต้น
- มีบิลหลังปิดยอด ปิดยอดห้าโมงห้าสิบ แล้วยังรับอีกสองบิลตอนห้าโมงห้าสิบห้า หลายวันไม่มีใบปิดยอดเลย
บิลกับเงินอยู่คนละนาฬิกา
รากของเรื่องคือ บิลถูกจัดเก็บตามวันบริการ แต่เงินเกิดตามเวลาที่มันเข้า และสองอย่างนี้ไม่ตรงกันในหลายกรณีที่ปกติมาก:
- มัดจำ เข้าบัญชีก่อนวันที่ลูกค้ามาหลายวัน แต่ไปลดยอดบิลในวันที่มา
- บิลค้างชำระ (ลูกค้าประจำ พนักงาน) เปิดวันนี้ เก็บเงินสัปดาห์หน้า
- บิลข้ามจุดเปลี่ยนวัน ร้านที่เปิดถึงตีสองตั้งจุดเปลี่ยนวันบริการไว้ตอนหกโมงเช้า บิลที่เปิดห้าทุ่ม รับเงินบางส่วนก่อนเที่ยงคืนและส่วนที่เหลือหลังจากนั้น ยังเป็นวันบริการเดียวกัน แต่ statement ธนาคารแยกเป็นสองวันปฏิทิน
- โอนผ่านบัญชีคนละบัญชี ร้านที่มีหลายบัญชีรับเงิน (เจ้าของ หุ้นส่วน) ยอดกระจาย
รายงานที่จัดกลุ่มเงินรับตามวันของบิล จึงวางข้าง statement ไม่ได้เลย เพราะธนาคารรู้แค่ว่าเงินเข้าวันไหน ระบบของเราจึงมีตัวตัดสินตัวเดียวว่า "เงินก้อนนี้เป็นของวันไหน" = วันบริการของเวลาที่รับเงิน และทุกรายงานที่พูดถึงเงินรับใช้กฎเดียวกัน ส่วน "ยอดขาย" ยังนับตามวันของบิล — สองตัวเลขนี้ไม่เท่ากันโดยธรรมชาติ และหน้ากระทบยอดมีหน้าที่อธิบายช่องว่างระหว่างมัน
หน้ากระทบยอด: สะพานทีละบรรทัด ไม่กลบส่วนต่าง
หน้า "กระทบยอด" ของวันมีสองบล็อก:
เงินที่รับวันนี้ แยกตามวิธี — พร้อมเพย์ เงินสด บัตร อื่น ๆ — นี่คือตัวเลขที่เอาไปเทียบ: พร้อมเพย์เทียบกับแอปธนาคาร เงินสดเทียบกับที่นับได้ในลิ้นชัก บัตรและอื่น ๆ แสดงแยกแต่ไม่เอามาเทียบ เพราะเข้าบัญชีเป็นก้อนตามรอบของธนาคาร ไม่ใช่วันเดียวกับที่รูด
ทำไมไม่เท่ากับยอดขาย — บรรทัดต่อบรรทัด: ยอดขายของบิลวันนี้ · ลบมัดจำที่รับไว้ก่อนแล้ว · ลบบิลที่ยังค้างชำระ · บวกเงินที่เก็บได้จากบิลค้างของวันก่อน · บวกมัดจำที่รับวันนี้สำหรับวันหน้า · = เงินที่รับวันนี้ ทุกบรรทัดมาจากข้อมูลจริง และถ้ายังเหลือส่วนต่างที่อธิบายไม่ได้ หน้าจะแสดงมันออกมาตรง ๆ แทนที่จะดูดเข้าบรรทัดใดบรรทัดหนึ่งเงียบ ๆ สะพานที่กลบสิ่งที่อธิบายไม่ได้ แย่กว่าไม่มีสะพาน
เจ้าของกรอก "เงินเข้าบัญชีตามแอปธนาคาร" และ "เงินสดที่นับได้" ลงไป ระบบบันทึกคู่กับตัวเลขที่คาดไว้ ณ ตอนกด ถ้าวันหลังมีบิลของวันนั้นถูกเปิดซ้ำหรือแก้ ตัวเลขสดจะขยับ และหน้าจะบอกว่า "ตัวเลขเปลี่ยนไปหลังกระทบยอด" แทนที่จะเออออกับตัวเอง
ทำไมต้องบังคับนับเงินสดตอนปิดยอด
หลังเคสนี้ ร้านเลือกให้ระบบบังคับนับเงินสดเมื่อช่วงนั้นมีเงินสดเข้า ติ๊ก "ไม่นับเงินสด" หายไป กรอก 0 ได้ถ้าลิ้นชักว่างจริง นับได้ไม่ตรงกับที่คาด ต้องเลือกเหตุผลก่อนปิด (ทอนผิด เงินทอนตั้งต้นไม่ครบ หยิบจ่ายของ ฯลฯ) และเหตุผลนั้นถูกเก็บไว้กับใบปิดยอด
ฝั่งเซิร์ฟเวอร์มีตาข่ายรอง: เจ้าของได้รับแจ้งเตือนเมื่อเงินสดนับได้ไม่ตรง หรือเมื่อมีเงินสดเข้าแต่ไม่มีการนับเลย (ปิดยอดจากหลังบ้านที่ไม่มีลิ้นชักให้นับ หรือเครื่องรุ่นเก่า) ตัวเลขเดียวที่พิสูจน์ว่าเงินสดยังอยู่ จึงไม่ถูกปล่อยว่างอีก
สรุปสิ้นวันที่อ่านแล้วไม่ต้องคิด
สรุปสิ้นวันที่ส่งทาง LINE และแจ้งเตือนในแอป เปลี่ยนจาก "ยอดขาย 815" เป็นบรรทัดที่แยกวิธีรับเงิน: "โอน 725 · สด 90 · ยังไม่ได้ปิดยอด 2 บิล" คนที่ถือแอปธนาคารอ่านแล้วเทียบได้ทันที และเห็นด้วยว่ามีบิลที่รับหลังปิดยอดอยู่ พิมพ์คำว่า "ยอด" ในแชต LINE ของทีมก็ได้บรรทัดเดียวกัน
สำหรับคนทำบัญชี มี CSV สองแบบ: รายการรับเงินต่อวัน (เอาไปเทียบ statement ทีละรายการ) และรายบิล ของเดิมมีแค่สรุปรายวัน ซึ่งเอาไปเทียบ statement ไม่ได้
กิจวัตร 5 นาทีก่อนปิดร้าน
- ปิดยอดช่วงบนเครื่องแคชเชียร์หลังบิลสุดท้าย ไม่ใช่ก่อน — ถ้ามีลูกค้าเดินเข้ามาหลังปิดยอด ให้เปิดช่วงใหม่ อย่าปล่อยบิลลอยนอกใบปิดยอด
- นับเงินสดในลิ้นชักให้ครบ หักเงินทอนตั้งต้น กรอกตัวเลขจริง ไม่ตรงก็กรอกตามจริงแล้วเลือกเหตุผล
- เปิดแอปธนาคาร ดูยอดเข้าของวันนี้ แล้วกรอกในหน้ากระทบยอดพร้อมเงินสดที่นับได้
- อ่านบรรทัด "ส่วนต่างที่อธิบายไม่ได้" — ถ้าเป็นศูนย์ จบ ถ้าไม่ใช่ เปิดตารางรายการรับเงินของวันนั้น หาบิลที่วิธีรับเงินถูกกดผิด (โอนกดเป็นสด หรือกลับกัน) แล้วแก้วิธีรับเงินของบิลนั้น
- วันรุ่งขึ้น อ่านสรุปสิ้นวันใน LINE หนึ่งบรรทัด ถ้าตัวเลขตรงกับที่กรอกไว้เมื่อวานก็ไม่ต้องเปิดอะไรอีก
สิ่งที่เราตั้งใจไม่ทำ: บังคับให้แนบสลิปทุกรายการโอน ร้านตัวอย่างรับโอนเกือบร้อยรายการในสองเดือนโดยไม่มีสลิปแนบเลย และยอดรวมต่อวันก็ตรงกับธนาคาร การเทียบยอดรวมต่อวันจึงพอ ส่วนวันที่ไม่ตรงก็มีตารางรายการให้ไล่
ขั้นตอนบนหน้าจออยู่ในคู่มือกระทบยอดรายวัน และรายรับ-รายจ่าย ส่วนภาพรวมของเครื่องแคชเชียร์ที่บังคับนับเงินสดอยู่ที่TABLEZUPS สำหรับร้านอาหาร