จัดการใบกำกับภาษีซื้อ (CRUD)
สร้าง แก้ไข ดึงข้อมูล และลบใบกำกับภาษีซื้อที่แนบกับเอกสารค่าใช้จ่าย (Expense) หรือเอกสารใบรับสินค้า (Purchase)
Endpoints
| Method | Endpoint | คำอธิบาย |
|---|---|---|
| POST | /{documentType}/{id}/supplier-invoice | สร้างใบกำกับภาษีซื้อพร้อมแนบไฟล์ (Base64) |
| PUT | /{documentType}/{id}/supplier-invoice | แก้ไขใบกำกับภาษีซื้อ (Full Replacement) |
| GET | /{documentType}/{id}/supplier-invoice | ดึงข้อมูลใบกำกับภาษีซื้อของเอกสาร |
| DELETE | /{documentType}/{id}/supplier-invoice | ลบใบกำกับภาษีซื้อออกจากเอกสาร |
{documentType}: รองรับเฉพาะexpensesและpurchasesเท่านั้น{id}:recordIdของเอกสารที่ต้องการแนบใบกำกับภาษีซื้อ
Request Body (POST / PUT ใช้ร่วมกัน)
Required field
| Field | ประเภท | คำอธิบาย |
|---|---|---|
documentSerial | string | เลขที่ใบกำกับภาษีซื้อ |
contactName | string | ชื่อผู้จำหน่าย |
contactBranch | string | สาขาของผู้จำหน่าย |
Field เพิ่มเติม
| Field | ประเภท | คำอธิบาย |
|---|---|---|
documentDate | string (date) | วันที่ใบกำกับภาษีซื้อ (yyyy-MM-dd) หากไม่ระบุ จะใช้ค่า วันที่ออกเอกสารต้นทาง |
contactTaxId | string | เลขผู้เสียภาษีของผู้จำหน่าย บังคับสำหรับ P.P.30 (ต้องเป็น 13 หลัก), ไม่บังคับสำหรับ P.P.36 |
taxForm | number | แบบแสดงภาษี 1 = P.P.30 (ค่าเริ่มต้น), 3 = P.P.36 |
vatableAmount | decimal | มูลค่าก่อน VAT บังคับเมื่อ taxForm = 3 (P.P.36) ต้อง > 0 |
vatAmount | decimal | มูลค่า VAT บังคับเมื่อ taxForm = 3 (P.P.36) ต้อง > 0 |
file | object | ไฟล์แนบ Base64 (สูงสุด 1 ไฟล์) ดูข้อจำกัดของไฟล์แนบ |
เมื่อ taxForm = 1 (P.P.30) ระบบจะใช้ค่า vatableAmount และ vatAmount จากเอกสารต้นทางโดยอัตโนมัติ โดยไม่สนใจค่าที่ส่งเข้ามา
โครงสร้าง field file
| Field | ประเภท | คำอธิบาย |
|---|---|---|
file.fileName | string | ชื่อไฟล์พร้อมนามสกุล เช่น invoice.pdf |
file.base64Data | string | เนื้อหาไฟล์ในรูปแบบ 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 เพื่อแก้ไขใบกำกับภาษีซื้อที่แนบอยู่กับเอกสาร
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) | ถ้ามีไฟล์อยู่แล้ว ไฟล์เก่าจะยัง คงอยู่ ไม่มีการแก้ไข |
ในกรณีที่มีการแนบใบกำกับภาษีซื้อพร้อมไฟล์ (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"
}
]
}
}