Skip to Content
🚀 Welcome to Humansoft Open API Documentation

Update Employee Loan

แก้ไขข้อมูลเงินกู้/ภาระหนี้สินของพนักงาน พร้อมปรับปรุงตารางงวดผ่อน

ใช้ API นี้เพื่อแก้ไขรายละเอียดเงินกู้ที่มีอยู่ และปรับปรุงยอดเงินต้น ดอกเบี้ย หรือยอดชำระของแต่ละงวดผ่อน เหมาะสำหรับแก้ไขข้อผิดพลาดหรือปรับปรุงข้อมูลตามข้อตกลงใหม่ แก้ไขได้เฉพาะเงินกู้ที่ยังใช้งานอยู่ (สถานะ N) เท่านั้น

Endpoint

POST /api/v1/open-apis/employee-loans/update

สิทธิ์ที่ต้องการ: API Key ต้องมีสิทธิ์ ข้อมูลการยื่นเอกสาร (document:manage)

Request Parameters

Required Parameters

ParameterTypeRequiredDescriptionExample
employee_loan_idstringYesรหัสเงินกู้ (Base64)MjAyNjA3MDRBMUIyQzNENEU1RjY=

Optional Parameters

ParameterTypeRequiredDescriptionExample
employee_loan_descstringNoรายละเอียดเงินกู้ (ถ้าไม่ส่งจะไม่เปลี่ยนแปลง)อัพเดตข้อมูลตามข้อตกลงใหม่
periodarrayNoรายการงวดผ่อนที่ต้องการแก้ไข (ดูโครงสร้างด้านล่าง)ดูตัวอย่างด้านล่าง
authorize_idstringNoID ผู้ทำรายการ (Base64) — ถ้าส่งมา ต้องเป็น user ที่มีอยู่จริง มิฉะนั้นได้ 422MjAyNjA3MDRVU0VSMDAwMDAx

ยอดสัญญาถูกล็อกหลังสร้างเงินกู้update แก้ได้เฉพาะ employee_loan_desc และ period[] เท่านั้น ห้ามส่งฟิลด์ยอดสัญญา (employee_loan_amt, employee_loan_total, employee_loan_down, employee_loan_pay_period, employee_loan_interest) มาในคำขอ มิฉะนั้นจะได้รับ HTTP 422

หา authorize_id ได้อย่างไร: รับค่าจาก Get Employee Data Filter โดยใช้ path_action=get-user พร้อม employee_code ของผู้ทำรายการ — ใช้ค่า user_id ที่ได้กลับมาเป็น authorize_id

period Structure

แต่ละรายการใน period ต้องมีครบทั้ง 5 ฟิลด์ต่อไปนี้ โดย employee_loan_period_id ต้องเข้ารหัส Base64 ส่วนฟิลด์ยอดเงิน (employee_loan_period_principle, employee_loan_period_interest, employee_loan_period_amt) ต้องเป็นตัวเลข ≥ 0

FieldTypeRequiredDescriptionExample
employee_loan_period_idstringYesรหัสงวดผ่อนที่ต้องการแก้ไข (Base64)MjAyNjA3MDRBQUFBMTExMTIyMjI=
employee_loan_period_principlenumberYesเงินต้นของงวด (≥ 0)1000
employee_loan_period_interestnumberYesดอกเบี้ยของงวด (≥ 0)10
employee_loan_period_amtnumberYesยอดชำระของงวด (≥ 0)1010
employee_loan_period_monthstringYesเดือนของงวด (YYYY-MM)2026-07

รหัสงวดผ่อน (employee_loan_period_id) ที่จะนำมาแก้ไขดูได้จาก Get Employee Loan Detail ในฟิลด์ loan[].period[].employee_loan_period_id แล้วเข้ารหัส Base64 ก่อนส่ง โดยต้องเป็นงวดของ employee_loan_id นี้เท่านั้น

Request Body Example

{ "employee_loan_id": "MjAyNjA3MDRBMUIyQzNENEU1RjY=", "employee_loan_desc": "อัพเดตข้อมูลตามข้อตกลงใหม่", "period": [ { "employee_loan_period_id": "MjAyNjA3MDRBQUFBMTExMTIyMjI=", "employee_loan_period_principle": 1000, "employee_loan_period_interest": 10, "employee_loan_period_amt": 1010, "employee_loan_period_month": "2026-07" }, { "employee_loan_period_id": "MjAyNjA4MDRCQkJCMzMzMzQ0NDQ=", "employee_loan_period_principle": 990, "employee_loan_period_interest": 0, "employee_loan_period_amt": 990, "employee_loan_period_month": "2026-08" } ] }

ตัวอย่างข้างต้นแสดงโครงสร้างคำขอ — คำขอจริงต้องส่ง period[] ครบทุกงวดของเงินกู้ และผลรวมเงินต้น (employee_loan_period_principle) ของทุกงวดต้องเท่ากับเงินต้นของสัญญา ผลรวมดอกเบี้ย (employee_loan_period_interest) ต้องเท่ากับดอกเบี้ยของสัญญา (การแก้ไขงวดคือการกระจายยอดใหม่ ห้ามเปลี่ยนยอดรวม) มิฉะนั้นจะได้รับ HTTP 422 (ดู Validation Rules)

Response Format

Success Response (HTTP 200)

payload เป็น array ที่มีโครงสร้างเดียวกับ Get Employee Loan Detail (ระบบดึงข้อมูลเงินกู้ล่าสุดกลับมาหลังอัปเดตสำเร็จ) แต่ละรายการประกอบด้วย profile (ข้อมูลพนักงาน) และ loan[] (ข้อมูลเงินกู้ที่อัปเดตแล้ว พร้อม period[] ตารางงวดผ่อนล่าสุดทั้งหมด)

{ "code": 200, "message": "แก้ไขข้อมูลเงินกู้สำเร็จ", "payload": [ { "profile": { "employee_id": "20260704112233AABBCC", "employee_code": "EMP001", "employee_name": "สมชาย", "employee_last_name": "ใจดี", "employee_nickname": "ชาย", "branch_name": "สำนักงานใหญ่", "department_name": "ฝ่ายบุคคล", "division_name": "งานบริหารบุคคล", "section_name": "งานสวัสดิการ", "position_name": "เจ้าหน้าที่บุคคล" }, "loan": [ { "employee_loan_id": "20260704A1B2C3D4E5F6", "salary_type_id": "MjAyNjAzMTY2RTZCQzg3NjQ4MDI=", "salary_type_name": "เงินกู้ยืมพนักงาน", "salary_type_name_en": "Employee Loan", "employee_loan_dt": "2026-07-04", "employee_loan_start": "2026-07", "employee_loan_type_lv": "01", "employee_loan_total": 10000, "employee_loan_down": 100, "employee_loan_amt": 9900, "employee_loan_interest": 0, "employee_loan_interest_type": "0", "employee_loan_amt_principle": 9900, "employee_loan_amt_interest": 10, "employee_loan_amt_period": 2000, "employee_loan_period": 10, "employee_loan_pay_period": 990, "employee_loan_desc": "อัพเดตข้อมูลตามข้อตกลงใหม่", "employee_loan_status": "N", "employee_loan_status_update": null, "employee_loan_status_remark": null, "period": [ { "employee_loan_period_id": "20260704AAAA11112222", "employee_loan_period_month": "2026-07", "employee_loan_period_seq": 1, "employee_loan_period_principle": 1000, "employee_loan_period_interest": 10, "employee_loan_period_amt": 1010, "employee_loan_period_status": "N" }, { "employee_loan_period_id": "20260804BBBB33334444", "employee_loan_period_month": "2026-08", "employee_loan_period_seq": 2, "employee_loan_period_principle": 990, "employee_loan_period_interest": 0, "employee_loan_period_amt": 990, "employee_loan_period_status": "N" } ] } ] } ] }

ตัวอย่างข้างต้นแสดง period[] เพียง 2 งวดเพื่อความกระชับ — response จริงจะคืนงวดผ่อนครบทุกงวดของเงินกู้ (ตามจำนวนใน employee_loan_period)

salary_type_id ใน response ถูกเข้ารหัส Base64 มาแล้ว สามารถนำไปส่งกลับเป็นพารามิเตอร์ salary_type_id ได้โดยตรง ส่วน employee_id, employee_loan_id และ employee_loan_period_id ใน response เป็น Plain text

Error Response - Forbidden (HTTP 403)

{ "code": 403, "message": "Forbidden: Insufficient permissions", "error": { "type": "PERMISSION_DENIED" } }

สาเหตุ: API Key ไม่มีสิทธิ์ document:manage

Error Response - Validation Failed (HTTP 422)

{ "code": 422, "message": "การตรวจสอบข้อมูลล้มเหลว", "errors": [ "'employee_loan_id' is required" ] }

สาเหตุ: ไม่ได้ส่ง employee_loan_id, หรือ authorize_id ที่ส่งมาไม่ถูกต้อง/ไม่มีในระบบ

Error Response - Period Does Not Belong To This Loan (HTTP 422)

{ "code": 422, "message": "การตรวจสอบข้อมูลล้มเหลว", "errors": [ "one or more 'employee_loan_period_id' do not belong to this loan" ] }

สาเหตุ: มี period[].employee_loan_period_id อย่างน้อยหนึ่งรายการที่ไม่ใช่งวดของ employee_loan_id นี้ ระบบจะตรวจสอบก่อนบันทึกข้อมูล จึงไม่มีการเปลี่ยนแปลงใด ๆ เมื่อเกิดกรณีนี้

Error Response - Invalid Period Fields (HTTP 422)

{ "code": 422, "message": "การตรวจสอบข้อมูลล้มเหลว", "errors": [ "'employee_loan_period_amt' is required in period[0]", "'employee_loan_period_interest' must be numeric and >= 0 in period[0]" ] }

สาเหตุ: period[] ที่ส่งมาขาดฟิลด์ที่จำเป็นอย่างน้อยหนึ่งฟิลด์ (employee_loan_period_id, employee_loan_period_principle, employee_loan_period_interest, employee_loan_period_amt, employee_loan_period_month) หรือฟิลด์ยอดเงิน (employee_loan_period_principle, employee_loan_period_interest, employee_loan_period_amt) ไม่ใช่ตัวเลข หรือมีค่าน้อยกว่า 0

Error Response - Period Amount / Decimal Invalid (HTTP 422)

{ "code": 422, "message": "การตรวจสอบข้อมูลล้มเหลว", "errors": [ "'employee_loan_period_amt' must have at most 2 decimal places in period[0]", "'employee_loan_period_amt' must equal principle + interest in period[9]" ] }

สาเหตุ: ยอดเงินในงวดมีทศนิยมเกิน 2 ตำแหน่ง หรือ employee_loan_period_amt ไม่เท่ากับ employee_loan_period_principle + employee_loan_period_interest ของงวดนั้น

Error Response - Totals Do Not Reconcile (HTTP 422)

{ "code": 422, "message": "การตรวจสอบข้อมูลล้มเหลว", "errors": [ "sum of employee_loan_period_principle (1,984.00) must equal the loan principal (1,989.00)", "sum of employee_loan_period_interest (458.00) must equal the loan interest (448.00)" ] }

สาเหตุ: ผลรวมเงินต้น/ดอกเบี้ยของทุกงวดที่ส่งมาไม่เท่ากับยอดของสัญญา (เช่น ส่ง period[] มาไม่ครบทุกงวด หรือกระจายยอดผิด) — การแก้ไขงวดต้องรักษายอดรวมเดิมของสัญญาไว้

Error Response - Amount Fields Not Editable (HTTP 422)

{ "code": 422, "message": "การตรวจสอบข้อมูลล้มเหลว", "errors": [ "'employee_loan_amt' cannot be modified via update — loan amounts are fixed; edit period[] only" ] }

สาเหตุ: ส่งฟิลด์ยอดสัญญา (employee_loan_amt, employee_loan_total, employee_loan_down, employee_loan_pay_period, employee_loan_interest) มาในคำขอ — ยอดถูกล็อกหลังสร้างเงินกู้ แก้ได้เฉพาะ employee_loan_desc และ period[]

Error Response - Employee Loan Not Found (HTTP 404)

{ "code": 404, "message": "ไม่พบข้อมูลเงินกู้" }

สาเหตุ: employee_loan_id ที่ส่งมาไม่มีอยู่ในระบบ

Error Response - Cannot Update Closed Or Finished Loan (HTTP 400)

{ "code": 400, "message": "ไม่สามารถแก้ไขเงินกู้ที่ปิดหรือชำระครบแล้ว (แก้ได้เฉพาะสถานะ N)" }

สาเหตุ: เงินกู้มีสถานะ C (Cancel) หรือ Y (Finished) แก้ไขได้เฉพาะเงินกู้ที่มีสถานะ N (Active) เท่านั้น

Response Fields

Profile Fields (payload[].profile)

FieldTypeNullableDescription
employee_idstringNoรหัสพนักงาน (Plain text)
employee_codestringNoรหัสพนักงาน
employee_namestringNoชื่อพนักงาน
employee_last_namestringNoนามสกุลพนักงาน
employee_nicknamestringNoชื่อเล่น
branch_namestringNoสาขา
department_namestringNoแผนก
division_namestringNoฝ่าย
section_namestringNoส่วนงาน
position_namestringNoตำแหน่ง

Loan Fields (payload[].loan[])

FieldTypeNullableDescription
employee_loan_idstringNoรหัสเงินกู้ (Plain text)
salary_type_idstringNoรหัสประเภทเงินหักในสลิป (Base64 — นำไปใช้เป็นพารามิเตอร์ salary_type_id ได้โดยตรง)
salary_type_namestringNoชื่อประเภทเงินหัก
salary_type_name_enstringNoชื่อประเภทเงินหัก (ภาษาอังกฤษ)
employee_loan_dtstringNoวันที่ยื่นกู้ (YYYY-MM-DD)
employee_loan_startstringNoเดือนเริ่มหัก (YYYY-MM)
employee_loan_type_lvstringNoประเภทเงินกู้
employee_loan_totalfloatNoยอดกู้ทั้งหมด
employee_loan_downfloatNoยอดหักครั้งแรก (เงินดาวน์)
employee_loan_amtfloatNoยอดกู้สุทธิ
employee_loan_interestfloatNoยอดดอกเบี้ย
employee_loan_interest_typestringNoประเภทดอกเบี้ย (0 = ต้นลดดอกลด, 1 = คงที่, 2 = ระบุดอกเบี้ยรวม)
employee_loan_amt_principlefloatNoยอดเงินต้นรวม
employee_loan_amt_interestfloatNoผลรวมดอกเบี้ยของงวดที่ส่งมาอัปเดตในคำขอนี้
employee_loan_amt_periodfloatNoผลรวมยอดชำระของงวดที่ส่งมาอัปเดตในคำขอนี้
employee_loan_periodintNoจำนวนงวด
employee_loan_pay_periodfloatNoยอดที่ชำระต่องวด
employee_loan_descstringYesรายละเอียดเงินกู้ (หลังอัปเดต)
employee_loan_statusstringNoสถานะเงินกู้ (N = Active, C = Cancel, Y = Finished)
employee_loan_status_updatestringYesวันเวลาที่เปลี่ยนสถานะล่าสุด
employee_loan_status_remarkstringYesหมายเหตุการเปลี่ยนสถานะ

Period Fields (payload[].loan[].period[])

FieldTypeNullableDescription
employee_loan_period_idstringNoรหัสงวดผ่อน (Plain text)
employee_loan_period_monthstringNoเดือนของงวด (YYYY-MM)
employee_loan_period_seqintNoลำดับงวด
employee_loan_period_principlefloatNoเงินต้นของงวด (หลังอัปเดต)
employee_loan_period_interestfloatNoดอกเบี้ยของงวด (หลังอัปเดต)
employee_loan_period_amtfloatNoยอดชำระของงวด (หลังอัปเดต)
employee_loan_period_statusstringNoสถานะงวด (N = ยังไม่ชำระ, Y = ชำระแล้ว)

Code Examples

curl -X POST "https://openapi.humansoft.co.th/api/v1/open-apis/employee-loans/update" \ -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "employee_loan_id": "MjAyNjA3MDRBMUIyQzNENEU1RjY=", "employee_loan_desc": "อัพเดตข้อมูลตามข้อตกลงใหม่", "period": [ { "employee_loan_period_id": "MjAyNjA3MDRBQUFBMTExMTIyMjI=", "employee_loan_period_principle": 1000, "employee_loan_period_interest": 10, "employee_loan_period_amt": 1010, "employee_loan_period_month": "2026-07" } ] }'

Validation Rules

ParameterValidationError Message
employee_loan_idต้องระบุ และเข้ารหัสเป็น Base64'employee_loan_id' is required
employee_loan_idต้องมีอยู่ในระบบคืน HTTP 404 ไม่พบข้อมูลเงินกู้
period[].employee_loan_period_idต้องเข้ารหัส Base64 และเป็นงวดของ employee_loan_id นี้เท่านั้นone or more 'employee_loan_period_id' do not belong to this loan
period[]แต่ละรายการต้องเป็น object และมีครบทั้ง 5 ฟิลด์'<field>' is required in period[<index>] / period[<index>] must be an object
period[].employee_loan_period_principle / _interest / _amtต้องเป็นตัวเลข ≥ 0 และมีทศนิยมไม่เกิน 2 ตำแหน่ง'<field>' must be numeric and >= 0 in period[<index>] / '<field>' must have at most 2 decimal places in period[<index>]
period[].employee_loan_period_amtต้องเท่ากับ employee_loan_period_principle + employee_loan_period_interest ของงวดนั้น'employee_loan_period_amt' must equal principle + interest in period[<index>]
period[] (totals)ต้องส่งครบทุกงวด — ผลรวมเงินต้นต้องเท่ากับเงินต้นของสัญญา และผลรวมดอกเบี้ยต้องเท่ากับดอกเบี้ยของสัญญาsum of employee_loan_period_principle (...) must equal the loan principal (...) / sum of employee_loan_period_interest (...) must equal the loan interest (...)
ยอดสัญญา (employee_loan_amt, employee_loan_total, employee_loan_down, employee_loan_pay_period, employee_loan_interest)ห้ามส่งมาในคำขอ (ล็อกหลังสร้าง)'<field>' cannot be modified via update — loan amounts are fixed; edit period[] only
Current Statusแก้ไขได้เฉพาะเงินกู้สถานะ N (Active) — C/Y แก้ไม่ได้คืน HTTP 400 ไม่สามารถแก้ไขเงินกู้ที่ปิดหรือชำระครบแล้ว (แก้ได้เฉพาะสถานะ N)
authorize_idoptional — หากส่งมาต้องเป็น user ที่มีอยู่จริง'authorize_id' is invalid or does not exist

Business Rules

ข้อจำกัดการแก้ไขเงินกู้:

  • แก้ไขได้เฉพาะเงินกู้สถานะ N (Active) เท่านั้น — เงินกู้ที่ปิดบัญชี (C) หรือชำระครบแล้ว (Y) จะแก้ไขไม่ได้ และจะได้รับ HTTP 400
  • ยอดสัญญาถูกล็อกหลังสร้างเงินกู้ — แก้ได้เฉพาะ employee_loan_desc และ period[] เท่านั้น หากส่งฟิลด์ยอดสัญญา (employee_loan_amt, employee_loan_total, employee_loan_down, employee_loan_pay_period, employee_loan_interest) มาจะได้รับ 422
  • การแก้ไข period[] เป็นการกระจายยอดใหม่ ไม่ใช่การเปลี่ยนยอดรวม จึงต้องส่ง period[] ครบทุกงวด และผลรวมเงินต้น/ดอกเบี้ยต้องเท่ากับยอดของสัญญาเดิม (แต่ละงวด employee_loan_period_amt ต้องเท่ากับ principle + interest)
  • ทุก employee_loan_period_id ที่ส่งมาต้องเป็นงวดของเงินกู้นี้ และมีฟิลด์ครบถ้วนถูกต้อง ระบบจะตรวจสอบ ก่อน เขียนข้อมูลใด ๆ จึงไม่มีการเปลี่ยนแปลงบางส่วนเมื่อการตรวจสอบไม่ผ่าน (ตอบกลับ 422)
  • ฟิลด์ employee_loan_amt_interest และ employee_loan_amt_period ใน response สะท้อนผลรวมของงวดที่ส่งมาในคำขอนี้ ส่วน period[] ที่คืนกลับมาจะแสดงงวดผ่อนล่าสุดทั้งหมดของเงินกู้

Notes

Use Cases

  1. แก้ไขคำอธิบายเงินกู้ - ส่งเฉพาะ employee_loan_id และ employee_loan_desc โดยไม่ต้องส่ง period
  2. ปรับปรุงตารางงวดผ่อน - ส่ง period[] เพื่อปรับเงินต้น ดอกเบี้ย หรือยอดชำระของแต่ละงวด
  3. ตรวจสอบก่อนแก้ไข - เรียก Get Employee Loan Detail เพื่อดูรหัสงวดผ่อนและยอดปัจจุบันก่อนส่งอัปเดต
  • Get Employee Loan Detail - ตรวจสอบข้อมูลและรหัสงวดผ่อนก่อนแก้ไข
  • Get Employee Loan List - ดึงรายการเงินกู้ของพนักงาน
  • Create Employee Loan - สร้างเงินกู้ใหม่
  • Close Employee Loan - ปิดบัญชีเงินกู้ (หยุดหักเงินเดือน)
  • Re-Activate Employee Loan - เปิดเงินกู้ที่ปิดไปแล้วกลับมาใช้งาน
Last updated on