Skip to main content

จัดการใบกำกับภาษีซื้อ (CRUD)

สร้าง แก้ไข ดึงข้อมูล และลบใบกำกับภาษีซื้อที่แนบกับเอกสารค่าใช้จ่าย (Expense) หรือเอกสารใบรับสินค้า (Purchase)

Endpoints

MethodEndpointคำอธิบาย
POST/{documentType}/{id}/supplier-invoiceสร้างใบกำกับภาษีซื้อพร้อมแนบไฟล์ (Base64)
PUT/{documentType}/{id}/supplier-invoiceแก้ไขใบกำกับภาษีซื้อ (Full Replacement)
GET/{documentType}/{id}/supplier-invoiceดึงข้อมูลใบกำกับภาษีซื้อของเอกสาร
DELETE/{documentType}/{id}/supplier-invoiceลบใบกำกับภาษีซื้อออกจากเอกสาร
info
  • {documentType}: รองรับเฉพาะ expenses และ purchases เท่านั้น
  • {id}: recordId ของเอกสารที่ต้องการแนบใบกำกับภาษีซื้อ

Request Body (POST / PUT ใช้ร่วมกัน)

Required field

Fieldประเภทคำอธิบาย
documentSerialstringเลขที่ใบกำกับภาษีซื้อ
contactNamestringชื่อผู้จำหน่าย
contactBranchstringสาขาของผู้จำหน่าย

Field เพิ่มเติม

Fieldประเภทคำอธิบาย
documentDatestring (date)วันที่ใบกำกับภาษีซื้อ (yyyy-MM-dd) หากไม่ระบุ จะใช้ค่า วันที่ออกเอกสารต้นทาง
contactTaxIdstringเลขผู้เสียภาษีของผู้จำหน่าย บังคับสำหรับ P.P.30 (ต้องเป็น 13 หลัก), ไม่บังคับสำหรับ P.P.36
taxFormnumberแบบแสดงภาษี 1 = P.P.30 (ค่าเริ่มต้น), 3 = P.P.36
vatableAmountdecimalมูลค่าก่อน VAT บังคับเมื่อ taxForm = 3 (P.P.36) ต้อง > 0
vatAmountdecimalมูลค่า VAT บังคับเมื่อ taxForm = 3 (P.P.36) ต้อง > 0
fileobjectไฟล์แนบ Base64 (สูงสุด 1 ไฟล์) ดูข้อจำกัดของไฟล์แนบ
info

เมื่อ taxForm = 1 (P.P.30) ระบบจะใช้ค่า vatableAmount และ vatAmount จากเอกสารต้นทางโดยอัตโนมัติ โดยไม่สนใจค่าที่ส่งเข้ามา

โครงสร้าง field file

Fieldประเภทคำอธิบาย
file.fileNamestringชื่อไฟล์พร้อมนามสกุล เช่น invoice.pdf
file.base64Datastringเนื้อหาไฟล์ในรูปแบบ Base64

POST สร้างใบกำกับภาษีซื้อ

ใช้ endpoint POST /{documentType}/{id}/supplier-invoice เพื่อแนบใบกำกับภาษีซื้อเข้ากับเอกสารที่มีอยู่แล้ว

เงื่อนไขของเอกสารต้นทาง

เงื่อนไขผลลัพธ์เมื่อไม่ผ่าน
เอกสารต้องมีอยู่ในระบบและอยู่ในบริษัทเดียวกัน404: Document not found (code 190000)
เอกสารต้องไม่ถูกลบ404: Document not found (code 190000)
เอกสารต้องไม่ถูกยกเลิก (Void)400: Document is voided (code 70020)
เอกสารต้องไม่อยู่ในแบบยื่นภาษี (Batch Tax Filing)400: Document is locked in batch tax filing (code 70005)
supplierInvoiceStatus ต้องเป็น Awaiting (1) หรือ NoRefund (7)400: Supplier invoice already attached (code 70000)

ตัวอย่าง

Endpoint: POST /expenses/12345/supplier-invoice

Payload แบบระบุเฉพาะ field ที่จำเป็น (P.P.30)

{
"documentSerial": "INV-2026-00001",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"contactBranch": "สำนักงานใหญ่",
"contactTaxId": "0107536000756"
}

Payload แบบเต็ม (พร้อมไฟล์แนบ)

{
"documentDate": "2026-03-20",
"documentSerial": "INV-2026-00001",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"contactTaxId": "0107536000756",
"contactBranch": "สำนักงานใหญ่",
"taxForm": 1,
"vatableAmount": 5000.00,
"vatAmount": 350.00,
"file": {
"fileName": "invoice.pdf",
"base64Data": "JVBERi0xLjQK..."
}
}

Payload สำหรับ P.P.36

{
"documentDate": "2026-03-20",
"documentSerial": "INV-2026-00001",
"contactName": "Foreign Vendor Co., Ltd.",
"contactBranch": "Head Office",
"taxForm": 3,
"vatableAmount": 10000.00,
"vatAmount": 700.00
}

Response (200 OK)

{
"code": 0,
"status": true,
"message": "",
"data": {
"id": 11223,
"documentDate": "2026-03-20T00:00:00",
"documentSerial": "INV-2026-00001",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"contactTaxId": "0107536000756",
"contactBranch": "สำนักงานใหญ่",
"taxForm": 1,
"vatableAmount": 5000.00,
"vatAmount": 350.00,
"supplierInvoiceStatus": 3,
"createdOn": "2026-03-20T10:30:00",
"modifiedOn": "2026-03-20T10:30:00",
"attachments": [
{
"mediaId": 4521,
"fileName": "invoice.pdf",
"mediaType": 2,
"url": "q1bktr2_1234567890_20032026.pdf",
"uploadedOn": "2026-03-20T10:30:01"
}
]
}
}

Response พบใบกำกับภาษีซื้อซ้ำ (409 Conflict)

{
"code": 95013,
"status": false,
"message": "Duplicate supplier invoice detected"
}

Response Validation Error (400)

{
"code": 207450,
"status": false,
"message": "documentSerial is required."
}

ผลลัพธ์หลังสร้างสำเร็จ

  • supplierInvoiceStatus ของเอกสารต้นทางเปลี่ยนเป็น WaitingForRefund (3)
  • กรณี supplierInvoiceStatus เดิมเป็น NoRefund (7) สถานะจะ ไม่ถูกเปลี่ยน คงเป็น NoRefund เหมือนเดิม
  • กรณีเอกสารมีสถานะ Awaiting ระบบจะเปลี่ยนสถานะเอกสารเป็น Approved โดยอัตโนมัติ

PUT แก้ไขใบกำกับภาษีซื้อ

ใช้ endpoint PUT /{documentType}/{id}/supplier-invoice เพื่อแก้ไขใบกำกับภาษีซื้อที่แนบอยู่กับเอกสาร

warning

PUT เป็นการ แทนที่ข้อมูลทั้งหมด (Full Replacement) ไม่ใช่การแก้ไขบางส่วน required fields ทุก field ต้องถูกส่งมาทุกครั้ง

เงื่อนไขของเอกสารต้นทาง

เงื่อนไขผลลัพธ์เมื่อไม่ผ่าน
เอกสารต้องมีอยู่ในระบบและอยู่ในบริษัทเดียวกัน404: Document not found (code 190000)
เอกสารต้องไม่ถูกลบ404: Document not found (code 190000)
เอกสารต้องไม่ถูกยกเลิก (Void)400: Document is voided (code 70020)
เอกสารต้องไม่อยู่ในแบบยื่นภาษี (Batch Tax Filing)400: Document is locked in batch tax filing (code 70005)
ต้องมีใบกำกับภาษีซื้อแนบอยู่แล้ว400: Supplier invoice not found (code 190000)
supplierInvoiceStatus ต้องไม่เป็น WaitingToPayPP36 (11), AwaitingTaxReceipt (13) หรือ CreatedBatchFiling (5)400: Document is locked in batch tax filing (code 70005)

การทำงานของไฟล์แนบ

สถานการณ์ผลลัพธ์
ส่ง file มาใน requestอัปโหลดไฟล์ใหม่
ส่ง file แต่อัปโหลดหรือบันทึกล้มเหลวไฟล์แนบจะไม่เปลี่ยนแปลง โดยถ้าเดิมมีไฟล์ จะยังใช้ไฟล์เก่าอยู่ และระบบจะแจ้งเตือนผ่าน field message
ไม่ส่ง file (null หรือไม่มี field)ถ้ามีไฟล์อยู่แล้ว ไฟล์เก่าจะยัง คงอยู่ ไม่มีการแก้ไข
warning

ในกรณีที่มีการแนบใบกำกับภาษีซื้อพร้อมไฟล์ (file) อาจเกิดเหตุการณ์ที่การอัปโหลดหรือบันทึกไฟล์ ล้มเหลวได้ โดยแม้ว่า ข้อมูลใบกำกับภาษีซื้อจะถูกแก้ไขสำเร็จ แต่ ไฟล์แนบอาจไม่ถูกอัปเดต ทั้งนี้ ระบบจะแจ้งสถานะหรือข้อผิดพลาดผ่านฟิลด์ message สามารถลองส่ง PUT อีกครั้งพร้อมไฟล์เพื่ออัปโหลดใหม่ได้

ตัวอย่าง

Endpoint: PUT /expenses/12345/supplier-invoice

Payload แบบเปลี่ยนไฟล์

{
"documentDate": "2026-03-21",
"documentSerial": "INV-2026-00001-R1",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"contactTaxId": "0107536000756",
"contactBranch": "สำนักงานใหญ่",
"taxForm": 1,
"vatableAmount": 5000.00,
"vatAmount": 350.00,
"file": {
"fileName": "corrected-invoice.pdf",
"base64Data": "JVBERi0xLjUK..."
}
}

Response (200 OK)

{
"code": 0,
"status": true,
"message": "",
"data": {
"id": 11223,
"documentDate": "2026-03-21T00:00:00",
"documentSerial": "INV-2026-00001-R1",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"contactTaxId": "0107536000756",
"contactBranch": "สำนักงานใหญ่",
"taxForm": 1,
"vatableAmount": 5000.00,
"vatAmount": 350.00,
"supplierInvoiceStatus": 3,
"createdOn": "2026-03-20T10:30:00",
"modifiedOn": "2026-03-21T09:15:00",
"attachments": [
{
"mediaId": 4522,
"fileName": "corrected-invoice.pdf",
"mediaType": 2,
"url": "p2xrst9_9876543210_21032026.pdf",
"uploadedOn": "2026-03-21T09:15:01"
}
]
}
}

Response อัปโหลดไฟล์ล้มเหลว (200 พร้อมคำเตือน)

{
"code": 70000,
"status": false,
"message": "Supplier invoice updated but file replacement failed.",
"data": {
"id": 11223,
"documentSerial": "INV-2026-00001-R1",
"supplierInvoiceStatus": 3,
"attachments": []
}
}

GET ดึงข้อมูลใบกำกับภาษีซื้อ

ใช้ endpoint GET /{documentType}/{id}/supplier-invoice เพื่อดึงข้อมูลใบกำกับภาษีซื้อที่แนบอยู่กับเอกสาร ไม่ต้องส่ง body

เงื่อนไขของเอกสารต้นทาง

เงื่อนไขผลลัพธ์เมื่อไม่ผ่าน
เอกสารต้องมีอยู่ในระบบและอยู่ในบริษัทเดียวกัน404: Document not found (code 190000)
เอกสารต้องไม่ถูกลบ404: Document not found (code 190000)

ตัวอย่าง

Endpoint: GET /expenses/12345/supplier-invoice

Response P.P.30 (200 OK)

{
"code": 0,
"status": true,
"message": "",
"data": {
"id": 11223,
"documentDate": "2026-03-20T00:00:00",
"documentSerial": "INV-2026-00001",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"contactTaxId": "0107536000756",
"contactBranch": "สำนักงานใหญ่",
"taxForm": 1,
"vatableAmount": 5000.00,
"vatAmount": 350.00,
"supplierInvoiceStatus": 3,
"createdOn": "2026-03-20T10:30:00",
"modifiedOn": "2026-03-20T10:30:00",
"attachments": [
{
"mediaId": 4521,
"fileName": "invoice.pdf",
"mediaType": 2,
"url": "q1bktr2_1234567890_20032026.pdf",
"uploadedOn": "2026-03-20T10:30:01"
}
]
}
}

Response P.P.36 (200 OK)

{
"code": 0,
"status": true,
"message": "",
"data": {
"id": 11224,
"documentDate": "2026-03-20T00:00:00",
"documentSerial": "INV-2026-00002",
"contactName": "บริษัท สิงห์ มหาชน จำกัด",
"taxForm": 3,
"vatableAmount": 8000.00,
"vatAmount": 560.00,
"supplierInvoiceStatus": 9,
"createdOn": "2026-03-20T10:30:00",
"modifiedOn": "2026-03-20T10:30:00",
"attachments": []
}
}

Response ไม่มีใบกำกับภาษีซื้อ (200 OK)

{
"code": 0,
"status": true,
"message": "",
"data": null
}

DELETE ลบใบกำกับภาษีซื้อ

ใช้ endpoint DELETE /{documentType}/{id}/supplier-invoice เพื่อลบใบกำกับภาษีซื้อออกจากเอกสาร ไม่ต้องส่ง body

เงื่อนไขของเอกสารต้นทาง

เงื่อนไขผลลัพธ์เมื่อไม่ผ่าน
เอกสารต้องมีอยู่ในระบบและอยู่ในบริษัทเดียวกัน404: Document not found (code 190000)
เอกสารต้องไม่ถูกลบ404: Document not found (code 190000)
ต้องมีใบกำกับภาษีซื้อแนบอยู่แล้ว400: Supplier invoice not found (code 190000)
supplierInvoiceStatus ต้องไม่เป็น CreatedBatchFiling (5), NoRefund (7), WaitingToPayPP36 (11) หรือ AwaitingTaxReceipt (13)400: Cannot delete supplier invoice in current status (code 70005)

ตัวอย่าง

Endpoint: DELETE /expenses/12345/supplier-invoice

Response (200 OK)

{
"code": 0,
"status": true,
"message": "Supplier invoice removed."
}

ผลลัพธ์หลังลบสำเร็จ

รายการผลลัพธ์
ใบกำกับภาษีซื้อถูกลบออกจากเอกสารต้นทาง
supplierInvoiceStatus ของเอกสารต้นทางเปลี่ยนเป็น Awaiting (1)
สถานะของเอกสารต้นทาง (เช่น Approved)ไม่เปลี่ยนแปลง
warning

หากการสร้างใบกำกับภาษีซื้อ (POST) ทำให้เอกสารเปลี่ยนสถานะจาก Awaiting เป็น Approved การลบใบกำกับภาษีซื้อจะ ไม่ย้อนสถานะกลับ