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

ลดหนี้ / คืนสินค้า

เมนูนี้ใช้สร้างใบลดหนี้จากใบแจ้งหนี้ โดยเลือกได้ทั้งการคืนสินค้าจริงและการลดหนี้ทางการเงินอย่างเดียว กฎข้อมูล สิทธิ และเงื่อนไขของ Mobile กับ POS Terminal เหมือนกัน ต่างกันเพียงรูปแบบหน้าจอ

จุดเริ่มต้น

แอปจุดเข้าใช้งาน
MobileCreditNoteListCreditNoteDetail หรือกดทำใบคืนสินค้าจากใบแจ้งหนี้
POS Terminalเมนูแบบ split-pane creditNote หรือกด เปิดใบคืนสินค้า จากรายละเอียดใบแจ้งหนี้

รายการจะถูกจำกัดตาม branchId และ whGrpCode ที่เลือก รองรับค้นหา กรองสถานะ รีเฟรช และโหลดเพิ่ม โดยค่าเริ่มต้นเปิดตัวกรอง มีการคืนสินค้า ซึ่งส่ง isReturn=1; ปิดตัวกรองนี้เพื่อดูใบลดหนี้ทางการเงินอย่างเดียวด้วย

ขั้นตอนคืนสินค้าแบบครบถ้วน

  1. เปิดใบแจ้งหนี้และเริ่มแบบร่างใบคืนสินค้า ระบบคัดลอกข้อมูลใบแจ้งหนี้ ลูกค้า บริษัท คลัง พนักงานขาย และรายการสินค้าในใบแจ้งหนี้มาให้ ใบคืนสินค้าเดิมจะโหลดใบแจ้งหนี้ที่ผูกไว้ซ้ำ เพื่อให้ยังเลือกรายการต้นทางได้
  2. เลือก เหตุผล 1 ซึ่งจำเป็นก่อนเพิ่มรายการสินค้าและก่อนบันทึกเอกสาร
  3. เลือกรายการจากใบแจ้งหนี้ ระบบตั้งต้นจำนวน ราคา ยอดเงิน หน่วยนับ คลัง ภาษี และข้อมูลน้ำหนักจากรายการต้นทาง
  4. ระบุประเภทการคืน จำนวนคืน (qtyCN) และยอดลดหนี้ (priceCN) ระบบไม่ยอมให้จำนวนคืนมากกว่าจำนวนในรายการต้นทาง หรือยอดลดหนี้มากกว่ายอดเงินของรายการต้นทาง
  5. บันทึกรายการ หากเอกสารยังไม่มี ระบบจะสร้างเป็น DRAFT ก่อน จากนั้นจะรีเฟรชรายการและยอดรวม
  6. หากเป็นการคืนสินค้าจริง (isReturn = 1) ผู้มีสิทธิ์คลังเลือก Lot/Batch ที่เมนู ตำแหน่งวาง ตัวเลือก Lot มาจาก GET /api/invoices/{invoiceId}?includeLot=true ในฟิลด์ items[].lots ของรายการต้นทางโดยตรง ระบบจะไม่เรียก /api/products/lot และไม่ตรวจสต็อกคงเหลือปัจจุบัน
  7. เมื่อเลือก Lot ระบบบันทึก { lotNo, qty: qtyCN } จำนวนที่บันทึกจึงยึดจำนวนคืนในใบลดหนี้ ไม่ได้ยึดจำนวนที่แสดงของ Lot ในใบแจ้งหนี้ หากมีหลายบรรทัดในใบแจ้งหนี้ที่ใช้รหัสสินค้าเดียวกัน ระบบรวมจำนวนตามเลข Lot เพื่อใช้แสดงตัวเลือกเท่านั้น
  8. เพิ่มรูปหลักฐานหลังเอกสารถูกสร้างแล้ว เมื่อผู้ใช้ยังแก้ไขเอกสารได้ แล้วบันทึกหรือส่งต่อเอกสารตามสิทธิและสถานะด้านล่าง
  9. ก่อนส่ง B1 รายการที่คืนสินค้าจริงทุกรายการต้องมี Lot และต้องติ๊ก Q1/Q2/Q3 อย่างน้อยหนึ่งข้อ อุณหภูมิถูกเก็บเป็นข้อมูลเอกสาร แต่ฝั่งแอปไม่มีการตรวจช่วงอุณหภูมิเพิ่มเติม

กฎ Lot และจำนวนคืน

กฎพฤติกรรมของแอป
แหล่งข้อมูล Lotเรียกข้อมูลใบแจ้งหนี้ด้วย includeLot=true
ตัวเลือก Lotใช้ invoice.items[].lots; แสดง lotNo เป็น Batch พร้อมจำนวนในใบแจ้งหนี้
การตรวจสต็อกไม่มีการตรวจสต็อกคงเหลือสำหรับ flow คืนสินค้านี้ จึงไม่บล็อกเพราะสต็อกปัจจุบันน้อยกว่า qtyCN
จำนวนที่ส่งเมื่อเลือก Lotส่งเท่ากับ qtyCN ของรายการใบลดหนี้เสมอ
คืนสินค้าจริงisReturn = 1; ต้องเลือก Lot ก่อนส่ง B1
ลดหนี้อย่างเดียวisReturn = 0; ไม่ต้องเลือก Lot ก่อนส่ง B1
ตรวจข้อมูลรายการต้นทางqtyCN ต้องไม่มากกว่า qty ต้นทาง และ priceCN ต้องไม่มากกว่า amount ต้นทาง
หลาย Lotหน้าจอปัจจุบันเลือก Lot ได้หนึ่ง Lot ต่อหนึ่งรายการ และส่ง lots ที่มีหนึ่งรายการ

สถานะและการบันทึก

สถานะที่แอปแสดง ได้แก่ DRAFT, NEW, WAITINGCN, INVUPDATE, RECEIVED, APPROVED/APPROVE, CANCELED และ ERRORRECEIVED

ผู้ดำเนินการ / การทำงานผลลัพธ์หรือเงื่อนไข
บันทึกเอกสารใหม่ครั้งแรกสร้างสถานะ DRAFT
ผู้ที่ไม่ใช่ฝ่ายคลังบันทึกและมีรายการคืนสินค้าเปลี่ยนเป็น WAITINGCN
ผู้ที่ไม่ใช่ฝ่ายคลังบันทึกและไม่มีรายการคืนสินค้าเปลี่ยนเป็น NEW
ฝ่ายคลังบันทึกจาก WAITINGCNเปลี่ยนเป็น INVUPDATE
ฝ่ายคลังบันทึกจาก INVUPDATEคงเป็น INVUPDATE
ฝ่ายคลังบันทึกจากสถานะอื่นระบบบล็อกและแจ้งให้รอขั้นตอนคลัง
ส่ง B1เรียก B1 แล้วอัปเดตเป็น RECEIVED เมื่อสำเร็จ
เคยส่ง B1 แล้วส่งซ้ำไม่ได้เมื่อมี datetimeToB1
RECEIVEDการแก้ไขต่าง ๆ เป็นแบบอ่านอย่างเดียวหรือถูกปิดใช้งาน

สิทธิและเงื่อนไข

ค่าด้านล่างเป็น deptCode ทั้งหมด ส่วน user-code ที่ได้รับสิทธิ์ B1 เพิ่มเติมคือ 012142, 012570, 012544, 012051, 012566

ความสามารถสิทธิและเงื่อนไข
เปิดเมนูลดหนี้/คืนสินค้า (Mobile/POS Terminal)-2, 1, 2, 3, 4, 7, 8, 9, 12, 13, 16, 20, 21, 22, 23, 27, 28, 29 หรือ user-code ที่ตั้งค่า override ไว้สำหรับเมนู
สร้างจากรายการ Mobile-2, 1, 2, 4, 7, 8, 9, 12, 16, 22, 28, 29
บันทึกเอกสาร7, 8, 9, 12, 22, 28, 29 และสถานะต้องเป็น DRAFT, NEW, WAITINGCN หรือ INVUPDATE
เพิ่มรายการเอกสารไม่ใช่ RECEIVED และผู้ใช้ปัจจุบันเป็นเจ้าของเอกสาร
แก้จำนวนหรือยอดรายการเอกสารไม่ใช่ RECEIVED, ต้องเป็นเจ้าของเอกสาร และอยู่ใน 7, 12, 22, 28, 29
ลบรายการเอกสารไม่ใช่ RECEIVED และผู้ใช้ปัจจุบันเป็นเจ้าของเอกสาร
เลือกตำแหน่งวาง/Lotเอกสารไม่ใช่ RECEIVED และเป็นรายการคืนสินค้าจริง; แผนก 12, 22, 28 เลือกได้ทุกสาขา ส่วนแผนก 20, 23 เลือกได้เมื่อสาขาที่เลือกมี isMain = false เท่านั้น หรือเป็น user-code override ของ B1; ไม่บังคับว่าเป็นเจ้าของเอกสาร
ช่องตรวจรับของคลัง8, 9, 12, 22, 28, 29; Q1/Q2/Q3 และอุณหภูมิจะอ่านอย่างเดียวหลัง RECEIVED
เพิ่ม/ลบรูปหลักฐานเอกสารถูกสร้างแล้วและยังไม่ใช่ RECEIVED
ส่ง B1เอกสารถูกสร้างแล้ว, ยังไม่ใช่ RECEIVED, ผู้ใช้เป็น 8, 9, 12, 20, 22, 23, 28, 29 หรือ user-code override ของ B1, ไม่มี datetimeToB1, เลือก Lot ครบทุกรายการคืนสินค้า และมี Q1/Q2/Q3 อย่างน้อยหนึ่งข้อเมื่อมีการคืนสินค้าจริง
ลบเอกสารจากรายการห้ามลบเมื่อเป็น RECEIVED, APPROVED หรือ APPROVE; นอกนั้นแผนกยกเลิก -2, 1, 2, 4, 12, 22, 28 ลบได้, สถานะ DRAFT/NEW เจ้าของลบได้, และสถานะ WAITINGCN/INVUPDATE ลบได้ ต้องยืนยันก่อนลบทุกครั้ง

แผนที่ API

การทำงานAPI / service
รายการใบลดหนี้GET /api/credit-notes ผ่าน getCreditNotes พร้อม scope สาขา/คลัง และตัวเลือก status, ค้นหา, isReturn
รายละเอียดใบลดหนี้GET /api/credit-notes/{creditNoteId}
ใบแจ้งหนี้ต้นทางและ LotGET /api/invoices/{invoiceId}?includeLot=true
สร้าง/แก้ไขหัวเอกสารPOST/PUT /api/credit-notes
สร้าง/แก้ไข/ลบรายการ/api/credit-notes/{creditNoteId}/items
บันทึก Lot ที่เลือกPUT /api/credit-notes/{creditNoteId}/items/{itemId}/lots พร้อม lots: [{ lotNo, qty }]
รูปหลักฐานendpoint สำหรับอัปโหลด/ลบไฟล์ของใบลดหนี้
B1endpoint ส่งใบลดหนี้เข้า B1 แล้วอัปเดตสถานะเป็น RECEIVED

ความสอดคล้องของ Mobile และ POS Terminal

ทั้งสองแอปใช้ Lot จากใบแจ้งหนี้ การตรวจรายการต้นทาง การเปลี่ยนสถานะ เงื่อนไขส่ง B1 และสิทธิแผนก/user-code ชุดเดียวกัน Mobile ใช้หน้าจอแบบ stack และ modal ส่วน POS Terminal ใช้ CreditNoteDetailForm ใน split pane โดย POS Terminal เก็บ sourceInvoiceItems ไว้เมื่อเปิดใบคืนสินค้าเดิม เพื่อให้ตัวเลือก Lot ใช้ข้อมูลใบแจ้งหนี้เดียวกัน

เอกสารที่เกี่ยวข้อง