Submit Leave
ยื่นคำขอลาใหม่
ใช้ API นี้เพื่อสร้างคำขอลาใหม่ คำขอที่สร้างสำเร็จจะมีสถานะรออนุมัติ (01)
Endpoint
POST /api/v1/open-apis/time-leave/submitสิทธิ์ที่ต้องการ: API Key ต้องมีสิทธิ์ ข้อมูลการยื่นเอกสาร (document:manage)
Request Parameters
Required Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
employee_code | string | Yes | รหัสพนักงาน | EMP001 |
absence_flag_lv | string | Yes | ประเภทการลา (01-08, 10-20 หรือรูปแบบ absence-01) ดูรหัสได้จาก Get Leave Types | absence-01 |
effective_hour | string | Yes | เวลาเริ่มต้น (YYYY-MM-DD HH:MM:SS) | 2026-01-15 08:00:00 |
expire_hour | string | Yes | เวลาสิ้นสุด (YYYY-MM-DD HH:MM:SS) | 2026-01-15 17:00:00 |
Optional Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
time_leave_desc | string | No | รายละเอียด/เหตุผล | ไม่สบาย มีไข้ |
image_content | string | No | ไฟล์แนบ (Base64 encoded) แนะนำให้ส่งพร้อม prefix ระบุชนิดไฟล์ | data:image/png;base64,... |
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
{
"employee_code": "EMP001",
"absence_flag_lv": "absence-01",
"effective_hour": "2026-01-15 08:00:00",
"expire_hour": "2026-01-15 17:00:00",
"time_leave_desc": "ไม่สบาย มีไข้"
}Response Format
Success Response (HTTP 200)
{
"code": 200,
"message": "สำเร็จ",
"payload": {
"time_leave_id": "20251127D4573C421639",
"employee_id": "20251127D4573C421639",
"employee_code": "EMP001",
"type": "01",
"start_dt": "2026-01-15 08:00:00",
"end_dt": "2026-01-15 17:00:00",
"description": "ไม่สบาย มีไข้",
"approve_flag": "01",
"created": "2026-01-13 09:00:00",
"image_url": null
}
}Error Response - Validation Failed (HTTP 400)
{
"code": 400,
"message": "Validation failed",
"errors": [
"Missing required parameter: 'employee_code'",
"'effective_hour' must be in format YYYY-MM-DD HH:MM:SS"
]
}Error Response - Employee Not Found (HTTP 400)
{
"code": 400,
"message": "Employee not found"
}Error Response - Duplicate Leave (HTTP 400)
{
"code": 400,
"message": "ไม่สามารถบันทึกได้ เพราะได้มีการขอเอกสารทับซ้อนกับที่ขอมาก่อนหน้าแล้ว!!"
}Error Response - Document Limit (HTTP 400)
{
"code": 400,
"message": "ไม่สามารถขอเอกสารเกิน 2 ฉบับ ต่อวัน"
}Error Response - Salary Period Closed (HTTP 400)
{
"code": 400,
"message": "ไม่สามารถบันทึกได้ เพราะสิ้นสุดการคำนวณเงินเดือนไปแล้ว"
}Response Fields
| Field | Type | Description |
|---|---|---|
time_leave_id | string | ID ของคำขอที่สร้าง |
employee_id | string | ID ของพนักงาน |
employee_code | string | รหัสพนักงาน |
type | string | รหัสประเภทการลาในรูปแบบตัวเลข เช่น 01 (แม้จะส่งมาเป็น absence-01) |
start_dt | datetime | เวลาเริ่มต้น |
end_dt | datetime | เวลาสิ้นสุด |
description | string | รายละเอียด |
approve_flag | string | สถานะการอนุมัติ — เป็น 01 (รออนุมัติ) เมื่อยื่นสำเร็จ |
created | datetime | วันเวลาที่ยื่นคำขอ |
image_url | string | null | URL ของไฟล์แนบ, null หากไม่มีไฟล์แนบ |
Code Examples
cURL
curl -X POST "https://openapi.humansoft.co.th/api/v1/open-apis/time-leave/submit" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"employee_code": "EMP001",
"absence_flag_lv": "absence-01",
"effective_hour": "2026-01-15 08:00:00",
"expire_hour": "2026-01-15 17:00:00",
"time_leave_desc": "ไม่สบาย มีไข้"
}'Validation Rules
| Parameter | Validation | Error Message |
|---|---|---|
employee_code | ต้องระบุ | Missing required parameter: 'employee_code' |
employee_code | ต้องเป็น string | 'employee_code' must be a string |
absence_flag_lv | ต้องระบุ | Missing required parameter: 'absence_flag_lv' |
absence_flag_lv | ต้องเป็น 01-08 หรือ 10-20 (หรือ absence-01 ถึง absence-20 ยกเว้น 09) | 'absence_flag_lv' must be 01 to 08 or 10 to 20 |
effective_hour | ต้องระบุ | Missing required parameter: 'effective_hour' |
effective_hour | รูปแบบ YYYY-MM-DD HH:MM:SS | 'effective_hour' must be in format YYYY-MM-DD HH:MM:SS |
effective_hour | ต้องเป็นวันเวลาที่มีอยู่จริง | 'effective_hour' is not a valid datetime |
expire_hour | ต้องระบุ | Missing required parameter: 'expire_hour' |
expire_hour | รูปแบบ YYYY-MM-DD HH:MM:SS | 'expire_hour' must be in format YYYY-MM-DD HH:MM:SS |
expire_hour | ต้องเป็นวันเวลาที่มีอยู่จริง | 'expire_hour' is not a valid datetime |
expire_hour | ต้อง >= effective_hour | 'expire_hour' must be greater than or equal to 'effective_hour' |
time_leave_desc | ต้องเป็น string | 'time_leave_desc' must be a string |
image_content | ต้องเป็น string | 'image_content' must be a string |
Business Rules
ข้อจำกัดการยื่นคำขอ:
employee_codeต้องเป็นพนักงานที่มีอยู่ในระบบ- เวลาสิ้นสุดต้องมากกว่าหรือเท่ากับเวลาเริ่มต้น
- ไม่สามารถยื่นคำขอเมื่อวันเริ่มหรือวันสิ้นสุดการลาอยู่ในงวดเงินเดือนที่ปิดแล้ว ยกเว้นช่วงวันลาอยู่ในงวดเวลาทำงานที่ยังเปิดอยู่
- ช่วงเวลาต้องไม่ทับซ้อนกับคำขอลาอื่นของพนักงานคนเดียวกัน (ไม่นับคำขอที่ไม่อนุมัติ
03และคำขอที่ถูกลบ) - พนักงาน 1 คนมีคำขอลาที่เริ่มในวันเดียวกันได้ไม่เกิน 2 ฉบับ (นับทุกสถานะ ยกเว้นคำขอที่ถูกลบ)
- ระบบอาจตรวจสอบเงื่อนไขตามการตั้งค่าประเภทการลาขององค์กร เช่น โควตาการลา การลาล่วงหน้า การลาย้อนหลัง จำนวนวันลาติดต่อกัน และประเภทการลาที่พนักงานไม่สามารถใช้ได้
- หากองค์กรเปิดใช้การกำหนดวันตัดรอบการยื่นเอกสาร หรือจำกัดจำนวนเอกสารลาต่องวดเงินเดือน ระบบอาจปฏิเสธคำขอที่เกินกำหนด
Error Handling
| Error | Cause | Solution |
|---|---|---|
Missing required parameter: 'employee_code' | ไม่ได้ส่ง employee_code | ตรวจสอบ request body |
Employee not found | ไม่พบพนักงานจาก employee_code | ตรวจสอบ employee_code |
ไม่สามารถบันทึกได้ เพราะสิ้นสุดการคำนวณเงินเดือนไปแล้ว | วันเริ่มหรือวันสิ้นสุดการลาอยู่ในงวดเงินเดือนที่ปิดแล้ว | เลือกวันที่ในงวดที่ยังเปิดอยู่ |
ไม่สามารถบันทึก เพราะการลาครั้งนี้เกินโควตาแล้ว!! | โควตาการลาประเภทนี้ไม่พอหรือไม่มีโควตา | ตรวจสอบโควตาการลาของพนักงาน |
ไม่สามารถบันทึก เพราะต้องลาล่วงหน้าอย่างน้อย 3 วัน!! | ยื่นล่วงหน้าไม่ถึงจำนวนวันที่ประเภทการลากำหนด (ตัวเลขตามการตั้งค่า) | ยื่นคำขอล่วงหน้าตามที่กำหนด |
ไม่สามารถบันทึก เพราะลาย้อนหลังได้ไม่เกิน 2 วัน!! | ยื่นย้อนหลังเกินจำนวนวันที่ประเภทการลากำหนด (ตัวเลขตามการตั้งค่า) | ติดต่อ HR |
ไม่สามารถบันทึก เพราะลาติดต่อกันเกินกว่า 30 วัน!! | ลาติดต่อกันเกินจำนวนวันสูงสุดที่ประเภทการลากำหนด (ตัวเลขตามการตั้งค่า) | ตรวจสอบช่วงวันที่ลา |
ไม่สามารถบันทึก เพราะคุณไม่สามารถลาประเภทนี้ได้!! | พนักงานไม่สามารถใช้ประเภทการลานี้ได้ เช่น ประเภทการลาที่จำกัดเพศ | เลือกประเภทการลาอื่น |
ไม่สามารถบันทึกได้ เพราะได้มีการขอเอกสารทับซ้อนกับที่ขอมาก่อนหน้าแล้ว!! | ช่วงเวลาทับซ้อนกับคำขอลาอื่นของพนักงาน | ตรวจสอบช่วงเวลา |
ไม่สามารถขอเอกสารได้ เนื่องจากเกินกำหนดวันที่ขอเอกสารแล้ว | เกินกำหนดวันตัดรอบการยื่นเอกสารที่องค์กรตั้งค่าไว้ | ติดต่อ HR |
ไม่สามารถขอเอกสารได้ เนื่องจากเกินจำนวนโควตาการขอเอกสาร | จำนวนคำขอลาในงวดเงินเดือนเกินจำนวนที่องค์กรกำหนด | ติดต่อ HR |
ไม่สามารถขอเอกสารเกิน 2 ฉบับ ต่อวัน | มีคำขอลาที่เริ่มในวันเดียวกันครบ 2 ฉบับแล้ว | ตรวจสอบคำขอเดิม |
Notes
Use Cases
- พนักงานยื่นคำขอลา - สร้างคำขอผ่าน Self-service
- HR สร้างคำขอแทน - สร้างคำขอให้พนักงานที่ไม่มี access
- Import ข้อมูลจากระบบภายนอก - นำเข้าข้อมูลการลาจากระบบอื่น
Time Format
effective_hourและexpire_hourใช้รูปแบบYYYY-MM-DD HH:MM:SS- ตัวอย่าง:
2026-01-15 08:00:00
File Attachment
- ส่งไฟล์แนบเป็น Base64 encoded string ใน
image_contentแนะนำให้มี prefix ระบุชนิดไฟล์ เช่นdata:image/jpeg;base64,...หากไม่มี prefix ระบบจะระบุชนิดไฟล์จากเนื้อหาไฟล์ - เมื่อแนบไฟล์สำเร็จ response จะคืน
image_urlเป็น URL ของไฟล์แนบ
Message Language
- ข้อความสำเร็จและข้อความภาษาไทยในตาราง Error Handling จะเป็นภาษาอังกฤษเมื่อส่ง
language_code=EN - ข้อความ validation (
errors) และEmployee not foundเป็นภาษาอังกฤษเสมอ
Related APIs
- Get Leave Types - ดึงรายการประเภทการลา
- Get Leave List - ดึงรายการคำขอลา
- Update Leave - แก้ไขคำขอลา
- Delete Leave - ลบคำขอลา
Last updated on