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

ข้อมูลอ้างอิงชนิดเอกสาร

ชนิดเอกสารขายและเอกสารซื้อทั้งหมด สถานะของแต่ละชนิด และการเปลี่ยนสถานะที่อนุญาต

PATCH …/status รับเฉพาะสถานะที่เปลี่ยนได้จากสถานะปัจจุบันของเอกสารนั้น ค่าอื่นจะได้ 400 พร้อม errorCode: "InvalidStatusTransition" และไม่มีอะไรเปลี่ยน หน้านี้คือแผนที่ทั้งหมด

ชนิดเอกสารขาย

รหัสเอกสารหมายเหตุ
QTใบเสนอราคาจุดเริ่มต้นของสายงานขาย
SOใบสั่งขายคำสั่งขายที่ยืนยันแล้ว ยังไม่ออกใบแจ้งหนี้
IVใบแจ้งหนี้ / ใบกำกับภาษีเอกสารที่สร้างลูกหนี้
REใบเสร็จรับเงินรับ bankId ได้
CSขายสดรวมใบกำกับภาษีและใบเสร็จในฉบับเดียว รับ bankId ได้
CNใบลดหนี้ลดยอดที่ลูกค้าต้องชำระ
DNใบเพิ่มหนี้เพิ่มยอดที่ลูกค้าต้องชำระ
DPเอกสารมัดจำมีอยู่ใน ABSERP แต่สร้างผ่านขั้นตอนเงินมัดจำเท่านั้น ไม่ใช่ผ่าน POST /sales/documents หรือ POST /sales/convert

สถานะของเอกสารขาย

draft, sent, approved, rejected, confirmed, processing, completed, partial_paid, paid, overdue, converted, cancelled, voided

ไม่ใช่ทุกสถานะที่ใช้ได้กับทุกชนิด ให้ยึดตารางด้านล่างเป็นข้อสรุป

การเปลี่ยนสถานะที่อนุญาต (ฝั่งขาย)

ชนิดจากเป็น
QTdraftsent, cancelled
QTsentapproved, rejected, cancelled
QTapprovedconverted, cancelled
SOdraftconfirmed, cancelled
SOconfirmedprocessing, converted, cancelled
SOprocessingcompleted, cancelled
IVdraftsent, cancelled
IVsentpaid, partial_paid, overdue, cancelled
IVpartial_paidpaid, overdue
IVoverduepaid, partial_paid, cancelled
IVconvertedpartial_paid, paid
REdraftcompleted, voided
REcompletedvoided
CSdraftpaid, cancelled
CSpaidvoided
CNdraftcompleted, voided
CNcompletedvoided
DNdraftcompleted, voided
DNcompletedvoided

วิธีอ่านตาราง: ใบแจ้งหนี้ไปจาก sent เป็น paid ได้โดยตรง แต่ย้อนกลับเป็น draft ไม่ได้ ส่วนใบเสร็จรับเงินมีเพียง completed หรือ voided ไม่มีสถานะ "ชำระแล้ว" เพราะใบเสร็จ คือ การชำระเงิน

สถานะ converted ถูกตั้งโดย POST /sales/convert ไม่ใช่โดยคุณ

ชนิดเอกสารซื้อ

รหัสเอกสาร
PRใบขอซื้อ
POใบสั่งซื้อ
GRใบรับสินค้า
PIใบแจ้งหนี้ซื้อ
PVใบสำคัญจ่าย — รับ bankId ได้

สถานะของเอกสารซื้อ

draft, pending, approved, rejected, sent, acknowledged, partial_received, fully_received, posted, matched, paid, cancelled

การเปลี่ยนสถานะที่อนุญาต (ฝั่งซื้อ)

ชนิดจากเป็น
PRdraftpending, cancelled
PRpendingapproved, rejected
PRapprovedcancelled
POdraftsent, cancelled
POsentacknowledged, cancelled
POacknowledgedpartial_received, fully_received, cancelled
POpartial_receivedfully_received
GRdraftposted, cancelled
GRpostedcancelled
PIdraftmatched, cancelled
PImatchedapproved
PIapprovedcancelled
PVdraftapproved, cancelled
PVapprovedpaid
PVpaidcancelled

GR → posted คือจังหวะที่สต็อกและต้นทุนเฉลี่ยเคลื่อนไหวจริง ก่อนหน้านั้นใบรับสินค้าเป็นเพียงเอกสารร่างที่ไม่มีผลต่อสินค้าคงคลัง

สถานะของเรื่องเบิกค่าใช้จ่าย

draft, submitted, needs_revision, approved, rejected, paid, cancelled — เปลี่ยนผ่าน endpoint เฉพาะที่ระบุไว้ในเรื่องเบิกค่าใช้จ่าย ไม่ใช่ผ่านฟิลด์สถานะ

จัดการเมื่อการเปลี่ยนสถานะถูกปฏิเสธ

ให้อ่านสถานะปัจจุบันก่อนตัดสินใจว่าจะส่งค่าใด

bash
status=$(curl -sS "$ABSERP_API_URL/openapi/v1/sales/documents/41" \
  -H "Authorization: Bearer $ABSERP_API_KEY" | jq -r '.status')

if [ "$status" = "draft" ]; then
  curl -X PATCH "$ABSERP_API_URL/openapi/v1/sales/documents/41/status" \
    -H "Authorization: Bearer $ABSERP_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "status": "sent" }'
fi

ให้ถือว่า InvalidStatusTransition หมายถึง "มีคนเปลี่ยนสถานะเอกสารนี้ไปแล้ว" ไม่ใช่ข้อบกพร่องของระบบ ควรอ่านเอกสารใหม่แล้วปรับการทำงานตาม ไม่ควร retry คำสั่งเดิมซ้ำ

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

อ่านต่อที่ ข้อมูลอ้างอิงชนิดข้อมูล