Skip to main content

แก้ไขใบเสร็จแบบแบ่งชำระแบบ Simple

ใช้ endpoint PUT /receipts/{id} เพื่อแก้ไขใบเสร็จรับเงินแบบแบ่งชำระที่สร้างไว้แล้ว โดยรองรับเฉพาะใบเสร็จแบบ Simple ที่มีสถานะ รอดำเนินการ (Awaiting) เท่านั้น

warning

ปัจจุบันรองรับเฉพาะการแก้ไขใบเสร็จแบบ Simple เท่านั้น ใบเสร็จแบบ Inline ยังไม่รองรับการแก้ไขผ่าน OpenAPI


Request field

Required field ระดับเอกสาร

Fieldประเภทคำอธิบาย
contactIdinteger (int64)รหัสผู้ติดต่อ — ต้องตรงกับรหัสผู้ติดต่อของใบกำกับภาษีต้นทาง
isBatchDocumentbooleanต้องเป็น true เสมอ — ระบุว่าเป็นเอกสารแบบแบ่งชำระ
partialPaymentMethodnumberต้องเป็น 11 (RECPartial)
creditTypenumberต้องเป็น 3 (เงินสด) ค่าอื่นไม่รองรับสำหรับใบเสร็จแบบแบ่งชำระ
documentStructureTypestringต้องเป็น "UpdateSimpleDocument"
grandTotaldecimalต้องเท่ากับ partialAmount
documentReferencearrayต้องเป็น null หรือ [] เท่านั้น

Required field ระดับรายการสินค้า

Fieldประเภทคำอธิบาย
documentIdnumberrecordId ของใบกำกับภาษีต้นทาง — ต้องตรงกับ recordId ของใบกำกับภาษีเดิมที่สร้างไว้
documentTypenumberต้องเป็น 7 (ใบกำกับภาษี)
partialAmountdecimalยอดที่ต้องการชำระในงวดนี้ (ต้องมากกว่า 0 และไม่เกินยอดคงเหลือ)

Field เพิ่มเติม (ไม่บังคับ)

ข้อมูลผู้ติดต่อ

Fieldประเภทคำอธิบาย
contactNamestringชื่อผู้ติดต่อ
contactCodestringรหัสลูกค้า
contactAddressstringที่อยู่
contactTaxIdstringเลขประจำตัวผู้เสียภาษี (13 หลัก)
contactBranchstringสาขา
contactPersonstringชื่อผู้ติดต่อ
contactEmailstringอีเมล
contactNumberstringเบอร์โทรศัพท์
contactZipCodestringรหัสไปรษณีย์
contactGroupintegerประเภทผู้ติดต่อ
info

field ข้อมูลผู้ติดต่อ — หากระบุค่ามาจะต้องตรงกับข้อมูลจากใบกำกับภาษีต้นทาง โดยระบบจะดึงค่าจากใบกำกับภาษีให้อัตโนมัติหากไม่ระบุ

ข้อมูลเอกสาร

Fieldประเภทคำอธิบาย
dueDatestring (date)วันครบกำหนด (yyyy-MM-dd)
publishedOnstring (date)วันที่ออกเอกสาร (yyyy-MM-dd)
creditDaysintegerจำนวนวันเครดิต
salesNamestringชื่อพนักงานขาย
referencestringเลขอ้างอิงจากระบบภายนอก
projectNamestringชื่อโครงการ
remarksstringหมายเหตุ
internalNotesstringบันทึกภายใน
externalDocumentIdstringรหัสเอกสารจากระบบภายนอก
showSignatureOrStampbooleanแสดงพื้นที่ลายเซ็น/ตรา

การหักเงิน

Fieldประเภทคำอธิบาย
useReceiptDeductionbooleanใช้การหักเงิน (ค่าเริ่มต้น: false)
documentDeductionTypeintegerประเภทการหักเงิน
documentDeductionAmountnumber (decimal)จำนวนเงินที่หัก

การตรวจสอบยอดเงิน

เมื่อมีการแก้ไขใบเสร็จแบบแบ่งชำระ ระบบจะทำการตรวจสอบว่า จำนวนเงินที่ระบุ (partialAmount) ต้องไม่เกิน ยอดคงเหลือ ของใบกำกับภาษี

หลักการคำนวณยอดคงเหลือ

ยอดคงเหลือ = ยอดรวมของใบกำกับภาษี (INV) − ยอดรวมของใบเสร็จอื่นที่ยังใช้งานอยู่
info

ระบบจะไม่รวมยอดเดิมของใบเสร็จที่กำลังแก้ไข เพื่อให้สามารถปรับแก้จำนวนเงินได้อย่างถูกต้อง

ตัวอย่างการคำนวณ

ใบกำกับภาษีมียอดรวม 321 บาท มีใบเสร็จแบบแบ่งชำระจำนวน 2 ใบ ดังนี้:

  • ใบเสร็จ RE-1: 50 บาท
  • ใบเสร็จ RE-2 (อยู่ระหว่างการแก้ไข): 100 บาท

ผลการคำนวณ

รายการยอด (บาท)
ยอดรวม INV321
หัก RE-1 (ฉบับอื่น)-50
หัก RE-2 (ฉบับที่กำลังแก้ไข)ไม่นับรวม
ยอดคงเหลือ271

ดังนั้น จำนวนเงิน (partialAmount) ที่แก้ไขใหม่ ต้องมีค่าไม่เกิน 271 บาท


ตัวอย่างการแก้ไขใบเสร็จแบบแบ่งชำระ

Scenario ต้องการแก้ไขใบเสร็จ RE2026030079 (ยอดเดิม 100 บาท) จากใบกำกับภาษี INV2026030045 (ยอดรวม 321 บาท) โดยปรับยอดชำระจาก 100 บาท เป็น 50 บาท

Endpoint: PUT /receipts/{id}

tip

field ที่ถูกไฮไลท์ในตัวอย่างข้อมูลที่ส่งและข้อมูลที่ตอบกลับ คือ field ที่เกี่ยวข้องกับการแก้ไขใบเสร็จแบบแบ่งชำระโดยเฉพาะ

ตัวอย่าง Payload แบบย่อ

ตัวอย่าง request แบบระบุเฉพาะ field ที่จำเป็นเท่านั้น

{
"contactId": 76742433,
"isBatchDocument": true,
"partialPaymentMethod": 11,
"creditType": 3,
"documentStructureType": "UpdateSimpleDocument",
"grandTotal": 50,
"items": [
{
"documentId": 84130351,
"documentType": 7,
"partialAmount": 50
}
]
}

ตัวอย่าง Payload แบบเต็ม

ตัวอย่าง request แบบระบุ field ทั้งหมดที่รองรับ สำหรับใช้เป็นแนวทางในการส่งข้อมูล

{
"contactId": 490472,
"contactName": "ContactName",
"contactCode": "",
"contactAddress": "11/12 Example Rd, Silom, Bang Rak, Bangkok",
"contactTaxId": "1234567890123",
"contactBranch": "สำนักงานใหญ่",
"contactPerson": "ExamplePerson",
"contactEmail": "Example@email.com",
"contactNumber": "0876543210",
"contactZipCode": "10500",
"contactGroup": 1,
"publishedOn": "2026-03-12",
"dueDate": "2026-03-12",
"isBatchDocument": true,
"partialPaymentMethod": 11,
"creditType": 3,
"creditDays": 0,
"grandTotal": 50,
"documentStructureType": "UpdateSimpleDocument",
"documentReference": [],
"useReceiptDeduction": true,
"documentDeductionType": 1,
"documentDeductionAmount": 10,
"salesName": "ExampleSalesName",
"reference": "ExampleReference",
"projectName": "ExampleProject",
"remarks": "งวดที่ 2 - ปรับยอดจาก 20 เป็น 50",
"internalNotes": "Updated per customer request",
"externalDocumentId": "test-xxx01",
"showSignatureOrStamp": true,
"items": [
{
"documentId": 9962945,
"documentType": 7,
"partialAmount": 50
}
]
}

Response (200 OK)

แสดงเฉพาะ field ที่เกี่ยวข้องกับใบเสร็จแบบแบ่งชำระ — field อื่นที่ไม่ได้แสดงจะตอบกลับเหมือนใบเสร็จรับเงินปกติ

{
"data": {
"items": [
{
"documentId": 9962945,
"documentType": 7,
"documentSerial": "INV2026030045",
"documentPublishedOn": "2026-03-12T00:00:00",
"documentDuedate": "2026-03-12T00:00:00",
"documentGrandTotal": 321.0,
"documentPaymentAmount": 321.0,
"partialAmount": 50.0
}
],
"status": "1",
"documentType": "9",
"publishedOn": "2026-03-12T00:00:00",
"creditType": "3",
"grandTotal": "50",
"useReceiptDeduction": "true",
"documentDeductionType": "1",
"documentDeductionAmount": "10",
"referencedByMe": [
{
"referenceId": "9962945",
"referenceDocumentType": "7",
"referenceDocumentSerial": "INV2026030045",
"documentId": "66603",
"documentType": "9",
"documentSerial": "RE2026030079",
"type": 11
}
],
"recordId": 66603,
"documentId": 66603,
"documentSerial": "RE2026030079",
"statusString": "awaiting",
"isBatchDocument": true
},
"status": true,
"message": "",
"code": 0
}

การเปลี่ยนสถานะของใบกำกับภาษีต้นทาง (INV) หลังแก้ไข

หลังจากแก้ไขใบเสร็จแบบแบ่งชำระสำเร็จ ระบบจะคำนวณยอดรวมทั้งหมดของใบเสร็จรับเงินที่ใช้งานอยู่ใหม่ และอัปเดตสถานะของใบกำกับภาษีต้นทางโดยอัตโนมัติ

เงื่อนไขผลลัพธ์ต่อ INV
ยอดรวม RE ทั้งหมด < grandTotal ของ INVINV ยังคงสถานะ แบ่งจ่าย (status=11)
ยอดรวม RE ทั้งหมด = grandTotal ของ INVINV เปลี่ยนสถานะเป็น เปิดใบเสร็จแล้ว (status=9)