Get Adjust List
ดึงรายการเอกสารขอเพิ่มเวลาทำงานตามเงื่อนไขที่กำหนด รองรับ 3 โหมดการทำงาน พร้อม filter และ pagination
ใช้ API นี้เพื่อดึงรายการเอกสารขอเพิ่มเวลา ติดตามสถานะการอนุมัติ หรือสร้างรายงานสรุป รองรับ 3 โหมด: self (เอกสารของพนักงานคนเดียว), hr (มุมมอง Manager/HR/Admin), lasted (เอกสารล่าสุด)
Endpoint
GET /api/v1/open-apis/time-adjust/get-listสิทธิ์ที่ต้องการ: API Key ต้องมีสิทธิ์ ข้อมูลการยื่นเอกสาร (document:manage)
Request Parameters
ทุก parameter ไม่บังคับ ส่งเป็น query string
Optional Parameters (General)
| Parameter | Type | Default | Description | Example |
|---|---|---|---|---|
mode | string | self | โหมดการทำงาน: self, hr, lasted | self |
employee_code | string | - | รหัสพนักงาน — โหมด self = พนักงานที่ต้องการดูเอกสาร, โหมด hr = กรองเฉพาะพนักงานคนนี้ | EMP001 |
authorize_id | string | - | ID ผู้ใช้ของผู้ทำรายการ (Base64) — ใช้ระบุพนักงานในโหมด self เมื่อไม่ส่ง employee_code และใช้คำนวณ authorize_flag และสายการอนุมัติ | MjAyNjA0MzBVU0VSMDAwMDAx |
year | string | - | กรองตามปี (YYYY) | 2026 |
month | string | - | กรองตามเดือน (MM, 01-12) ใช้คู่กับ year | 02 |
start_date | string | - | วันที่เริ่มต้น (YYYY-MM-DD) ต้องใช้คู่กับ end_date | 2026-01-01 |
end_date | string | - | วันที่สิ้นสุด (YYYY-MM-DD) ต้องใช้คู่กับ start_date | 2026-01-31 |
approve_flag | string | - | กรองตามสถานะการอนุมัติ (01-08 ดูตารางด้านล่าง) | 01 |
time_adjust_flag_lv | string | - | กรองตามประเภทเอกสาร (ดู Get Adjust Types) | 01 |
language_code | string | TH | ภาษาของข้อมูลใน response เช่น header, detail, status และชื่อพนักงาน (TH หรือ EN) | TH |
_PAGE | integer | 1 | หน้าที่ต้องการ — ต้องส่งค่านี้จึงจะมี _PAGINATION ใน response | 1 |
_NUMBER_PER_PAGE | integer | ทั้งหมด | จำนวนรายการต่อหน้า (1-1000) หากไม่ส่งจะคืนทุกรายการ | 20 |
โหมด self ต้องส่ง employee_code หรือ authorize_id ของผู้ใช้ที่ผูกกับพนักงานอย่างใดอย่างหนึ่ง มิฉะนั้นจะได้ HTTP 400
ลำดับการกรองตามวันที่ (กรองจาก time_adjust_dt):
- ส่ง
start_date+end_dateจะใช้ช่วงวันที่นี้ก่อน - ส่ง
year+monthจะกรองตามช่วงวันที่ของงวดเงินเดือนของเดือนนั้น (หากไม่พบงวด จะกรองตามเดือนปฏิทิน) - ส่ง
yearอย่างเดียวจะกรองตามปีปฏิทิน ส่วนmonthที่ไม่มีyearจะไม่ถูกนำมากรอง
Optional Parameters (HR Mode Only)
| Parameter | Type | Default | Description | Example |
|---|---|---|---|---|
keyword | string | - | ค้นหาจากชื่อ นามสกุล (ไทย/อังกฤษ) ชื่อเล่น หรือรหัสพนักงาน | สมชาย |
company_id | string | - | กรองตามบริษัท (Base64) | MjAyNTExMjdENDU3M0M0MjE2Mzk= |
branch_id | string | - | กรองตามสาขา (Base64) | MjAyNTExMjdENDU3M0M0MjE2Mzk= |
department_id | string | - | กรองตามแผนก (Base64) | MjAyNTExMjdENDU3M0M0MjE2Mzk= |
company_lists | array | - | กรองตามบริษัท (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
branch_lists | array | - | กรองตามสาขา (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
department_lists | array | - | กรองตามแผนก (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
division_lists | array | - | กรองตามส่วนงาน (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
section_lists | array | - | กรองตามฝ่าย (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
section_lists_lv01 - section_lists_lv05 | array | - | กรองตามระดับสังกัดย่อย 1-5 (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
position_lists | array | - | กรองตามตำแหน่ง (array ของ object { "id": "<Base64>" }) | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
employee_lists | array | - | กรองตามพนักงาน (array ของ object { "id": "<employee_id Base64>" }) เมื่อส่งคู่กับ authorize_line จะใช้รายการนี้แทนการคำนวณสายการอนุมัติ | [{"id": "MjAyNTExMjdENDU3M0M0MjE2Mzk="}] |
authorize_line | string | - | ส่ง true เพื่อกรองเฉพาะเอกสารของพนักงานในสายการอนุมัติของผู้ใช้ตาม authorize_id (รวมเอกสารของผู้ใช้เอง) ไม่ส่งหรือส่ง false = ไม่กรอง | true |
sort_by | string | time_adjust_dt | field ที่ใช้เรียงลำดับ เช่น time_adjust_dt, created, employee_code | time_adjust_dt |
sort_order | string | DESC | ทิศทางการเรียง (ASC, DESC) ดูหมายเหตุใน Sorting | DESC |
- ตัวกรองสาขา แผนก ส่วนงาน ฝ่าย และระดับสังกัดย่อย (
branch_id,branch_lists,department_id,department_lists,division_lists,section_lists,section_lists_lv01-lv05) จะรวมกันแบบ OR ส่วนตัวกรองบริษัทและตำแหน่งจะกรองเพิ่มแบบ AND idใน parameter แบบ*_listsต้องเข้ารหัส Base64 เช่นเดียวกับ parameter ระดับบนสุด- ส่ง array ใน query string ในรูปแบบ
company_lists[0][id]=MjAyNTExMjdENDU3M0M0MjE2Mzk=
Approve Flag Values
| Value | Status | Description |
|---|---|---|
01 | Pending | รออนุมัติ |
02 | Approved | อนุมัติแล้ว |
03 | Not Approved | ไม่อนุมัติ |
04 | Manager Approved Step 1 | หัวหน้าอนุมัติขั้นที่ 1 แล้ว รอขั้นถัดไป |
05 | Recheck | ส่งกลับตรวจสอบอีกครั้ง |
06 | Manager Approved Step 2 | หัวหน้าอนุมัติขั้นที่ 2 แล้ว รอขั้นถัดไป |
07 | Manager Approved Step 3 | หัวหน้าอนุมัติขั้นที่ 3 แล้ว รอขั้นถัดไป |
08 | Manager Approved Step 4 | หัวหน้าอนุมัติขั้นที่ 4 แล้ว รอขั้นถัดไป |
- กรองด้วย
approve_flag=01จะรวมสถานะ01,04,05,06,07,08(รออนุมัติทุกระดับ รวมเอกสารที่ส่งกลับตรวจสอบอีกครั้ง) - กรองด้วย
approve_flag=04จะรวมสถานะ04-08 - ค่าอื่นจะกรองตามสถานะนั้นตรง ๆ
- ใน response ค่า
approve_flagที่เป็น04-08จะแสดงเป็น01ส่วนstatusแสดงชื่อสถานะจริงของเอกสาร
Time Adjust Flag Values
รหัสและชื่อประเภทเอกสาร (time_adjust_flag_lv) กำหนดโดยแต่ละองค์กร ดูรายการที่ใช้ได้จาก Get Adjust Types
Example Request
Mode: self - ดูเอกสารของพนักงาน
GET /api/v1/open-apis/time-adjust/get-list?mode=self&employee_code=EMP001&year=2026&approve_flag=01Mode: hr - มุมมอง HR/Manager
GET /api/v1/open-apis/time-adjust/get-list?mode=hr&year=2026&month=02&approve_flag=01&department_id=MjAyNTExMjdENDU3M0M0MjE2Mzk=&sort_by=time_adjust_dt&sort_order=DESC&_PAGE=1&_NUMBER_PER_PAGE=20Mode: lasted - เอกสารล่าสุด
GET /api/v1/open-apis/time-adjust/get-list?mode=lastedResponse Format
Success Response - Mode: self / lasted (HTTP 200)
Response จะเป็น flat array ของเอกสาร:
{
"code": 200,
"message": "สำเร็จ",
"payload": [
{
"doc_type": "Time_Adjust",
"doc_id": "20251127D4573C421639",
"employee_id": "20251127D4573C421639",
"work_date": "2026-02-12",
"time_adjust_dt": "2026-02-12",
"header": "สมชาย ใจดี (ชาย) ยื่นขอ \"ลืมลงเวลา\"",
"detail": "ขอวันที่ 12/02/2026 เวลา 09:00,18:00\nหมายเหตุ : ลืมลงเวลาเนื่องจากประชุม\n",
"status": "รออนุมัติ",
"approve_flag": "01",
"approve_by": "สมหญิง มากมาย",
"approve_remark": "",
"last_upd": "2026-02-12 17:26:49",
"last_upd_format": "12/02/2026 17:26",
"created": "2026-02-12 17:26:49",
"created_format": "12/02/2026 17:26",
"image_url": "https://cdn.humansoft.co.th/.../image/a1B2c3D4e5F6.png",
"authorize_flag": true
}
],
"_PAGINATION": {
"_TOTAL_RECORDS": 1,
"_PAGE": 1,
"_NUMBER_PER_PAGE": 20
}
}_PAGINATION จะมีเฉพาะเมื่อส่ง _PAGE มาใน request
Success Response - Mode: hr (HTTP 200)
Response จะจัดกลุ่มตามพนักงาน พร้อมข้อมูลโปรไฟล์:
{
"code": 200,
"message": "สำเร็จ",
"payload": [
{
"profile": {
"employee_id": "20251127D4573C421639",
"employee_code": "EMP001",
"photograph": "https://cdn.humansoft.co.th/.../images/userPlaceHolder.png",
"employee_name": "สมชาย",
"employee_last_name": "ใจดี",
"employee_nickname": "ชาย",
"position_name": "พนักงาน",
"department_name": "แผนกขาย",
"division_name": "ส่วนงานขาย",
"section_name": "",
"branch_name": "สำนักงานใหญ่",
"count_docs": 1
},
"docs": {
"time_adjust": [
{
"doc_type": "Time_Adjust",
"doc_id": "20251127D4573C421639",
"employee_id": "20251127D4573C421639",
"work_date": "2026-02-25",
"time_adjust_dt": "2026-02-25",
"header": "สมชาย ใจดี (ชาย) ยื่นขอ \"ลืมลงเวลา\"",
"detail": "ขอวันที่ 25/02/2026 เวลา 08:00\nหมายเหตุ : ลืมรูดบัตรเข้างาน\n",
"status": "รออนุมัติ",
"approve_flag": "01",
"approve_by": "สมหญิง มากมาย",
"approve_remark": "",
"last_upd": "2026-02-25 11:50:51",
"last_upd_format": "25/02/2026 11:50",
"created": "2026-02-25 11:36:06",
"created_format": "25/02/2026 11:36",
"image_url": null,
"authorize_flag": true,
"is_approve_method_match": true
}
]
}
}
],
"_PAGINATION": {
"_TOTAL_RECORDS": 1,
"_PAGE": 1,
"_NUMBER_PER_PAGE": 20
}
}Success Response - No Data (HTTP 200)
{
"code": 200,
"message": "สำเร็จ",
"payload": []
}Error Response - Validation Failed (HTTP 422)
{
"code": 422,
"message": "Validation failed / การตรวจสอบล้มเหลว",
"errors": [
"'mode' must be one of: hr, self, lasted",
"'year' must be a 4-digit year (YYYY)"
]
}Error Response (HTTP 400)
{
"code": 400,
"message": "ไม่สำเร็จ / Failed",
"error": "Employee not found: EMP999"
}Response Fields
Mode: self / lasted
| Field | Type | Description |
|---|---|---|
doc_type | string | ประเภทเอกสาร (Time_Adjust) |
doc_id | string | รหัสเอกสาร (time_adjust_id) — ต้องเข้ารหัส Base64 ก่อนส่งให้ API อื่น |
employee_id | string | ID ของพนักงาน |
work_date | string | วันที่เอกสาร (เท่ากับ time_adjust_dt) |
time_adjust_dt | string | วันที่เอกสารขอปรับเวลา (YYYY-MM-DD) |
header | string | หัวข้อเอกสาร (ชื่อพนักงานและประเภทเอกสาร ตามภาษา) |
detail | string | รายละเอียดเอกสาร (วันที่ เวลาที่ขอ และหมายเหตุ ตามภาษา) |
status | string | ชื่อสถานะการอนุมัติตามสถานะจริงของเอกสาร ตามภาษา |
approve_flag | string | รหัสสถานะการอนุมัติ (04-08 จะแสดงเป็น 01) |
approve_by | string | ชื่อผู้ใช้ที่บันทึกเป็นผู้ดำเนินการล่าสุดของเอกสาร — ผ่าน Open API คือผู้ใช้ตาม authorize_id ที่ส่งตอนยื่น แก้ไข หรืออนุมัติ (ค่าว่างหากไม่มี) |
approve_remark | string | หมายเหตุการอนุมัติ (ค่าว่างหากไม่มี) |
last_upd | string | วันเวลาอัปเดตล่าสุด (YYYY-MM-DD HH:mm:ss) |
last_upd_format | string | วันเวลาอัปเดตล่าสุด (DD/MM/YYYY HH:mm) |
created | string | วันเวลาที่สร้าง (YYYY-MM-DD HH:mm:ss) |
created_format | string | วันเวลาที่สร้าง (DD/MM/YYYY HH:mm) |
image_url | string | null | URL ของไฟล์แนบ, null หากไม่มีไฟล์แนบ |
authorize_flag | boolean | ผู้ใช้ตาม authorize_id มีสิทธิ์อนุมัติเอกสารนี้หรือไม่ (เป็น true เสมอหากผู้เรียก API มีสิทธิ์ HR) |
Mode: hr - Document Fields
เอกสารใน docs.time_adjust มี field เหมือนโหมด self / lasted และมีเพิ่มเติมดังนี้
| Field | Type | Description |
|---|---|---|
authorize_flag | boolean | เป็น true เสมอในโหมด hr เพราะแสดงเฉพาะเอกสารของพนักงานที่ผ่านการตรวจสิทธิ์ (ตรวจต่อพนักงาน ไม่ใช่ต่อเอกสาร ดู Business Rules) |
is_approve_method_match | boolean | วิธีอนุมัติของเอกสาร (ตามบุคคล/ตามตำแหน่ง) ตรงกับการตั้งค่าปัจจุบันขององค์กรหรือไม่ |
Mode: hr - Profile Fields
| Field | Type | Description |
|---|---|---|
employee_id | string | ID ของพนักงาน |
employee_code | string | รหัสพนักงาน |
photograph | string | URL รูปโปรไฟล์ |
employee_name | string | ชื่อพนักงาน ตามภาษา |
employee_last_name | string | นามสกุล ตามภาษา |
employee_nickname | string | ชื่อเล่น ตามภาษา |
position_name | string | ตำแหน่ง ตามภาษา |
department_name | string | แผนก ตามภาษา |
division_name | string | ส่วนงาน ตามภาษา |
section_name | string | ฝ่าย ตามภาษา |
section_lv01_name - section_lv05_name | string | ชื่อระดับสังกัดย่อย 1-5 ตามภาษา |
branch_name | string | สาขา ตามภาษา |
count_docs | integer | จำนวนเอกสารของพนักงานคนนี้ในผลลัพธ์ |
Mode hr จะจัดกลุ่มเอกสารตามพนักงาน โดยแต่ละรายการจะมี profile (ข้อมูลพนักงาน) และ docs.time_adjust (รายการเอกสาร) การแบ่งหน้าและ _TOTAL_RECORDS ในโหมดนี้นับตามจำนวนพนักงาน ไม่ใช่จำนวนเอกสาร
Code Examples
cURL
curl -X GET "https://openapi.humansoft.co.th/api/v1/open-apis/time-adjust/get-list?mode=self&employee_code=EMP001&year=2026&approve_flag=01&_PAGE=1&_NUMBER_PER_PAGE=20" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY"Validation Rules
| Parameter | Validation | Error Message |
|---|---|---|
mode | ต้องเป็น self, hr, หรือ lasted (ค่าเริ่มต้น self) | 'mode' must be one of: hr, self, lasted |
start_date, end_date | ต้องส่งคู่กัน | Missing required parameter: 'end_date' (when using date range) |
start_date, end_date | รูปแบบ YYYY-MM-DD และเป็นวันที่ที่มีอยู่จริง | 'start_date' must be in format YYYY-MM-DD, 'start_date' is not a valid calendar date |
end_date | ต้อง >= start_date | 'end_date' must be >= 'start_date' |
year | ตัวเลข 4 หลัก (YYYY) | 'year' must be a 4-digit year (YYYY) |
month | 01-12 (2 หลัก) | 'month' must be in format MM (01-12) |
approve_flag | 01-08 | 'approve_flag' must be one of: 01-08 |
_PAGE | ตัวเลขตั้งแต่ 1 ขึ้นไป | '_PAGE' must be a positive number |
_NUMBER_PER_PAGE | ตัวเลข 1-1000 | '_NUMBER_PER_PAGE' must be between 1 and 1000 |
ระบบรวบรวมข้อผิดพลาดทั้งหมดไว้ใน errors โหมด lasted ไม่ตรวจสอบ start_date, end_date, year และ month
Business Rules
- Mode
self- ดึงเอกสารของพนักงานตามemployee_codeหรือพนักงานที่ผูกกับauthorize_id(ถ้าไม่ส่งemployee_code) - Mode
hr- ดึงเอกสารของพนักงานตามตัวกรอง และจัดกลุ่มตามพนักงาน หากผู้เรียก API ไม่มีสิทธิ์ HR จะแสดงเฉพาะเอกสารของพนักงานที่ผู้ใช้ตามauthorize_idมีสิทธิ์อนุมัติ โดยระบบตรวจสิทธิ์ครั้งเดียวต่อพนักงาน (จากเอกสารรายการแรกของพนักงานคนนั้นตามลำดับการเรียง) แล้วใช้ผลเดียวกันกับทุกเอกสารของพนักงานคนนั้น ในองค์กรที่อนุมัติหลายขั้น ให้ตรวจสิทธิ์รายเอกสารจากauthorize_flagของ Get Adjust Detail - Mode
hr+authorize_line- คืนเอกสารได้สูงสุด 100 รายการ โดยเลือกจากวันที่เอกสารเก่าที่สุดก่อน - Mode
lasted- ดึงเอกสารล่าสุดสูงสุด 100 รายการ เรียงตามวันที่สร้างจากใหม่ไปเก่า ไม่ใช้ตัวกรองวันที่ สถานะ ประเภทเอกสาร และไม่แบ่งหน้า - เมื่อกรองด้วย
approve_flag=01ระบบจะรวมสถานะรออนุมัติทุกระดับ (01,04-08) - เอกสารที่ถูกลบแล้วจะไม่แสดงในรายการ
- หากไม่ส่ง
_NUMBER_PER_PAGEจะคืนทุกรายการในหน้าเดียว
Sorting
- โหมด
self: เรียงตามtime_adjust_dtจากวันที่เก่าไปใหม่เสมอ (ไม่ใช้sort_by/sort_order) - โหมด
hr: ค่าเริ่มต้นเรียงตามtime_adjust_dtจากวันที่เก่าไปใหม่
ในโหมด hr เมื่อเรียงตาม time_adjust_dt (ค่าเริ่มต้น) ผลการเรียงจะกลับด้านกับ sort_order — ไม่ส่งหรือส่ง DESC จะได้วันที่เก่าไปใหม่ ส่วน ASC จะได้วันที่ใหม่ไปเก่า การเรียงตาม field อื่นเป็นไปตาม sort_order ตามปกติ
Error Handling
| Error | Cause | Solution |
|---|---|---|
'mode' must be one of: hr, self, lasted | ค่า mode ไม่ถูกต้อง | ระบุ mode เป็น self, hr, หรือ lasted |
'year' must be a 4-digit year (YYYY) | รูปแบบปีไม่ถูกต้อง | ใช้รูปแบบ YYYY เช่น 2026 |
'approve_flag' must be one of: 01-08 | ค่า approve_flag ไม่ถูกต้อง | ใช้ค่า 01-08 |
Missing required parameter: 'end_date' (when using date range) | ระบุ start_date หรือ end_date เพียงตัวเดียว | ต้องระบุทั้ง start_date และ end_date |
'end_date' must be >= 'start_date' | end_date น้อยกว่า start_date | ตรวจสอบช่วงวันที่ |
Employee not found: XXX (HTTP 400) | ไม่พบพนักงาน | ตรวจสอบ employee_code ที่ส่ง |
Employee identification (employee_code or login context) is required in self mode (HTTP 400) | โหมด self ไม่ได้ส่ง employee_code และไม่มีพนักงานที่ผูกกับ authorize_id | ส่ง employee_code หรือ authorize_id |
Unauthorized | API Key ไม่ถูกต้องหรือหมดอายุ | ตรวจสอบ Ocp-Apim-Subscription-Key |
Notes
- Mode
hrรองรับการกรองขั้นสูง เช่น กรองตามบริษัท สาขา แผนก ส่วนงาน ฝ่าย และตำแหน่ง โดยใช้ array ของ object{ "id": "<Base64>" } authorize_idใช้ระบุผู้ใช้สำหรับโหมดself,authorize_flagและauthorize_line- Response ของ mode
self/lastedเป็น flat array ส่วน modehrจะจัดกลุ่มตามพนักงาน
Use Cases
- แสดงรายการรออนุมัติของพนักงาน - ใช้
mode=selfกับemployee_codeและapprove_flag=01 - HR ดูรายการทั้งหมด - ใช้
mode=hrกับ filter ตามแผนกหรือสาขา - ดูเอกสารล่าสุด - ใช้
mode=lastedสำหรับดูรายการล่าสุดโดยไม่ต้องระบุวันที่ - กรองตามประเภท - ใช้
time_adjust_flag_lvเพื่อกรองเฉพาะประเภทเอกสาร - รายงานประจำเดือน - ใช้
monthและyearเพื่อกรองตามงวดเงินเดือนของเดือนนั้น
Related APIs
- Time Adjust Overview - ภาพรวมโมดูลขอเพิ่มเวลาทำงาน
- Get Adjust Types - ดึงรายการประเภทการขอเพิ่มเวลา
- Get Adjust Detail - ดึงรายละเอียดเอกสารรายการเดียว
- Submit Adjust - ยื่นเอกสารขอเพิ่มเวลาใหม่