ไอเดีย #26: ระบบขอลาและอนุมัติแบบหลายขั้น
ใบลาแบบกระดาษในบริษัทขนาดกลางมักมีชะตากรรมเดียวกัน คือไปค้างอยู่บนโต๊ะหัวหน้าที่ออกไปพบลูกค้า พนักงานไม่รู้ว่าอนุมัติแล้วหรือยัง ฝ่ายบุคคลก็ต้องมานั่งนับวันลาคงเหลือจาก Excel ทีละคน สิ้นปีมีคนลาพักร้อนเกินสิทธิ์เพราะไม่มีใครเช็ก ระบบลาออนไลน์ที่อนุมัติได้หลายขั้นเลยเป็นของที่ SME อยากได้ และเป็นโจทย์ workflow ที่ดีสำหรับคนอยากฝึกออกแบบระบบ
ใครจะใช้
- พนักงาน — ยื่นใบลา ดูสิทธิ์คงเหลือ ติดตามสถานะ
- หัวหน้างาน / ผู้จัดการ — อนุมัติหรือปฏิเสธตามลำดับขั้น
- ฝ่ายบุคคล — ตั้งค่าประเภทลา สิทธิ์ และสายการอนุมัติ
ฟีเจอร์ขั้นต่ำ (MVP)
- ตั้งค่าประเภทลา เช่น ลาป่วย ลากิจ ลาพักร้อน พร้อมกำหนดว่าต้องแนบเอกสารหรือไม่
- กำหนดสิทธิ์วันลาต่อปีตามประเภทพนักงานหรืออายุงาน และยอดยกไปปีถัดไป
- ยื่นลาแบบเต็มวัน ครึ่งวัน หรือรายชั่วโมง โดยไม่นับวันหยุดประจำสัปดาห์และวันหยุดบริษัท
- สายอนุมัติหลายขั้นที่ตั้งได้ตามแผนก เช่น หัวหน้าทีม แล้วต่อด้วยผู้จัดการ
- มอบหมายผู้อนุมัติแทนเมื่อหัวหน้าไม่อยู่
- ตัดสิทธิ์คงเหลือเมื่ออนุมัติขั้นสุดท้าย และคืนสิทธิ์เมื่อยกเลิก
- ปฏิทินทีมแสดงว่าใครลาวันไหน
ต่อยอดได้อีก
- แจ้งเตือนผู้อนุมัติและผลการอนุมัติทาง LINE หรืออีเมล
- เชื่อมกับระบบลงเวลาเพื่อหักค่าแรงกรณีลาไม่ได้รับค่าจ้าง
- กติกาเพิ่มเติม เช่น ลาพักร้อนต้องยื่นล่วงหน้าตามจำนวนวันที่กำหนด
- รายงานสถิติการลารายแผนก
โครงข้อมูลตั้งต้น
leave_types— id, name, require_attachment, allow_half_day, paidleave_balances— id, employee_id, leave_type_id, year, entitled, carried_over, usedleave_requests— id, employee_id, leave_type_id, start_at, end_at, days, reason, statusapproval_flows— id, department_id, step_no, approver_role, approver_idleave_approvals— id, leave_request_id, step_no, approver_id, action, comment, acted_atholidays— id, holiday_date, name
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ปานกลาง ทำด้วย Yii2 หรือ Laravel + PostgreSQL/MySQL สิ่งที่จะได้เรียนรู้:
- การออกแบบ workflow engine แบบง่ายที่ตั้งค่าขั้นตอนได้โดยไม่ต้องแก้โค้ด
- การใช้ RBAC เช่น authManager ของ Yii2 แยกสิทธิ์พนักงาน หัวหน้า และฝ่ายบุคคล
- การคำนวณจำนวนวันทำงานจริงโดยตัดวันหยุดออก
- การทำ background job ส่งแจ้งเตือนผ่าน queue
ข้อควรระวัง
- ใบรับรองแพทย์เป็นข้อมูลสุขภาพ ถือเป็นข้อมูลอ่อนไหวตาม PDPA ควรให้เห็นเฉพาะคนที่จำเป็นและเก็บไฟล์นอก public folder
- ถ้าผู้อนุมัติสองคนกดพร้อมกัน หรือกดซ้ำ อาจตัดสิทธิ์ซ้ำได้ ให้ตรวจสถานะใน transaction ก่อนอัปเดต
- การเปลี่ยนสายอนุมัติกลางทาง ควรมีผลกับใบลาใหม่เท่านั้น ไม่กระทบใบที่ยื่นไปแล้ว
ถ้าเป็นคุณจะเก็บสายอนุมัติแบบผูกกับแผนก ผูกกับตำแหน่ง หรือผูกกับตัวคน? และเคยเจอเคสลาข้ามปีที่ต้องแบ่งตัดสิทธิ์สองปีไหม? มาแลกเปลี่ยนกันในกระทู้นี้ หรือถ้าทำเสร็จแล้วเอา flow มาโชว์ในบอร์ดนี้ได้เลยครับ