Approve Holiday Change
อนุมัติ ปฏิเสธ หรือส่งเอกสารเปลี่ยนวันหยุดกลับให้ตรวจสอบอีกครั้ง รองรับการอนุมัติแบบหลายขั้นตอน (Multi-level Approval)
ใช้ API นี้เพื่ออนุมัติ ปฏิเสธ หรือส่งเอกสารเปลี่ยนวันหยุดกลับให้ตรวจสอบอีกครั้ง (Recheck) เมื่ออนุมัติขั้นสุดท้ายระบบจะเปลี่ยนวันหยุดให้พนักงานอัตโนมัติ
Endpoint
POST /api/v1/open-apis/holiday-change/approveสิทธิ์ที่ต้องการ: API Key ต้องมีสิทธิ์ ข้อมูลการยื่นเอกสาร (document:manage)
Request Parameters
Required Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
holiday_change_id | string | Yes | รหัสเอกสารเปลี่ยนวันหยุด (Base64) | MjAyNTExMjdENDU3M0M0MjE2Mzk= |
employee_code | string | Yes | รหัสพนักงานเจ้าของเอกสาร | EMP001 |
approve_flag | string | Yes | การดำเนินการ (02-08) ดูตาราง Option Values | 02 |
authorize_id | string | Yes | รหัสผู้อนุมัติ (Base64) | MjAyNTExMjdENDU3M0M0MjE2Mzk= |
หา authorize_id ได้อย่างไร: รับค่าจาก Get Employee Data Filter โดยใช้ path_action=get-user พร้อม employee_code ของผู้ทำรายการ — ใช้ค่า user_id ที่ได้กลับมาเป็น authorize_id
Optional Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
approve_remark | string | "" | หมายเหตุการอนุมัติ (บังคับเมื่อ approve_flag = 03) |
authorize_line | boolean | - | ส่ง true เพื่อทำรายการในฐานะผู้อนุมัติตามสายอนุมัติ ระบบจะคำนวณขั้นอนุมัติตามสายแม้ผู้ทำรายการมีสิทธิ์ HR และใช้ประกอบการตรวจ cut-off date |
extra_round | string | "N" | Y = ข้ามการตรวจสอบงวดเงินเดือนที่ปิดแล้ว (งวดพิเศษ) |
no_hr_permission | boolean | false | true = ยกเลิกการยกเว้นการตรวจสอบ cut-off date ของผู้ทำรายการที่มีสิทธิ์ HR |
Option Values for approve_flag
| ค่า | สถานะ (TH) | สถานะ (EN) | การทำงาน |
|---|---|---|---|
02 | อนุมัติ | Approved | อนุมัติเอกสาร — ระบบคำนวณขั้นตามสายอนุมัติ ถ้าเป็นขั้นสุดท้ายจะเปลี่ยนวันหยุดให้พนักงานอัตโนมัติ |
03 | ไม่อนุมัติ | Not Approved | ปฏิเสธเอกสาร (ต้องส่ง approve_remark) |
04 | หัวหน้าอนุมัติขั้นที่ 1 | Manager Approved Step 1 | ส่งต่อไปยังขั้นตอนถัดไป |
05 | ส่งกลับตรวจสอบอีกครั้ง | Recheck | ส่งเอกสารกลับให้ตรวจสอบอีกครั้ง เอกสารกลับไปอยู่ในกลุ่มรออนุมัติ |
06 | หัวหน้าอนุมัติขั้นที่ 2 | Manager Approved Step 2 | ส่งต่อไปยังขั้นตอนถัดไป |
07 | หัวหน้าอนุมัติขั้นที่ 3 | Manager Approved Step 3 | ส่งต่อไปยังขั้นตอนถัดไป |
08 | หัวหน้าอนุมัติขั้นที่ 4 | Manager Approved Step 4 | ส่งต่อไปยังขั้นตอนถัดไป |
การคำนวณขั้นอนุมัติเมื่อส่ง approve_flag = 02
- ผู้ทำรายการมีสิทธิ์ HR และไม่ได้ส่ง
authorize_line=true— ระบบบันทึกเป็น02(อนุมัติขั้นสุดท้าย) ทันที - กรณีอื่น ระบบตรวจว่าผู้ทำรายการเป็นผู้อนุมัติขั้นใดในสายอนุมัติของพนักงาน — ขั้นสุดท้ายได้
02ขั้นก่อนหน้าได้04,06,07หรือ08ตามลำดับขั้น - ถ้าผู้ทำรายการไม่ได้อยู่ในสายอนุมัติ ระบบจะบันทึกสถานะเป็น
01(รออนุมัติ) และตอบกลับ HTTP 200 — ความคืบหน้าการอนุมัติเดิมของเอกสารจะถูกรีเซ็ต - ถ้าองค์กรกำหนดให้เอกสารประเภทนี้อนุมัติโดย HR หรือพนักงานไม่มีผู้อนุมัติในสาย ระบบบันทึกเป็น
02
ค่าอื่น (03-08) ระบบบันทึกตามค่าที่ส่งมาโดยไม่คำนวณขั้น — ตรวจสอบสถานะที่บันทึกจริงได้จาก approve_flag ใน response
authorize_line ต้องส่งเป็น boolean true (ไม่ใช่ string) จึงจะมีผลกับการคำนวณขั้นอนุมัติ
ระบบไม่ได้ปฏิเสธการทำรายการกับเอกสารที่อนุมัติ (02) หรือไม่อนุมัติ (03) ไปแล้ว ควรตรวจสถานะเอกสารจาก Get List ก่อนเรียก API นี้ทุกครั้ง
Request Body Example
{
"holiday_change_id": "MjAyNTExMjdENDU3M0M0MjE2Mzk=",
"employee_code": "EMP001",
"approve_flag": "02",
"authorize_id": "MjAyNTExMjdENDU3M0M0MjE2Mzk=",
"approve_remark": "อนุมัติเปลี่ยนวันหยุด"
}Response Format
Success Response (HTTP 200)
{
"code": 200,
"message": "สำเร็จ",
"payload": {
"holiday_change_id": "20251127D4573C421639",
"employee_code": "EMP001",
"approve_flag": "02",
"approve_remark": "อนุมัติเปลี่ยนวันหยุด",
"approved_at": "2026-04-30 10:30:00"
}
}Error Response - Validation Failed (HTTP 400)
{
"code": 400,
"message": "Validation failed",
"errors": [
"'approve_flag' must be one of: 02, 03, 04, 05, 06, 07, 08",
"Missing required parameter: 'authorize_id'"
]
}Error Response - Remark Required for Rejection (HTTP 400)
{
"code": 400,
"message": "Validation failed",
"errors": [
"'approve_remark' is required for rejection (approve_flag='03')"
]
}Error Response - Employee Not Found (HTTP 400)
{
"code": 400,
"message": "Employee not found",
"errors": [
"Employee not found: EMP001"
]
}Error Response - Document Not Found (HTTP 400)
{
"code": 400,
"message": "ไม่พบเอกสาร"
}Error Response - Exceed Quota (HTTP 400)
{
"code": 400,
"message": "ไม่สามารถบันทึก เพราะการเปลี่ยนวันหยุดครั้งนี้เกินโควตาแล้ว!!"
}Error Response - Overtime Exists (HTTP 400)
{
"code": 400,
"message": "ไม่สามารถบันทึกได้ เพราะ มีเอกสารโอทีแล้ว!!"
}Error Response - Salary Period Closed (HTTP 400)
{
"code": 400,
"message": "Cannot approve because salary calculation period is closed"
}Error Response - Cut-off Date Exceeded (HTTP 400)
{
"code": 400,
"message": "Unable to approve the document as the request deadline has already passed."
}ข้อความ error ที่เป็นภาษาไทยจะแสดงเป็นภาษาอังกฤษเมื่อส่ง language_code = EN เช่น ไม่พบเอกสาร → Document not found
Response Fields
| Field | Type | Description |
|---|---|---|
holiday_change_id | string | รหัสเอกสารเปลี่ยนวันหยุด |
employee_code | string | รหัสพนักงานเจ้าของเอกสาร |
approve_flag | string | สถานะที่บันทึกจริงหลังระบบคำนวณขั้นอนุมัติ (อาจต่างจากค่าที่ส่งมา เช่น ส่ง 02 แต่ได้ 04) |
approve_remark | string | หมายเหตุการอนุมัติ |
approved_at | string | วันเวลาที่ทำรายการ (YYYY-MM-DD HH:MM:SS) |
Code Examples
cURL
curl -X POST "https://openapi.humansoft.co.th/api/v1/open-apis/holiday-change/approve" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"holiday_change_id": "MjAyNTExMjdENDU3M0M0MjE2Mzk=",
"employee_code": "EMP001",
"approve_flag": "02",
"authorize_id": "MjAyNTExMjdENDU3M0M0MjE2Mzk=",
"approve_remark": "อนุมัติเปลี่ยนวันหยุด"
}'Validation Rules
| Parameter | Validation | Error Message |
|---|---|---|
holiday_change_id | ต้องระบุและเป็น string | Missing required parameter: 'holiday_change_id' |
employee_code | ต้องระบุและเป็น string | Missing required parameter: 'employee_code' |
employee_code | ต้องพบพนักงานในระบบ | Employee not found: EMP001 |
approve_flag | ต้องระบุ | Missing required parameter: 'approve_flag' |
approve_flag | ต้องเป็น 02-08 | 'approve_flag' must be one of: 02, 03, 04, 05, 06, 07, 08 |
approve_remark | บังคับเมื่อ approve_flag = 03 (ปฏิเสธ) | 'approve_remark' is required for rejection (approve_flag='03') |
authorize_id | ต้องระบุและเป็น string | Missing required parameter: 'authorize_id' |
authorize_id | ต้องพบผู้ใช้ในระบบ | User associated with 'authorize_id' not found in the system |
holiday_change_id | ต้องมีอยู่ในระบบ | ไม่พบเอกสาร |
Business Rules
ข้อจำกัดการอนุมัติ:
- เมื่อส่ง
approve_flag=02ระบบคำนวณขั้นถัดไปตามสายอนุมัติ (ดูหัวข้อ Option Values) - เมื่อสถานะที่บันทึกเป็น
02ระบบจะตรวจเอกสารเปลี่ยนวันหยุดที่ทับซ้อน แล้วเปลี่ยนวันหยุดให้พนักงานอัตโนมัติ - เมื่อสถานะที่บันทึกเป็น
02และเอกสารเปลี่ยนเป็นวันหยุดพิเศษ (holiday_flag_lv=04) ระบบจะตรวจว่าจำนวนชั่วโมงไม่เกินโควตาวันหยุดพิเศษประจำปีของพนักงาน - การปฏิเสธ (
approve_flag=03) ต้องระบุapprove_remarkเสมอ - การตรวจสอบต่อไปนี้ทำกับทุกค่า
approve_flagรวมถึงการปฏิเสธและการส่งกลับตรวจสอบ:- ไม่สามารถทำรายการได้หากมีเอกสาร OT ที่อนุมัติแล้วในวันเดียวกัน
- ไม่สามารถทำรายการได้หากงวดเงินเดือนของวันที่ในเอกสารปิดแล้ว ยกเว้นส่ง
extra_round=Yหรือวันที่นั้นอยู่ในงวด OT หรืองวดเวลาทำงานที่ยังเปิดอยู่ - ตรวจ cut-off date ตามการตั้งค่า cut-off ของเอกสารเปลี่ยนวันหยุดขององค์กร (ขึ้นกับกลุ่มผู้ใช้ที่องค์กรกำหนดให้มีผล)
- ระบบจะส่งการแจ้งเตือนตามการตั้งค่าการแจ้งเตือนเอกสารขององค์กร
Error Handling
| Error | Cause | Solution |
|---|---|---|
Missing required parameter: 'holiday_change_id' | ไม่ได้ส่ง holiday_change_id | ตรวจสอบ request body |
Missing required parameter: 'authorize_id' | ไม่ได้ส่ง authorize_id | ตรวจสอบ request body |
'approve_flag' must be one of: 02, 03, 04, 05, 06, 07, 08 | ค่า approve_flag ไม่ถูกต้อง | ใช้ค่า 02-08 ตามตาราง Option Values |
'approve_remark' is required for rejection (approve_flag='03') | ปฏิเสธโดยไม่ระบุหมายเหตุ | ส่ง approve_remark เมื่อ approve_flag = 03 |
Employee not found: EMP001 | ไม่พบพนักงานจาก employee_code | ตรวจสอบ employee_code |
User associated with 'authorize_id' not found in the system | ไม่พบผู้ใช้จาก authorize_id | ตรวจสอบ authorize_id |
ไม่พบเอกสาร | ไม่พบเอกสาร | ตรวจสอบ holiday_change_id |
ไม่สามารถบันทึกได้ เพราะได้มีการขอเอกสารทับซ้อนกับที่ขอมาก่อนหน้าแล้ว!! | มีเอกสารเปลี่ยนวันหยุดทับซ้อน (ตรวจเมื่ออนุมัติขั้นสุดท้าย) | ตรวจสอบเอกสารเปลี่ยนวันหยุดของพนักงานในวันนั้น |
ไม่สามารถบันทึก เพราะการเปลี่ยนวันหยุดครั้งนี้เกินโควตาแล้ว!! | เปลี่ยนเป็นวันหยุดพิเศษเกินโควตาวันหยุดพิเศษประจำปี (ตรวจเมื่ออนุมัติขั้นสุดท้าย) | ตรวจสอบโควตาวันหยุดพิเศษของพนักงาน |
ไม่สามารถบันทึกได้ เพราะ มีเอกสารโอทีแล้ว!! | มีเอกสาร OT ที่อนุมัติแล้วในวันเดียวกัน | ตรวจสอบเอกสาร OT ของพนักงานในวันนั้น |
Cannot approve because salary calculation period is closed | งวดเงินเดือนปิดแล้ว | ส่ง extra_round = Y หากต้องการทำรายการในงวดพิเศษ |
Unable to approve the document as the request deadline has already passed. | เกินวัน cut-off | ติดต่อ HR เพื่อดำเนินการ |
Notes
Use Cases
- หัวหน้าอนุมัติคำขอ - ส่ง
approve_flag=02ระบบจะคำนวณขั้นตามตำแหน่งของผู้ทำรายการในสายอนุมัติ - HR อนุมัติหรือปฏิเสธเอกสาร - อนุมัติหรือปฏิเสธเอกสารในฐานะ HR
- ส่งกลับตรวจสอบอีกครั้ง - ส่ง
approve_flag=05เพื่อส่งเอกสารกลับให้ตรวจสอบอีกครั้ง
Approval Flow
04->06->07->08->02(ตามจำนวนขั้นในสายอนุมัติที่กำหนด สูงสุด 5 ขั้น)- ส่ง
approve_flag=02แล้วให้ระบบคำนวณขั้นถัดไปเอง ไม่จำเป็นต้องส่ง04-08เอง - เมื่อผู้อนุมัติขั้นสุดท้ายอนุมัติ ระบบจะเปลี่ยนสถานะเป็น
02(Approved) และเปลี่ยนวันหยุดให้พนักงานทันที
HR Special Permission
- ผู้ทำรายการที่มีสิทธิ์ HR สามารถอนุมัติขั้นสุดท้ายได้ทันทีโดยไม่ต้องผ่านสายอนุมัติ
- โดยปกติ HR ไม่ถูกตรวจสอบ cut-off date ยกเว้นองค์กรตั้งค่าให้ cut-off มีผลกับผู้ใช้ทุกกลุ่ม
- หากต้องการให้ HR อนุมัติตามสายอนุมัติ ให้ส่ง
authorize_line=true - ส่ง
no_hr_permission=trueเพื่อยกเลิกการยกเว้น cut-off date ของ HR — การตรวจจริงยังขึ้นกับการตั้งค่า cut-off ขององค์กร
Related APIs
- Submit Holiday Change - ยื่นเอกสารเปลี่ยนวันหยุด
- Get Holiday Change List - ดึงรายการเอกสารเปลี่ยนวันหยุด
- Update Holiday Change - แก้ไขเอกสารเปลี่ยนวันหยุด
- Delete Holiday Change - ลบเอกสารเปลี่ยนวันหยุด