ไอเดีย #25: ระบบลงเวลาทำงานและคำนวณเงินเดือนพนักงานรายวัน
เคยเห็นสมุดลงเวลาของไซต์งานหรือร้านอาหารไหมครับ ลายมือเขียนเวลาเข้าออกที่บางทีก็เขียนแทนกัน พอถึงวันจ่ายค่าแรงทุกสิบห้าวัน เจ้าของต้องนั่งรวมชั่วโมง คิด OT นับวันลา หักประกันสังคม แล้วนับเงินสดใส่ซองทีละคน ผิดนิดเดียวก็ทะเลาะกันได้ งานแบบนี้เป็นโจทย์ที่ธุรกิจเล็กต้องการจริง และฝึกเรื่องการคำนวณเงินให้แม่นได้ดีมาก
ใครจะใช้
- พนักงานรายวัน — ลงเวลาเข้าออกผ่านมือถือหรือแท็บเล็ตหน้างาน
- หัวหน้างาน — ตรวจและอนุมัติเวลา OT
- ฝ่ายบัญชีหรือเจ้าของ — ปิดงวด คำนวณค่าแรง พิมพ์สลิป
ฟีเจอร์ขั้นต่ำ (MVP)
- ข้อมูลพนักงาน ค่าแรงต่อวัน อัตรา OT ต่อชั่วโมง และสถานะการเป็นผู้ประกันตน
- ลงเวลาเข้าออกด้วย QR ที่หน้างาน หรือแท็บเล็ตกลางพร้อมรหัส PIN
- กำหนดกะงาน เวลาเริ่ม เวลาพัก และกติกามาสาย
- คำนวณ OT จากเวลาที่เกินกะ และต้องผ่านการอนุมัติของหัวหน้าก่อนนับเงิน
- ปิดงวดรายสัปดาห์ รายสิบห้าวัน หรือรายเดือน แล้วคำนวณค่าแรง OT รายการหัก และยอดสุทธิ
- หักเงินสมทบประกันสังคมตามอัตราที่ตั้งค่าไว้ในระบบ ไม่ hardcode
- พิมพ์สลิปค่าแรงและสรุปยอดรวมทั้งงวด
ต่อยอดได้อีก
- ตรวจตำแหน่ง GPS ตอนลงเวลา ป้องกันลงเวลาแทนกัน
- ส่งสลิปให้พนักงานทาง LINE
- เบิกเงินล่วงหน้าระหว่างงวด แล้วหักตอนปิดงวดอัตโนมัติ
- export ไฟล์สำหรับยื่นประกันสังคมหรือโอนเงินเดือนผ่านธนาคาร
โครงข้อมูลตั้งต้น
employees— id, name, daily_wage, ot_rate, sso_enabled, statusshifts— id, name, start_time, end_time, break_minutestime_entries— id, employee_id, work_date, clock_in, clock_out, sourceot_requests— id, employee_id, work_date, minutes, approved_by, statuspay_periods— id, start_date, end_date, status, closed_atpayslips— id, pay_period_id, employee_id, days_worked, wage, ot_amount, sso_deduct, other_deduct, net_pay
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ปานกลาง ทำ backend ด้วย Yii2 หรือ Laravel + PostgreSQL/MySQL และหน้าลงเวลาเป็น web responsive หรือ Flutter สิ่งที่จะได้ฝึก:
- การจัดการเวลาและ timezone รวมกะที่ข้ามเที่ยงคืน
- การใช้
numericแทน float สำหรับเงิน และกำหนดกติกาปัดเศษสตางค์ - การล็อกงวดที่ปิดแล้วไม่ให้แก้ข้อมูลย้อนหลัง
- การเขียน unit test ให้สูตรคำนวณค่าแรง
ข้อควรระวัง
- อัตรา OT เพดานประกันสังคม และกติกาแรงงานเปลี่ยนได้ ควรเก็บเป็นค่าตั้งค่าพร้อมวันที่มีผล และตรวจสอบกับนักบัญชีหรือระเบียบล่าสุด
- เลขบัตรประชาชน บัญชีธนาคาร และค่าแรงเป็นข้อมูลส่วนบุคคลตาม PDPA ต้องจำกัดสิทธิ์ให้เห็นเฉพาะคนที่เกี่ยวข้อง
- การแก้เวลาลงงานย้อนหลังต้องมี audit log ว่าใครแก้ แก้จากเท่าไรเป็นเท่าไร
ใครเคยทำระบบค่าแรงรายวันให้ไซต์งานหรือโรงงานบ้าง ใช้วิธีไหนกันลงเวลาแทนกัน และจัดการกะข้ามคืนยังไง? ถ้าลองทำตามไอเดียนี้แล้ว มาแชร์สูตรคำนวณหรือ test case ในกระทู้นี้ให้เพื่อน ๆ ช่วยกันรีวิวได้เลยครับ