ข้ามไปเนื้อหาหลัก

รายการบัญชี

อ่านสมุดรายวันทั่วไป และบันทึกรายการปรับปรุงที่ดุลกัน

เอกสารขายและเอกสารซื้อลงบัญชีให้เองอยู่แล้ว คุณไม่จำเป็นต้องใช้ endpoint นี้กับเอกสารเหล่านั้น ให้ใช้เมื่อรายการนั้นไม่มีเอกสารรองรับจริง ๆ เช่น การคิดค่าเสื่อมราคา การตั้งค้างรับค้างจ่าย การแก้ไขรายการ หรือยอดยกมาที่นำเข้าจากระบบเดิม

response ห่อด้วย data

ค้นหารายการ

GET /journal-entries → แบ่งหน้า อยู่ใน data

พารามิเตอร์หมายเหตุ
referenceTypeสิ่งที่สร้างรายการนี้ — MANUAL, GR, PI, PV, … (ไม่เกิน 20 ตัวอักษร)
fromDate / toDateYYYY-MM-DD อ้างอิงวันที่รายการ
page / limitดูการแบ่งหน้า
bash
curl -X GET "$ABSERP_API_URL/openapi/v1/journal-entries?fromDate=2026-09-01&toDate=2026-09-30&limit=100" \
  -H "Authorization: Bearer $ABSERP_API_KEY"

การกรองด้วย referenceType=MANUAL จะได้เฉพาะรายการที่คนบันทึกเอง ซึ่งมักเป็นสิ่งที่รายงานกระทบยอดต้องการ

แถวในรายการอาจไม่มี lines หากต้องการให้เรียกอ่านรายละเอียด

สร้างรายการ

POST /journal-entries → 201 คืนรายการใน data

ต้องระบุ entryDate และ บรรทัดอย่างน้อยสองบรรทัด แต่ละบรรทัดต้องมี accountId

bash
curl -X POST "$ABSERP_API_URL/openapi/v1/journal-entries" \
  -H "Authorization: Bearer $ABSERP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "entryDate": "2026-09-30",
    "description": "ค่าเสื่อมราคาเดือนกันยายน",
    "lines": [
      { "accountId": 63, "debit": 4500, "credit": 0, "description": "ค่าเสื่อมราคา" },
      { "accountId": 18, "debit": 0, "credit": 4500, "description": "ค่าเสื่อมราคาสะสม" }
    ]
  }'
ฟิลด์ชนิดจำเป็นหมายเหตุ
entryDatestringใช่YYYY-MM-DD
descriptionstringไม่ไม่เกิน 255 ตัวอักษร
linesarrayใช่อย่างน้อยสองรายการ
lines[].accountIdintegerใช่จากผังบัญชี
lines[].debitnumberไม่0 หรือมากกว่า
lines[].creditnumberไม่0 หรือมากกว่า
lines[].descriptionstringไม่ไม่เกิน 255 ตัวอักษร

กฎสองข้อที่มักทำให้เกิดข้อผิดพลาด

  1. ยอดเดบิตรวมต้องเท่ากับยอดเครดิตรวม รายการที่ไม่ดุลจะถูกปฏิเสธด้วย errorCode: "JournalEntryImbalanced" และไม่มีการบันทึกใด ๆ ควรรวมยอดทั้งสองด้านก่อนส่ง
  2. หนึ่งบรรทัดคือหนึ่งด้าน ให้ใส่จำนวนเงินใน debit หรือ credit อย่างใดอย่างหนึ่ง และส่ง 0 ให้อีกด้าน บรรทัดที่ใส่ทั้งสองด้านไม่ใช่ทางลัดสำหรับยอดสุทธิ

อีกเรื่องที่ควรทราบ: entryNumber ระบบกำหนดให้ และงวดบัญชีที่ปิดแล้วจะปฏิเสธรายการใหม่ที่ลงวันที่ตรงกับหรือก่อนวันที่ปิดงวดด้วย errorCode: "PeriodLocked" หากคุณบันทึกรายการปรับปรุงสิ้นเดือน ให้ทำก่อนปิดงวด

อ่านรายการรายรายการ

GET /journal-entries/{id} → คืนรายการใน data

json
{
  "success": true,
  "data": {
    "id": 104,
    "entryNumber": "JE-2026-0104",
    "referenceType": "MANUAL",
    "referenceId": null,
    "entryDate": 1759190400,
    "description": "ค่าเสื่อมราคาเดือนกันยายน",
    "totalDebit": 4500,
    "totalCredit": 4500,
    "status": "posted",
    "reversedBy": null,
    "createdBy": 3,
    "createdAt": 1759190400,
    "lines": [
      {
        "id": 301,
        "accountId": 63,
        "accountCode": "5810",
        "accountName": "ค่าเสื่อมราคา",
        "debit": 4500,
        "credit": 0,
        "description": "ค่าเสื่อมราคา"
      },
      {
        "id": 302,
        "accountId": 18,
        "accountCode": "1690",
        "accountName": "ค่าเสื่อมราคาสะสม",
        "debit": 0,
        "credit": 4500,
        "description": "ค่าเสื่อมราคาสะสม"
      }
    ]
  }
}

สังเกตความไม่สมมาตร: คุณ ส่ง entryDate เป็น YYYY-MM-DD แต่ อ่าน กลับมาเป็น Unix seconds และบรรทัดจะมี accountCode กับ accountName เพิ่มมาให้ตอนอ่าน จึงแทบไม่ต้องไปดึงผังบัญชีมาต่อข้อมูลเพื่อแสดงผล

การกลับรายการ

POST /journal-entries/{id}/reverse ไม่เปิดให้ใช้ผ่าน Open API (ใช้ได้ในเว็บแอปเท่านั้น) เพราะการกลับรายการคือการแก้บัญชีที่บันทึกแล้ว จึงให้ตัดสินใจใน ABSERP และรายการที่บันทึกแล้วก็ไม่มีการลบโดยเจตนาเช่นกัน

ผลลัพธ์ยังอ่านได้ รายการที่ถูกกลับแล้วจะมี reversedBy ติดมาตอนอ่าน หากระบบที่เชื่อมต่อต้องการแก้รายการที่ตัวเองบันทึกไว้ ให้บันทึกรายการกลับด้านที่ดุลกันเองผ่าน POST /journal-entries หรือให้ผู้ดูแลบัญชีกลับรายการใน ABSERP

รหัสข้อผิดพลาด

สถานะรหัสสาเหตุ
400BadRequestบรรทัดน้อยกว่าสอง, บรรทัดขาด accountId, จำนวนเงินติดลบ, บรรทัดที่ใส่ทั้ง debit และ credit (หรือไม่ใส่เลย), หรือ accountId ของบรรทัดอยู่นอกองค์กรนี้
400JournalEntryImbalancedยอดเดบิตรวมไม่เท่ากับยอดเครดิตรวม
400PeriodLockedentryDate ตรงกับหรือก่อนงวดบัญชีที่องค์กรปิดไว้แล้ว
404NotFoundไม่พบ :id ในองค์กรนี้

entryDate (หรือ fromDate/toDate ของ endpoint รายการ) ที่แปลงไม่ได้ ปัจจุบันจะได้ 500 InternalError แทนที่จะเป็น 400 BadRequest — ส่งวันที่ในรูปแบบ YYYY-MM-DD ที่ถูกต้องแล้วจะไม่เจอกรณีนี้ แต่อย่าเข้าใจว่า 500 ทุกครั้งที่นี่คือปัญหาฝั่งเซิร์ฟเวอร์เสมอไป

ขั้นตอนถัดไป

อ่านต่อที่ ผังบัญชี