Update OT
แก้ไขคำขอ OT ที่มีอยู่
ใช้ API นี้เพื่อแก้ไขรายละเอียดคำขอ OT เช่น เวลาเริ่มต้น/สิ้นสุด ประเภท OT หรือรายละเอียด
Endpoint
POST /api/v1/open-apis/overtime/updateสิทธิ์ที่ต้องการ: API Key ต้องมีสิทธิ์ ข้อมูลการยื่นเอกสาร (document:manage)
Request Parameters
Required Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
ot_work_id | string | Yes | ID ของคำขอที่ต้องการแก้ไข (Base64) | MjAyNTExMjdENDU3M0M0MjE2Mzk= |
employee_code | string | Yes | รหัสพนักงานเจ้าของเอกสาร | EMP001 |
ot_work_dt | string | Yes | วันที่ของรอบกะการทำงานที่ OT นี้สังกัด (YYYY-MM-DD) — ดู OT Work Date | 2026-01-16 |
ot_work_start_hour | string | Yes | เวลาเริ่มต้น (YYYY-MM-DD HH:mm:ss) | 2026-01-16 18:00:00 |
ot_work_end_hour | string | Yes | เวลาสิ้นสุด (YYYY-MM-DD HH:mm:ss) ต้องมากกว่า ot_work_start_hour | 2026-01-16 22:00:00 |
ot_work_flag_lv | string | Yes | ประเภท OT รองรับทั้งรูปแบบตัวเลข (01-08) หรือ string format (OT_1_0-OT_7_0) | 02 หรือ OT_1_5 |
Optional Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
ot_work_desc | string | No | รายละเอียด/เหตุผล — หากไม่ส่ง รายละเอียดเดิมจะถูกล้างเป็นค่าว่าง | แก้ไขเวลา OT |
image_content | string | No | ไฟล์แนบใหม่ในรูปแบบ Base64 (แนะนำให้มี prefix data:<mime>;base64,) — จะแทนที่ไฟล์เดิม หากไม่ส่ง ไฟล์แนบเดิมยังคงอยู่ | data:image/jpeg;base64,/9j/4AAQ... |
language_code | string | No | ภาษาของข้อความตอบกลับ: TH (ค่าเริ่มต้น) หรือ EN | TH |
authorize_id | string | No | ID ผู้ทำรายการ (Base64) | MjAyNjA0MzBVU0VSMDAwMDAx |
หา authorize_id ได้อย่างไร: รับค่าจาก Get Employee Data Filter โดยใช้ path_action=get-user พร้อม employee_code ของผู้ทำรายการ — ใช้ค่า user_id ที่ได้กลับมาเป็น authorize_id
Request Body Example
{
"ot_work_id": "MjAyNTExMjdENDU3M0M0MjE2Mzk=",
"employee_code": "EMP001",
"ot_work_dt": "2026-01-16",
"ot_work_start_hour": "2026-01-16 18:00:00",
"ot_work_end_hour": "2026-01-16 22:00:00",
"ot_work_flag_lv": "03",
"ot_work_desc": "แก้ไข: ทำงานโปรเจกต์พิเศษ"
}Response Format
Success Response (HTTP 200)
{
"code": 200,
"message": "สำเร็จ",
"payload": {
"ot_work_id": "20251127D4573C421639",
"employee_id": "20251127D4573C421639",
"employee_code": "EMP001",
"ot_work_dt": "2026-01-16",
"ot_work_start_hour": "2026-01-16 18:00:00",
"ot_work_end_hour": "2026-01-16 22:00:00",
"ot_work_flag_lv": "OT_2_0",
"ot_work_desc": "แก้ไข: ทำงานโปรเจกต์พิเศษ",
"approve_flag": "01",
"last_upd": "2026-01-13 14:30:00",
"image_url": "https://cdn.humansoft.co.th/.../image/a1B2c3D4e5F6.png"
}
}Error Response - Validation Failed (HTTP 400)
{
"code": 400,
"message": "Validation failed",
"errors": [
"Missing required parameter: 'ot_work_id'",
"'ot_work_start_hour' must be before 'ot_work_end_hour'"
]
}Error Response - Not Found (HTTP 400)
{
"code": 400,
"message": "OT work record not found"
}Error Response - Already Approved (HTTP 400)
{
"code": 400,
"message": "ไม่สามารถแก้ไขเอกสารที่อนุมัติแล้ว"
}Error Response - Salary Period Closed (HTTP 400)
{
"code": 400,
"message": "สิ้นสุดการคำนวณเงินเดือนไปแล้ว"
}ข้อผิดพลาดจากการตรวจสอบรูปแบบข้อมูลจะอยู่ใน errors (array) ส่วนข้อผิดพลาดอื่นจะอยู่ใน message ข้อความทางธุรกิจ (เช่น อนุมัติแล้ว, งวดปิดแล้ว) แสดงเป็นภาษาไทยโดยค่าเริ่มต้น และเป็นภาษาอังกฤษเมื่อส่ง language_code เป็น EN
Response Fields
| Field | Type | Description |
|---|---|---|
ot_work_id | string | ID ของคำขอที่แก้ไข |
employee_id | string | ID ของพนักงาน |
employee_code | string | รหัสพนักงาน |
ot_work_dt | string | วันที่ของรอบกะการทำงานที่ OT นี้สังกัด |
ot_work_start_hour | datetime | เวลาเริ่มต้นที่บันทึก |
ot_work_end_hour | datetime | เวลาสิ้นสุดที่บันทึก |
ot_work_flag_lv | string | ประเภท OT — คืนกลับเป็นรูปแบบ string เสมอ (OT_1_0-OT_7_0) |
ot_work_desc | string | รายละเอียดงาน OT |
approve_flag | string | สถานะการอนุมัติ — หลังแก้ไขจะเป็น 01 (รออนุมัติ) เสมอ |
last_upd | datetime | วันเวลาที่แก้ไขเอกสาร |
image_url | string | null | URL ของไฟล์แนบ, null หากไม่มีไฟล์แนบ — หากไม่ได้ส่ง image_content จะคืนไฟล์แนบเดิม |
ระบบอาจปรับเวลาเริ่มต้น/สิ้นสุดให้สอดคล้องกับเวลากะการทำงานของพนักงานในวันนั้น (เช่น ตัดช่วงที่ทับกับเวลากะออก) — ot_work_start_hour และ ot_work_end_hour ใน response คือค่าที่บันทึกจริง ซึ่งอาจไม่ตรงกับค่าที่ส่งมา
Code Examples
cURL
curl -X POST "https://openapi.humansoft.co.th/api/v1/open-apis/overtime/update" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ot_work_id": "MjAyNTExMjdENDU3M0M0MjE2Mzk=",
"employee_code": "EMP001",
"ot_work_dt": "2026-01-16",
"ot_work_start_hour": "2026-01-16 18:00:00",
"ot_work_end_hour": "2026-01-16 22:00:00",
"ot_work_flag_lv": "03",
"ot_work_desc": "แก้ไข: ทำงานโปรเจกต์พิเศษ"
}'Validation Rules
| Parameter | Validation | Error Message |
|---|---|---|
ot_work_id | ต้องระบุ | Missing required parameter: 'ot_work_id' |
ot_work_id | ต้องเป็น string | 'ot_work_id' must be a string |
employee_code | ต้องระบุ | Missing required parameter: 'employee_code' |
employee_code | ต้องเป็น string | 'employee_code' must be a string |
ot_work_dt | ต้องระบุ | Missing required parameter: 'ot_work_dt' |
ot_work_dt | ต้องเป็น string | 'ot_work_dt' must be a string |
ot_work_dt | ต้องอยู่ในรูปแบบ YYYY-MM-DD | 'ot_work_dt' must be in Y-m-d format (e.g., 2024-01-15) |
ot_work_dt | ต้องเป็นวันที่ที่มีอยู่จริงตามปฏิทิน | 'ot_work_dt' is not a valid date |
ot_work_dt | ต่างจากวันที่ของ ot_work_start_hour ได้ไม่เกิน 1 วัน | 'ot_work_dt' (2026-01-13) must be within +/- 1 day of 'ot_work_start_hour' date (2026-01-15) |
ot_work_dt | ต่างจากวันที่ของ ot_work_end_hour ได้ไม่เกิน 1 วัน | 'ot_work_dt' (2026-01-13) must be within +/- 1 day of 'ot_work_end_hour' date (2026-01-15) |
ot_work_start_hour | ต้องระบุ | Missing required parameter: 'ot_work_start_hour' |
ot_work_start_hour | ต้องอยู่ในรูปแบบ YYYY-MM-DD HH:mm:ss | 'ot_work_start_hour' must be in Y-m-d H:i:s format (e.g., 2024-01-15 18:00:00) |
ot_work_end_hour | ต้องระบุ | Missing required parameter: 'ot_work_end_hour' |
ot_work_end_hour | ต้องอยู่ในรูปแบบ YYYY-MM-DD HH:mm:ss | 'ot_work_end_hour' must be in Y-m-d H:i:s format (e.g., 2024-01-15 22:00:00) |
ot_work_end_hour | ต้องมากกว่า ot_work_start_hour | 'ot_work_start_hour' must be before 'ot_work_end_hour' |
ot_work_flag_lv | ต้องระบุ | Missing required parameter: 'ot_work_flag_lv' |
ot_work_flag_lv | ต้องรองรับ 01-08 หรือ OT_1_0-OT_7_0 | 'ot_work_flag_lv' must be one of: 01, 02, 03, 04, 05, 06, 07, 08 or OT_1_0, OT_1_5, OT_2_0, OT_3_0, OT_4_0, OT_5_0, OT_6_0, OT_7_0 |
ot_work_desc | ต้องเป็น string (ถ้าระบุ) | 'ot_work_desc' must be a string |
image_content | ต้องเป็น string (ถ้าระบุ) | 'image_content' must be a string |
เงื่อนไขช่วงวันของ ot_work_dt ใช้กฎเดียวกับ Submit OT และถูกตรวจแยกกันสองครั้ง (เทียบกับเวลาเริ่มและเทียบกับเวลาสิ้นสุด) จึงอาจได้รับ error ทั้งสองข้อความพร้อมกันใน errors
Business Rules
ข้อจำกัดการแก้ไข:
- ไม่สามารถแก้ไขคำขอที่อนุมัติแล้ว (
approve_flag=02) หรือคำขอที่ถูกลบแล้ว - ไม่สามารถแก้ไขในงวดเงินเดือนที่ปิดแล้ว ยกเว้นวันที่ทำ OT อยู่ในงวด OT หรืองวดเวลาทำงานที่ยังเปิดอยู่
- ระบบจะบันทึกคำขอเป็นของพนักงานตาม
employee_codeที่ส่งมา โดยไม่ได้ตรวจสอบว่าตรงกับเจ้าของคำขอเดิม จึงต้องส่งemployee_codeของเจ้าของคำขอเสมอ - ช่วงเวลา OT ต้องไม่ทับกับคำขอ OT อื่นของพนักงานคนเดียวกัน (ไม่นับคำขอที่ไม่อนุมัติหรือถูกลบแล้ว)
- ประเภท OT ต้องไม่ถูกปิดใช้งานสำหรับประเภทพนักงานของพนักงานคนนั้น และพนักงานต้องไม่ถูกปิดสิทธิ์ขอ OT ประเภทนั้น
- ระบบจะคำนวณชั่วโมง OT ใหม่จากเวลาที่ส่งมา
- เมื่อแก้ไขสำเร็จ สถานะการอนุมัติจะกลับเป็น
01(รออนุมัติ) เสมอ
Side Effects
เมื่อแก้ไขคำขอสำเร็จ ระบบจะ:
- Recalculate OT Hours - คำนวณชั่วโมง OT ใหม่
- Reset Status - ตั้งสถานะกลับเป็นรออนุมัติ (
01) - Create Notification - แจ้งเตือนผู้อนุมัติ (เมื่อองค์กรเปิดใช้การแจ้งเตือนเอกสาร)
- Update Feed - อัพเดท feed ของเอกสารตามสายอนุมัติ
Error Handling
| Error | Cause | Solution |
|---|---|---|
Missing required parameter: 'ot_work_id' | ไม่ได้ส่ง ot_work_id | ตรวจสอบ request body |
Employee not found: EMP001 | ไม่พบพนักงานจาก employee_code | ตรวจสอบ employee_code |
OT work record not found | ไม่พบคำขอ | ตรวจสอบ ot_work_id |
Cannot update deleted OT work record | คำขอถูกลบไปแล้ว | สร้างคำขอใหม่ด้วย Submit OT |
ไม่สามารถแก้ไขเอกสารที่อนุมัติแล้ว | คำขออนุมัติแล้ว | ไม่สามารถแก้ไขได้ |
สิ้นสุดการคำนวณเงินเดือนไปแล้ว | งวดเงินเดือนปิดแล้ว | ติดต่อ HR |
ได้มีการขอเอกสารทับซ้อนกับที่ขอมาก่อนหน้าแล้ว | ช่วงเวลา OT ทับกับคำขอ OT อื่นของพนักงาน | ตรวจสอบคำขอเดิมด้วย Get OT List |
เวลาโอทีทับซ้อนกับกะการทำงาน | ช่วงเวลา OT อยู่ในเวลากะการทำงานของวันนั้น | ปรับเวลา OT ให้อยู่นอกเวลากะ |
เนื่องจากพนักงานไม่สามารถขอโอทีประเภทนี้ได้!! | พนักงานถูกปิดสิทธิ์ขอ OT ประเภทนี้ | ตรวจสอบการตั้งค่า OT ของพนักงาน |
ประเภทโอทีนี้ถูกปิดใช้งานสำหรับประเภทพนักงานของพนักงานคนนี้ ... | ประเภท OT ถูกปิดสำหรับประเภทพนักงานนี้ | ตรวจสอบการตั้งค่าประเภท OT |
โอทีประเภทนี้ขอได้เฉพาะวันทำงานเท่านั้น | ขอ OT ประเภทที่จำกัดให้ใช้เฉพาะวันทำงาน ในวันที่ไม่ใช่วันทำงาน (ตามการตั้งค่าขององค์กร) | เลือกประเภท OT ให้ตรงกับวัน |
ไม่สามารถแก้ไขเอกสารได้เนื่องจากเกินกำหนดเวลาที่ร้องขอแล้ว | เกินกำหนดวันตัดรอบการขอเอกสาร OT (เมื่อองค์กรเปิดใช้) | ติดต่อ HR |
Notes
Use Cases
- แก้ไขเวลา OT - เปลี่ยนเวลาเริ่มต้นหรือสิ้นสุด
- เปลี่ยนประเภท OT - เปลี่ยนจาก OT 1.5x เป็น OT 2.0x
- เพิ่มรายละเอียด - อัพเดทเหตุผลการทำ OT
Full Update
API นี้ต้องการให้ส่งข้อมูลครบทุก required field — ระบบจะอัพเดทเอกสารเต็มรูปแบบ ไม่รองรับ partial update
- หากไม่ส่ง
ot_work_descรายละเอียดเดิมจะถูกล้างเป็นค่าว่าง — ให้ส่งค่าเดิมมาด้วยหากต้องการเก็บไว้ - หากไม่ส่ง
image_contentไฟล์แนบเดิมยังคงอยู่ และimage_urlใน response จะเป็นไฟล์เดิม
OT Types (ประเภท OT)
API รองรับการส่งค่า ot_work_flag_lv ได้ 2 รูปแบบ:
รูปแบบที่ 1: ตัวเลข (Numeric Code)
| Code | อัตรา OT | คำอธิบาย |
|---|---|---|
01 | 1.0x | OT อัตราปกติ |
02 | 1.5x | OT อัตรา 1.5 เท่า |
03 | 2.0x | OT อัตรา 2 เท่า |
04 | 3.0x | OT อัตรา 3 เท่า |
05 | 4.0x | OT อัตรา 4 เท่า |
06 | 5.0x | OT อัตรา 5 เท่า |
07 | 6.0x | OT อัตรา 6 เท่า |
08 | 7.0x | OT อัตรา 7 เท่า |
รูปแบบที่ 2: String Format
| Code | อัตรา OT | เทียบเท่ากับ |
|---|---|---|
OT_1_0 | 1.0x | 01 |
OT_1_5 | 1.5x | 02 |
OT_2_0 | 2.0x | 03 |
OT_3_0 | 3.0x | 04 |
OT_4_0 | 4.0x | 05 |
OT_5_0 | 5.0x | 06 |
OT_6_0 | 6.0x | 07 |
OT_7_0 | 7.0x | 08 |
ระบบจะแปลง OT_X_X เป็นรหัสตัวเลขอัตโนมัติ เช่น OT_1_5 → 02
Related APIs
- Get OT List - ดึงรายการคำขอ OT
- Submit OT - ยื่นคำขอ OT ใหม่
- Delete OT - ลบคำขอ OT